Adobe eSeminars

One of my roles at Adobe is to present eSeminars (online seminars via Adobe Acrobat Connect) related to ColdFusion. Join me, won't you? I will be presenting the Adobe ColdFusion 8 eSeminar Series over the next couple of months; details can be found via this URL:

http://www.adobe.com/cfusion/event/index.cfm?event=detail&id=1345643

Speaking of eSeminars: you might also be interested in the Adobe Flex eSeminar Series for Developers; details can be found via this URL:

http://www.adobe.com/cfusion/event/index.cfm?event=detail&id=462539

Upgrading from ColdFusion MX to ColdFusion 8

Just as I am frequently asked about the process of migrating from ColdFusion 5 or older to ColdFusion 8, I am also regularly asked about the process of upgrading from ColdFusion MX (the releases variously known as ColdFusion MX, ColdFusion MX 6, ColdFusion MX 6.1, ColdFusion MX 7, ColdFusion MX 7.0.1, ColdFusion MX 7.0.2, ColdFusion 7, ColdFusion 7.0.1, and ColdFusion 7.0.2) to ColdFusion 8 (at the time of this posting, the current release of ColdFusion 8 is ColdFusion 8.0.1). And so here too I have compiled some helpful information:

First and foremost, to set things up: as noted in the following link, ColdFusion MX to ColdFusion 8 is a valid upgrade path (upgrading to ColdFusion 8 is supported for the 2 most recent previous major releases of ColdFusion):

You can use the ColdFusion Code Compatibility Analyzer to determine if your code is valid for ColdFusion 8:

I recommend reviewing the tag and function changes to ColdFusion. Be sure to note the addition of functions with names that collide with user-defined functions in your code (for instance, ColdFusion 8 introduced the isImage() function; if your code has a user-defined function called isImage() you will need to change the name of that user-defined function and all references to it in your code before upgrading to ColdFusion 8):

You may also wish to check the CFML Language History:

It's very important to read the release notes in case some might apply to your environment:

Many of these upgrading best practices from Adobe's Sarge Sargent's blog will certainly apply:

For even more helpful info, visit this blog post from Charlie Arehart:

When you're ready to install ColdFusion 8, you'll want to review the "Installing and Using ColdFusion" documentation:

Adobe has worked hard to make the upgrade process as smooth and easy as possible. The process involved varies depending on:

  • Your current product version and edition as well as, in the case of ColdFusion Enterprise, your current deployment type.
  • Your desired product version and edition as well as, in the case of ColdFusion Enterprise, your desired deployment type.

To upgrade to ColdFusion 8 Enterprise from ColdFusion 8 Standard:

  • Enter your license key for ColdFusion 8 Enterprise in the ColdFusion Administrator in the System Information section accessible via the link marked with an "i" Information icon in the upper-right. No reinstall of ColdFusion 8 is required. This is true because there is a single runtime (per platform; the same is true for the installer) for ColdFusion 8 which acts as a particular edition based on what license key(s) are entered--if you enter a license key for ColdFusion 8 Enterprise, the runtime will act as ColdFusion 8 Enterprise; if you enter a license key for ColdFusion 8 Standard, the runtime will act as ColdFusion 8 Standard. Note that both ColdFusion 8 Trial and ColdFusion 8 Developer are the same as ColdFusion 8 Enterprise, with the notable exception that neither is licensed for production use, Trial becomes Developer after 30 days, and Developer accepts connections only from a limited number of IP addresses.

To upgrade to ColdFusion 8 from standalone installations of any release of ColdFusion MX (NOTE: the process is the same for standalone installations of both ColdFusion Enterprise and ColdFusion Standard):

  • Run the ColdFusion 8 installation wizard to install ColdFusion 8
  • Browse to the ColdFusion Administrator to launch the Configuration Wizard and allow it to import the settings from ColdFusion MX

To upgrade to ColdFusion 8 Enterprise from multi-server and J2EE installations of any release of ColdFusion MX, follow this TechNote:

As long as you choose to use the built-in web server during installation of ColdFusion 8, your installation of ColdFusion MX will not be altered or removed by the installation of ColdFusion 8. You will therefore be able to continue running ColdFusion MX while you test your new ColdFusion 8 installation.

If during installation of ColdFusion 8 you choose to use the same external web server as you are using for ColdFusion MX, note that the CFIDE and CFDOCS directories in the root of your external web server will be replaced by the CFIDE and CFDOCS directories for ColdFusion 8. If you wish to avoid this, you must instead choose to use the built-in web server during installation of ColdFusion 8. As Adobe Technical Account Manager Michael Collins explains in the following blog post, you can later use the Web Server Configuration Tool to configure your external web server for ColdFusion 8:

