Röyksopp Profound Mysteries are Profound and Mysterious

I’ve actually been buying CDs. Weird eh? I’ve been listening to them ever since I got an old CD based Hi-Fi system from a charity shop a while back. I just like the sound. And I happened across a folder full of CDs that I’d made for use in the car ages ago. I like the way that music doesn’t sound over-processed and that I can start things playing just by pressing one button, rather than having to put into words what I want to hear and then make the “intelligent” device understand me.

Anyhoo, I discovered that Röyksopp - one of my favourite bands from way back was in the middle of a creative streak and had released not one, but three new albums in the last few months. The series is called “Profound Mysteries”. You can have a play with them (and their videos) here Click on the big logo and pick your track. I had a listen and I decided that I literally wanted to own a piece of this. And, the way things are, I ended up with all three. They have all kinds of different versions, including vinyl.

There are quite a few instrumentals and lots of vocalists I’ve never heard of but who sound amazing. And the whole thing is wonderful. It’s interesting that CDs are still around the same price they were forty years ago. And while Apple now make a lot of their “lossless” versions of music on their platform, it is worth remembering that CDs were lossless from the get go. And they sound superb. You should take a listen.

Canon Dial 35 Review

Bell and Howell added their brand to the Dial version 2

The Canon Dial 35 came out in the 1960’s. It is a cool little half-frame 35mm film camera that got even cooler when featured in “The Prisoner”,

Sidenote: If you’ve not watched “The Prisoner” you really should. It could only have been made in the 1960’s.

The Dial uses a clockwork mechanism to wind on the film and cock the shutter. This makes a very satisfying (and spy like) click and whirr after each shot. The gears that transfer power from the external spring into the body of the camera are prone to getting gummed up. So, if you get lucky, you can bring back to life something sold cheap as “for parts only”. I’ve done this a couple of times. Watch this video to find out how.

The bad news is that I’ve also acquired “differently broken” Canon dials which have proved impossible to fix. But I’m hanging onto them because the lens in the Dial is wonderful and I plan to make an adapter so I can use it on other cameras.

If you are feeling brave (or foolish - sometimes you don’t find out which until afterwards) you can find the service manual here. It tells you everything about taking the camera to bits, although it does mention one or two “special tools” which you might have to come up with. However, the service manual does also contain some diagrams that I think would look great on T-shirts.

Anyhoo, enough background. What is the camera like to use? Very nice. The exposure is automatic. You set the shutter speed and the camera displays the selected aperture using a moving needle in the viewfinder. The viewfinder also shows the current focus distance which you adjust with a small control around the lens. And the pictures? Oh yes, the pictures..

These images are from scans made when the film was developed so they don’t really show the sharpness you can get from the lens in this camera. Two versions of the camera were made. The version 2 improves on the original by adding a hot shoe for a flashgun, slightly wider film speed range and some slight viewfinder improvements. But they didn’t tamper with the lovely design and cracking lens.

If you want to be able to pull something out of your pocket and have everyone go “What on earth is that?” then this camera is for you. But if you want a stylish travel companion that can also deliver high quality pictorial memories (with 72 on a single roll of 36 exposure film) then this might be for you too.

In Praise of Drudgery

I was refactoring some code today and I had to go through a bunch of function calls to give them more sensible names and change their parameters slightly. As I was grinding through the search and replace process it occurred to me that I could probably use a fancy AI powered CoPilot thing to automate the job. But I didn’t. I quite enjoyed the laborious grind through the code. I have some of my best ideas when I’m washing the car or mowing the lawn. I rather like a task which is mildly engaging, but gives my mind time to wander a bit.

I think AI tools that claim to remove boring tasks are missing the point a bit. While I’m checking each replace and making sure it makes sense I’m reinforcing my understanding of what is happening around the code, and also giving time for the back of my brain to get on with planning the next part of the development. If all you think about are the complicated and challenging bits of a project you can end up feeling a bit burned out after a while. A bit of boring work might not be relaxing as such but it can give time for the rest of your thought processes to catch up.

Olympus Pen EE-S

Here’s another cracking little camera that you can pick up for around the price of a video game. This one is the Olympus Pen-EES. It shoots half frame pictures on 35mm film, meaning that you can get 72 pictures on a roll . The exposure is automatic. Just set the film speed (with a maximum speed of 200ASA) and press the shutter button. A very clever mechanism uses an internal meter needle to select between two shutter speeds and a range of apertures. If there is not enough light you get a red flag in the viewfinder and can’t take a picture. It’s exactly the same system as the Olympus Trip 35 which I also like a lot.

