<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	<channel>
	<title>FusionGrokker</title>
	<link>http://fusiongrokker.com/</link>
	<description>A blog about ColdFusion, Rich Internet Applications, and life as a developer.</description>
	<generator>Mango 1.3.1</generator>
	
	 
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/FusionGrokker" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
         <title>A better way to show and hide things with jQuery</title>
         <description>&lt;p&gt;Earlier today a friend asked me if I knew of a slick plugin for jQuery that makes it easy to show and hide form fields based on the selected value in a &lt;tt&gt;&amp;lt;select&amp;gt;&lt;/tt&gt; box. Unfortunately, I don't &amp;#8212; I've always just done stuff like that manually. And that definitely starts to get hairy with large complex forms where you want to show and hide different combinations of fields.&lt;/p&gt;

&lt;p&gt;A light bulb went off in my head though, and I quickly put together this example for him. Using a combination of jQuery and some cleverly placed CSS class names, you can very easily find the elements you want to show, and from there it's cake.&lt;/p&gt;

&lt;p&gt;So what I've put together here is a form with a select box, and each option has a value from 0 to 4. The form also contains 5 paragraphs (could just as easily be table rows, divs, fieldsets, or a plethora of other things), with class names like "show0" and "show3" &amp;#8212; indicating which status of the drop-down they should be displayed for. Luckily for us, you can &lt;a href="http://fusiongrokker.com/post/html-css-tip-specify-multiple-classes"&gt;assign multiple classes to an object&lt;/a&gt; which makes it insanely simple to setup different combinations of visible elements.&lt;/p&gt;

&lt;p&gt;In the example below, only a single paragraph is displayed for options 0, 1, and 4 &amp;#8212; but for options 2 and 3, two different paragraphs are shown. Selecting option 3 shows paragraphs 2 and 3 because they both have the class "show3", while selecting option 2 only shows paragraph 2 because while it does have the class "show2" none of the other paragraphs do.&lt;/p&gt;

&lt;p&gt;Update: Thanks to Charlie Griefer for reminding me of some of the root functionality of jQuery that I mistakenly left out of this example. I'm updating my example according to his comments.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://fusiongrokker.com/assets/content/jqMultiShow.html"&gt;Here's a working demo for you&lt;/a&gt;.&lt;/p&gt;

