Wevie Stonder are wonderful

If there’s one thing I’m sure of at the moment, it’s that the world needs more silliness. Stuff that is just daft. Wevie Stonder are silly, but clever too. Their new album, Sure Beats Living, is a hoot (with some very atmospheric touches). It’s a while since I’ve heard a record that made me laugh out loud. And they can build a mean soundscape too.

You owe it to yourself to listen to at least track 9, Customer Services. Splendid stuff. It is as if the Bonzo Dog Doodah Band were back in business and using synths and samplers.

Oh, and have you worked out how they came up with their name yet?

Creating with the Rabbit R1

I’ve been creating with my Rabbit R1. It’s great fun. You tell the Rabbit what you want and then it makes one for you. I asked it this:

I'd like a set of coloured display animations which fill the whole screen. I would like coloured particles, lines, shapes, clouds, each with light trails and a selection of colour palettes. They can aminate into the centre of the screen or across or up and down. When you tap anywhere on the screen a menu of buttons will appear which will let you select colour scheme, speed, pattern type and whether the update will be controlled by audio picked up by the microphone. It should be possible to use the wheel to adjust the sensitivity of the audio input when the audio input is in use. At other times the wheel will adjust the speed of the display. There should also be an option to enter a text message which will be scrolled across the while height of the screen on top of the current display or a clock display which fills the screen. All the text on the screen should be as large as possible and use a colour scheme for maximum legibility. All settings should be retained on the device so that each time the application is started it will have same settings it had when last used.

If you have a Rabbit you can scan this to get the creation

The creation tool (the Rabbit Intern) then asked me what I wanted to target and then chuntered away making it. When it had finished I got a QR code I could scan on a Rabbit device to install the creation, a link to the application (which you can use to have a play with it) and a download link to all the code.


The app is a pretty good reflection of what I asked. It doesn’t seem to store any settings, but it does essentially what I asked it to.

On the right you can see the menu for the app. The buttons let you step through the specified options. I specifically asked for the text in them to be as large as possible because the first application I wrote had button text which was impossible to read.

I had a quick look at the application source code and it seems quite sensible. All the logic ends up in a file in the apps\app\dist\assets folder in one long line of JavaScript code. It’s is quite fun to read.


To create applications (and do other things) you use the Rabbit Interrn mechanism. This is a task based AI assistant. A program created by a task is exposed as a hosted JavaScript application. You can share a link to the app for other people to use. A task doesn’t have to involve writing a program though, it might create a document or presentation. You can also start a task just by discussing your requirements with an agent via the Rabbit device, so in theory you could make something and then use it on your Rabbit.

You get a few free intern tasks with your Rabbit, and you can try making a task for free. Further tasks are rather expensive, at 10 dollars each (3 for 30 dollars) or around 2 dollars each (30 for 70 dollars). However, the price does also include hosting, so you really could make something and then deploy it all in one shot.

The biggest problem with this way of working is that there is no way of iterating your solutions. If you discover something wrong with your creation you can’t ask the intern to update an existing creation with some changes. Instead you would have to add the extra requirements to your description and make a new creation, using up another of your precious tasks. You can wade into your source code and make changes to it, but I don’t know of a way of “round tripping” a modified version so that it is visible on the Rabbit or via their hosting service. This is really sad.

If would be completely wonderful if Rabbit released a plugin for Visual Studio Code that let you grab a creation, fiddle with it and then push it back. As it stands, I think this is a really exciting development for Rabbit owners, and almost an incentive to get a device if you don’t already have one (plus you get the awesome Magic Camera). If nothing else it lets you experiment with turning ideas into code and learn how to explain what you want to generative systems.

Magic Camera Fun and Games

I really love the Magic Camera feature in the Rabbit R1. It turns pictures into delightful illustration. I wondered what would happen if you took a picture in the wrong orientation.

That went well…

