Overall review of cf.Objective() and thoughts on OpenBD and the CF9 BOF

Now that I've finally got my day by day reflections of cf.Objective() and my presentation blogged, here is my overall review. I am also going to make extended comments on two important developments during the conference: The Open BlueDragon beta release and the CF 9 Birds of a Feather. The last one, in particular, has been gnawing at me for days, so I must chime in.

First of all, if you're a mid to senior level ColdFusion developer, you REALLY SHOULD attend this conference next year. There's no substitute having access to 280 of the top CF developers in the world in one hotel. I can't tell you all of the great conversations I've had over the those four days (including Day 0). You'll learn all sorts of new ideas you might not have considered.

I've said it before, as have others, but the sessions and speakers were top notch. Most of the ones I attended were sessions I had already seen at user group meetings or CFMeetups, or even read in FAQU, so I didn't really get that much out of a lot of them, but still picked up one or two things I might not have known. I may try to get out of my comfort zone next year, take a different strategy and try to attend sessions on things I am not as familiar with to round out my knowledge.

The conference has a developer "feel" to it. In other words, it's not as polished as a MAX or even a CFUNITED. That's great in some ways because it really makes it feel like it's developer grown, not a corporate money-making thing, and it's intimate enough that it was easy to meet up with CF developers and get into extended conversations, both ColdFusion and non-ColdFusion related. That said, there were a few things I would have liked to see a bit more "polish". At the reception on the evening of Day 0, the guide and the website (which was down for a while on Thursday) said 9pm, but it started at 8pm, so I got down there at 9:10 and they put away the food by 9:20. I felt like a horse's ass not realizing that the bar wasn't a cash bar thing. If there were signs, I didn't see them. During the conference, the A, B, C and D rooms kept shuffling. That was a bit confusing, but the rooms were fairly close to each other, so that was OK. If it had been a bigger conference area, this would have been a bigger issue.

The food was not bad. I've had better, but it wasn't bad. There was usually some food or beverage available. The only time there wasn't was during the BOFs. That was one thing I appreciated at MAX last year (although Adobe really botched publicizing the BOFs).

The hotel was nice, probably one of the best I've stayed at for a conference. I had a nice room and the Sleep Number beds were the best I've ever had in a hotel.

St. Paul was... kind of dull... of what I saw of it. I didn't get a chance to go into Minneapolis or the Mall of America (I missed Iron Man), so I might have had a better impression if I had. It was quiet, which is not a bad thing, especially during a conference.

So... next year... come to cf.Objective()! I heard there are some thoughts about expanding it to other continents. I don't know if that will happen, but this conference is a good one to make it to. If I am grading the conference, I would give it an A. It would have been an A+ if it had a tiny bit more polish, but that's still a high mark.

The rest of the blog post will focus on Open BlueDragon and the CF9 BOF, which I had both mentioned in my day 2 post.

Open BlueDragon

I still find it quite ironic that, just as Jason Delmore was going to announce an open source initiative for ColdFusion, one of the audience members had a seizure. The next day, relatively quietly, the Open BlueDragon beta was released. It will be interesting to know what the significance of both of those events will be in a year. I think Open BD has the potential to do wonderful things for the CF developer community. We'll just have to see. Competition is good. I think an open source, stable and fully featured CFML engine will finally give Adobe some good competition in this space.

If you look at the Open BD source, you'll be impressed by how clean it is. If enough ColdFusion developers look at it, I think you'll see many CF developers take to Java. It's really not that foreign when you look at the source. One thing that intrigues me with looking at the source is the possibilities it could bring. If you are finding there's a tag or function you want that doesn't exist, add it to the source! If you find some limitations to... say... CFHTTP, for example, make modifications to the source code to make it more robust! Whether you contribute that code to the project is up to you and the steering committee. The reason why I mention it is you are no longer stuck to the existing tags and functions for your CFML projects. You can add your own in a way that CFCs, UDFs and Custom Tags never could. It's food for thought.

CF9 BOF

I am still quite surprised and shocked over how the CF9 BOF focussed on AS3 support instead of hammering Adobe on the need for a ColdFusion IDE. I noticed my Day 2 post said twice that perhaps the audience took it for granted that Adobe IS working on an IDE for ColdFusion - I guess that shows how much it perturbed me. I've read several blog posts about the "divide" in the room, and I'll address that later, but I think many of them don't realize that I don't think it's what they thought it was.

