Switching Vim colorschemes based on which keyboard layout I have active

Did you know Vim has a client-server model baked in? Of course it does. If you run 1 vim --servername LOVE , then in another terminal something like 1 vim --servername LOVE --remote-send "<Cmd>colorscheme peachpuff<CR>" , you’ll find your Vim terminal switch to the creamy default theme all true gangsters love - without you actually having to do anything. I frequently flip between a US- and Finnish-based keyboard while doing my language studies....

July 6, 2025

Consider the cronslave

As a nerdy, working-class kid who grew up in the 1990s, knowing what time it actually was was a luxury I rarely had access to before I was 12 or so and my parents finally got an Internet connection with its attendant link to the Network Time Protocol. If you had told me I could have not just a watch but an entire machine that Never lost the time, Did what I wanted, how I wanted it, and Could be programmed to do what I want, how I want it on a schedule, I would have had to substantially revise my Christmas wishlist....

May 30, 2025

Things you should never do: Use Expect to autotype SSH passwords in scripts

Before I moved to Finland, I spent some time in the Hobbesian war of all against all that is Wisconsin1. Men were men back in that less civilized age, and “cybersecurity” a ninny-word dreamt up by social harmony types who honestly thought they had anything worth stealing in their servers. For those of us doing real work, which I must emphasize you should never do, we had Expect. And to SSH automatically into servers where we didn’t have fancy accoutrements like “keys” or “audit requirements”, we did stuff like...

February 26, 2025

How I ask GPT-4 to make tiny Python scripts in practice

First get a working script. “Hey GPT-4, write me a ChatGPT script that does .” Manually check over the script and iterate until it’s giving me what I want. “Now wrap the script into a click command-line interface.” I almost always specify to use an --input flag and an --output flag. If the data it’s working with is human-readable, “Make it so that if --input is not specified, it reads data from stdin....

August 22, 2024

The highest personal ROI program I have written so far

It would have to be finstem, a simple command-line program I wrote to reduce Finnish words down to their root form. Finnish is a lot like Latin or Russian in that its words often become lumbering behemoths of rewritten consonants, suffixes upon suffixes, and this makes it hard to look up in a dictionary – that is, until you factor in its very regular orthography and the phenomenal efforts of the Finnish programming industry: finstem is basically a very specialized UI for the OpenOffice spell checker, and I have no shame in admitting that....

July 30, 2024

Language learning treated as breadth-first search

I am, emphatically, not the language learning type. I’ve done enough of it over my life to know this. It’s certainly one of the better hobbies out there: You can do it for free (in principle), you can sink as many hours as you care to into it, and if you get good enough at it you get to reap some unique cultural and economic1 benefits. But there’s a reason I picked up Python when 14 year old me decided he wanted to get ahead in life instead of (say) German....

April 22, 2024

Check my math - NixOS vs the Most Complicated Program on Earth (MCPOE)

Imagine you had the Most Complicated Program On Earth (MCPOE), with 1,000,000 dependencies. Every dependency must be build correctly exactly right or the MCPOE will fail to compile. MCPOE’s 10x dev team chose their packages so that each dependency has only a 1/1,000,000 chance of having something go wrong when you’re installing them - maybe a whitespace character snuck into the wrong build script, maybe solar wind hit the build computer....

April 14, 2024

fd + xargs + bat = quick document review

I’ve been on vacation this week, and part of what I’ve been up to is fixing up the Selkouutiset Archive. Like most of my websites these days, SA is powered by Hugo, which means handling a lot of Markdown documents, which means I opted to use an intermediate Git repo as a submodule to actually store the custom-processed documents. After a few tweaks here and there, I found myself wanting to quickly flip through all of the Markdown documents I had generated for each news day....

February 25, 2024

Getting `fzf` to print the preview pane

fzf is an incredibly useful bit of software, if someone shows you how to use it. There’s a lot more to it than just fuzzy-switching directories and fuzzy-searching you shell history – it also comes with a preview pane that updates on every keystroke. Try 1 echo '' | fzf --preview 'echo {q} {q}' and typing something to see how it works. ({q} is the query you type in at the bottom of the screen....

December 6, 2023

Vagrant lets you wrap VDI images

At work I’m currently experimenting with using Vagrant to automate getting an entire local network of our tiny embedded Linux systems running all on my local box. Alas! One of our devices uses a custom Yocto distribution! But wait, we have scripts to run these as VDI images, and apparently that’s enough for Vagrant to get to work! 1 vagrant package --base my-virtual-machine Further reading materials for future me: Creating a Base Box, and the Box File Format....

December 5, 2023