<CFWTF>

About the CF 8 Price Increase

To Adobe and their defenders in regards to the ColdFusion price hike. Despite your assumptions to the contrary, those of us complaining about the price increase are not whiny brats. We do have a legitimate greivance to bring.

Let me try to explain the perspective I'm coming from. I work for a small development house. We build websites - NOT webservices or specific apps that fit into a larger corporate IT infrastructure - a single website for a small-to-medium-sized company, usually with several very small apps conglomerated together. An Ecommerce site, for example, is our bread and butter. A typical project for us is around $35-50k, and is completed within a month or two - planning to deployment. Obviously, we do this several times a year, usually to different customers each time. So to win the contract, we have to compete not only on quality, but on price. These sites are typically just large enough in terms of traffic to require a two-server web farm with a third server as the SQL back-end. This is a typical set-up.

Up until now, we've been able to compete with our .NET and PHP-based competitors, because, although their costs were significantly cheaper for the hardware, our development time was significantly shorter, offsetting the CF licenses that we had to include in the project cost. It has been very difficult to sell licenses of Enterprise, because it increases the overall project cost by $7400, and the only benefit we can really give non-technical people is "It's really better to use Enterprise if you have more than one server" That doesn't sell well, and usually their response is to just use Standard with some third-party or MS-based load-balancing and failover solution. However, this solution isn't very good, and the failures are then blamed on ColdFusion, thus making future sales even more difficult.

With this new price hike, you've sealed any chance we had of selling Coldfusion in this multi-server scenario. There's no way we can tack on $15,000 to a $35,000 project and make up for that in development time. You've priced us out of competition with .NET and PHP. Frankly, I'm not sure who you think your competing with if you think this is a reasonable sum to ask us to swallow.

I've read and can appreciate your problems with the larger-sized projects. And I think the thread-throttle thing is a good solution to that. I have no issue with that restriction.

I think what we need is three tiers. One free or nearly so to compete on the low end mom-and-pops, one middle tier priced around 2 or 3 grand for those of us in the middle, and Enterprise for the top end with all doors unlocked and J2EE integration, etc. Perhaps all this noise is not because the price is too high, but because you've opened a hole in your pricing plan, and those of us in that range are falling into it.

iPhone + AIR/Apollo

So here's an interesting thought: The net's abuzzin' about the iPhone releasing the 29th of this month, and Steve Jobs made the announcement yesterday that the phone will support 3rd-party apps, but only web apps, or Apple-approved apps such as Google Maps, which runs natively with full interaction with some of the phone's cooler features. The general consensus is that this is a bit of a cop-out, and will severely hamper the innovation possible for the new device.

But then I started thinking, what if AIR/Appolo became an Apple-approved app?

Protecting Adobe

I'm seeing a strange and disconcerting trend lately. It started when I posted this article, which started off with a bit of a rant, but was primarily purposed to help explain some of the idosyncracies of the Flex-Coldfusion integration when using RemoteObject. The only response I've received to the post - in fact, the only response I've received so far to this blog - tried to paint the picture that my incident was an isolated one, and that the "vast majority" of people had no problems. (By the way, this comment was posted after I sent the post directly to someone closely associated with Adobe, and was posted at the same general time I recieved that person's reply via email)

I then saw almost the exact same scenario play out on Jeff Knooren's blog. And I've seen numerous but less blatant examples peppered throughout the blogosphere and mailing lists.

So I have to ask, when did Adobe become so fragile that it needed protecting? Coldfusion and Flex, among other things have in common the fact that their success is primarily community-driven. We are constantly fighting the impression that Coldfusion is a kiddie language, somehow inferior or not as capable/useful as .NET or PHP. Yet, how can we expect the outside world to think anything different when we take an attitude of "Don't talk bad about Adobe?"

Here's the critical point: when we take a protective stance, the impression this gives to outsiders is not that Adobe has no faults, it's that Adobe's faults are so bad that they must be kept secret, and the public cannot know about them. This is a far worse market position for our beloved languages than, say, admitting that the Coldfusion-Flex integration needs some work, but Adobe's on it, and once it's polished, it will be incredible.

ColdFusion is f*ing incredible, and I say Scorpio is the best thing that happened to the language so far. For the first time since MX, Adobe (yes, and their predecessors) have focused the bulk of their efforts not on trying to keep up with other languages on their strenghts, but on the one area where ColdFusion absolutely obliterates all others - Fast and Easy. Likewise, Flex is an amazing leap forward for the web community. Macromedia was smart to get into it when they did, instead of jumping on the AJAX bandwagaon, and as a result, Flex is maturing nicely as a language, is far superior to AJAX, and is way out in front of Microsoft's late arrival.

But these languages are not perfect, and trying to pretend they are isn't fooling anyone. I merely makes us as a community look like a snake-oil salesman.

