Catfood.Shapefile 3.00

I just released Catfood.Shapefile 3.00 on NuGet and GitHub.

There is a breaking change with bounding boxes. The bounding box returned by the library has been broken since the first version. From 3.00 the correct bounding box is returned, but you can opt into the old behavior by passing BoundingBoxConvention.Legacy to the constructor.

DbfDataReader has replaced OleDb for accessing metadata. This will fix platform support issues for OleDb. It necessitated a move to .NET Standard 2.1, so use Shapefile 2.00 if you need .NET Standard 2.00.

I added support for missing shapes (M and Z variants mostly), and the library will now handle missing files so you can read shapes with just a .shp file if that's all you have.

Catfood Earth for Android 4.51

Catfood Earth for Android 4.51

Catfood Earth for Android 4.51 is now available on Google Play.

The big change is parallax scrolling. If your launcher has multiple pages Earth will now scroll as you swipe. You can control the size of the effect, and you can go back to the original behavior of a single screen-wide image if that's what you prefer.

A cloud selector now allows you to easily move between Global IR and a Global Composite without needing a custom clouds URL. The Global Composite has more detail in daylight areas at the expense of some artifacts from the merging. This is now the default. Global IR is smoother but less detailed.

Location updates every five minutes now instead of hourly, so if you use You Are Here and/or center on your current location this now updates faster. It bothered me that this took a while after a flight. I have also generally tidied up settings to improve clarity and make it easier to configure Earth.

Track Flights to Google Sheets

Flight track from Paris to San Francisco

I built my ideal flight tracker from bitter experience. Planes, of course, leave late or arrive early. They often drop off tracking for an hour or more, especially on polar routes. You might also forget to download a track while exhausted after a long trip and then it's unavailable by the time you remember to go back and look at it.

This Google Apps Script project uses the FlightAware API to make this a hands off process. You just put your flights in a spreadsheet in advance and come home to a folder of tracking data. If a flight stops tracking, the script projects its path on a great circle route to the destination airport. When tracking comes back online the script recomputes the projected data to the new good location, leaving you with the best possible version of the data.

(I'm about to leave on a trip that will take me all around the planet - the third time I will have done this, and hopefully the first with an excessively accurate GPS track as a souvenir).

In Google Drive create a new spreadsheet with a Flights tab, and a folder to store the flight tracks. Sign up for the FlightAware AeroAPI and grab an API key. Check that you're comfortable with the pricing - I find it's pretty reasonable for personal use. Once that's ready, create a Google Apps Script project and paste the following script into Code.gs:

I'm not including the code here, but you'll also need this script for airport locations. Add an Airports.gs file to the same project and paste it in.

Edit Code.gs to add your API key, the configuration spreadsheet, and the folder for flight tracks.

Finally, run the setup function from the Apps Script debugger. You'll be prompted to authorize the script, and a sample row will be added to the configuration spreadsheet in the Flights tab. The script will also be scheduled to run every ten minutes. You can now add upcoming flights to the spreadsheet. Once you've got this far, I recommend adding a test flight to make sure everything is working before tracking something that you care about.

This is the first Apps Script project I've released that is 100% written by Claude Code - I didn't touch a line of it. I'm sharing because of my painful experience with flight tracks that didn't meet my needs, and the extensive product management process of smoking out edge cases and testing until I had a solution that really works. The image above is a test track from Paris to San Francisco (a randomly chosen flight while I was debugging) and it has two sections where data dropped - the end result captures the actual route as far as possible and I'm really happy with the result.

Enjoy, and leave any questions in the comments.

Buffalo

By . Updated on

Power delivery history in Buffalo

Buffalo is a power delivery monitor for Android. It monitors charge level, watts delivered and battery temperature during charging.

This is helpful if you're wondering whether your cable, power bank or charger is working as expected. Android might say 'charging rapidly,' but that covers a wide range of watts and the OS doesn't provide any more details. Buffalo shows how many watts you're getting and charts changes over time.

Buffalo is free and contains no ads. Let me know if you use it.

Because sometimes, buffalos charge...

Updated 2026-09-07 16:31:

Buffalo 1.10 is now on Google Play with support for background monitoring. Just tap the Background chip, plug in, and Buffalo will track until your charging session ends. You'll need to allow notifications the first time you use this new feature.

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

By . Updated on

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.