Pricing for BlueDragon.NET 7.0 Standard Edition - $1999/server

Newly released on Vince B's blog, 7 pricing. For a long time, the Blue Dragon product had the reputation as being the "Cheaper" cousin of ColdFusion, but no longer.

I don't currently have pricing for Scorpio in front of me, but it seems as if BlueDragon now has the reputation for being the "More Expensive" cousin of ColdFusion.

I, for one, appreciate New Atlanta in the CFML engine marketplace. The competition has been good for the state of the art, if perhaps not for the profits of Adobe nee Macromedia. New Atlanta has several 'firsts', one being cfthread, another being cfinterface.

With that said, the last time I had a decision about which CFML engine to use, I went with ColdFusion Enterprise. I felt the price justified the expense because ColdFusion is the Gold Standard for CFML engines and CF Enterprise and BD enterprise are priced equal. I specifically avoided using the BlueDragon product line because of certain incompatibilities with popular CF Frameworks. Even at a lower costs, the issues and limitations were too much of a negative.

I understand some CFFrameworks vs. BlueDragon issues are resolved. In fact, Peter Farrell announced on a recent cfweekly podcast that he was able to use MachII 1.5 and the ColdSpring BER on top of BlueDragon.

Still, one has to wonder if the 2k entry price for BD Standard is on the mark. It is certainly ~800 more than CF Standard. Of course, I am a lowly programmer and I don't have bastions of Market Research professionals scouring the market with surveys and the like. Nor do I have years of experience developing boxed commercial software like Vince B. and co. ( If you don't already know, Vince has been behind some very successful and innovative products in his time.)

Will there still be a 'free' BlueDragon product? Will hosting companies provide BlueDragon on their CFML hosting plans? Will Adobe counter will a Hosting Specific version allowing cheaper hosting prices? Stay Tuned to the War of the CFML engines.....

Update 1: The reporting above is slanted and inaccurate, like most of my postings. There are some good comments below adding balance. My biggest error was in failing to differentiate between BlueDragon.Net, and the other products in the New Atlanta Stable. Have a look at the Product Matrix. Also Vince B. states "Finally, yes, there will continue to be a free BlueDragon edition--we have no plans to change this. Pricing of the Java-based editions in the BlueDragon Product line remain unchanged." I did not know this and it is certainly good news for the many using BD. Have a read through the comments for a more balanced perspective.

The proud owner of a ticket to the CF.Objective conference

I am registered for the cf.Objective() conference!

I REALLY REALLY wanted to go last year. My plans were derailed by deadlines at work. Not wanting to miss two in a row, I registered early. Now, I have no excuses.

Minnesota in May is a nice time. Really, it is. After a nice long Jersey winter, I can say how grateful I am the conference is in May, rather than December.

If you are on the fence about attending, have a look at the sessions. Should be an action packed conference for sure.

Oh, if you need ammo to convince any pointed haired bosses, have a look at The Managers Guide.

Enough with the Mac posts already....

Now Hear This

Please stop raving about your Mac computers. I have an older Mac Book (600mhz) running 10.4 and I like it just fine. Since it is an older computer, I don't use it much.

I have two other laptops (Wintel) and I am perfectly happy with them. I can't use more than two computers at a time so there is no logical REASON to purchase another notebook.

So I implore, no, I BEG you, for the love of my checkbook, stop taunting me with your Mac anecdotes or I'll be forced to purchase one. (I have my eye on the 13" for travel purposes. I've been as close as pressing the order button before my rational side regained control. It is very stressful).


Pretty Please?


I've been working on a Data Conversion for the last month and a half. I didn't want the assignment. I don't like data conversions. I only did it because I know the people. It seems I get in more trouble when I try to help people. I guess I am a sucker. Oh, and they were ready to write a check. ;)

I ran into plenty of surprises with this conversion. There were even a few places where the primary keys in a table were duplicated. In one case, there were 47 different rows with the same primary key. Since this table was the base relationship for 5 other tables, you can imagine my fun at trying to unwind it all.

The good news is I have delivered the conversion to the client. They are pleased thus far and they are going to review the data this week. If all goes well, I am done. Tell you the truth, it couldn't come any sooner.

I'd like to pick back up with the Model Glue series soon. I believe we have Security, Ajax, ORM with Transfer and Internationalization (i18n Thank you Mr Gonda :)

If there are any other requests, let me know

And remind me not to take on any more Database conversions.

Strange Friday Night

I am not a threatening guy. I mean it. I am between 5'8 and 5'10 depending on what convenience store I am leaving. I weigh 150 pounds and rarely wear hockey masks. "Why am I telling you this?", you wonder?

