Saturday, December 06, 2008

Vote for me! CFUnited

I completely failed to mention CFUnited posted the long awaited survey for session in 2009! Don't forget to check out the details for all the session in the PDF. I've got quite a few topics up this year, including learn Java which I am ultra stoked about folks taking interest in the underlying language of most CFML engines! Of course I could not submit topics without adding one for Fusebox and I figured I'd round it out with a BDD/TDD presentation. The select few that went to bFusion and attended my presentation there can attest to it being a great time. My only regret is I did not submit an OpenBD topic, if you want it you can submit a proposal in the survey so ask for it!!!! I love presenting and I hope I get the vote in, if you haven't filled out the survey get to it.

OpenBD v1 out. What about v2?

Open BlueDragon has released v1 and it has a great feature set. It's nice to see a good mix of essential functionality from ColdFusion and our own ideas. I'm particularly happy with CFSMTP and memcache integration and support for this.mapping. For the official release head on over to OpenBD's website.

Work does not stop at v1 though we've started a road map and we plan to continue to build that road map out, no time to rest we're just getting rolling. ColdFusion 9 is currently in beta (or so Andy Alan happily announced it was on cf-talk) and I am sure there are wildly debates going on about how to improve ColdFusion. The sad part is it's entirely behind closed doors, if you are not a one of the chosen hundreds (to say few is not fair enough I know how big these programs are) you blindly will have to wait. I don't mean to be overly critical of this process, Adobe has very good reason to do it this way. I do not fault them, it is just different than an open source project. If you are down and out about not being on the beta, or maybe just interested helping CFML evolve, head over to Open BlueDragon's google forum and start sharing ideas on how to improve CFML. CFML is a 2 way stream and we have seen features of other engines make their way to ColdFusion (and of course vice versa). Best part is if you have an idea a large group agrees on you don't have to wait weeks or months for the beta build (or a year + for a new version). OpenBD is built every night, as soon as a feature is coded it will be checked in and added to a nightly build. In the past we've gone from concept to implementation in just over 3 days! If you don't feel like heading over to the forums but would like to see a feature added feel free to leave a comment here.

Tuesday, December 02, 2008

OpenBD Status

Back in the mid November time frame a kind feller asked about the status of OpenBD, also suggesting maybe we the Steering Committee post a short little summary. Alan kindly responded and made him aware of how the project is doing, which is fantastic. I've been busy so I didn't even read the email until about 10 minutes ago. About a month ago I was also invited to speak at Mid Michigan's CFUG (note this as also my last entry b/c I have been so busy) and a similar sentiment was conveyed. I was told that OpenBD has some cool features and we really should be talking about it more. Now with these 2 bits of information bopping around in my head I decided maybe now is a good time to talk, give my personal explanation about my silence about OpenBD and a quick update about OpenBD's status.

After CFunited and the rather subtle (or not so sublte) slap in the face from Adobe, not being involed/invited to participate in the CFML advisory committee (nor even told that there would be one and this is why you are not being invited), I went back and reread many posts about OpenBD's announcement, as well as Railo's. I felt part of the problem has been the perception of OpenBD trying to steal away or otherwise fragment the ColdFusion community. I understand that sentiment due to the association with New Atlanta and I don't hold it against anyone for not involving OpenBD. I personally felt constantly coming to the community and pushing OpenBD and publishing constant updates would come off wrong, just another attempt to steal ColdFusion people yada yada yada. I care about the community a lot and I also care about every's opinion of me (to an extent) and I did not want to rub people the wrong way or give folks fodder to rally against OpenBD. This is one reason I have been fairly reserve about OpenBD on my blog. Also at the end of the day the ColdFusion/CFML community is but one community OpenBD seeks to help and it really is the least important to evangelise to, you are already using CFML!* Since the vast majority of my blog readership is ColdFusion developers I think it is a pretty bad medium for me to get the word out about OpenBD. Instead I have engaged people personally, and even evangelised at user groups outside of the ColdFusion community (anyone at bFusion might recall some very boring slides about ColdFusion the platform, those were in there to introduce people to the ColdFusion product). I think maybe I have gone too much to the extreme and now maybe OpenBD comes off as a dead project to some or a project that completely doesn't give a crap about the ColdFusion community. Neither are the case I will attempt to strike a balance of providing the appropriate amount of info in the future. Always though, if you are interesting in OpenBD please ask, I am more than happy to take time to talk to you or a group of you. Heck if you know of a user group that is not ColdFusion/CFML that might be open to seeing other technologies please send me their way or send them mine.

(*I think it is very important to be clear that when it comes to features and evolution of OpenBD I very much care about the CFML community's opinion, we understand the language/platforms and have a good idea of what can be done to improve.)

Now the fun part, the status of OpenBD. The steering committee discussion board has been quite a buzz recently and with good reason. As some folks have already found, we have finally put up a wiki and content is rapidly being added. For now the wiki is PHP, it is MediaWiki. We chose MediaWiki for a very good reason it is one of the leading open source wiki software packages today. This alone is not enough, it is also happens that the OpenBD CFML wiki that we hope to release early next year is 100% compatible with MediaWiki. This wil be an entirely open source (GPLv3) CFML wiki engine that is feature complete and compatible with MediaWiki content. It's been in the works for a long time and Alan keeps wanting to add to it instead of finalize it and release it. In the upcoming months you will also be able to find a road map of OpenBD, as well as history about the legacy of dbServlet (the original engine that has evolved into OpenBD today).

<> And one more thing. We decided on a versioning schema and we set a date for the release. You will see an official v1.0 release of Open BlueDragon by the weeks end! It was, interestingly enough, a very hard decision to label OpenBD as v1.o. The engine itself has such a legacy and many, rightfully so, felt it was an unjustice to label such a mature product as v1.0. v1.0 has significances though, OpenBD is a new product. Yes the core has a long mature legacy but the name has a legacy too, not always a positive one either. We felt v1.0 was symbolic in a way; OpenBD is a new beginning. OpenBD is on its own now and it is at v1.0, we've all moved on and do not want to dwell on the past. I can not communicate it justly how hard it was for Alan and Andy to let go of the legacy and agree to v1.0 but they did because they too see the value and significances of what v1.0 means.

Wednesday, November 05, 2008

Speaking @ Mid-Michigan CFUG

It's my pleasure to announce the first of what I hope to be many Open BlueDragon presentations I will be doing for local CF user groups. Rick contacted me a short while backing asking about a presentation and I happily accepted. I was originally (shortly after OpenBD's launch) a little hesitant to do this due to the negative stigma around OpenBD. I think much of that has past plus Railo seemed to be welcomed at UG and I'd like to expect the same courtesy for OpenBD. If your user group has an interest in OpenBD please feel free to contact me, a.haskell on Google's email service. For my limited Fusebox readership that are PHP users if you have a user group I'd love to get an opportunity to show you an open source alternative to PHP. OpenBD might serve you well with some customers that have CFML in house already (not to mention you can still use FB on it!). CFML is an incredibly powerful language and OpenBD gives you a great free alternative. I'll be presenting OpenBD to the Mid-Michigan CFUG on Nov. 11 @ 7pm.

Friday, October 31, 2008

Some lovin' for Fusebox 3

Issac has done a great service and provided a concept application to demonstrate how to move from FB3 to FB5. I won't talk about it but I wanted to make sure to get a post up about it and point you his way to check it out. I'll post a full review this weekend once I, .like you, have had a chances to poke around and look at what he is doing. His description in the post makes sense!

FB3 upgrade path

Monday, October 06, 2008

Why bother Getters & Setters

This morning I was provoked by Seth Bienek to rant a little more than Twitter would allow about getters and setters. You see this all started when Brian Rinaldi made the mostly innocent statement, "90% of the time, writing getters/setters is a stupid, annoying and utterly useless task." So my question is simple why the hell are we writing these getters and setters?