If you wish to configure your external web server to work properly with both ColdFusion MX and ColdFusion 8 on an ongoing basis (as opposed to working with only one version or the other), you can do so, but you will need to do some manual configuration of your web server; see the following blog post by Adobe Community Expert Charlie Arehart for more information (even if you're not using Microsoft IIS and Microsoft Windows XP, the principles described will apply):

There is no need for you to uninstall ColdFusion MX once you are no longer using it, but you may do so if you would like. However, if you wish to uninstall any release of ColdFusion MX, please view the following TechNote (which is written for the uninstallation of ColdFusion MX after upgrading to ColdFusion MX 7, but is also applicable to the uninstallation of any release of ColdFusion MX after upgrading to ColdFusion 8) before uninstalling ColdFusion MX:

Still have questions? First, visit the Installation section of the ColdFusion Support Center. If you can't find your answer there, feel free to contact me or, particularly if your question is one you believe would benefit other readers of this post, add a comment on this post.

One final note: Adobe offers implementation consulting for a fee; if you would like more information on this offering, please contact me.

Migrating from ColdFusion 5 or Earlier to ColdFusion 8

I am regularly asked about the process of moving applications from ColdFusion 5 or earlier releases (ColdFusion 4.5, ColdFusion 4, etc.) to ColdFusion 8. Nowhere else is there good consolidated information on the subject so, with some help from the excellent Adobe ColdFusion Support Team, I have compiled this information:

First and foremost, to set things up: as noted in the following link, ColdFusion 5 or earlier to ColdFusion 8 is not a valid upgrade path:

However, you can still migrate your ColdFusion applications from ColdFusion 5 to ColdFusion 8. Note that unlike the valid upgrade paths available for moving from ColdFusion MX 6.x and 7.x to ColdFusion 8, migrating from ColdFusion 5 to ColdFusion 8 does not allow for automated migration of ColdFusion settings like datasources, mappings, custom tag paths, and so on; instead, you must migrate your ColdFusion 5 settings to ColdFusion 8 manually.

Below you will find a number of resources that will be helpful in the process of migrating from ColdFusion 5 to ColdFusion 8:

"Migrating Applications to ColdFusion MX 7" is an incredibly valuable resource and although it was unfortunately not updated for ColdFusion 8, to a large extent that's because there really wasn't any need: the concerns involved when migrating from ColdFusion 5 to ColdFusion 8 are (with possibly some small exceptions that don't come to mind right now) the same as those involved when migrating from ColdFusion 5 to ColdFusion MX 7:

Although this article was written for migration to ColdFusion MX, which is 2 full releases earlier than ColdFusion 8, many of the topics covered will apply to ColdFusion 8 as well:

The previous link also mentions the Code Compatibility Analyzer. You can use the ColdFusion Code Compatibility Analyzer to determine if your code is valid for ColdFusion 8:

I recommend also this link for ensuring your migration from ColdFusion 5 will at least be compatible with ColdFusion MX:

I recommend reviewing the tag and function changes to ColdFusion. Be sure to note the addition of functions with names that collide with user-defined functions in your code (for instance, ColdFusion 8 introduced the isImage() function; if your code has a user-defined function called isImage() you will need to change the name of that user-defined function and all references to it in your code before upgrading to ColdFusion 8):

You may also wish to check the CFML Language History:

It's very important to read the release notes in case some might apply to your environment:

Many of these upgrading best practices from Adobe's Sarge Sargent's blog will certainly apply:

For even more helpful info, visit this blog post from Charlie Arehart:

And finally, when you're ready to install ColdFusion 8, you'll want to review the "Installing and Using ColdFusion" documentation:

Still have questions? First, visit the Installation section of the ColdFusion Support Center. If you can't find your answer there, feel free to contact me or, particularly if your question is one you believe would benefit other readers of this post, add a comment on this post.

One final note: Adobe offers implementation consulting for a fee; if you would like more information on this offering, please contact me.

ColdFusion 8 Enterprise Now FREE for Qualifying Educational Use

As announced at CFUnited 2008, ColdFusion 8 Enterprise is now FREE for qualifying educational use!

One big point I want to make up front: ColdFusion 8 Enterprise in a production environment at even a qualifying institution still requires a commercial license. For more details on this andother important program details, please see the following links:

Creating an RSS Feed Using <cffeed> with a Structure

The Adobe ColdFusion 8 documentation has a ton of great information on the <cffeed> tag, including a nice example of how to create an RSS feed using <cffeed> with a structure. There's no need to rehash that information, but I do want to expound on it to explain how you specify categories and enclosures as well as guid info for an item in a feed because I think specifying these for an item in a feed is a little tricky. So what I'm going to do is take the above example as a starting point, adding in the code that demonstrates how to specify categories and enclosures and guid info for an item and removing some non-essential code so as not to overly complicate things:

<cfsetting showdebugoutput="no">

<cfscript>
   /* Create the feed data structure and add the metadata. */
   myStruct = StructNew();
   myStruct.link = "http://" & CGI.HTTP_HOST & CGI.SCRIPT_NAME;
   myStruct.title = "My RSS Feed";
   myStruct.description = "A demonstration of <cffeed>";
   myStruct.pubDate = Now();
   myStruct.version = "rss_2.0";
   
   /* Add the feed items. A more sophisticated application would use dynamic variables
      and support varying numbers of items. */

   myStruct.item = ArrayNew(1);
   myStruct.item[1] = StructNew();
   myStruct.item[1].category = ArrayNew(1);
   myStruct.item[1].category[1] = StructNew();
   myStruct.item[1].category[1].value = "Cat1";
   myStruct.item[1].enclosure = ArrayNew(1);
   myStruct.item[1].enclosure[1] = StructNew();
   myStruct.item[1].enclosure[1].url = "http://" & CGI.HTTP_HOST & "enc/myenclosure.mp3";
   myStruct.item[1].enclosure[1].length = 1212;
   myStruct.item[1].enclosure[1].type = "audio/mp3";
   myStruct.item[1].description = StructNew();
   myStruct.item[1].description.value = "The first item in the feed";
   myStruct.item[1].guid = StructNew();
   myStruct.item[1].guid.isPermaLink = "Yes";
   myStruct.item[1].guid.value = "http://" & CGI.HTTP_HOST;
   myStruct.item[1].title = "Item 1";
   myStruct.item[2] = StructNew();
   myStruct.item[2].category = ArrayNew(1);
   myStruct.item[2].category[1] = StructNew();
   myStruct.item[2].category[1].value = "Cat1";
   myStruct.item[2].category[2] = StructNew();
   myStruct.item[2].category[2].value = "Cat2";
   myStruct.item[2].description = StructNew();
   myStruct.item[2].description.value = "The second item in the feed";
   myStruct.item[2].guid = StructNew();
   myStruct.item[2].guid.isPermaLink = "Yes";
   myStruct.item[2].guid.value = "http://" & CGI.HTTP_HOST;
   myStruct.item[2].title = "Item 2";
</cfscript>

<cffeed action = "create"
   name = "#myStruct#"
   xmlVar = "myXML">


<cfcontent type="text/xml" reset="true"><cfoutput>#myXML#</cfoutput>

Please note the following:

  • The code was specifically written without external dependencies so that it will work on any ColdFusion 8 installation.
  • <cfsetting showdebugoutput="no"> can be a lifesaver when working with <cffeed>--I was tearing my hair out for a bit until I had that head-slapping moment when it dawned on me why I kept being told by the browser that the feed was invalid.
  • I consider it good coding practice to always scope variables, even those in the Variables scope. The only reason the above code doesn't use scoped variables is to keep it as similar as possible to the example code referenced at the top of this post.
  • If you're looking for information on the metadata properties for the feed itself, see Ray Camden's blog post on the subject.

Redirecting RSS feeds

After my last post (about my blog's move) generated a whopping 3 views (possibly all by me!), I began to believe that my suspicions that RSS readers may not like HTTP 302 redirects might be well-founded. So I checked out Full As a Goog and sure enough, it wasn't showing my new post some many hours after I posted it.

So I did a little digging into the matter of redirecting RSS feeds and I found that an HTTP 302 redirect (which is what I was using) should temporarily redirect the feed. I'm not sure why that wasn't working.

But it doesn't really matter because I don't truly want a temporary redirect, I want a permanent redirect. For that it appears there are two choices: use an HTTP 301 redirect or use an XML level redirect (further info on both is given at the above link). It is possible to generate either using ColdFusion (for the former, you would use <cfheader> and for the latter you just put the appropriate XML into your RSS XML output). The latter struck me as a more interesting approach so that is the one I am now using.

Does it work? I'm not sure--you tell me! If you were consuming the feed from its old location at http://www.joshuaadams.com/blog and your reader is now consuming the feed from its new location at http://blog.joshuaadams.com then yep, it worked for you. But if you're still showing the old feed, then no, it isn't working for you (although that then begs the question of how you ended up here). Comments letting me know if it worked for you are appreciated; comments letting me know it didn't work for you are even more appreciated.

My blog has moved!

I have made a slight change in the location of my blog: previously it was at http://www.joshuaadams.com/blog and now it can be found at http://blog.joshuaadams.com.

So is that old location given above now a broken link? Nope--if you hit a page in its old location, you will be redirected to its new location. Note that this is true not just for the main page of the blog but for any page. How does it work? Just a few lines of code for ColdFusion 8. Stay tuned for more details....

What I'm not sure about is how consumers of RSS feeds will react to this change--the RSS feed isn't present in its old location but requests for it in its old location will be redirected to its new location. However, I'm not sure how well readers will handle this. Please leave me a comment and let me know how yours does.

ColdFusion 8: more great features than you realize

Lest I become one of those people who has a blog but never posts:

ColdFusion has more great features than you realize. Well, okay, I can't legimately claim to know what you realize. But as I am coming up to speed in my job as ColdFusion Specialist, it strikes me just how many great features there are in ColdFusion 8. And my guess is I'm not the only one who would have that reaction.

Rather than expound on all these great features myself, let me instead point you to adobe.com for this list of new features in ColdFusion 8. In time I expect to post additional information and code samples for some of these features. Are you interested in learning more about any features in particular? If so, post a comment and let me know!

And the new Adobe ColdFusion Specialist is...me!

I am pleased to announce that I have accepted a Systems Engineer position in the role of ColdFusion Specialist with Adobe Systems, Inc. I am excited about working for Adobe and about the role as ColdFusion Specialist. What has me so jazzed up? Getting to work with ColdFusion (and also Flex, AIR, LiveCycle, and the many other great tools from Adobe) and at the same time with you, the ColdFusion user. I love ColdFusion, but what I love even more is working with ColdFusion users as they do new, better, bigger, and innovative things with ColdFusion! And that's exactly what I have been hired to do.

Over the past several years, I have had the pleasure of getting to know so many in the ColdFusion user community at conferences, user group meetings, and other events. I'm excited for this opportunity to focus on continuing those relationships and forging new ones. Because for me, that's the greatest thing about my job: I am here for you! If there is anything that you need from Adobe in regards to ColdFusion, I'm your man. So don't be shy--get in touch! I'm still in ramp up mode so I'm not going to list contact information here, but you can simply add a comment to this post or use the Contact link at the bottom of the page to send me a message. I look forward to hearing from you soon!

One more thing: not to make this sound too much like an awards acceptance speech, but the reality is that there are a number of people who deserve my thanks for their role in helping me get to the point where I was able to land this position. But rather than try to cover them all and risk missing any, I will instead turn my thanks to the Atlanta ColdFusion User Group as so many of those deserving my thanks are people I know through my involvement in ACFUG. Thanks ACFUG and those I know because of it--I appreciate you! If you're reading this and you're serious about your career and you're not attending meetings of your local user group, you need to start. If there is no local user group, you need to start one. And another great option--and the place to turn if absolutely no one lives near you such that any user group you would start would be a user group of one--is the Online ColdFusion Meetup.

2010-12-22: given the age and content of this post, it is difficult at this point to conceive of a legitimate comment that could be posted. Yet comments continue to be posted: spam. And it's strange because it is this blog post more than any other that receives these spam comments (I think it might be because this post is linked from Ben Forta's blog). So it seems wise to me then to stop the insanity by closing comments to this post. Should you have a legitimate comment you wish to post here, please contact me via the contact form here on my blog. Thanks!

Quality costs money

Look, there are exceptions to every rule, but generally, quality costs money--and the more quality, the more money it costs.

Today I was asked if I could DJ for 60% less than my minimum price for a wedding reception. My response in short was yes--if the budget is a shoestring with the event at a rec center and the frills at a minimum. I said, however, that if she is willing and able to pay for a nice venue, nice food, nice flowers, and so on, then if she wants me to DJ for her, she's also going to have to pay my rate, the rate of a nice DJ. The truth is that, from the perspective of my materials costs, I could justify the lower price. However, time is a precious resource: if I'm doing a job for you, how much time it takes me is an important consideration in how much I charge for that job. And I invest a large amount of time in DJing a wedding reception because that's what it takes to do it right. Now, that doesn't mean that anyone has to be willing to pay me what I ask. But people hire me. And they do pay me what I ask because they understand that quality costs money and what I'm asking is a great price for the value I deliver. (NOTE: again, there are exceptions to the "quality costs money" rule; for instance, maybe this particular prospect can find a DJ of equal or better quality for the price she wants to pay. But any DJ who charges what she wants and delivers quality on par with what I deliver is, in all truth, doing bad business--he/she isn't charging enough for his/her services...and time!)

What's this have to do with ColdFusion? Well, it reminds me of a great blog post about ColdFusion (see--you thought I'd put this post in the wrong category, didn't you?) from Jason Delmore. Give it a read if you haven't already.

BlogCFC was created by Raymond Camden. This blog is running version 5.9.002. Contact Blog Owner