New
The latest blog posts to take off on Hacker News. 117 posts.
Writing a full-text search engine using Bloom filters
A few minutes ago I came across a Hacker News post that detailed a method of adding search to your static site. As you probably know, adding search to a static site is a bit tricky, because you can’t just send the query to a server and have the server process it and return the results. If you want full-text search…
Knossos: Redis and Linearizability
A few weeks ago I criticized a proposal by Antirez for a hypothetical linearizable system built on top of Redis WAIT and a strong coordinator. I showed that the coordinator he suggested was physically impossible to build, and that anybody who tried to actually implement that design would run into serious problems. I…
I now have Rust code for executing executables
Day 45: I now have Rust code for executing executables!
The Law of Leaky Abstractions (2002)
There’s a key piece of magic in the engineering of the Internet which you rely on every single day. It happens in the TCP protocol, one of the fundamental building blocks of the Internet. TCP…
Optimizing Nginx TLS Time To First Byte
TLS is not slow, it's unoptimized. A hands-on tour of optimizing nginx to deliver one-RTT Time To First Byte (TTFB) with TLS.
What are Linux containers and how did they come about?
Today's announced collaboration between Red Hat and dotCloud , the company behind Docker, is exciting for a lot of reasons. As the release n...
Call me maybe: Redis redux
In a recent blog post , antirez detailed a new operation in Redis: WAIT . WAIT is proposed as an enhancement to Redis’ replication protocol to reduce the window of data loss in replicated Redis systems; clients can block awaiting acknowledgement of a write to a given number of nodes (or time out if the given threshold…
How can C Programs be so Reliable? (2008)
C is, today, a unique programming language. Surprisingly few people can really program in C and yet many of us have quite strong opinions about it. Buffer overflows, stack smashing, integer overflows — C has many well publicised flaws, and these terms are often bandied about confidently, even by those unfamiliar with…
The cost of dynamic vs. static dispatch in C++
A couple of years ago I wrote an article about the Curiously Recurring Template Pattern in C++ , focusing on the motivation behind it and how to implement it.
Multiprocess Firefox
Since this January, David Anderson and I have been working on making Firefox use multiple processes. Tom Schuster (evilpie on IRC) joined us as an intern this summer, and Felipe Gomes, Mark Hammond…
After 5 days, my OS doesn't crash when I press a key
Day 37: After 5 days, my OS doesn't crash when I press a key
A Testament to X11 Backwards Compatibility
I recently scored a Hewlett Packard 1670A Deep Memory Logic Analyzer and I finally had a chance to fire it up. This unit dates back to 1992 ...
On programming without malloc
Day 36: On programming without malloc
Intel i7 loop performance anomaly
Recently I've been doing some benchmarking and came upon a very surprising behavior from a number of different Intel i7 CPUs (it manifests on Sandy Bridge and Haswell desktop-class CPUs as well as Sandy Bridge-EP Xeon CPUs).
Boundaries
This talk is about using simple values (as opposed to complex objects) not just for holding data, but also as the boundaries between components and subsystems. It moves through many topics: functional programming; mutability's relationship to OO; isolated unit testing with and without test doubles; and concurrency, to…
MySQL 5.7: over 1M queries/sec on a single machine
Last week, during Tomas ' keynote at MySQL Percona Live Conference in London we announced as one of "previews" of the following MySQL 5.7 release(s) -- an over 1,000,000 Query/sec result obtained with InnoDB Memcached plugin on a Read-Only workload. This article here is just to confirm the announced results without…
Booting to Rust
A couple nights ago I was looking over the UEFI spec, and I realized it shouldn't be too hard to write UEFI applications in Rust. It turns out, you can, and her…
How statically linked programs run on Linux
In this article I want to explore what happens when a statically linked program gets executed on Linux. By statically linked I mean a program that does not require any shared objects to run, even the ubiquitous libc . In reality, most programs one encounters on Linux aren't statically linked, and do require one or…
Why Do Companies Still Use Microsoft Windows For Displays?
As I was exiting Oxford Railway Station, I glanced at this screen showing the bus departure times. Notice anything odd about it? sigh Yet again someone has shoehorned Microsoft Windows into a product it is completely unsuitable for. Why does a screen which displays a fairly basic set of information need to be running…
How I Got a 2x Speedup With One Line of Code
If you had asked me whether or not it was possible to get a 2x speedup for my LazySorted project by adding a single line of code, I would have told you "No way, substantial speedups can really only come from algorithm changes." But surprisingly, I was able to do so by adding a single line using the __builtin_prefetch…
Bytecode
What is the most commonly used bytecode language in the world? Java (JVM Bytecode)? .NET (CLI)? Flash (AVM1/AVM2)? Nope. There’s a few that you use every day, simply by turning on your computer, or tablet, or even phone. You don’t even have to start an application or visit a webpage.
Writing a FUSE filesystem in Python
If you’re a regular reader, you might have noticed that I’ve been on a quest for the perfect backup program , and ended up writing my own encryption layer over bup.
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...
Fixing Unix Filenames (2012)
This article will try to convince you that adding some limitations on legal Unix/Linux/POSIX filenames would be an improvement. Many programs already presume these limitations, the POSIX standard already permits such limitations, and many Unix/Linux filesystems already embed such limitations so it'd be better to make…