Learn how and why to build testable, API-driven applications in my new book "Building Tools with GitHub" from O'Reilly. Code samples on GitHub.
Jul 6, 2016


Jan 28, 2016

This discussion about “bad APIs” was thoughtful and made me think of what a good one looks like. As I just wrote a book on the Github API I thought contrasting bad API with what I consider to be a good one makes sense.

Jan 17, 2016

Paul Graham’s initial article was an interesting spark but the follow-up where he defends himself by talking about how he shouldn’t waste time defending himself is a great online bonfire. Mr. Graham is an engaging writer, no doubt appealing to his demographic, the analytical programmer type (in which I group myself), with his exacting and bulletproof prose. The flip side is a lack of beauty; he is no Hemingway or Marquez or Kundera, if he had that, it faded when he started focusing on startups to the detriment of his painting.

Oct 21, 2015

I’m almost done wrapping up my O’Reilly book “Building Tools with GitHub” (available in early release, btw). This book was originally going to include a section on the history of Git and other DCSes. But, the story of the book shifted and I removed this passage. It seems fitting to post this today (Oct 21st, 2015), the day to which Marty travels into the future on “Back to the Future II.”

Jun 23, 2014

After a week or two of hacking with Go for just a few short hours, I can unequivocally say I love it. I resisted learning Go because I thought static typing would make me less productive. I love(d) monkey patching with Ruby! There is (was) so much freedom that to get something running quickly all I needed was to see “OK” after running ruby -c. Little did I know the mindspace occupied by that nagging worry in the back of my head saying “remember to write unit tests!” And, “I can almost certainly be sure that all my variables are spelled correctly.” Turns out there was a huge cost to be paid for this freedom, because my code was often buggy, and I never got around to 100% test coverage. Static type checking removes that issue for me and now that I have aligned my brain around struggling a little bit more during compilation, my code just works once I am past that phase. With Ruby all the problems were in the runtime phase, my problems are rarely there with Go.

Jun 19, 2014

As I’ve been playing with Go, I see the incredible productivity benefits it gives me. So many times it has caught errors that would have been left were I writing in Ruby or JavaScript. I would have written tests to catch these, when I got around to it…

Jun 12, 2014

[This post explores troubleshooting network issues you might find when using docker with boot2docker, and in doing so illustrates the network topology of services running inside of docker and a VM host like VirtualBox]

May 2, 2014

In my last two posts, I experimented with building the Sieve of Eratosthenes in JavaScript. I wanted to provide a visualization of the algorithm so I used CSS animations to indicate changes in state. At first I did this using timeouts to show the execution after a delay, which meant my code was not using recursion as you might expect from the algorithm. When I moved to keeping things isolated in a queue of states and then iterating over those states, the algorithm looked better, but AngularJS did not know that my states were connected and could not apply the proper classes to display the animations. I’ve been refactoring this for a bit and have a good solution now which preserves the animations and allows the original algorithm to run without timeout callbacks.