Tuesday, November 24, 2009

OpenBD and CF Conferences

Below is our, OpenBD Steering Committee's, official stance on the matter that was brought up here

We feel it is more important for folks to know why they won't be seeing any OpenBD sessions at any CF conferences. While those involved with OpenBD are willing and happy to share some of the cool stuff we have done on OpenBD with the community at a conference, we'd hate to do that to the detriment of the conference by endangering a major sponsorship opportunity.

OpenBD has two distinctly different development branches. We have our standard JEE development branch which has had tremendous contributions from the community, and we have the GAE branch which has received great accolades from both inside and outside the CFML community. New Atlanta employees have been very active in the development on the GAE branch of OpenBD, and these contributions go beyond OpenBD. They've been the focus of many developers outside the CFML community and helps show CFML in a positive light to developers outside the CFML community.

As an example, Vince is creating a VFS for GAE that is a completely independent open source project (http://code.google.com/p/gaevfs/). This benefits not only OpenBD on GAE, but everyone deploying Java applications to GAE. It's a great contribution and by extension can only help reflect positively on CFML as a whole.

Remember too that it's not at all unusual for open source projects to have significant resource contributions from commercial companies. In fact, most well-known open source projects operate this way. A large contribution to Eclipse comes from IBM associates, but Eclipse is certainly not an IBM product even though it's used extensively by IBM. An important distinction is that Eclipse's license allows for commercial use, one reason why IBM is interested in Eclipse. OpenBD's license (GPLv3) does not allow for commercial redistribution and that helps ensure companies like New Atlanta or Adobe can not take and sell OpenBD or its derivatives. We do this for the protection of the community to guarantee they will always have a free fully open sourced engine for CFML development.
Edit: The title has changed since the original post, to be less confrontational and I've modified the introduction as well to try not to be confrontational. The last thing we've intended to do was be negative or against any group or individual. And inresponse to a couple private messages and one public the reason this is on my blog and not OpenBD's blog is 2 fold: I typically am the communication liason with the CF community, in tandom with Matt and sometimes Niati, and OpenBD servers more than just the CF community and we did not want to pollute that space with politics like this. We try to avoid this stuff and would have been happy to not talk about it but it was brought up so we responded.

Wednesday, November 11, 2009

FuseNG Update

A few months back I tweeted that anyone can build a framework in CF; what we need is more good software out there. Given the choice between maintaining a framework and listening to the nagging whining community or developing an open source application and listening to nagging and whining community I'll take the application. My heart is just not in FuseNG, or any other framework, and I can't hold onto the framework to make people happy or ensure it has a support person. That's just not what I want to do.

For those that thought it would never get off the ground congratulation you were right! To those that had new hope for the future of Fusebox, sorry FuseNG will not be it for you. You see over the past year my career has change drastically. I do not officially work on ColdFusion at work any longer and I never find myself in the situation where I am using Fusebox. I can not continue to develop a framework I don't use, it will stagnate. I hope someone else in Kroger will step up and take on Fusebox or revive the FuseNG fork, but that is up to the other individuals that originally looked to me for leadership of FuseNG. As much as I am sure some of you would like to leave feedback or comments I'd rather not open the potential for flames so comments are off. If you really must share your opinion feel free to email me.

Monday, September 14, 2009

OpenBD is Free as in Speech

So I'll admit to not keeping up with the blogosphere lately, I've been to busy checking out Fail Blog and related sites. But Adam Lehman Pinged me and asked for my thoughts on his recent post. What originally began as a comment turned into a little bit more than a comment length response so as the blogpshere goes sometimes I've created a blog entry instead. Since I think it is most important I will answer the second half of Adam's question first.

"Is the motivation of the OpenBD team ... [a] conscious effort to take CFML market share from Adobe?"
Nah. Hell there is a reality here right? If that was the motivation we are failing miserably since we don't present OpenBD at CF conferences (unless invited by the organizer) and we don't sponsor CF conferences. To date the only sponsoring OpenBD has done was $100 + raffle prizes at Spring BR 2008 which was largely to a PHP crowd (by design). So again just so there is no confusion we realize that by putting a "free" (as in cost) alternative out there, there will be some cannibalization. This happens but we have no interest in acquiring market share from inside the community.

"Is the motivation of the OpenBD team based in raising the quality of CFML"
"Raising the quality of CFML" is sort of awkward terminology to me. We are certainly interested in trying out concepts and putting out new/innovative features (especially as related to the cloud) but I think our bigger goal is providing an open source engine. We want to provide a fully open sourced CFML engine to those interested in Open Source software. We certainly want to bring new ideas, new ways of thinking, new avenues for CFML but raising the quality? I guess that depends on how you qualify what is meant by quality. The key here for us is concepts, and bringing new concepts to the community.

So there is my answer to your question Adam/community. I hope you accept is but I also feel like I need to add some additional commentary to the discussion of Free as in Speech v. Free as in Beer. From Adam's definition I agree I think OpenBD does straddle the lines a small bit. But I think there are a couple of things to mention to help clarify, as an example a lack of a road map. OpenBD does have a road map. Often times we do stray away from the road map and this the fault of a couple things. Sometimes contributors to OpenBD get a idea about something not on the road map and a new feature will popup over night. OpenBD contributors are passionate programmers and this is going to happen. I've come embrace this as to do anything else would be futile not to mention stifle creativity of the OpenBD team. To Andy and Alan's credit as they begin to implement features not on the road map they have done a superb job posting wiki entries and integrating feedback into the features. The second issue with OpenBD's road map is a result of poor project management rather than a conscious decision to hide what is going on. I talked with Alan about this many months ago and I stated my intent to step up and do more PM work. To date I have failed at this job, mostly due to a lack of effort and allow me to explain why (I think the explanation is telling).

I only have so much time to devote to OpenBD and lack of a road map guidance has typically been an issue brought up by the CFML community not folks outside of the community. Given my limited time to work on OpenBD I tend to spend most of my time focusing on what folks are saying outside of the CFML community as I think that is more important right now. As OpenBD matures and becomes slightly less erratic (think about the cloud development it is always innovating) we'll probably have more and more folks ask for a solid road map and that is the time when it will happen. Right now I think it is important but there are other pressing issues for me that I think will serve to grow the OpenBD community (and the greater CFML community) rather than appease the ColdFusion users looking for alternatives.

And the final topic licensing. This comes down to philosophy. As a commercial entity (Adobe, and a lesser extent Railo) and product manager (Adam specifically) I would expect these folks to have the stance that they do on licensing. That's not to say put in another position they would not have the same opinion but I think given their position wanting a sharable license makes sense. As a staunch (rabid maybe?) advocate of Open Source the opinion of the OpenBD steering committee is slightly different. What I mean by this is OpenBD is open source for the reason of wanting to be open source and we don't feel others should take that source, modify it, and NOT share it with the community. I recognize this is not a popular position with some folks but it is the position of OpenBD. At the end of the day let's be realistic OpenBD's architecture is so wildly different that it'd typically be detrimental to take anything but concepts from the engine and concepts are not covered under GPL. This brings me back to my original statements above. We certainly want to try out new things and take CFML to new places and new markets but we are interested in doing this entirely open source and keeping it and all versions of OpenBD open source. That is the intent of OpenBD.

Sunday, August 16, 2009

CFUnited Presentation Roudup

CFunited was busy for everyone involved so I have no excuse for falling behind in making blog entries as many others just as busy as I did kept up just fine. I'll only post 2 entries for CFUnited this one with all my presentations and then a second one recapping my CFUnited experience (spoiler: It kicked ass!). On with the recap!

Red Green Refactor
PDF Keynote

I was fortunate enough to be given the opportunity to present this topic 2 times at the conference. I feel like both presentations were solid and entertaining; including a reference to old Purple Pants (if you do not know, probably best not to ask :) ). Barney B was disappointed in my lack of gratuitous vulgarity, I'll attempt to not let him down next year. I got really good feedback, even testimonial that TDD does speed up development!

