👋 Hi, I’m Tom. I write about technology, retro computing, photography, gravel biking, training, marketing, and whatever else I enjoy.
MOD files as a sound library with channels in MMBasic
Music and effects running side by side without cutting each other off. The path I took uses PLAY MODSAMPLE and a small set of fixed channels.
Fix connection drops on Omarchy
Pings and pages work, then they don't. How to settle a flaky Omarchy connection with IPv4 over DHCP and a properly wired DNS stack.
Boot Omarchy without a LUKS passphrase
Every boot asks for the LUKS passphrase. How to make Omarchy unlock and start up on its own instead.
Caching array lookups inside hot loops
When the same array index shows up five times per iteration, hoist it into a variable. Small change, real effect for me.
LOCAL costs more than you'd think in MMBasic
Reaching for LOCAL feels like clean programming. Inside hot loops it turned out to be the wrong reflex for me.
CIRCLE per frame costs more than you'd think
Tiny dots, tiny cost, right? Once I profiled it, CIRCLE was one of the most expensive calls per frame. Here's what I did about it.
Rolling your own vector font in MMBasic from DATA
Pixel fonts don't scale cleanly, and they don't fit a vector game visually either. How I built a scalable typeface out of DATA statements.
hugo-cms.nvim at a Glance
Short overview of my neovim plugin hugo-cms.nvim, and the whole series in reading order.
Rotating vectors in MMBasic without a FOR loop
Rotating each vertex by hand with COS and SIN is the obvious move. MATH V_ROTATE does the same job faster, with no per-point loop.
Toggle Completion in LazyVim with a Keybinding
Toggle blink.cmp on and off per buffer with Ctrl+Q in LazyVim. A small plugin override using Snacks.toggle.