Year: 2013

Command-Line Intransigence

In the early days of Clojure, I was skeptical of Clojure-specific build tools like Lancet, Leiningen, and Cake. Why would Clojure, a part of the Java ecosystem, need its own build tool when there were already so many Java-based tools? At the time, I thought Maven was the last word in build tooling. Early Leiningen…

Read the full article

Lifecycle Composition

I’ve been thinking about how to build up software systems out of stateful components. In past presentations and blog posts I’ve alluded to a standard interface I use for starting and stopping stateful components: (defprotocol Lifecycle (start [this] “Begins operation of this component.”) (stop [this] “Ceases operation of this component.”)) Most of my Clojure programs…

Read the full article

The Amateur Problem

We have a problem. We are professional software developers who work with open-source software. The problem is that we are in the minority. Most open-source software is written by amateurs. Every time a hot new technology comes on the scene, developers flock to it like ants to a picnic. Those early adopters are, by definition,…

Read the full article

My Clojure Workflow, Reloaded

I have a new post up on the Relevance blog: My Clojure Workflow, Reloaded. It’s a description of how I work with Clojure interactively using the REPL, tools.namespace, and Leiningen.

Affordance and Concision

Quick, Clojure programmers, what does the following expression do? (get x k) If you answered, It looks up the key k in an associative data structure x and returns its associated value, you’re right, but only partially. What if x is not an associative data structure? In every released version of Clojure up to and…

Read the full article

A Brief Rant About Versioning

Version numbers are meaningless. By that, I mean they convey no useful information. Oh sure, there are conventions: major.minor.patch, even/odd for stable/development versions, and designations like release candidate. But they’re just conventions. Version numbers are chosen by people, so they are subject to all the idiosyncrasies and whims of individuals. Semantic Versioning, you say? Pshaw.…

Read the full article

The Reluctant Dictator

I have a confession to make. I’m bad at open-source. Not writing the code. I’m pretty good at that. I can even write pretty good documentation. I’m bad at all the rest: patches, mailing lists, chat rooms, bug reports, and anything else that might fall under the heading of “community.” I’m more than bad at…

Read the full article

Playing the Obstacle

When I was in acting school (yes, I was in acting school, see my bio) one of my teachers had an expression: playing the obstacle. When studying for a role, one of an actor’s most important jobs is to determine the character’s overall objective: What’s my motivation? The plot of any play or movie typically…

Read the full article