Fusebox Past Present Future (Busy Developers Guide to Fusebox)
PDF Keynote

This was a bit awkward given the current situation surrounding Fusebox and Myself. The first half I did my best to sell on the framework and break down some of the old myths. At about 5:55 I entered my 5th Myth: Fusebox is Dead and instead of really getting into that I made the attendees aware of the current state (at the time) and announced I was resigning. I think spent the second half of the presentation talking about FuseNG (or Fork-a-doodle-doo). Expect more entries soon surrounding FuseNG 1.0 (code named Cuddles).

Code Review and Team Dynamics
PDF Keynote

This started my 3 hour marathon of presenting. It was also a late add to the conference, I was subbing for Jake Munson who was unable to present do to person reasons. I love this presentation, I've given it a few times previous. I felt really good about my delivery and I think everyone got something out of the presentation. I think I might create a new presentation on the same vein but with more emphasis on Team Dynamics and mentoring for next years conferences. I appreciate all the positive feedback from everyone!

Busy Developers Guide to Java Part 1
PDF Keynote

This was one of those presentations with so much content it has to go perfect or you run out of time. I screwed up 2 times and ran over. I was also called Drill Sgt. and Reverend after this presentation. Apparently I was too brash haha! I felt everyone still learn a great deal about java and I got some great positive feedback as well, definitely help enable folks in this one. This was the second session I got to repeat. The second iteration I tried not to preach as much I also pulled some content that might have been too preachy. I ended right on time and had some great interaction, just like the first time. I think this session has great replay potential for future conferences.

Busy Developers Guide to Java Part 2
PDF Keynote

This was my final presentation of the 3 hour presentation marathon. I'll admit that about halfway through the Part1 session I felt ill. This continued into part 2. About half ways through one of the most embarrassing things happened, I had to excuse myself from the presentation for a moment. Luckily this was the last session of the day and everyone was very understanding and allowed me to run over the time and finish the content. I appreciate everyone's patients with me. Aside from the total misery I was in as far as how I felt I think this presentation was awesome. I got good participation from the attendees and very positive feedback from many folks. Anytime I stick around after a session to answer additional probing questions seeking to learn more is awesome.

Overall I had a blast presenting. I hope everyone attending my presentations was entertained and learned or was motivate. As long as I was able to positively affected at least one individual that is all the more I can ask for as a presenter the rest is gravy. Our community is growing and I am glad to be part of the growth. Here's to CFUnited and any other conference that facilitates collaboration and growing! Thanks Stellr for organizing, promoting and kicking ass.

Thursday, August 13, 2009

FuseNG Announced