The camera has a super sharp little F2.8 lens which you have to focus. This is a bit of a pain (it makes possible out of focus shots) but it does mean that you can get blurred backgrounds if you want.

I reckon the camera has got the exposure pretty much perfect here

Blurred backgrounds are possible

You can use it with a flash, but you will need a bracket for the flash gun

If you want to have a film camera with you all the time this would be a great candidate. Things to bear in mind.

  • Make sure that the exposure works. The camera has two shutter speeds, ker-lick and click. If you point the camera at a bright scene and press the shutter button you should hear a click sound as the shutter fires. A dimly lit scene should produce ker-lick. A blackout should produce a red flag.

  • The camera doesn’t need batteries for the light meter to work, but the selenium cell which it uses can be damaged if it is left in the light for a long time. Cameras that have been kept in a case or have a lens cap have the most chance of still working.

  • The EE-S2 is a slightly newer version which can be set for 400ASA speed which might be useful. But it can be slightly more expensive.

  • There are other EE and Pen variants, some with fixed focus. These are less likely to take a completely blurred shot, but sometimes you like to add some blur.

  • If you half press the shutter button this will lock the exposure. If you want to brighten your shots, point the camera at the ground, half press the shutter, reframe and then take the shot.

  • In flash mode you can set the aperture by hand and the shutter speed is a fortieth of a second. This means that you can use it as a manual camera with a slow fixed shutter speed if you wish.

  • The camera takes “portrait” orientation pictures (see above). These are all the rage in SnapTock and TickChat.

If you are looking for something bomb-proof to start your photography journey I’d recommend a Pen EES. I think they are super stylish, they seem to be coming down in price a bit at the moment (that’s how I got mine) and they tend to be reliable.

The Wrong Kind of Magic at the Hardware Meetup

Arthur C. Clarke memorably wrote that “Any sufficiently advanced technology is indistinguishable from magic”. This is especially true when it breaks. We have robots that can talk perfectly, for hours and hours on a network. Then we bring them and their network into the Hull Makerspace and they break. Not completely, or reliably, but enough to make Robot Rugby an impossibility.

We had some long and earnest discissions this evening. Test code was written. Brute force algorithms were created to force hardware resets on recalcitrant robots. No dice. The only thing that seemed to work was moving the network device further away from the robot itself.

Magic. Just the wrong kind. But it is not going to beat me. I will win. If I have to write my own MQTT client to do it…..

Mind you, dinner was nice. The next meetup will be on the 15th of October.

The Art of Code Instrumentation

I spent a chunk of today getting an ESP32 version of the Hull Pixelbot software running. Snag was, it was crashing when it tried to fire up the motor drivers. Each motor is controlled by four signals which drive the coils which turn the motor output. So I need eight outputs for two motors. But half way through turning these on the program exploded. I could have hooked up a debugger and stepped through the code but this is quite a slow business. So instead I did this:

void initMotorHardware()
{
  Serial.printf("Motor initialisation 1\n");
  pinMode(motorSettings.lpin1, OUTPUT);
  Serial.printf("Motor initialisation 2\n");
  pinMode(motorSettings.lpin2, OUTPUT);
  Serial.printf("Motor initialisation 3\n");
  pinMode(motorSettings.lpin3, OUTPUT);
  Serial.printf("Motor initialisation 4\n");
  pinMode(motorSettings.lpin4, OUTPUT);
  Serial.printf("Motor initialisation 5\n");

  pinMode(motorSettings.rpin1, OUTPUT);
  Serial.printf("Motor initialisation 6\n");
  pinMode(motorSettings.rpin2, OUTPUT);
  Serial.printf("Motor initialisation 7\n");
  pinMode(motorSettings.rpin3, OUTPUT);
  Serial.printf("Motor initialisation 8\n");
  pinMode(motorSettings.rpin4, OUTPUT);
  Serial.printf("Motor initialisation 9\n");

  leftTimer = timerBegin(0, 80, true);
  Serial.printf("Motor initialisation 10\n");
  timerAttachInterrupt(leftTimer, &onLeft, true);
  Serial.printf("Motor initialisation 11\n");

  rightTimer = timerBegin(1, 80, true);
  Serial.printf("Motor initialisation 12\n");
  timerAttachInterrupt(rightTimer, &onRight, true);
  Serial.printf("Motor initialisation 13\n");
}

The posh name for this is “code instrumentation”. I call it “lobbing in lots of print statements”. When I ran the program the device crashed just after step 6. So I instantly knew which of the pins I really shouldn’t be using as an output (it turned out to be one which was connected to the onboard flash memory). I did a bit of digging and found some workable connections and I got all 13 messages. So I discarded all the changes on the source code file to get rid of all the print statements and got on with my life.

