Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 14,540 posts.
Power consumption of Game Boy flash cartridges
Flash cartridges (= "carts") are commonly used to run Game Boy ROMs, such as homebrew games or dumped officially released games, on real hardware. Different kinds of flash carts with various features and performance characteristics have been available for a long time, but flash carts have in general the reputation of…
I Hacked Google App Engine: Anatomy of a Java Bytecode Exploit
Back in college, I was very interested in Java bytecode. When I got an internship at Google in 2013, I was skeptical of the security of the Java version of Google App Engine and got permission to spend the last week of my internship doing a mini red team exercise, trying to break into App Engine. This is the story of…
Face recognition in images and video with Python
Learn how to perform face recognition using OpenCV, Python, and dlib by applying deep learning for highly accurate facial recognition.
An Introduction to Recurrent Neural Networks
A simple walkthrough of what RNNs are, how they work, and how to build one from scratch in Python.
It’s not wrong that "🤦🏼♂️".length == 7 (2019)
From time to time, someone shows that in JavaScript the .length of a string containing an emoji results in a number greater than 1 (typically 2) and then proceeds to the conclusion that haha JavaScript is so broken—and is rewarded with many likes. In this post, I will try to convince you that ridiculing JavaScript for…
Racket Is an Acceptable Python
A little over a decade ago, there were some popular blogposts about whether Ruby was an acceptable Lisp or whether even Lisp was an acceptable Lisp . Peter Norvig was also writing at the time introducing Python to Lisp programmers . Lisp, those in the know knew, was the right thing to strive for, and yet seemed…
2x, not 10x: coding with LLMs in 2026
Calibrate your enthusiasm
Against Best Practices
I have come to believe that by and large “best practices” are doing more harm than good. Not necessarily because they’re bad advice as such, but because they’re mostly pounded by either 1) various types of zealots, idiots, and assholes who abuse these kind of “best practices” as an argument from authority, or 2)…
Rust's Type System Is Turing-Complete: Type-Level Programming in Rust
(N.B. The word “fuck” appears multiple times in this post. I recommend that the reader temporarily not consider “fuck” as profanity, as it isn’t used that way here.)
Haskell: A Great Procedural Language
These sound like dismissals or absurdities from the outside, but once you learn what they really mean, they take on a new light. In this article, I want to explain the third. (See the appendix if you are curious about the first two.)
The cloudy layers of modern-day programming
Is what we do development anymore?
Moving from Rust to C++
Note to readers: this is an April Fools post, intended to satirize bad arguments made against Rust. I have mixed feelings about it now, as I think people who understood the context appreciated the humor, but some people were confused. That’s partly because it’s written in a very persuasive style, and I mixed in some…
Deleting System32\curl.exe
Let me tell you a story about how Windows users are deleting files from their installation and as a consequence end up in tears. Background The real and actual curl tool has been shipped as part of Windows 10 and Windows 11 for many years already. It is called curl.exe and is located in the … Continue reading deleting…
Intermediate Vim
A few tips to level up your vim editing skills from beginner to intermediate.
On the nature of computing science (1984)
Now this summer school draws to a close, it seems appropriate to try to put its topic into some perspective
LSP: The good, the bad, and the ugly
For a few years now I have been working on the Haskell Language Server (HLS), and the lsp library for the LSP protocol and writing LSP servers. Unsurprisingly, I have developed some opinions about the design of the LSP! Recently I gave a talk about HLS and LSP at the Haskell Ecosystem Workshop at Zurihac 2024. One…
DeepSeek-V4-Flash means LLM steering is interesting again
Ever since Golden Gate Claude I’ve been fascinated with “steering”: the idea that you can guide LLM outputs by directly manipulating the activations of the…
Killing a process and all of its descendants
Killing processes in a Unix-like system can be trickier than expected. Last week I was debugging an odd issue related to job stopping on Semaphore. More specifically, an issue related to the killing of a running process in a job.
Is Gemini 2.5 good at bounding boxes?
Can Gemini 2.5 replace CNN for object detection?
Implementing a GPU's programming model on a CPU
SIMT The programming model of a GPU uses what has been coined "single instruction multiple thread." The idea is that the programmer writes t...
SwiftUI After 7 Years
Back in 2019, SwiftUI was announced as the future of Apple development. Seven years later, it still feels like a beta version struggling with stability, performance, and many other aspects. What’s actually wrong with SwiftUI?
I Love Go; I Hate Go
I liked Go right away. It was close enough to C and Java to be instantly familiar, the examples and tutorials were straightforward, and I was quickly writing…
PHP in 2021
A look back and forward on PHP
How to start a React Project in 2023
React starter kits (Vite, Next, Astro, Remix, React Router) which help React developers to start a React project in 2025 ...
Why does Debian change software?
When I wrote Why is Debian the way it is? , a year and a half ago, I was asked to also cover why Debian changes the software it packages. Here's a brief list of examples of why that happens: