writing31 posts
Tools, compute, and the architectures behind them.
Comparisons run first-hand: what a free tier actually gives you, what the paid tier costs, and the point where each option stops being the right call. Every price is dated, because prices go stale.
practices
Five popular MCP servers, read for their defaults rather than their features
The protocol says command execution through its stdio transport is not a vulnerability. That pushes the entire security question down into each server's defaults, so I went and read them.
21 Oct 2026 / 9 min read / checked 2026-10-21
devtools
Four Node package managers, one dependency set, and what the second project costs
On one project they land within 25 percent of each other. Clone a second repo with the same dependencies and the gap becomes 5.4x, and one of them writes five files where the others write nine thousand.
20 Oct 2026 / 7 min read / checked 2026-10-21
ai-architecture
Six ways to chunk one document, and the markdown aware one that cut the most code
The splitter configured for markdown broke 18 fenced code blocks. The generic one broke 5. The setting is not doing what its name suggests, and the separator list says why.
19 Oct 2026 / 8 min read / checked 2026-10-21
devtools
Five Python type checkers against ten planted bugs, and the one that found none
Same file, same ten errors, default settings. Two found all ten, one found zero, and the zero is not a bug in the tool. It is the preset it ships with.
18 Oct 2026 / 8 min read / checked 2026-10-21
devtools
Four diff algorithms over 800 commits, and the 2.5 percent where it mattered
Ran every git diff algorithm over the same 800 commits and hashed the output. They disagreed on twenty of them, and one of the four never produced a different byte at all.
17 Oct 2026 / 7 min read / checked 2026-10-21
compute
Eight ways to checksum 2 GiB, and the 5.3x between two that agree exactly
sha256sum and openssl dgst produce the identical digest for the identical file. One of them took 11.05 seconds and the other took 2.09, on the same CPU, in the same shell.
16 Oct 2026 / 7 min read / checked 2026-10-21
practices
Five schedulers, one missed window, and which of them remembers
Stopped a timer for three and a half minutes so it would miss four runs, then started it again. One configuration made up the missed run. The other had no idea it had been away.
15 Oct 2026 / 7 min read / checked 2026-10-21
devtools
Four file watchers, one repo, and the 65,536 the kernel will lend you
Two of the four took a watch per file instead of per directory, which is 78 percent of the whole budget for one watcher on one repo. Start a second and it dies.
14 Oct 2026 / 7 min read / checked 2026-10-21
compute
One SQLite database, seven durability settings, and the 149x nobody turns on
The same 100,000 rows took 0.1 seconds in one transaction under every setting tested, and anywhere from 0.14 to 41.7 seconds in five thousand. The pragma pair is free until you commit.
13 Oct 2026 / 8 min read / checked 2026-10-21
practices
Four load generators, one stalling server, and a p99 that differs by 302x
The same server, stalling for a full second every ten. One tool reported a 3 millisecond p99. Another, measuring the same stalls, reported 907 milliseconds.
12 Oct 2026 / 8 min read / checked 2026-10-21
ai-architecture
A hundred thousand vectors, six HNSW settings, and the one that beat the biggest
The largest index in the sweep cost 6.6x the build time, 23 percent more memory, and answered queries 1.9x slower than a smaller one, for four hundredths of a percent more recall.
11 Oct 2026 / 8 min read / checked 2026-10-21
devtools
Five Python installers, nineteen packages, and the gap that only appears warm
Cold, the fastest installer beat pip by 2.2x. Warm, with every wheel already on disk, it beat pip by 125x. Those are two different questions and only one of them is on your CI bill.
10 Oct 2026 / 7 min read / checked 2026-10-21
practices
Eight HTTP clients against a server that never answers
A socket that accepts your connection and then says nothing. Two of the eight clients gave up on their own. The other six were still holding the line sixteen minutes later.
09 Oct 2026 / 8 min read / checked 2026-10-21
practices
One million rows, seven primary keys, and the write ahead log each one cost
The same million rows loaded seven times into Postgres 17, changing only the key. Index size moved by 3.5x and WAL by 2x, and UUID v7 lost its whole advantage at a rate most people never check.
08 Oct 2026 / 9 min read / checked 2026-10-21
devtools
Seven JSON parsers on one 621 MiB file, ranked by peak memory
Same file, same sum, seven parsers. Peak memory ran from 3 MiB to 5 GiB, and the one that gave up had 27 GiB of RAM free when it did.
07 Oct 2026 / 8 min read / checked 2026-10-21
devtools
Seven code search tools, twelve planted files, and the defaults that never looked
ripgrep found five of twelve. GNU grep found nine. The gap is not accuracy, it is which files each tool decided were worth opening, and every one of those decisions has an off switch.
06 Oct 2026 / 8 min read / checked 2026-10-06
compute
Ten compressor settings on 128 MiB of logs, ranked by the bytes each CPU second bought
zstd at its default is smaller than gzip -6 and cheaper at the same time. Past that point one CPU second is worth 138 kB of AWS egress, and level 19 stops clearing the bar.
30 Sept 2026 / 8 min read / checked 2026-09-30
practices
Ten vulnerability feeds asked about one package, ranked by how usable the answer is
One urllib3 version, ten sources, four severities for a single CVE and two fix versions that do not exist upstream. What each feed can and cannot tell you.
27 Sept 2026 / 8 min read / checked 2026-09-27
ai-architecture
Eight HTML to text extractors, ranked by how much of the page survives
Seven real pages, eight extractors, the same bytes into each one. One returned clean prose for a pricing page with every price deleted.
12 Sept 2026 / 8 min read / checked 2026-09-12
ai-architecture
Eight ways to count tokens before you send them, ranked by how far each drifts
Measured across 1.17 million characters of prose, TypeScript, lockfile JSON and four languages: where each pre-flight count lands against the tokenizer that actually bills you.
11 Sept 2026 / 7 min read / checked 2026-09-11
practices
Nine ways a 429 slips past your code, ranked by how long it hides
A local server that answers every request with 429, nine HTTP clients pointed at it, and the nine patterns that let a rate limit through without raising anything.
10 Sept 2026 / 8 min read / checked 2026-09-10
practices
Eight Dockerfile habits, ranked by what each one cost on one measured build
Same Node app, eight bad habits, every figure measured on one machine: what each adds to the image, to the wire, and to a rebuild after a one-line edit.
08 Sept 2026 / 6 min read / checked 2026-09-08
compute
Nine ways to work on files that live on another machine, ranked by small-file cost
Measured on a 68 ms link: an sshfs read of one 13 KB file costs 372 ms, and 200 of them cost 74 seconds. Nine options, ordered by what they do about that.
07 Sept 2026 / 8 min read / checked 2026-09-07
devtools
Six secret scanners against sixteen planted credentials, and what each one walked past
I hid sixteen fake credentials in a git repo across seven kinds of hiding place, ran six open-source scanners, and counted. All six missed the same one.
06 Sept 2026 / 8 min read / checked 2026-09-06
ai-architecture
Uber's agent stack taken apart, and the part its write-up leaves out
Uber published the gateway, the token service and the MCP layer. It never published what happens when a model dies mid-request, which is the part that broke my own cascade three times.
05 Sept 2026 / 9 min read / checked 2026-09-05
devtools
Seven self-hosted AI agents, with the numbers pulled from the API not the blog posts
Every comparison article I found was stale by more than a hundred thousand stars. Here are the seven, ranked on what the repository itself says about them today.
05 Sept 2026 / 8 min read / checked 2026-09-05
ai-architecture
Six vector stores, compared on how many vectors the free tier really holds
Every one of these advertises its free tier in gigabytes. Nobody embeds gigabytes. Converted into vectors at a common dimension, the gap between the most and least generous is about forty times.
05 Sept 2026 / 9 min read / checked 2026-09-05
compute
Five hosts for a small site, compared on the limit that stops you first
None of these run out of bandwidth. They stop on a build quota, a plan migration you cannot undo, a Git permission, or a clause saying your site is the wrong kind of site.
05 Sept 2026 / 8 min read / checked 2026-09-05
practices
Six ways a deploy goes green while the old code keeps serving
Every one of these reports success somewhere and failure nowhere. The pattern is the same: the signal you are watching is upstream of the thing you actually care about.
05 Sept 2026 / 7 min read / checked 2026-09-05
ai-architecture
Six ways to reach Postgres from a serverless function, ranked by what breaks first
The connection string the dashboard hands you is the one most likely to fail from a serverless host. Here is what each route actually does, and the error you get when it is the wrong one.
05 Sept 2026 / 8 min read / checked 2026-09-05
devtools
Eight uptime monitors compared on catching a 200 that is lying
A serverless function that was never deployed answered 200 with the app shell. Here is what each free tier lets you assert on the response body, and what the first paid dollar actually buys.
05 Sept 2026 / 8 min read / checked 2026-09-05