Welcome to my blog where I write about things that interest me, stuff that was hard to figure out, and sometimes just to show off. I hope you find something interesting. Below you’ll find my most recent blog posts but you can also explore by tags. Or maybe you’re interested in stuff I’ve built?

Recent Blog Posts

Goodbye, Github Pages

1 min read

After many years my blog has moved from github pages to a new domain. You can now visit my blog at https://kuelzer.ca. I will leave this version of the blog up for now, but it will not receive any further updates. So check out the new website at https://kuelzer.ca!

Building NixOS images for aarch64 from a x86 Build Platform

3 min read

In my homelab I run many different single board computers, among them Odroid M1s. However, there’s various versions of Raspbian, Armbian, and Debian, each of them using some custom tweaks. And that’s a lot of time to maintain them. So I really like the idea of NixOS and read that it can be used to build bootable images for computers. I haven’t fully built intuition for all parts in this so it took me a while to get this working. Here’s my notes.

A Love Letter to KOReader

3 min read

I enjoy reading books. I very much enjoy reading printed books, but they’re heavy, you can’t read them in the dark, and unlike my phone or ereader, I don’t have them on me all the time. So, I read a lot of ebooks. And with most ereaders, reading novels is fine, at least if you read reflowable document types like epubs. But as soon as you start reading PDFs, all bets are off. At least, until I discovered KOReader

Zig, Memory, and the mysterious `170`

2 min read

I’m hacking on a small Zig application with a GTK frontend, and part of using GTK is passing around ?*anyopaque pointers and you never quite know if it’s working. In my app I’m passing around a struct that holds a string []const u8 to various GTK callbacks. However the string was empty. This led me down a rabbit hole of trying to figure out if my pointers were correctly passed, even going as far as stepping through it with a debugger. Turns out, the pointers are all correct. Even my string []const u8 was there with the correct length, except every single byte was set to 170 and I realized I was looking at undefined memory. Zig in debug mode sets undefined memory to 0xaa which is 170.