Newest
Long-form Writing.
Posts about the things I build, break and occasionally over-engineer for fun. The short stuff lives over in bits. Some years are quieter than others.
30 posts · 37k words · since 2021
2026 15 posts
In retrospect this really should’ve been a two-parter 😬. I finally got tired of not knowing whether anyone reads this thing, so I spent a Saturday afternoon standing up Umami in the homelab. The install was the easy part; the instructions are dead simple.
Then I got to the bit where you expose it to the …
What Good is a Number You Can't Call?
This one’s relatively short. I feel like I’ve been posting about Plant🌱Smart a bit too much lately. But I’ve made a small change to how the site displays emergency information and it matters enough to …
Every Record Now Has a Source
As an experiment, last week I introduced r/InternetIsBeautiful to Plant🌱Smart. To my surprise, it was overall very well received! Obviously, there were a few inevitable bad-faith comments from your standard-issue …
Why I Rebuilt Plant Smart
Back in June I wrote a little blurb that said, in its entirety, “I should update Plant🌱Smart.” Bolder and more visionary words have never been written. So bold, in fact, I went right back to demolishing this …
My Blog Now Ships From My Homelab!
If you’ve given GitHub’s status page a quick glance recently, you’ll immediately see that it’s been going through it. Every outage is a small reminder that maybe we shouldn’t rely too much …
Glazier Release: v0.1.5
Today, I minted and tagged Glazier v0.1.5. Immediately after, realised I never announced v0.1.4, the release with all the actual features in it. So, Happy Birthday, you get a twofer.
Some Long Overdue Demolition
Two months ago I wrote Some Long Overdue Housekeeping. A post about giving this blog a proper facelift. I untangled my Tailwind setup, modernised Hugo and taught it to drive the compiler natively and generally felt very …
It's OK to Let Go
So, I’m a sucker for wordplay and puns. Anyway…
There’s a line in my shell history that goes back to 2022: go get github.com/wilhelm-murdoch/go-collection. For years it was the first dependency into …
I Added Variable Block Support To Glazier
I knew the moment I thought about potentially adding variable definition blocks as a first-class feature Glazier it was going to bother me until I went about implementing it. So, as expected, a week later, here we are. I …
Why I Built Glazier
I live in tmux. I typically have an editor here, a dev server there, logs tailing in the corner or a spare pane for poking at things. The trouble is that this little world is frustratingly ephemeral. Rebooting my machine …
Let Me Show You My Bits
A while back, in Reading Between the Posts, I wired up the home page so the quiet gaps between articles would narrate themselves - “1 bit and 41 changelog events in between”. There was just one tiny problem …
Reading Between the Posts
The front page of this site has always been a plain list of articles. Which would be fine if I wrote longer-form articles a bit more often. I do, however, make code commits to this site far more frequently. I’m …
A Year in Circles... I mean Squares. Or, is it Squircles?
If you scroll up to the top of the home page, you’ll find a pair of little rows of green squircles. It’s my own dumbed-down take on GitHub’s contribution graph. Effectively, it’s the same idea, …
A Changelog That Builds Itself
This site has a changelog page. It’s not one I write by hand as it builds itself from my activity on GitHub every time the site deploys. I think it’s a neat little trick. It also spent a solid afternoon …
Some Long Overdue Housekeeping
This blog has been quietly chugging along for a while now without me paying it much attention. Which is, I suppose, the whole point of a set-and-forget setup. But “set-and-forget” has a sneaky way of becoming …
2025 4 posts
Printing Ordinal Numbers in Hugo
I’ve been having such a good time building up this website and Hugo has been incredibly fun – and relatively simple – to work with. Though, from time to time, I find myself scratching my head at the absence of a …
My Blog Publishing Setup & Workflow
Late last year I parted ways with Hashnode as the platform of choice for my blog. They pivoted a bit too far into the generative AI space which — to me for a blogging platform — made little to no sense. What? You write …
Breaking Up Log Output Using Bash
I tend to look at a lot of log output throughout the day as part of my role as platform engineer. This obviously extends to any backend, or ops-related, role. One little niggle that always gets to me is tailing output …
How to Mass-Unfollow Instagram Accounts
I’m not super-active on Instagram these days and Threads was a real let down. I have a dormant Mastodon account, but find myself being quite happy on Bluesky at the moment. Who knows how long that will last. Having …
2024 2 posts
Testing Markdown Elements
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea …
The Longer Something Doesn't Happen, the Sooner it Will
This is often referred to as the “Mean Time Between Failures (MTBF)” in the context of Site Reliability Engineering. It’s a somewhat counterintuitive concept that highlights the fact that failures or …
2023 1 post
Why I Built Plant Smart
Simply put, I love plants and I love animals. I can’t count how many times I’ve been to a plant nursery and had to stop and do a Google search to see if something was safe enough to bring home and keep around …
2022 5 posts
Learning Bash Through Pointless Fun
Responding to company chat messages in a mocking and sarcastic tone is one of my favourite past times. Classic engineer snark as it were. We’re all in on the joke. However, the artful nuances of snark via online …
Filtering Docker Containers with jq
As is the case with any seasoned DevOps engineer, I have a set of tools in my kit that I simply cannot live without. If I had to distill them into a top-5 list it would be the following.
Why Can't I Hold All These Slack Emojis?
Previously, last blog post I wrote covered how to make a quick escape with your precious hoard of custom Slack emojis. It was fairly well-received, but didn’t quite cover the next step in the migration process; how …
Liberating Custom Slack Emojis
As is stupid tradition, whenever I start at a new company, one of the first things I like to do while getting settled in is upload my favourite emojis to whatever real-time messaging platform is in use. I know it’s …
Save Money by Keeping Your AWS Account Clean
At a prior role, I managed just under 20 AWS accounts. Their uses varied from production workloads, to dedicated CI/CD environments, sandboxed areas for our engineers to experiment in, log aggregation, the list goes on.
2021 3 posts
Deleting Massive S3 Buckets the Easy Way
I’m in the middle of decommissioning a service at the moment and I have to do the typical process of performing final snapshots and cleaning up extant resources. It’s incredibly tedious, so let’s walk …
Messing Around with TXT Records
If you’ve spent any time in an ops-related position, you’ve had to add these records when using custom domain names while integrating with some 3rd-party service. Especially, if you’ve ever wanted to …
Falsifying Github Participation Graphs for Fun & Profit
If you’ve spent any time job hunting in the tech industry, you’ve had to deal with recruiters. I like to joke around with my peers about how they’re a necessary evil, but in all seriousness, great …