Groovy/Grails

I have just finished building my first Grails/Groovy web application, and I have to say that it was quite enjoyable.

Croovy is a programming language built on Java, using a pre-compiler model like Objective-C. The Groovy source is parsed and compiled into Java classes that conform to the Groovy programming model.

What is great about the model is that it follows some of the design principles of truly dynamic languages. I don’t have to know the type of an object in order to manipulate it. And everything is an object. Groovy auto-boxes primitive types like integers and strings. Even code is an object, using closures. And, anything that supports the desired properties can be used in the appropriate context. For example, I can create mocked up objects using a map with bindings for the appropriate properties.

Grails adds a web application framework onto the underlying Groovy, so that is extremely simple to create your application simply by defining the properties and behaviors of your domain objects. Grails uses a model-view-controller (MVC) architecture for the application.

Application behavior is built in controller classes, each of which has closure properties that represent the actions that can be performed by that controller. Views are rendered from the controller by Groovy Server Pages (GSP), which are like JSPs that can access the Groovy objects. The dynamic content for the page rendering is provided by a map returned from the controller action. Grails automatically associates the proper page to render, based on the controller and action. Custom tags are simple to create, and tend to keep the GSPs clean.

On top of all of that, Grails uses injection for behavior encapsulated in service classes, handles all of the i18n nonsense, provides for filters, data sources, war deployment, unit and integration tests, libraries, page templates, CSS, etc.

Amistad Vacation

Thanks to the budget deficit in Connecticut, payments to support the historic sailing ship Amistad have been cut and delayed. The ship is an historical icon, but I’m not sure how I feel about paying for a bunch of folks to go sailing around the Carribean; including a controversial visit to Cuba.

Amistad story - New London Day

A brilliant speaker: Sir Ken Robinson, gives a powerful performance in this talk from TED. Robinson explores the nature of the modern school, and its focus on the creation of professors. We prioritize academic subjects according to their worth to an industrial society, and devalue the less “practical”; such as the arts, which are further prioritized.

The call to action here is to regard the various aspects of creativity as equal to mathematics or science in terms of their importance and value within the education of children. A gifted dancer should be as  prized (and graded) as the mathlete.

More Truck Woes

The battery died, and the alternator committed suicide trying to compensate. Once that was fixed, the starter gave up. Sometimes I think that I am building a new 1994 truck piece by piece. Still, at almost 220,000 miles, much better than dropping 30-50K on a new truck.

First Lego League

image2138442324.jpgSpent the day with my nephew’s robotics team. They placed in the 30s but learned a bunch.

Truck down

My truck (94 Mazda B4000) is in the shop with a broken clutch. It turns out that the slave cylinder for the hydraulic clutch is leaking. Unfortunately, this part was not designed for easy service. The slave is located inside the transmission housing, so the whole tranny needs to be removed (including the four wheel drive transfer case). So, what should be a simple repair involves pulling this four foot long assembly off the engine, and if course replacing the main seal.

I was initially feeling guilty for being a wimp, and not fixing it myself, but I can’t imagine being on my back with the tranny on my chest. It has been a long time since I did that sort if thing (I remember doing the transmission on Milton’s 51 Buick back when we were kids).

National health care

British police use the NHS database to look up info on people of interest. That fact raises the hair on my neck when thinking about government-run healthcare. Insurance companies are highly regulated around privacy of information, but the government rarely follows the rules that it makes for others.

My Facebook Experience

Update: After much waiting and gnashing of teeth, Facebook staff has reset my password (Thanks, Kimmie!). Apparently, two email messages per hour is the pain threshold that gets action :)

I have long resisted the lure of social networking sites, as they appeared to be little more than time-wasting toys. Recently, though, my thinking has been evolving. In addition, two of my nephews are in the military, and these sites are the primary way that they keep in touch with family and friends; posting pictures and status so that we can see how they are doing, and what is going on with them, and the rest of my family has done the same, so that they can stay connected to our (freakishly close) family.

So, late into the night a couple of days ago, I joined Facebook. At first, I used my ACM email address (The Association for Computing Machinery is a professional organization for computer hardware and software practitioners and researchers), which is automatically forwarded to my personal address, after filtering by Postini. I never received the confirmation email that Facebook sends to establish the identity associated with the FB account. SO, I assumed that Postini had filtered the message, and so proceeded to change the email address on the FB account to my personal address. I received the confirmation immediately, clicked the link, and I was good to go; or so I thought. Get the whole story »

Puppy pics

image2000800219.jpg

Get the whole story »

Arts Council Event Application

I am working on a prototype for an application that will allow members of the Arts & Culture Collaborative to submit information about upcoming events. The data will be used to populate brochures, etc.; and to support an online application (and eventually an iPhone app) to display events on a map, based on a starting point, and a date/timeframe.

Get the whole story »