William Blankenship
Filter: February,April,June
Debugging GAS ASM with GDB

This tutorial will walk you through debugging amd64 AT&T ASM using the GNU as assembler and gdb. Why would you ever want to do this? More than likely you were sitting around bored drinking cocktails and decided to give assembly a try.

Following along

If you are running an amd64 distribution of Linux, you just need gdb, ld, and as installed. Otherwise, you need to download VirtualBox and install amd64 Linux to follow along. The distribution shouldn't matter.

Example Application

We are going to use an example application that is fairly common. It comes from the book Programming from the Ground Up by Jonathan


left-pad and Proper Engineering Principles

A recent event in the Node.js ecosystem received widespread attention. There has been a surprising amount of logical fallacies, conflation of problems, and general misinformation about what transpired. This post is me throwing my hat in the ring as a voice in the conversation.

In this article, we will separate out each individual conversation that has been taking place around the events of #npmgate, we will put forward the reason it caused as much trouble as it did, and how you could have protected yourself from what transpired. This will be entirely from an engineering perspective. The "people", "legal", and "philisophical" questions will be saved for another time.

Separation of Concerns

Much of the misunderstanding and borderline panic has been caused by the conflation of several problems. Before we dive into the opinionated section of this piece, I'm going to take a moment to separate out the individual issues tha


Debugging the Docker Daemon

This week I needed to dive deeper into some performance issues I have been experiencing with dante. The first section will detail the struggle that lead me to this point. If you want the quick-n-dirty DIY instructions for profiling Docker, feel free to skip ahead.


At NodeSource, I'm building hundreds (literally hundreds) of Docker Images. This has lead to the pressing need of parallelizing these. Currently, I'm provisioning a 32-core box and triggering 100 simultaneous builds to burn through my 600+ images. I've noticed though that, at any one time, there is never more than ~25 layers actively running. Somewhere, there is a bottleneck. Running ps shows me that Dante is indeed spawning 100 docker build commands, so it would seem the docker daemon isn't keeping pace.

Diving into the Daemon

So golang has a built-in profiler called [pprof