Now before you go off on your happy Groovy
has, or ColdFusion 9 will have, or Action script as implicit getters and setters kick maybe I should reword my original question to provoke some more thought. Why the hell is your code written in a way that you need useless getters and setters? This just smacks of a poor design, probably a data centric design. I know there are some valid reasons why we need them, transfer objects for over the wire communication is a great example of when you might need objects with useless getters and setters (though I would argue in this case they really aren't useless now are they??). Please stop justifying your obsession with getters and setters, chances are if you are using tons of getters and setters your design sucks. Now don't get all offended your design could be perfectly fine, but think about it objectively.

We all need to realize how much crappy code we have laying around that we think (or thought) is good code.
I mean we did pushed it into CFCs so it's good code right? Yeah not so much. Take some of those objects you have laying around and give em a good looksee. You know that one that has 25 properties and 52 methods, 25 of which are getters and 25 of which are setters. Yep that ultra important one that you spent half a day debating if it should have a DAO or a gateway. Alright now that you have your steaming pile of dung do a search on "variables." and replace it with "this.". Hey look no more useless getters and setters! I can hear you blindly complaining about encapsulation from here. Bluntly put, who gives a flying pig's ass about encapsulation here? You are getting zero, zero, value from your methods and really all your are doing is freeing yourself to rename your internal variables later, yippie. Besides, how many times have you looked at a variable and said that name sucks I want to change it? Okay so maybe a couple of times. Well good thing it was so encapsulated behind that method, it made that variable change so easy... except now the method name is different from the variable it affected. Every time you look at that object now it's like a game of guess who trying to remember what methods match to the [better named] variable. The whole point here is think about what you are doing and think about your design before you blindly make a variable private and put useless getters and setters in your code*.

At this point you're either drinking the cool aide or really wanting to punch me. Hopefully you are drinking the cool aide. Wait you are still not sold on this? Okay listen dude[t] if all your are doing is writing getters and setters and not doing anything in those getters and setters it's freaking pointless. Don't give me this whole "well what about the future" crap either. We can speculate all day about the future of our applications. As developers we love puzzles but we need to be pragmatic and ask what does the current design need. If we speculated all day we wouldn't ever get anything done, trust me I've been here unproductive and hating life. Remember "What's the simplest solution right now?" Don't introduce unnecessary complexity. Just access the variable directly or just replace it with what your object most likely is anyway...a structure.

Hopefully most of you are not satisfied with this uber structure idea. Trust me, I am not overly thrilled with it but given the choice between useless getters and setters or public variables I'll vote for public variables each time, until someone convinces me why to not. Besides for some it will save them a whole bunch of typing and they can still go to bed at night happy they are using CFCs. If you are truly interested in why I think you should not waste time on getters and setters that are useless it's because getters and setters are mostly well useless. I know there's some circular logic in there we'll work through it here in a second bear with me.

When you design your objects, and more importantly object interaction, try to avoid objects that are data consumers or providers. If the majority of your objects are data consumers or data providers then you have successfully taken something that is probably simple and best suited for something with much less OO overhead and made it complicated and less maintainable. Congratulations for getting your CFC check mark for the resume! Objects should be behavior driven, asking each other for favors. Does that mean applications I write do not have getters and setters? Hell no! I am just as guilty as the next person for writing Data Driven OO. I've got over my OO kick though I am comfortable with knowing where the rigors of OO makes sense and where they make waste, finding that balance isn't easy and its hard to teach. I'm writing this article as much as a reminder to myself to not be an idiot as I am for anyone else. Just because you have getters or setters does not mean your objects are not doing something, they just aren't doing enough probably. Sometimes getters and setters are important. For example, maybe we pop data off a stack on a get or validate data as we pass it into our object. Another example might be we went ask an object to do something but creating objects internally is bad so we provide a setter to inject the object into ours. Don't get confused with this whole encapsulation when you don't need to leverage it though. If you don't do anything that requires encapsulation don't get all complicated on me. Thanks for sticking it out to the end, enjoy the cool aide.



*As an aside in Adobe's ColdFusion each method is an inner class in Java so all of these useles getters and setters are also forcing the JVM to load bunches and bunches of useless classes as well. Generally I don't like to focus on things like this but I figured it would be a good mention for folks.

Friday, September 19, 2008

Fusebox Status

The last 2 weeks I have sat down every evening and [re]read through parts of Fusebox's core files, I also had a very energetic discussion with Team Fusebox (more on that some other time). First I have to say Sean put together on hell of a beast in Fusebox 5.5. In some aspects Sean and I have a different coding style so I feel like I would have done a couple of nit picky things differently but overall Fusebox looks to have been very well thought out and put together nicely. My main gripe is the abundant [ab]use of public parameters on the CFCs which sometimes makes it hard for me to track something down, especially since most of the time they are defined for the first time inside one of the methods of an object. Sometimes I get lost in all the parameters that are set but that's just the amount of data Fusebox is dealing with at times. The one thing that I was left without that disappointed me was unit tests. To that point I am working on some unit tests for the core files but I still do not have a good enough handle on all things Fusebox to begin to write good unit tests. The tests I have are mostly checking the skeleton right now (which works ok but I am on my TDD kick right now ;) ). With the small bad I have to say Sean left me with one of the most solid code bases I have ever seen. Some of the stuff he does in Application.cfc are pretty cool and thanks to its nicely done design I've been able to get in and make some additions already. The features I am talking about here are implemented and will be available in the BER I publish this weekend. I want to hear feedback on them, please please please let your voice be heard!

I've not tried to hide my disdain for circuit XML in Fusebox (have no fear it is going no where and will get lovin' when it needs lovin', too many of you people are masochists and like the XML). As a sign of good faith I added a feature to the XML fusebox that had always really bugged me (I'd like feedback on the good/bad side of this change). I've always hated having 15 circuit.xml files open in the editor which lead to the addition to the circuit.xml finding algorithm. Fusebox (in the BER that I plan to push sometime this weekend) will now find alias.xml or alias.xml.cfm in the path specified in Fusebox.xml.

The second feature that I added was something I really wanted to see, and I wanted it at Kroger. Fusebox now supports defining No XML circuits in fusebox.xml. What this means is you do not have to rely on Fusebox's location conventions to leverage No XML circuits. In Kroger our application layout does not match the conventions that Fusebox wanted to impose. I had a long discussion with some friends and colleagues about changing Kroger's application layout vs adding some functionality to Fusebox. In the end I felt it was a feature that would give Fusebox users a nice mesh between configuration and convention.

Like I said I plan to get this stuff into SVN this weekend so anyone interested can start playing with it. I've turned off comments on this entry so as to drive all comments to the Fusebox Group on yahoo, I am doing my best to keep the discussion in one main place.

Saturday, September 13, 2008

SQL Injection Nonsense

I know a whole gobs of blogs have been talking about the SQL injection issues and all the fun stuff recently. I don't generally get into these security discussions as they're really not my focus. Don't get me wrong it's an important subject but I feel like there are plenty of other people out there tooting this horn and presumably know a crap some more than I on the subject. I'll be honest for the last 4+ years I have worked completely inside our firewall on the intranet so security is a bit different for us. One thing I keep finding myself questioning though is how many of us are putting ourselves at risk unnecessarily? I'm not talking about not using cfqueryparam here I am talking about the datasource and the database itself. Is your CF server using an account with the appropriate security level? Lets be honest here 80% of us are using sa or some account with entirely too high of privileges for what it is being used, what a dead brained move. If you are using sa or some other admin level account stop it and you stop half the threat. You don't even need to change code just the data source in the Admin. Even if for some reason your web app needs to control the database at some crazy level create specialized datasources for that section of the application. Datasources that are used on a publicly accessible portions of a website should be restricted as much as possible.

Friday, September 12, 2008

MVCFUG gets to listen to me Rant

With the successful launch of the MVCFUG I am excited to be able to provide content for a local UG. They've asked me to present there next month about Improving Code Quality. Some of you may remember I did a BOF at cfUnited that had a great turn out and this is the presentation that I was going to present at cfDevCon. Unfortunately, cfDevCon had to be canceled but I am excited to share the content stateside with a great group of developers. As an aside this one I think is planned for the evening so folks in Cincinnati should make a trip up, it's just Miamisburg. I am not sure that they are setup to do connect so please don't expect a connect presentation out of it. As with most of my presentations this one really focuses on how we can work together and produce high quality code. We'll most likely focus on peer design and peer reviews. When I say code quality I am not talking about using a structure or queryparam (that is not what a code review is for people!). Really I am not even talking about using CFCs (correctly or otherwise), though they can play into quality. I am talking about how we can work together to create maintainable software that has high fidelity. Talking about code quality is a very passionate subject and I can't wait to share my experiences with the Miami Valley folks!

Monday, September 08, 2008

Fusebox 5.5 Documentation

I know a lot of folks have asked for more documentation for Fusebox 5.5. This morning it occurred to me that maybe, like myself at one point many months ago, folks are not aware of Sean's excellent release notes. I have to say Sean did a great job with his release notes for 5.5 and 5.5.1 (missing). These 2 PDFs that may not be indexed by google which may be why not many people are aware if them. I will try to get some of this content copied out and into the wiki over the upcoming weeks but if you have not read these docs please do so. I really think they do a good job covering Fusebox 5.5 functionality. Also please remember Jeff has now released a new book for Fusebox!