I could have wired up the in-circuit debugger, rebuilt all the code for debugging, downloaded the code into the device and then stepped through it until it broke. But I reckon this is quicker. If you have a tricky problem it is worth remembering that adding print statements that help you figure out what is going on is a good idea. You can even (whisper this) do horrible things like print out messages in interrupt handlers. Anything that helps you work out what’s going on is something you can do.

The next step in the project is to make builds for the different devices select different pin assignments. It might also be fun to create a flag variable that is checked after reboot so that the device can produce useful diagnostic information when it fails, rather than just stopping and leaving it to the user to figure out what went wrong. But that sounds a bit like scope creep to me, so I’ll not do it just yet.

Windows Phone has still got it going on

They say it is important to keep in mind how far we’ve come in technology. But I think that sometimes it is a good idea to consider how far we haven’t come as well. In the trip into the garage that yielded my Zune HD I also found a couple of Lumia Windows Phones, including the wonderful 1520 that I got in 2013. It still works fine (although it took a few reboots before it got past a recurring alarm). Even the battery is holding up. I also found a 1020, the one with the amazing camera. That works fine too.

If either of these phones worked like they did in their heyday, with all the apps and integration that are now long gone, I’d be back on them in a heartbeat. Apple AI or no Apple AI. In my opinion the user interface beats the iPhone hands down. All this “Liquid Glass” stuff is really lipstick on a very old pig.

They don’t feel heavy, they don’t feel slow and they don’t feel old. We watch the Apple presentations and then dutifully traipse along to buy the latest upgrades (and I’m as bad as anyone for this) but it seems to me that the fundamentals of my life could be quite easily underpinned by a 12 year old design. There must be something which has moved us beyond what the Lumia can do but at the moment I’m not sure what that is.

Raspberry Pi 500+ First Look

Nicely packed

It was fate. On Wednesday I discovered that I’d earned some some more royalty payments. On Thursday I discovered that Raspberry Pi had released a new keyboard computer, Raspberry Pi 500+. So, one thing led to another (keyboard lighting joke there) and so yesterday it arrived. It’s very nice.

Size comparison

It is slightly larger and a lot heavier than the Raspberry Pi 500. It has proper clicky keys which are backlit If you don’t like the keycaps (and I do) you can swap them out for different ones. You are even given a key puller to remove the existing ones. You can get replacements (but make sure you buy low-profile keycaps or they might not work when you press them). You also get a tool to make it easier to take the computer apart, although bearing in mind it has 16G of RAM and a 256Gb built in solid-state disk I’m not sure why you’d want to get inside.

Use FN + F3 to step through other colours

The backlights work very well. Hold down Fn and press F4 and you can step through a set of different presets. Hold down Fn and press F3 and you can step through colour options for the presets.

There’s even an animated rainbow effect that looks awesome but might be a bit over the top.

Setting up the 500+ is a breeze because the internal hard disk has the Raspberry Pi operating system already loaded onto it. Just turn on the power and work through the very well organised setup. If you fancy something different you can always plug in a MicroSD card to boot from instead.

The machine has the same core components as a Raspberry Pi 5 with 16G of RAM and a 256G hard disk. There is no internal clock battery (boo) but you can buy one and plug it in. There’s no extra cooling, but it doesn’t seem to need it. There is a little internal extra in the form of a PICO which looks after the keyboard mapping and light display.

You can get direct access to the keyboard from Python. There’s a program which you can install and use to configure the keyboard from the command line. You can find instructions here. If you want to get your hands properly dirty you can write programs that interact directly with the keyboard lights. You can find all the source you need here. I’m looking forward to spending more time with the machine and making my own programs that use the coloured keys.

The Raspberry Pi 500+ is a lot more expensive than the Pi 500, at around twice the price. For that you get oodles of memory, an SSD, clicky keys and key lighting. I really like typing on the new keyboard. If you plan on spending a lot of your time typing you might find it is worth it for that alone. I wish the 500+ had a bit more personality though. It is just a minimal keyboard with sockets on the back. Of course you can add your own personality with keycaps and colours, but a strip along the bottom proclaiming its origins wouldn’t have come amiss. But I’m glad I got one and I’m looking forward to spending more time with it.

Web Security and Wasm at The Tech Sessions