&lt;code&gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).ready(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$('#mySelect').change(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span class='cc_value'&gt;&amp;quot;#formContainer p:not('.alwaysShow')&amp;quot;&lt;/span&gt;).hide();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span class='cc_value'&gt;&amp;quot;#formContainer .show&amp;quot;&lt;/span&gt; + $('#mySelect').val()).show();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_comment'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//optional:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$('#mySelect').change();&lt;span class='cc_comment'&gt; // simulate a change event to trigger the above&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;formContainer&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class='cc_normaltag'&gt;&amp;lt;p class=&lt;span class='cc_value'&gt;&amp;quot;alwaysShow&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;select id=&lt;span class='cc_value'&gt;&amp;quot;mySelect&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;option value=&lt;span class='cc_value'&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;0&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;option value=&lt;span class='cc_value'&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;option value=&lt;span class='cc_value'&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;2&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;option value=&lt;span class='cc_value'&gt;&amp;quot;3&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;3&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;option value=&lt;span class='cc_value'&gt;&amp;quot;4&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;4&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/select&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class='cc_normaltag'&gt;&amp;lt;p class=&lt;span class='cc_value'&gt;&amp;quot;show0&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;I am displayed for option 0&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class='cc_normaltag'&gt;&amp;lt;p class=&lt;span class='cc_value'&gt;&amp;quot;show1&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;I am displayed for option 1&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class='cc_normaltag'&gt;&amp;lt;p class=&lt;span class='cc_value'&gt;&amp;quot;show2 show3&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;I am displayed for option 2 and option 3&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class='cc_normaltag'&gt;&amp;lt;p class=&lt;span class='cc_value'&gt;&amp;quot;show3 show4&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;I am displayed for option 3 and option 4&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class='cc_normaltag'&gt;&amp;lt;p class=&lt;span class='cc_value'&gt;&amp;quot;show4&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;I am displayed for option 4&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/code&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/UTgn4wh3nis/a-better-way-to-show-and-hide-things-with-jquery</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/a-better-way-to-show-and-hide-things-with-jquery</guid>
         <category>JavaScript</category><category>jQuery</category>
         <pubDate>Fri, 06 Nov 2009 18:40:57 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/a-better-way-to-show-and-hide-things-with-jquery</feedburner:origLink></item> 
      <item>
         <title>UDF: ArrayCollectionToQuery</title>
         <description>&lt;p&gt;Sometimes I find myself sending a query object from ColdFusion to Flex, for example, to bind to a DataGrid, and then I want to edit that query object and return it to ColdFusion to be saved in the database. Unfortunately, Queries are only a data type in ColdFusion. When sent to Flex, they get mapped to an ArrayCollection, and when you send that ArrayCollection back to ColdFusion, it isn't automatically converted back to a Query object (though lord knows that would be nice!).&lt;/p&gt;

&lt;p&gt;It's certainly possible to just treat that ArrayCollection as an array of structures &amp;#8212; because that's what it is &amp;#8212; and loop over it to extract the data you want. Sure. Be my guest. But ColdFusion has so many great functions designed to make working with Queries easier. Wouldn't it be great if you could just convert that ArrayCollection back to a Query?&lt;/p&gt;

&lt;p&gt;That's why I created this UDF, and I intend to submit it to CFLib once I know it's solid. I wanted to put this out to the community though to make sure it covers all of the necessary data types and doesn't have any errors. Can you see anything I've missed?&lt;/p&gt;

&lt;p&gt;Below is the code for the function as well as a unit test. To see how it handles bad/unexpected data, you can do something wacky like change one of the values inside the structs to be a struct instead of the simple value it is now.&lt;/p&gt;

&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;arrayCollectionToQuery&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfargument name=&lt;span class='cc_value'&gt;&amp;quot;arrayColl&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;Array&amp;quot;&lt;/span&gt; required=&lt;span class='cc_value'&gt;&amp;quot;true&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var qResult = '' /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var columnList = structKeyList(arrayColl[1]) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var typeList = ''/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var numericType = ''/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var k = '' /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var i = 0 /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop collection=&lt;span class='cc_value'&gt;&amp;quot;#arrayColl[1]#&amp;quot;&lt;/span&gt; item=&lt;span class='cc_value'&gt;&amp;quot;k&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif isNumeric(arrayColl[1][k])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='comment'&gt;&amp;lt;!--- decimal or integer? ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset numericType = &lt;span class='cc_value'&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop from=&lt;span class='cc_value'&gt;&amp;quot;1&amp;quot;&lt;/span&gt; to=&lt;span class='cc_value'&gt;&amp;quot;#arrayLen(arrayColl)#&amp;quot;&lt;/span&gt; index=&lt;span class='cc_value'&gt;&amp;quot;i&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif arrayColl[i][k] - fix(arrayColl[i][k]) gt&lt;span class='cc_numeric'&gt; 0&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset numericType = &lt;span class='cc_value'&gt;&amp;quot;decimal&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfbreak /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset typeList = listAppend(typeList, numericType) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfelseif isSimpleValue(arrayColl[1][k])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset typeList = listAppend(typeList, 'varchar') /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfelseif isBoolean(arrayColl[1][k])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset typeList = listAppend(typeList, 'bit') /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfelseif isDate(arrayColl[1][k])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset typeList = listAppend(typeList, 'date') /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfelse&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfthrow message=&lt;span class='cc_value'&gt;&amp;quot;Invalid ArrayCollection&amp;quot;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;detail=&lt;span class='cc_value'&gt;&amp;quot;All keys in your array collection must be of one of the following types: Numeric (Int or Float), String, Boolean, Date. The following key contains data that is not one of these types: `#k#`&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset qResult = queryNew(columnList, typeList) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop from=&lt;span class='cc_value'&gt;&amp;quot;1&amp;quot;&lt;/span&gt; to=&lt;span class='cc_value'&gt;&amp;quot;#arrayLen(arrayColl)#&amp;quot;&lt;/span&gt; index=&lt;span class='cc_value'&gt;&amp;quot;i&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset queryAddRow(qResult) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop collection=&lt;span class='cc_value'&gt;&amp;quot;#arrayColl[i]#&amp;quot;&lt;/span&gt; item=&lt;span class='cc_value'&gt;&amp;quot;k&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif not isNumeric(arrayColl[i][k]) and not isSimpleValue(arrayColl[i][k]) and not isBoolean(arrayColl[i][k]) and not isDate(arrayColl[i][k])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfthrow message=&lt;span class='cc_value'&gt;&amp;quot;Invalid ArrayCollection&amp;quot;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;detail=&lt;span class='cc_value'&gt;&amp;quot;All keys in your array collection must be of one of the following types: Numeric (Int or Float), String, Boolean, Date. The following key contains data that is not one of these types: `#k#`&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset querySetCell(qResult,k,arrayColl[i][k]) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn qResult /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset testData = [&lt;br /&gt;{Num=2, String='fubar!', Bool=true, Date=CreateDate(&lt;span class='cc_numeric'&gt;2009&lt;/span&gt;,&lt;span class='cc_numeric'&gt;05&lt;/span&gt;,&lt;span class='cc_numeric'&gt;2&lt;/span&gt;)},&lt;br /&gt;{Num=4.8, String='bufar!', Bool=false, Date=CreateDate(&lt;span class='cc_numeric'&gt;2009&lt;/span&gt;,&lt;span class='cc_numeric'&gt;06&lt;/span&gt;,&lt;span class='cc_numeric'&gt;1&lt;/span&gt;)},&lt;br /&gt;{Num=6, String='futbol!', Bool=true, Date=CreateDate(&lt;span class='cc_numeric'&gt;2009&lt;/span&gt;,&lt;span class='cc_numeric'&gt;07&lt;/span&gt;,&lt;span class='cc_numeric'&gt;12&lt;/span&gt;)},&lt;br /&gt;{Num=8, String='string!', Bool=false, Date=CreateDate(&lt;span class='cc_numeric'&gt;2009&lt;/span&gt;,&lt;span class='cc_numeric'&gt;08&lt;/span&gt;,&lt;span class='cc_numeric'&gt;9&lt;/span&gt;)},&lt;br /&gt;{Num=10, String='data type!', Bool=true, Date=CreateDate(&lt;span class='cc_numeric'&gt;2009&lt;/span&gt;,&lt;span class='cc_numeric'&gt;09&lt;/span&gt;,&lt;span class='cc_numeric'&gt;18&lt;/span&gt;)},&lt;br /&gt;{Num=12, String='yes', Bool=false, Date=CreateDate(&lt;span class='cc_numeric'&gt;2009&lt;/span&gt;,&lt;span class='cc_numeric'&gt;10&lt;/span&gt;,&lt;span class='cc_numeric'&gt;6&lt;/span&gt;)}&lt;br /&gt;] /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#testData#&amp;quot;&lt;/span&gt; label=&lt;span class='cc_value'&gt;&amp;quot;data in&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#arrayCollectionToQuery(testdata)#&amp;quot;&lt;/span&gt; label=&lt;span class='cc_value'&gt;&amp;quot;data out&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/AiKQ-1wUZEE/udf-arraycollectiontoquery</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/udf-arraycollectiontoquery</guid>
         <category>ColdFusion</category><category>Flex</category>
         <pubDate>Thu, 05 Nov 2009 14:20:04 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/udf-arraycollectiontoquery</feedburner:origLink></item> 
      <item>
         <title>Philly (Exton) CF Job available</title>
         <description>&lt;p&gt;I was hoping to have more time to get my ducks in a row before making an official announcement, but something's come up with a sense of urgency, so I'm just going to kind of unload on you. Sorry about that.&lt;/p&gt;

&lt;p&gt;I'm taking over as the manager of the &lt;a href="http://www.phillycfug.org/"&gt;Philly CFUG&lt;/a&gt;. I'm still working out the details of organizing our next meeting, but in the meantime I've setup a Twitter account, should you care to &lt;a href="http://twitter.com/PhillyCFUG"&gt;follow it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now, on to more pressing matters. I just posted this to the PhillyCFUG blog, and it went out via email to the blog subscribers. I figure it can't hurt to cross-post it here as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Automated Financial Systems, in Exton, is looking for a ColdFusion developer for immediate assistance. Some experience in server administration would be a bonus.&lt;/p&gt;

&lt;p&gt;They don't have an in-house resource for ColdFusion development, but have an immediate need to address errors that their website is generating, as well as a security issue; and they hope to have these problems addressed by Wednesday of next week &amp;#8211; November 4th.&lt;/p&gt;

&lt;p&gt;In addition, they would like assistance upgrading from an older version of ColdFusion (they think 5) to version 7.&lt;/p&gt;

&lt;p&gt;Contact Jerry ThompSon via email (&lt;a href="mailto:JThompSon@afsvision.com"&gt;JThompSon@afsvision.com&lt;/a&gt;) or via mobile phone (610-496-1456).&lt;/p&gt;
&lt;/blockquote&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/7vw74f4oWKo/philly-exton-cf-job-available</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/philly-exton-cf-job-available</guid>
         <category>Jobs</category><category>CFUG</category><category>ColdFusion</category><category>Philadelphia</category><category>Twitter</category>
         <pubDate>Thu, 29 Oct 2009 17:52:40 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/philly-exton-cf-job-available</feedburner:origLink></item> 
      <item>
         <title>Resolving Apache/ColdFusion connection error in MAMP Pro</title>
         <description>&lt;p&gt;I've been using &lt;a href="http://mamp.info/en/index.html"&gt;MAMP Pro&lt;/a&gt; for a while to do local &lt;a href="http://www.adobe.com/go/coldfusion"&gt;ColdFusion&lt;/a&gt; development on my Macbook. It makes installing, configuring, and connecting Apache, MySQL, and (shudder) PHP an absolute breeze. And with a little bit of know-how, you can add ColdFusion into the mix to make a stack that is not only easy to use, but fun. When I was consulting, it was well worth the $60 pricetag to be able to use multiple hostnames, but if you only need 1 hostname or are perfectly happy to work out of subfolders of http://localhost/, then the free version of MAMP would be fine for you.&lt;/p&gt;

&lt;p&gt;I'm not going to show you how to install ColdFusion 9 into MAMP Pro, because there is already a great video that shows &lt;a href="http://blog.flashgen.com/2009/06/16/configuring-coldfusion-mamp-pro/"&gt;how to install ColdFusion 8 into MAMP Pro&lt;/a&gt;, and the install process for CF9 is not different enough to warrant a whole new video by itself. Instead, I'm going to show you how to fix an error that I consistently ran into during the installation process detailed in that video.&lt;/p&gt;

&lt;p&gt;At right around the 19 minute mark of that video, the presenter has completed installing ColdFusion and configured MAMP to connect to it; so he restarts his MAMP services to give it a go. At this point, I get the error:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Start Apache failed&lt;/strong&gt;&lt;br/&gt;Apache wasn't able to start. Please check log for more information.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;How do you fix this? Well, why don't I show you?&lt;/p&gt;

&lt;p&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7308877&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7308877&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;If this version is too small, you can view it full screen, or you can &lt;a href="http://vimeo.com/7308877"&gt;watch the HD copy on Vimeo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hopefully this proves helpful to others out there that want to run CF9 on MAMP or MAMP Pro. I know it drove me nuts for a while.&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/u4V5FiPtf7Y/resolving-apache-coldfusion-connection-error-in-mamp-pro</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/resolving-apache-coldfusion-connection-error-in-mamp-pro</guid>
         <category>Adobe</category><category>Apple</category><category>ColdFusion</category>
         <pubDate>Wed, 28 Oct 2009 13:32:28 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/resolving-apache-coldfusion-connection-error-in-mamp-pro</feedburner:origLink></item> 
      <item>
         <title>Another angle on the Flash for iPhone announcement</title>
         <description>&lt;p&gt;Previously I wrote about &lt;a href="http://fusiongrokker.com/post/flash-on-the-iphone-a-hack-joke"&gt;my own feelings&lt;/a&gt; after the announcement that Flash will soon be compileable &lt;a href="http://forta.com/blog/index.cfm/2009/10/5/Adobe-MythHackers-Video"&gt;into a native iPhone application&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kendall Whitehouse, a fellow UPenn staff geek, was at MAX this year and &lt;a href="http://blogs.wharton.upenn.edu/staff/kendallwhitehouse/2009/10/adobes-new-attitude.html"&gt;has a great write-up on the situation from a business perspective&lt;/a&gt;. Not a whole lot of "news," per say, but definitely some interesting insight for anyone interested in the topic. Kendall also has &lt;a href="http://www.flickr.com/photos/15543694@N06/sets/72157622388720219/"&gt;a few&lt;/a&gt; sets &lt;a href="http://www.flickr.com/photos/15543694@N06/sets/72157622531406704/"&gt;of photos&lt;/a&gt; from &lt;a href="http://www.flickr.com/photos/15543694@N06/sets/72157622411652477/"&gt;MAX&lt;/a&gt; in his &lt;a href="http://www.flickr.com/photos/15543694@N06/sets/72157622412359805/"&gt;flickr photostream&lt;/a&gt;.&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/Q6hWz3Y1vk4/another-angle-on-the-flash-for-iphone-announcement</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/another-angle-on-the-flash-for-iphone-announcement</guid>
         <category>Adobe</category><category>Apple</category>
         <pubDate>Tue, 13 Oct 2009 11:47:34 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/another-angle-on-the-flash-for-iphone-announcement</feedburner:origLink></item> 
      <item>
         <title>ColdFusion Job Openings at UPenn</title>
         <description>&lt;p&gt;&lt;a href="http://www.wharton.upenn.edu/"&gt;The Wharton School of Business&lt;/a&gt;, where I work, currently has multiple ColdFusion developer positions open. One of them is even on &lt;a href="http://www.wharton.upenn.edu/learning/"&gt;my team&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The work is challenging and engaging, you'll work with several other ColdFusion developers, the clients &amp;#8212; ivy league professors, students, and staff &amp;#8212; have high expectations, the pay and benefits are competitive if not superior, and the work conditions are excellent (Example: free Starbucks coffee).&lt;/p&gt;
&lt;p&gt;If that sounds like the kind of development shop you want to work for, and you're in the greater Philadelphia area (or willing to relocate) then you should check out &lt;a href="https://jobs.hr.upenn.edu/"&gt;our job postings&lt;/a&gt;. (Search for "ColdFusion" in the description field)&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/pNgembrlFo8/coldfusion-job-openings-at-upenn</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/coldfusion-job-openings-at-upenn</guid>
         <category>ColdFusion</category><category>Community</category><category>Philadelphia</category>
         <pubDate>Tue, 06 Oct 2009 16:29:44 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/coldfusion-job-openings-at-upenn</feedburner:origLink></item> 
      <item>
         <title>Flash on the iPhone: A Hack Joke</title>
         <description>&lt;p&gt;Yesterday at Adobe MAX, it was announced that &lt;a href="http://forta.com/blog/index.cfm/2009/10/5/Adobe-MythHackers-Video"&gt;Flash will now compile into a native iPhone application&lt;/a&gt;. This is big news. &lt;strong&gt;Huge, even!&lt;/strong&gt; But it's also a poke in the eye to everyone who has been clamoring for a Flash Player plugin for the phone's Safari web browser, which is to say: millions of iPhone owners and countless people who refuse to buy one because of its lack of Flash support.&lt;/p&gt;

&lt;p&gt;Not to take away from what Adobe Engineers have done &amp;#8212; because it actually is pretty cool that Flash will compile into a native iPhone application &amp;#8212; but this is a bait and switch. This does (almost?) nothing for the real complaint: That embedded Flash widgets on the web (via the phone's Safari browser) are not usable. Apple's claim that the whole web is at your fingertips is still a bold faced lie.&lt;/p&gt;

&lt;p&gt;And let's be honest. Everyone knows it's Apple that's holding out, because they know all too well that the minute they let Flash onto the iPhone everyone will start writing their apps as Flash and posting them on the web, and stop jumping through Apple's App Store hoops &amp;#8212; and donating a percentage of their profits to Apple for the privilege. But while we're being honest, it's only fair to say that it's Apple's device, and it is certainly credit-worthy that they had foresight enough to know that Flash would hurt their business model. It's their device, and they are willing to suffer whatever consequences may come from their decision to block Flash. Obviously they're suffering&amp;#8230; all the way to the bank.&lt;/p&gt;

&lt;p&gt;That said, it would be refreshing if Steve Jobs would just come out and admit that they're not going to let Flash onto the iPhone because it would hurt their business. Part of me thinks the honesty and openness could itself hurt business, because I'm sure there are hold-outs out there, hoping and praying for Flash every night before bed; and admitting on public record that it will never happen could drive them away, but beating around the bush with answers like "we're working on it" and "we want it to happen" might fool some people into keeping their hopes alive. But it's possible that such openness could help, too. People might find the honesty and transparency refreshing &amp;#8212; I know I would &amp;#8212; and be more open to the idea of adopting the phone. But it won't happen. Apple isn't exactly known for its transparency.&lt;/p&gt;

&lt;p&gt;So, while I applaud Adobe for their engineering efforts, I think that this is a bad marketing move. Call a spade a spade, call a plugin a plugin, and don't try to pull the wool over people's eyes. I understand that Adobe has a working relationship with Apple that they need to maintain, and I don't have a problem with that. But I still feel dirty, like some shady back-alley dealer is pushing this Flash-iPhone compiler on me when I asked for a Safari plugin. And that itself takes away from the respect that the technology deserves.&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;em&gt;Full disclosure: I have an iPhone and love it to death; and I love Flash and Flex. I'd love to see them together on the iPhone, but I don't think it will ever happen.&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/CDnHUFHVA-o/flash-on-the-iphone-a-hack-joke</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/flash-on-the-iphone-a-hack-joke</guid>
         <category>Adobe</category>
         <pubDate>Tue, 06 Oct 2009 13:05:54 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/flash-on-the-iphone-a-hack-joke</feedburner:origLink></item> 
      <item>
         <title>When is "Free" better?</title>
         <description>&lt;p&gt;I just read Jeff Atwood's recent blog entry &lt;a href="http://www.codinghorror.com/blog/archives/001301.html"&gt;9 Ways Marketing Weasels Will Try to Manipulate You&lt;/a&gt;, and one part in particular struck a chord with me.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;3. It's "Free"!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ariely, Shampanier, and Mazar conducted an experiment using Lindt truffles and Hershey's Kisses. When a truffle was $0.15 and a kiss was $0.01, 73% of subjects chose the truffle and 27% the Kiss. But when a truffle was $0.14 and a kiss was free, 69% chose the kiss and 31% the truffle.&lt;/p&gt;
&lt;p&gt;According to standard economic theory, the price reduction shouldn't have lead to any behavior change, but it did.&lt;/p&gt;
&lt;p&gt;Ariely's theory is that for normal transactions, we consider both upside and downside. But when something is free, we forget about the downside. "Free" makes us perceive what is being offered as immensely more valuable than it really is. Humans are loss-averse; when considering a normal purchase, loss-aversion comes into play. But when an item is free, there is no visible possibility of loss.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I feel like there is some implication here about Open Source software, that I hope you'll indulge me in exploring for a bit. So to lay the groundwork, I guess what I'm looking at is the idea that Open Source software has some added value by virtue of being free that makes up for any shortcomings pointed out by a non-free alternative. Now, I fully understand that Open Source doesn't always mean free, just as free doesn't always mean Open Source; but by and large, Open Source projects are free, and that's what I am referring to here.&lt;/p&gt;

&lt;p&gt;I can go no further without mentioning that I write open source software ("OSS") myself, and examining exactly why. I do it because I'm passionate about software in general, because I enjoy doing it as a hobby (as some might enjoy fishing or playing basketball), and because nobody would pay any attention to it if I charged. I would know, because &lt;em&gt;I wouldn't pay any attention to the software I write in my free time if it were written by someone else and weren't free&lt;/em&gt;. The things I spend my free time on aren't important enough to enough people to make money selling them. And that's fine; after all it's a hobby, not a second job. If it weren't fun, I wouldn't do it.&lt;/p&gt;

&lt;p&gt;There are people who write OSS so that they can then charge to support it, which I guess defines the Professional Open Source Software ("POSS") category.&lt;/p&gt;

&lt;p&gt;And I guess that leaves the semi-anonymous, seemingly hobbyist coder who developed a free (OSS) alternative to some non-free product, or had some crazy idea and took the time to flesh it out into something semi-usable. I imagine this to be representative of 80% of the projects on sites like SourceForge.&lt;/p&gt;

&lt;p&gt;So to further narrow down the scope a bit, I'll only be talking about the portion of the last group that developed a free (OSS) alternative to a non-free product.&lt;/p&gt;

&lt;p&gt;I should also say up front that &lt;em&gt;I am incredibly cheap&lt;/em&gt;, especially so when it comes to software. I am willing to put up with a not-insignificant amount of headache to save money. This comes as no surprise at all to me, because if there were no free option I would go without rather than spending the money, in most cases. Maybe this is counter-intuitive as a software developer, but I'm also not trying to "make it" selling software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enough beating around the bush, how about a concrete example?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Obviously, I am a ColdFusion developer. I have been &lt;a href="http://fusiongrokker.com/page/about-me"&gt;for a long time&lt;/a&gt;, and it should come as no surprise that as a software developer who is passionate about both hobbyist coding and ColdFusion, my pet projects are ColdFusion projects. I bet you already know where I'm going with this.&lt;/p&gt;

&lt;p&gt;ColdFusion hosting &amp;#8212; or rather, affordable ColdFusion hosting that doesn't suck &amp;#8212; has been an often complained about problem. And as a hobbyist, and a cheap one at that, it just wasn't possible to get &lt;strong&gt;good&lt;/strong&gt; CFML hosting that was powerful enough to do more than host a few static files; basically nullifying the fact that it was CFML-capable. Enter &lt;a href="http://www.getrailo.com"&gt;Railo&lt;/a&gt;. There is, of course, also &lt;a href="http://www.openbluedragon.org/"&gt;Open Blue Dragon&lt;/a&gt;, but &amp;#8212; probably due to the bad taste left in the community's mouth by New Atlanta (deserved or not) &amp;#8212; it has sort of become the unwanted step-child in the OSS CFML Engine market.&lt;/p&gt;

&lt;p&gt;Railo (and OBD) are free and Open Source alternatives to Adobe ColdFusion, both written in Java and fairly easy to setup (assuming you have some working knowledge of Apache and Tomcat), so I expect that we'll see more and more affordable CFML hosting popping up in the next year. And while lower prices are better, they're still not as low as other free development platforms. I got php hosting for $12 per year once &amp;#8212; nothing incredible, but hosting nonetheless &amp;#8212; (and the guy is still in business, if you can believe that), but prices for Railo hosting are hovering around $5-7 per month at the moment. Doing the math, that comes out to 260 months (21+2/3 years) of hosting before you've paid the cost of a Standard-Edition license. That's &lt;strong&gt;worlds&lt;/strong&gt; more affordable for the hobbyist, but still not exactly a level playing field.&lt;/p&gt;

&lt;p&gt;I also had the thought today that the relationship between Railo and Adobe ColdFusion is not altogether different from the relationship that must exist between Mono and Microsoft's .Net platform. I don't think anyone gravitates to C# because Mono is free. They do it because they like the language &amp;#8212; and oh, hey, they have the option of a free platform. I think those same types of people are the majority of people that use Railo. (There's also the case of someone who &lt;a href="http://corfield.org/blog/index.cfm/do/blog.entry/entry/ColdFusion_in_the_Cloud_and_clustering"&gt;needs to break out of a somewhat restrictive licensing scheme, even though they're willing to pay for the licenses&lt;/a&gt;, but that's an edge case.)&lt;/p&gt;

&lt;p&gt;So, with all of these thoughts swirling around in my head, I'm asking myself one question: Given no significant monetary restraint (i.e. deciding for my business, not myself), which platform would I choose to do CFML development? Or, more succinctly, which is &lt;em&gt;better&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Given the current state of things, Adobe ColdFusion wins in my perspective. The fact that they have a team of engineers continuously improving the platform, and that it continues to be innovative and backward compatible shows a commitment to making ColdFusion the best it can be; and that they have a roadmap planned out for (publicly) at least another 2 major versions, and that it's a giant company with a diverse set of products and revenue streams means that it's not likely to give up on the product without a fight. I've also found ColdFusion to be much easier to install and fine-tune in a production environment. That said, I have to give a nod of respect to Railo's tiny download footprint and "Express" package for getting a development environment online in (literally) minutes; both of which, by the way, are also characteristics of Open BD.&lt;/p&gt;

&lt;p&gt;Do they compete for the same market? Probably not much. Railo's core market, as far as my untrained eye can tell, is people who would otherwise not have CFML hosting; while Adobe is focused on Enterprise licensing. But am I gushing over Railo? No. Why is that? It seems to be exactly what I needed for so many years.&lt;/p&gt;

&lt;p&gt;The fact of the matter is that (full disclosure!) this server runs Adobe ColdFusion 8, but I don't own a license for it. I was lucky enough to meet some people at CFUnited 2008 that were frustrated with the same things I was, and I convinced them that we should go in together on a dedicated server and split the hosting costs; and one of them is self employed doing CFML consulting and had a CF 6 license he was planning to upgrade to CF8 anyway. We now share the server and are all happy to have left the squalor of shared CFML hosting behind.&lt;/p&gt;

&lt;p&gt;I might be singing a different tune if my circumstances were different, but from where I stand right now, being free doesn't make Railo (or OBD) any better than Adobe ColdFusion. As long as Adobe continues to lead in CFML innovation, and be responsive to the CFML community, I don't see that changing.&lt;/p&gt;

&lt;p&gt;What do you think? Does "Free" automatically mean better to you? You &lt;em&gt;are&lt;/em&gt; entitled to your own opinion&amp;#8230;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/NGPyp06vQMk/when-is-free-better</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/when-is-free-better</guid>
         <category>ColdFusion</category><category>Community</category>
         <pubDate>Fri, 11 Sep 2009 19:50:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/when-is-free-better</feedburner:origLink></item> 
      <item>
         <title>CFUnited 2010</title>
         <description>&lt;p&gt;I registered for CFUnited 2010 over the weekend. Unfortunately, I wasn't able to attend CFUnited 2009 last month, but I'll be there next year! If you're planning on going, I would encourage you to register now.&lt;/p&gt;
&lt;p&gt;The price is as low as it's going to get: $499 for the 3-day package, and "a special gift will be also be added to each of the first 200 registered attendees" (quoted from the CFUnited newsletter).&lt;/p&gt;
&lt;p&gt;See you there!&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/SldHCh9gGUE/cfunited-2010</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/cfunited-2010</guid>
         <category>CFUnited</category>
         <pubDate>Tue, 08 Sep 2009 13:07:56 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/cfunited-2010</feedburner:origLink></item> 
      <item>
         <title>FW/1: Worth a look</title>
         <description>&lt;p&gt;I'm betting that &lt;a href="http://corfield.org/"&gt;Sean Corfield&lt;/a&gt; doesn't need me to evangelize his software to garner attention for it. I'm a relative nobody &amp;#8212; standing in his shadow, so to speak. But it's good, so I feel compelled to share my experience with you.&lt;/p&gt;
&lt;h3&gt;Disclaimer&lt;/h3&gt;
&lt;p&gt;I should start by saying that I am &lt;em&gt;generally&lt;/em&gt; pro-framework. They aren't a silver bullet, and each tries to solve some set of common problems in varying ways, so each has its place; but for larger projects, or projects written collaboratively by a larger team, or projects that plan on having a long life-span requiring some level of maintenance, I've found &lt;a href="http://en.wikipedia.org/wiki/Front_controller"&gt;front controller&lt;/a&gt; frameworks to be quite useful. Not only that, but specialty frameworks like &lt;a href="http://www.coldspringframework.org"&gt;ColdSpring&lt;/a&gt; and &lt;a href="http://swizframework.org"&gt;Swiz&lt;/a&gt; have been incredibly useful and eye-opening to me. I suspect that &lt;a href="http://www.transfer-orm.com/"&gt;Transfer&lt;/a&gt; would be on that list too, if I'd had time to learn it yet.&lt;/p&gt;
&lt;p&gt;So, if you're anti-framework, you may not agree with my reasoning. Or, for that matter, depending on your reasons for being anti-framework, you may really agree with me a lot.&lt;/p&gt;
&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://fw1.riaforge.org/"&gt;FW/1&lt;/a&gt; is a front controller framework whose primary strength, in my opinion, is its simplicity. Too often, framework authors (or authoring teams) get swept up in features that only a percentage of the framework users will use, causing needless bloat for the remaining users. FW/1 seeks to obliterate bloat, and I think it succeeds masterfully.&lt;/p&gt;
&lt;h3&gt;Why I Love It&lt;/h3&gt;
&lt;p&gt;I won't drone on and on about how it works. Some &lt;a href="http://fw1.riaforge.org/wiki/"&gt;documentation&lt;/a&gt; is available (and getting better all the time), and the framework itself is only 626 lines of code as of &lt;a href="http://fw1.riaforge.org/blog/index.cfm/2009/8/4/FW1-05-Available"&gt;this morning's release&lt;/a&gt; &amp;#8212; most of it well commented &amp;#8212; so if nothing else, you can look at the source to figure things out. But what I will tell you is why I love it.&lt;/p&gt;
&lt;p&gt;Due to feature bloat, many other frameworks load lots of extra objects (CFC's) and we have to face facts: Although leaps and bounds have been made in improving object instantiation time with ColdFusion 8 and again with ColdFusion 9, it's still a noticeable detriment to the page load time for the user that spins up the application for the first time since it timed out; and that time scales up with the size and complexity of your application. More events means more config, which means more load time &amp;#8212; even if it's spread throughout the application life cycle with lazy loading. To put it bluntly: things are getting better, but they're just not quite &lt;em&gt;there&lt;/em&gt; yet. (I'm told Railo has excellent object instantiation times, but don't have any experience to draw on.)&lt;/p&gt;
&lt;p&gt;Server.cfc, added in ColdFusion 9, will give us a way to spin up the application before the first user accesses a page, but what it doesn't do is keep the application from timing out. That may not be a problem for a site with hundreds of thousands of users, but for a start-up company, or even just a simple blog application that makes use of a framework, that load time after application timeout can be &lt;em&gt;so freaking annoying.&lt;/em&gt; Even though I consider myself pro-framework, that load time is what I would consider my number one complaint about the front controller frameworks I've worked with. On nice hardware with lots of memory and a fast CPU, it may not matter much, but for an independent developer on shared hosting it can be a nightmare. In the past I've written scheduled jobs from two different servers to ping each other and keep the applications from timing out, but that is far from ideal.&lt;/p&gt;
&lt;p&gt;All of this griping has just been to make the point of how awesome FW/1's simplicity is. It's 1 object: &lt;tt&gt;Application.cfc&lt;/tt&gt;. For cleanliness and separation purposes, it's written as a base class from which you extend your application's &lt;tt&gt;Application.cfc&lt;/tt&gt;, but for all intents and purposes, you could rename &lt;tt&gt;Framework.cfc&lt;/tt&gt; to &lt;tt&gt;Application.cfc&lt;/tt&gt; and run your application along side it with a few lines of configuration. &lt;em&gt;That's it.&lt;/em&gt; When my application starts, it just starts.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="/assets/content/freebees.runtime.png" /&gt;&lt;/p&gt;
&lt;p&gt;Speed is a feature, &lt;em&gt;and FW/1 nails it.&lt;/em&gt; In addition, I'm in love with its simplicity. If something's not working quite right &amp;#8212; or as is more often the case, if I've misunderstood the order that things run &amp;#8212; I can dive right into the code of the framework and figure out why I'm getting an error within a few minutes. There are no sprawling api methods to keep track of; only one data construct: "rc" (request context) which passes form, url, and service-result data between the controller and the view.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No XML.&lt;/strong&gt; None. Nada. Zilch. I had at one point entertained the idea of writing a Model-Glue plugin, or fork, that would allow configuration to be specified as CFML or as JSON, but I never got around to trying it. Now, with FW/1, I don't have to write any XML.&lt;/p&gt;
&lt;p&gt;I've yet to explore the layouts feature, but I know I will, and I'll be happy to have it. I know it can &lt;em&gt;optionally&lt;/em&gt; integrate with ColdSpring, and I'm happy about that. And, with a few minor exceptions, that's about all it does. &lt;strong&gt;And I'm thrilled about that.&lt;/strong&gt;&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/_5ZIgGUmz0o/fw-1-worth-a-look</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/fw-1-worth-a-look</guid>
         <category>Frameworks</category>
         <pubDate>Tue, 04 Aug 2009 16:06:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/fw-1-worth-a-look</feedburner:origLink></item> 
      <item>
         <title>Here's hoping my iPhone doesn't get hacked&amp;#8230;</title>
         <description>&lt;p&gt;&lt;em&gt;This started as an email to my friends and family that are iPhone owners, but I figured I might as well post it here too.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I'm not sure how true or severe this is, but I figure it's better to have information in advance so you know what to expect. It seems to be a legitimate article from a reputable source&amp;#8230; so I'm fairly convinced it's true.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.forbes.com/2009/07/28/hackers-iphone-apple-technology-security-hackers.html"&gt;How To Hijack 'Every iPhone in the World'&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My Summary:&lt;/strong&gt; There's a bug in the iPhone SMS software that allows someone to send you a series of SMS messages, only one of which will show up. The guy in the article says the visible message from his version will only have 1 character, a square, but his method could be easily changed by another hacker to display another message, perhaps to look more innocuous. It looks like it will work in the same fashion as an internet worm: Spreading by sending itself to your contacts &amp;#8212; so you will probably get the message from someone you know.&lt;/p&gt;
&lt;p&gt;The only way to stop it from spreading is to immediately turn your phone off after receiving the message. It's not clear if or when you'll be able to turn it back on.&lt;/p&gt;
&lt;p&gt;I would assume, but am not sure, that if you immediately turned it off, and then only turned it back on when you were ready to immediately restore from your most recent backup (which is made when you connect to iTunes), that &lt;em&gt;might&lt;/em&gt; remove the malicious code&amp;#8230; but then it's just a matter of time until you get it again. The more people that know you, the better your chances for getting infected (and again, and again, and again&amp;#8230;).&lt;/p&gt;
&lt;p&gt;Scary stuff! I hope Apple addresses this quickly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; A friend informed me that hitting the Check for Update button in iTunes netted him the 3.0.1 firmware. Indeed, it's now available and the only note in the change log was that the SMS bug had beed addressed. I can finally stop worrying.&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/BT4-ZJpxGcY/here-s-hoping-my-iphone-doesn-t-get-hacked</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/here-s-hoping-my-iphone-doesn-t-get-hacked</guid>
         <category>Apple</category>
         <pubDate>Thu, 30 Jul 2009 16:11:57 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/here-s-hoping-my-iphone-doesn-t-get-hacked</feedburner:origLink></item> 
      <item>
         <title>Related Entries 1.1.2 released</title>
         <description>&lt;p&gt;I'm happy to announce that my Related Entries plugin for Mango Blog has finally gotten the attention it so desperately needed.  I've been swamped at work (in a good way &amp;#8212; up to my eyeballs in learning Flex and writing applications for classroom use), and just haven't had the energy or brain power to work on these projects when I get home.  I owe a debt of gratitude to my wife, who graciously allows me an evening every now and then away from some family and household obligations to work on projects like this; and to &lt;a href="http://www.visual28.com/"&gt;Mark Aplet&lt;/a&gt;, who is always willing to be my crash test dummy. In addition to today's update for Related Entries, I have some updates for &lt;a href="/archives/search/?term=scribe"&gt;Scribe&lt;/a&gt; in the pipeline as well.&lt;/p&gt;
&lt;p&gt;The short version of the story is that I've fixed some significant bugs:
&lt;ul&gt;
	&lt;li&gt;Railo incompatibility due to core function name collision (part of &lt;a href="http://jsonutil.riaforge.org"&gt;JSONUtil&lt;/a&gt;, but I've adjusted for it. I've also &lt;a href="http://jsonutil.riaforge.org/index.cfm?event=page.issue&amp;issueid=C94CDB16-ABCA-E366-CC12066B3D7F42A0"&gt;filed a bug report&lt;/a&gt; and am working with Nathan to find the best solution for it.)&lt;/li&gt;
	&lt;li&gt;Case-sensitive Operating System incompatibility &amp;#8212; I was mixing references to "jsonutil" with a file named "JSONUtil".&lt;/li&gt;
	&lt;li&gt;Reverse-links (when you relate post A to post B, I automatically relate post B back to post A &amp;#8212; this is called a reverse link) were being improperly stored, and in most cases would be displayed on your blog, but you could not remove them in admin.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;The case-sensitivity thing is a common gotcha, but I am a human and I work on Windows/OSX most of the time, where this isn't a problem. Please forgive the error. To make up for it, I'm offering Related Entries at &lt;em&gt;half price&lt;/em&gt; all this week!&lt;/p&gt;
&lt;p&gt;Fixing the reverse-links has proven to be a tricky task. I've tested this now on ColdFusion 8, ColdFusion 9, and Railo; and I am fairly confident that I've got a decent solution. You have two options.&lt;ol&gt;
	&lt;li&gt;For users who use SQL Server as your database, &lt;em&gt;and&lt;/em&gt; have fairly high permissions, I have &lt;a href="http://svn.riaforge.org/mangorelated/trunk/misc/RelEntries-FixData.sql"&gt;&lt;strong&gt;an SQL script&lt;/strong&gt;&lt;/a&gt; that should fix the data for you. The only caveat with the script is that it assumes your Mango install's tables &lt;strong&gt;do not use a table prefix&lt;/strong&gt;. If they do, you'll need to edit the script accordingly. (Update references to both &lt;tt&gt;entry_custom_field&lt;/tt&gt; and &lt;tt&gt;entry&lt;/tt&gt; to &lt;tt&gt;[prefix]entry_custom_field&lt;/tt&gt; and &lt;tt&gt;[prefix]entry&lt;/tt&gt;, respectively.)&lt;br/&gt;&lt;br/&gt;&lt;em&gt;Of course, you should back up your database before running this script. I will apologize profusely if it messes something up, but that's about all you'll get from me.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
	&lt;li&gt;For MySQL users, or SQL Server users who don't have adequate permission to run a custom script, the plugin should be (somewhat) self-correcting. If you know you have an entry with some strange behavior around Related Entries: edit that entry, double-click each related entry in the 3rd listbox to remove it &amp;#8212; until the box is empty, and then add related entries back. This should fix most otherwise-unexplainable issues. Unfortunately, I don't think it will fix reverse-links that you can't remove. I hope to provide another release soon that will automatically fix these, but I wanted to get this part of the fix out there, so that at least no more bad data is created.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;No matter which of the above two options you choose, you should update to prevent further bad data from being created.&lt;/p&gt;
&lt;p&gt;And don't forget to grab &lt;a href="http://svn.riaforge.org/mangorelated/trunk/misc/RelEntries-FixData.sql"&gt;&lt;strong&gt;the SQL script&lt;/strong&gt;&lt;/a&gt;, if you have the ability to run it.&lt;/p&gt;
&lt;dl class="plugin-data"&gt;
&lt;dt&gt;Plugin:&lt;/dt&gt;
&lt;dd&gt;Related Entries&lt;/dd&gt;
&lt;dt&gt;Version:&lt;/dt&gt;
&lt;dd&gt;1.1.2&lt;/dd&gt;
&lt;dt&gt;Requires:&lt;/dt&gt;
&lt;dd&gt;Mango Blog 1.3+&lt;/dd&gt;
&lt;dt class="install"&gt;Auto-install URL:&lt;/dt&gt;
&lt;dd class="install"&gt;&lt;a href="/get/RelatedEntries"&gt;http://fusiongrokker.com/get/RelatedEntries&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/qrINhLTn7nw/related-entries-1-1-2-released</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/related-entries-1-1-2-released</guid>
         <category>My projects</category><category>Mango</category>
         <pubDate>Thu, 30 Jul 2009 11:30:30 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/related-entries-1-1-2-released</feedburner:origLink></item> 
      <item>
         <title>Happy Birthday FusionGrokker.com!</title>
         <description>&lt;p&gt;I officially moved my blog to this domain &lt;a href="/post/goodbye-wordpress-hello-mango"&gt;today in 2008&lt;/a&gt;. Prior to its life on this domain, I was writing this blog as a sub-folder on the domain I use for my family blog, since April of 2007.&lt;/p&gt;
&lt;p&gt;So happy 1st birthday, FusionGrokker.com! It's been a fun year. Here's to another.&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/7PySK4Biaas/happy-birthday-fusiongrokker-com</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/happy-birthday-fusiongrokker-com</guid>
         <category>Meta</category>
         <pubDate>Thu, 23 Jul 2009 12:00:36 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/happy-birthday-fusiongrokker-com</feedburner:origLink></item> 
      <item>
         <title>Deciphering the new Local Scope</title>
         <description>&lt;p&gt;Recently it was announced that ColdFusion 9 will add a way to explicitly access the existing "var" scope inside functions, &lt;a href="http://forta.com/blog/index.cfm/2009/6/21/The-New-ColdFusion-LOCAL-Scope" mce_href="http://forta.com/blog/index.cfm/2009/6/21/The-New-ColdFusion-LOCAL-Scope"&gt;using a new scope named "local"&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There has been some confusion, including on my own part, about exactly how it is implemented &amp;#8212; so I thought I would do what I can to clear it up.&lt;/p&gt;
&lt;p&gt;For starters, and as is always a top priority with ColdFusion upgrades, old code shouldn't break because of this change. While it is true that the following two lines are analagous, they are both still supported for the forseeable future:&lt;/p&gt;&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var=&lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt; foo=&lt;span class='cc_value'&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset local.foo=&lt;span class='cc_value'&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfset&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfset&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In addition, you will be able to create var/local-scoped variables anywhere in the method, not just at the top. Right off the bat, this is awesome and can cut down on quite a bit of typing. This:&lt;/p&gt;&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var=&lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt; foo=&lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='comment'&gt;&amp;lt;!--- or: &amp;lt;cfset local.foo = &lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt; /&amp;gt; ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfquery name=&lt;span class='cc_value'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt; ...=&lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfquery&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfset&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;can become this, if you like:&lt;/p&gt;&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfquery name=&lt;span class='cc_value'&gt;&amp;quot;local.foo&amp;quot;&lt;/span&gt; ...=&lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfquery&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;How awesome is that? I'll tell you. &lt;i&gt;Really&lt;/i&gt; awesome.&lt;/p&gt;
&lt;p&gt;Now, on to some trickier things&amp;#8230;&lt;/p&gt;
&lt;p&gt;The "local" scope gives you explicit access to variables set in this scope. The scope has always been there; CF9 is just adding the local scope so that you can explicitly access it (read from it). &lt;/p&gt;
&lt;p&gt;Previously, the only way to read variables from this scope was to &lt;a href="/post/scope-nazi" mce_href="/post/scope-nazi"&gt;&lt;i&gt;imply&lt;/i&gt;&lt;/a&gt; that was where you wanted them from, by not including a scope name. ColdFusion would then &lt;i&gt;infer&lt;/i&gt; that &amp;#8212; since the variable exists in the unnamed local scope &amp;#8212; that's what you wanted. To put it more explicitly, &lt;a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Variables_32.html" mce_href="http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Variables_32.html"&gt;ColdFusion checks for the requested variable in several different scopes&lt;/a&gt;, and inside a method the unnamed local scope is at the top of that list. The first scope that contained a matching variable would be the value you got back. Now we'll have an explicit way to specify which scope to read from, including the previously-unnamed local scope.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Does this mean you don't have to var-scope any more?&lt;/i&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Absolutely not.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;But now you have two choices: Use the "var" keyword, or the local scope. As before, (and, I'm sure, partly to maintain backwards compatibility) if you neglect to include one of these indications that the variable is local, it will go into the object's global "variables" scope, which &lt;a href="http://www.coldfusionjedi.com/index.cfm/2008/3/18/Ask-a-Jedi-So-what-happens-when-you-dont-var-scope" mce_href="http://www.coldfusionjedi.com/index.cfm/2008/3/18/Ask-a-Jedi-So-what-happens-when-you-dont-var-scope"&gt;if not taken into proper consideration, is not thread-safe&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;What happens to &amp;lt;cfset var local=structNew()/&amp;gt; ?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Without the ability to explicitly reference the unnamed local scope, the convention of creating a var-scoped structure named "local" was adopted as a community standard over years since the popularization of CFCs. As a result, you'll see a lot of existing code that has a var-scoped "local" structure.&lt;/p&gt;
&lt;p&gt;If no special exceptions were made, then what you might end up with would be your custom "local" structure inside the local scope, something like the following:&lt;/p&gt;
&lt;p&gt;&lt;img src="/assets/content/localscope1.png" mce_src="/assets/content/localscope1.png" alt="What the addition of the local scope might have looked like..." width="240" height="195"&gt;&lt;/p&gt;
&lt;p&gt;Seems logical, right? Well that's not what happens. For whatever reason, in their infinite wisdom (and who am I to argue?), Adobe decided the better thing to do was to detect this case, and &lt;strike&gt;force the new structure into the object's global "variables" scope, so instead, this is what you end up with:&lt;/strike&gt; &lt;strong&gt;&lt;em&gt;Update:&lt;/em&gt;&lt;/strong&gt; It just gets ignored, as Ben Forta's post states. (The confusion here was that at the time he wrote that, the beta didn't do what he said it would. It's since been fixed.)&lt;/p&gt;
&lt;p&gt;&lt;img src="/assets/content/localscope2.png" mce_src="/assets/content/localscope2.png" alt="What the addition of the local scope actually looks like (update: only for a short period of time during the beta)" width="242" height="135"&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230; With one small exception, that I've found so far: If you execute a query and assign it to the local scope, like my 2nd code sample above (&lt;tt&gt;&amp;lt;cfquery name="local.foo"&amp;gt;&lt;/tt&gt;), for some odd reason, a key named "cfquery.executiontime" is added to the object's global variables scope:&lt;/p&gt;
&lt;p&gt;&lt;img src="/assets/content/localscope3.png" mce_src="/assets/content/localscope3.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;For the most part, you can probably ignore that. But, on the off chance that you need it, now you know where to find it. Oh, and notice that it's got a period as part of the key name, so you can't use "variables.cfquery.executiontime" (well, ok, it might work, I didn't try&amp;#8230;), but you would be better off using the syntax: &lt;tt&gt;foo = variables['cfquery.executiontime'];&lt;/tt&gt; &amp;#8230; and it's not thread-safe. So that's probably a bug, and will probably get fixed before release.&lt;/p&gt;
&lt;p&gt;Scope precedence is still exactly the same as it was previously:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Function local (UDFs and CFCs only)&lt;/li&gt;
&lt;li&gt;Thread local (inside threads only)&lt;/li&gt;
&lt;li&gt;Arguments&lt;/li&gt;
&lt;li&gt;Variables (local scope)&lt;/li&gt;
&lt;li&gt;Thread&lt;/li&gt;
&lt;li&gt;CGI&lt;/li&gt;
&lt;li&gt;Cffile&lt;/li&gt;
&lt;li&gt;URL&lt;/li&gt;
&lt;li&gt;Form&lt;/li&gt;
&lt;li&gt;Cookie&lt;/li&gt;
&lt;li&gt;Client&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Server, Application, Session, Request, and Attributes scopes (still) require that they are explicitly named in order to read a variable from them. (Did I miss any?)&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/kY9ZPvgKWRg/deciphering-the-new-local-scope</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/deciphering-the-new-local-scope</guid>
         <category>ColdFusion</category><category>Centaur</category>
         <pubDate>Thu, 09 Jul 2009 19:22:16 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/deciphering-the-new-local-scope</feedburner:origLink></item> 
      <item>
         <title>Flex &amp; ColdFusion position in the Philadelphia Area</title>
         <description>&lt;p&gt;A recruiter contacted me to ask if I knew anyone looking for ColdFusion and Flex work in the Philadelphia area. Unfortunately, I don't. If I did, I would probably steal them to fill an open position in my department. But in hopes that someone out there looking for work in the Philadelphia suburbs might fit, I offered to post the information here.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Flex/ColdFusion Developer needed for a 3 week project in Malvern PA.&lt;/p&gt;
&lt;p&gt;Please contact Jacky Barry, &lt;a href="mailto:j.barry@thebossgroup.com"&gt;j.barry@thebossgroup.com&lt;/a&gt; or 610-668-3456&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It sounds like freelancers and moonlighters might be able to take it on, but I'm not sure if it requires working on-site or during normal business hours.&lt;/p&gt;</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/dOBKm6pfe_k/flex-coldfusion-position-in-the-philadelphia-area</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/flex-coldfusion-position-in-the-philadelphia-area</guid>
         <category>Jobs</category>
         <pubDate>Fri, 26 Jun 2009 14:58:22 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/flex-coldfusion-position-in-the-philadelphia-area</feedburner:origLink></item> 
   </channel>
</rss>