The results weren’t pretty. But they were very amusing. Incidentally, if you have a Rabbit you’ve not played with for a while it might be worth getting it out again. The new RabbitOS2 is now available and it is a bit of a game-changer. I’m playing with it at the moment and I’ll report back later.

Using the PICO2 with the Arduino Framework on PlatformIO

The title says it all really. I’m working on my Connected Little Boxes and I really want to run the code on the Raspberry Pi PICO2. Annoyingly, this is not one of those things that “just works”. But it can be done. First you need to make sure that your PlatformIO installation is up to date. Navigate to the PlatformIO tab in the Visual Studio plugins. Then select New Terminal from the options. This will open up a terminal window. Now issue the following commands:

platformio pkg update -g
platformio platform update raspberrypi
platformio run -t clean

Once this has completed we can create a PlatformIO.ini entry for the PICO2 platform:

[platformio]
; uncomment the build that you want to select
;default_envs = rpipico
;default_envs = ESP32_DOIT
;default_envs = d1_mini
default_envs = rpipico2

; other environments go here...

[env:rpipico2]
platform = raspberrypi
board = rpipico2w
framework = arduino

; Use Philhower core (RP2040/RP2350 support)
platform_packages =
  framework-arduino-pico @ https://github.com/earlephilhower/arduino-pico.git
board_build.filesystem_size = 0.5m

This fetches the libraries from the Earle Phillhower site and configures the target device. The system will only have a half a megabyte of data storage, you can increase this size if you wish. When you have built the code you can find the firmware.uf2 file in the .pio/build/rpipico2 folder. Turn on your PICO with the BOOTSEL button pressed so that it pops up a storage device and then drag this file onto device.

upload_protocol = cmsis-dap
debug_tool = cmsis-dap

If you have a Raspberry Pi Debug probe you can add the above lines to the file so that the program will be deployed to the probe. If you want to deploy to the PICO2 (not the Wi-Fi version) just change the board to rpipico2

Polaroid Impulse AF

It should come as no surprise to anyone that I’ve bought a new camera. This one only cost ten quid though. The film for it cost more than that (which reminds me a bit of ink-jet printers).

Anyhoo, the camera in question is a Polaroid Impulse AF which has a sonar based autofocus system. The gold thing in the picture underneath the flash window produces high frequency sound pulses. The camera listens for the echo and then adjusts the lens based on the time it took for the sound to come back. I’ve had a quick go with it and it seems to work quite well.

If you fancy having a go at instant photography I’d strongly advise you get a machine like the one above. I think they have a certain brutalist style which the newer devices lack, and they are available at very low prices. They are good at making the best of instant film, particularly the ones with flashes which also have the “electronic flash” look that everyone likes at the moment.

Super Secret Storage in a PICO

I wanted to do some more work on code I wrote in Micro Python. But I couldn’t find it. Turns out that the latest version was in the PICO2 device inside the light I’d made. This can be a problem when writing code on a device. You end up with the source on the device and nowhere else. Of course you could have a rigorous code management regime that ensures that you extract and store all the code you’ve written at the end of a programming session. Yes, I guess you could do that….

Anyhoo, I managed to get my code back off the PICO2 even though I’d subsequently re-flashed the device with a C++ program. It seems that flashing a C++ program into a device doesn’t overwrite the part of the EEPROM where Micro Python stores files. And installing Micro Python doesn’t wipe the EEPROM at all. So, if you want to store super secret data you can do this:

  • Write a little Micro Python that takes your secret data, does a bit of encryption and drops it into a file on the device.

  • Then reflash the device with a C++ program that does something different and put it into something around the house, perhaps a light.

  • Now, if you want your super-secret data back you just have to load the Micro Python program that decrypts the data and run it.

Anyone who finds your device and takes a look at the EEPROM will just see random rubbish. They’d need to have your program (and maybe a key) to get it back. You could even use public/private key encryption so that you can send data to someone else inside a gadget you’ve made for them.

