I built an eBook dictionary generator using only agentic programming

I used Codex to build out a real project, a dictionary generator for Dungeon Crawler Carl. It’s also generically, mostly, usable on all fandom wikis. I tried not touching any code, just interacting with Codex. I even had it write a little case study for me: https://jmcguire.github.io/dungeon-crawler-carl-dict/case-study/ If you like Dungeon Crawler Carl, or want to build a custom eBook dictionary for your own favorite fandom, check it out.

June 22, 2026 · 1 min · Justin

Still Don't Like Python's Join vs. Split Syntax

Still don’t like Python’s "separator".join(my_variable) v my_variable.split("separator"). Every time I walk away from Python for a year and come back, I reforget this. I know why it’s like this, but I still don’t like it.

April 30, 2026 · 1 min · Justin
How my application programmer instincts failed when debugging assembler

How my application programmer instincts failed when debugging assembler

I’ve had a smidge of extra time with my recent unemployment, so to stay sharp and learn a few new things I followed Seiya Nuta’s guide to building an Operating System in 1,000 Lines. I’m not an OS programmer, my life is normally spent at high-level application programming. (The closest I come to the CPU is the week I spent trying to internalize the flow of those crazy speculative execution hacks.) Assembler is easy enough to write, that wasn’t the problem. The problem was when I encountered problems. My years of debugging application-level code has led to a pile of instincts that just failed me when debugging assembler-level bugs. ...

February 26, 2026 · 6 min · Justin
Debugging Below the Abstraction Line (written by ChatGPT)

Debugging Below the Abstraction Line (written by ChatGPT)

(Note: This post was written by ChatGPT, based on my initial rough notes. I, a human, wrote my own version of this post here: How my application programmer instincts failed when debugging assembler. I’m posting them both because it’s fun.) This post is about two bugs that stopped me cold. They were not clever bugs. They were basic mistakes that took far too long to understand. Each one forced me to confront how much of my programming intuition depends on abstraction, and how little of that intuition survives when you step into kernel code and assembly. ...

February 26, 2026 · 4 min · Justin
Do I Need JWTs?

Do I Need JWTs?

Twice I’ve been asked “do I need JWTs”. Twice I’ve given the same answer. Which means it’s time to document/automate my answer before I get asked a third time. The first part of my answer is that a better question would be, “do I need stateless auth?” JWTs are technically just a message format that are designed to be used with stateless auth, and that’s what you really want to ask yourself. ...

April 30, 2024 · 2 min · Justin
A Diverse Engineering Team Means You Stop Losing Money

A Diverse Engineering Team Means You Stop Losing Money

Let’s pretend this is all fictional and not at all based on a real story I can’t talk about. It’s year one and you have a very small company. Your engineer is building you a big piece of software, and the first thing he builds is the sign-up page that takes in a name. He tests it with his name, “Jeff”, and it works. QA puts in their name, “Jim,” and it works. The PR is approved and now it’s live. ...

April 10, 2024 · 2 min · Justin
SCIM Gotchas

SCIM Gotchas

I partially implemented SCIM. SCIM is used so rarely there’s no online discussion or help about any of it. Here are a few things I learned. 1 In the return type for a paged result, the attribute Resources is initial caps. No other attribute names are initial caps. 2 The userName is case sensitive, and filtering on userName is case sensitive. But the SCIM userName is often mapped to email, and email is case insensitive. So if you’re assuming the userName is an email, you need to store it with its original case, otherwise integrations might get weird. ...

June 12, 2023 · 1 min · Justin
The best 10 programming articles of the last 10 years

The best 10 programming articles of the last 10 years

These are articles that I’ve kept around and reread over the years. I love me a readable deep dive, and this list is full of them. An epic treatise on scheduling, bug tracking, and triage by Apenwarr After nearly 20 years in this business, I’ve become convinced that everything you need to know about scheduling and project planning is contained in Scott Berkun’s Making Things Happen and this article. The world in which IPv6 was a good design by Apenwarr ...

December 16, 2020 · 3 min · Justin
Why Google Source has high uptime

Why Google Source has high uptime

Google Source has tremendous uptime. They manage it by having a super-flexible schema, and code that takes advantage of it. How googlesource.com manages database upgrades with no downtime, by Shawn Pearce I love this old post from Shawn Pearce on how Google Source has no planned downtime. They take advantage of protobuf and BigTable having a flexible schema. The application is coded to ignore columns it doesn’t understand, but still save and persist them. ...

February 26, 2020 · 2 min · Justin
Things I was definitely wrong about

Things I was definitely wrong about

Here’s the inevitable followup to my last post about things I was right about. This is a list of things that I was convinced about when I was younger, but now I realize I was quite wrong. Tabs v spaces doesn’t matter “Tabs are for tabular indentation!” I screamed. But it doesn’t matter. I now believe you are allowed to argue about it passionately just once. Then you’re done. Just do what your team does. It doesn’t matter. ...

October 17, 2019 · 3 min · Justin