Fortune Cookies for Android 2.00

Solipsists of the World... you are already united.

Fortune 2.00 is rolling out on Google Play.

I've been asked to support copying the current fortune. A new menu allows you to both copy and share. I've also been asked to allow picking fortune categories. The installed list has increased from around 30,000 to almost 50,000 fortunes and there are settings to pick which cookie files to include.

The notification now includes more of the fortune text so in many cases you can read the full fortune without opening the app.

Finally the design has been refreshed and the fortune is auto-sized so that shorter texts are more readable.

Fortune brings UNIX style fortune cookies to Android. You'll get a random fortune delivered some time between 8 and 9am every day, or you can just browse random fortunes in the app if you've run out of other things to doom scroll.

Catfood Earth for Android 4.42

Composite visible and infra-red clouds

Catfood Earth 4.42 for Android is rolling out on Google Play.

With this release it's now possible to set a custom cloud layer download URL, like the composite experiment linked to from this post. Clouds are also lighter by default - you can increase transparency in settings if you'd prefer them to be less prominent. Finally, the Catfood Earth launcher has been redesigned to clarify the setup process.

Existing users will get this update automatically. If you have Android without Catfood Earth you should give it a try.

Aurora and Wake Word Detection

Aurora Wake Word Detection

Aurora is my open source Rasperry Pi voice assistant, based on the OpenAI Realtime API. I just shipped native wake word detection, including a trained model (Aurora), a training pipeline and on-device support for gathering training data from your long suffering household ("Aurora, learn how I say your name").

When I first built this project I used Porcupine from Picovoice. They had a free one seat version that worked great for this, but sadly they're pulling the plug at the end of this month. I can't afford their commercial license for an open source assistant so I urgently needed a replacement.

OpenWakeWord is the obvious replacement and seems quite popular with the Home Assistant community. The training notebook does not work though, and some alternatives suggested in the comments wouldn't run for me either. Maybe I'll go back to this if it comes back to life but it didn't look like a good bet for now.

I turned of course to Claude Code. To start with it agreed with the OpenWakeWord intuition but after some persuasion it put together a small CNN (looking at a spectrogram of the current audio capture) and trained and tuned it based on synthetic data. This worked surprisingly well. I'm in the process of fine tuning the model with samples captured from the Raspberry Pi from various family members (kicking off a data capture session is now a feature of the assistant). The detector is a drop in replacement for Porcupine so if you're looking to replace Picovoice that would be a good starting point.

If you use Aurora upgrade to the latest code and then follow the instructions in .env.example to migrate from Porcupine. You can use aurora.onyx to get up and running immediately, or see the wake_word folder readme to train your own from scratch. If you use the Raspberry Pi sample collection copy those files into the data folder and retrain to improve the model.

Code Signing Inflation

A monk illuminates some code

I have been in a Windows software writing funk for the past year because my code signing certificate expired and during those happy three years of signing the industry changed beyond all recognition.

Code signing, or Authenticode, proves that my software came from me and hasn't been altered (as long as I'm not careless with my private key, and some alteration is possible). Windows is increasingly hysterical about running unsigned installers, and for good reason, so I have always signed anything I distribute widely.

For a long time I used K Software, who resold Comodo certificates (now Sectigo), and that cost me $70 a year with a 3 year certificate. K Software doesn't seem to exist any more, and Sectigo's list price is $715 / year. I'm not paying that to distribute free software. Part of the cost increase is that private keys either need to be on secure devices or hosted. Not a bad idea as compromised keys are an obvious disaster. There are some cheaper resellers but any palatable certificate cost seems to require a paid service for the actual signing.

When I last looked at this Microsoft had an interesting option on Azure (Artificat Signing) but it was only open to companies with three years of history, and so I gave up and worked on Android and web apps instead. This has now changed, and you can get an individual code signing service up and running for $10/month. I don't love it, but I'm willing to pay. There is a 'quick start' guide to get you up and running. I highly recommend pasting this into the LLM of your choice for a walkthrough, as it's a miserable process. I have got it going though and released a Catfood Earth update. Because it's a new certificate I'm starting from scratch on anti-virus reputation, unavoidable.

