2026 Blog Posts
These are my posts for 2026. Be sure to check out the rest of my blog if you can’t find what you’re looking for.
Using Async Effectively in LangGraph
In Seven Tips for Performant Async Python I focused on plain asyncio.
That is the right place to start, because LangGraph does not replace Python’s event loop or make blocking code magically concurrent.
If an async LangGraph node calls a blocking library, the graph still waits.
If you fan out …
Regicide: A Fiendishly Fun Cooperative Card Game
Cooperative card games live and die on one question: does every player feel useful? Regicide answers with a confident yes, and it does so with rules you can teach in five minutes and depth that keeps you coming back long after you have won your first game. Whether you are playing solo or with a …
Vector Databases: What They Are and How To Use Them
In an earlier post we generated embeddings and searched them by computing cosine similarity across a small in-memory list. That approach is perfect for learning and prototyping, but it does not scale. When your corpus grows to hundreds of thousands or millions of documents, iterating over every …
Seven Tips for Performant Async Python
Adding async and await to a Python function feels like an easy win.
You’ve heard it makes code faster, so you sprinkle the keywords in, run your program, and it seems to work.
But async Python has a habit of looking correct while quietly running no better or even worse than the synchronous …
Building a Pipeline in LangGraph
The earlier posts in this series built self-contained graphs: one graph, one task, one run. But real workflows often span multiple stages, where each stage produces output that the next stage needs. The pipeline pattern I describe here isn’t an official LangGraph pattern — it’s an …
Claude Code vs Codex: Recreating an Iconic Game
If you grew up with a DOS machine in the early 1990s, there is a good chance you remember Gorillas. Two apes perched on rooftops, hurling explosive bananas across a city skyline — it shipped free with QBasic and it was many people’s first taste of programming a game, or at least playing one …
Concurrent Nodes in LangGraph
Real-world agents rarely do one thing at a time. They fetch data from multiple sources, run independent checks in parallel, and combine the results before moving on. LangGraph supports this natively with concurrent nodes, but there is a subtle catch when those nodes all write to the same piece of …
Using Tools in LangGraph
LLMs are impressive, but they are limited to the knowledge baked in at training time and can’t take actions in the world on their own. Tools are what change that. By giving an LLM access to tools, you turn it from a system that is frozen in time into an agent that can look up live data, run …
Pydantic Settings: A Safer Config Option for your Python Apps
Environment variables are the default way many Python apps handle configuration. They are simple, portable, and work in every deployment environment. But as soon as you add more than a handful of settings, raw env vars become fragile and hard to reason about.
Pydantic used to solve this with …
Improving Python Code Quality and Consistency Using Ruff
Consistency and quality are the foundations of maintainable Python code. As projects grow and teams expand, maintaining these standards becomes increasingly challenging without the right tools. Ruff is an extremely fast linter and code formatter written in Rust that helps teams improve their code …
Sudoku Series: Nishio Rule
The next rule to implement for the Sudoku solver is Nishio. This will make all outstanding puzzles solvable because it effectively brute forces the removal of an invalid candidate until other rules can take over.
If you like this post and you’d like to know more about how to plan and write …
Board Game Reviews: Fungi
Here’s a game my wife and I enjoy, imagining we’re a real life Radagast the Brown, strolling through a dusky forest, foraging for supper and cooking it over a campfire. Fungi offers this in a cosy two‑player card game that mixes simple rules with hand management and careful strategy to …