Bottom line is, if you want the world to think Coldfusion and Flex are great, we first need to check our own attitude. Maybe we're suffering from an inferiority complex as a community. Maybe we've been so overwhelmed with Microsoft propoganda and open-source fanatacism that we're actually starting to believe that these languages outstrip ColdFusion. They don't. Not on our field anyway. Sure each has its uses. If you're programming for an entirely MS house, and you need a small app that needs to integrate tightly with Exchange, ActiveDirectory, and Sharepoint - you know what? .NET is probably going to be a good choice for you. And likewise, if you're trying to put together a web app using volunteer programmers and a total hardware/software budget of $500, PHP is likely your best bet there.

But if you're in the 90% of businesses that are neither Microsoft evangelists, low-budget garage-based shops, nor looking to build an enterprise application for one of the Fortune 500 companies, ColdFusion is almost guaranteed to be the most cost-efficient, maintainable, scalable option for you. Why? because it's FAST and EASY! It makes doing 90% of what you could ever want to do extremely simple to implement, and provides all the hooks necessary to do the other 10% in the languages that excel in those areas. How can you possibly consider this language to be anything other than a godsend?

So take off your pity-party panties, CF community. ColdFusion lags behind .NET and PHP in marketshare for one reason and one reason only. It costs something. The fact that it holds its own in market where it's competetors DON'T COST ANYTHING is a phenomenal testament to the usefulness and value of the language.

You are part of one of the most exciting times in the web's history, and you are part of the community that backs not only the greatest tool for our industry but the future as well.

Start acting like it!

Sharing a name among checkboxes

Here's a tip you might have missed. Did you know if you reuse a name for more than one checkbox control in your form, your result on the processing side is a comma-delimited list? This is particularly useful for numeric IDs. Check out this reporting app:

[More]

Objects on the fly

Did you know that functions have references in CF? This makes for some interesting mechanics, one of which is the ability to create (almost) objects on the fly without a CFC. Think about it. An object is just a collection of properties and methods, right. So if you could create a function and stick it in a structure key along with other properties, you have an (almost) object. Consider the following:

[More]

Funny CF7 Bug

I came across this accidentally, but it gave me a chuckle. Try entering the following code in a simple index.cfm:

<cffunction name="theFunk">
   <cfset doSomething=true>
</cffunction>

<cfset reference = theFunk>
<cfset reference.wrong = "What?!">

Can you guess what would happen? I figured it would probably throw an error, but the error it actually threw surprised me.

Flex? Coldfusion? Don't make me have to separate you two!

Warning: I'm about to rant. If you prefer to skip the emotion, feel free.

As much as possible, I prefer not to criticize others, especially not in areas in which I myself am not expert, but I am thoroughly disappointed in Flex, at least in its ability to integrate with Coldfusion. RIAs have been coming into their own for quite some time now, and when I first heard about Flex (2), Adobe was fairly screaming about how easy Flex and Coldfusion worked together. I was very excited about the possibilities, and began preaching about revolutionary change in the web, the death of AJAX and possibly even of Desktop applications, especially with the ability to push data with Flex (or Live Cycle as it's now called) Data Services.

"Woo-hoo!" I thought, and imediately dove in. That was a month ago, and I've just today gotten a hello world app to behave reliably - in that I feel like I could reasonably deploy it and be confident it would continue to work as designed. It has been a nightmare of uninstalling and reinstalling, tweaking settings in configuration files and in flexbuilder project settings (and in code). I've tried on multiple machines, with a couple different versions of Coldfusion. But getting these two applications (Flex and Coldfusion) to talk to each other proved to be slightly more difficult than training my dog to chew with his mouth closed. It has been a huge disappointment, mostly because my hopes were so high based on the quality organization that Adobe is and the intelligence with which they usually deploy their products.

Alright, so now that that's off my chest, I didn't actually write this post just to complain. In trying to fix this problem, I researched dozens of blog posts, forum threads and articles, and found people everywhere that were having the same or similar problems I was, and frankly, they have all been surprisingly consistent in being considerate enough to post what they did to finally fix the problem. However, nowhere did I find a thorough explanation of WHY things weren't working, or how they're supposed to work.

The point
So, I thought I'd give my synopsis of what I've learned over the last month in the hopes that it will save someone else the trouble I went through. It really is everything we dreamed. It's just that the current iteration is a little...quirky

[More]

Coding Defensively

I hate debugging. I don't know about you, but for me, coding is about the thrill of the chase - trying to find a simple, elegant way to solve a problem that everyone else thinks is impossible to solve. That's what gets me up in the morning, and why I love what I do. Debugging, on the other hand, is nothing better than mind-numbing drudgery that is unfortunately a necessary evil in order to achieve that coder's high

Nevertheless, I have accumulated a few methods of decreasing the number of bugs, which, while not eliminating the dreaded root canal, does seem to lessen the duration - which is something...I guess.

The primary one that I employ and that I try very hard to instill in my team is the idea of defensive coding. The idea, here is to

[More]

BlogCFC was created by Raymond Camden. This blog is running version 5.7.
</CFWTF>