Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 14,544 posts.
Emulating x86 on X64 on Aarch64
Emulating win32 on Mac using Apple's x64 emulator.
Thinking in Actors – Challenging your software modelling to be simpler
Challenging your software modelling techniques to be simpler
Go Interfaces, the Tricky Parts
Does this Go snippet compile, and if not, why?
Unit testing a TCP stack (2015)
Thoughts on how to write automated tests for a TCP implementation.
Introduction to P vs. NP
Series Introduction In this series of articles I would like to share with you a set of ideas that are meant to help non-technical people build a better intuition as to what the current software and…
On the Beauty of Python's ExitStack (2015)
I believe Python's ExitStack feature does not get the recognition it deserves. I think part of the reason for this is that its documentation is somewhere deep down in the (already obscure) contextlib module because formally ExitStack is just one of many available context managers for Python's with statement . But…
Accidentally writing a SAT solver
where my words occasionally escape /dev/null
z386: An Open-Source 80386 Built Around Original Microcode
This is the fifth installment of the 80386 series . The FPGA CPU is now far enough along to run real software, and this post is about how it works. z386 is a 386-class CPU built around the original Intel microcode, in the same spirit as z8086 .
Text layout is a loose hierarchy of segmentation
I love text layout, and have been working with it in one form or other for over 35 years. Yet, knowledge about it is quite arcane. I don’t believe there is a single place where it’s all properly written down. I have some explanation for that: while basic text layout is very important for UI, games, and other contexts…
Recursive Language Models (RLMs)
We explore language models that recursively call themselves or other LLMs before providing a final answer. The aim is essentially unbounded context, and a way through context rot.
C Programming on System 6 – Implementing Multi-User Chat
Your browser doesn't seem to support HTML video. You can download the video (H.264/AAC format) instead.
Five Kinds of Nondeterminism
Or four kinds, or six kinds, I'm not picky about how you count them
NASM Tutorial (2018)
This tutorial will show you how to write assembly language programs on the x86-64 architecture.
Reading and writing are less symmetric than you (probably) think
I am talking about the I/O operations as used in computing here. A typical example of how this kind of thing is exposed are the POSIX syscalls read(2) and write(2), which have the following C funct…
Formatting Is Unreasonably Expensive for Embedded Rust
As a (late) part of the #rust2020 request, I wanted to talk about one of the paper-cuts that has become decently problematic for new and experienced users of Embedded Rust: The size costs of formatting in Rust today are unreasonably expensive for users of Rust on bare metal embedded systems. In particular there are…
Static Allocation, Constant Work
In reply to this email:
How a language can be faster than C
a blog post by @azwinkau
Apply Unix Principles to Write Testable Microservices
Microservice architecture paradigm fits well within the Unix’s first principle/philosophy: “Make one program do one thing well”. We l...
Programming Algorithms: A Crash Course in Lisp
The introductory post for this book, unexpectedly, received quite a lot of attention, which is nice since it prompted some questions, and on...
Low-level web programming in Racket and a wiki in 500 lines
Racket provides a simple yet flexible web framework for serving dynamic web content.
Retrofitting JIT Compilers into C Interpreters
C interpreters are a common language implementation technique and the basis for the reference implementations of languages such as Lua, Ruby, and Python. Unfortunately, C interpreters are slow, especially compared to language implementations powered by JIT compilers. In this post I’m going to show that it is possible…
Protocol Buffers, Avro, Thrift & MessagePack
Perhaps one of the first inescapable observations that a new Google developer ( Noogler ) makes once they dive into the code is that Protocol Buffers (PB) is the "language of data" at Google. Put simply, Protocol Buffers are used for serialization, RPC, and about everything in between .
How to Write a Computer Emulator
I wrote this document after receiving large amounts of email from people who would like to write an emulator of one or another computer but do not know where to start. Any opinions and advices contained in the following text are mine alone and should not be taken for an absolute truth. The document mainly covers…
Per Brinch Hansen's books on compilers
Brinch Hansen was one of the pioneers of concurrent programming and operating systems (kernels). In the 1960s, Brinch Hansen worked at the Danish computer company Regnecentralen, first in the compiler group headed by Peter Naur and Jørn Jensen, and, later, as the chief architect of the RC 4000 minicomputer and its…