Writing

2026-11-13 Terminal borders that don't cost a cellA terminal protocol for thin lines on cell edges: borders, rounded corners and gridlines that don't use up rows or columns. Working in Ghostty, with Ratatui demos.
2025-03-09 An ergonomic pattern for SQLx queries in AxumKeep the SQLx pool in Axum state, group queries in a struct, and use FromRef to pass it to handlers.
2023-06-15 Thunderbolt 4 Dock ComparisonA comparison table of Thunderbolt 4 docks: ports, displays, charging, price and warranty.
2023-06-06 AI Article ChecklistThe old spam-solutions checklist, repurposed for articles critiquing AI coding tools.
2023-06-05 The Moon is made of CheeseWhy judging an LLM from a single run misleads, shown by sampling GPT-3.5 completing "The Moon is made of".
2023-01-25 ChatGPT MemesAsking ChatGPT to invent new meme formats, and what came back.
2022-11-05 Programmable IO (PIO) for MIDI with the Raspberry Pi PicoUsing the Raspberry Pi Pico's programmable IO to build a MIDI thru box with up to 25 outputs.
2018-08-27 Introducing JUnit JSON ParamsA JUnit 5 library for parameterizing tests with inline JSON and JSON resource files.
2016-08-03 Installing .NET Core on OSXInstalling .NET Core on OS X with Homebrew in 2016. Outdated now; links to current instructions.
2016-07-30 My Geek Origin StoryHow a CP/M handbook and a garage-sale Osborne Executive got me started with computers.
2010-04-30 Detecting and Preventing Corrupt Software DownloadsChecking SHA1 hashes to catch corrupt MSDN and other software downloads before you install them.
2006-09-05 app.config and Dev Prod Test databasesSwitching app.config connection strings between dev, test and prod databases in Visual Studio 2005 builds.
2006-07-10 Goulds BookstoreFinding Goulds, a huge second-hand bookstore in Newtown, and the books I picked up there.
2006-06-23 Taskbar Shuffle rockin my world todayA small Windows utility for reordering taskbar buttons by dragging them.
2006-05-25 Hello world!The first post on this blog, in 2006.