C++

C++20 Modules Don't Spark Joy

A real-world experience report on using C++20 modules in a 250-file game engine project. What works, what breaks across MSVC, Clang, and GCC, and patterns that help. · More

Homelab

Using Flux for GitOps

Setting up Flux for GitOps on a bare-metal Kubernetes cluster: how reconciliation works, repository structures, and managing cluster state from Git. · More

Older posts

27 Dec 2024/ Homelab

Installing Fedora CoreOS

Installing Fedora CoreOS for a Kubernetes-ready base system using Ignition config files and the Butane transpiler, with common settings and pitfalls.

23 Dec 2024/ Homelab

Bare-metal Kubernetes for your Homelab

How to build a bare-metal Kubernetes cluster at home: picking the right hardware, planning the architecture, and getting everything ready for deployment.

04 Dec 2023/ Programming

How my algorithm accidentally became O(n!)

Advent of Code 2023 day 4: how a scratchcard puzzle leads to an accidental O(n!) algorithm, and how memoization brings it back to linear time.

04 Apr 2023/ GameDev

First steps with Vulkan

Initializing the Vulkan graphics API: creating an instance, selecting devices, and taking the first steps toward rendering in a C++ game engine.

07 Feb 2023/ GameDev

Rendering Overview

High-level architecture of a Vulkan-based game renderer: the graphics pipeline, models, shaders, textures, and how they all fit together.

12 Jan 2023/ GameDev

A Basic Logger

Adding structured logging to a C++ game engine using Boost.Log with sinks, formatters, and severity levels, wrapped in a clean C++20 module.

11 Jan 2023/ GameDev

How to write a game engine from scratch

Starting a voxel game engine from scratch with C++, Vulkan, Visual Studio, and vcpkg. Project structure, dependencies, and initial setup.

23 Sept 2022/ Cloud

Quick Tip: RBAC for individual APIs in APIM

Azure API Management's built-in roles don't cover the common case: letting teams manage their own APIs without service-level access. Here's a custom role that does.

14 Jun 2022/ C++

Doing syscalls by hand

How Linux system calls work under the hood: from user space to kernel space, the x64 calling convention, and implementing syscalls directly in assembly.

03 Oct 2021/ C++

Using enum classes as bitmasks

C++ enum classes don't support bitwise operators like |, & and ^ out of the box. Here's how to enable them using a constexpr-friendly EnumBitset wrapper.