Having access to ActionScript3 in ColdFusion would be a good thing, don't get me wrong, as would the ability to make CF XML compliant, but NOT at the expense of breaking compatibility. If you are building a new application, I think more robust CFSCRIPT, AS3 and XML compliance would be a GREAT thing, but NOT if it means it's a pain in the ass to port my applications to CF9. If you are advocating that, forget it. And if you are talking about Adobe choosing a path that makes it very difficult for companies to migrate existing applications to ColdFusion 9, you need to be very careful what you are suggesting. If you are a consultant, this is great for you. You don't have to live with the applications you create, and maybe those companies will hire you again to re-architect those apps, but this is fantasy talk. GET REAL. Adobe would NEVER develop a backwards incompatible CF9. For one thing, it would cut down their upgrade sales drastically, not to mention how it would affect ISVs who sell ColdFusion apps, and open source applications and frameworks.

Back to the "divide". Several bloggers have mentioned this "divide" between developers during the CF9 BOF, almost a class distinction between those developers that want a radical change in the language over those that were just asking for new features. Since I was one of the developers asking for new features, I guess that puts me on the "wrong side of the tracks". Instead of it being the "big thinkers" vs. the "lesser minded developers", I think it was a divide between those that have a love/hate relationship with the language and those that love the language and have learned to embrace, or at least work with, its limitations.

I think those that were asking for a radical change really need to decide why they are using ColdFusion in the first place. If they REALLY need this change, perhaps what they need to do is change languages. Move to Groovy, Ruby or Java. I am NOT saying there's not a valid reason for AS3 in CF. I am saying that's not where I'd start making changes in the engine.

I wish I didn't have to tell people in my presentation to be very careful when creating large arrays of objects because ColdFusion is a performance pig in that situation and that they should consider doing an array of structures. I wish that a fully OO solution would give good performance... but in CF8, it doesn't.

I am a pragmatist. I try to create well performing, stable and easily maintainable applications, but I do that using the language that I am working with, developing well structured code, and that thing between my ears. I don't try to develop ColdFusion in a way that doesn't make sense from a performance standpoint.

OK - so object creation is a pig. Rather than throw out the language, shouldn't you tell Adobe, "Please fix object creation?" Why is it necessary to overhaul the language to fix performance?

On the same discussion, I agree that CFC creation can be a pain in the ass and that we need something better. Wouldn't it be better if you could use CFSCRIPT for everything? Do we REALLY need AS3 to overhaul CFC creation? Sure, it would be nice if you had a fully object oriented scripting language in ColdFusion. However, why is it so important that we need it?

Is it envy? Do you wish you could tell your "cooler" Ruby, Python or Java developer friends that your language is fully OO, too? I wonder.

I think the need for AS3 in ColdFusion is displaced. If you want to overhaul the engine, I think your best bet is to get Adobe to create an AS3 J2EE server. Don't kill compatibility. Think of all the companies that never upgraded after CF5 because of incompatibilities between 5 and MX. Some converted to another language and never upgraded.

Also, I have to comment on the tone I am seeing. I don't appreciate those that act like they are better than others because they don't share your "vision". I live in the real world, and my world tells me you do not turn ColdFusion into something that breaks RAD and compatibility. Learn to use ColdFusion wisely, and stop trying to turn it into something it is not.

Could ColdFusion have better ties into Flex? Yes, but that's not exactly what you spent most of your time asking for. I wholeheartedly support better ties into Flex, and I think we'll see that in CF9.

Adobe should make CFSCRIPT be full-featured and ECMA compliant (but also allow it not to be), fix object creation so it's not a dog, spend some time marketing CF to the Enterprise for more than just intranet development. Done right, ColdFusion is an EXCELLENT public facing web platform, but Adobe always seems to push the intranet features like PDF, reporting and .NET integration. I wish Adobe would focus on getting more hosting providers to support CF and get CF in the classroom so it's not so damn hard to find good CF developers.

And, Adobe build a good ColdFusion IDE for goodness sake! I really don't love any of my choices for a CF IDE today, and I'd be willing to PAY for a good one.

