Applied experiments
Domain-specific systems: recipe versioning, genomics data, smart agriculture, multilingual media, privacy tooling, and other workflows that are really software problems in disguise.
- The Row Count Was the Wrong Way to Choose Between SQLite and JSONL
At 10,000 records SQLite already beat unindexed JSONL on lookup, aggregate and update, while append stayed close. The operations decided it, not the row count.
- DuckLake on One Machine
I put a small DuckLake, DuckDB, and marimo data platform through one complete job, from 200,000 to 100 million events.
- Five 4K60 Streams Were Fine. The Sixth Was Not.
A paced NVDEC-CUDA-NVENC pipeline found the live-video capacity boundary and showed why a NumPy round trip cost more than the CUDA work.
- The Radio Won't Wait for Your FFT
A paced I/Q replay found where an eight-core SciPy pipeline began missing deadlines and dropping blocks, and how far an RTX GPU moved that boundary.
- I Wrote the Same GPU Operation Six Ways
Six implementations of one row-scoring operation show why a 324× resident GPU kernel becomes 10.4× once host-device transfers are included.
- I Moved an Entire ML Pipeline to the GPU
A complete GPU ML pipeline reached 4.74× at one million rows, while transfer costs and tiny inference batches often kept the advantage on CPU.
- 100 Million Points on One GPU
GPU spatial joins crossed by one million points, a rectangle barely won at 100 million, and one quadtree setting silently lost matches.
- How Many Queries Pay for a Vector Index?
CAGRA searched vectors up to 76× faster than exact cuVS, but its index build required roughly 45,000 queries to amortize.
- How Much of a Spark Plan Actually Runs on the GPU?
One late CPU island barely hurt a Spark RAPIDS plan; two separated islands made the hybrid execution 33% slower than CPU.
- DuckDB, Polars, and cuDF on One Analytical Pipeline
Across 100,000 to 200 million rows, GPU joins crossed early, strings never crossed, and partitioned Polars handled data larger than VRAM.
- When Does GPU Parquet Actually Pay Off?
Five Parquet readers show cuDF leading large scans, PyArrow keeping two small projected reads, and projection mattering more than engine choice.
- Not Every FLAC Is Lossless
Some FLACs are transcoded lossy files and some hi-res tracks are upsampled CDs. Spectral inspection can test what the metadata merely claims.
- I Sequenced My Family. We Still Don't Have an Answer.
I sequenced two families and built a rare-disease analysis pipeline. The work produced lessons about evidence and uncertainty, but no diagnosis.
- The Pipeline Behind Sequencing My Family
The engineering behind a family exome analysis, from scan assembly and FASTQ/BAM/VCF processing to read validation and reference-population gaps.
- Why I Generated Slower Speech Instead of Stretching Audio
Fresh speech synthesis preserved sharper consonants than phase-vocoder stretching in 27 of 30 pairs, but extreme slowdown introduced new artifacts.
- What a 200-Line Keras Tutorial Left Out
A 3D-CNN tutorial ran in minutes; applying it to real brain MRIs took months and 25 GPU-hours to reach 61% accuracy against a 52% baseline.
- What Multiplayer Netcode Taught Me About Distributed Systems
Building multiplayer netcode forced me to handle latency, authority, stale state, correction, and ordered events long before I used those terms in data systems.
- The GPU Collision Detector That Didn't Get Faster
A CUDA collision detector was no faster at the tested scene size because of memory layout, transfer costs, divergent work, and coarse timing.