Monday 16 December 2013

In praise of LuminusWeb

Well, I've just finished my first in-anger, for-a-paying-customer, website in Clojure. Essentially it's just a very simple CRUD system; it landed on my desk last week in a rush because the agency which had been supposed to be building it had drawn some pretty pictures and then thrown their hands up in the air and said 'this is too hard'.

It wasn't a requirement it be written in Clojure; in fact, until I tacked a credits line on the bottom of the pages saying 'Powered by Clojure' I don't think the customer knew that it was. I estimated four days on a fixed price basis; I think this was fair. In fact it took six, but I worked over the weekend so the project hasn't been delayed by my overrun.

Some of the overrun was unforeseen - the agency who abandoned the job had built the forms in JotForm, and they proved to be so horrible that I had to rewrite them from scratch - the HTML was bizarrely bad, and none of the field names were meaningful. Also, the pretty pictures drawn by the agency were all fixed size - they didn't flow or scale. I admit I'm a snob, but if a website is going to be identified as my work I want it to be right. So now, it is right (well, mostly; the navigation does something ugly and not very usable if you shrink a desktop browser window too small, but I haven't yet found a workaround for that which fits with the design). Now, it uses media queries to distinguish smartphones, tablets and desktops, and serves the appropriate CSS for each. Yes, that cost me time, too, but in my opinion it's worth it.

And, of course, there was a bit of feature creep - there always is. The customer asked for several features which hadn't been in the original specification, and I've delivered them - but they all add time.

But the overrun I did foresee - learning time - was much less than I would have expected, and that was down to LuminusWeb. LuminusWeb is not really so much an integrated toolkit in its own right as a collection of tools from a range of developers. It doesn't use all the tools which, if I was selecting for myself, I would choose; for example it uses Selmer for generating dynamic content rather than the, in my opinion, much more elegant Enlive. But what LuminusWeb does provide - which makes all the difference if you're building something against a deadline - include

  • a great project template which sets up most of your scaffolding
  • a very clear tutorial, and
  • excellent documentation.

LuminusWeb's scaffolding and examples, with a little help from a couple of books

allowed me to build what I needed very quickly, and with remarkably little pain.

LuminusWeb is also very up-to-date; it uses current or near versions of all the tools it depends on.

There is one thing I'm disappointed with. I had hoped to integrate Chris Emerick's Friend authentication package to do OpenID authentication, but I struggled with the documentation (despite good example programs from both Chris himself and from Assen Kolov), and simply couldn't get this going in time. I did work out how I would have done proper database-layer authentication, but in the end I simply did application layer authentication because it was quick and easy.

Altogether, it's been a very pleasant experience and I'm kicking myself for not having done it sooner.

No comments:

Creative Commons Licence
The fool on the hill by Simon Brooke is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License