Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 3,290 posts.
Why I Love Tailwind
Why Tailwind is blowing up, why I (the creator of styled-components) love it and how I avoid the downsides of atomic CSS.
How to Put More “Character” into Your NPCs
Geoffrey Golden explores narrative design and imbuing NPCs with life and personality
50 authors, 50 science fiction stories shorter than novels
See the updated 80 author version. I've been playing around with re-reading favorite science fiction short stories while also seeing if the...
Fast UTF-8 validation
One of the most common "data type" in programming is the text string. When programmers think of a string, they imagine that they are dealing with a list or an array of characters. It is often a "good enough" approximation, but reality is more complex. The characters must be encoded into bits in some way. Most ……
Meeting everyone on a new team
Strategic technology leader
How many users block Google analytics? (2017)
Comparing Google Analytics with server logs
Two Years with Rust
It’s been just over two years since I started learning Rust. Since then, I’ve used it heavily at my day job, including work in the Firecracker code base, and a number of other projects. Rust is a great fit for the systems-level work I’ve been doing over the last few years: often performance- and density-sensitive…
IoT Unravelled Part 1: It's a Mess but Then There's Home Assistant
With the benefit of hindsight, this was a naïve question: > Alright clever IoT folks, I've got two of these garage door openers, what do you reckon the best way of connecting them with Apple HomeKit is? https://t.co/i0RmjSMkkD — Troy Hunt (@troyhunt) April 25, 2020 [https://twitter.com/
Algorithms Interviews: Theory vs. Practice
When I ask people at trendy big tech companies why algorithms quizzes are mandatory, the most common answer I get is something like "we have so much scale, we can't afford to have someone accidentally write an O(n^2) algorithm and bring the site down" 1 . One thing I find funny about this is, even though a decent…
How to create minimal music with code in any programming language
Making music with low-level C code, from a simple saw wave to playing melodies
Intercepting Zoom's encrypted data with BPF
How to use Rust and BPF to intercept the data sent and received by programs that use OpenSSL.
Visualizing Git Concepts with D3
This website is designed to help you understand some basic git concepts visually. This is my first attempt at using both SVG and D3. I hope it is helpful to you.
I Worked for a Criminal Organization
That time I was employed by a criminal organization I was employed by Micfo for several months, I quickly determined that they were shady and invovled in illegal practices. I did not quit because of that, I quit because I felt unwanted, by HR and Management. Later they would ask me to come back. This is the full…
I Built My Own Shitty Static Site Generator
My name is Erik, and I am a Dutch software developer. I also like to write fiction. One could say I spend a lot of time trying to capture the world in plain text. Source code for the small part of it that can be expressed in logical terms, stories for everything else.
Game Programming Patterns: Event Queue (2014)
Unless you live under one of the few rocks that still lack Internet access, you’ve probably already heard of an “event queue” . If not, maybe “message queue”, or “event loop”, or “message pump” rings a bell. To refresh your memory, let’s walk through a couple of common manifestations of the pattern.
Fragile narrow laggy asynchronous mismatched pipes kill productivity
Something I’ve been thinking about recently is how when I’ve worked on any kind of distributed system, including systems as simple as a web app with frontend and backend code, probably upwards of 80% of my time is spent on things I wouldn’t need to do if it weren’t distributed. I came up with the following description…
Lumen – Elixir and Erlang in the Browser
The Lumen Project is an alternative implementation of the Erlang VM, more known as the BEAM. It is designed to work in WebAssembly with the specific goal of bringing Elixir and Erlang to the browser.
Mac OS Catalina: more trouble than it’s worth (Part 2)
I've been receiving a lot of feedback since writing the original piece in October 2019, and… it's not good.
Adding a fiber link to my home network
Motivation Despite using a FTTH internet connection since 2014, aside from the one fiber uplink, I had always used network gear with 1 Gbit/s links over regular old rj45 cat5(e) cables. I liked the simplicity and uniformity of that setup, but decided it’s time to add at least one fiber connection, to get rid of a…
Iron, How Did They Make It? Part II
This week we continue our four-part (I, II, III, IVa, IVb, addendum) look at pre-modern iron and steel production. Last week we prospected our iron ore and extracted it from the ground and did some…
Understanding and writing a JPEG decoder in Python
How the JPEG format works: file headers and markers, Huffman coding, quantization, zigzag and the DCT, explained by writing a JPEG decoder in Python.
Reverse engineering the rendering of The Witcher 3 (2018)
Welcome, This is the index page for my "Reverse engineering the rendering of The Witcher 3" small series where I select some rendering tec...
Millions of Tiny Databases
Millions of tiny databases, Brooker et al., NSDI’20 This paper is a real joy to read. It takes you through the thinking processes and engineering practices behind the design of a key part of …
The cult of the free must die
For a terrible half an hour last night I thought Firefox was on the brink of disappearing as an independent browser and rendering engine. I was frightened silly by the rumour that Mozilla laid off significant portions of its browser team. The official press release being full of useless corporate open web blah didn’t…
Pointers Are Complicated II, or: We need better language specs
Some time ago, I wrote a blog post about how there’s more to a pointer than meets the eye. One key point I was trying to make is that just because two pointers point to the same address...
Names are not type safety
Haskell programmers spend a lot of time talking about type safety . The Haskell school of program construction advocates “capturing invariants in the type system” and “making illegal states unrepresentable,” both of which sound like compelling goals, but are rather vague on the techniques used to achieve them. Almost…