Latest post Music · · 6 min read

My Chat Bot Called a House Set Drum and Bass

One night in October I played a house set on my Twitch channel, and my own chat bot kept telling the room it was drum and bass. The bot knew my library well. What it didn't know was what I was actually playing that night. On the same night, regulars got ...

Read the post

Earlier writing

42 posts
Home · 4 min read

The Heat Rating That Decides a Desert Garage Mini-Split

For a garage that hit about 119°F, the first spec I checked on a mini-split was the hottest outdoor temperature it is rated to cool at, and two well-known units I checked stop at 115°F. A 129°F figure from my research ...

Music · 7 min read

When the Stream Got Stuck on Song 1: Seeing Layered Mixes

I DJ by looping a track and layering more over it. For a while my stream named only the first one. Chat got song 1, then nothing, while the rest of the build played on top. When I dug in, I found two separate causes, ...

Home · 6 min read

Movie Mode Means the Robot Vacuum Waits

The request was one sentence: "when movie mode is enabled, the robot vacuum must not run." I built it and tested it the same day, during a real movie. Doing it properly took three layers, not one: block the start, send ...

Home · 7 min read

A Holiday Color Engine with a Calendar Computed to 2099

On October 16, 2026 I moved my front-yard lights off the color scenes stored on the Philips Hue hub and onto an engine I built in Home Assistant. It has 46 looks and fades every bulb on its own. The lights took one ...

Music · 6 min read

How I Pick the Best Live Sets for a Playlist

When I build a "best of" playlist of an artist's live sets, fans' upvotes decide which sets go on it, and the source of each recording decides which version to use. I worked these rules out on a Tipper playlist in ...

Home · 6 min read

Party Mode: 49 Ramps Blocked, Zero During a Six-Hour Party

My house dims itself in the evening. Lights go warm, then down to a nightlight glow, and that is exactly what you don't want at a party. The obvious fix is to switch off the evening scene. There was no such scene to ...

Builds · 6 min read

A Check That Can't Fail Is Worse Than None

A canary built to catch one bad state passed exactly that state, because grep -c prints 0 and also exits non-zero. The post ends with copyable self-tests that run a known-bad and a known-good input through a check in ...

Builds · 8 min read

Trivia Over LoRa: a game show on a slow, lossy radio mesh

Since June I have been running a game show on a radio network where one message tops out at 200 bytes, takes up to about two and a half seconds to send, and may never arrive. My trivia bot asks a question every hour on ...