-
Seek, and Ye Shall Find
This site has a search box now. It runs on Pagefind, and it needs no server. My first test found every page on the site, which is not what a search is for. This is how we taught it to say “no results”.
-
Same Pictures, an Eighth of the Weight
The images on this site weighed 43.6 MB. Now they weigh 5.2 MB, and I cannot see the difference. The build pipeline did most of the work. The surprise for me was in my own Web Editor, which had a bug I had never noticed.
-
Changelog: 26 September to 12 October
72 releases across 23 apps. Jorvik Daily News gets keyboard navigation, on-device translation and Boss Mode. WindowPin can crop a pin to part of a window. ActiveSpace can name spaces. Nomen is new. In every app, the About and Settings windows now open on the current space. MenuTidy users must check for updates manually once.
-
Announcing Nomen: AI Screenshot Renamer
Every screenshot on my Mac was called Screenshot, followed by a timestamp. Nomen renames a screenshot by what it shows, a few seconds after I take it, using the model Apple now ships inside macOS, so nothing leaves the Mac.
-
Changelog: Giving Way
Two hundred and twenty-six releases across twenty-five apps since the last changelog, and most of them are about macOS 27. Several of my cleverest tricks stopped working on the day it shipped, and the fix, more often than not, was to stop being clever and let macOS do the job itself. Plus a newspaper that no longer needs a browser to show you an article, three screensavers that were arguing with themselves, and one thing you may need to do by hand.
-
You Can't Assert A Shadow
Only one of my forty-six repositories has a test suite. That looks like negligence until you count what is there instead, which is nearly seven thousand lines of code whose only job is to render something and let me look at it. Then SQLite told me that the two most rigorous ways of testing software actively work against each other, and I stopped feeling defensive and started looking for where my way goes blind.
-
Not Invented Here
I built SpaceMan because nothing else remembered my window arrangement the way I wanted. Somebody else has since built a better version of it, so SpaceMan is retired and I am contributing to the app that beat it. The price of admission is the one idea in SpaceMan I was actually proud of.
-
The Gatekeeper and The Nurse
Yesterday's dark-mode project left me with a contrast measuring script wired into nothing. So I hooked it up to the build script and my estate dashboard. The website now benefits from both a guard and a health check: helping keep it as accessible as it can be.
-
The Dark Mode That Found Five Older Bugs
Adding a dark mode to this site took about an hour, because I had built the stylesheet on colour tokens months before I had any use for them. Wanting it to switch automatically was the interesting part: the operating system already does the clever bit, and the specification has closed off the obvious workaround for the platforms that do not. Then the new palette exposed the old one, which had been failing accessibility contrast in five places since launch, along with an icon I got wrong four times and a build script that had been quietly lying to a hundred pages.
-
I Love Open Source Software Development
I released MenuTidy, QuitProtect and RainbowApple when I thought they were finished. Then people I had never met arrived on GitHub with bug reports, feature requests, translations and code — including one pull request I closed that still led me to a serious fault of my own. All three apps are better for it, and this is a thank-you to the open source community for lending me the one thing I cannot contribute to my own projects: another pair of eyes.
-
Changelog: Browsers, Rainbows, and an Honest Token
Six releases across four apps since the last changelog — a note that writes its own first line, a thread pool quietly starving in the background, five browsers a README had been promising for months, a rainbow that learned to ride the menu bar, and an error panel that stopped blaming your credentials for the weather.
-
Announcing Kairos: launchd Without the XML
macOS already ships an excellent scheduler. It survives reboots, handles missed runs, and needs no third-party daemon squatting in your menu bar — and the price of admission is hand-authored XML and a manual page that thinks Sunday is both 0 and 7. Kairos is the front end launchd never got.
-
Announcing Save Cannes: Your Films Are the Screensaver
There used to be a screensaver called Save Hollywood that played your own films when the Mac went idle, and it was quietly one of the best things on the platform until macOS broke it. Save Cannes is my tribute act — rebuilt from scratch, free, and honest about the one thing a modern screensaver can no longer be.
-
Changelog: Citadel 1.0.1
Two fixes, both found by pointing the engine at something it was never built for. Creatures were dissolving into any hot surface behind them — not just fire, but an amber door lamp would do it. And more than sixteen fireballs at once killed the game outright, which a room full of exploding drums can absolutely arrange.
-
Changelog: one fix, twenty-one apps
If you use more than one or two of these apps, your Mac has spent the week updating them. Most of it is a single fix to the shared settings pane, which for as long as it has existed opened at a fixed size with a scroll bar however much room the display had. Plus permission rows that stopped lying, a band of about twenty points beside the notch that macOS does not admit exists, and real features in Lookout, QuitProtect and ASCII Saver.
-
Changelog: Lookout 1.1.0
Lookout watches GitHub so I don’t have to. It sat silent for three days while three pull requests waited on one of my own repositories — not because it was broken, but because of one word in a search query. It also had a countdown that had displayed ‘in 0 sec’ since the day it shipped.
-
Changelog: ASCII Saver 2.0.1
The camera stayed on after the displays went dark. Thirty-one minutes of it, on my own machine, with the screen black and the green light on. The fix was four lines. Convincing myself it was actually running took considerably longer, and that part is the more useful story.
-
Changelog: QuitProtect 2.0.9, 2.1.0 and 2.2.0
Three releases in a day, prompted by the first substantial contribution anyone has ever sent me. QuitProtect now speaks Simplified Chinese, has an optional overlay telling you what to do next, and no longer claims to be protecting you when it isn’t. That last one was mine, and I only found it because I was reading someone else’s code.
-
Changelog: RainbowApple 2.0.11 and 2.0.12
Two releases in twenty minutes, for two bugs that had been sitting in plain sight. The rainbow logo was vanishing whenever certain apps took focus — not a drawing bug but a measuring one. And the six colours had been in the wrong places since the very first build, because I’d striped the wrong rectangle.
-
Changelog: ASCII Saver 2.0
ASCII Saver has stopped being a screensaver. It’s an ordinary app now, which sounds like a downgrade and isn’t — it’s the only way the thing could ever hold its own camera permission. Out go a second process, a shared-memory frame buffer and a settings file in /tmp; in come automatic updates, a real Settings window, and two caveats you should read before you upgrade.
Notes
Development notes, technical write-ups, and things I've learned along the way.
←Older
Page 1 of 4