Wednesday, September 03, 2008

bFusion Marterials

I've spent a lot of time working through the hands on work for my TDD presentation at bFusion. Though the result may not seem like it as there are no materials (files) that you will need for the presentation. You will still want everything installed and running (coldfusion, eclipse, mxUnit) but you will need no additional files from me. You see I wanted a nontrivial example to work through but the problem with this is even if I did not speak at all 1.5 hours is not enough time to do a non trivial example. Besides TDD is much less about writing a test (anyone can do that) and much more the thought process. So inside of throwing you to the wolves to work hands on I will present and answer questions for around 30-40 (depends on ???s) minutes and the remainder of the time we work together to solve as much of the non trivial problem as we can. This will everyone understand what types of things we should think about when writing tests and how to work TDD into a real project. The reason the presentation jumped in amount of time is during the presentation we'll be dropping into the IDE a quite a few times to work through things together. I hope everyone will work along with me as you will get much more out of the session if you work along with me, as well as provide feedback!

Tuesday, September 02, 2008

Fusebox in Java??

A couple of weekends ago I stepped into my Java developer shoes and attended No Fluff Just Stuff, think cf.Objective() in attendance size, cfUnited Express in local feeling, and cfUnited (or SOTR) for quality of speakers. I wrote up the majority of the entry during that conference. Instead of publishing it at that time I decided to sit on it for a bit before rereading my thoughts and posting this entry. At NFJS Neil Ford talked about polyglot programming, something I myself have joined in about in the past. If you will recall polyglot programming has morphed into this thought process of using the appropriate language to complete a task. The JVM has become a very powerful platform, now supporting some 200+ languages. Most of these languages can interact with one another at some level, if not directly then they can use the the Java level. While CFML happens to be my preferred language to write most of my applications in I have to wonder should frameworks be written in CFML?

Historically we were bound to strictly CFML, putting any part of a framework for CFML apps in Java would require putting the class on the classpath, not so shared hosting friendly. Well we have all progressed and learned a thing or 2 about Java and this traditional thought process needs to evolve some. Thanks to Mark Mandel and some of his crazy cool java class loader work, even if you don't know much about class loaders, we are not bound to our traditional thoughts about how we can load java classes. We can now easily load java classes after server start up from places other than the predefined classpaths. Armed with this knowledge I can now objectively ask, should Fusebox be written in CFML or should it be written in Java (or groovy or anything else that I could consume from CFML)? Even weeks later, presumably after all the Java Kool Aid has left me system, I still am leaning towards Fuseox should be written in Java. Maybe should is a bit too string of a word there, Fusebox could benefit from being implemented, at least in part, in Java. This is not a proclamation that I am going to rewrite Fusebox into Java, remember I said I was going to think out loud when it came to Fusebox development, but I really am leaning towards writing parts of Fusebox in Java.

New CF UG in Ohio!

I was utlra stoked to see Lance tweet about his latest blog entry detailing the launch of the Miami Valley CF Usergroup. Congrats to Aaron and Lance for this accomplishment. The Greater Dayton area has some extraordinary talent and will be well served to have a proper usegroup up there. Being a Dayton native I am glad to see that market continue to grow and prosper, hell may someday I will get to move back up into that market. Until that happens I need to get off my ass and follow suite and get the Cincinnati UG up and running, Kroger has one but I've never committed to doing an external one. Congrats again gentlemen, you know I am always happy to come up and present and I will certainly make an effort to attend as much as possible, O'neil's office isn't too terribly far away from me.

Thursday, August 28, 2008

Open Source Sorta Kinda Rocks

I've been pretty busy recently not only at work but I've picked up enough stuff to keep me plenty busy outside of work with my involvement in cfConversations, mxUnit stuff, Fusebox and OpenBD. In all honesty this all has taken a bit of a toll on my blogging. I feel like I had been doing pretty well (or at least improving) with my blogging up until a little after cfUnited. As I look through my recent posts I realize I have given any blog time to one of my first public involvements, OpenBD.

The buzz has settled and we are all still standing! Adobe still exists, the CFML community as strong (dare I say stronger than ever), and we are slowly growing our community with more and more developers from other platforms with interest in CFML (wether it OpenBD or Adobe or even the future Railo OS effort). We (OpenBD) never made a big deal about it but Kirk Pepperdine a Java Champion and Server tuning wizard joined OpenBD Steering committee a couple of months back.

I think OpenBD still has a ways to go before folks in the CF community will begin to adopt it fully for use in projects. This is not to even suggest it is not a solid product as is (really it is an awesome product as it stands) but it does lack a couple of things that I feel are important for folks in the CF community. I think we'll see more adoption once we establish an official version number (and version schema/road map) and public facing documentation, I swear a wiki has been on the way for months now. I also am under the impression people are still a little weary about this whole WAR deployment, something Adobe's ColdFusion has done a very good job shielding us from for years now. Oh and finally that whole lack of a GUI for the admin might scare off some folks as well. I can happily say that folks are in one way or another working on all of the above. This is exactly why open source sorta kinda rocks. I think most people would agree Matt Woodward is an awesome developer and thanks to OpenBD you get his code running in your enterprise for the exact price of nothing, though a thanks is always appreciated. Alan Williamson is an elite, recognized, Java developer and you get his work, again, free!

If you want proof positive that OS rocks check out this thread on the OpenBD mailing list. Suggestion to alpha released jar in something like <72 hours. You just will not, generally, see this in a commercial product. Really you should not expect it since Adobe has big incentives to hide their new features until release. Thanks to the completely open nature of Open Source projects there is nothing to hide. If we are working on something I can guarantee that you, and everyone else, will know about it right quick. No need to be an exclusive beta or alpha tester, just drop by in your spare time and ask "Hey whats up?" Some enthusiastic user or developer will usually be more than happy to point something out.

Wednesday, August 20, 2008

CodlFusion 9 Feature Request

I like Mark's java Loader it's nice but I feels hacky using it. Not saying anything in it is wrong or otherwise not grade A. I just feel like I am hacking something together using it. It'd be nice if this was just built into the engine, I was thinking something like createObject("java","com.package.Class",ClassLoader). This would allow ColdFusion to search one additional classloader that I create, presumably with UrlClassloader. Now I understand that this one might be odd since, as far as I recall, this would be the first you'd ever feed a Java object into a CF method so maybe we could just pass in a URI string, createObject("java","com.package.Class","/path/to/class.class")? Anyrate my whole point here is we are seeing more and more integration with Java and there is, obviously, a need for folks to load in Jars at runtime*. Many do not have access or know how to add jars in the defined classpaths, or add classpaths to jars.


* Yes I know Shared hosts would most likely not like this but the fact of the matter is we can already do it, and Mark has made it super easy. So since we can do it we should just add it to the language instead of some external CFC.

Monday, August 18, 2008

Hello Guangzhou

I was checking out my traffic this morning and saw some folks from China had visited. I was curious where in China so I drilled down to see more details. I was thrilled when I saw I had visitors from Guangzhou. Why you ask? Well a friend of mine, well she would say co-worker, is from your Guangzhou, which I still struggle to pronounce correctly. I thought it was cool to see someone from her home town checking out my blog! I think China is a very interesting country and the culture there is fascinating, its very similar to Americans on some levels then miles away on others. Maybe someday I will get the opportunity to visit China so I can experience it myself. Before I do that I need to get a lot better at Chinese, maybe I'll pick up that software they advertise on TV. Any rate from me to you and everyone else in China, Australia, Canada, France, Germany, and many other foreign places I can only hope to visit some time in the future hello and thanks for stopping by!

Thursday, August 14, 2008

Speaking at bFusion

Bob Flynn and is once again hosting bFlex and this year has added bFusion! bFusion is an awesome 1 day FREE(!!) event at Indiana University (Bloomington Indiana) followed by a 1 day FREE event for Flex. I won't get into the sales pitch just check out the site. I do want to pimp my 2 sessions though both of which are very near and dear to me. First is Open Source CFML Engines and second being Headfirst TDD.

In my Open Source CFML session we'll explore the open source business model and take a deep dive into how open source CFML engines will help shape the future of CFML development. There is a lot more to Open Source than just the free cost aspect we'll explore this for a brief while. We'll also discuss the differences between Platform and language. I think its just as important to recognize the value of ColdFusion as it is to see the value in CFML. At the end of the session you'll walk away armed with the knowledge you need to make a conscious well informed decision if open source CFML is the right option for you!

