Hi there, I’m ganthore.

I build infrastructure. Fifteen-plus years of it — Linux systems, containers, CI/CD, the DevOps plumbing that keeps everything standing. These days I’m building out a local agentic AI stack — tools I own, running on hardware I own. I write about it on the blog.

Eagle Scout, semi-professional photographer, DnD enthusiast, gamer, and a licensed HAM radio operator (KN4FHS). I have too many hobbies and no plans to fix that.

QMidiGen 0.1.4: Dead Fields, Live Presets, and a Grudge Against cxx-qt

The rotation test stops being a crash detector and starts finding config fields that were parsed, stored, and then quietly ignored. Plus the case for YAML presets, a blunt list of cxx-qt complaints, and melody/harmony quality work that finally stops the trumpets from screeching.

read more →

QMidiGen 0.1.3: The Generator Got a Stress Test

A rotation test catches bugs across 51 subtypes, a parallel librosa pipeline measures 470+ source tracks and finds the last dungeon was 44 BPM too slow, battle generation gets a major overhaul, and raising the base velocity breaks every soundfont profile at once.

read more →

QMidiGen 0.1.2: Fifty-Five Styles and Several Hard Lessons

Studying classic and modern JRPG soundtracks to fix the generator, three FluidSynth bugs that required reading C source code, and what cxx-qt property signals do when you’re not looking.

read more →

Building QMidiGen: A Procedural MIDI Composer in Rust

A 1999 Windows program that generated music from math, a Rust/Qt/QML stack that shouldn’t work but does, and the MCP integration nobody asked for but I built anyway.

read more →

Down the Agentic AI Rabbit Hole

Local compute, custom agents, and way too many models.

read more →