Bloom filters, and when a probabilistic set is the right call

Trade a little certainty for a lot of memory — the math is friendlier than it looks.

August 4, 2026 · 2 min · mc

Reading list — August 2026

A few things that crossed my desk this month.

August 1, 2026 · 1 min · mc

Quantization notes: int8, fp8 and what you actually lose

Where the bits go, why outliers ruin everything, and the per-channel trick that saves them.

July 7, 2026 · 2 min · mc

Reading list — July 2026

A few things that crossed my desk this month.

July 1, 2026 · 1 min · mc

Data-parallel training: gradient bucketing and overlap

Why DDP feels like magic until you look at the allreduce schedule.

May 19, 2026 · 1 min · mc

Reading notes: QUIC, 0-RTT and why HTTP/3 is UDP

Moving HTTP onto UDP was not insane — head-of-line blocking is the reason.

April 29, 2026 · 1 min · mc

A minimal, reproducible Docker setup for ML experiments

Pin everything, mount data, never bake it. The boring setup that stopped me losing runs.

March 11, 2026 · 1 min · mc

KV cache, and why LLM inference is memory-bound

The cache that makes autoregressive decoding fast also makes it the thing that runs out of memory first.

February 8, 2026 · 2 min · mc

eBPF: tracing syscalls without a kernel module

Attaching a verified program to a tracepoint, and why this beats strace under load.

January 12, 2026 · 2 min · mc

Tuning TCP BBR and fq on a high-latency link

Switching off loss-based congestion control on a long-fat path, and the fq gotcha for UDP.

November 3, 2025 · 1 min · mc