Docker’s dirty little secret

Docker isn’t what I thought it was.

I thought it provided a way to run docker images on any host that supported docker. As it turns out, that’s not true.

I first encountered something fishy when I found this docker image on Docker Hub, whose description said, “FreeBSD Docker host is required to run this image.” I thought, “How is that even possible?” And sure enough, I could run the image just fine with a FreeBSD host. But when I tried to run it on my iMac, it silently failed. How could this be?

Continue reading “Docker’s dirty little secret”

Histograms: an anti-rationale

Why Histograms are the New Pie Chart


Although pie charts are commonplace, those skilled in the art of data visualization disparage them as a poor vehicle for conveying information. Wedges, the unit being compared in a pie chart, are not something the human visual system is designed to compare with much accuracy. Furthermore, many good alternatives exist, such as bar charts, that lose no information and are easier for humans to digest accurately.

I argue that histograms are more akin to pie charts than bar charts. In other words, they do not play well with the human visual system, and a good alternative exists. This article examines the flaws of histograms, paying particular attention to how humans perceive them. This article examines the major flaw of histograms.

Continue reading “Histograms: an anti-rationale”

Lazy reduce in Clojure

We’re big fans of Clojure at Altometrics. It really gets out of the way and lets us get stuff done without a lot of fuss. Like many functional programming languages, Clojure features lazy sequences, which are especially useful if a given sequence is too big to fit into memory. (I’ll call such sequences “large” for the purposes of this post.)

I recently wrote the following Clojure function to lazily reduce a large sequence. I couldn’t find a Clojure function that does this, so I figured it would be worth sharing. The discussion follows, but first, here’s the code:

Continue reading “Lazy reduce in Clojure”

Talk: “Why and How to do a Software Startup”

Last night, I gave a talk at the Carolina Innovations Seminar. About a hundred people showed up to hear me talk about “Why and How to do a Software Startup”.

Slides from “Why and How to do a Software Startup”

Here’s the abstract:

As famous investor Marc Andreessen said, “Software is eating the world.” In other words, software is and will remain relevant, making software startups popular and attractive. For aspiring and current entrepreneurs, this talk will focus on the practical aspects of creating and running a software startup. Topics will include: managing a software project, hiring tech people, hosting and operations, security, intellectual property, which programming language to use, and social media, with a dual emphasis on what to do and why to do it that way.

The slides from my talk are now up on SlideShare. Enjoy!

New website

We recently launched a new website. Our old website was, like, so last year. Now we have a fresh new look that is also friendlier to mobile device screen sizes. Our blog got a similar update, both freshening things up visually but also moving to

In particular, check out our new About page. We’ve revised that to be more in line with our new mission: to amplify human intelligence by creating great tools. We have a lot of stuff in the queue related to that mission, so stay tuned!