Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 21,834 posts.
Programming Portals
Small, scoped areas within a graphical interface that allow users to read and write simple programmes
Qt Creator 18 Released
Qt Creator 18 highlights development containers to ease kit configuration, a convenient Overview tab, and various UX improvements.
Patching my guitar amp's firmware
I’m having a lot of fun with reverse engineering lately, so when I was looking over the service manual for my guitar amp, a Yamaha THR10c, and saw references to a UART header in the schematic, I got excited. I wondered if anything cool was hiding in there. Next to it was a JTAG header. I knew next to nothing about…
Visualising the .NET Garbage Collector
As part of an ongoing attempt to learn more about how a real-life Garbage Collector (GC) works (see part 1) and after being inspired by Julia Evans’ excellent post gzip + poetry = awesome I spent a some time writing a tool to enable a live visualisation of the .NET GC in action.
Translating an ARM iOS App to Intel macOS Using Bitcode
When Apple introduced Bitcode and made it mandatory on watchOS and tvOS, they kinda hand-waved away questions about why it existed, with nebulous claims about it being useful to tune-up binaries by utilizing the latest compiler improvements.
Gentle Introduction to Realtime Fluid Simulation for Programmers and Artists
A simple intuitive breakdown of fluid simulation for programmers and technical artists. Instead of complicated mathematical expressions, I…
How to program independent games (Johnathan Blow of Braid fame)
How to program independent games
You're in a space of twisty little mazes, all alike
I have a hidden reason for posing this problem, but that's the subject of a future blog post. But for now, let me clarify by saying that I'm not just interested in counting the number of such mazes, I actually want to enumerate them — that is, I need to know what each maze looks like.
Procedural Dungeon Generation: Cellular Automata
Last time we looked at generating random dungeons for video games using the Drunkard’s Walk algorithm. The Drunkard’s Walk is fun to play with, and often generates cool levels, but it’s also pretty unreliable. That’s not good enough for my purposes: I want to reliably generate big, open, cave-like maps, with lots of…
Writing Hello World in Web Assembly (2017)
Web Assembly is written in an s-expression syntax (wast) and then needs to be translated down to binary encoded wasm. Below is a gist of wast that imports the stdlib.print function taking a memory location offset and a length, as well as importing a block of memory from the controlling runtime. We then store the…
A Gentle Introduction to Multithreading
Approaching the world of concurrency, one step at a time.
Flare: Clojure Dynamic Neural Net Library
I wrote Flare, a Dynamic Neural Net library in Clojure.
Programming a CH32v003 with light
A comedic example, parked nicely on the thinnest wedge of the venn diagram, is the HamFurs – people who do amateur radio while wearing fur suits. While it isn't my cup of tea, I love that such a group exists. They seemed like nice people when I chatted to them.
Using TLA+ to Understand Xen Vchan
The vchan protocol is used to stream data between virtual machines on a Xen host without needing any locks. It is largely undocumented. The TLA …
Bootstrapping Understanding: An Introduction to Reverse Engineering
Reverse engineering an unfamiliar data file could be described as the bootstrapping of understanding. In many ways the process resembles the scientific method, only applied to human-made, abstract objects instead of the natural world. You begin by gathering data, and then you use that information to put forth one or…
SciPy 2016: “Data Science is Software” tutorial
Last week, Peter and I gave a tutorial at SciPy 2016. In keeping with our recent thinking about reproducibility and organization , the idea was to look at how some of the hard-won lessons and best practices from modern software engineering can be applied to data science work.
We check our node_modules folder into source control
On every team at every company I've been at prior to my current role, the advice was simple: don't check your node_modules folder into your version control system (which I'll refer to as “Git” for the rest of this article…). This seemed like solid advice for multiple reasons:
I do not use a debugger (2016)
I learned to program with BASIC back when I was twelve. I would write elaborate programs and run them. Invariably, they would surprise me by failing to do what I expect. I would struggle for a time, but I'd eventually give up and just accept that whatever "bugs" I had created were there to stay. … Continue reading I…
The Future of Kubernetes
Kubernetes is ubiquitous in container orchestration, and its popularity has yet to weaken. This does, however, not mean that evolution in the container orchestration space is at a stand-still.
The Curious Case of Swift's Adoption of Smalltalk Keyword Syntax
I was really surprised to learn that Swift recently adopted Smalltalk keyword syntax: [Accepted] SE-0279: Multiple Trailing Closures . Tha...
A Saner Windows Command Line
The default Windows command line experience is a little lacking. Let's supercharge it.
When FP? And When OOP? (2013)
Very roughly speaking, functional programming (“FP”) and object-oriented programming (“OOP”) have similar levels of expressive power and similar abilities to encapsulate programs into smaller parts that can be combined and recombined.
On Go
This is one of a series of posts on languages, you can read more about that here . A grab bag of observations on the Go programming language, positive and negative. It bucks some orthodoxy on what a good effective language is supposed to look like. It makes sensible engineering decisions and is sq