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.
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.
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.
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.
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.
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.
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.
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.
What write-ahead logging (WAL) is, the crash problem it solves, how checkpoints work, and why SQLite, Postgres and MongoDB all use it.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
A static blog, a home server, and an honest look at what that trade buys and costs.