Orange is my favorite color

This was my first cf.Objective() and it was a great experience. Normally I go to conferences really more for the people and the networking but bringing together so many of the thought leaders in the ColdFusion community really marks this as where an intermediate or advanced developer can come and take back actionable thoughts to their organization. I kept a running list of ideas in my notebook of specific ways to apply things I was learning to my motorsport event registration service. Here’s a few things I’m planning on attacking:

  • Look at replacing my validate() methods with Bob Silverberg’s ValidateThis framework which has centralized validation rules. One thing I’ve struggled with in centralized validation is how to handle the situation where a user and an admin have differing validation requirements depending on who is doing the editing. Bob solves this with configurable “contexts” which look promising.
  • There are a few places in my system where I am working with collections of ~100-300 objects and using Transfer to manipulate these can be slow. Peter Bell’s Iterating Business Object, which is simply a fancy wrapper for a query, is a performant way of working with collections of this size. The fact that we, in CF land, have to worry about this makes object oriented design a compromise but that’s the way it goes. It’s time to evaluate this as an option.
  • Refactor to Abstract Classes. Bob Silverberg gave a presentation on building an object oriented model which included discussion of Abstract Classes. I have used one as the basis for my Transfer decorators for some time which defines a generic populate() routine (influenced by Bob in the past) but it’s time to look at these for the remainder of my objects in an effort to reduce my total code footprint and centralize the similar code. Because I refactored from a query-based framework, my gateways and services leveraged a lot of that code and I wound up with gateways that have their own queries and services that repeatedly proxy calls to those gateways along with calls to Transfer for persisting my objects. One of the things I mentioned in my frameworks migration is starting with my original code may have been a limitation in my migration and the kind of blind cut-and-paste that is time efficient but not particularly elegant is one of those places. Now it’s time to go back and optimize.
  • ColdFusion 9 CFC performance is supposed to be substantially better – I have the beta so I need to do some head-to-head tests of Transfer on CF8 vs. CF9 as well as Transfer on CF9 vs. the built in Hibernate support. Gains here may make an IBO unnecessary.
  • Get my Trac install updated. I’m still running some ridiculous 0.9.5 version while the latest is up to 0.11.4. Getting 0.9.x Trac to install and run was such a dependency-based nightmare that I swore off touching it but that was 3+ years ago and I’ve got a new server being built to replace the hardware anyways. This older version is not only compromising the feature set but it’s also preventing me from updating my Eclipse setup to take advantage of Mylyn so I can work more from Eclipse against my outstanding tickets.
  • I sketched out the definition for a reporting overhaul we’ve been talking about for a year. I already have a pretty sophisticated CF-based reporting system that emulates a lot of what you would get out of a Crystal Report or CFREPORT but does it without requiring the end user to install a report builder tool or have any knowledge beyond the data they’re working with. I’m interested in exploring BIRT further but the user interface for generating reports must be user-friendly. Actuate’s version of BIRT has a very nice UI but costs some dollars.
  • The Writing Testable Code: Real-World TDD session by Marc Esher was a great kick in the butt to improve my unit testing. The way he took some very reasonable code and demonstrated how to refactor it to be more testable (and thus, more reliable) was eye opening despite the fact that it was simple. Sometimes the best ninja tricks are. And, he finally explained concisely how to use a mock object in testing that I grokked so it’s time to implement some of these ideas.

Presentation Slide decks

As promised, I’m publishing the slides from my presentations for any attendees who want to grab the details. Thanks for coming and be sure to fill out the CFO survey. The slides, particularly the Postgres preso, were bullet-point heavy which is not my favorite style of presentation (and when compared to say, a Marc Esher presentation, is a bit embarrassing) but when you are walking people through the features of a package, I consider the feature-list-with-commentary to be the equivalent of showing-code-with-commentary. You don’t use pictures to represent your code, now do you? :) The framework migration slides include my recommendations for surviving a migration of a code base but spare the reader my personal pain and suffering from my launch last year. You only get the actionable stuff and none of the emotional scarring! Don’t forget: build a functional equivalent at all costs!

Move over MySQL, Make Room for PostgreSQL
ColdFusion and MySQL have been best friends since MX and many developers use it as their day-to-day database. Brian made the leap to PostgreSQL in 2004 and never looked back: it has everything MySQL has plus most of the enterprise features found in Oracle, SQL Server and DB2 wrapped in an open source package with a great community and support. Come learn how these packages are more similar than different and why your next project should be backed by Postgres.

Download Slides (PDF)

Planning your migration to a Framework
Still waiting to make the jump to an object-oriented framework like Model-Glue, Mach-II or Coldbox? As the sole developer and survivor of a seven-month migration from a home-grown framework to Model-Glue, Coldspring and Transfer, Brian will share four key areas where unexpected complexity resulted in catastrophe and how you can avoid them in your own applications. This is your survival guide for moving code to a new framework.

Download Slides (PDF)

If you have any questions or feedback about my presentations, feel free to hit me up here.


  1. Aaron Greenlee said:

    on May 26, 2009 at 4:11 pm

    I was unable to attend–but–my mind went numb when I read part of your post. Did you say… No more IBO? Just populate 150 beans for 150 records and send them to the view?

    If I understand right, I need to clean up the drool from my pillow. I must be dreaming…

  2. brian said:

    on May 26, 2009 at 4:20 pm

    @Aaron – it remains to be seen. I just installed the beta today and I’m going to run tests but I’m pretty sure I can’t say anything per the NDA until the launch. It’s a promising prospect but I wouldn’t throw your IBOs out just yet…

  3. Aaron Greenlee said:

    on May 26, 2009 at 4:26 pm

    I subscribed to your feed today. If you could just post a happy or sad face in a few weeks, I’ll know what it means.

    Thanks for the post.

  4. brian said:

    on May 26, 2009 at 5:00 pm

    Wink, wink, nudge, nudge, say no more, say no more!

{ RSS feed for comments on this post}