My second session, Head First TDD, is pretty much what the title describes it to be. We'll be diving head first into how to start developing with Tests in mind. The cool part is the Head First TDD will be hands on. I won't tell you how you should do TDD you will follow me and work with others and PRACTICE TDD. In the 1.5 hour session there might MIGHT be 20 minutes worth of presentation the remainder of the time will be used to explore TDD together with, hopefully, non-trivial examples. Since this is hands-on and interactive you'll need ColdFusion (or Railo should work), Eclipse, cfEclipse and mxUnit installed. If you'd rather you can just use pulse and get my profile, which I have talked about before. You'll still need to install a CFML engine and have mxUnit's CFML code downloaded and preferably running in ColdFusion. You'll also need an open mind and bring a little extrovert along b/c you will be working with others! You'll also need to download some CF files for the hands on but the examples I have are very boring and I am trying to come up with new ones, ones I have not finished yet. Most likely that will be done the week of the bFusion as I procrastinate and have a lot on my plate. I'll post them as son as I am happy with them.

Welp that's all I have to say for bFusion, I can't wait to see you all there!

Eclipse Plugin for Fusebox (re: Marc Esher's Comment)

Marc Esher, someone I've grown to call friend over the past few months, left a question in my post yesterday inquiring if Kroger would be donating an eclipse plugin for Fusebox. What Marc knows but others do not is we have built a plugin at Kroger to help kick start project start up. The plugin is a fantastic help to driving consistency and help get a project's code base off on the right foot. The short answer to Marc is no. But I didn't want to leave that sort of comment in my comment trail as that's the short answer. The longer answer goes something like this.

The plugin we have inside Kroger is pretty Kroger specific and reaches far beyond the boundaries of what Fusebox should offer/dictate, in my opinion. Beyond that it is mixed and jumbled up with a large amount of Java web app generation as well. There is also the added complexity of competitive advantage that might keep me from being able to release it. I have not asked so I am not sure where that would take me at this point. All in all the plugin would force way too many things on developers and most would probably find it's restrictions more problematic than it is worth. That being said the concept of the plugin is rather nice and I think I maybe have even mentioned to Marc at one point about making a plugin available. It would not be the Kroger plugin but instead a separate one that I build with lessons learned from inside Kroger. In fact as I think about it what I'd really like is to create a plugin that allows additions to be added, so I can use it internally as the core/seed to Kroger's plugin and externaly folks can use it as the core for Fusebox project creation or Model-Glue generation. In all honesty the plugin does little more than what a nicely written ANT task can do, it just feels cleaner and has a slightly nicer flow to it inside Eclipse. At the end of the day I am one person though and I have to make a decision on what is worked on. Personally, as I said before, I think Fusebox itself is in a happy place right now, it is stable and has reasonably good functionality. So chances are I'll probably work on things like this before picking up the core and flopping it around too much. In short no Marc Kroger's plugin as it is today will not ever be released. After some refactoring some of it, it might be release. There's still the the whole getting permission to do it that may or may not work out.

Wednesday, August 13, 2008

Hello Team Fusebox

I've been very busy lately with many projects so my blog has been quiet, though I hope Bill Shelton, myself and Marc Esher (among others) can pimp some of this stuff we are working on soon. I did want to take a minute to make mention of the announcement that was made in the cfConversation's round table. It's now official, I am the new developer in charge of the Fusebox core files. Check out the announcement for my brief statement, also check Sean's blog (like you haven't already). Expect me to think out loud a lot on my blog about new features and changes to Fusebox in the future. I do want to thank Sean for entrusting me with the core as well as his kind words, I appreciate the opportunity.

In all honesty Fusebox is in a happy spot right now and aside from bug fixes I am not planning on touching the core much right away. I've heard some rumblings about getting full support for Fusebox 3 and I'd relly like to hear why, and see how many want this. Over time as I get more comfortable with the core files I might try to achieve full Fusebox 3 compatibility but that will take time. Intially I think I am more interested in experimenting with speeding up the core, small enhancements to the no XML features, and providing more definition to layouts (more on this soon this is very much an incomplete thought). So what do you hate about Fusebox?

Wednesday, July 23, 2008

ColdFusion 9: Server.cfc

I have been pretty quiet about ColdFusion 9, aside from a few comments here and there. I wanted to take a moment to comment on Server.cfc. I'll be blunt and say that in it's current described form I think it will be useless. First let me describe Server.cfc. Server.cfc will provide users the ability to hook into the server start up and shut down events. This will be done by creating a Server.cfc. With this you can now react to onServerStart and onServerEnd.

Sounds promising right? Here's the problem, you can have 1, yes 1, Server.cfc per ColdFusion instance. How many of us deploy 1 application per ColdFusion instance? I know we certainly do not do this, heck we generally deploy 30+ apps to one CF instance. So now if I want each application to be able to do something at start up I have to constantly add functionality to Server.cfc for each application. This seems like a monumental mistake. I'd rather see the server hooks added to Application.cfc and the server scan for Application.cfc files on start up. ColdFusion has come so far to make application self sufficient (mappings, session control, settings override) making one Server.cfc would be a huge step backwards if you ask me.

Tuesday, July 15, 2008

Improve Code Quality: Peer Design

As I work on my presentations I enjoy sharing some of my thoughts along the way. This will be the first of a series of entries that talk about concepts I plan to cover in my presentations. This is mostly a practice of thinking out loud but I think, or maybe hope, they will make a good series of blog entries. Of course, my opinions might change as I collect more and more empirical data, I'm very pragmatic, but I just have to share this knowledge pent up in my head!

What I am about to say may well change the way you think. You might think I am am a blooming idiot for saying it but I hope it helps folks improve their code's quality. Unit test do not improve your code's quality. Pause for a second and let that sink in, unit tests do not improve your code quality. They measure and verify code quality but they themselves do not improve the quality of your code. Think about it, running unit tests over and over again will not improve code's quality. I'm not intending to undervalue unit tests but it is important to realize unit tests improve the application's observed quality by ensuring properly functioning code. Unit tests do not improve your code's quality and more importantly maintainability.

Once you come to accept this fact the question you may be asking yourself is how does one improve the code's quality? Coding standards provide a good quality baseline and may serve to enforce some code quality, TDD can help improve the code quality (a node to unit tests), code reviews could certainly help improve quality, and design up front might help code quality as well. The truth is we all have different techniques to improve the quality of our code and I will discuss each one of the aforementioned topics in the future, and in my presentation.

Today I wanted to spend some time discussing peer application design. XP advocates may be keen to note I left off peer, or pair, programming from the list techniques to improve code quality. I did this with good reason, I do not like it. In my experience it is a waste of a developer, I'm not saying it is a bad technique for everyone but I am not an advocate. The reason for my lack of enthusiasm towards peer programming is I favor peer design. In my experience peer programming really turns into peer design only with lots of code being written and rewritten. Peer application design is when a group of developers/architects, not necessarily limited to only the developers of the system, have a design burn down of how the domain(s) should be modeled. It certainly does not need to be limited to the domain(s) but since at Kroger we have a fairly standard framework stack most of the design discusses focus in the domain modeling and not other aspects of an application. Peer design forces us to use our whole brain as we must first internalize our rationals then verbalize, and often times defend, our rationale with others. At the same time, or near same time, we are internalizing others' concepts and mapping them to our own. Peer design has the added benefit of cross training, since we are including peers that are not planned developers on the system in design. Peer designs, just like their big brother JADs, do not generally just happen; they need coordinated and a strong facilitator ensuring the flow and guiding decisions in the correct direction. This is not to say you can not do a quick peer design with one other person at the bar on a Friday night but generally they are slightly more organized than that! Generally the output of a peer design session(s) is some sort of map for development. The map could be as simple as a cave drawing on a bar napkin or as sophisticated as a set UML diagrams. The diagrams, whatever form they come in, are much easier to change and morph than large chunks of code that you will get with peer programming. In a future entry I will talk about code reviews these diagrams can be very important in code reviews.

Friday, July 11, 2008

Hello Adobe Feeds!

I'm glad to get aggregated by MXNA err no Adobe feeds. Hopefully it will expose the blog to some new readership! Being on the Steering Commitee for Open BlueDargon I was thankful to see Adobe still pick me up. I love ColdFusion and I love CFML even more, I think there is room for both open source and commercial, though I wish Adobe would open source ColdFusion I suppose we can't have everything. Right before Adobe Feeds started to aggregate my blog I had an excellent post about the cost of ColdFusion and justifications for that cost. Some have complained about my misleading title but it really is all about how ColdFusion's platform IS worth the price, for some people.

Wednesday, July 09, 2008

ColdFusion Costs too Much

That's a pretty common phrase I hear from folks looking at ColdFusion for the first time. Even scarier I hear it from folks inside the community! Don't get me wrong I love open source and I think there is plenty of room for open source CFML engines/platforms but when it comes down to it ColdFusion's platform for what it offers is a great deal. I get tired of hearing CFML developers tout the RAD of ColdFusion this used to be an okay mostly valid sell but the market has changed yet CFML developers montra hasn't. With a good framework and IDE Java can be pretty RAD these days, besides no one has ever quantfiably proved how much faster ColdFusion, or CFML, really is for development. What follows is an exceprt of a response I sent to a certain "journalist" when confronted about Open Bluedragon, he opened stating ColdFusion's (Standard) price at a mere 1300 was "unbeleivable":
... I'll be the first one to pimp the open source offerings but I also think there are some misconceptions of costs for ColdFusion. If you consider what the Adobe ColdFusion platform offers this [$1300 price tag] is pretty reasonable. What you or anyone needs to ask themselves, especially now with other CFML engines is, "Does the ColdFusion Platform offer me the features I need for the cost?" It seems more and more folks answer no to this but let's think about this for a second. Can Java produce a PDF? Certainly. You can use Java libraries and generate a PDF just fine. Without a bit of work though and a couple layers of abstraction generating an HTML equivelent and a PDF is tedious and can be costly when supporting an app long term. ColdFusion offers you a very simple and elegant way of generating a PDF based off purely the HTML you are already generating. Any pure Java shop can do this too but they need to either modify some open source HTML parses, write thier own, or purchase icesoft's parser (cost: nearly on par w/Adobe's ColdFusion). So with this feature alone all costs, never mind productivity gains of CFML, are nearly negated. Also consider JMS integration. Once again I could develop a nice abstraction layer in Java no problem but then my team is responsible for integration testing, regression testing, and support for this abstraction layer. Not nearly the same if I just use ColdFusion and it's JMS & ActiveMQ integration points. Testing is a real cost and relying on a commercial product is a huge cost saver. A final example to consider is ajax. Have you ever looked at how much a pain it is to refactor from ExtJS 1.0 -> X.X, or jQuery with the UI widgets? The api for ExtJs (and other js libraries) constantly changes and backwards compatibility is becoming a cost barrier to upgrading on large applications. By using ColdFusion's ajax tags you never have to pay a developer to upgrade your codebase to work with the latest version of ExtJS. Adobe is taking care of that for you behind the scenes. Now lets bring this full circle, these are only 3 examples I thought of off the top of my head, there are numerous other cost saving and value adds in the ColdFusion platform so the question really is are these worth it to you? Maybe they are (we certainly take advantage of some of these at my company) maybe they are not. If all you are generally interested in CFML and not the ColdFusion platform, great there are some awesome alternatives now through some open source offerings like OpenBD, Railo and, to a lesser extent, Smith Project. Each OS offering offers their own platform stuff, Open BD for example has a plugin for JMS. Railo, for example, has some very cool integration with Amazon's S3. ... ColdFusion's price point is very valid in many instances for many folks. I am an advocate for open source CFML, no doubt, but I am also an advocate for ColdFusion as it has solved many problems for the company I work for and done it at a huge cost savings.
Hopefully this spurs some good discussion and ideas on how ColdFusion is a money saver and not just from a RAD standpoint.

Saturday, July 05, 2008

Pulse2 now with mxUnit

In the past I've blogged about Pulse2 and I have to say it really has grown on me over the previous month or so that I have been using it. I've decided the $6/month is worth the investment as it does save me time and hassle as well as preconfiguring some of the "extra" plug-ins. On the free side though Pulse2's catalog has grown and that includes listening to my previous post and adding mxUnit for all the CFML developers out there! Finally, with this plug-in added I have posted a public profile for anyone that wants to give eclipse a try but have been intimidated by eclipse setup. Check out Pulse2 and use my public profile. Everything you'll want is packaged in there (add Aptana with a freelance account for an ever better development experience). Pulse2 is an awesome tool and something I definitely plan to demo very briefly in my Be Lazy, Use Ant session at cfdevcon. Don't wait for me to demo it though it is dog simple check it out today:
Check out Pulse

Sunday, June 29, 2008

Speaking at cfDevCon

Its an odd place to start my presentation tour (or I hope it becomes a tour) but I plan on submitting presentations to many conferences moving forward and cfDevCon will be my first presentation stop, though I did lead a BOF at cfunited. My topics, at cfDevCon, will not get you any further along with using your favorite framework and chances are you won't see a whole bunch of cool CFML code snippets either. I figure there are plenty others out there that can do that better than me, maybe in the future I will consider some of those topics. Instead I'll enjoy talking about topics that are applicable across languages, and really thats where my core focus lies these days. In my current role my programming has taken a back seat to my mentoring and training and honestly I spend some of my time with projects that are not even CFML based projects. Many of the concepts I will be presenting on are 100% applicable there too!

My first session will focus on automation, I am all about being lazy and ANT is a perfect way to enable my laziness. This session first started out as setting up a developer IDE and I quickly learned that each person has thier own way of doing things and trying to show just one way of doing it will leave attendees with only a specific solution that works well for me and my company. Instead I plan to focus more on how to use ANT as a tool to not only automate redundant tasks like builds and deploys, but how it can be in integral part of your daily development life cycle. We'll cover things like test driven development and working with mxUnit's ant tasks. We'll touch on how to attach builders to eclipse projects, how to write ANT tasks to run tests, and, inspired by Marc Esher, a good overview of ANT's general syntax. There is a lot of content to cover and it will be fast paced and example heavy. We'll dip into CFML for a short bit to show off mxUnit but most of the examples will be ANT scripts!

The second presentation (yep I have 2 at cfDevcon) will be all about improving code quality. We'll spend a good amount of time talking about code reviews, the different types, how to introduce them in your company and how to be success with conducting code reviews. Code reviews are only one aspect of quality improvement, additionally we'll take a look at mentoring (and how mentoring and code reviews intersect) and JAD sessions. Improving quality is 100% language agnostic, if you have Flex, Java, CFML or .Net background come and check it out, everyone can learn something. If you are already successful with code reviews or mentoring come and share your ideas we'll have plenty discussion points so everyone can share! I'm really looking forward to sharing my success and failures with folks through my presentations, if anyone ever has topics they would like covered let me know I am always looking for other ideas for exciting topics to explore.

Friday, June 20, 2008

cfUnited BoF

I wanted to thank everyone that attended my BOF at cfunited. I had a great time sharing my experiences and leading a GREAT conversation with all of my peers. The BOF was only a success thanks to the endless participation from the audience. If you enjoyed the BOF you might be interested to know I have a tentative plan to present this type of material at some conferences in the future (maybe even cfunited 09???). Nothing for sure yet but I am working on the possibility. As promised here is the mind map. I will try to capture some of the conversation and more on this Mind map in future posts, maybe when I am running on more than 4.5 hours of sleep!!
If you click the image it will get bigger.

Sunday, June 15, 2008

cfConversations is a Go!

Last Friday night I had the opportunity to take part in the next chapter of CFML podcast history, taking part in the first cfConversations podcast. Lead by Brian Meloche and joined by Rick Mason, Aaron West and Jeff Coughlin, we had an hour long round table about all the happenings in the CFML world recently. Admittedly it started off a little slow but I think we really got a good stride after just a short while. I learned something valuable in this first round table, think about what I am going to say and write down notes. A couple of times I found myself wondering to much when I talked. I look forward to working with Brian more in the future on cfConversations round tables as well as interviews. While we're discussing interviews we have quite a few lined up to take place at cfunited including Mark Drew, Sean Corfield, Adam Lehman, Ray Camden, Peter Bell and many others maybe even including YOU. That's right you, if you plan to be at cfunited and would be willing to sit down and talk for 15 minutes or so leave a comment with some contact information.

Saturday, June 14, 2008

Polyglot Programming and CFML Developers

For those that do not know what Polyglot Programming is allow me to introduce you to the term! It really sounds fancy but when it comes right down to it Polyglot Programming is the utilization of multiple languages to complete a task. We all are more or less polyglot programmers; using CFML, ECMAScript (Javascript or Actionscript), CSS, HTML, and (some of us) Flex/Flash. So for this discussion we'll refine Polyglot Programming down to using multiple server side languages to accomplish a task (as this is the really discussion going on most of the time these days). I think ever since CFML was available on the Java platform many of us began to be partial polyglots (I know this literally would mean we are each programs written in multiple languages but I'm going to use it to describe ourselves instead). As a point of reference one of my first projects I worked on with ColdFusion MX I used Java to zip content. The reason I say partial polyglots is I didn't really write Java I just used CFML to execute a couple of Java objects. Looking beyond a CFML developer barely learning enough Java to dip down into the Java layer, what is the typical growth path of a CFML developer?