A few tips. Make sure your billing account for Azure is the name you want on the certificate first. Azure is a beast - full of things like progress for activating a service that ends up with it in an unactivated state until you refresh the page, or a mandatory selection on step 2 of a process that blocks you from completing step 1. I don't feel that this is a service they're excited to provide. Identity verification was online and fast which was pleasant (based on a drivers license for me). The person plan requires you to be in the US or Canada and supports up to 5,000 signatures a month.

Catfood Earth 4.41

By . Updated on

Time Zone Color Map

I just released Catfood Earth 4.41 for Windows: download here.

This version includes version 2026b of the IANA time zone database. British Columbia just switched to permanent daylight savings time and you'll need this update if that impacts your locations or other settings.

I also made a small change to better support high resolution displays. The font size is now automatically scaled. This started affecting me with a high resolution laptop that I dock to some low resolution monitors causing the font size to be wrong half the time. You might need to tweak your font size after installing this update.

Unfortunately I also switched my code signing certificate (more here) with this release. If Windows blocks install then go to Windows Security, App & browser control, Smart App Control settings and then switch off Smart App Control temporarily while you install. This should stop being a problem as Windows learns to trust the new certificate.

Update AWS EC2 inbound security group rules when your IP address changes

By . Updated on

AWS IP Update, a Windows Tray application that automatically updates EC2 inbound security rules when an IP address change is detected.

I just released AWS IP Update, a Windows Tray application that updates inbound security group rules on AWS EC2 when your IP address changes.

This has been vaguely on my to-do list for years. I didn't bother because I knew how tedious it would be from that time I pulled Azure metrics into Google Data Studio (now Looker) via Apps Script. This whole thing was banged out by Claude Code in five volleys, and I think I wasted those because it could probably have single-shotted it. I did not write a character of code, and it was faster to create than the way I used to get access.

