Sign up

Evan Hahn (dot com)

Not verified No WebSub updates No webmention support Valid

I'm Evan Hahn, a programmer.

Managing Editor
Evan Hahn
Webmaster
Evan Hahn
Rights
Creative Commons Attribution-NonCommercial 4.0 for content, Unlicense for code.
Public lists
davewiner/hackerNewsStars
Fetched

Evan Hahn (dot com) Valid
Text

A Mastodon bot powered by iOS Shortcuts

In short: I use iOS Shortcuts to run a Mastodon bot. I run a Mastodon bot that posts random quotes from The Legend of Zelda: Link’s Awakening. (The writing in that game is so charming!) I used to run it off a server, but for the past few days, it’s used an iOS Shortcut on my...

Evan Hahn (dot com) Valid
Text

Notes from October 2026

Happy Halloween! Here’s a little of what I got up to in this spooky month. Things I did in October I moved this site from an Apache-powered VPS to CDN-frontend object storage. This means I pay less money, I do less maintenance, and my site loads faster in most parts of the...

Evan Hahn (dot com) Valid
Text

List of Vim forks

Here are the Vim forks I know about:

  • Neovim: “a Vim-based text editor engineered for extensibility and usability, to encourage new applications and contributions.”

  • Vim Classic: “a stable, long-term support fork of the ubiquitous text editor, maintained without the assistance of generative AI tools.”

  • EVi: “a hard-fork of Vim v9.1.0 (Jan 2024) before AI was used in the project.”

  • MacVim: “a macOS version of the Vim text editor, providing a graphical user interface for Vim, while tightly integrating with macOS and providing features specific to the platform.”

This list doesn’t include Vim-inspired editors like Kakoune, Vim-style plugins for other editors like IdeaVim, or Vim “distributions” like LazyVim.

Contact me if you know of other forks!

Evan Hahn (dot com) Valid
Text

Notes from September 2026

If you follow my monthly roundups, (1) who are you?? please say hi (2) you’ll notice a smaller post this time. September was a busy month for me. Lots of feedback on a small post I published “Anecdotally, programmers dislike ‘reduce’”. I finally wrote up a phenomenon I’ve ob...

Evan Hahn (dot com) Valid
Text

Anecdotally, programmers dislike "reduce"

In short: from my experience, people like map and filter, but not reduce. I use functions like map and filter all the time. When I put that code up for review, my peers rarely complain. I get plenty of feedback about other decisions, but not about my use of map and filter. I...

Evan Hahn (dot com) Valid
Text

Notes from August 2026

Since last month, I released some new stuff at work, clicked a bunch of links, and wrote a little bit. Things I did this August At Ghost, we added analytics for automated email sequences. This helps publishers see how their sequences are doing. This simple feature turned o...

Evan Hahn (dot com) Valid
Text

Vim's UserGettingBored autocmd

In short: Vim has a joke autocmd called UserGettingBored that doesn’t do anything. Vim’s automatic commands feature, usually shortened to “autocmd”, lets you run code when various events occur. For example, you could implement an auto-save feature by binding the TextChanged ...

Evan Hahn (dot com) Valid
Text

Notes from July 2026

July! What a month! Things I did this July Gave a talk, for ClimateAction.tech’s “Responsible AI Series”, “What I know about local language models”. “Responsible AI” can feel like a bit of an oxymoron at times, but I hope I shared something useful. Participated in the Ze...

Evan Hahn (dot com) Valid
Text

Prefer STRICT tables in SQLite

In short: I prefer strict tables in SQLite because they avoid some datatype problems, such as putting text in number columns. SQLite has a feature that I think is underrated: strict tables. Strict tables help enforce rigid typing, preventing mistakes like putting text into i...

Evan Hahn (dot com) Valid
Text

Notes from June 2026

Chicago’s weather is pretty lousy most of the year, but when it’s nice, it’s very nice. June blessed the city with dozens of idyllic days. But don’t worry—I still spent most of the time inside on the computer. Things I did I launched my first big project at Ghost: automation...