It was a long and stressful week what with preparing an application for launch and my consulting work in the evenings. Way too much time on the keyboard, know what I mean? The weather up here turned warm, so I went out for an evening stroll.

After about 2 miles of walking, I returned home to pick up a bottle of water and a jacket. Approaching my driveway I was approached by 2 people with dogs who questioned me. I pointed to my house, explained I was out for a walk. Having lived in this neighborhood for 6 months I was a little annoyed but stayed friendly.

I went into the house, grabbed my coat, the bottle of water and set off again. About an hour later, a police car pulls up and starts questioning me. He asked my name and my address, which I promptly told him. Then I asked him if "Everything was all right?" He said "Yes." Then drove off.

At this time, I am starting to wonder if I should be out walking. Something seems strange. Is it normal to question the health inclined for just being out walking?

I was still thinking about this encounter with the police when I turned from the main road into the neighborhood. 50 yards up the street a man walked with a flash light. After 20 or so steps, the man turned around, pointed the flashlight in my face and approached. I started getting annoyed when he KEPT the flashlight pointed in my face, so I yelled out "Hello?!?!?!".

Suprisingly and not suprisingly, it was another police officer. He asked my name, address and some other details. I began to wonder if I was on some New Jersey game show. Next, he asked for my identification. I told him I had been out for a walk, not shopping but if he would like to accompany me to the house, I would retrieve my documents for him.

He seemed amused and satisfied and told me not to worry about that.

For the record, I live in a country suburb in New Jersey. The kind of place where the neighbors all know one another. The kind of place where garages and doors are left unlocked. A nice friendly place. I felt like I had wandered from the Garden State to a Police State.

5 minutes later, two officers come running up the street yelling for me to stop. I stop and wait for them to catch up. At this point, I am getting beyond "Friendly, Helpful Citizen" and to "Annoyed, I Live Here, Leave Me Alone"

The two officers say they are going to need me to produce my ID. "Fine, lets go get it", I say. So off we go walking up a hill towards my house. The whole time I am thinking, "My roommates are going freak out when I show up at the door with two armed policemen..."

Moments later, several cop cars arrive. Now surrounded by 7 officers, I am told to unzip my jacket, produce my cell phone and then answer a bunch of questions.

  • "What is your name?"
  • "Where do you live?"
  • "What is the zip code here?"
  • "What is the area code here?" ( I actually got this one wrong? Ha Ha. )

Next thing I know, an officer takes my cell phone and drives off with it. I am still fully surrounded and getting nervous. I have no idea what is going on.

After 10 more minutes of Q&A with the police, the car comes back, announces "It's not him", hands my cellphone back and leaves. I am left walking back to my house shaking my head.

So how was YOUR Friday night?

Passing querytext as a function argument OR When is a string not a string?

Today I wrote a function that added in default rows to a query. Part of the function needed the text of a query to find the default values. I attempted to pass in the query text and use the same text in a <cfquery> tag.

This did not work.

Here is the query I passed in:

view plain print about
1SELECT This, That FROM Those WHERE bar = 'foo' ORDER BY SortOrder

Here is the resulting error:

