Happy Birthday to Website

My website is now ten years old! How willhbr.net appeared as this was posted. Ten years ago today I made the first commit to this website, consisting of just an index.html with the contents: Sup. Thankfully it didn’t stay like that for long (just over three hours) and soon after … | Continue reading


@willhbr.net | 14 days ago

Glory Is an Indeterminate Amount of Bandwidth Away

On Mastodon I saw this toot showing a tangle of interconnected AWS services used to host a Wordpress site. I don’t speak AWS so it looks confusing.1 One of the replies linked to this post, which I’d come across last week. Seeing it twice was clearly a sign to share my thoughts. O … | Continue reading


@willhbr.net | 1 month ago

Blogroll: Early 2024

Blogroll, incomplete, early 2024, presented without comment, in no particular order. 500 Mile Email: The Wi-Fi only works when it’s raining Bob Nystrom stuffwithstuff: What Color is Your Function? Mat Duggan: Fixing Macs Door to Door Nikita Prokopov: The Absolute Minimum Every So … | Continue reading


@willhbr.net | 1 month ago

It's Not Me, It's Git

tl;dr: I’ve been using jj for version control in my personal projects and it makes me much happier than using git. Continue reading for lukewarm takes on the git CLI. Firstly I’ll just get some disclaimers out of the way: I only use git (now JJ) for personal projects, I don’t use … | Continue reading


@willhbr.net | 1 month ago

Further Adventures in tmux Code Evaluation

In my previous post about how I wrote a compiler that turns Python code into a tmux config file that makes tmux evaluate the program by performing actions while switching between windows. My implementation relies on a feature in tmux called “hooks” which run an command whenever a … | Continue reading


@willhbr.net | 2 months ago

Making a Compiler to Prove tmux Is Turing Complete

You can use features of tmux to implement a Turing-complete instruction set, allowing you to compile code that runs in tmux by moving windows. I feel like I really have to emphasise this: I’m not running a command-line program in tmux, or using tmux to launch a program. I can get … | Continue reading


@willhbr.net | 2 months ago

tmux.conf, With Commentary

I’m a very heavy user of tmux, and like to share how I make the most of it. This was going to be a short list of some nice things to know and some pointers to features people might not be aware of, but then I realised it’s probably easier to just explain the stuff that I have con … | Continue reading


@willhbr.net | 2 months ago

Optimising for Modification

It is an accepted wisdom that it’s more important to write code that is easily read and understood, in contrast to writing code that is fast to write1. This is typically used in discussions around verbose or statically typed languages versus terser dynamically typed languages. Th … | Continue reading


@willhbr.net | 2 months ago

A Successful Experiment in Self-Hosted RSS Reading

For just over a month, my RSS reading has been self-hosted. Usually I’d write about this kind of thing because there was an interesting challenge or something that I learnt in the process, but it has basically been a completely transparent change. I’m still using NetNewsWire to d … | Continue reading


@willhbr.net | 2 months ago

Scalability and Capability

I thought of this as a single topic, but when I started writing it I realised that I was really thinking about two different things—scalability and capability—but after writing half of this I also realised that the broader idea that I’ve been thinking about needs to include both. … | Continue reading


@willhbr.net | 3 months ago

40th Anniversary Macs

The Upgrade Podcast just did a special episode with panellists drafting various Mac-related things for the 40th anniversary of the original Macintosh. Here are my pics: First Mac I was looking for an upgrade to my Acer netbook, trawling through second-hand computers. This was in … | Continue reading


@willhbr.net | 3 months ago

The Code-Config Continuum

At some point you’ve probably written or edited a config file that had the same block of config repeated over and over again with just one or two fields changed each time. Every time you added a new block you’d just duplicate the previous block and change the one field. Maybe you … | Continue reading


@willhbr.net | 4 months ago

I'm Dumbfounded by Discord

I find Discord baffling. Not in its popularity in group messaging for a class, team, or friend group—it seems fine at that—but the other, larger use cases. In 2020 and 2021 I learnt how to create digital art in Blender, the 3D modelling software. I watched both Clinton Jones’s vi … | Continue reading


@willhbr.net | 4 months ago

Build and Install Tools Using Containers

Another challenge in my quest to not have any programming languages installed directly on my computer is installing programs that need to be built from source. I’ve been using jj in place of Git for the last few months1. To install it you can either download the pre-build binarie … | Continue reading


@willhbr.net | 4 months ago

Jekyll Blog Tips

This site that you’re reading now is generated by Jekyll and hosted on GitHub Pages. Originally when I set this site up, GitHub Pages only supported their own limited set of plugins, and if you wanted to do anything extra you had to generate the HTML content yourself. In the inte … | Continue reading