I have a quick, and I mean quick, moment to post something exciting and sad to my blog. The creation of a new framework is official, the name: FuseNG. FuseNG (think, Fusebox Next Generation) is the official name of the fork from Fusebox 5.5.1. I can't say it was a rough decision to make. I wish I could say otherwise in a sense but it was just so depressing seeing where we were as a community as Fusebox I felt I had no choice. On the other hand I am lucky enough to have a great community behind me; that was really empowering for me and helped make the decision to fork extraordinarily simple.

I chose FuseNG as the name for a couple of reasons:
  1. Suggestions like Fork a doodle doo, while very entertaining (the first 500 times it was suggested to my by someone), do not represent what I want people to remember about the framework.
  2. I am a tad bit on the uncreative side and most of the cool names with Cold or Box are taken :)
  3. I love Star Trek TNG so doing anything that resembles one of my favorite television series is cool
  4. I feel that it reinforces a core value: FuseNG is not intended to alienate the Fusebox community with the fork. It really is about pushing the framework forward into the Next Generation of the framework. A bit of a history lesson Fusebox almost became FuseNG one other time interestingly enough I was told this after I chose the name without prior knowledge.
I will remain active on the Fusebox forums and websites, I think it is important that Fusebox exists in some capacity to provide those that may not know about our new endeavours a starting point to learning about frameworks, MVC and code generation. So with that I bid Teratech adieu.

Sunday, August 09, 2009

CFUnited Introduction to Java

For anyone attending my Java part 1 session I have checked in all of my sample code to my SVN repo:


There are 2 Eclipse projects you will want to download from the repo. I wanted to make this available ahead of time for anyone interested in following along! I'd recommend download it now and then syncing at the conference, download speeds have historically sucked at conferences.

I do not think part 2 will have enough time for much code. Since it is all about JEE environment we'll spend most of our example time exploring the ColdFusion installation (Hopefully you have this already!).

Wednesday, August 05, 2009

An Open Letter to The Custodians of the Fusebox and the Community

I feel like I have shielded the community about strife that has existed within Fusebox team too much. It's not my intent to air dirty laundry out in public but I do think I should have been more open with the community about my disapproval of how Fusebox has been run. Presently, Teratech has ownership of the Fusebox domain and the rights to the source code. While I believe Teratech sought to gain those rights with the best interest of the community at heart, I believe it is time for a change.

Fusebox has the prestigious history of being the first major ColdFusion framework and Fusebox, in all its forms, powers thousands of applications worldwide. It is imperative Fusebox continues to prosper and advance. The Fusebox Framework has stalled and is as a rudderless ship among the seas of source code. What Fusebox needs is an injection of active, willing leaders that are willing to take an active role in the evolution of the framework, with the community at the forefront of road map. A group has formed, consisting of me (Adam Haskell), Robert Burns and Tony Bommarito and Chris Weller and is willing and able to provide the energy and leadership to move the framework forward.

After a spirited conversation with Michael Smith the other night it is clear we have irrevocable differences centering around the leadership of the team behind Fusebox. Fusebox has a bright future ahead of it under the proper leadership. We have an opportunity to make Fusebox easier to use and provide tools and options to allow a developer to grow with the framework. New active leaders can focus attention on more than just the framework's code by fostering more active community involvement in documentation and tutorials. Fusebox has grown tremendously under Teratech and provides great tools for developers and I think we now have the opportunity to make the framework easy to jump into, something that can be leveraged in less than 30 minutes. We can accomplish all this and more and remain free and open in source and in policy. The license can remain Apache licensed and free for everyone (let me be clear here Teratech is NOT threatening to change this). To be clear I have no intention of changing the license from Apache either. This is my commitment to the community.

This is what I would like to see from Teratech to prevent a fork in the framework:
  1. Pass control of Fusebox Domain and Source Code to Community under the leadership and copyright of myself (Adam Haskell), Sean Corfield*, and Robert Burns
  2. Work closely with the community and be willing to provide certified Fusebox training produced by the core group
  3. Become an active member of the community, the community can only gain from Teratech's involvement
On a final note I do want to sincerely thank Teratech for what they have done, if they (and Sean Corfield and Simeon Bateman) did not step up 3 years ago and subsequently get Fusebox under the Apache license I would not being posting this today. They have empowered the community to ensure Fusebox remains a stellar framework. Teratech has affirmed their rights to the domain and to the source code under the name of Fusebox. While I respect the law in this case, there are irreconcilable differences between me, as Lead Developer of the Fusebox Framework, and Teratech. As such, I ask the community to let their voices be heard and to act quickly. Should these differences between me and Teratech remain unresolved, I'll resign from Lead Developer of the Fusebox Framework on August 12th, 2009 at 6:00PM EST. At which point in time a fork will be made available to the public and the essence of Fusebox will live on under a new banner.

*Myself, Tony, Chris and Robert all work for the same company and I felt it best that a person from the community outside of our company was on the copyright. Since the mind share of the current version of Fusebox is Sean's I felt it appropriate that he be on the copyright, we have spoken and he is in agreement.

Monday, August 03, 2009

Want to Learn OO?