view plain print about
1Error: [Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near 'Foo'.


Closures in ColdFusion

I've been reading Sean Corfield's examples on how to use the Closure library. This still seems a little mystical to me since I haven't made use of closures in programming before.

To ease my befuddlement, I wrote a test for the Closures library. The use case for the below example is summing a column that contains non-numeric values. You can recreate the test by following these steps:


To the Acura Driving Teenager

Hi, you might remember me. I was the guy in the Porsche this afternoon you wanted to race. I know you were perplexed when I didn't take you up on your challenge. Allow me to explain.

See, once upon a time, I was a street racer too. I had a car I thought was very fast and I took great pleasure in revving my 4 cylinder engine and challenging all comers, so trust me, I know where you are coming from. I chose not to race you because I am 31 years old now. A lot has changed since I was your age.

Frankly, at my age, I am more concerned with the price of gas than bragging rights to a street race. Seems strange doesn't it? When your mommy stops buying your gas and you finally get a job, I think it will clear up for you.

There are some other reasons as well.

Your car says Acura on the front of it. Acura is a make of automobile manufactured by Honda, a corporation mostly known for making fuel efficient vehicles. My car says Porsche on the front, a company mostly known for making incredibly performant vehicles. Think on that one for a second.

As they say on TV, "But Wait, there is more!"

Your car has a wing on the rear. A quite impressive structure, your wing. I believe it stands at least a foot tall. It also looks homemade, did you make it yourself?

My car also has a wing on the rear. It isn't quite as tall as your wing but a tad more stylish than your contraption which happens to look more at home on top of a semi-tractor cab than a japanese import vehicle. Just my opinion, mind you.

Opinions aside for a moment, there is another subtle difference between your wing and mine. Your wing is on the rear of your car. Your drive wheels are in the front. Any fourth grader with a passing interest in aerodynamics will tell you your wing puts extra downforce on the rear of your car thusly, reducing the traction available. Not a great feature when racing, let me tell you. On the contrary, the wing on my car is over my drive wheels and adds traction. A handy feature when racing in wet conditions, as it was today.

My car also has a deep exhaust sound. It came from the factory like that. Sounds powerful doesn't it? Not to be mistaken for a car impersonating a misfiring weed eater as your noble ride appeared to be doing zooming up behind me.

Finally, notice the panels on my car are all the same color. This might not provide any racing benefits, but it sure looks much better than your custom patchwork quilt look.

It is possible I am just out of touch with what is 'Cool' these days. If we meet again, my greasy haired speed racer, kindly fill me in on how puberty is going.

Promote ColdFusion (CFML)

The "frighteningly" evangelistic Rey Bango, newly anointed into the JQuery Evangelism fold is a long time ColdFusion programmer.

Rey kicked off a new project called to spread the good word about the vitality and strengths of ColdFusion and CFMX.

There is an article on at the moment and it could use an few nudges north. Give a Digg for ColdFusion, would ya?

Still need convincing?

So you want to create a ModelGlue:Unity application? ( Part 10 )

Sean Corfield pointed out that using ColdSpring to make instance (throwaway) components is quite a heavyweight approach for a simple form bean. He is, of course, correct. Our ContactFormBean is currently created by ColdSpring. In this series, we will add a factory object that will make our instance beans for us. The factory itself will be configured through ColdSpring as well as the configuration for our objects.

This is a very simple factory. It has three methods, GetConfig, SetConfig and getBean. In turn:

  1. getConfig() returns a struct with keys = objectnames, and values = paths
  2. setConfig() provides an interface for ColdSpring to set the configuration struct.
  3. getBean() gets the path for a specific object from the configuration struct and returns a created object.
Note: the getBean() method runs an init() method on the newly created object. This is considered a convention in CFCs.
view plain print about
3    <!---     Author: dwilson Date: 3/14/2007 Usage: I return an instance object     --->
4    <cffunction name="getBean" output="false" access="public" returntype="any" hint="I return an instance object">
5        <cfargument name="ObjectName" type="string" required="true"/>
6        <cftry>
8             <cfreturn createObject( "component", structFind(getConfig(), arguments.ObjectName ) ).init() />
10             <cfcatch type="any">
12                <cfthrow message="BAD_OBJECT_CONFIG_IN_INSTANCEFACTORY" detail="You provided [ #arguments.ObjectName # ] and I can't create it. Go check the config." />
14            </cfcatch>
16        </cftry>
18    </cffunction>
20    <!--- Usage: GetConfig / SetConfig methods for Config value --->
21    <cffunction name="
getConfig" access="public" output="false" returntype="any">
22        <cfreturn variables.instance.Config />
23    </cffunction>
25    <cffunction name="
setConfig" access="public" output="false" returntype="void">
26        <cfargument name="
Config" type="any" required="true" />
27        <cfset variables.instance.Config = arguments.Config />

28    </cffunction>

To use this instance factory, add the following ColdSpring xml snippet to the ColdSpring.xml file.

view plain print about
1<bean id="instanceFactory" class="ContactManagerMG.model.InstanceFactory">
2     <property name="Config">
3     <map>
4     <entry key="ContactFormBean"><value>ContactManagerMG.model.ContactFormBean</value></entry>
5     </map>
6    </property>

Now remove the original ContactFormBean configuration.

Next, open the Controller.cfc file and change each instance (getContactForm, handleContactForm and removeContact) of getModelGlue().getBean("ContactFormBean") to getModelGlue().getBean("InstanceFactory").getBean("ContactFormBean") .

Finally, reinitialize your application and click on the ContactForm tab. You should see your form as before.

A factory might seem like overkill right now, since this is a simple application. However, Factory objects are a good pattern to learn. Our motivation for the factory in this case was to reduce the amount of unnecessary processing incurred by using ColdSpring to make a simple form bean. We could however, expand our factory to take additional parameters and create all sorts of dynamic objects for us.

In a later series, we'll do just that.

Download Download