Blog
Write-ups from real projects. What worked, what broke, and what I would do differently.
Articles
- Making non-Apple headphones do AirPods noise control on iOS A jailbreak tweak that gives non-Apple headphones the AirPods noise-control toggle on iOS. The first version puppeteered Sony's own app as an invisible background daemon; the second reverse-engineered the Bluetooth and found the brands split across two unrelated iOS Bluetooth APIs.
- Running catdoc in the browser with WebAssembly How the in-browser .doc extractor runs catdoc's WebAssembly module with a hand-written WASI shim, dropping the Go runtime and shrinking the download ~14x.
- From UART checksums to e-paper: building a desk air-quality monitor Building a desk air-quality monitor: decoding the ZPHS01B UART protocol, prototyping in Python on macOS, then an ESP32-S3 with an e-paper display.
- Parsing 1990s Word documents in Go by running C inside WebAssembly How go-catdoc reads legacy .doc files in pure Go: the catdoc C tool compiled to WebAssembly and run with wazero. No cgo, no external dependencies.
- What I learned hand-writing a canvas node editor in TypeScript Lessons from building a logic gate simulator on a hand-written HTML5 canvas: viewport culling, high-DPI bugs, hitboxes, zoom-to-cursor, and a tick system.
Also in Dutch
- Van prototype naar productie: je app klaarmaken voor echte gebruikers Met Lovable, Bolt of Replit een app gebouwd die nog niet veilig live kan? Wat er misgaat, wat er moet gebeuren voor echte klantgegevens, en wat je houdt.
- Bestaande software overnemen en doorontwikkelen Is je ontwikkelaar gestopt, of erfde je software die je niet zelf bouwde? Zo neem ik bestaande software over, krijg ik hem werkend en ontwikkel ik veilig door.
- Delphi-applicatie vervangen of moderniseren? Draait je bedrijf op een oude Delphi-applicatie? De opties op een rij, en hoe ik zelf een Delphi-applicatie volledig verving door Go en Svelte.
- Een website laten maken zonder WordPress Waarom ik geen WordPress-sites bouw, wanneer WordPress wél de juiste keuze is, en wat je krijgt als je website gewoon code is.