Idiomatic Clojure without sacrificing performance - A couple of weeks ago a comment on HN caught my eye: I write Clojure for food, and Common Lisp for fun. One reason for the latter is CL's speed – awhile back I compared a bit of (non-optimized) Clojure code I wrote for a blog post with a rough...
Pushing the limits with Clojure - web servers edition - Writing large scale web applications in Clojure can offer a unique challenge. In this series I'll share and walk through the results of a web servers profiling project I have been working on. My goal? a humble one. Find the best web server in the Clojure ecosystem, and the best...
Datahike is a durable database powered by an efficient Datalog query engine. It started as a fork of DataScript and grew from there. It's an interesting project I've been following in the past few months with interest. My curiosity led me to a dive inside Datahike's Datalog parser. I've been...
It is not an exaggeration to say transducers are the greatest thing since sliced bread. They open up new frontiers in performance and composition. In this series, we'll take a deep look at transducers. We'll derive them naturally from existing concepts, see the wide variety of use cases in which...
We all make mistakes. We have all written bad pieces of code at some point of our lives. They might have been non-idiomatic, unreadable, or had bad performance. This post catalogs all the little things which sit down at the bottom of your code, accumulate like dust, and when taken...
It is often said one should not offer criticism without suggesting an alternative. In a previous post which dealt with the idiomatic ways of mixing side effects and iteration in Clojure, I mentioned pmap is a bad option for performing side effects in parallel. Since I'm not paid highly enough...
We live in interesting times. Significant portions of the tech and business industry are currently working remotely, including Google Twitter and Facebook. There's an ever growing body of research which shows the current trend in office design, the open office, is a productivity killer, and perhaps counter-intuitively, also harms collaboration,...
Clojure is a highly practical language. It's dynamically typed, yet immutable, functional, and lazy by default. Unlike strongly typed functional languages, it has no formal system for handling side effects, making them easy to perform on one hand, but also easy to get wrong by mixing up Clojure's idioms. For...