Let’s build a browser engine (2014)
I’m building a toy HTML rendering engine, and I think you should too. This is the first in a series of articles:
Posts that commenters keep linking to, ranked by how many different people have cited them in Hacker News comments. 3,470 posts.
I’m building a toy HTML rendering engine, and I think you should too. This is the first in a series of articles:
Pagination, pervasive as it is in web applications, is easy to implement inefficiently. This post examines different methods of server-side pagination and their tradeoffs in PostgreSQL. Methods explored include limit-offset, cursors, keyset pagination, as well as more exotic techniques.
This is a companion post to my discussion with Craig Andera on Relevance Podcast Episode 32 and my Clojure/West talk Clojure in the Large. I've talked about ...
By Robert Smith, Elias Lawson-Fox, Cole Scott Updated July 1, 2025 by Robert Smith. Introduction Coalton is a statically typed functional programming language built with Common Lisp. We can load it like a normal Lisp library. CL-USER> (asdf:load-system "coalton") CL-USER> (in-package #:coalton-user) COALTON-USER> This…
How much overhead should we expect from enabling integer overflow checks? Using a compiler flag or built-in intrinsics, we should be able to do the check with a conditional branch that branches based on the overflow flag that add and sub set. Code that looks like
Update: If you’re coming to this blog post from a compendium titled “Go is not good,” I want to make it clear that I am ashamed to be on such a list. Go is absolutely the least worst programming language I’ve ever used. At the time I wrote this, I wanted to curb a trend I was seeing, namely, overuse of one of the more…
This time we'll focus on Linux's select(2) successor - the epoll(2) I/O multiplexing syscall.
oCERT-2011-003 multiple implementations denial-of-service via hash algorithm collision
How to program independent games
Concurrent operations can be grouped relatively neatly into categories based on their cost
In this essay, Carson Gross explores HATEOAS (Hypermedia as the Engine of Application State), explaining how it enables REST APIs through hypermedia responses and contrasting it with modern JSON-based APIs. Using clear HTML examples, Carson demonstrates how HATEOAS allows clients to discover available actions…
Jujutsu (`jj`) is a new version control system from a software developer at Google. I have been using it full time for 6 months. Here’s why you should switch, too.
To type or not to type: quantifying detectable bugs in JavaScript Gao et al., ICSE 2017 This is a terrific piece of work with immediate practical applications for many project teams. Is it worth th…
My twitter feed has recently been filled with discussions about the following program #include <cstdlib> typedef int (*Function)(); s...
Random code snippets, projects and musings about software from Eric Kidd, a developer and occasional entrepreneur.
How and why to use the Go race detector to improve your programs.
In this post, I’ll iteratively optimize an implementation of matrix multiplication written in CUDA.My goal is not to build a cuBLAS replacement, but to deepl...
If you type “WAIT6502,1″ into a Commodore PET with BASIC V2 (1979), it will show the string “MICROSOFT!” at the top left corner of the screen. Legend has it Bill Gates himself inserted this easter egg “after he had had an argument with Commodore founder Jack Tramiel”, “just in case Commodore ever…
This new edition has been the occasion to overhaul the presentation in many places, but its main purpose is the update to the new C standard, C23 . The goal was to publish this new edition of Modern C at the same time as the new C standard goes through the procedure of ISO publication. The closest approximation of the…
So the other day I both defined Tcl procedures all by myself and used them interactively, and I liked it, to the point where it felt like some kind of local optimum. This entry is an attempt to cope with the trauma of liking Tcl, by means of rationalizing it. I'll first tell the story of my fascinating adventures, and…
The Scala language is large and complex, and it provides a variety of tools that a developer can use to do the same thing in a variety of ways. Given the range of possible solutions to every problem, how can a developer choose which one should be used? This is the first in a series of blog posts aiming to provide…
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?
I give some advice each year in my annual Sphinx tutorial at PyCon . A grateful student asked where I myself had learned the tip. I have done some archæology and finally have an answer. Let me share what I teach them about “semantic linefeeds,” then I will reveal its source — which turns out to have been written when…