Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 21,820 posts.
GitHub has not removed malicious imitation software after 3 weeks
On the 31st August I got an email from a customer, telling me that they had found an imitation of my data wrangling software on Github. I’m not linking to it, but here is a screenshot: It is …
Google to Reimplement Curl in Libcrurl
Not the entire thing, just "a subset". It's not stated very clearly exactly what that subset is but the easy interface is mentioned in the Chrome bug about this project. What? The Chromium bug states that they will create a library of their own (named libcrurl) that will offer (parts of) the libcurl API and … Continue…
The Anatomy of a macOS App
How Mac applications evolved from a multitude of resources to a bundle formed from a standard layout of directories, and how they have come to be largely self-contained in macOS 26.
CSS Modules
If you wanted to identify an inflection point in the recent development of CSS thinking, you’d probably pick Christopher Chedeau’s “CSS in JS” talk from NationJS in November, 2014. It was a watershed moment that set a bunch of different minds spiralling off in their own directions like particles after a high-energy…
Firefox's Optimized Zip Format
This post is about minimizing amount of disk IO and CPU overhead when reading Zip files. I recently saw an article about a new format that was faster than zip. This is quite surprising as to my mind, zip is one of the most flexible and low-overhead formats I’ve encountered. Some googling showed me that over past 11…
The Polygons of Another World: Atari Jaguar
This article is part of a study about the ports of Another World. It is highly recommended to read Another World 101 before reading this.
Mutt 2.0 Release Notes
Note: this is a review of some of the more interesting features in this release. For a complete list of changes please be sure to read the UPDATING file.
Sed – An Introduction and Tutorial
The Grymoire - Tutorial on the SED stream editor.
Python on Android
There are an increasing number of resources about different ways of running Python on Android. Kivy (and its subprojects) are commonly mentioned, as one of the most mature and popular ways to do so, but one thing that gets less attention is the details of what you can do with Python itself once it’s running on the…
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…
We switched to Java 21 virtual threads and got a deadlock in TPC-C for Postgres
We revise some fundamental background and highlight an important concern behind Java 21 virtual threads: deadlocks might be unpredictable
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)…
Mythical man month: 10 lines per developer day
February 10, 2020 4 minutes read The mythical book, Mythical man month quotes that no matter the programming language chosen, a professional developer will write on average 10 lines of code (LoC) day. After 14 years of full-time development on the tool NDepend I’d like to elaborate a bit here. Let’s start with the…
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.)
Python 3.4.0 released
The official home of the Python Programming Language