At the very least, if not build an IDE, I'd like to see Adobe help out with CFEclipse. Mark Drew needs help building out CFEclipse, and you'd think Adobe would have a vested interest in supporting a good IDE. It seems like Dreamweaver and ColdFusion are distancing themselves from each other. Dreamweaver is certainly wanting in many respects as a CF IDE, but I still prefer it on a strictly code editing basis (in other words, the code view). If CFEclipse had </ to close tags, and not be wonky on a few things, I would probably switch to it... but CFE is still not there for me. I will say, though, that I am starting to use it more than I have before.

I'd also like to see Adobe open source Homesite+. If they aren't going to offer it anymore, open source the damn thing so that others may support it. I realize that Homesite+ only works on Windows, but I could see someone taking the bulk of it and porting it to Eclipse, writing a Cocoa version of it, or porting it to Wine/Darwine so it could run on other systems. I've not seen that blogged anywhere, nor was it mentioned during the BOF, so I thought I'd mention it here.

So, there it is... I finally got out one of my LONG blog posts. I imagine this will get a few comments. If you don't agree with me, that's great. My opinion is just that and you are entitled not to agree, but I thought it was time someone talked from the "other side of the room".

ColdFusion as a Different Type of "Glue" - cf.Objective() presentation - and real world OO

For those of you who have requested it, here is a copy of my presentation from cf.Objective().

People seemed to enjoy the presentation. The presentation deals with using ColdFusion to interact with an ERP system. The problem is complex enough that sample code is not really possible without a lot of work, so this presentation did not have code. I didn't get a lot of complaints about that because the session was detailed enough that it didn't NEED code.

One thing that I hit on during the presentation that has more of a wider scope and was also covered by Nic Tunney in his preso. My idea is simple: You really shouldn't try to make ColdFusion do things it's not good at doing.

ColdFusion bogs down when it needs to create a lot of objects. If you are retrieving a LARGE result set for read only purposes, you shouldn't create an array of objects. If a query will do, use a query. If not, use an array of structures. I will often add a getWidgetsAsQuery or getWidgetsAsArrayOfStructures service method and create a transfer object (not to be confused with Mark Mandel's Transfer) to give me the ability to create an array of structs instead of creating an array of objects. When you are dealing with a class with many methods and/or a large array, you will get a big performance hit, even in ColdFusion 8. On add/edit/deletes, a bean is well suited, but not on gateway style selects. You can try to get around that by going around it and doing your model in Java, but, to me, that doesn't seem like a great idea unless you NEED to (sorry, Andy P!), as doing that gives up what ColdFusion is best at in the first place - Rapid Application Development. Instead, work to ColdFusion's strengths would be my suggestion. I may be criticized by some as not being a "thought leader", but that's a crock of sh*t as far as I am concerned. As my slide says, I am not a Spock when it comes to being a CF developer. I'm a Scotty, and I'll take real world experience (using sound fundamentals) over theoretical constructs every day. During pure OO in ColdFusion is just that - a theoretical construct - and it fails in real world situations. Use OO where it makes sense, which is in MOST places, but don't try to use it everywhere in every situation.

Day 3 at cf.Objective()

OK. Day 3 of cf.Objective() was six days ago, but I SAID I'd blog about all three days of the conference, and daw-gone it!!! That's what I intend on doing!!!

Day 3 got off to a late start for me. The night before was a long one, and I was a little slow in getting up. It was past 9AM when I finally got out of my hotel room, still in the night before's clothes, and headed down for breakfast. I was pretty run down. The previous weekend was a long one, so I would have been tired even without the conference. Add a conference to it made me even more tired, especially by Day 3. By the way, a small conference like cf.Objective() in so many ways nicer than a conference like MAX because you're in the hotel that hosts the conference. You can go up to your room at any time and not have it become a major chore. Peter Farrell, Sean Corfield and a few other "dignitaries" were down there, too, so I didn't eat alone (well, yes I did... their table looked like a food fight had interrupted, so I sat at the next table).

After breakfast, I went back up for a shower, and by the time I was ready to come down, I figured I might as well check out, beat the rush, and get it over with. So, that meant I missed the first two sessions of the morning. The only one I really wanted to see of that was Peter Farrell's ANT session.

