Latest

Tech

Cursor pagination: what it is and why APIs use it

Why LIMIT/OFFSET gets slower the deeper you page and shows repeated or missing rows when data changes, and how cursor pagination fixes both by remembering the last row.

Tech

gRPC explained: what actually goes over the wire

What gRPC is and what goes over the wire: the .proto contract, Protobuf bytes, HTTP/2 framing, deadlines that don't undo work, and the trap that sends every call to one pod.

Tech

Hedged requests: asking twice to beat the slow tail

How hedged requests cut the slow tail, why waiting until the p95 keeps the cost near 5%, where the code lives, and why you never hedge a plain write. Tested with real gRPC on a Pi.

Tech

Tail latency: why the slowest 1% of calls ends up slowing most of your requests

Why averages hide slow requests, how fan-out turns one slow server in a hundred into most users waiting, and how hedged requests cut the tail for about 5% extra load.

Tech

The bulkhead pattern: keeping one slow dependency from sinking everything

How one hanging dependency can use up a shared thread or connection pool and take healthy features down with it, and how giving each dependency its own bounded pool contains the damage.

Tech

Consistent hashing: what it is and what it solves

Why hash mod N reshuffles almost every key when you add a server, how the consistent hashing ring moves only a few, and why virtual nodes fix the uneven load.

Tech

Change data capture (CDC): what it is and what it solves

What change data capture is, why dual writes and polling fall short, how log-based CDC reads the database's own log, and what it costs.

Tech

Write-ahead logging (WAL): what it is and what it solves

What write-ahead logging (WAL) is, the crash problem it solves, how checkpoints work, and why SQLite, Postgres and MongoDB all use it.

Tech

I cleaned my GitHub token out of my repos. A cron job quietly put it back.

A daily sync script copied my GitHub token into git config files anyone on the machine could read, and logged nothing. I'd already cleaned it up once. How it happened, and the fix.

Tech

I gave Claude Code a Discord account

Two and a half months running a coding agent as a chat bot on a Raspberry Pi. The hard parts were not the model — they were prompt composition, directory routing, timeouts, and proving it was alive.

Tech

My Raspberry Pi bot can't restart itself without killing the messenger

I asked a bot to restart itself. Linux shuts down a program and everything it launched together, so the bot died mid-sentence. Why that happens, in plain words, and three ways around it.

Tech

Self-hosting when the hardware got expensive

The 16 GB Pi 5 went from $120 to $305 in twenty months, so obviously you should rent a server instead. Small problem: rent went up too, for exactly the same reason.

Tech

Pagefind works on my Raspberry Pi 5 after all. I kept my replacement anyway — here's the maths

Pagefind crashed on my Raspberry Pi 5, so I swapped in MiniSearch. Then I found an older Pagefind runs fine. Why I still didn't switch back, and when that decision expires.

Tech

Three quarters of the traffic to my site was a 404

Cloudflare said I had 1.84k visitors. My server's own log said 76% of requests were for pages that don't exist. I wrote a rule to block them, checked it properly, and found it only caught about half.

Tech

My Wi-Fi came back the moment I told my Raspberry Pi it lives in America

A strong 5 GHz network on channel 161 was invisible to my Pi. Linux said the channel was allowed. The Wi-Fi chip disagreed. Switching the country to US fixed it.

Tech

I copied Astro's robots.txt recipe and it pointed my sitemap at a 404

Under a /blog base path, new URL('sitemap-index.xml', site) quietly drops /blog. The build passes, the sitemap is fine, and nothing warns you. Then it turned out crawlers never read the fixed file.

Tech

I told Caddy on my Raspberry Pi to stay on localhost. It listened everywhere and spoke HTTPS instead.

A bare IP:port site address in a Caddyfile gave me a 400 for plain HTTP and a port bound on every interface. Two separate Caddy behaviours, one typo, and the obvious fix hides only one.

Tech

One Pi, one tunnel, ten sites, and one rule that could never run

Ten local services behind one Cloudflare Tunnel on a Raspberry Pi. My /blog rule only works because it sits above the apex rule, and cloudflared tunnel ingress validate prints OK either way.

Tech

Discord's mandatory E2EE made my voice bot deaf, and there is no opt-out

Discord's new voice encryption left my bot able to talk but not listen. Why that happens, why you can't switch it off, and the small patch that got it hearing again.

Tech

The health check that lied for seven hours

systemd said running, my heartbeat said alive, Discord showed the bot online. For seven hours it couldn't receive a single message, because my health check tested the wrong connection.

Tech

Pagefind died on my Raspberry Pi 5 with "Unsupported system page size" — and it's not the only one

On a Raspberry Pi 5, Pagefind and a dozen unrelated tools abort with '<jemalloc>: Unsupported system page size'. Why 16 KB pages cause it, and four ways out with their real costs.

Tech

Why this blog runs on a Raspberry Pi

A static blog, a home server, and an honest look at what that trade buys and costs.