CFML is such a high level language the only level above CFML right now would be frameworks, or a custom DSL. I get the feeling that frameworks is where the average CFML developer interested in growing spends his/her time, learning frameworks. This is a good practice as one can learn a great deal from frameworks, not to mention the benefit of using frameworks in many instances. The problem I see here is the average CFML developer is not learning CFML's foundational language, Java*, and not really wandering that far from their comfort zone. Sure frameworks might force you to learn a new technique or push you into a new paradigm but you are still working in CFML. ColdFusion has done a spectacular job hiding the java underpinning behind a curtain. While that lowers the barrier to entry, which is a good thing to grow a community, I think it is a shame too. A CFML developer can blissfully develop code without ever understanding how it is their application works. On one side that's exactly what one would want to look for in a platform. From another perspective, when it comes to developer growth and incentive to grow, this may not be the best thing. Where is the incentive to learn how a war is deployed to a app server? How many CFML developers know what a context root is or how it might affect their application if the context root is not /. I am going to guess the average CFML developer may not even be familiar with what a many of the terms I just talked about are, and even the terms that sound familiar many may not truly understand how they fit together. Without dipping a little further into Java the typical CFML developer can not realize the true power of polyglot programming that can be leveraged on the Java platform. A superb example of someone that has found, for him, a great balance of polyglot programming is Andy Powell. His presentation at cf.O outlined how his projects leveraged Java (with Hibernate and Spring) and CFML. At Kroger we use Spring Security in all of our [new] CFML application as well as an ever growing library of Java classes that allow us to share IP with the Java side of the house. Another good example of polyglot programming, with an added bonus of a lower barrier to entry, would be cf_groovy, Barney Boisvert's project. I've not had the time to look into much yet but the few blog entries Barney has posted have been fascinating. If you are interested in learning more about Java and the JEE environment that most CFML engines run in but don't know where to start leave a comment/question. Let me know if you will be at cfUnited. If there is enough interest I will setup a late night pow-wow in the Lafayette room to introduce folks to Java/JEE.

