"Courage to quit" matters more for seniors, less for juniors

As a teenager first getting into computers in the late 2000s I spent a lot of time reading old revered tomes like ESR’s The Art of Unix Programming and SICP . If present-day me were to isekai back in time and lose all of the technical knowledge I had but retain my current instincts, however, I would have left all of this on the table and just built a terrible new automation tool for the surprisingly scriptable MMORPG I was into in PHP 5, with as much disregard for clean code and security practices that I could muster[^1]. Then I would have put that tool online, continued to add new features to the ball of mud, and kept it running for 5-10 years before my first post-college interview. And then the vibe that would come across is less “He’s an egghead, and we like that, but we really need someone who actually does things” and more “He’s a meathead, but inside of that meathead is an egghead waiting to be revealed. We need this kind of junior dev yesterday.” I would have done this even though an objectively far superior tool had already existed for quite some time, making this project “feel like” dead weight in the wide world of software! But why? ...

November 29, 2025

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

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

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

Save your disk, write files directly into RAM with /dev/shm

Given my interest in extending the life of my SD cards and hard drives as much as possible, I’m surprised I haven’t come across /dev/shm before. In a word it’s a world-accessible RAM scratchpad, which seems baked right into POSIX, so that virtually every Unix EDIT: Linux system already has it mounted as a tmpfs by default: 1 2 ❯ mount | grep '/dev/shm' tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64) Today’s lucky 10,000, indeed. It gets mentioned often in Hacker News comments, but surprisingly I couldn’t find any actual articles talking about it. The existence of /dev/shm is a boon for me mostly because it means I never have to worry about whether /tmp is really RAM-based again. ...

June 26, 2025

Cross-platform TUIs are easier than cross-platform GUIs

Below is a GIF of tsk, my pocket Finnish-to-English dictionary, running in my terminal emulator of choice under Linux. It’s what the kids call a TUI, a graphical program that just happens to drive its graphics using terminal graphics instead of graphics-graphics. Insert GIF here. You can probably tell that this program fits neatly into the “home-cooked meal” clade of programs. There is a very straightforward problem I want solved - fast, single-executable-portable dictionary lookup, with a few conveniences for the busy language learner layered on top. I am quite happy with tsk in its current iteration and don’t plan to add much more to it anytime soon. It would still save me a lot of time and hassle if I were the only person who could use it. ...

May 20, 2025

Vibe coding and complementary goods

Peanut butter and jelly are complementary goods, as are cars and gasoline, newer cars and electricity, electricity and basically everything else. We don’t normally think of, say, Docker and Kubernetes as complementary goods in software engineering, because you can get both for the low price of free. Or can you? You still have to invest time in learning both, and as the famous saying goes… Say it takes X hours to learn Docker adequately. If Docker suddenly becomes easier to learn, such that it now takes only X / 2 hours, it’s reasonable to assume Kubernetes will become more popular in tandem, because one of its complements now costs less and is hence supplied in greater quantities anyway. You don’t want a peanut butter only sandwich, do you? ...

March 12, 2025

SQLite is learnable

This is a response to pid1.call’s “Siren Call of SQlite on the Server”, which itself is a response to articles like Wesley Aptekar-Cassels’s “Consider SQLite” espousing SQLite as a server-side technology. Cards on the table, I both love SQLite and think pid1 has the more correct take here. When I decided on a dime after college to move countries and be with my wife, part of the package deal was that I had to throw away my dreams of easing into the software industry by resting on the laurels of my strong, but not MIT-level-known-worldwide-strong, alma mater (sorry Wildcats). Electrical engineering was just not going to be feasible for a then-monolingual English speaker in Finland, and besides, I majored in it 90% out of curiosity anyway. I always intended to return to my once and future home, the shell, after my Rumspringa with electrons. ...

February 18, 2025

PHP, Go, and Braindead Deployment

If you’ve been following my posts recently, you might have noticed that I’ve been working more and more with PHP lately. As someone who was curiously allergic to web dev as a teenager, it has been a strangely healing experience for me. I’d like to say it’s because my experiments with Laravel, the only OSS work of which I can point to is testing the Homestead VM’s compatibility for Shell Bling Ubuntu, convinced me. But no – Laravel is pretty sweet, but so is Django, but Django has the advantage of using an underlying language that ...

September 16, 2024

PHP and Web Dev Phobia

PHP is, for better and for worse, the Python of web dev in my eyes. It is exceptionally easy to get started, in a way which I think younger developers may not be fully aware of. So here I’d like to make them aware of it! That’s right, this is a Slowstart for people who have never touched PHP or web dev before. Start the way we usually do on this blog, with the “tutorial-in-a-box” by installing Vagrant and Virtualbox so you can create a disposable virtual machine with just a few commands. ...

September 3, 2024