news
Programming Leftovers
-
Hackaday ☛ How Small Can A Linux Executable Be?
With ever increasing sizes of various programs (video games being notorious for this), the question of size optimization comes up more and more often. [Nathan Otterness] shows us how it’s done by minifying a Linux “Hello, World!” program to the extreme.
-
Chris ☛ The MVC Mistake
No, they do not. This is the mvc mistake all over again. Those layers represent boundaries between technologies, not logical concerns. We can tell by trying to add a feature to this system; then we will have to go into every single layer to make the corresponding change. That is an integration of concerns, the polar opposite of separation of concerns!
-
Jake Lazaroff ☛ Building More Resilient Local-First Software with atproto
Most local-first software focuses almost exclusively on the first two. I’m certainly guilty of it. In my article about building a local-first travel app, I claimed that the open source sync engine I used wasn’t a critical dependency because you could run your own version if mine went down.
-
Andy Wingo ☛ wastrelly wabbits
Good day! Today (tonight), some notes on the last couple months of Wastrel, my ahead-of-time WebAssembly compiler.
-
Haskell ☛ A Couple Million Lines of Haskell: Production Engineering at Mercury
Fast forward to today: I work at Mercury, a fintech company that provides banking services.* We serve over 300,000 businesses. We processed $248 billion in transaction volume in 2025 on $650 million in annualized revenue, and are, at the time of writing, in the process of obtaining a national bank charter in the USA from the OCC. We have around 1,500 employees. Our engineering organization largely hires generalists, and most of them have never written a line of Haskell before joining.
My time working at Mercury has changed how I think about the language more than any sermon about purity ever did. Elegance is pleasant, but keeping your business alive is compulsory.
Our codebase is roughly 2 million lines of Haskell, once you strip out comments and such.
This is the part where you are supposed to recoil in horror.
-
Alex & Manu ☛ why i stopped using fancy dev tools and became more productive
i spent hours, maybe days, tweaking my development environment. i’d read blog posts about “ultimate vim config” or “vscode extensions you need in 2025” and immediately install everything. my dotfiles repo had over 5000 commits. i had keybindings for everything. i could navigate my terminal blindfolded.
but i wasn’t more productive. i was actually less productive.
-
[Old] Zach Manson ☛ notes: web development
Web development is an exercise in distributed execution of program, where some parts of your program execute in a (mostly) trusted environment on the server and some execute on a untrusted environment on the client. Almost all problems in web development can be derived from this breakdown, and the limitations of each of these environments.
-
Leo Robinovitch ☛ I Made a Terminal Pager
Most programs on developer machines use less as a fallback pager if PAGER isn’t set. If you want everything to be dumped to your terminal directly, set your PAGER environment variable to cat. Other options include bat, most, and delta. There are special paging environment variables as well, for example, setting GIT_PAGER specifically for git output, or BAT_PAGER for paging within bat after it performs syntax highlighting.
-
Chris Maiorana ☛ Let the commits tell the story
Both sets of commits represent the same amount of work. The only difference is the two minutes it took to write a real commit message instead of a placeholder.
There’s been a lot of discussion in recent years about what to name your branches, which can be anything you want. However, has anyone taken a hard look at some of the hard-coded git terminology, like the word “commit”? In my Git For Writers handbook, I compared commits to “save states” or “snapshots.” I’d always felt the word “commit” sounded too permanent and fixed, but that’s not the case at all.
-
Perl / Raku
-
Rakulang ☛ Rakudo Weekly 2026.13 Release #191
On behalf of the Rakudo development team, I’m happy to announce the March 2026 release of Rakudo #191. Rakudo is an implementation of the Raku1 language. The source tarball for this release is available from https://rakudo.org/files/rakudo. Pre-compiled archives will be available shortly.
-
-
Shell/Bash/Zsh/Ksh
-
Zach Manson ☛ notes: grep timer
Grep can be used as a timer, and can be blocking.
-
-
Java/Golang
-
Miguel Young de la Sota ☛ Breaking the Warranty with go:linkname
Now, this is a huge problem, because in the former variant, there is no requirement that the victim package consents to having its symbol table rummaged in. Go only addressed this in Go 1.23, where now, for standard library packages only, only symbols explicitly opted into linkname can be used like this by non-standard library packages.
The upshot is phew, we solved this problem, why am I writing about it.
-
Hister ☛ Hister
If you need fast, content-based retrieval of large amounts of documents, your best option is to use a full-text indexer. Popular solutions like Elasticsearch and Meilisearch are more than capable of getting the job done. But what if you don’t want to depend on an external service, or if you need a higher level of control over how your data is stored and searched?
Luckily, Go has an excellent library for exactly this purpose: Bleve. Bleve lets you quickly index any Go struct with sensible defaults and a built-in Google-like query language. Or you can go further and build your own query language and customize every single detail of the indexer.
-