Category: Programming

Shellshock Logo

I heard the Shellshock vulnerability didn’t have a cool logo like Heartbleed. So I decided to draw one: Copyright © 2014 Stuart SierraThis work is licensed under a Creative Commons Attribution 4.0 International License.

Clojure 2013 Year in Review

This is my third Clojure year-in-review post. In 2011 I was excited about Clojure 1.3, ClojureScript, and the second Clojure/conj. By 2012 I was blown away by four Clojure conferences, two O’Reilly books, reducers, Datomic, Immutant, and a partridge in a pear tree. For 2013, where do I even start? So much has happened this…

Read the full article

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

On the Perils of Dynamic Scope

Common Lisp the Language (CLtL) devotes an entire chapter to the subject of Scope and Extent. It defines scope as the textual region of a program in which an entity may be used, where “entity” could be a symbol, a value, or something more abstract like a variable binding. So scope is about where you…

Read the full article

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