posts
- The Observability Tax: When Metrics Cost More Than Your App
Add observability to understand your app's memory usage. Watch observability consume all the memory. The JVM at 128 MB worked in Part 2. It no longer works. What Changed#One dependency: <dependency> <groupId>io.micronaut.micrometer</groupId> …
- FiiO X1 bare-metal audio: four GPIO offsets, all wrong
A bare-metal sine-wave test for the FiiO X1's PCM5142 DAC built clean; two code reviews forced 16 fixes, including four GPIO offsets. None of it ran.
- Native Image vs JVM at 128 MB: The Benchmark Nobody Warned Me About
Update, 2026-10-25: An earlier version said Serial is the only garbage collector in GraalVM Community Edition native images. CE also ships Epsilon (--gc=epsilon), a no-op collector that never frees memory and is meant for short-lived programs. For a service, …
- FiiO X1 Rockbox bootloader: 12 KB of SD, FAT32 and a menu
A bare-metal dual-boot loader for the FiiO X1: SD reads, a FAT32 driver, a cache flush that review caught, 12,512 bytes. Built and reviewed, not yet run.
- Micronaut 5 Native Image: 14 Entries vs 1,913
Micronaut 5.0.0 dropped on May 20, 2026. The launch blog post promises first-class GraalVM native image support. The documentation is correct. It is also incomplete in ways that cost hours. This is what building a non-trivial native image app looks like on day …
- Three ways /proc will ruin your afternoon
Building a process viewer in Go sounds simple. Read /proc, parse some numbers, render a table. The kind of project that takes a weekend and teaches nothing new. It took longer than a weekend. The parenthesis trap#/proc/<pid>/stat is a single line of …
- Hello, Internet
The first version of this blog was lost. Old posts return as they're recovered.
- HTC Desire Z GPS: the Ghidra fix that landed 235 km away
Ghidra showed why the HTC Desire Z GPS library drops intermediate fixes. Turning that off gave a position in seconds, about 235 km from the phone.
- FiiO X1 EQ presets: floats in .data, not a NAND cache
Ghidra shows the FiiO X1 never reads its eq.ini back: preset gains are floats in .data, reloaded each boot. Nine new presets showed after a factory reset.
- HTC Desire Z battery tile: the SD card its launcher can't write
A battery tile with a CSV logger for my Android 2.3 launcher took one build. Finding a place the log could live took a day: the launcher owns the SD card.