Moving on to new challenges!

“The times they are a changin’.” – Bob Dylan

The last 5 years have been some of the most personally and professionally rewarding of my career. It was by no means an easy decision but I’ve decided to take the plunge and move on to the next phase of my professional life. It’s always a bittersweet experience to go through a transition of this type but as a colleague once told me “you know when it’s time.” What helps is knowing that in my new position, I’m going to get to experience some exciting and fun new challenges and meet lots of interesting new people. I’m really looking forward to it!

Many thanks to all the wonderful and talented people I’ve worked with over the past few years. I’ve learned a lot, had a LOT of fun, and got to participate in the delivery of some great and interesting products! I wish you the best in all of your future endeavors and perhaps our paths will cross again one day.

SpringOne 2GX is in the books

I returned from SpringOne 2GX in DC last week. Lots of good exciting stuff being talked about.

Adrian Colyer, CTO of VMWare, did the intro. There was a great deal of emphasis being placed on the next generation of applications. Mobile applications (big surprise) and the increase of sophistication around clients (impact of tech like HTML5, web sockets (push notification), device agnostic applications, the cloud, high performance infrastructure, big data, and more) where hot topics. Had a couple of speakers get up next and talk about Spring and Groovy/Grails. Interesting to see a little thinly-veiled (but good natured) rivalry between the two camps.

I spent a lot of time talking to people and listening to presentations in the Groovy/Grails space. I admit that over the course of the last few weeks, I’ve gone from a Groovy language semi-skeptic (dynamic typing? Egads!) to a convert. AST transformations are way cool mysterious magic and deliver A LOT of power to POGOs at no or very low cost. Groovy is also great for ad-hoc scripting. Groovy and Java can be intermixed easily. Creation of new DSLs (Domain Specific Languages) is manageable although it seems like there’s a little bit of a learning curve associated with doing it “the right way”. Oh, did I mention closures!?!  And I haven’t even mentioned the syntactic sugar Groovy provides yet.

Some nice things.

  • Native support for lists, maps, regular expression
  • Everything’s an object, primative types and object types in Java are treated differently, in Groovy they’re all the same!
  • GStrings which in spite of their funny name, make working with Strings a bit easier.
  • Lambda-like expressions and Currying. (Oh, did I mention closures!?!)

AST Transformations.

One of the cool features in the Groovy toolbox is that you can add an annotation to your source code and get a lot of built in functionality woven in at compile-time. There are several different types of transformations. A common case is the idea of object immutability. Immutable objects are ones which don’t change after initial creation. The basic properties of such objects are:

  • No methods that modify the internal state of the object.
  • The class should be final.
  • Fields should not be visible.
  • Mutable embedded objects should be guarded (read only versions or defensive copies supplied)

Doing a simple class in Java might look like this…

final class Person {
    final String name;
    final Integer age;
    private person() { } //disallow private constructor

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public getName() {
        return name;
    }

    public getAge() {
        return (age!=null ? new Integer(age) : null); //make a defensive copy
    }
}

Rather than writing Java code to implement this behavior, you can just use the @Immutable tag in groovy.

import groovy.transform.Immutable

@Immutable final class Person {
    String name
    Integer age
}

That’s it! Groovy gives you accessor methods and a contructor for free. Also, changes to Integer will be prevented and any requests for the Integer object will give you a defensive copy. Pretty nice for a single annotation.

def p = new Person("Timmy", 12)
p.age = 12   // results in groovy.lang.ReadOnlyPropertyException: Cannot set readonly property: age for class: Person

def p = new Person("Timmy", 12)
def i = p.age
i = 21  //is fine

Grails

Grails is a convention based framework that rides on top of common Spring components. It feels like it solves some of the problems also solved by Spring Roo, although they do it considerably differently. The idea of getting a reasonably configured “kick start” on new apps are common to both. Grails is a whole ecosystem and Roo is more of a utility concept. I could be wrong, but I’d bet VMWare will eventually de-emphasize one over the other since they do solve a similar set of problems. Some folks I spoke to who are using Grails seems a little lukewarm about the framework. It’s still new enough that the adoption rate may pick up over time, but in my opinion developing applications with Spring with a good dose of Groovy sprinkled in would give the benefits of Groovy with a proven application framework like Spring.

Macbook Air

I decided to take the plunge and turn in my windows desktop for a Macbook Air as my primary development machine. After reading some pros and cons, I figured I’d give it a try and so far so good. Mostly for development work, I run Eclipse (the STS variant) but also have been running XCode on a Macmini at work, so it seemed like a natural progression. I’m going to post some of my impressions here as I get more experience with it. So far, I’ve been pretty impressed. Mine has the sandy-bridge 2.0 GHz processor and 8 gigs of RAM. With the blue tooth keyboard, mouse and external monitor, it’s hard to tell I’m not working on the desktop. We’ll see if it can keep up as I start adding more projects to Eclipse and install some additional supporting tools.

Hi.

I’m going to try devoting a little bit more time to this particularly neglected neck of the internet woods.  I’ve actually had the domain for a quite awhile, so it seems natural that I put up a blog…seems pratically obligatory these days doesn’t it?  😉 Maybe you’ll find something interesting here; please let me know if you do!