* maybe .Net for those on BD.Net

Sunday, June 08, 2008

OpenBD, The Comminity and How I See it

This is a direct response to Andy Powell's blog entry but serves as a general statement of my opinions on the matter as well. I understand my comments might be perceived differently due to the fact that I am on the Steering Committee and I appreciate that but I hope folks can look past that for a second and read my rather long but thought out commentary. Besides these comments are mine and certainly do not reflect that of what others on the Steering Committee think.

OpenBD has been loosing momentum since the day it was announced w/ speculation and bad blood strewn about. It really sucks Vince is the way he is and that OpenBD suffers from the New Altanta stigma. The migration stuff is a gimmik, a shitty one but a gimmik non the less, to sell licenses. Alan is not part of New Atlanta and licenses BlueDragon to NA. If Vince was truly converting and not selling BD licenses wouldn't you think Alan would be a bit pissed off ? After all if Vince is converting and not selling licenses Alan is not making as much money. Is Vince eating away at Adobe's license sales? Probably not much he's claimed to be focusing on folks still on cf5 that have "abandoned the platform." Am I just being fed a spoonful of crap or the truth I don't know. I tend to believe him, maybe because I want to but also because I work for a large enterprise that nearly signed a deal with New Altanta a few years back and had nearly abandoned the platform (we were still on 5 at the time) and I know plenty other large companies in the same boat.

There have been some bad misconceptions and double standards applied the OpenBD project to get OpenBD to where it is. For example Adam Lehman says OpenBD only served to eat away at Adobe's customer base. Folks agreed and disliked OpenBD claiming OpenBD does not want to grow the community it simply wants to cannibalize it. While I never thought this was true based on the NA stigma I can understand where that was coming from. Then Alan is shone in a light by Sean (slightly out of context but a fair depiction of the conversation really) that says Alan doesn't care about the CF community and wants to focus on the Java community. All of the sudden OpenBD is looked upon negatively b/c it doesn't care about the community. Seems like a hard place to win honestly. If OpenBD focuses on the community its cannibalism if OpenBD doesn't focus on the community it doesn't care about the community and is against it.

As for Railo being more open, I vow right now to each and everyone that reads my blog and/or comments on the various boards I will be open and honest about what OpenBD is doing and make sure it is communicated. I'll also do my best to help folks differentiate between my own words and those that are coming from the steering committee. I have had an open dialog with Adam Lehman on email in the past and I plan to continue to seek his honest feed back in private as long as he is willing to listen. I'm also always willing to listen to anyone in the community I don't care if you are a high profile person like Joe or Sean or a lurker that has never spoken out before like Chris Weller. If you have an opinion and want to share it I am listening.

What I think needs to happen. I think Vince needs to donate NA's Admin to the project as a sign of good will. I also think the comunity needs to realize that Alan's target is not the CF community and never was, that is why folks like Sean, Matt and Mark were on the committee to ensure the community was fairly represented. I think Adobe should continue being Adobe selling an awesome product and evangelizing ColdFusion. Finally I think OpenBD needs to refine the license, I'd love to see Alan step up to the plate and release under LGPL as well. Will that happen? Not Likely, but a Classpath exception would be a step in the right direction. OpenBD is not New Atlanta and I hope New Altanta drops BlueDragon JEE all together and only focuses on selling support for OpenBD.

In an effort to be completely honest, had I know Railo was going open source I may have stayed out of Open BlueDragon. I didn't know and now I made a commitment. My commitment was not only to OpenBD but to the community to make sure we were represented appropriately. I've listened so far and brought up points like better licensing and concerns about perception. Posts like Andy's are rough, they make me doubt if I am doing the right thing but at the end of the day I think I am and I appreciate the open and honest feedback.

Like I said else where OpenBD should succeed or fail on it's technical merits not some emotional attachments. Technically its a good solid engine with plenty of potential and I would hate to see the OS offerings dwindle because some folks can not look past the history of New Atlanta's BlueDragon and look forward to the future of what OpenBD can offer.

Saturday, June 07, 2008

Railo going Open source

Sorry I am late to the blogging party on this one. I've been so busy with work and OpenBD I haven't had a chance to welcome Railo to the open source community thought really they only announced it they have not "arrived" yet). Being big fan of JBoss, though I will say that has waned a bit after Redhat took over, I am really glad to see them teaming up together. This gives a great backing for Railo and for the first time ever we have more open source CFML engines than closed source engines. I smell standardizations on the horizon, course I have a horrible sense of smell so it might be something else.

Wednesday, June 04, 2008

cfunited fun

What are you looking forward to most?
Hanging out with folks in the community. And mostly meeting new folks in the community.

Which speaker will most likely end up on your camera?
I don't take many pictures and not a big fan of photography but if there is one possibility it might be Mark Drew after visiting the Tattoo place.

What do you plan to do outside conference time? (Clubbing/Bar Hopping, DC Tour, DC dinner cruise, Museum, Fine dining, Live Band shows, etc.)
See above.

Fill in the blank: I will mainly be around the bar booth.

Do you have a new project you are working on and will reveal it at CFUnited?
Revealed no but I will be talking about OpenBD.



Thursday, May 29, 2008

Leading the OpenBD BOF

I was originally slated to lead the Improving Quality through Code Review and Mentoring. A twist of fate happened and OpenBD was pitted at the same time in another BOF, originally lead by Vince. Unfortunately Vince from New Atlanta will not be able to make the Open BlueDragon BOF. So now Mark Drew has agreed to take over my original BOF so I can lead the OpenBD BOF! Long and the short. I am leading the Open BlueDragon BOF at cfUnited (with plenty of help from Matt Woodward and Sean Corfield of course)! Leave comments on what you would like to see/discuss in that BOF!

Thursday, May 22, 2008

JavaOne Treasures

My company sent 6 folks to JavaOne and today was the first of many recap/regurgitation of JavaOne goodness. Mylyn a tool the CFML community has already been introduced to by some fellow bloggers is, of course, making a big splash in the Java community as well. Since I have had a large amount of experience with it I got the chance to help present the plugin to everyone, which was fun to see it get a bigger response. Next my Java counter part talked about JSF and blabbered a bit about the JSF2.0 spec, hype or real we'll see I suppose.

