I try not to pay much attention to popularity contests but I was just browsing Github today and happened to notice that FW/1 is both the "most watched overall" and "most forked overall" ColdFusion project on Github. Thank you!
Entries for month: November 2011
November 30, 2011 ·
November 29, 2011 ·
November 28th was the last day for session proposals for cf.Objective() 2012. The open call for speakers has been massively successful this year: a record number of proposals from a record number of speakers!
cf.Objective() has always been known for the high quality - and generally advanced level - of presentations and it looks like 2012 will be no exception! I've been involved with this conference in one way or another since the first year (2006) and I've watched it grow from strength to strength every year, with more sessions, more speakers, more attendees. It all started as an "itch" that Jared Rypka-Hauer felt he needed to scratch and a few years back it went global with the addition of cf.Objective(ANZ). In a time when the economy has caused most people to tighten their belts and several CFML events to disappear, it's good to see "The Only Enterprise ColdFusion Conference" powering ahead.
For several years, I was heavily involved in content selection but in 2010 the conference switched to an advisory board for that job and for 2011, I stepped down completely and became just an observer for the steering committee. Given the huge number of proposals this year, I'm very glad of that role change and I don't envy the job of Bob Silverberg and his team - they have a lot of work ahead of them!
I have no details on the content but I think you can count on it being excellent... If you didn't get a proposal in, there's always next year. If you did get a proposal in but you're not selected, don't feel bad: competition is stiffer than ever!
And me? I didn't think of a suitable talk before the deadline so no cf.Objective() for me in 2012. After ten conferences in 2011 (and I spoke at four of those), I could do with a break anyway :)
November 24, 2011 ·
It's pretty easy to get a Clojure web application up and running on Heroku. Heroku's Dev Center has a good Getting Started with Clojure article that shows you how to install the Heroku client and get your ssh keys setup. It has a very basic "Hello World!" Ring application as the example but you'll probably want something a bit meatier to play with. Here's how to get the FW/1 for Clojure example application running on Heroku...
Follow that Getting Started guide to get Heroku setup but when you get to the "Write Your App" section, do the following:
git clone git://github.com/seancorfield/fw1-clj.git cd fw1-clj heroku create --stack cedar git push heroku master
You should see several screens of output flash past as Heroku downloads all the dependencies needed to build and run a FW/1 application and then you should see something like this at the end:
-----> Discovering process types Procfile declares types -> web -----> Compiled slug size is 11.3MB -----> Launching... done, v4 http://some-domain-1234.herokuapp.com deployed to Heroku
Go to that URL in your browser and you should see the User Manager example application! (some-domain-1234 will be whatever domain Heroku has allocated for your web application)
After that, just edit your application, commit it, and push it up to Heroku. Heroku will update the dependencies if necessary and redeploy your application. It's that simple!
November 10, 2011 ·
Now that FW/1 is available for Clojure, you might have looked at the examples that are in the FW/1 github repo and wondered how to create your own FW/1 application from scratch.
November 08, 2011 ·
The first episode of Chas Emerick's new Clojure podcast, Mostly Lazy was published today after being recorded yesterday morning. He picked me as his first interview "victim" (joke - see his follow up blog post wherein Chas clarifies that this is about community, not journalism!) and we covered a lot of ground in half an hour. Those who know me will be familiar with my focus on CFML / ColdFusion and that comes up in the podcast - if you don't know much about CFML (or your knowledge is based on old, outdated information), you might be in for a surprise as I talk about why I've used CFML so much over the last decade! [from around 13 minutes in]
November 07, 2011 ·
After two years in the CFML world, FW/1 (Framework One) comes to Clojure!
Intended to bring the same simple, lightweight, convention-based MVC web application development that has proved so popular in the CFML world to the world of Clojure, FW/1 for Clojure is available on Clojars (0.1.0, as of April 2012). If you clone the github repo, you'll see a "user manager" example application which is a port of the same app from the CFML version of the framework. The documentation is, as always, a work in progress but covers the basic API and how to create a driver program for the framework in Clojure. More information on the rationale, approach and API of FW/1 can be found on the FW/1 (for CFML) wiki. I plan to adapt this for the Clojure version shortly...
November 02, 2011 ·
Release 0.1.0 removed the dependency on (deprecated) structmap, with rows using regular maps now. Release 0.1.1 incorporates patches from Phil Hagelberg that allow the database connection spec to be provided as a URI (either a string or an actual URI instance) as well as allowing the driver class name to be deduced from the subprotocol for common databases. It should hit Maven Central later today (0.1.0 has been up there for a couple of weeks).
November 02, 2011 ·
We track the current status of an email as: updated, valid, bouncing or invalid. An email address can be updated by a member, validated (when a member is known to have viewed an email we send them or click on a link) or bounce (detected by PowerMTA). So we have a series of email "events" and we need to handle changes of state, based on those events. Clojure makes that sort of state machine very easy.
November 01, 2011 ·
Clojure provides a nice, consistent interface for logging via clojure.tools.logging (one of the new, modular contrib libraries). It automatically wraps slf4j, commons logging, log4j and java.util.logging but you can override the implementation, if needed.