Journal
Posts and long-form series on AI, startups, venture capital, and more.
All Posts
Same App, Ten Years Apart
Pedal Wrencher in 2015 and in 2026: identical product, zero shared code. What a decade of stack turnover actually bought, and what it didn't.
PyGeoHash v3.3.2: Reliability at the Edges
PyGeoHash v3.3.2 continues the reliability run with antimeridian fixes and stricter validation, plus native ARM64 wheels and smoke-tested artifacts.
Summer Reading List 2026
Summer reading on wisdom, land, higher education, and a return to the Hitchhiker's Guide, plus finally finishing a book I started ages ago.
Cache Keys Must Come From the Resolved Call
A memoization decorator that reads kwargs cannot see positional arguments, so distinct calls collide. How to build keys from the bound signature instead.
The Kelly Criterion With Real Payoffs and Real Fees
The Kelly formula everyone quotes assumes you lose your entire stake. With real loss multipliers and fees the sizing changes. Deriving the general form.
The Billing Bug You Can't Have
How emit's prepaid credit system makes overdrawing impossible under concurrency, using an append-only ledger and one carefully shaped SQL update.
Prove the Test Can Fail: Mutate the Fix
A regression test is unverified until you have watched it fail against the unfixed code. The procedure, and three shapes that survive a naive check.
Stars, Views, and Clones Across 63 Repos
I ran stargazers 0.2.0 against my own GitHub account. The repos with the most stars and the repos with the most clones turned out to be different repos.
Running GitHub Actions Efficiently
A macOS runner costs ten times a Linux one, and that multiplier reorders every other CI decision. How to cut Actions minutes without weakening the gate.
Rampart v0.8: Full Fleet Coverage and Better Ruleset Support
Rampart v0.8 audits your private repos, understands GitHub rulesets properly, validates your config strictly, and returns real exit codes for CI.