Python
Building a Pipeline in LangGraph
Monolithic agent graphs become difficult to reason about, debug, and test as workflow stages multiply.
Composing separate, specialized LangGraph graphs into a multi-stage pipeline provides clear operational …TL;DR
TL;DR — Quick Summary & Key Takeaways
Concurrent Nodes in LangGraph
Executing independent LLM tasks sequentially introduces unnecessary latency into complex agentic workflows.
LangGraph enables parallel execution through fan-out and fan-in patterns, using state reducers to merge …TL;DR
TL;DR — Quick Summary & Key Takeaways
Using Tools in LangGraph
Connecting external functions to LangGraph gives LLMs the power to fetch live information, execute calculations, and interact with APIs.
Wiring tools using TL;DR
TL;DR — Quick Summary & Key Takeaways
ToolNode and MessagesState creates clean, cyclic agent …
Pydantic Settings: A Safer Config Option for your Python Apps
Managing configuration solely through raw TL;DR
TL;DR — Quick Summary & Key Takeaways
os.environ lookups is error-prone and delays missing-variable crashes until runtime.
pydantic-settings provides typed, schema-validated configuration that fails fast at …
Improving Python Code Quality and Consistency Using Ruff
Ruff replaces Flake8, Black, isort, and dozens of legacy plugins with a blazingly fast, Rust-powered Python linter and formatter.
It delivers near-instantaneous feedback in developer editors and significantly cuts …TL;DR
TL;DR — Quick Summary & Key Takeaways
Sudoku Series: Nishio Rule
When deterministic logical deduction rules stall on fiendish Sudoku puzzles, the Nishio rule resolves gridlock through proof by contradiction.
By making a trial candidate assumption and reverting state if a rule …TL;DR
TL;DR — Quick Summary & Key Takeaways
How To Use Text Embeddings
Text embeddings convert unstructured prose into dense mathematical vectors that capture contextual semantics rather than exact keyword matches.
Generating and comparing embeddings locally with open Python …TL;DR
TL;DR — Quick Summary & Key Takeaways
Structured Output in LangGraph
Unstructured free-form text from LLMs introduces brittle parsing errors into backend pipelines.
Leveraging LangGraph with Pydantic models and structured output functions enforces strict typing and reliable schema …TL;DR
TL;DR — Quick Summary & Key Takeaways
Advent of Code 2025: A Retrospective
In software engineering, it’s typically very good to have a retrospective after a sprint of work. The goal isn’t just to celebrate successes or catalogue frustrations, but to step back and deliberately reflect: what worked well, what didn’t, and what lessons are worth carrying forward? Advent …
Advent of Code 2025: Day 12
Day 12 is the last day of Advent of Code 2025, and the last day is historically quite easy. The puzzle today looks like a polyomino packing puzzle at first glance, but for this input it reduces neatly to a capacity check on occupied cells per region. This was an assumption on my part because of the …
Advent of Code 2025: Day 11
Day 11 is about counting all possible paths through a graph between two specific nodes. This sort of problem is best solved with a depth-first search using memoisation. A tiny bit of state is added in to enforce constraints in Part 2.
The whole thing runs in well under a millisecond per part on my …
Advent of Code 2025: Day 10
Day 10 is by far the hardest puzzle so far in 2025. First a classic bit-flipping puzzle that reduces to XOR over bitmasks, then a minimal-presses counter puzzle modelled as an integer optimisation. If you want to follow the whole series, check out the tag page at Advent of Code, and you can browse …











