Type Safe Enums in Go

I’m willing to bet that many Go programmers have seen or used this strategy for enumerating things in code before: type Profession int const ( Unknown Profession = iota Warrior Cleric Hunter Mage ) In practice, this is probably fine. In fact, I can’t think of a time this has caused a (known) bug in one of my programs (yet.) Famous last words. However, there are times where I wish the solution was a little more bulletproof at compile-time.

Read More…

My New Virtualization Homelab

Behold! The specs Processor: Intel Core i5 11400 6C/12T Motherboard: ASUS Prime 560M-A RAM: 32GiB DDR4 @ 3200MHz (Corsair Vengeance) SSD0: Samsung Pro 970 256GB SSD1: Tcsungbow 1TB ¯\_(ツ)_/¯ Case: CoolerMaster N200 MicroATX Hypervisor/host OS: Debian 11 Bullseye Why? I like virtualization and I want an always-on server to continue to learn and experiment with the KVM virtualization ecosystem. Why not used enterprise gear? Looks big and loud. Most of the used gear at my price point seemed kind of old, too.

Read More…

Running an ARM64 OpenBSD Virtual Machine on Apple Silicon

Install an HVF-equipped build of QEMU Download the OpenBSD 7 Install Image Create a new virtual disk Set up the launch script Install OpenBSD Set up host to guest SSH access Install an HVF-equipped build of QEMU The QEMU developers recently merged Apple Silicon support for Apple’s Hypervisor.Framework virtualization layer. This means that barring any complications or removals, the next release tag for QEMU should include this support.

Read More…

A Faster Way to Create Virtual Machines with Cloud Images and virt-manager

I’ve written previously about Booting Cloud Images with QEMU. However, I’ve since graduated to a more convenient method of spawning virtual machines. This method is also much faster and is more cohesive with the rest of the virtualization stack that you’ll find on your Linux distribution. As someone who creates and tears down tons of virtual machines for testing things, this method appeals to me more than the previous. Let’s get into it.

Read More…

Implementing a Continuous Delivery Pipeline for my Discord Bot with GitHub Actions, podman, and systemd

I’ve been having a lot of fun lately refining a weekend project I started a few months ago. I basically threw this bot over the wall back in early April. About a month ago, I started getting serious about learning the Go programming language, so I thought I’d just revisit my Discord bot with a more “learned” eye and find ways to polish it up a bit. Popple is a Discord bot that I made for myself and my friends, and it has been my playground for practicing everything I was learning in a project with an extremely small blast radius.

Read More…

How I use Thunderbird to Write Emails and Review Patches

Regardless of how one might feel about patches-over-email software development, the reality is that a lot of exciting open source projects are developed on mailing lists. Configuring a pleasant plaintext-oriented e-mail environment may not be obvious for those of us who come from a primarily git forge style background. At least, it wasn’t for me. In any case, I’ve finally arrived at a productive setup and I’d like to write it down here for posterity.

Read More…

Tips for Improving the Quality of Your Code Reviews

Check out the changes locally For everything but the most trivial of patches, check change out locally. Not only is this a technical prerequisite for some of the other tips in this article, but I’ve found it is easier to remain focused on the review when it takes place outside of my email inbox/GitHub/Gitlab/etc. Use more context when viewing changes The default context for a diff is rather narrow. It will show lines added and removed next to only a few other lines of the code.

Read More…

sevctl available soon in Fedora 34

I am pleased to announce that sevctl will be available in the Fedora repositories starting with Fedora 34. Fedora is the first distribution to include sevctl in its repositories 🎉. sevctl is an administrative utility for managing the AMD Secure Encrypted Virtualization (SEV) platform, which is available on AMD’s EPYC processors. It makes many routine AMD SEV tasks quite easy, such as: Generating, exporting, and verifying a certificate chain Displaying information about the SEV platform Resetting the platform’s persistent state As of this writing, Fedora 34 is entering its final freeze, but sevctl is queued for inclusion once Fedora 34 thaws.

Read More…

Booting Cloud Images with QEMU

Do you ever get frustrated with waiting for a heavy VM image to download or with installing operating systems onto virtual machines manually? It can start to feel cumbersome after a while, especially if you bring up and tear down lots of virtual machines as part of your workflow. It’d be nice if spawning a ready-to-use VM was as quick and as easy as it is when using a public cloud.

Read More…

How Rust's Type Checker Helped Find a Bug in a Linux Kernel ioctl Definition

Don’t you love it when your compiler thinks hard so you don’t have to? Rust’s built-in static analysis is praised for providing all kinds of safety guarantees for your code. Today, it’s not about your code, or even my code; it’s about how calling Linux ioctls through a type-safe abstraction layer exposed a bug in an ioctl definition and Rust’s type-checker was the first one to bark about it! iocuddle is a library for improving the safety of ioctl calls from Rust.

Read More…