Last week Ben Nadel posted an entry detailing how to win a free ticket to CFUnited, which rocks. Since I am giving 4 different presentation I didn't figure I was eligible for a free ticket. I resisted posting my anticipated topic, which is probably Living the in Cloud from Sean Corfield (which I will be missing the first time through thanks to my Fusebox presentation) or Thinking outside of the ColdFusion Box. I digress though, in reading the comment stream from Ben's entry (how you enter by the way) I've noticed a pattern that many of the respondents are wanting to learn more about OO. I find this so funny since we've all seen recently how evil OO can be. I have not really weighed in and I will, mostly, not weigh in on that subject. If you choose you would like to learn OO and have not been scared away!

Welcome to the Treadmill

Learning OO is admirable and hard, we've seen this detailed hundreds of times. The world is full folks using the big D word (depends) and many folks on the treadmill known as learning OO. You see learning OO is not a steep learning curve it is a treadmill. You feel like you are getting no where because not matter what you do you really are getting no where. Don't give up on me yet, let's think about this for a second. You don't get on a treadmill to get somewhere, if you do you are indeed a moron. You get on a treadmill to get fit, stay in shape, build stamina etc.. Learning OO does not allow you to build anything new or different than before. Don't think that once you have learned OO you will magically have a different end result. You will not. The end result will be the same, a functional application. Now how it is accomplished will be drastically different but the end result is the same. What the hell does this all mean? Well a couple of things really.

Setting Expectations

Firstly if you want to learn OO just do it. Not just learning OO but give OO it a try and accept what ever comes out*. Remember this is a treadmill, there is no end only more running. If you get tired, annoyed or are otherwise not seeing the results you want get off the treadmill. Try something else for a while, and maybe you can come back and try again later. Next time you try though remember there is no end and learn from what you did last time. Maybe this time you can push yourself harder or dig a little deeper, or maybe now you have a new pair of shoes (but let's face it shoes may help on a real treadmill but typically when I program I don't wear shoes).

Secondly, and this one is a bitch, you can not learn OO in 50 minute increments by listening to community leaders. No matter how great the presenter's OO foo is there will be so much context, back story and other situational circumstances encapsulating everything he/she divulges that you will inevitably misinterpret what he/she is saying at least 40% of the time. If you want to learn OO going to presentations like this is like drinking an energy drink; it is great for a short jittery unfocused burst of learning OO but it typically is no help in long term commitment to learning OO.

Should this discourage anyone from going to these types of presentations? Heck no, just know what to expect and know that you have to focus that energy on 1 concept at a time as you learn. You should also try to learn/attend presentations that are more focused and/or that teach critical thinking skills. While some presentation or practices will not mention anything about OO they will indeed go a very long way in enabling you to learn OO.

Red Bull Presentations

So what presentation might one visit to learn the skills to use to learn OO? You may think oh hows about your presentations on Java. Java is OO that will enable me right? Nope that'll screw you up, bigger than life. Do not go into learning any other language with the hopes of learning how to program OO in another (drastically different) language. That's like trying to kick your smoking habit by increasing the amount of alcohol you consume. Might sound good at the time but it's just gonna fuck you up more in the long run. There are good reasons to learn Java wanting to learn OO in an "OO language" is not one of them.

Design Patterns for ColdFusion that has got to be an enabler right? Nope, sorry it's an energy drink. Presentations like this are good for you if you've been on the treadmill for a bit; you know where your pulse is accelerated but you're still trying to find your rhythm. If you've been playing OO for a while but don't have that background or know a design pattern or 2 but don't quite grasp why or how these design patterns are use these types of sessions greatly help in clarifying and possibly introducing a new design pattern. The reality is it's buck shot, it's a spray of design patterns, if you try to pick them all up you are being unfocused, yep energy drink. Most design patterns warrant their own sessions to really allow the exploration of real life examples on how they solve a problem. Maybe next year we can have an evening of Design patterns with 25-30 minute BOFs (not presentations, BOFs) discussing a single design patter, and have 2 or 3 BOFs a night.

Getting the Tools to Fish

Enough with the what not to go to, you want to learn OO right? At least at first take language out of it, that's what a good enabler will do. These are learned skills that are not specific to a language. Note: I said at first sooner or later language is key to understanding what concepts to even attempt. A Presentation like Design Diagrams for CFCs and Databases is an enabler. This helps you learn the language of OO. What's the point of attending a design patterns presentation if you are not even going to entirely capture the real meaning of some of the words used? The beauty of learning the language of OO and how to design is you don't even have to code to see if your OO concepts you are learning will hold up. If you can diagram you can make a system with pretty cave drawings first and see how well it will work.

Next one of my topics Red Green Refactor. Learning how testing works and why testing produces better code really can empower a person. Beyond improving code this gives you a mechanism to learn anything. I've found, as have others, when I want to learn a new language first thing I do is figure out how to write tests. In respect to OO, what you will find is that Tests, and TDD, allow you to first hand interact with the Objects you create. Its like a UAT for your objects. The theory is if I write a testable object I've written a better object. Sometimes reality begs to differ but at best I've written very nice Objects, at worst I now have tests that will help ensure my API and functionality is the same when I go back to refactor it later. That is pretty empowering and really helps you get off that treadmill of OO for a bit and pick back up later without concern of tripping on your shoe laces.

