Cloud SQL is not great

I’ve finally finished migrating our 9.6 PostgreSQL database from Google Cloud SQL to 14 running on a VM under our control. This may not be its final home, but at least it has been liberated from the …

Generic integer functions in Go and Rust

Suppose we want to create a validation function for a struct, to ensure that a number is between two values (for example, for validating a HTML form’s submission). However, we’d like to make this fun…

Apr 24, 2022

It’s time for a federal election in Australia in just over a month. I love these times, and I suspect I get an enjoyment out of it that’s similar to what others get watching sport.

On Q&A last night…

Nov 26, 2021
Go footguns: Go Defer and Rust Drop

My extremely slow journey to learn Rust continues, delayed by other projects. My attention in 2021 has been primarily on Go and PostgreSQL. I’m coming to appreciate and respect the database overall …

Sep 3, 2021
Thick databases

It doesn’t matter how much you learn, there’s still a tremendous amount you don’t know, significant blindspots. I’ve been coding on and off since my high school days some 20+ years ago. After workin…

Aug 5, 2021
ERROR: tuple concurrently updated

Mostly a note for myself, to help me in the future, when searching the web didn’t help. I was getting this error trying to grant some privileges for a test:

”` postgres=> grant all privileges on al…

Jul 27, 2021
SQL query builders

My latest attitude towards the database has been to respect it more, by taking advantage of more of the powerful features it has available. That means taking advantage of features specific to my go-t…

Mar 20, 2021
A simple blog in Go

It has been a hectic two months. My plans to learn rust have been shelved for now, due to far too much work. However, that hasn’t stopped me from doing what I …

Jan 25, 2021
Rust and Go department directories

Continuing my journey with Rust, I recently completed a suggested exercise from “The Book”:

Using a hash map and vectors, create a t…

Jan 19, 2021
Caddy vs Traefik

This post will be a relatively short account of my preference for Caddy over Traefik.

A fair few months ago, enough that the details have been lost and all that remains is…

Jan 3, 2021
Rust match guards and exhaustive conditions

I have started learning the Rust language, to see what people find attractive about it, and to understand cases where I may want to use it. A post on [correctness with types](

Dec 31, 2020
Returning to roots: table updates with HTMX

I have recently been contemplating the value of modern web apps: how far we have strayed from the way websites used to be (and still often are) built, and the benefits and costs of doing so. I am con…

May 14, 2020
Easy updates for your Hugo blog using Caddy

Previously I wrote about my initial plan for creating this blog using Hugo. This is a brief post on how to make it super easy to deploy updates to your blog. In f…

Apr 7, 2020
On hold music is the worst

On hold music is the worst, and kind of perverse. It is designed, I assume, to assure the caller that they are still on the line, and that they should just continue to wait. However, for the caller …

Feb 15, 2020
Second steps with Hugo: RSS, Cloudflare, Analytics

There are a bunch of smaller things I wanted to do, and here’s how they went.

RSS Feed

Hugo already provides RSS feeds out of the box, so I didn’t need to configure anything. The XML output for t…

Feb 4, 2020
Hosting my new blog with Hugo

Welcome to, my home in the cloud!

In the last few days I’ve decided it’s time to start my own blog, so here we are! This blog is intended to contain a mix of topic…