Scan the Quick Response (QR) code above with your favorite Two-Factor Authentication (2FA) app. You should get a six digit number, rotating every 30 seconds, that looks something like 1 2 237601 # as of Wed May 20 09:44:53 AM EEST 2026 If you then take the secret key that QR code maps to, say
Note for numberphiles : all numbers have been rounded to their first significant digit, because I’m a fan of Rob Eastaway’s “zequals” method of getting to the point when it comes to estimation. It’s much more valuable to walk away with the heuristic “some dude got a 300x memory reduction by swapping out a database he hacked together for a tiny, static,…
Before GitHub Actions , before GitLab CI/CD , and before the panoply of startups all promising to help you build your software faster and with less hassle, there was the humble, open source Jenkins . Or perhaps I should say is: Jenkins is still actively maintained to this day, and has actually been in use in basically every single place I have worked since graduating from high school, although not…
Earlier this weekend, while attempting to hook up a fast background noise remover to a fast subtitle re-aligner , Gemini gave me what might be my new favorite AI hallucination: ### The Fix Try this command: ```bash deepFilter 'audio2anki-output/youtube/Spongebob Squarepants - The Ugly Barnacle.mp3' -o - --i-tell-you-shut-up | mpv --no-video - ``` Why this version works: * `--i-tell-you-shut-up`:…
As of writing this I can find no Hacker News comments containing both the words “mythos” and “CRA” , which suggests I might have a first-mover advantage in writing something interesting. At last! Anthropic announced Claude Mythos Preview on 2026-04-07. Supposedly it was asked to discover thousands of zero-days across many software packages, a task which it acceded to, but…
I wrote my first Clojure program in anger a few months ago. Only, it’s not accurate to say that I wrote it; AI did most of the writing, and I directed it on what my design goals were and why. Architecturally, you could call it was a stateless anti-corruption layer , yapping between some REST endpoints and some ancient proprietary serialization. I had never written a Clojure program of…
I have a suspicion - and let me be clear, that’s all this is, a suspicion, I am taking my own claims even more lightly than usual here - that Claude Code makes most people’s lives better, but it makes the lives of those who struggle with executive function much better. When I have a problem to solve nowadays, I type c , then Enter . This alias opens up a fresh tmux window with 4…
I use Claude Code. I like Claude Code. According to Steve Yegge’s Eight-Circuit Model of Claudesciousness , I’m a pretty solid Stage 6, edging into 7 on heavy days. I think most engineers, most of the time, can get most of their work done faster with one of these tools than not, although the force multiplier of that speedup is probably not as extreme as it is in my case. Why is that?
Lua and Scheme occupy curiously similar places in my noggin, becuase my primary use case for both has been as scripting languages embedded into other, larger projects. Lua of course is basically designed for this job, but it’s a solid intermediate format to target even if you have no immediate intentions to use the programming language parts at all. A TSV file like 1 2 10.0.0.5 192.168.1.1…
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…
I began running Andrew’s Selkouutiset Archive almost exactly two years ago, with a simple goal: Create a straightforward way for Finnish language learners to access the simple news broadcast by YYYY-MM-DD. It has basically accomplished that goal, with only a few tweaks here and there to keep everything running. Earlier in the series: Lessons learned from 6 months of operating a teensy-tiny…
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…
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…
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…
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…
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…
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…
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…
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,…
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…
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…
Still images of this GIF are at the bottom. Learning to read a language is mostly a game of getting massive quantities of comprehensible input. Learning to write that same language is a whole ’nother ballgame. But, using the 4-quadrant Anki card setup from my earlier post , I think I’m finding more and more ways to make this as amenable to spaced repetition as possible. One thing…
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…
Earlier today on Hacker News Scrappy made the rounds , with the explicit tagline “make little apps for you and your friends”. I always like to see new projects in this vein. That’s why I’d like to outline my alternative approach, which Works cross-platform and on mobile devices by default, Doesn’t require any app store tomfoolery, Has great uptime built in, Gives you…
This works as of, at least, Anki 24.06.3. According to the Mozilla Developer Network , The <details> HTML element creates a disclosure widget in which information is visible only when the widget is toggled into an open state. In standard web browsers, absent any CSS to the contrary, a <details> tag starts closed until further notice. Since Anki is basically a local web browser on top of a timer,…
Language learning for the contemporary adult learner can be broken down roughly into four highly correlated, but distinct, skillsets. Passive understanding Active production The written word Reading Writing The spoken word Listening Speaking You may know from my FOSS software that I have been learning Finnish for the past 4 years or so. For the first few years I pretty much focused exclusively on…
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…
Perl 5 went through a long nadir of unpopularity due in large part to its deserved “Write Once, Read Never” reputation. So I was surprised to find out not only is it installed by default on Debian , it’s installed nearly everywhere by default. It’s even the non-shell scripting language of choice on OpenBSD ! Perhaps the only thing more impressive than Perl’s utter…
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.…
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…
If you followed “Binary search isn’t about search” and “Binary search isn’t about search II” properly, the following statements should suffice as a summary: 1 2 L[ 0 :l] < T < L[r:len(L)] # ordinary binary search loop invariant L[ 0 :l] < T <= L[r:len(L)] # leftwise binary search loop invariant Let’s complete the triptych. Take a wild guess what invariant…
In the first “Binary search isn’t about search” post, we spoke about using assert statements to enforce your loop invariants . Our plain old everyday binary search invariant can be summarized as such: For all x in L[0:l] 1 , x is strictly less than T , the element we are searching for. For all y in L[r:len(L)] 2 , y is strictly greater than T , the element we are searching for.…
Suppose you’re trying to track down a bug that appeared in a series of Git commits. You’ve been idly keeping track of where this bug appears in your lucky commits by hand, while busy with other things. So far you’ve compiled this table: 1 2 3 4 5 6 7 8 9 10 0000000 🧼 clean, no bug. 0000001 🧼 0000002 🧼 0000003 🧼 0000004 🧼 0000005 🧼 0000006 🐛 bug first appears here. 0000007…
Before I moved to Finland, I spent some time in the Hobbesian war of all against all that is Wisconsin 1 . 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 .…
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…
Ever need to download a file from a server – or get someone else to download a file from a server, who may not be comfortable with or should have access to scp or sftp ? Turns out, if you have Python installed – and you probably do – it comes with a handy one-liner file server for just such an occasion: 1 python -m http.server 12345 # or whatever port you prefer
Last night I went to DigitalOcean and spun up a tiny new, $4/month droplet – on my own dime! It sounds crazy, but I’ve never actually wanted to pay for hosting myself before. But I have a fun little web app cooking up, one that might eventually pay that $4/month back with interests, and I decided, why not, it’s time to finally put some of my own skin in the game with this whole…
Epistemic status: Very unclear, also I Am Not A Lawyer This Is Not Legal Advice Get Off My Lawn (N.B.: I"m using “GPL” with broad strokes here, to point at “open source licenses it’s straightforward to run afoul of”.) Policing is always hard in a world of limited resources. Especially when one is targeting sophisticated, well-monied criminal organizations, it can take…
What’s the best way to get a job? Show someone with a job to do that you can do the job within their iron triangle . What’s the best way you can show someone you can handle a complicated k8s deployment, with 7 different CNCF-approved add-ons, zero-downtime rollouts and a whole bunch of YAML files? Probably by competently and publicly running your own complicated k8s infrastructure.…
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…
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…
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…
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…
(Inspired by yungporko’s Ask HN post , which got me thinking.) Pretty much every community, dojo, workplace, subculture, scene you can imagine in the modern day had a software sub-scene embedded within it. It can be as small as “that guy who does our Excel”, or as large as the scene itself . This is owing to the fantastic generality of software as a way to make almost anything…
Poking around in a fresh VM in Vagrant , I see bash dash , a POSIX compliant shell linked under sh python3 , 3.11.2 at the time of writing awk , specifically mawk sed , if you count that (I do) perl , specifically Perl 5 There may be others I missed. Why I’m curious: Knowing that a language is installed by default on the most popular Linux distribution can simplify certain concerns…
Today I released a dump of six months of flashcards I autogenerated from my tiny Finnish news archive to make the lives of my fellow language learners easier. The actual code which generates this archive is about 300 lines of Python . The basic value add for the user: What you want : Better fluency in Finnish. What you need : Practice. Lots of it. What this gives you : GOTO 2. This is emphatically…