HAproxy in the era of Microservices
Tales of a Software Craftsman
The Power of Power Cycling
Topics of interest for James
A conversation with Sussman on AI and asynchronous programming
A couple weeks ago I made it to the FSF's 30th anniversary party. It was a blast in many ways, and a good generator of many fond memories, but I won't go into depth of them here. One particularly exciting thing that happened for me though was I got to meet Gerald Sussman (of SICP !) The conversation has greatly…
Writing a Game Boy Advance Game
I spent a lot of time as a kid playing (generally, pretty terrible) games on my Game Boy. Having never written code for anything other than 'regular' general purpose computers before, I've been wondering recently: how easy is it to write a Game Boy (Advance) game?
The poor, misunderstood innerText
Few things are as misunderstood and misused on the web as innerText property. That quirky, non-standard way of element's text retrieval, [introduced by Inter...
Python C API, PyPy and the road into the future
tl;dr; We are willing to commercially support CPython C API in PyPy, so if you want pypy to support library X, get in touch with me at fij...
Solving the Go Challenge 1 in Erlang
The first Go challenge is over. So by now, I can take my Erlang solution and write about how you would go around solving the challenge in…
Cross compilation just got better in Go 1.5
Cross compilation is one of Go’s headline features. I’ve written about it a few times , and others have taken this work and built better tooling around it.
Four MLs (and a Python)
I wrote a small command-line text processing program in four different ML-derived languages, to try to get a feel for how they compare in terms of syntax, library, and build-run cycles. ML is a fam…
A Million Lines of Bad Code
This is the story of some bad code I wrote.
React/JavaScript fatigue
A few days ago, I met up with a friend & peer over coffee.
Java 8’s new Optional type doesn't solve anything
When Java 8 was released, I was excited to see the new Optional type. The null reference is a common source of errors in most languages…
Error handling in Rust
Like most programming languages, Rust encourages the programmer to handle errors in a particular way. Generally speaking, error handling is divided into two broad categories: exceptions and return values. Rust opts for return values.
How to implement a spreadsheet
My friend Lindsey Kuper recently remarked on Twitter that spreadsheets were commonly understood to be the most widely used dataflow program...
The Weakness of the .NET OSS Ecosystem
The Profound Weakness of the .NET OSS Ecosystem
Learn to Code, It's Harder Than You Think
TL;DR: All the evidence shows that programming requires a high level of aptitude that only a small percentage of the population possess. The...
The Time Needed to Write “Effective Modern C++”
Initial cover design. Nobody asked me about the writing of Effective Modern C++ (EMC++), but I wanted to talk about it a little, so ...
A Complete Guide to Rails Caching
Caching in a Rails app is a little bit like that one friend you sometimes have around for dinner, but should really have around more often.