The first session of the day was Brian Kotek's Leveraging Code Generation to Jumpstart Your Development. I am a recent BIG fan of code generation, so I was looking forward to the discussion. I learned about Model-Glue and Reactor's code generation. I've not used either framework much, so that was interesting. Beyond that, I didn't learn very much that was new.

After that was lunch, and salmon, which was OK. You could definitely notice a lot of people had gone home already, as the dining area had the smallest crowd of the three days.

Following lunch was the session that I have to admit was one of the sessions I was looking forward to the most out of all the sessions at cf.Objective(): Mike Brunt's Clustering and Distributing ColdFusion Applications. It did not disappoint. I learned more in this session than probably any other. Setting up a ColdFusion cluster is VERY POORLY documented anywhere, and really needs someone like Mike to help fill in the holes. Mike's definitely one of the best CF server guys in the world, and I learned a lot from him in that one hour. Specifically, here's a tidbit... When he sets up a CF server, he does not hook cfusion into IIS. He uses the built in webserver. He then sets up an instance, creates a CAR file (obviously, I need to try CARs again, because I haven't heard many others having issues with them), and then creates other instances and deploys that CAR on the other instances. Once the instances are set up, he then creates the cluster as round-robin with sticky sessions. Then, he turns off the cfusion instance and sets it to manual. Again, I've never seen this mentioned anywhere else and I will do it the same from now on.

My last session of the conference was Jason Delmore's Building Hybrid Applications with ColdFusion and Java. I thought this covered a lot of ground in an hour, but was a great presentation that I really enjoyed.

After that session, I said my goodbyes, and made the next shuttle to the airport. The shuttle was a who's who of the conference. On it were five speakers - Peter Bell, Brian Rinaldi, Oguz Demirkapi, Maxim Porges and myself - and two other guys from Boston (sorry, I can't remember your names, guys, but I saw you both later in the terminal). That was an interesting ride. Brian R. talked about past cf.Objectives and I think we all agreed what a great conference it was.

I got home to Cleveland about 10:05 or so. My wife was getting ready for her surgery the next day (carpal tunnel on the right hand - she's doing OK, by the way), so after picking up my bag, I took a cab and was home by 10:40 or so.

To recover from the conference and because of my wife's surgery, I took a couple of days off and finally got back to work on Wednesday.

That's about it for Day 3. Following this post will be my preso and my overall review.

Day 2 at cf.Objective() - yeah, I know... several days late!

I am posting this review of cf.Objective() Day 2 long after the conference ended... but I wanted to complete my reviews! Besides, I was twittering all through the conference (which you can read my feed on my blog even if you aren't on Twitter) so I hope you didn't feel "wanting", waiting for more reviews. I will post a day 3 review and an overall review of the conference in subsequent posts.

I blew off the first Saturday session in order to get everything set up for the two hour ColdSpring 1337 presentation by Chris Scott. I didn't have MySQL installed on the machine I took to the conference, and my Eclipse had a ton of updates to do (I'm still a Dreamweaver guy, but that's another blog post as to why that I'll finally send out one of these days). The updates took forever over both the hotel's wireless connection and the Verizon broadband USB device work gave me (tried both at various points), particularly Aptana. I didn't need Aptana for the session, but I figured I'd update it anyway.

Knowing the sessions were well underway, I went down to the Restaurant 11 for breakfast, since I had a free pass for it, thanks to being a Priority Club member. Unfortunately, I found the breakfast in the restaurant not so great. The eggs were dry and tasteless. I only ate part of my plate and decided to head downstairs. Much to my surprise, breakfast was still out for the conference attendees, and I helped myself, and I thought it was quite a bit better.

I tried making the tail part of Terrence Ryan's "Selling Professional Development Techniques at a Hostile Shop", but he finished early. After blowing off Terrence Ryan's presentation because of the updates that took forever (I should have just tried loading the stuff down in the meeting rooms instead of in my hotel room), it turned out being for naught, as Chris' project didn't work! Nevertheless, it was still a good presentation, I did pick up a few things, and he also did a preview of Swiz (I'm not sure if that's the correct spelling).

After that presentation was lunch, which was Prime Rib. It was a little over cooked for me, but better than I've had at some other conferences.

About 1/3 of the way through lunch, I started getting nervous about my presentation. I guess that's normal, but I know the stuff I presented so dead on that I really didn't need to rehearse (in fact, my presentation WAS unrehearsed, which may or may not be a shock to those of you that attended). I mentioned that because, like in my CFMeetup version, I got pretty animated in my 1:30 presentation, especially in my "Over the wall syndrome" section! In other words, "My systems are OK. It must be YOUR problem." The presentation went REALLY well. What can I say? I took Public Speaking at Waterloo and a drama class in high school, and I'm a bit of a ham, so it comes naturally to me. For those of you interested in my presentation, I will post the presentation in the next day or so.

After that was Michael Collins from Adobe who talked about Deploying Large Scale ColdFusion Applications. I did learn of a few other deployment methods I've never tried before, and I plan to on the next ColdFusion installation I do, although he spent a lot of time on using CAR files for deployments. Honestly, and I can't say for sure if it's a bug or if it's just the way I've used them, but I've never had any luck with CAR files. Instead, I've copied over xml files from instance to instance. He showed us using EAR files, which intrigued me and I am going to try it, but I will prove or disprove my issues with CAR files first.

Next was Mark Mandel presenting on Caching in Transfer, or as Mark says, "Cayshing". :-) Mark has presented to my CFUG, and I talk to him over GTalk and Twitter from time to time, but this conference was the first time I've gotten to meet Mark. Mark's yearly trip to the States is for cf.Objective(), and meeting him is a good reason to come to this conference! He's a cool guy to hang out with! Anyway, now that I've totally kissed his butt, :-), Mark's presentation was great.

