Blog
Here you'll find everything I've written for this site, all in one place, from newest to oldest. Some posts are deep dives, while others are just quick notes and fixes I wanted to remember. Feel free to dig in, and I hope you find something useful or interesting.
-
How I built the coverage inspector for raptor. Five signals that distinguish different behavior, and how to collect them with revm's Inspector trait.
-
My old ForkDB Client used a background worker thread, crossbeam channels, and a panic supervisor. I replaced it with SharedBackend, which needs no background thread and is much easier to reason about.
-
My Rust linter was taking 5 seconds to lint 75 files. Here's how I got it down to 300 milliseconds.
-
I'm reviewing past audit findings to build a personal checklist for future audits. This post analyzes a reward accounting bug in Stakehouse where old stakers could steal new deposits.
-
I needed to test my CLI tool without writing to disk. I started with a messy
RefCellsetup but refactored it to use proper Rust borrowing instead. -
Experimenting with low-level optimizations in Zig. I wrote a benchmark to race SIMD vectors against bit-twiddling hacks for skipping JSON whitespace.
-
I'm building a benchmarking tool for Zig and needed CPU counters. This is how I wrapped Linux's
perf_event_opento be type-safe with comptime. -
I spent a while debugging a benchmark that was impossibly fast. Turns out LLVM is too smart. I fixed it by forcing runtime reads with volatile.
-
Measuring execution time under
1nsis hard. This post covers how I fixed accuracy issues in my Zig tool by running the function in batches. -
A classic stack-use-after-return bug I ran into with Zig. I was trying to be clever and pass a reader by reference, but ended up with a dangling pointer.
-
Working on
cmdtest, my Zig CLI testing tool, I ran into the problem of readingstdiofrom long-lived processes. This is my dive into why memory allocation is key for handling program output. -
My journey designing a Zod-like validation library in Zig. A dive into
comptime, type generation, and the trade-offs for good tooling support. -
I'm sharing my experience building
cmdtest, a Zig package for testing CLI apps. This post covers Zig I/O, comptime vs runtime, andbuild.zigimport quirks. -
My notes on building a VS Code extension using Bun and Mise. Covers build scripts, tasks, and a macOS fix for zsh
PATHissues. -
Vite's bundler was too smart for its own good and kept failing my dynamic import in Astro. This is the one-line trick I used to outsmart it.
-
I hit an 'Import declaration conflicts' error in Astro. My page and a component had the same name. Here's how I fixed it with an import alias.
-
I'm building a custom security research env in VS Code to find more bugs, integrating Foundry and Medusa to make my workflow faster.
-
My takeaways from a Roger Martin HBR video on plan vs. strategy. It showed me I was making to-do lists instead of figuring out how to win.
-
I wanted to see what people search for on my site. Here's how I connected Pagefind to Umami with a simple
MutationObservertrick. -
I just released envfmt v1.0.0. The big change was removing all dependencies to make it a tiny, stable lib. Here are my notes on the update.