Blog posts

Cycling's in Rude Health. Shame Hardly Anyone in Britain Can Watch It.

The Tour de France just had one of its great editions, and this was the summer it vanished behind a paywall in Britain. A sport can be in rude health at the top and quietly dying at the bottom at the same time, and I think we just watched it start to happen.

I Watched the Football, Gianni. That's the Problem.

FIFA's president answered a World Cup of controversy by telling his critics to meditate, pray, or watch a football match. I did watch it. All of it. That is exactly how I ended up not trusting the people running it.

I'm Not Sure I Trust the Football Anymore

The 2026 World Cup was full of decisions I can't prove were wrong. That's exactly the problem. When you no longer trust the people running the game, a bad call and a fixed one start to feel the same, and the sport quietly stops being worth arguing about.

Why AWS DMS Is Rarely the Best MySQL Migration Option

For a same-engine MySQL move, native binlog replication beats AWS DMS on the two things that matter: data fidelity and operational simplicity. Here is the reasoning, and the war stories.

Migrating MySQL to RDS With Dump-and-Load Plus Native Binlog Replication

Move a large MySQL database to AWS RDS with near-zero data loss and a short cutover, using nothing but native MySQL tooling. The mechanics are simple; the sharp edges are all in the RDS control plane.

Sharding a Cross-Cloud Bucket Migration, and Why AWS DataSync Wasn't Fit for Purpose

AWS DataSync silently wrote every file as 0 bytes migrating GCS to S3, because it could not reconcile GCS's CRC32c checksums. The fix was to shard the job and match each shard to a tool that could handle it.

CrewAI ReadMe Generator, a fully customised Crew

A fully customised CrewAI project to generate a README file from a local folder

I built a Static Site Generator to build this site

What my personal Static Site Generator looks like, the mistakes I made and the lessons I learned.

Unit Testing with Terraform: Basics and Benefits

Some examples of practically useful unit tests to check that your code is producing the expected output.

Full Vagrant Ubuntu 22 Dev (VirtualBox) setup

A full setup for a Vagrant Ubuntu 22.04 Dev environment, including a script to install software and configure the machine for an ssh user

Essential Guide to Using AWS Nuke

When you create a new AWS account, you need to prepare it for use. The first thing you should do is run AWS Nuke

8 Best AI YouTube channels

The best YouTube channels to subscribe to if you're interested in AI

Instance Scheduler with AWS EventBridge

Save some money by scheduling your EC2 instances to stop and start with AWS EventBridge and Terraform

Revealing the power of Custom GPTs

Make custom GPTs your own, the more specific the better

Advanced Terraform Wrap-up

A wrap-up of our series: An Introduction to Advanced Terraform. Bringing all the concepts together in a fully dynamic example

Terraform Cloud and remote state

Using Terraform Cloud and remote state to manage infrastructure

Flattening data in Terraform

A deep-dive on manipulating data in Terraform, to prepare it for use in resource blocks

User-friendly Terraform

Making it easy for other people to use your Terraform code

Terraform Workspaces and Environments

Using Terraform workspaces and environments to manage infrastructure

Terraform, Objects, Maps, Lists, Sets & Tuples

A quick look at the different data structures in Terraform, with some examples of how to use them

Terraform setup, Providers and Multi-Region Deployments

Setting up Terraform providers and profiles for multi-region deployments

Introduction to Advanced Terraform

This is the first article in a series that will introduce some fairly advanced terraform concepts quite quickly

Resolving Multi-Account Git SSH Issues on Linux

Working with multiple GitHub accounts on a single Linux machine