Monday, January 09, 2012

My two new projects: both web portals written in Clojure

I have three web portal projects that I have wanted to develop for quite some time. I am close to releasing two of them (a text analytics web service and a stock photos and video clip store. My wife and I are avid photographers and we have been wanting to travel more and do more photography; I started putting together the photo site yesterday morning and hope to have it fully on line in the next day of two - simple to implement. The text analytics web service will be publicly available within a month or so (right now, just the demo page is active - I short circuited the new account login for now). My third project is a web portal for a single consultant to manage multiple customers. Last year I prototyped this for my own use using Java + GWT + AppEngine and then ported it off of AppEngine, using MongoDB for the data store. I have had such a fun and productive time using Clojure and Noir for my two recent projects that I am considering porting this third project to Clojure. I might leave it as-is except that I have already done most of the design for a more complex web app to manage multiple consultants with multiple customers. I know that the development would go much faster using Lisp.

4 comments:

Dmitry said...

This is cool! I also like Clojure very much. The only thing which still bothers me is hosting. Looks like the only option today is Heroku or otherwise you have to buy VPS. How did you host your portals and how much memory do they consume?

Mark Watson, author and consultant said...

Hello Dmitry, I host the photo site on a small EC2 instance (with a lot of other stuff) and the web service on Heroku (two dynos). In your lein project.clj file you can set JVM options for maximum memory limit which I recommend for Heroku (something like -Xmx280m).

Using EC2 micro instances is also a possibility but Amazon throttles the amount of CPU time you get if you use too much at once. I have a customer's Clojure + Noir web app (very light use) running on one of their micro instances - works OK if I use the "nice" utility to run at a lower priority, like: "nice lein run prod" ("prod" for production). Running at a lower priority may sound counter intuitive but I stay under Amazon's CPU allotment and they don't seem to throttle me.

VernonO said...

Hi Mark,
I am curious about your strategy on your third mentioned project. Since you stated the prototype uses GWT, are you planning for a similar javascript-heavy frontend if you use Clojure for the backend ? In other words, will you use a javascript library, or will you resort to a more "Web 1.0" style ?
Thanks,

Mark Watson, author and consultant said...

Hello VernonO, if I drop the GWT code, I was not going to use a rich client approach - I may use Dojo.