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.
What's a URL? Please Provide Your Email Address! The Complexity of Parsing Structured Identifiers
“Please enter a valid email address.” “Please provide a valid website URL.” If you build web applications, APIs, or user interfaces, you have almost certainly written or reviewed code that displays those two demands. Because every user recognises an email address and …
Syncing Shared Data: The Hidden Traps of Concurrent Mutations and Deletions
When you build an application that displays a collection of items, synchronisation feels deceptively straightforward at first. Your client fetches the current list from an API, your user makes a few edits or removes a row, and you send the updated collection back to the server. If you only test …
Parsing CSV and Delimited Files: The Deceptive Traps of Tabular Text
Every software engineer has, at some point, written a CSV parser in a single line of code. When you receive a comma-separated file, calling line.strip().split(",") feels delightfully clean and efficient. You run a quick test on three rows of mock data, confirm the output matches your …
Parsing and Formatting Numbers: Why Commas and Dots Break Software
At first glance, numbers appear to be the simplest data type in computer science. Unlike natural languages with irregular grammar and complex idioms, numbers feel purely mathematical, universal, and unambiguous. You collect a string of digits from an input field, pass it to your language’s …
Handling Currency Calculations: Why Floats Break Financial Software
When building an application, you inevitably reach a screen where money enters the picture. You need to calculate a 20% VAT rate, split an invoice between team members, or apply a discount code at checkout. You see a price like £19.99 with two neat decimal digits and assume a standard …
Never Roll Your Own Date Maths: The Deceptive Complexity of Time
At some point in every developer’s career, a tempting thought arrives. You need to add seven days to an appointment, schedule a task for tomorrow morning, or calculate the duration between two events. You glance at your standard library, see a hefty date module, and think: “A day is …
Getting Started with Terraform: A Practical Guide to Infrastructure as Code
Just like top terraformers in Minecraft reshape entire landscapes to build incredible worlds, mastering Terraform in software engineering gives you complete control over your digital infrastructure. Instead of manually clicking through cloud management consoles, you define your entire …
Revisiting Gorillas in Godot 4: Gemini 3.1 Pro Takes the Challenge
A few months ago, I ran an experiment asking two leading AI coding tools to recreate the classic 1991 QBasic game Gorillas in Godot 4. In my previous Gorillas post, I pitted Anthropic’s Claude Opus 4.6 against OpenAI’s GPT 5.3 Codex. Both generated playable games from a single prompt, …
Board Game Reviews: Yahtzee
Few sounds in tabletop gaming are quite as satisfying as the clatter of five wooden or plastic dice tumbling out of a shaker cup onto a dining table. Invented in the 1950s by an anonymous Canadian couple on their yacht and later acquired by game entrepreneur Edwin S. Lowe, Yahtzee remains one of …
Backing Up Everything with Backrest and Restic
Setting up automated backups is often the most overlooked task in home networking. It is rarely the most exciting project to tackle, but having a solid backup system gives you immense peace of mind when hardware fails. While Windows and macOS offer plenty of built-in and commercial backup tools, …
Host Your Home Services Securely with Caddy and Custom Domain TLS
Running self-hosted tools on your home network is immensely satisfying, but typing IP addresses and ignoring browser security warnings gets old fast. I love having a clean, custom domain name backed by valid TLS encryption for all my home services. Using a Raspberry Pi 3B as a lightweight reverse …
Python's Hidden Gems: Packages and Patterns
Following up on my previous post about What’s New in Python 3.14 and 3.15, I want to shift focus to the broader Python ecosystem. While everyone knows about Pandas and Requests, there is a treasure trove of lesser-known packages and modern patterns that can drastically improve your workflow. …











