Monday, July 23, 2012

The ColdFusion/CFML Discussion: We're Finally Getting Somewhere

I'm sure by now you've seen Joe Rinehart's "Dear John" video to ColdFusion, and Mike Henke has a funny and I think (as I'll explain in detail below) very pertinent response video.

I won't rehash everything that's been said there as well as in the various discussion outlets the past few days, but I did want to comment on the situation by saying this: after years of tiptoeing around I think we're finally getting somewhere.

For me, I saw the writing on the wall for Adobe ColdFusion about 5 years ago, and I was already planning to jump ship at that point for numerous reasons. Many of my reasons were technical ones (and sadly haven't changed in ColdFusion in 5 years), but another major reason was due to my firm belief in using free software whenever possible. All that combined with me doing a lot of open source work for a closed, proprietary platform led to cognitive dissonance I could no longer ignore.

Then in 2008 OpenBD was announced as a GPLv3-licensed fork of BlueDragon. This came at exactly the right moment for me because it meant I could keep using CFML but run it on a completely free software stack.

The release of OpenBD also addressed one of the other major issues I had with ColdFusion: After seeing how free software projects are run, the level of interaction between users and developers, the ability for community members to contribute and have a direct impact on the future of the project ... none of that was true with ColdFusion. I simply couldn't keeping using and supporting something that didn't work this way.

I quickly switched over to OpenBD and haven't looked back. We have a couple of ColdFusion 8 servers running some apps that don't need much attention, but we moved the majority of our applications to OpenBD (99% without issue, despite anything you've heard about switching engines being difficult). As our legacy (and I do mean legacy -- some of these apps are 10+ years old) ColdFusion apps need updates they're moved to OpenBD, and all of our new development is done on OpenBD. We deploy our projects as WARs to Tomcat and life as a CFML developer has never been better.

I give you that background simply to point out that in my world, Adobe ColdFusion hasn't had anything to do with my CFML development for a many years now, and I haven't missed a thing. In fact I've gained a great deal, not just a faster engine with really compelling features Adobe CF still doesn't have, but I've also been able to contribute directly to OpenBD in concrete ways with patches to the engine and building the admin console, not to mention the fantastic discussions on the OpenBD mailing list that lead directly to new features in the engine that are implemented in days, not years.

When I saw Joe's video I realized I was watching it with the perspective of a disinterested bystander. He made some valid points, though as far as the installer goes "who cares" was my reaction since I think we'd all do very well to stop treating CF as if it's an application server and treat it as what it is, which is a Java web application.

But honestly 99% of Joe's complaints with CFML as a language are addressed in OpenBD and Railo. My reaction in a lot of cases was "they haven't fixed that in CF yet?" but again, since I haven't used the product for years now, it doesn't impact me.

The major point I think Joe makes (and the one that Mike's video makes at the end) that is tremendously pertinent to this discussion is the constant battle between "more stuff" -- meaning new marquee features that demo well but don't work for crap in the real world, or features no one cares about -- vs. more, less marketing-friendly features like improved language syntax, removing the dead weight (which is hugely important), and other improvements the actual users of the product (i.e. the developers) want.

I'm glad this came up in this way because it gets to what I think is the heart of the matter: ColdFusion is a commercial product. How do you keep people buying commercial products year after year? By adding more "features." We developers may think of better language syntax as a feature, but we're not typically the ones with the checkbook, and == instead of eq doesn't demo well to the suits with the money.

This is why ColdFusion is in the state it's in, and is a great illustration of why when there's a profit motive behind a software product of this type, you wind up with "features" that are bright and shiny and demo well to the people who don't know any better, and you continue release after release after release to not get much in the way of the actual improvements developers need in order to keep using ColdFusion.

To be blunt, for a commercial product that's been around for years ColdFusion should be much, much better than it is. The fact that it isn't speaks volumes.

There's a reason there are no other commercial products along the lines of ColdFusion in the world: because the market can't support them. Allaire/Macromedia/Adobe got in early with enough customers to keep this going for a while longer, but there is a definite sense that they're de-emphasizing CF as a product (I'll stop short of saying they're putting it out to pasture).

Based on discussions with other developers as well as my own recent experience, this "de-emphasis" is the story more and more people are hearing from Gartner these days. ColdFusion hasn't fallen into the "Migrate" bucket of their "Invest/Maintain/Migrate" spectrum, but it's getting there, and Gartner flat-out said on a call I was on just last week that they do not recommend starting new development on ColdFusion if you know it's a strategic product you're going to be maintaining long-term.

The bigger problem here is the increasing frustration of CFML developers. Once the community starts bleeding developers, impressing the suits or anything Gartner shows on a chart or graph won't matter. If the suits can't find anyone who knows the technology, and they're hearing from analysts it's not the way to go, they'll move to something else. All the shiny new features in the world won't fix that.

How this relates to the free software engines is also interesting, because the other engines have the albatross of Adobe CF compatibility around their necks. In many, many cases on the OpenBD side we look at how something works in Adobe CF and the only reaction a logical person could possibly have is "WTF," and in other cases we have ideas for changes that would mean vast improvements in speed or functionality, but we're saddled with remaining compatible with Adobe CF. It's a continually frustrating fine line, and given the state of ColdFusion it's one I'm personally seeing as less important to continue to walk.

I didn't wind up where I thought I was going to when I started writing this, but my main point as I state in the title of this post is this: we're finally getting somewhere with the discussions. For far too many years there's been nothing but infighting, people forming camps, alliances, cliques, etc. and getting behind one engine or another, all to our collective detriment. Ultimately that's counterproductive and wastes the incredibly limited resources we have as a community.

We also need to stop beating around the bush. I'm as guilty of this as anyone simply because of the vitriol I've had thrown my way over the years, particularly immediately after I quit as an Adobe Community Professional and joined the OpenBD Steering Committee. You start asking yourself if it's worth the hassle to say anything.

But if I can't state my opinion on things as truthfully and hopefully respectfully (without watering things down to the point of being meaningless) without getting a purely emotional reaction from people who choose to stick their heads in the sand, that's their problem, not mine. Just because I don't share your opinion doesn't mean I'm spreading FUD, or being nasty, or anything along those lines. We all need to realize that unless we can have these sorts of discussions without screaming at each other irrationally we aren't going to make any progress.

Regardless of our engine of choice we can all benefit from improvements to the CFML language and the underlying and supporting technologies, and I'll say flat-out here that I don't see any of those sorts of innovations -- the kinds of innovations we as developers need -- coming from Adobe. They by definition have completely different motivations and to keep CF going they need to make decisions for what from my perspective are all the wrong reasons. You don't wind up with something that's good for developers that way.

Look around the development world. There is not a single product remaining in the world in the same basic category as ColdFusion that you have to buy. Prior to the free software engines coming along, unless you count .NET (which is a completely different, possibly more subtle argument), CFML was the only pay-to-play language out there. (And please don't say "Websphere" or anything along those lines -- that's not the same type of product at all. Adobe convinced us for years that CF is an app server. It's not, and they've been trying to fool people into thinking it is for far too long.)

I've been in the CFML world now for a very long time. I've been hearing the "but CF pays for itself!" arguments for 15 years now. I even believed those arguments at one point and you know what? It doesn't matter. We lost. That ship has sailed. We would do ourselves and our community a huge favor by not pretending those tired old arguments are still worth the breath it takes to utter them.

People don't pay for this stuff anymore, nor should they. There are far, far too many excellent free software solutions in the world -- many of which are rolled right into Adobe ColdFusion, by the way -- for us to keep thinking we have some sort of lock on productivity or amazing features or whatever the hell other arguments we used to use to try and convince the naysayers. If we're still talking that same old crap, it's quite clear we're only trying to convince ourselves at this point.

That's not to say it's all doom and gloom. I wouldn't still be here if I didn't think CFML was a great technology. I wouldn't be writing this blog post, or be spending time on the Open CFML Foundation, OpenBD, Open CF Summit, and all the other CFML-related things I do if I didn't think the language was worth perpetuating (OK, saving).

The bottom line is this: painful as all of this may be to hear for some people, we're finally -- after years and years of ignoring our problems -- getting somewhere. Regardless of the outcome of all these discussions and any casualties that may occur along the way, that's only a good thing.

If you're thinking about "leaving" CFML as Joe did I can't say I blame you. There are a lot of great tools out there and it's in your best interest as a developer to try them. Adding more tools to your toolbox only makes you more aware of the broader scope of the technology world which is a great way to expand your skills and your mind, not to mention make yourself more marketable.

I love Groovy and Grails, and still use Grails from time to time. I'd be lying if I said I hadn't thought about switching to Grails full time. There's a lot of great technologies out there and a lot of very compelling reasons to jump ship. Some days sticking with CFML seems downright irrational in the face of all the arguments to the contrary.

But, something keeps us in the CFML world. Any one of us is more than capable of learning another technology, but we stick around for some reason, and for me that reason is even after all I've seen in the technology world, CFML is still after all these years a great technology for web development, and it still stands up pretty respectably against anything that's come along in the interim.

Could it use improvement? Sure. What couldn't? And that's kind of my point.

Rather than dumping CFML for another technology, I'd hope people would get fired up and start asking how they can help improve CFML. If you have ideas about what you'd like to see in CFML the free software engines would love to hear them, and you'll be surprised at how quickly many of these ideas would happen. If you're happy with Adobe CF, great. Keep using it. But if Adobe CF isn't giving you what you need, you don't need to wait for Adobe to make things happen.

There's no technical reason why anything that's done in any other technology (within reason of course) couldn't be done with CFML. All we need are the voices to guide CFML's future and the will to make it happen.

Wednesday, July 18, 2012

The Big Migration: Moving From a Verizon Droid Bionic to a Galaxy Nexus on Straight Talk

Definitely a superlative title for what actually is a pretty simple process, but I thought I'd document what I'm doing to dump my Verizon Droid Bionic and move to an unlocked Galaxy Nexus phone. I'll spare you my complaints about Verizon and just summarize by saying they're beyond overpriced and I don't like all the evil crap they do.

What is relevant to this discussion is the fact that I am sick and tired of having my phone be controlled by a carrier. From not keeping up with new versions of Android to forcing applications on my phone that I don't want and can't delete, I'm done with it. "Famous last words" may apply here, but at this point I'll state that I will never buy another phone from a carrier.

It's worth it to pay the extra money for a phone (and in the case of the Nexus it's only about $100 more than I paid for my abandoned Droid Bionic) and have more control over the phone as well as choice of carrier. (Relevant Lifehacker article on this topic if you want to learn more about how the carriers are the driving force behind Android fragmentation and stifle innovation every chance they get.)

But enough about all that -- here's specifically how I'm going about making this switch.

First, I ordered a Galaxy Nexus phone since it's the best bet on being able to upgrade the phone continually and since it's unlocked, I have a choice of carriers (within the limitations of the phone being GSM of course).

I'll keep my review of the Nexus phone itself brief and simply say: awesome. Thin, light, beautiful screen, ships with Jelly Bean, extremely smooth, fast UI, no crappy carrier/Motorola customizations I don't want -- simply a fantastic, fantastic phone that's so good it makes me mad I didn't get one a long time ago.

Next step in the process -- I ordered a SIM from Straight Talk. One of my many major gripes about Verizon is I was sick of paying for a ridiculously overpriced phone plan when I'm on Wi-Fi the majority of the time. Straight Talk offers an unlimited everything plan for $45/mo with no contract. You buy the SIM for $15 and give them a credit card number to bill you for the phone plan, and that's it. I'm already saving over $100/mo simply by changing to Straight Talk.

Straight Talk SIMs are either AT&T or T-Mobile. You do not get to choose, they choose for you based on your area (and I assume other business-related factors). I wound up on AT&T which is fine -- I have AT&T for my work iPhone and the signal is great in my area. If I were able to choose I would have chosen T-Mobile, but of course with an unlocked phone if I really don't like what's happening with AT&T and Straight Talk I can always switch. So far AT&T is working very well and I actually see a stronger signal on the Nexus than I do on my contracted iPhone.

Both the SIM and phone were delivered today, and setup was extremely simple. You follow the instructions that come with the SIM to activate it, which basically involves filling out a form on the Straight Talk web site and giving them your billing information, then stick the SIM in the phone. By the time I got the SIM into the phone and powered it on I was already able to make calls.

Note that when you activate your SIM you have the opportunity to port your existing number to Straight Talk. I didn't do that because I have a slightly different plan in mind (see below).

Next, to use the data features in the phone you have to enter a new Access Point Name (APN). Here's how you add a new APN on the Nexus:

  1. Open "Settings"
  2. Under Wireless & Networks, click on "More ..."
  3. Click on "Mobile Networks"
  4. Click on "Access Point Names"
  5. Click the three vertical boxes on the bottom right of the screen to bring up the menu, and click on "New APN"
  6. Enter the information included with your SIM
  7. Reboot
With the setup out of the way my Nexus is working great with a new phone number, and of course since all my contacts, etc. are associated with my Google account all that stuff magically appeared on the new phone.

I made the conscious decision not to port my number to Straight Talk. Instead, when I'm ready to cancel my Verizon account (and pay the punitive early termination fee -- good riddance) I'm going to port my current cell phone number to Google Voice.

Why am I doing that? Again, it's all about gaining more flexibility and control. Once my cell phone number is a Google Voice number I can change plans, phones, etc. underneath that and never again hassle with porting numbers between carriers. The abstraction of having the phone number not tied to a specific device will be quite nice, and then I can take full advantage of all Google Voice has to offer.

If you follow me on Google+ you know that I'm also a huge fan of Republic Wireless. I'm on one of the beta waves for Republic Wireless and am still very enthusiastic about what they're doing (anything that disrupts the wireless industry is a good thing), so I will still be getting a phone from them when my wave comes up. Yes, I'm a gadget junkie, but I also want to support what they're doing, and if it works exceptionally well since the Nexus is unlocked and I have no contract with a carrier, I can simply cancel my Straight Talk account and sell the Nexus on Swappa. There's that flexibility coming into play again!

Hope that helps give people who've been considering this sort of switch more information to help with the decision making process.

Saturday, July 14, 2012

TeraCopy: Unbelievably Great Windows File Copy Replacement

I don't use Windows often but when I do, one of my major complaints is how absolutely abysmal the file copying process is, particularly when copying a large number of files, and especially when network resources are involved.

I suppose given how much it annoys me I should have looked into it sooner, but I was looking at the 2012 Lifehacker Pack for Windows which is a list of "must have" applications and utilities for Windows (they have lists for Linux, Android, and that fruit-related company's junk as well), and one of the items in the Windows list is a utility called TeraCopy.

In short, if you ever have to use Windows go download TeraCopy right now. It replaces the native and horrendously crappy Windows file copy process, but it works so much faster and better it quite literally put a huge grin on my face (and I never smile while using Windows).

Not only is it lightning fast, but it lets you pause and resume copy operations and -- GET THIS -- logs all the copy operations that fail. This is fantastic because the native Windows copy process often chokes for no reason (or at least it doesn't share the reason) and you have no way of knowing where it failed or what got copied and what didn't, so you basically have to start over.

Enough gushing, just go grab TeraCopy right now and dramatically improve the Windows file copying part of your life.

Thursday, July 12, 2012

Intro to Jenkins Slide Deck

This is admittedly very brief (9 slides) since most of the presentation will be demo, but here are the slides that will accompany the Intro to Jenkins talk I'm splitting tonight with Nick Harvey at the Seattle CFUG.