How to Create a Linux Virtual Machine on a Mac

As a technical writer, I often work with different operating systems and environments to test applications. It would be a nuisance if I needed a separate machine for every test case. Happily, it’s possible to run multiple operating systems on a single machine. In this tutorial, I’ll explain how to create a Linux virtual machine (VM) on an Apple Silicon Mac using UTM (which stands for Universal Turing Machine). UTM is free, open-source virtualisation software that’s specifically designed for macOS. ...

5 November, 2025 · 6 min · 1090 words · Catherine Pope

How to Create a Book Database with Hugo and YAML - Part 3

Once I got my YAML book list set up, I couldn’t stop thinking of different uses for it. Although I’m mainly using it to generate reading lists for specific workshops, I thought it would be useful to also generate a full reading list or bibliography. In this tutorial, I’ll extend the code from Part 1 and Part 2 to retrieve and display all the books, arranged by subject. To follow along, you’ll need the following files from those earlier tutorials: ...

5 October, 2025 · 3 min · 569 words · Catherine Pope

How to Create a Book Database With Hugo and YAML - Part 2

In my previous tutorial, I showed how to create a simple YAML database in Hugo for reusable book links. Only five minutes passed before I started tinkering and building something fancier. In this tutorial, I’ll explain how to create subject-specific book lists. This approach works well for quickly generating and sharing reading lists. As with the previous tutorial, you can also adapt this code for organising web links, tools, or other resources. ...

30 September, 2025 · 5 min · 948 words · Catherine Pope

How to Create a Book Database with Hugo and YAML - Part 1

While creating resources for some of my workshops, I realised I was recommending the same books repeatedly. This also meant I was typing the same details repeatedly - time I could be spending reading. I then started experimenting with creating a simple database in Hugo. I wanted a solution that would allow me to maintain my book details (title, author, and ISBN) in one place, then pull them into specific pages with a shortcode and link to a bookstore. This way, I’d: ...

29 September, 2025 · 5 min · 979 words · Catherine Pope

Open External Links in a New Tab With Hugo

After months of faffing around and configuring external links manually in Hugo, I decided there must be a better way. There is! Here’s the solution that worked for me for my bookstore links. Some themes include native support, so it’s a case of checking the documentation and adding a line to your hugo.yaml or hugo.toml config file. If, like me, you’re using a theme that doesn’t support this feature, here’s a method that might work for you. ...

18 September, 2025 · 3 min · 582 words · Catherine Pope

How to Automatically Sync AudioPen Notes with Obsidian

I’ve been an enthusiastic user of AudioPen for a few years. This brilliant app records and accurately transcribes your voice notes in moments. You can either opt for a light tidy to add punctuation and remove your ums and ahs, or ask it to make you sound like Cicero. Although you can organise your notes in AudioPen using folders and tags, most of us nerdy types already have a preferred note-taking app. In my case, that’s Obsidian. If you don’t know Obsidian, it’s a powerful yet simple app that stores your notes and plain markdown files and gives you various ways to make connections between them. ...

15 September, 2025 · 3 min · 479 words · Catherine Pope

Manage Multiple Hugo Versions with Docker

Hugo is usually the simple solution for website generation. Recently, though, I ran into a frustrating situation: the theme I wanted to use for one site required an older version of Hugo, whereas another site demanded the latest version. Although it’s possible to run multiple Hugo versions on the same machine, life is already complicated enough. In this tutorial, I’ll explain how you can build and preview a Hugo site with a Docker container. ...

15 September, 2025 · 4 min · 684 words · Catherine Pope

Getting Started with Helm

So far in this series, we’ve created some very simple Kubernetes applications. If you built something more complicated, with dozens of manifests, it would be a faff to share it with other people. Those other people might also struggle to understand and tweak your configuration. With a Helm Chart, you can define, install, and upgrade even the most complex Kubernetes application. For instance, I worked for a CI/CD company which offered a self-hosted Kubernetes-based version of its product. Rather than having to create lots of different Kubernetes resources, customers instead received a Helm Chart with everything already mapped out - all the Deployments, Secrets, Users, and ConfigMaps. They then configured some of the values and installed the chart on their own Kubernetes cluster. ...

28 October, 2022 · 6 min · 1115 words · Catherine Pope

Installing WordPress with Helm

One of the many advantages of Helm is that it gives you a one-command installation method for many popular apps. It would take a while to create all the necessary Pods, Services, and ConfigMaps manually. In this tutorial, I’ll guide you through a two-step process for installing WordPress with Helm. Although this isn’t necessarily something you’d want to do in the real world, it’s good for understanding the basics. I was very excited when I first got this working. ...

27 October, 2022 · 3 min · 590 words · Catherine Pope

Creating a Kubernetes Service Manifest

Last time, we created a simple manifest to launch a Kubernetes deployment. Although we found a Pod lurking in minikube dashboard, we couldn’t actually see anything interesting. In this tutorial, we’ll extend that manifest to include a Service and make the app available through a web browser. As before, you’ll need minikube and associated tools, all of which are detailed in an earlier post. Exposing your Pod To make the Pod containing the app visible, you need to expose the container’s port. This involves a small addition to the original manifest file: ...

18 October, 2022 · 3 min · 521 words · Catherine Pope