@willhbr.net | 5 months ago

Parsing Flags is Surprisingly Hard

On the topic of “thinking too much about things that you didn’t really want to think about”, have you considered just how hard it is to parse command-line arguments? Most tools—especially the battle-tested standard POSIX command-line tools—have this worked out pretty well, and wo … | Continue reading


@willhbr.net | 6 months ago

How I Learned to Stop Worrying and Love Concurrency

Doing more than one thing at a time is still a somewhat unsolved problem in programming languages. We’ve largely settled on how variables, types, exceptions, functions, and suchlike usually work, but when it comes to concurrency the options vary between “just use threads” and som … | Continue reading


@willhbr.net | 6 months ago

Improvements for Initialising Pod Projects

One of the major usability misses with pod was that it was tricky to setup a new project. My goal was remove the need for language-specific development tools installed directly onto my computer, but whenever I started a new project with pod, I would need to run crystal init to cr … | Continue reading


@willhbr.net | 7 months ago

The Best Reading App

Since the start of this year—for some reason, I can’t put my finger on what—I’ve been reading far more RSS feeds and articles that I’ve come across. I’ve sporadically used RSS in the past, but never really got into a groove with it. Currently I’m using NetNewsWire, which is good … | Continue reading


@willhbr.net | 7 months ago

The Five Stages of Swift on Linux

Recently I attempted to learn about Swift’s async support by doing my favourite thing—writing an RPC framework. In this case the “RPC framework” is just a request/response abstraction over websockets (which are message-based), which makes the actual RPC bit very simple, as all it … | Continue reading


@willhbr.net | 9 months ago

Warp Terminal

Yesterday I came across Warp Terminal via their advertisement on Daring Fireball.1 Immediately I was fascinated to know what their backwards-compatibility story was, and how their features were implemented. This is in a similar vein to the difficulties of modernising shells, that … | Continue reading


@willhbr.net | 9 months ago

The Curse of Knowledge

The curse of knowledge is the idea that as you become more of an expert in an area, it becomes harder to explain basic concepts in that area, because your assumed based level of knowledge is much greater than the typical level of understanding. Basically you might try and explain … | Continue reading


@willhbr.net | 9 months ago

Helicopter Tracking for Safer Drone Flights

Avid readers will know that I like to fly my drone around the beaches in Sydney. The airspace is fairly heavily trafficked, and so I take the drone rules very seriously. This means no flying in restricted airspace (leading to other solutions for getting photos in these areas), no … | Continue reading


@willhbr.net | 9 months ago

Simple Home Server Monitoring with Prometheus in Podman

The next step in my containerising journey is setting up Prometheus monitoring. I’m not going to use this for alerts or anything fancy yet, just to collect data and see what the load and health of my server is and be able to track trends over time. In doing this I wanted: I don’t … | Continue reading


@willhbr.net | 10 months ago

Limited Languages Foster Obtuse APIs

On the topic of the design decisions of a low-level system limiting the design space of things built on top of them, the design of programming languages has a significant impact on the APIs and software built using them. Go is heralded by the likes of Hacker News and r/programmin … | Continue reading


@willhbr.net | 10 months ago

Why Modernising Shells is a Sisyphean Effort

Anyone that knows me is probably aware that I spend a lot of time in the terminal. One of the many things that I have wasted time learning is the various oddities of shell scripting, and so I am cursed with the knowledge of the tradeoffs in their design. It seems to be something … | Continue reading


@willhbr.net | 10 months ago

Picking a Synology

One of the key characteristics you want from a backup system is reliability. You want to minimise the number of things that can fail, and reduce the impact of each failure for when they do happen. These are not characteristics that would be used to describe my original backup sys … | Continue reading


@willhbr.net | 10 months ago

Why Crystal is the Best Language Ever

Crystal is a statically typed language with the syntax of a dynamically typed one. I first used Crystal in 2016—about version 0.20.0 or so. The type of projects I usually work on in my spare time are things like pod, or my server that posts photos to my photos website. Type Syste … | Continue reading


@willhbr.net | 11 months ago

Interfaces of Spatial Photo Editing

How would you import, edit, and export photos using an AR/VR headset? I personally think there is a lot of potential for this to be an exceptional experience, far better than working on a laptop, especially in sub-optimal working conditions. I also think the jump from hand to fac … | Continue reading


@willhbr.net | 11 months ago

DJI Mini 3 Pro

Most camera reviews are pretty decent when it comes to photo and video quality (although for the type of cameras I buy, photo quality is usually an afterthought1). The thing that seems to be left out is the annoying nits and limitations that you become aware of after using someth … | Continue reading


@willhbr.net | 11 months ago