I have a monthly sys admin day where I patch all the things, pull a Google photos archive and run an old fashioned backup to an external hard drive. The hardest part of this psychologically has been getting access to AWS to patch by blog server and pull a backup. My IP address has changed, and I need to log into AWS, find the right settings, look up my external IP address (Google Search used to just show this but it's been broken for ages) and update the EC2 security group. Every other part of the routine is easy, the access part always bums me out. So this is a quick AI tool that not only saves a few minutes a month, it also helps with mood and blood pressure.

Seervo, an LLM Powered Robot

By . Updated on

Seervo LLM AI Robot

I just released Seervo, an open-source LLM-powered robot. The GitHub repo contains source code, a shopping list and 3D files to print the chassis.

Seervo sends an image from its camera to GPT 5.4. The LLM can decide to change the colors of four LEDs and to drive the motors. It has the objective of finding and entertaining humans while avoiding pets at all costs. The video below shows it mostly trying to escape from my dog:

The robot is based on an ESP32 microcontroller with a camera, some motors and a battery. The client code is MicroPython and it talks to an ASP.NET core web service that handles the LLM control calls. You could do everything on the ESP32 but it's easier to tweak prompts and see where it's going wrong with a local server. The server additionally stores memories so the robot can remember what it has been doing recently, and handles memory compaction so any really useful knowledge is retained in the context window.

The code was all written using Claude Opus 4.6. The chassis was designed in OpenSCAD using ChatGPT - something that has been a struggle before but GPT 5.4 can iterate on a 3D model with pretty vague directions.

Let me know if you build one!

Updated 2026-04-05 23:22:

Added an HC-SR04 ultrasonic distance sensor so the robot can now tell how much clear space there is in front of it. Tuned the instructions to use this data and also with formulae to convert distance and rotation to approximate motor run time. This all makes the robot a lot more confident in its movement.

Workspace Studio and Read-only Sheets

By . Updated on

A Google Workspace Studio Flow

As an Apps Script addict I was excited to experiment with Google Workspace Studio. It's a no code automation tool in the typical flowchart style with the addition of Gemini, so you can use AI for decisions and text manipulation. Unfortunately it failed hard on my first task.

I have a spreadsheet that pulls in Google Fit data, and another one that combines that with other goals to create an overall lifestyle score. Occasionally I copy data from one sheet to the other and automating this has been on my todo list for years with absolutely no chance of getting to done. Workspace Studio should have made this easy.

Building the flow was straightforward, but the steps that write new data were flagged as being in an error state, although no actual errors were flagged in the configuration for the steps. Opening and closing the flow unsettlingly cleared the errors. I started the flow and hoped for the best, but got this error:

"Couldn't complete. Check that the spreadsheet is private and doesn't use the IMPORTRANGE function."

At first I thought this must be inverted and the sheet needed to be shared in some way... but no, it's true, you can only update a private sheet. Which is useful in a trees falling with no one watching kind of way.

I share this mostly because googling the error came up short (and the AI overview is unhelpfully talking about sharing the sheet). Workspace Studio is only a few months old and hopefully this limitation will be fixed. There are some nice features in preview, like webhooks, raising the prospect of handing over to apps script if the flow can't do quite what you need. This should be a nice piece of the AI automation puzzle as it matures.

Blog Engine Upgrade

By . Updated on

Server Upgrade in Progress

ITHCWY has been running on ASP.NET 4.8 for a long time. I've been putting off the upgrade as the official Microsoft documentation says something close to 'your funeral'. Visual Studio Copilot added a modernization agent. It claimed to have generated a plan, but the file it insisted it had just written was hallucinated. So I rolled up my sleeves and did it the hard way.

Hard is an overstatement. I did some much needed refactoring and jettisoned a bunch of dead code. The regular Copilot (via Claude Sonnet 4.5) was a big help on things that didn't exist any more or needed to be done differently. The new OutputCache refused to disengage until I entirely killed the default and I need to spend some more time there. It seems to matter which order you enable server features which is moderately terrifying but probably doesn't need to be touched often. It's certainly better than poking around in web.config and hoping for the best. If you're reading this then it has been served by asp.net core 10.

Probably some subtle things are broken and it usually takes a while to mop everything up after a migration this big. If you run into any problems please get in touch.

Aurora, the Raspberry Pi Smart Assistant

By . Updated on

Aurora, the Raspberry PI AI Assistant

Aurora is an open source smart assistant designed for the Raspberry Pi and functional on Windows, Mac and anything else that can run Python.

Aurora uses the OpenAI realtime API, and is pretty similar to the advanced voice mode in ChatGPT. The idea is a replacement for Amazon Alexa and Google Home that anyone can build and extend.

I have had this running for nearly a year. It was functional but the code was a mess. OpenAI just promoted their realtime API from beta, and that prompted me to refactor the project and get it into shape for a public release.

While Amazon is slowly rolling out an LLM version of Alexa, I'm not buying another device that just wants to show me ads. I also don't want an assistant that has been engineered to minimize costs. Aurora is an exercise in what is possible using the best models available combined with helpful tools.

The project has a plug-in architecture for tool support, so you can pick and choose what makes sense. This first release supports timers, Perplexity Sonar, Todoist and a kid conflict resolution system that in my house is known as 'cheese night'. I'll be adding more tools over time, and the architecture makes it easy to contribute (please do!).

When I first designed Aurora I used an Adafruit BrainCraft HAT which has a small display and some nice LEDs. This combined with a Raspberry Pi 4 and a couple of speakers makes for a compact assistant. The project contains interface code for this specific setup, and also a generic version that will run anywhere. As with tool support the interface can be extended to support other devices.

Check out Aurora on GitHub, contribute if you come up with a cool tool or UI, and please send me a photo if you build an assistant.

Updated 2025-09-13 21:56:

Added support for the Bay Area 511 API to provide arrival times. You configure an agency and stop ID and then can ask 'when is the next L' and get arrival times. This is really useful for me. There is a new tool calling image state for the Raspberry Pi version and times are now poems based on the timer name.

Updated 2025-09-21 19:44:

Recipe support added. Ask Aurora to cook with you and she will guide you step by step through a recipe.

LIFX light bulbs are also now supported. Add names and IDs to settings and then Aurora can switch lights on and off.

Also added OpenSCAD and STL files for 3D printing a case for the BrainCraft version.

Updated 2026-02-28 18:46:

Upgraded to the new gpt-realtime-1.5 model. Also added a setting so it's easy to go back to the original gpt-realtime if that's what you prefer.

Updated 2026-06-27 23:20:

Added a flash briefing tool. By default this downloads and plays the most recent episode of the BBC Global News Podcast. There is a setting to override this with the RSS feed for the podcast of your choice.

Aurora also now features native wake word detection (more details here). This should work reasonably well out of the box, but you can also train it to better recognize your voice and environmental false triggers. It's also possible to train a new wake word from scratch if you'd prefer a different name.