Practicing
Lessons learned and observations from working in the software engineering industry.
2026
Automating My Apple Music Library Export
Using macOS GUI scripting to fully automate my music stats pipeline
Moving the Critic Into My Editor
What if you could have an AI critic semantically linting your writing, inline?
Three LLM Agents for My Knowledge Garden
I built three AI agents that tend my knowledge garden in different ways: one walks in front, one walks behind, and one walks beside me.
This is the place where I rant that the AGENTS.md pattern is a dist...
I’ve been a huge fan of webcomic name for years. Every comic ends w...
I built an iCal feed of ComEd electricity price changes so I can plan around cheap hours from my calendar.
Displaying Letterboxd Like Counts on My Movie Reviews
I’ve been crossposting my Letterboxd reviews to this site for a whi...
Links That Survive the Printer
How I built automatic QR code footnotes so printed pages keep their links.
2025 was the first full year I had basic analytics on this site (vi...
A year and a half ago I dropped support for webmentions on this blo...
2025
First I used git-wrapped.com again to pull my 2025 stats but then I...
gh-nvim-username-keywords: GitHub @-mention Autocomplete in Your Neovim Editor
I’ve been writing my GitHub issue and PR comments in neovim more an...
gh-wrapped is Your GitHub Wrapped Year in Review, On Demand
Recent Decembers, I watch people share their “Spotify/etc. Wrapped”...
My Raycast Wrapped 2025 (and Prior Years)
I’ve been using Raycast on my work and personal computers for over ...
Jump to 15:10 of the X spaces livestream to get a brief overview of...
I bought the instruction zine for The Studio Stool from Manual mont...
A Digital Two-Sentence Journal
A vampire's journal and a physical notebook inspired me to write a program to store my experiences
Contributing to Open-Source Should be Required, Like Jury Duty
A note I found in my journal, from seven years ago, on the day I wa...
Inspired by See Your Word Count While You Write from dreeves, I whi...
Making MCP Tool Calls Scriptable with mcp_cli
I will often explore a solution or script with an LLM agent (e.g. C...
SYSTEMS AND METHODS FOR SELECTIVELY EXECUTING USER-GENERATED LOGIC
Our (me and some of my team members at Shopify) U.S. patent applica...
Earning the Right to Be Illegible
Seeing like a software company is the best writing about large-comp...
I read this great post by Brandur over the weekend and got inspired...
The Box Model: A Framework for Role Clarity
I spent months as a Senior Staff Engineer before realizing nobody h...
Apple Calendar's Search Just Doesn't
I cannot, for the life of me, figure out what Apple Calendar’s sear...
This fiddle leaf fig has been in two homes with us now for about 7 ...
Directed Notifications for Claude Code Async Programming
This afternoon I leveled up my previous Claude Code notifications. ...
Releasing gh-pr-staleness: GitHub CLI Extension for Commits Behind Target
Working in a monorepo and with a merge-queue (as we are now doing i...
I’ve spent the last week or so redesigning my personal blog/site to...
I write a lot of markdown and I am delivered a lot of markdown, inc...
First we built a user interface (UI) when the application was just ...
Feedforward, Tolerance, Feedback: Improving Interfaces for LLM Agents
My team is building an agent for complex, multi-language artifacts ...
The gem exec command gives me hope for Ruby in a world of fast software
As more and more software is being developed quickly by LLMs, I’m s...
Don't Forget: Remote MCP Servers are Just cURL Calls
You can call any streamable-http transport MCP (Model Context Proto...
Building Paperboy: A Personal Reading Recommendation Engine
I have a problem. My Readwise Reader inbox has over a thousand arti...
Claude Code Notifications for Async Programming
I’m doing so much asynchronous programming through agents now. Whil...
My “Four-(Sometimes Five-) Bullet” Incident Snapshot
Detection → Mitigation → Remediation → Impact (+ Comms) in a minute
So yesterday someone at work shared this fun video of a guy trying ...
The Hidden Cost of Human-Centric Tools in LLM Workflows
I built and released gh-view-md because I think we’re entering an i...
Releasing gh-view-md - A GitHub CLI Extension for LLM-Optimized Issue and PR Viewing
A new GitHub CLI extension that renders issues and pull requests in clean markdown format, perfect for feeding to LLMs or offline viewing