Journal
Posts and long-form series on AI, startups, venture capital, and more.
All Posts
Yakitori Negima: Chicken, Scallions, and a Pot of Tare
My first run at chicken and scallion yakitori (negima) on a new konro grill, including a simple homemade tare you can keep building on forever.
Benchmarking PyGeoHash: Where It Lands Against the Field
I benchmarked PyGeoHash against six Python geohash libraries with pytest-benchmark. It trails the Rust and C++ options and beats pure Python by a mile.
The OODA Loop for Startup Engineering
Boyd's OODA loop applied to startup engineering teams. How to make faster, better decisions when the landscape changes every week.
Rampart v0.7: Push Allowlists for Protected Branches
Rampart v0.7 adds push allowlists to branch protection configs. Specify which users, teams, and GitHub Apps can push directly to main.
Pasta e Piselli: A Simple Italian Pasta with Peas
A humble Neapolitan pasta dish of peas, onion, and pancetta that comes together in one pot and proves simple ingredients make the best food.
Spring Reading List 2026
Spring reading spanning banana empires, systems thinking, quiet farm life, and the continued misadventures of Arthur Dent.
The Full McGinnis Stack: An Opinionated Python Developer Setup
How to wire together ContextSwitch, python-skills, makefile-mcp, mutmut-mcp, Rampart, and the rest into a complete AI-powered Python development workflow.
Using Claude Code Hooks to Force uv
A simple pre-tool-use hook that intercepts bare pip and python commands in Claude Code and redirects them to use uv instead.
uv Changed How I Think About Python Projects
After years of pip, virtualenv, poetry, and conda, uv has quietly become the only Python packaging tool I recommend. Here's why.
Code Archaeology with AI
Using AI coding assistants to understand, document, and revive legacy codebases. What works, what doesn't, and where the hallucinations live.