We had a couple of great talks at the Tech Session yesterday. If you are in the Hull area you should keep an eye on what they are doing. You can find them here. The first talk was from John Smith (yes, that is is real name). It had the title “Your cloud got hacked, and they like it”. John is a senior security architect and did great job of explaining just how vulnerable cloud applications are to bad actors. He put the bad actors into categories, from the “Chancer” (there for the money, only knows how to use freely available tools) all the way up to “Ghost” (has the tools, skills and persistence to live in your systems indefinitely without being detected). Things I took away from the talk:

  • There are freely available tools that make it easy to do things like search GitHub repositories for keys to online resources. Use them yourself to see if you are vulnerable. Start with GitLeaks and remember that the bad guys use these all the time.

  • Avoid using long term credentials. And change them regularly - like your underwear.

  • Monitor your resource usage to detect changes. And set limits.

  • Don’t have “one ring to bind them all”. Put different resources under different accounts.

  • Code is a depreciating asset. You must budget for the effort needed to keep it up to date and secure (and to test for security).

  • Open source can be dangerous. Bad actors will target tools used by millions of applications to inject malware into your systems.

  • Developer systems in a company are the holy grail for hackers. They usually have lots of extra permissions and interesting source files on them.

  • At the end of the day it is all about Risk (how surprising). Actively attack the security risks you are running, and keep looking for new ones.

Next up was a talk from Joe Axon This content was a little more relaxing (at least for me) but no less interesting. Joe was talking about using Web Assembly (Wasm) to write games that can run on your machine in your browser. Running programs in your browser usually means JavaScript, which is a great language but not really good for games. JavaScript is a scripting language. It contains lots of high level abstractions and behaviours that are kind of hard to convert into simple machine code. Web Assembly (or Wasm) is a simple stack based language which, from the examples Joe showed us, is very close to what hardware does. This makes it very easy to convert into native machine code that would run at much higher speed. Things I took away from the talk:

  • Wasm is stack based and looks like assembler to me. The text format (i32.add, etc.) is deliberately low-level and easy for humans to read if you’ve seen assembly before.

  • Wasm looks very easy to convert into machine code.

  • It supports integers, floats and blocks of data (although the are now SIMD - single instruction, multiple data vectors too). Anything else you have to structure yourself.

  • You have to do all your input and output (including the display) by passing blocks of data between Wasm programs and JavaScript. The code to do this looks easy to use, but comes at a price in terms of performance.

  • You can get compilers that take most high level languages you’ve heard of and convert them into Wasm - making this an interesting way getting things like C++ or Rust to run in a browser at a sensible speed

  • There is a tool (KNI) that can take XNA games (written for MonoGame) and, after a bit of fettling, create Wasm code that runs at speed in the browser.

So, after a really interesting evening I drove home thinking about scanning my repositories and porting some of my old games to the web. Great stuff.

Jurassic World for Microsoft Flight Simulator

The Jurassic World plugin for Microsoft Flight Simulator is bit more expensive than the Humber Bridge one I mentioned earlier. But you do get a lot more stuff to look at, including a complete archipelago to fly round complete with wandering dinosaurs. It all looks great and we had a lovely time last night flying around in helicopters. We’ll be back again next week. Well worth a look.

Tech Sessions on 25th September at Hull University

Tech Sessions are great fun. And there’s usually free food and drink. You get to meet up with a bunch of tech folk and learn something. The next one is on Thursday this week and s all about WebAssembly & Cloud Attack Stories.

Joe Axon will be talking about high performance computing and browser based game development using WebAssembly. Then John Smith will describe how things go wrong when cloud installations aren’t as secure as their operators thought they were.

I’ll be there, taking notes. The sessions start around 6:30 pm and are in the Brynmor Jones Library at Hull University. You can sign up here.

Liquid Glass - Thanks but no thanks

First reaction to Apple’s new “Liquid Glass” display: “That’s pretty”

Second reaction to Apple’s new “Liquid Glass” display: “I wonder how you can turn it off”

Note to graphics developers who have impressed themselves with their ability to overlay text on a background image and make the background blurry: There’s a reason why newspapers, magazines and books are not printed on semi-transparent paper. It’s because a distracting background makes something much harder to read.

LCD Panel coming to Connected Little Boxes

I thought it might be useful to add an LCD panel to the Connected Little Boxes. It took a bit longer to get it working than I expected, mainly because the library I’d been using wasn’t compatible with the suspiciously cheap LCD panels that I’d bought.

If you have problems getting your PCF8574 driven LCD2004 panel working with a PICO I would suggest that you do two things:

  • Remove the jumper on the back of the PCF8574 board and connect the LED pin to the VBUS pin on the PICO so that the backlight is powered properly.

  • Use this library to drive the device. It’s the only one I’ve found that works.