Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 21,833 posts.
K-Nearest Neighbors from Scratch
Using JavaScript, we implement the k-Nearest Neighbors algorithm from the bottom up.
Tor project decides to fork Firefox
In a random bar about two years ago, a Google Chrome developer asked me why Torbutton didn't...
Go Debian: Writing Debian tooling in Go
As some of the world knows full well by now, I’ve been noodling with Go for a few years, working through its pros, its cons, and thinking a lot about how humans use code to express thoughts and ideas. Go’s got a lot of neat use cases, suited to particular problems, and used in the right place, you can see some clear…
A Guide to Threat Modelling for Developers
Threat modeling is a risk based approach to cyber security requirements analysis.
Software Engineering: The Soft Parts
Today I will share some of the software engineering soft skills I have learned from my first 10 years on Google Chrome, where I am a Senior Staff Engineering...
Fuzzing rust-minidump for Embarrassment and Crashes – Part 2
For the last year, we've been working on the development of rust-minidump. The final part in this series takes you through fuzzing rust-minidump.
Go 1.10 is released
Go 1.10 adds automatic caching of build & test results, and more.
Some Thoughts on Zig
One of the biggest things Zig has going for it—especially compared to Rust—is that it is (relatively) small. That sits in tension with Rust’s approach to solving memory safety problems, and sets up a nice challenge for future programming language designers.
.NET 6 Preview 5
.NET 6 Preview 5 is now available.
You are not required to close your <p>, <li>, <img>, or <br> tags in HTML
Debunking an alarmingly common HTML misconception.
Retrofitting null-safety onto Java at Meta
We developed a new static analysis tool called Nullsafe that is used at Meta to detect NullPointerException (NPE) errors in Java code. Interoperability with legacy code and gradual deployment model…
Git branches are named sequences of commits
From the highly eclectic blog of Mark Dominus
Rust is just a tool
A programming language should not be your identity.
Why am I excited about WebAssembly?
As it continues to evolve, WebAssembly has the potential to be the platform executing an enormous amount of IoT computation.
The 80/24 Rule
Write small blocks of code. How small? Here's how small.
From Vim to Emacs in fourteen days (2015)
Yes, my friends, it is true. After more than fifteen years using Vim, teaching Vim, proselytizing about Vim, all the while scoffing in the general direction of Emacs, I’ve seen the light. The light of Lisp… Or something. If, like me, you’re curious enough to give Emacs a try, this post should help you get off the…
Yarn 4.0
Today is the day! After more than a year of work, our team is excited to finally put a fancy "stable" sticker on the first release from the 4.x release line! To celebrate, let's make together a tour of the major changes; should you look for a more itemized list, take a look at the changelog.
LLMs understand nullability
The last five years have shown us that large language models, like ChatGPT, Claude, and DeepSeek, can write code in many domains, to huge excitement: many claim to be using these models to write entire web servers and apps from scratch. These tools have opened up programming to a whole new class of people who consider…
The algebra and calculus of algebraic data types
Just as algebra is fundamental to the whole of mathematics, algebraic data types (ADTs) are fundamental to many common functional programming languages. They’re the primitives upon which all of our richer data structures are built, including everything from sets, maps, and queues, to bloom filters and neural networks .
OpenGL: Mesh shaders in the current year
It Happened.
The quality of AI-assisted software depends on unit of work management
The craft of AI-assisted software creation is substantially about correctly managing units of work.
UTF-8 String Indexing Strategies
When designing or, in some cases, implementing a programming language with built-in support for Unicode strings, an important decision must be made about how to represent or encode those strings in memory. Not all representations are equal, and there are trade-offs between different choices.