Evan Hahn (dot com) Valid
Text

"Sixteenth of a year", a 1.8 KiB art piece

Year, month, day, hour, minute, and second—all divided into sixteenths.

As I write this, we’re about 7 sixteenths through 2026, and it’s about 14 sixteenths through the day.

For the sixteenth issue of the Taper online magazine, I split time into sixteenths to think about its passage in a different way.

The code, which had to be under 2048 bytes, isn’t terribly complex. It does some date math and uses a Go server for minification. If you want, here’s the unminified source code.

Go check out all the other entries from this issue! My favorites include "[SIC]", “Desperate Measures from a Dying Regime”, and "(un)done".

See also: my previous Taper entry.

Evan Hahn (dot com) Valid
Text

Notes from May 2026

My blog turned 16 this month! I did nothing to celebrate, but made some little tools and clicked some links about tech ethics. Things from me this month I published four little tools this month: ZIP Shrinker, a web app that shrinks ZIP files with higher compression ratios ...

Evan Hahn (dot com) Valid
Text

Make ZIP files smaller with ZIP Shrinker

I built ZIP Shrinker, a little browser tool to shrink ZIP files. It also works with formats that are secretly ZIPs underneath, like EPUB, JAR, and many more. Try it out! How does it work? At a high level, this tool (1) re-compresses every file in the ZIP archive with higher ...

Evan Hahn (dot com) Valid
Text

Open Link in Unloaded Tab, a little Firefox extension

In short: I just published Open Link in Unloaded Tab, a little Firefox extension that adds “Open Link in Unloaded Tab” to the right-click context menu.

In Firefox, you can unload tabs to save system resources. But there’s no way to open a new tab in the unloaded state…until now! I built a very simple extension that adds a new option to do this. (It even has a cute icon which I paid ~$15 for.)

I’ve built one-off extensions before, but this is the first one I’ve submitted to the Firefox Add-ons directory.

Download the extension here or check out the source code.

Evan Hahn (dot com) Valid
Text

png-cmp: like cmp for PNGs

png-cmp is a program I built that checks if two PNGs are visually equivalent. It’s inspired by the cmp command. Here’s how you use it:

png-cmp a.png b.png

Like cmp, it silently exits if the images are identical, and gives an error if they’re different.

Unlike cmp, it checks pixel data, not binary data. PNGs can look the same but be stored differently. For example, png-cmp ignores text metadata.

I was recently doing an experiment where I wanted to check if two PNGs were visually identical, so I built a tool for it!

Grab the source code here.

Evan Hahn (dot com) Valid
Text

Offline command line translation with TranslateGemma + Ollama

I wrote a simple script that translates text at the command line, completely offline. Here’s an example of how it works on my computer: echo '¿Cómo estás?' | translate # => How are you? It combines a few tools: TranslateGemma, a special-purpose language model for trans...

Evan Hahn (dot com) Valid
Text

Notes from April 2026

After a busy March, April was a little quieter. But don’t worry, I still have a bunch of little links for you to click on. Things I published GitHub’s uptime hasn’t been great recently. Even though I dislike the Microsoft subsidiary, I wrote “In defense of GitHub’s poor up...

Evan Hahn (dot com) Valid
Text

In defense of GitHub's poor uptime

In short: GitHub’s downtime is bad, but uptime numbers can be misleading. It’s not as bad as it looks; more like a D than an F. “Zero nines uptime”? 99.99% uptime, or “four nines”, is a common industry standard. Four nines of uptime is equivalent to 1.008 minutes of downtime...

Evan Hahn (dot com) Valid
Text

Notes from March 2026

March always seems to be my life’s busiest month. Things I wrote and made “The two kinds of error”: in my mind, software errors are divided into two categories: expected and unexpected errors. I finally wrote up this idea I’ve had for a long time. “All tests pass” is a s...