What makes a good REPL?

August 20, 2017

Dear Reader: although this post mentions Clojure as an example, it is not specifically about Clojure; please do not make it part of a language war. If you know other configurations which allow for a productive REPL experience, please describe them in the comments!

Continue reading →

Datomic: this is not the history you're looking for

July 8, 2017

In this post, I'll describe some common pitfalls regarding the use of the 'time-travel' features of Datomic (db.asOf(), db.history(), :db/txInstant).

We'll see that, unlike what many people think when they start using Datomic, these historical features of Datomic are not so useful for implementing custom time-travel features in the business logic of applications - rather for generic database-related tasks.

Continue reading →

Using Datomic in your app: a practical guide

July 24, 2016

Schema rigidity, N+1 problem, impedance mismatch, remote querying, consistency... Datomic eliminates many of the biggest problems of traditional databases. That's how I like to pick technologies: to solve the hard problems for me and leave me the easy ones. I have been using Datomic professionally for over 8 months now, and I can testify that it's given me a tremendous boost in productivity and quality, even for ordinary web development tasks.

However, because Datomic is so different from other databases, and because its young ecosystem still lacks convention, it's taken me some time and thought (at least a week) to come up with an architecture that is practical and lets me leverage its special powers. My hope is that by reading this post, you'll be able to get started more quickly.

Continue reading →

Application architecture with Datomic: branching reality

January 3, 2016

Continue reading →

A bottom-up approach to state in Reagent

September 16, 2015

In this post, I'll present an alternative way of managing state in Reagent applications to what is currently made popular by libraries like Re-frame.


Continue reading →