Thanks to the Clojure Community!

Today at the Clojure/conj, I gave thanks to many community members for their contributions. Any such list is inherently incomplete – I simply can’t capture everyone doing great work. If I missed someone important, please drop a comment and accept my apologies. Andy Fingerhut – mailing list admin, JIRA admin, JIRA patches, Clojure cheatsheet Nicola Mometto – tools.reader, tools.analyzer,... [Read more]


sun.misc.Signal alternatives?

There seems to be a push underway to wean Java developers off of the “internal” sun.* packages in Java 9+. I was notified that Clojure currently uses sun.misc.Signal/SignalHandler in the Clojure REPL to intercept SIGINT (ctrl-c) to abort evaluation of the current expression (instead of terminating the process). Is there a viable replacement to using this functionality for the purposes... [Read more]


A dependency injection pattern in Clojure

Patterns and dependency injection – I’m partying like it’s 2006! Say you have some Clojure functions that look like this: (defn foo [config queue db-conn arg1] ...use config, queue, db-conn... ) (defn bar [config queue db-conn arg1 arg2] ...use config, queue, db-conn... ) Bindings Seeing all those config options and system resources on every function just looks gross... [Read more]


State of Clojure, problem areas

Following up on my last post about the results of the 2013 State of Clojure & ClojureScript survey, I was very interested in digging into the responses to the question “What do you think is Clojure’s most glaring weakness / blind spot / problem?”. I’ve spent some time categorizing the answers, trying to tease out the trends. Similar to the last category, about half the people... [Read more]


State of Clojure language features

I found the results of the 2013 State of Clojure & ClojureScript survey to be very interesting. Tonight I dug in a little deeper to the answers to the specific question “Name *one* language feature you would like to see added to Clojure.” There were 610 answers to this question (of 1061 survey responses). Many did not actually seem like language features but I’ll take all the... [Read more]


Clojure and testing

Occasionally I hear someone say that the Clojure community is against testing. I understand the sources of this – Rich Hickey (creator of Clojure) has spoken about testing in a number of talks and I think some of those comments have been misconstrued based on pithy tweet versions of more interesting longer thoughts. I’d like to give my own opinions on testing, what I think Rich has said,... [Read more]


Rock Paper Scissors with core.async

Just for fun I implemented Rock Paper Scissors with core.async. Each player is modeled as a go process that generates moves on a channel. A judge is modeled as a go process that takes moves from each player via their channel and reports the match results on its own channel. To start, let’s pull in core.async: (require 'clojure.core.async :refer :all) and define some helpful definitions: (def... [Read more]


Moving to Relevance

Today I am thrilled to announce that I have joined Relevance, Inc. People have been paying me to write code for a couple of decades now and I’ve been very fortunate to have great opportunities. I felt very lucky in this transition to have had time to figure out what I wanted and where I could make the biggest impact. I found some great options (thank you if you’re reading), particularly... [Read more]