Writing

Notes from building the things under Work. Mostly technical, occasionally not.

⌕

All
AI
Architecture
Auth
Automation
C#
Career
Craft
Graphics
IoT
MQTT
Search
Security
TypeScript
WebGPU
2026-09-18
AI
4 min

Everything a local LLM app has to refuse

Binding to localhost is where it starts. Once models can fetch pages, write files and run commands, most of the design is deciding what not to do.

2026-09-14
SECURITY
4 min

Forty lines of TOTP, and everything around them

The algorithm fits on one screen. Encryption at rest, replay protection, attempt limits and recovery codes are where the real decisions are.

2026-09-06
GRAPHICS
5 min

Ray-tracing a rotating black hole in the browser

Null geodesics, a WebGPU compute shader, and why the first frame is allowed to look terrible.

2026-09-06
CAREER
7 min

Back to school, twenty years in

A year of ladder logic and cabinet wiring, and what two decades of writing the software above it had not taught me.

2026-09-02
SEARCH
4 min

Ranks, not scores: hybrid search in a job tracker

Keyword search forgives typos, embeddings find synonyms. Fusing them means refusing to compare their scores, and giving vector search a way to say no.

2026-08-14
TYPESCRIPT
4 min

One grading engine, two runtimes

Making the same TypeScript produce identical verdicts in a browser tab and a Node process, and the tank that showed they only agreed by accident.

2026-06-02
CRAFT
6 min

Twenty years of C#, and what I had to unlearn for TypeScript

Interfaces are not contracts here. Structural typing is a gift and a trap. On giving up the class hierarchy I spent a career building.

2025-11-08
IOT
8 min

MQTT is not a message queue, and other things I learned the hard way

Retained messages, QoS that does not mean what you think, and a home automation rig that would not stop replaying last Tuesday.