ai
22 posts · All topics
- — AI Wants to Eat Your Project Backlog
You can clear the backlog of your open-source projects with AI now. It’s really great at reproducing bugs, implementing reasonable features, adding the tests you never had time ...
- — ELPDS: Inspecting FAT Partitions in 1995
I recovered another program I wrote in 1995: ELPDS, or Enhanced Logical & Physical Drive Status. Run ELPDS C: and it reports physical disk geometry, partition entries, FAT b...
- — A 1998 PDF-to-Text Converter
In 1998 I needed to convert PDF files to text for a search engine called Alkaline, without requiring separately installed libraries. So I wrote a C++ parser. Alkaline is another...
- — Good Morning, Dave: the 1998 INET Conference Kiosk Launcher
In July 1998, the Internet Society held INET ‘98, “The Internet Summit”, at Palexpo in Geneva. The University of Geneva provided about 250 computers for the conference, and I wa...
- — Porting a 1996 Pascal/Delphi Calculator to Rust (CLI + MCP)
In his Rails World 2026 keynote DHH talks about one-shot apps built almost instantly with an agent as part of Omarchy. His canonical example is Omacalc, a dead simple calculator...
- — Using AI Effectively in Technical Writing
I write a lot, and I use AI a lot. But AI does not write my blog posts. Mostly.
- — Serving Markdown for AI Agents, Now as a Jekyll Plugin
Back in January I wrote Serving Markdown for AI Agents: for every page on this blog, there’s also a .md version at the same URL, discoverable via a <link rel="alternate" type...
- — Porting a Discord Bot to Microsoft Teams, Entirely With AI
Slava (slack-strava) connects a Strava account to a chat and posts a card for every activity, complete with map, pace, and elevation, plus commands like connect, disconnect, sta...
- — Benchmarks Are Free Now
My previous post walked through four bugs in ruby-enum, a gem I maintain, all stemming from the fact that class-level instance variables aren’t inherited by subclasses. The thir...
- — Generating AI Descriptions of Automated Pull Requests
The slack-ruby-client library, an open source Ruby gem I maintain, runs a scheduled GitHub Actions workflow that regenerates code from Slack’s API definitions and opens a pull r...
- — Coding with AI Agents is Now a Baseline Expectation for Managers
AI-first Engineering is now the operating default in many organizations, including mine. Developers have kept up. Vibe coding became agentic engineering, and the race towards tr...
- — How I Made $360 by Serving Markdown to A.I. agents from My Jekyll Blog
In April 2025 I wrote Apologizing for My Obsessiveness Over Punctuation, a post about my various organizational compulsions. Near the end, almost as an aside, I mentioned that I...
- — Opening Proprietary Code to Contributors Checklist
Before AI coding assistants, a typical engineering team built expertise with the years: new team members joined, contributed small bug fixes, then were given more ambitious task...
- — AI Slop: A Slack API Rate Limiting Disaster
Yesterday I described AI-generated code as “plausible-looking, locally coherent, globally wrong.” Here’s a concrete example from my own codebase.
- — Right-Sizing Engineering Teams for AI
Before AI coding assistants, a typical engineering team of 8-10 people might have been lucky to have one or two “10x engineers”, or “workhorses”, the kind of engineer that both ...
- — Serving Markdown for AI Agents in Jekyll
Dries Buytaert recently wrote about The Third Audience. For decades, websites have targeted two audiences: humans and search engines. AI agents are now the third audience, and m...
- — Turning Hypermedia APIs into MCPs
I’ve written and talked extensively about Hypermedia APIs for about a decade. The HATEOAS constraints in representing resources for a RESTful API has numerous advantages in API ...
- — Using AI to Reduce the Burden of Status Reporting
One of the negative side effects of having any top-down command structure is that every additional layer risks introducing a new level of bureaucracy, which then actively subtra...
- — Using Claude Code with Google Sheets
Let’s get Claude Code to connect to Google Sheets. We’ll use this Google Sample Spreadsheet.
- — Using Claude-Swarm to Upgrade Ruby Projects
One of my colleagues wrote a pretty awesome tool called claude-swarm that orchestrates multiple Claude Code instances as a collaborative AI development team. At Shopify, we are ...
- — I Failed to Implement the Diameter of a Binary Tree in a Coding Interview
Six months ago I failed a basic coding interview at a FAANG. Yes, I was a Principal Engineer, and yes, I was paid absurd amounts of money, yet I couldn’t implement a diameter of...
- — Executing Structured A.I. Workflows with Shopify Roast
Last week, my team at Shopify released a new tool called Roast, a convention-oriented framework for creating structured AI workflows. Our vision is to enable A.I. agents to solv...
