I really don't get grunt. What does it do that Makefile doesn't? As far as I can tell, it does it's thing in Javascript, which means that programmers don't have to learn Make's baroque syntax to get things done, but that also means that it has its own problems with respect to sources, targets, and rebuilding only what is necessary.

Still, everyone seems to be using it, so I knuckled down today and taught myself how to use it. I wrote a couple of helpers-- one that invokes Ruby's HAML compiler (which I prefer over the JS versions because it has a command-line flag that won't mangle Underscore templates, and over Jade because I also write Ruby and have no desire to learn Yet Another Templating Language, the payoff for which is fairly small compared to the benefit), and another that invokes Underscore's "template" function to generate template scripts and wrap them in Require.JS's define() function. So now I know how to grunt. Ung.

I also got it to compile with Require.JS, although I haven't quite gotten the Almond shim to work. Nor have I managed to compile various Less and CSS scripts into one smart compiled CSS file with Recess.

I also installed Jenkins on my dev box in its own account, and built a new job for it to check out my source code. That's all it does right now, but it's been a long time since I last used Hudson, and I'm doing it correctly this time. It's nice to see that the Git plugin works now.

Later, I built a new Mocha script around our old Zombie tests suit, written in Coffeescript. It took me a while to track down a single bug in the Zombie script (Mocha needs the asynchronous callback passed in explicitly), but by the end of the day I had Jenkins checking out the source tree, building it, running grunt's server on the ./dist file, and failing the "download the home page and assert the title is set correctly" test.

Okay, so I'm not yet printing "Hello World." It's only eight hours of effort.