Clojure NYC had another great talk last night with Michael Gaare of Ladders introducing his library sqlium. Michael has taken his experience with Datomic and has created a DSL for querying SQL databases with a Dataomic-like flavor.
The source for the library was just put up on GitHub last night at https://github.com/TheLadders/sqlium. It will be interesting to see how the library does as others start using it.
As a next step, it would be good if the source Michael demonstrated last night which used the MusicBrainz data set was published somewhere for review as well.
The gist is here:
To save a click I'll put the function here after fixing the embarassing typo in the comment.
A common workflow when developing a Clojure project is to leverage one or more libraries written by others. When found, you'll review the main documentation page for a library and learn the information you'll need to add to your project.clj file's
:dependencies vector so Leiningen can find and load that library. These libraries will typically come from Clojars but can also be loaded from Maven Central.
Behind the scenes, when you build your project, you should know that your configured libraries will be installed in your local Maven repository. Look inside of the
.m2 directory off of your home directory.
So far so good. This will be all you need if you are good using these libraries without modification.
The question does arise though when you want to try changing one of these libraries. How can you set things up to allow this is the question.
I have a few old sites that were developed in PHP using the Zend framework. Since moving to Clojure mostly full-time I thought it would be good to do some house cleaning and move these old sites over to Clojure. While doing so I and seeing that there was a basic pattern to the process I thought it might help others if I mocked up an example and put some notes together.
Now, before I go on I'll say that my example is very simple and it covers a basic site. Highlighting the structure of the PHP/Zend site and the Clojure/Compojure site is the main idea I'd like to get across. Those with more complex sites will clearly need to do more. Hopefully, the following will help get them started.
To start visit or clone the following repo. It contains two examples of the same simple site. One in PHP and the other in Clojure. I'll walk through the differences.