Following that was the last session of the day. I attended Peter Farrell on Mach-ii 1.6 and the direction planned for 2.0. I was very pleasantly pleased with the progress on caching, and the listeners and page-views by convention (so you don't have to specify each one if they all belong to a certain folder) is an awesome addition planned for 2.0.

After the last session, I had been invited up to Michael and Judith Dinowitz's room for Shabbos. It's a privilege to spend time with them during their holy time. Michael and Judith are well known for their contributions to the ColdFusion community, but what you might not know if you haven't met them in person is how nice they are. They are great people, and I enjoy spending time with them when I have gotten a chance.

The BOFs started at 7:30pm, and the one I went to was Vince Bonfanti's Open BlueDragon session. There were about 40 people in attendance, which was smaller than I expected, but those that were in attendance were a who's who in ColdFusion. It was interesting to see the clarity of the code within the Open BD server. The code is very clean. This project will become more important over the next couple of months as it reaches a full release, but, from what I have seen, it's already stable and fully featured.

After that, I went to the ColdFusion 9 BOF, which went a direction I hadn't expected. Several people, like Joe Reinhart, Maxim Porges, and many others made a convincing argument about adding ActionScript 3 support. I think this would be a good move, but I can't say I think we'll see this in version 9. I got the distinct impression that some of the CF team were annoyed by the suggestion. It wasn't so much that I didn't expect it to go there, but what was surprising that it stayed there as long as it did, and that a new IDE was only barely mentioned. Adam Lehman chuckled, saying that it's like the developer community already assumes that Adobe is building one. For me, there are some really big annoyances with Eclipse/CFEclipse that prevent me from using it all of the time and have kept me on the flawed but usable Dreamweaver CS3 (which isn't all that bad if you disable the design view for .cfm and .cfc files), which will be the source of an upcoming blog post.

Back to the CF9 BOF, there were some interesting things brought up. I brought up the fact that I have had issues with CAR archives, to which Tom Jordahl said, "Have you filed a bug?" I believe I have, but it's been a while. I will test again with 8.01, but I expect another failure like I had with 8. I also brought up a feature I'd like to see: auto minifying HTML and inline JavaScript and CSS. PHP has this function, and I'd like to see the same in ColdFusion. Minifying of HTML would help reduce the bandwidth involved sending rendered pages to clients, which will improve performance. Also, others talked about having full features in CFSCRIPT, which is a common theme, and a CFVIDEO tag, which would be a cool thing for rolling out YouTube like features for a site. Surprisingly, very little was discussed about the need for a ColdFusion IDE. I expected this to dominate the discussion, but it was barely mentioned. Some of the Adobe team said, "you think we are already building one". ColdFusion developers, DO NOT take this for granted. If you want a ColdFusion IDE produced by Adobe, you MUST keep applying the pressure on them!!! Adobe making a ColdFusion IDE is a business decision and they must feel like it will be in their best interests to create one.

The CF9 BOF ran very long, so it turned out being the last of the day that I attended. I then went back down to the bar for a few drinks and several good conversations, too many and too many people to mention them all.

Saturday was the day I realized that cf.Objective() was a conference not to be missed again. I will return!

Still Upcoming: Day 3, an overall review, and my presentation!

About My Session: ColdFusion As a Different Kind of "Glue"

My session is titled: ColdFusion As a Different Kind of "Glue". A lot of people both last night and today asked me exactly what is it I'm going to be talking about. Since it's not listed in the conference guide, I thought I'd try to explain it.

First of all, my topic has nothing to do with Model-Glue, nor does it talk about any framework.

Adobe markets ColdFusion a lot, maybe even mostly, towards intranet development, but that sells ColdFusion short. My talk is about using ColdFusion in large scale, public facing enterprise applications, and specifically, interacting with enterprise systems, such as an ERP, and what you'll need to know should you need to develop an application that needs to interact with such a system. If you don't know what an ERP is, check out this Wikipedia entry. My topic will be at a 10,000 foot level, but I'll talk about some specific lessons learned from the trenches.

I hope if you're at cf.Objective, you'll decide to come to my presentation. I am up against sessions by Mark Mandel, Maxim Porges and Charlie Arehart, so I have tough competition!

Day 1 at cf.Objective()

Well, it's been a good day so far at cf.Objective().

As Ray Camden blogged earlier here and here , there was a "near" announcement on a ColdFusion open source initiative. The slide didn't say that CF's going open source, but there was a bug tracker and a steering committee, among other things. It's all on Ray's blog. Unfortunately, a fellow attendee had a medical emergency right at that exact moment, and we never got to see the rest of the presentation. How ironic! I am not sure who he was, but I heard he had a seizure, and he's back at the conference and doing OK.

My sessions were interesting. I watched the Coldbox 101 presentation by Luis Majano. I have seen him doing it before, but this version was updated to 2.6. Next I attended Michael Dinowitz's session on Caching and Persistence for Performance. It was very good, and although it covered many things I already knew, there were a few things Michael covered that I'll take back to the office.

After lunch, I caught the Enterprise Development with Mach-ii session by Matt Woodward. Honestly, I probably could have skipped this one, as there wasn't anything in there I didn't know, but I went there to show a little moral support. :-) Next, I caught the second half of John Paul Ashenfelter's Agile Bootcamp, which would have been more useful had I caught the first half. My last session was Peter Bell on Software Product Lines. The session was good, although there wasn't much in there I gleaned from it I didn't already know. This was one of those slots where I could have gone to any of them and it wouldn't have been a bad choice.

Of the ones I missed, I heard good things about Nic Tunney's presentation on an Intelligent Approach to OOP in CF. I kind of wish I had been able to attend this one. It sounds like Nic talked more in detail about a couple of points I will make in my presentation tomorrow. Others that got a good buzz were Brian Kotek's Code Generation talk, Joe Reinhart's Model-Glue 3, and Laura Arguello's talk on Mate, a tag-based event driven Flex framework.

After the sessions, we started an impromptu game... we were playing "cf.Objective() skiball". It involved throwing a rubber ball between the up and down escalator and seeing how far you could make it go up before it would come down. I don't know if anyone did any better after I left, but I had gotten it up the farthest: One of my tosses reached past the seventh "rung" (only a few feet from the top).

After that, I came up for a bit. I was going to go to see Iron Man with a big gang, but they left before I came down. Instead, I had drinks and dinner with Terrence Ryan, Steve Rittler, Brian Swartzfager and Adam Crump. I came back to the bar and had more conversation about various things with Todd Sharp, Brian Swartzfager, Jennifer Larkin, Sean Corfield, Joe Reinhart, Chris Scott, Paul Marcotte and Charlie Griefer... among others. Although there was a lot of conversation around other things, including dogs and cats, we also talked about ColdFusion and one of the things I am going to talk about during tomorrow's presentation - that you shouldn't try to make ColdFusion do something it's not good at - creating large arrays of objects.

More on my presentation in my next post.

BlogCFC was created by Raymond Camden. This blog is running version 5.5.002.