Andrew Quinn’s TILs

A place to keep track of things I’ve learned. Inspired by Simon Willison’s TILs.

All thoughts, opinions, etc. expressed herein are strictly my own and not of my employer’s.

Consulting available under the business name Siilikuin. For inquiries please email my first name at siilikuin.com.

Comments at the bottom of every page, including this one - check it out!

Where is the DevOps for Yocto?

The cozy world of DevOps has spoiled me with tools like Ansible, Terraform, and Packer. In the situations where I have a Linux machine already booted up, and sometimes already connected to the Internet, I can make things really easy on myself by slinging these tools in my usual way for repeatable, reproducible machines that may or may not come with the attendant headaches of immutable infrastructure (sorry, Nix, I’m not in love with you, I’m in love with the idea of you). ...

September 27, 2025

LLMs solve the biggest problem with language textbooks

Most languages have at least one high quality textbook written for secondary learners of the language. (This is no guarantee that one will be able to read the language that textbook is written in, but English to X is quite common, and some intrepid textbook writers have solved this problem by writing the textbook in the very language it is being taught in, starting with the simplest possible phrases and moving gradually up in difficulty.) ...

September 25, 2025

Code should be clean because business isn't

I am an ardent capitalist. I am also an ardent Unix philosopher. I have long percieved there to be some interesting tensions between these two wolves inside me. The Unix philosopher in me wants my code to be as simple and flexible as possible, and - not always, but often - to minimize the number of lines of code I need to sling to solve a given problem.1 The capitalist in me wants to cover as many edge cases as possible, make every transition as smooth as possible, and apply as much napalm to the fire of user acquisition and douse its twin flame user churn in liquid death of another kind. What to do? ...

September 20, 2025

tarsnap is cozy

I have been aware of tarsnap for a long time, but only recently did I actually get around to using it for anything, as a result of my big personal digital resiliency audit for 2025. For those of you not in the know, tarsnap is “online backups for the truly paranoid”, and tarsnap the command-line program is the client-side tool you invoke to actually zip up and push your archives into the vault. Its creator, Dr. Colin Percival, is a really smart and interesting dude for a whole bunch of reasons. I’m led to believe the whole business is basically a two-man show between him and his brother these days. ...

September 10, 2025

It's okay to solve a problem twice

Quoth “How to Become a Hacker”: 2. No problem should ever have to be solved twice. Creative brains are a valuable, limited resource. They shouldn't be wasted on re-inventing the wheel when there are so many fascinating new problems waiting out there. Much more at the original post, including preemptive rebuttals to what I’m about to describe. This post is entirely about cataloguing my own error. I took this maxim, perhaps, a little too close to heart when I was starting out as a software guy, 15-odd years ago. This is my apology to past me. Past me, I apologize. ...

August 22, 2025

You don't need CGO to use SQLite in your Go binary

At least not for most use cases. You can just use modernc.org/sqlite instead as your SQLite driver. For people who aren’t in the Go know, “pure” Go programs are trivially easy to compile cross-platform to all the major platforms by default. You read that right - you can just go build a single Windows executable, Mac executable, and Linux executable on the same machine and just ship it: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # This can all happen on the same box! export CGO_ENABLED=0 # no c cross-compilation please export GOOS=linux GOARCH=amd64 go build -o hello-linux-amd64 hello.go GOARCH=arm64 go build -o hello-linux-arm64 hello.go export GOOS=darwin # aka mac GOARCH=amd64 go build -o hello-darwin-amd64 hello.go GOARCH=arm64 go build -o hello-darwin-arm64 hello.go export GOOS=windows GOARCH=amd64 go build -o hello-windows-amd64.exe hello.go GOARCH=arm64 go build -o hello-windows-arm64.exe hello.go This was the real reason I chose Go over Python for tsk, my instant-search Finnish to English pocket dictionary. I wanted to be able to give Windows users a single .exe they could just run and have work out of the box. ...

July 18, 2025

Incentivize grandchildren by writing them into your will

It’s no secret that I’m a fan of economics-inspired solutions to otherwise hard problems. The other day I happened across an old post by GMU economist Bryan Caplan which I think does this very elegantly, for a problem of some interest to me. The vast majority of wills evenly divide the residuary estate between children. Mine evenly divides the residuary estate between (children and grandchildren). I like this a lot. It makes it unambiguously clear where your priorities in the case of your untimely demise lie. It is also self-reinforcing; children of yours who have no children themselves will recieve less, but when it comes time to write their own wills, they won’t have any children or grandchildren to bequeath to anyway. Children of yours who have many children themselves, perhaps inspired by this very policy, might decide in the end they were duped - but it seems far more likely to me they’ll cite it as one of the biggest reasons they ultimately went for 4 instead of 3, or 2 instead of 1, or 1 instead of none. After seeing it work in practice on themselves, they might decide they want to incentivize bringing their own grandchildren into being in kind. ...

July 16, 2025

The second wave of spaced repetition apps

Spaced repetition has been around for a long time. If you’ve never heard the term before, it’s best described as flashcards on timers. an algorithm such as SM-2 or the more recent FSRS keeps track of how you did on the flashcard, makes a guess as to how long it could possibly wait to show you the flashcard again before you below, say, a 90% chance of getting it right the next time, and then schedules the flashcard for a new day. ...

July 14, 2025

Experiment registry: Can I simply enjoy everything I do?

N.B.: If I link you to this personally, it is to explain why I usually seem to be in a great mood. It’s an experiment. I’m normally in merely a good mood, and I am pushing myself to be great. This is an unusual entry for a Today I Learned site, even by my standards. But I think it’s something I would prefer to pre-register ahead of time. I’ve always been predisposed to mirth. I laugh easily; I rarely get depressed; I’m just about always in a content mood these days, in no small part because I have actually succeeded on the meager goals I set for myself as a teenager (soulmate: check, child: check, sujuvuus vieraalla kielellä: yhä työn alla mutta kyllä se siitä, give me maybe five more years). Yet for some reason I have always felt it is, I don’t know, low status to be so effortlessly joyful and opulent. Like people will take you less seriously or something. So I’ve been reluctant to push my naturally good mood into the realm of actively loving life as my default state. ...

July 7, 2025

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. I already had a tiny shell script in place which plays a seventh major chord every time they switch, courtesy of Sway WM: ...

July 6, 2025