Lastly, and admittedly this is a bit of a buck shot presentation, John Paul Ashtenfelter's Thinking Outside the CF Box will do just that bring you into a different world that forces you to think differently. I say earlier you should never learn another language with the motivation of learning a concept to apply somewhere else (don't learn Java so you can do OO in CF). That being said learning how other languages operate or how life is made simpler elsewhere can really open your eyes and help you think differently about how you solve today's problems in today's language. Learning concepts elsewhere is a good idea you just always have to make sure you temper those ideas and apply them (or not) in the proper way of the language you are working with at the time, otherwise you end up with interfaces in CFML.

Everything has it's place

I want to stress that all the presentations bring great value to the community. However, you need to know yourself and your comfort level and attend appropriately. Obviously I think learning Java is a great idea but the context/motivation for learning it is not learning OO it is learning it to leverage it in ColdFusion, or learning another skill set to increase you value in the technology community. Presentations on OO or OO concepts like design patterns help re-enforce what you are trying but unsure of, it also may provide the little extra boost of energy you need. Good luck to all that entered (hell the drawing will have happened by the time i publish this) and good luck to all that attend. If they will help please attend my sessions, I hope to see everyone at the bar sooner or later.

*I've shared this story before but my first attempt at OO was back in ColdFusion 6.0 and I cfincluded my first object on the page. I quickly learned how stupid it was to do this and that I really failed miserably at OO but I learned and got better. The key is I just tried and learned, I'm still on the treadmill.

Thursday, June 25, 2009

Railo on SVN and Team Project Sets

Finally! You can now build Railo of SVN. Unfortunately the architecture of Railo begs for some simplification but that's beside the point really I suppose. Sean Corfield has posted some directions. The directions are pretty easy to follow but thanks to Railo's architecture it requires the setup of multiple projects in eclipse, which while not over complicated it is slightly annoying. To help out the enthusiastic folks I figure I'd take this opportunity to introduce everyone to Team Project Sets in Eclipse. Team Project Sets in Eclipse make it easier to setup multiple projects and share that information with team mates or others. Whilst it does not setup as much as I'd like it does get all the projects setup and connected to SVN with a simple import. I've put a Team Project file up on my drop box account here. To use this simply download the PSF, then in Eclipse select File->Import->Team->Team Project Set. Once you import this file Eclipse will get to work connecting to SVN and downloading all the source. The only difference from Sean's directions is I placed the dependent jar's in an Eclipse project Railo-libs (which will allow for easier updates later) so when you re-add the Jars to the build path just select Add Jars instead of Add External Jars.

Sunday, June 07, 2009

Code Review and Mentoring

I've had quite a few people ask about the presentation slides for my Code Review and Mentoring presentation at cfObjective. I've been intending to post them for a while and I keep getting distracted. I think this is one of my more enjoyable topics. I feel like sometimes technical how-tos are hard to cover in under an hour but Code Reviews and mentoring you can get a good bit of ideas across in an hour. I did not get to go on my Scrum rant this time but 50 minutes is 50 minutes. Thanks to all that attended and my appologies on the delay in my slides.

Thursday, May 14, 2009

CFML Portlets

Finally the presentation has been given and the world (albeit a small world) has got its first glimpse at what we (my self and Bob Burns) have kept to ourselves for way too long. I haven't really said much recently and it's because I have been very busy getting ready for presentations at cfObjective. I don't think I mentioned Bob enough, he really was to catalyst for this project many moons ago. He rocks in so many ways I really can not describe it. The presentation slides can be downloaded here. The project documentation is a bit shallow right now, that will change, and all the information will be on the Wiki. The code is in SVN (http://svn.cfinnovate.com). I'll keep this short but I promised links on my blog so there you go. If you are interested in hearing more about CFML portlets let me know I'll oblige!

Sunday, April 26, 2009

Happy Birthday OpenBD

Depending on how you look at it OpenBD is a year old or just about a year old (So the date is not exact but tonight at cfObjective we have BOFs which is when OpenBD went legit with its open sourceness 1 year ago). It has been a crazy year with adversity and acceptance. I was reading my Steering Committee interview (posted a little over a year ago now) and wanted to comment on a particular question in there:
Looking ahead 12months, what needs to happen before we can claim Open BD a success?

I think there are multiple criterion for success and we'll discover new criteria as we move forward with this project. At this point I see our first major milestone as being a successful point, or version, release that incorporates functionality suggested by the community, voted on by the committee, executed by New Atlanta (or others), and verified/accepted by the community. In order for us to claim success I think we also need to see company adoption of Open BlueDragon, and contributions to the project from the community. Not really even code contributions but help with documentation, tutorials and evangelizing the product. Nothing less than world domination really.

I have to say after rereading my success criteria I was pretty aggressive with what needed to be accomplished. I knew who was involved though and I have to say we have been a success! We have now had 3 successful releases (1 major 2 minor), including an awesome admin console built from the ground up. We have had functionality voted on/brought up by the community (some not from the ColdFusion community either might I add!) and subsequently added to the engine. New Atlanta (while never releasing the admin which I had originally hoped they would) has been active in contributions as has Alan and Andy (not part of New Atlanta). Lastly but certainly not least we have had an amazing community the google groups are active with questions, discussions, help and advice. We have a wiki that the community has helped publish content, and we have had multiple bugs submitted to us.

