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.

TL;DR

Continue reading →

Productive Git setup

September 6, 2015

When getting started with Git, you don't always know there exist some trick to make you more productive with it. Here are a few, most of which are already in the official documentation.

Installing autocompletion

When working with git from the command-line, it's very useful to have autocompletion for your branch/remote names, git commands, etc. Fortunately, there is a bash script for that.

Continue reading →