The next recap was of a tool that everyone, EVERYONE, should have in their toolbelt. The tool is best used with Java 6 but can hook in with Java 5 and even 1.4 a little. The tool is free; VisualVM and can, with Java 6, visually show you all sorts of stats on what is running in your JVM. It can get down to how many of what classes you have in memory. Its also plugable and they already have a cool plugin to show a histogram of your GC which can be very interesting! The tool is at RC1 right now and is a must for anyone doing any sort of development on the Java platform.

Next Hot topics/Buzz was presented. It was cool to see Flex get a mention, gave me a chance to pimp ColdFusion as well as talk about BlazeDS. Groovy was of course brought up and we had a short discussion of it. In the same light Ruby and other dynamic languages (funny not CFML) were brought interesting missing from the list was Scala which I thought had some buzz at JavaOne from other accounts. Selenium got a mention and seems to be growing as an accepted tool in many communities now, again a good thing to see. I was really hoping JavaFX would get more than a 5 second mention but I expect much more about JavaFX over the next couple of months, again vapor or reality...we'll see. Finally 2 debugging tools were talked about Fiddler, and Omniscient. Omniscient looks particularly interesting as it essentially records your applications stacks and allows you to replay something to allow you to do intensive root cuase analysis on a bug, very cool stuff.

Overall it was an excellent recap with loads of good tips and information and I am really looking forward to playing with Omniscient and VisualVM as I start doing more and more with OpenBD.

Saturday, May 17, 2008

Open BD Plugin Architecture

Alan Williamson said he needed to document and blog about the plugin architecture of Open BlueDragon, after all it is his baby. Being the huge proponent of it, I decided to go poke around the source and figure some of this out on my own. What follows is my interpretation of the plugin architecture after messing with it this this morning. I'm sure Alan will have better documentation in the wiki.

Firstly since I didn't really feel like writing a hello world function I took the code Andrew Scott posted the other day and turned it into a plugin. Since the plugin stuff has not got much press Andrew did what he knew he could do and added his function to the core, something that has gotten some criticism already. This type of functionality is perfect for the plugin architecture so i figured it would be perfect for my example. In an effort to keep this entry from getting too long I am going to focus in on the com.bluedragon.plugin package and how to use the plugin architecture and I will leave out how to create a tag or method till later. Besides others have already figured it out so you can too right?

The Plugin package contains only 2 concrete classes and for now we only need to worry about one of them, and an interface; the PluginManager (concrete) and Plugin (interface). We'll be using the PluginManager to register our functions and tags, on a side note it looks like this is also Java's interface to CFCs. On start up the PluginManager is called and it uses a node in bluedragon.xml to know what plugins to load. The node is <plugin> and the path is (found on line 67 of PluginManager): server.system.plugin. Here is a snippet example:
<server>

<system>

<plugin>com.bluedragon.extra.ExtraPackPlugIn</plugin>

</system>

</server>

The classes specified in the plugin node should be in the classpath, on launch, and each should implement the Plugin interface (the other class in the package mentioned earlier). One of the methods you have to implement is pluginStart. This method takes an instance of the PluginManager which you can then use to register all your addin methods and tags. To add a tag it would lok something like this:

manager.registerFunction("QueryGetRow", "com.cfinnovate.example.QueryGetRow");
(or registerTag, for tags).

The first argument will be the name used inside of your CFML and the second is the class that implements the functionaity for your method/tag. Generally they'll extend functionBase or cfTag. NOTE: you can override builtin functions and tags with the PluginManager's methods.

The important thing to call out here is your methods and tags can be written exactly as if they were built into the core, just put them in your own package. The end result is a, 100% portable to the core, extension to Open BlueDragon. As far as eclipse setup I created a new resource folder inside of my openbd project called plugins and put the plugin code in my own package and it worked perfectly. This also allows for easy export to a jar to distribute to others. Here is a recap:
  1. Create a Class that implements Plugin
  2. Place that class (and your actual method/tag classes) in the classpath
  3. Put the plugin implementing class in the server.system.plugin node
  4. Start the server and enjoy
If you would like to see a working example check out this example jar (which contains the source as well). Please note that the function itself is Andrew's which he shared with OpenBD and this is example code. An entire example project can be found in my SADHaTS project. Please note that to make it easier to share I put it in its own project. If you want to test out building the way I explained earlier just copy the package into a new resource tree in your openBD project. Happy coding!

Update: Alan has blogged about it now here

Thursday, May 15, 2008

Open BlueDragon Update

CVS and Bug tracking is up and running. There is an open readonly CVS account for folks that want to create patches and/or get the latest straight off CVS:

Connection type: pserver
Host: cvs.bluedragon.org
Repo Path: /cvs/openbd
User: openbdpublic
password: password

Bug Tracker:
https://openbd-bugz.cvsdude.com/

I'll follow up with a quick tutorial this evening on how to create patches and submit them through the bug tracker! I am very excited, its all coming together, hopefully the wiki will be up by the end of the week too!

Tuesday, May 13, 2008

ColdFusion 7 & 8 annoyance

Just a quick post about an annoying "feature" of ColdFusion 7 & 8, and maybe even 6.1. In CF5 and CF6.0 nesting cfoutput tags was forbidden unless you specified a valid Group attribute in the parent cfoutput, not so much in CF7 (and maybe 6.1). Whenever that functionality changed it went fairly undocumented, though there is a comment in livedocs for v7 and a subtle wording change from 6-6.1. So fair warning if your testing environment is ohh lets say 7 but for some backwards reason you have to release code back on CF5 (or 6.0) code might break by this undocumented difference.

There is a subtle wording change from 6-> 6.1 but I do not think that does this, major, change justice:

Live Docs v6:

To nest cfoutput blocks, you must specify the group and query attributes at the top-most level, and the group attribute for each inner block except the innermost cfoutput block.

Live Docs 6.1:
If you nest cfoutput blocks that process a query, you specify the query and group attributes at the top-most level; you can specify a group attribute for each inner block except the innermost cfoutput block.


Nothing in the Change history...annoying.

Sunday, May 11, 2008

Pulse2 Review

This weekend I finally got around to giving pulse2 a spin. For those that have not heard of pulse2 its an eclipse based application that does the dirty work when it comes to configuring..eclipse. I know this sounds kind of odd but that's what it is and does. Once you open pulse2 you can chose which Eclipse runtime you want, like the core + WTP, then all additional plugins in the Pulse2 catalog. Once you have chosen the plugins you want Pulse does the dirty work of downloading and resolving dependencies. If you have 2 profiles with the same plugin it will not download it twice, its smart like that. You can also save these configs as profiles and share them with others. Pulse2 in its basic form is free but as I quickly found out anything worth while really requires the freelance account and that is subscription based @ $6/month or $60/year.

My initial thought, and why it took me so long to use pulse, was meh I can do this all on my own. However, loading different profiles can be really useful. Lets say I am working on mxUnit's eclipse plugin I can load an IDE specifically geared towards plugin dev. This would be pretty different than if I was working on OpenBD's core (something else I did this weekend). I quickly learned how nice Pulse2 is and this is a perfect way to help others in the community, share my profile and anyone can use it! The problem for me comes in that you can only use plugins in Pulse2's catalog to use Pulse2 for free. Even worse some of the plugins in the catalog require a freelance account to use (Aptana and Jboss tools are the 2 biggies here). This seems crappy to me since there is not way they can keep the catalog up-to-date. A perfect example of this is mxUnit; if I want to make a profile for the average CFML developer its either without the mxUnit plugin or it is a freelance account profile.

You can always install plugins yourself and have them not managed by Pulse but again I loose the profile aspect of it. In addition to being able to add your own plugins with a freelance account you can also share configuration settings. This is really awesome since I have multiple dev computers pulse will now keep them all in sync with one another. That to me seems like the type of services that I should pay for, not the ability to manage any plugin I want, isn't that what pulse set out to do FREE to begin with? Other than my not all plugins can be managed gripe, I also had quite a few issues with Pulse2 on Leopard, invalid argument exceptions. So bad that I would repeatedly have to shut down Pulse2 and relaunch to get my profiles configured all the way. Once the profile was configured Pulse did work perfectly so it was choppy starting but overall the product worked and worked well.

At this point I am not sure the service is worth the $60/year, I know it is not much but I can already accomplish most of what the service extras do for me with source control and checking in/out my eclipse configurations. What's more my method works with more than just eclipse it works will all my dev tools. This type of functionality is in the roadmap and once that comes to fruition I think it will surely be worth the cost. I might just get the subscription now so I can help fund the project and continue to use my extra managed plugins I guess I'll make that decision in 29 days.