I think this year we could stand to get better organized, offer a better/clearer road map and communicate what we are thinking about working on next. This is a challenge because we have super intelligent guys working on this project and sometimes when they get an idea BOOM its done before we have time to talk about. Also I think something I didn't say but the intent was there is we should (and do) need to have a big focus on growing the CFML community. We'll probably never (as the small group of folks that we are with just enough scratch to buy some stickers for all 4 of our fans at cfObjective ;) ) grow the community 200k+ in 1 year like Adobe but I'd like to think we can contribute to growth as well. Are some of the folks using OpenBD as an alternative to ColdFusion, yeah sure it is going to happen. What I'd really like to do is for every 1 person we get from inside the community I'd love to add 2 from outside the community. That is a lofty goal, and quite honestly I don't see us fulfilling it. If I set our expectations high maybe we can achieve a more realistic goal: grow the CFML community not just the OpenBD community.

That being said if you are at cfObjective and you have played with OpenBD and/or are using it find me or Matt Woodward and ask us for stickers we got 'em and I know we'd both love to hear success stories, and pains.

Thursday, April 16, 2009

CFML landscape

I had been meaning to publish this for a while but I decided to sit on it and wait for some of the dust to settle. I was eager to see exactly how many people would join the new Broadchoice Railo.

Now that Railo has finally opened up I think it is high time we take stock in the CFML landscape. What follows is how I view it with (of course) my personal twist/insight in each engine. I've tried to keep my personal commentary to a minimum, or at least hold it off till the end.

Open BlueDragon is GPLv3. It is the most open system with the most open development, though I think we could improve some. Anything that comes from OpenBD is GPLv3 or compatible. It is extensible but currently does not offer any store or other automated mechanism to add the extensions to the engine (though it is not hard and it is documented). So long as a commercial extension does not try to package and distribute the entire engine there are not problems with commercial extensions. Open BlueDragon is backed by a AW2, not New Atlanta. AW2's business model does not rely (primarily) on the CFML engine, though they do leverage it in some of their work from what I understand. When OpenBD was announced the project tried to gain confidence from the community by include some high profile names in the project steering committee (personal observation: BlueDragon had a bad name due to some old NA bad blood with Adobe and many were skeptical).

Railo is LGPL (sorry I can not remember the version I think 2 but maybe 3). It is mostly open. The core offers compelling compatibility and an astounding set of functionality. It is extensible via an app store type model where modules can be added onto the engine (I have not done enough looking to see if this is still manual or automated through the admin). Railo itself plans to make some functionality for pay. Railo the engine is backed by Railo the company and the business model s structure entirely around the Railo engine (services and product sales). Railo has positioned themselves inside the CF community as a competitor to Adobe by sponsoring CF centric events and hiring prominent figures in the CFML community.

ColdFusion is currently the most closed (in terms of source and openness to talk about what is being worked on). It is commercial and when you pay you get the whole kit and caboodle. ColdFusion can be extended through a couple of different means but not quite as tightly integrated as Railo or OpenBD at this point (the main extension point at the Java level is through CFX tags). ColdFusion is the original engine to use CFML and has gone through 2 acuisitions. It's a steady income for Adobe, they care about the CF community and do their part to keep it alive and happy (it is after all steady income for them).

To Adam Lehman's credit I think the information about CF9 has been much more open than previous releases. Don't take this comment too lightly this is a large shift for a large corporation. This comes from some one involved in many previous releases of ColdFusion and I personally see a huge difference in this release. The last couple of releases of ColdFusion have been driven heavily by the community. This is good but at the same time, the community is not full of big thinkers and typically we ask for functionality we need right now. This has resulted in stagnation of the ColdFusion platform, sure it has kept up but it has not PUSH forward much. Let's face it while Adobe (and Macromedia before them) have done a stellar job developing a great product the whole platform itself has sort of dwindled as they have focused on the language too much (not saying the platform has not grown it has but more evolutionary than revolutionary). The innovation seems to have slipped away and as a direct result we have multiple engines available to us now.

Ok now that I got my little side bar tangent out, which engine is right for you? I'm not going to make that decision for you, what is important (in Open BlueDragon team's eyes) is you have an option. We see that as possibly the most important part of being available, you have options. Each engine has compelling reasons to consider it for use. For me personally, in my development, I like the fact that I have complete control over the source code if I need/want it. I like that and that drives me towards OpenBD. For my company, we like a solid platform backed by a single entity and ColdFusion offers that to us.

Sunday, April 12, 2009

Fusebox Update

As of a little before the posting of this blog fuseboxframework.org has moved onto a new set of tools to communicate with the community, trac.fuseboxframework.org will begin redirecting shortly. Firstly, and one I am very excited about, is the move over to our new Confluence wiki. Confluence is a very powerful wiki with an amazingly easy GUI to edit entries. My hope is that this increase in ease of use over trac helps the community provide more documentation, as it seems like this has always been sore spot in Fusebox. I also found there was some pretty good documentation already on the wiki it was just hidden, hopefully the (complete, and auto updating) Tree view on the left will help expose that wonderful documentation that has been hiding. I've still got work to do to improve the wiki but I felt that since all the (known/important) content has been transferred it's time for the new wiki to launch. Feel free to check it out (and bookmark it!):