This technique is not restricted to PICO (although I’ve not tested it). It should work on ESP32 too. I’m sure that there are much better ways of hiding data than this, and I personally don’t have any top secret data to store (although this is of course what any superspy would say…)

Electronics and Broken Wi-Fi at the Hardware Meetup

I really thought I’d cracked it. I thought my shiny new Robot Wi-Fi hotspot would give all my robots squeaky clean connections and all would work.

Not so.

The robots persistently fell off the network. Just like last time. Most annoying. And after a lot of testing back home where they worked perfectly. Oh well. If I had a drawing board this might be a good time to go back to it.

The good news was that we had some impressive stuff on show. Ian had brought in a complete DSP rig which lets him “round trip signals” from a signal generator, through a DSP module and then back into the computer so that he can view the effects of his DSP code. Very impressive and super-useful if you want to tune the frequency response of your system to match particular environments. You can find out more about what he has been up to in Practical Electronics magazine. Meantime Ross was working on Hull pixelbot PICO migration and Brian had brought his robot arena system with him which proved extremely good at ball tracking. Soon all the robots will be “ball aware”. Just as long as I can get the network to, er, work.

The next Hardware Meetup will be on the 17th of September. All are welcome to turn up and discover if whatever changes I’m going to make will fix anything….

The Worst Bugs are by Design

The latest version of PythonIsh is coming along a treat. I spent most of today fiddling with working on the code. And I fixed a silly bug. My new command to send MQTT messages from a Pythonsh program wasn’t working when entered into a program. Although the command worked fine when entered from the terminal. What’s going on? Turns out quite a lot. But first, some background:

Pythonish is a thin wrapper on top of a thing I’ve called HullOS which runs programs that are implemented as two character statements. Some HullOS statements have extra data on the end. For example I have the command:

rtHello World

This is in the “remote” family of commands (that’s what the r means) and it transmits an MQTT message (that’s what the t means). The rest of the command is the message to send (Hello World). There are command families for quite a few letters of the alphabet now. Remote commands are special. They control receipt and storage of remote programs. The rm command says “Don’t perform the statements I’m going to send you, instead store them to run later”. Then the rx command says “I’m done with storing code, lets go back to performing statements”.

When I implemented these commands it occurred to me that it would be silly to allow running programs to initiate remote downloads and whatnot as this would get really confusing really quickly. So, I built the code so that r commands are never added to stored programs.

And then I wrote a bunch of extra r command behaviours which do need to be stored in program code. Idiot me. I’ve fixed it now. I’m not sure what the lesson is here, other than “Don’t do stupid things”. And add big comments on code which behaves differently from the norm.

If you want to follow my journey and have a play with the code (we even have some documentation now!) take a look here.

Gone Flying

We’ve done a lot of fake flying. We have regular meetups where we tour the world in Microsoft Flight Simulator 24. It’s very good. But no substitute for the real thing. Today one of us got to fly a real plane and I went along to take pictures using a variety of cameras and lenses. We were at Beverley Airfield. The weather was great, the conditions were clear (if a bit draughty) and everything passed off without a hitch. The only real problem was that they serve bacon butties for breakfast in the café and we’d already eaten. But we’ll know for next time.

Bought another broken camera

Today we had a bunch of folks around for a game night and were playing “Formula D”. Things were going OK and then I got an e-bay alert about a price reduction on a “mostly working” camera. Which I then bought. And then our car fell to pieces at the next corner. I hope this isn’t an omen.

Side note: Formula D with all the damage and wear options enabled is really hard work.

FreeCAD Tips

I’ve been writing Python programs in FreeCAD for ages. So after the success (hah!) of my Python Shorts I thought I’d make a little resource with some tips based on what I’ve learnt working with it. You can find it at here.

If you run Python programs in FreeCAD you should take a look. If you want to learn how to write Python programs in FreeCAD it tells you how to get started. I’ll be adding more items later.