Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 14,546 posts.
Low-Competition Niches In Retail Software
This is a guest post by Joannes Vermorel, founder of the Lokad Forecasting Service. Software developers seem to be herd animals. They like to stay very close to each other. As a result, the marketp…
Compilers and IRs: LLVM IR, SPIR-V, and MLIR
Overall discussion on compilers and IRs (LLVM IR, SPIR-V, and MLIR): why they are in their current manner and how they would evolve
Data notation in Clojure
Homoiconicity (code as a data structure) is one of the pillars of the Clojure language. It gives the extensibility and flexibility to the language.
Understanding Glibc Malloc (2015)
I always got fascinated by heap memory. Questions such as How heap memory is obtained from kernel? How efficiently memory is managed? Is it managed by kernel or by library or by application itself?…
X86 boot sector written in C (2010)
Writing an MS-DOS-compatible boot sector in C: parsing the FAT BIOS parameter block, finding IO.SYS, and loading it via BIOS INT 13h in real mode.
Rep and Ren: A new approach to CLI find, replace, and renaming
This post is about two new command-line utilities: rep and ren. Both are available on GitHub.
Using strace to figure out how Git push over SSH works
Yesterday I was curious about how git push works over SSH. I’m getting more used to using strace to figure this kind of thing out, so I gave it a shot. If I strace pushing to this site’s repository, this shows up:
Interactive NBA Shot Charts with R and Shiny
Make your own NBA shot charts. Open-source, interactive dashboard interface to NBA Stats API built with R and Shiny
Decoding UTF8 with parallel extract
As a side-quest I recently decided to write a branchless utf8 decoder utilizing the pext or "parallel extract" instruction. It's compliant with rfc-3629 , meaning that it doesn't just naively decode the code-point but also checks for overlong encoding, surrogate pairs and such. Compiled with gcc -O3 -march=x86-64-v3…
The Computer Graphics Library
Back in the 90s, one book was ubiquitous in the world of Computer Graphics. Commonly called "The CG Bible", Computer Graphics: Principles and Practice gathered a huge part of the knowledge of the time. It was commonly referenced by the best programmers of that era in interviews and articles . By 1998, the book…
Depth of field blur: the Swiss army knife that improved the framerate
Depth of field blur is an effect that is used in many modern games as a cool graphics effect. A nice example of this is of course my own gam...
Yes, learn basic programming
Derek Sivers official site. Thoughts on philosophy, culture, self-improvement. Author of Useful Not True, How to Live, Hell Yeah or No, Anything You Want.
When the fractional part of a float fixes your shader
A write-up of a full shader debugging session to find out why my Voronoi Diagram shader was stuttering in one specific machine.
Modern Perl, the book, is Available.
After countless commits, the generosity of dozens of proofreaders, and far too long proofreading the index, Modern Perl: the book is available! You can buy a lovely print version from any well-stocked online vendor (and you're more than welcome to...
Using HTTP/2 Cleartext for a server in Go 1.24
I'll give a brief outline of how to enable HTTP/2 cleartext (h2c) in a Go API server when you are using Go 1.24 or newer. This is useful in Cloud Run environments, which handles TLS termination but can take advantage of HTTP/2 features.
Readings in distributed systems
This post is a work in progress.Inspired by a recent purchase of the Red Book, which providesa curated list of important papers around database systems, I’ve decidedto begin assembling a list of im...
Sprite3D.js: a javascript library for 3D positionning
This page is slowly getting outdated. In my spare time, I've been working on a major syntax revision, Firefox compatibility issues and a new version of this page.
Bit Hacking (with Go code)
At a fundamental level, a programmer needs to manipulate bits. Modern processors operate over data by loading in 'registers' and not individual bits. Thus a programmer must know how to manipulate the bits within a register. Generally, we can do so while programming with 8-bit, 16-bit, 32-bit and 64-bit integers. For…
Rust Performance: A story featuring perf and flamegraph on Linux
ramblings by Adam Perry
Clojure Zippers (2021)
In this article, we will discuss zippers in the Clojure language. These are an unusual way to work with collections. Using a zipper, you can traverse a data structure arbitrarily and modify its content as well as search in it. A zipper is a powerful abstraction that pays off over time. However, it is not as…