Hibernating is easy now?

Alternatively: S0ix is still awful My Linux laptop runs out of battery all the time. It goes to sleep, and then it just drains and drains until it’s dead. It’s a problem we’ve largely solved ...

Easy, secure API keys

I needed to add API key authentication to our work environment. I needed: I was able to use JWT tokens in a slightly clever way to make this happen. The best part is, there are ...

Automatic recovery using lvm-autosnap

TL;DR: https://github.com/intentionally-left-nil/lvm-autosnap Running linux is an adventure. About a year ago, I switched from MacOS to Ubuntu (eww snaps), then Fedora (fine), then Manjaro (yeah that was a mistake) until finally landing on the final ...

Introducing Async Service

Distributed tasks with Postgres & Rabbitmq TL;DR: Check out the code here At my workplace, we needed a mechanism to: Have service A tell service B to start executing long-running tasks, with notifications upon completion ...

Initramfs with systemd & LUKS

TL;DR My old boot process looks like this: UEFI (with secure boot on) systemd-boot unified kernel.efi (initramfs + kernel params + kernel all rolled into one efi and signed) initramfs (busybox) encrypt hook: detects that ...

Oh Brothers, where art thou

Last weekend, we backpacked in the Olympics and climbed the brothers. The route itself is straightforward up to Lena lakes (where almost everyone at the trailhead was headed to). Once you cross over to the ...

Interfaces in golang

TL;DR: An interface just defines a collection of methods. When you create an instance, it’s just a wrapper around a concrete type. In addition to the concrete type, the interface contains an extra array of ...