Second up, and admittedly not as smooth a transition, is Jira. I've worked with Jira for a long time at my work and I enjoy the product, though I will say I enjoy using it a lot more than setting it up. I think there are areas to improve in getting the Jira site really humming but I do feel like I've made it far enough. Tickets can now be create anonymously, as can comments, I am still working on all the spam filter stuff though. I have made an attempted to transfer all outstanding tickets that may warrant attention over to the new Jira system. Unfortunately there was no good tool to transfer from Trac to Jira so I might be missing content. You can find those tickets in a different project. If you have a ticket you want priority that is in the Old Fusebox Project I strongly suggest recreating it or sending me a note to move it (I'll be more than happy to move it). The new ticketing system can be found here:


SVN browsing is lagging behind but I do plan to stand up fisheye and I will be taking over the SVN repo in a short while. I want to thank Simeon for hosting Fusebox for such a long time, he's dedication to Open Source is really awesome. I felt it was time to take responsibility myself, I hope everyone enjoys the new tools as much as I do. I always interested in feedback, positive or constructive.

Wednesday, April 01, 2009

MXUnit ExpectedException

I'm glad to see the next minor release of MXUnit :) I'm even happier to see ExpectedException make it into the release. I'd been doing a lot of development in Java and using the latest JUnit and the expected exception annotation was so nice. When I went back to writing test cases for Fusebox I found myself avoiding writing tests that would throw errors (like testing bad paths for Fusebox parsed files). Well long story short I found myself one night debugging something in Fusebox only to find Fusebox should have been throwing an error. Since I never tested for it I never caught that Fusebox was not throwing an error. That motivated me enough to spend the 30 or so minutes it took me to write a couple test cases and add the functionality to MXUnit.

So the old way to test for an error was something like this:

<cffunction name="ensure_error_on_load_extentions_with_bad_path">
<cfset extManager.loadExtensions(getDirectoryFromPath(getCurrentTemplatePath()) & '/notthere') />
<cfset Fail("Last line should have thrown an error") />
<cfcatch type="mxunit.exception.AssertionFailedError">
<cfcatch type="fusebox.BadDirectory" />
<cfcatch type="any">
<cfset debug(cfcatch) />
<cfset fail("Bad Error")>

Now all we have to do is this:

<cffunction name="ensure_error_on_load_extentions_with_bad_path" mxunit:expectedException="fusebox.BadDirectory">
<cfset extManager.loadExtensions(getDirectoryFromPath(getCurrentTemplatePath()) & '/notthere') />

I love the feature, and I hope others enjoy it too.

Saturday, March 21, 2009

Disc Golf Anyone

As I mentioned previously I'll be speaking at cf.Objective this year and I finally booked my tickets and hotel. One of the things I love about cf.Objective is the location; Minneapolis/St. Paul has tons, I mean TONS, of Disc Golf courses. Not to mention the second most kick ass Disc Golf Shop in the US (the first is local here in Cincinnati). Any rate I love it so much I am showing up a day and a half early to go out golfing a few times. I'll be flying in on the 12th and flying out on the 17th. My hope is to get 1 or 2 courses in on the 12th and likewise on the 13th, and if I am lucky (and not too wiped out from the conference) I might sneak a course in on the 16th. If anyone in the area has suggestions for a course let me know, and if anyone is interested in going out let me know. If you've never disc golfed before and are interested come along I have plenty of discs for first timers. It's always fun to watch TSA inspect my bag of discs (they are hard enough plastic to register on the x-ray and they always ask me). Can't wait for cf.Objective!

Sunday, February 01, 2009

Speaking at cf.Objective()

Proclaimed to be the only Enterprise level conference for ColdFusion cf.Objective has really stepped it up a notch this year. I am not just saying that because I am speaking there this year I am genuinely impressed by the line-up. The schedule for the conference is amazing, it really does have some awesome presentations that many would consider Enterprise Level (Glassfish, Salesforce integration, BlazeDS integration the list goes on). This will truly be a standout year for cf.Objective(). What am I presenting on? Fusebox, or TDD? nah not for cf.Objective (besides Marc Esher has a sweet TDD preso for the conference). This year I committed to learning more about something for my enterprise level presentations. Don't get me wrong I think I could have given a great presentation on Fusebox, honestly I would kind of like to do a Fusebox BOF, but I really wanted this conference to be an opportunity for me to grow personally and present something fresh and exciting, CFML portlets. So many enterprises have or are moving to portal servers, be it Websphere, Jboss or something else and I have seen a lack of discussion about CFML being relevant in portal solutions. That's not to say it is not happening in the community just seems to be happening quietly. In addition to talking about something fresh for me I get the opportunity to present on something not so new but very close to me and that is Code Reviews and Mentoring.

Wednesday, January 28, 2009

Fusebox Enhancement: Type Converters

How many times do you have boiler plate crap in your controller to wire up a domain object(s). Even worse have you ever passed a string ID throughout your system? Type Converters to the rescue. Type Converters offer an elegant way to move Domain creation code out of your controllers (or delegated from your controller into your service). It also allows your system to focus on object interaction not string manipulation/passing. Best of all since I am fairly simple minded they are dead simple to use. You write the object creation code in a Type Converter, register the converter with Fusebox as well as the url/form parameter to convert. When Fusebox detects that url/form parameter it will call on the converter to create the Domain object. Converters could be as simple as hydrating a Bean from an ORM or more complex using caching stategies to find the bean, since Fusebox exposes it's applicationData you can even delegate to ColdSpring for most of the object creation. Any way you choose the point is it removes this logic from your controllers or various other non standard places and puts it into a standard (hopefully) well organized place.

Why are they called type converters? To understand this it's important to know where this concept comes from. As of late I've been doing a fair bit of Java development and we use a framework called Stripes for all our web based java apps. Stripes too has Type converters. Type converters make a bit more sense, semantically, in Java since one of the tasks of a type converter in Java is to take a browser response of YES and turn it into a true boolean type (humm sound sorta like a really cool dynamic language we all know and love). Type converters can be more complex in Stripes as well taking an arbitrary string and allowing you to return an object. I found this functionality extremely useful in my Java app. When I looked back at my Fusebox app I've also been pecking away at I quickly realized how adding type converters to Fusebox would allow my controllers to become even dumber and more OO (read: less string based) at the same time.

I know historically a large segment of the CFML community has not looked to Fusebox for OO capabilities. I get that this feature could have a small # of folks that will enjoy it but I felt it was a very good addition and worth a blog entry. The code is in its very early stages and is fairly rigid right now; this should change over the next couple of iterations as I play with the functionality more. Feel free to check it out and give me some feedback. I've provided an interface (fuseboxTypeConverter) for documentation sake. There is no reason to ever implement the interface as all Fusebox really cares about is that the converter has an init constructor and a convert method. The only other thing you'd need to know to start to play would be how to register the converter with Fusebox.To register the converter add this to your fusebox.xml (the fuxebox.dtd is updated so you should see it in there):

<converter class="full.path.to.Component" parameter="someId" target="Object">

Target is optional and if it is left off Fusebox will replace the current string value with the returned value from the converter. The code is available in the BER, as well as in SVN.

Got the Beta Blues?

Rightly or not the cf-talk boards have had threads where it was made known ColdFusion 9 is in beta testing. Last year Adobe announced they would be more transparent in the development, even announcing the ColdFusion advisory board. It seems like that transparency is a slow build, which I understand as nothing happens over night. I did want to take a second to pimp OpenBlueDragon and say we are working hard to be as as transparent as we can be. If you have the Beta Blues and want to share some ideas on how you thinkCFML can be made stronger, more competitive, or otherwise improve your life check out Open BlueDragon's google group and feel free to submit a ticket to our ticket system! CFML is a great language and I am confident ColdFusion 9 will deliver a great new set of functionality, I also have to say I am very impressed with how OpenBD has progressed through the months. Did you know we are considering adding cfvideoplayer and well as cfvideo? We'll talk more about this as soon as we figure out how we think it should work, until then you tell us how you think it should work. Also add it as a favorite so we can gauge the interest in this feature!

Monday, January 12, 2009

CFUnited session # 2!!

I know at least one man will be very happy to know I will be presenting Red Green Refactor at CFUnited! I gave a presentation at bFusion about TDD and MXUnit with the same title that got a lot of great feedback. This presentation will follow a similar tone as that one, only less MXUnit and more rants about BDD. I've previously ignored talking specifically to BDD as I felt (and still feel to an extent) that BDD is really just TDD done right. After the recent cfSpec announcement I got to talking to Sean Corfield about BDD and he made a comment of getting BDD over TDD. This leads me to think I should talk more about BDD (it seems to make more sense to more folks). I'm still of the mindset that BDD is little more than TDD done right but, I think BDD is starting to become more relevant as the concepts mature and evolve. I will probably focus more on some BDD concepts than I previously had planned. This should give me a chance to learn more about BDD in the process, I can't wait to give this presentation!

Sunday, January 04, 2009

Fusebox back under development

A while back, maybe September or so right after finishing up a couple of additions to Fusebox, I decided to take the rest of the year off from coding. I had done some work with MXUnit, Fusebox and OpenBD and thought, I need a break. During that time I had the opportunity to fix up one of the worse Fusebox Apps I've ever had the misfortune to lay eyes on, internally at my company. It was great to get my hands dirty in an application to test out some of the new stuff I've added to Fusebox, as well as our base application we use at work. It gave me some really good insight into things I could add to Fusebox to make life easier for No XML development, and Classic Fusebox as well. John Bliss also made a feature request the other day which I've already made some additions (this will be the topic of a future blog entry).

Before I get back to too much coding though I am working with Simeon to take over Fusebox's ticket, wiki and version control. I expect the switch to happen sometime this month, there's a bit fo coordinating that need to be done. I want to give a HUGE thanks to Viviotech for donating the VPS for all this to live on now and into the future. As part of this move to the new server I'll be changing some of the software being used for the project. Fusebox's wiki will be moving to Confluence (from Trac) and the ticket system with move to Jira (from Trac), I've not drank the git cool aid yet so for now we'll be sticking to SVN. Confluence is a very powerful wiki which I hope will improve documentation, the templates for pages is very nice and powerful and I can add work flows which might open the window for more open security for editing pages. Jira is equally as nice and quite frankly I am much more knowledgeable about these 2 products than Trac and I'll be able to do more with them than Trac. Another driving factor for Jira is the integration in Mylyn (for eclipse) and IntelliJ is bar none. Due to how Trac was configured, I was unable to integrate my IDE with Trac and it was really irking me. My hope is to sooner or later get around to looking at Bamboo as well and getting that to do some continuous builds for some other projects that I've not talked about yet.