Blog
Notes, write-ups, and things worth keeping.
The Memory Leak Detective: Debugging Long-Running Node.js Services
Heap snapshots, diffing, the EventEmitter trap, and the closure trap — a practical field guide to finding memory leaks in Node.js services that were fine for weeks before they weren't.
Forgejo vs Gitea: Self-Hosting Your Git Server in 2026
Same codebase, two futures. A practical comparison of Forgejo and Gitea — licensing, governance, federation, CI, and what actually changes when you pick one for your homelab.
SQL Window Functions: The Query Feature You're Not Using
ROW_NUMBER, RANK, LAG, LEAD, running totals, moving averages, top-N-per-group — a deep dive into window functions and the queries they make embarrassingly simple.
Six Months With the Framework Laptop 16
A long-term review of the modular, repairable 16-inch laptop: the expansion bay, the GPU module, Linux support, battery life, and whether the repairability premium is actually worth it.
The Keychron Q1 Max: A Review of My Endgame Keyboard
Gasket mount, QMK/VIA, wireless latency, and the endless modding rabbit hole — six months with the keyboard that was supposed to end the hobby, and why it almost did.
Ownership Without Tears: How Rust Prevents Whole Bug Classes
Use-after-free, data races, double frees — Rust's ownership model doesn't make these bugs rarer, it makes them unrepresentable. A technical walkthrough of moves, borrows, and lifetimes.
Why Your Wi-Fi Is Slow: A Technical Deep Dive
Channel width, SNR, retries, MIMO, backhaul, and the ISP. The real reasons home Wi-Fi underperforms, ranked by how often they're actually the culprit.
The Geometry of Cities: Why Grids Beat Chaos
From Roman castra to Manhattan's numbered avenues to Barcelona's superblocks — how the shape of a street network shapes walkability, commerce, and the character of a city.