Wednesday, May 07, 2008

Open BlueDragon released

It's been a bit since I posted. I've been busy, cf.Objective and Open BlueDragon launched, then catch-up at work. I've been messing around with an installer for Windows for OpenBD and I am working on some additional video tutorials as well. I posted a rough one right after the OpenBD launch. Expect more in the future:

Saturday, April 26, 2008

Back to Mac

After about 10 years away from Mac I finally have returned. I grew up with Macintosh and left after a horrible experience with Power Computing and OS8. Over my time away I've grown fairly used to Windows but quite a few events have taken place that have led to my Mac reunion. Firstly I've always secretly wanted to return to a Mac but the initial release of OS X was lack luster (and the OS9 backwards compatibility was a nighmare, my mother went through it). Then I had no desire to go back to Mac with the adoption of Intel, reference the time frame I left Mac the first time. The Intel switch seems to be stable and Leopard seems to have gone through a nice settling period as well so this seemed like a good time to make my move back home.

My second reason, Vista, aka windows biggest mistake since ME which was not even that long ago. Vista itself really is not enough to turn a person to Mac, XP is solid and supported and I am sure Windows will correct itself with the next major release. The unfortunate part of Vista was it did show me where Microsoft is heading with their OS and quite frankly I am unimpressed. Vista is a hog and if nothing else is trying to be more Mac like, it lacks innovation and MS looks to be moving towards a subscription model. I'm not saying Mac really impresses me as an OS but Apple is continuing to push innovation into their line of computers and OS.

Features that won me over:
  • Similarly spec'ed laptops in the Windows arena are as much or more
  • Spaces is cool and I think I will be more efficient in the longrun
  • I missed AppleScript and it can be very helpful
  • Expose looks like it will be nice
  • The multitouch track pad was attractive
  • Time machine looked impressive
Finally I'll admit its "the in thing." Anyone that knows me would know I am not generally in the "in" crowd so it shouldn't come as a a surprise that this was not a determining factor but it did add a sense of urgency to purchase it now. I planned to get one soon and was considerng waiting till June to see if they did anything like add BlueRay but after reading about the power cost of BR I figured it may not be worth it anyway.

After < 24 hours of use I have to say I am loving the multitouch mouse pad! On my previous HP I would use my pinky to hit that small little sliver on the right side of my mousepad to scroll up and down, and heaven forbid if I wanted to horizontally scroll. Bedlam would happen if I accidentally passed over the sacred scrolling area while just trying to move the mouse! The multitouch pad is nice and large and there is no sweet spot for scrolling, just use 2 fingers and pull/push, sorry for anyone out there that sawed off all but one finger. "Right Clicking" is easy as well with the 2 finger tap very easy and pretty intuitive. Most annoying thing so far is the lack of a delete key, well its called delete but it is a backspace to do a (windows) delete I have to do fn + delete.

Tuesday, April 22, 2008

The Good The Bad and The Ugly

Generally I keep my blog entries to technology, and rarely stray. Well today is one of those days where I am pissed off enough to post about something other than technology.

The Good
My Sony digital camera tumbled all the way down my roof and fell off to the concrete patio below and is working perfectly, after I glued the dial back on. I am amazed it is working great, zoom and everything. Kudos goes out to Sony on this one, when I saw it fly off the roof I thought for sure I was out a camera.

The Bad
So why in earth was my camera on the roof in the first place? Well we discovered we had a leak in the roof and when the roofer came to inspect it I wanted before and after pictures. The repair was to a flashing (I think thats the term) around a vent and was not too expensive $200.

The Ugly

Why did I want before and after pictures? Apparently this was never done correctly since our house was built by MI Homes 2+ years ago. And even though it just now was showing it has been leaking water for 2 solid years into our home. Upon further inspection we have at least a small amount of mold growing that is currently visible and from the looks of it we might find more. We'll know how ugly tomorrow when the drywall folks come out and repair/inspect.

So moral of the story, don't trust a builder and make sure to double check EVERYTHING. We checked everything but our ass of a Realtor did not recommend getting a home inspector, shame on us for not knowing better (we were first time home buyers too boot here). Overall I have been fairly dissatisfied with my purchase from MI Homes, some due to their incompetence and some due to my incompetence as to what to look for when a home is built (like doing their jobs properly and roofing correctly). There I finally posted a rant, its been a while.

Tuesday, April 08, 2008

Open BlueDragon Steering Committee

Alan Williamson introduced the Open BlueDragon Steering Committee today. As my previous posts may have given away I am honored to be among the likes of Sean, Matt, Mark, Mike and others on the Steering Committee. I feel like the small fish among the giants which is kind of cool since at work I am the Lead ColdFusion Architect. As I am quoted on Alan's blog entry I want to see CFML grow but I think it is important that we stay true to the spirit of the language. An additional focus area for me will definitely revolve around packaging and deploying Open BlueDragon. I feel that packaging an deployment is a 2 way stream, the community feedback on directions or tutorials is vital to the success of this project. Expect more, and better, tutorials in the upcoming weeks.

Like everyone involved in the Steering Committee if you ever would like to discuss Open BlueDragon feel free to email me at adam.haskell@openbluedragon.org. Also don't hesitate to hunt me down at cf.Objective() or cfUnited to speak your mind about the project. I've had the pleasure of talking to many of the Steering Committee members at conferences past and we are all very approachable, though apparently Mark Drew can be scary sometimes!

Sunday, April 06, 2008

Why Adobe should LOVE Open BlueDragon

Friday I let the cat out of the bag about one of the cool features of Open BlueDragon, Sandbox Projects. Prior to this Jason Delmore had a very informative post explaining why ColdFusion is not free. Jason begins by stating ColdFusion is not a lot of things, failing to really tell us what ColdFusion is in any certain terms other than a platform that does not fit the mold of all the things it is not. He conceeds that ColdFusion the language is free, or rather agrees to call it free for the sake of conversation, "let's call this FREE." Jason then proceeds to describe a bunch of features that cost oodles of money if developers/organizations want to use these technologies. Adobe seems to be very enamored with creating the "ColdFusion platform," and why not its a great revenue machine. This is EXACTLY why they should love Open BlueDragon. Think about sandbox projects for a second. If the language itself is a small part if ColdFusion why bother maintaining it? Why not let the community support the language, while you (Adobe), and others, focus on the platform. If Adobe thinks their exchange integration is popular enough test the waters make an extension pack for Open BlueDragon and put a price tag on it, likewise for the ajax features (though I would love to see that one GPLv2 so it can come bundled). One thing I did not cover in my last entry is how you can even override default behaviors with Sandboxes. Thanks to this type of behavior Adobe could even offer their cfImage enhancements as an alternate package. The community would really prosper from this type of business model. CFML becomes a powerful community driven language by itself and the platform can be grown by multiple companies that add value to the platform (or language) through extensions (humm sounds like my favorite IDE!!).

Saturday, April 05, 2008

Going to cf.Objective()

I have been considering going to cf.Objective() for a while now, despite the fact that I would be paying for it myself. You see, I have been spoiled for years as my employer has paid, all expenses, for me to attend CFunited, including this year. Heck even in college I had a full ride between scholarships and tuition savings from relatives. The thought of paying for education was simply foreign to me. I was having a hard time justifying the cost (not so much of the conference but the flight, hotel, food, etc.), as I felt many of the topics revolved around things I was less than interested in or I already had experienced. Then the big news broke; Open BlueDragon will be released at cf.Objective. This pushed me back into looking at the topics and reconsidering. As I read more about the topics and thought more about them I began to realize my original thinking was...scary. I had begun to become complacent in my role and was not interested in looking "outside my box." Opening my eyes, and readjusting my attitude, I realized there was not a single session where I could learn something, share experiences with others after a session, or ask insightful questions during the session. I started looking at my budget and really considering going. Then Brian Meloche changed his topic a slight bit and Adobe announced their topics. After reading the descriptions I realized these sessions alone could be worth the price of admission. After that it was a week worth of getting over actually spending money to get educated, I know crazy . I am going!!

To lessen the mental anguish of spending money to get educated I've decided to make a vacation of it and my wife will be tagging along. We'll fly in Wednesday and leave Monday. This should give her plenty of time to shop without me and enough time to hang out together in the evenings and before the conference. Hotwire fetched us a great deal for the trip. Surprisingly it only ended up costing about $200 more to turn this into a vacation, when compared to my original budget that was not figuring Hotwire's sweet deal. If anyone has suggestions of must see's or must do's leave a comment! I'm really looking forward to the experience, I just wish some of my co-workers could come too.