<?xml version="1.0" encoding="utf-8"?>

			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>iKnowKung(Foo).Blog();</title>
			<link>http://iknowkungfoo.com/blog/index.cfm</link>
			<description>Adrian J. Moreno on ColdFusion, jQuery, HTML5, Web &amp; Mobile Application Architecture</description>
			<language>en-us</language>
			<pubDate>Tue, 18 Sep 2018 04:33:08 -0500</pubDate>
			<lastBuildDate>Tue, 02 Jul 2013 22:59:00 -0500</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>blogfoo@iknowkungfoo.com</managingEditor>
			<webMaster>blogfoo@iknowkungfoo.com</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>blogfoo@iknowkungfoo.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			<item>
				<title>Code and Video from my ColdBox Developers Week 2013 Presentation</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2013/7/2/Code-and-Video-from-my-ColdBox-Developers-Week-2013-Presentation</link>
				<description>
				
				I gave this talk at cfObjective() 2013 using an application built with no MVC framework. In &quot;Better UI Means Better UX&quot;, I rebuilt the Kung Foo Gallery application using the ColdBox MVC framework. I was able to get a bit more in depth during this presentation (and all of my examples worked).&lt;h2&gt;Slides&lt;/h2&gt;

The slides are the same ones I showed at cfObjective(). You can find them &lt;a href=&quot;https://dl.dropboxusercontent.com/u/3882276/presentations/Modern_ColdFusion_Application_User_Interfaces.pdf&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; on Dropbox.

&lt;h2&gt;Recording&lt;/h2&gt;

&lt;a href=&quot;http://experts.adobeconnect.com/p8hy7ox7mli/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;The recording&lt;/a&gt; via Adobe Connect.

&lt;h2&gt;Kung Foo Gallery&lt;/h2&gt;

The application code can be found &lt;a href=&quot;https://github.com/iknowkungfoo/KungFooGallery-Simple-ColdBox&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;in this repository&lt;/a&gt; on GitHub.

The readme file contains links to the JavaScript &amp; CSS resources for the application, as well as a link to the separate data repository that contains the database in (eventually) different formats.

&lt;h2&gt;Thank You&lt;/h2&gt;

Thanks to everyone that attended live and to those that view the recording. Please let me know if you have any questions.
				</description>
				
				<category>Conference</category>
				
				<category>ColdFusion</category>
				
				<category>ColdBox</category>
				
				<category>jQuery</category>
				
				<pubDate>Tue, 02 Jul 2013 22:59:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2013/7/2/Code-and-Video-from-my-ColdBox-Developers-Week-2013-Presentation</guid>
				
				
			</item>
			
			<item>
				<title>Better UI Means Better UX at ColdBox Developers Week 2013</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2013/6/4/Better-UI-Means-Better-UX-at-ColdBox-Developers-Week-2013</link>
				<description>
				
				On June 20, 2013 at 3pm CST, I&apos;ll be presenting a ColdBox version of my &lt;a href=&quot;https://github.com/iknowkungfoo/KungFooGallery-Simple-ColdFusion-Application&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;KungFoo Gallery&lt;/a&gt; application during &lt;a href=&quot;http://www.coldbox.org/cbdw&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;ColdBox Developers Week&lt;/a&gt;. This online conference runs from June 17-21, 2013. 5 days &amp; 19 sessions on ColdBox, ContentBox, WireBox, PhoneGap, REST, ORM and more.The name of my presentation is &lt;a href=&quot;http://www.coldbox.org/cbdw/sessions/28&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;&quot;Better UI means Better UX&quot;&lt;/a&gt; and I&apos;ll show how you can ditch ColdFusion&apos;s built-in UI controls and easily build interactive user interfaces using Twitter Bootstrap, jQuery DataTables and HandlebarsJS.

Code and slides will be available after the presentation.
				</description>
				
				<category>ColdFusion</category>
				
				<category>Twitter Bootstrap</category>
				
				<category>ColdBox</category>
				
				<category>jQuery</category>
				
				<pubDate>Tue, 04 Jun 2013 23:16:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2013/6/4/Better-UI-Means-Better-UX-at-ColdBox-Developers-Week-2013</guid>
				
				
			</item>
			
			<item>
				<title>Slides and Code from my cfObjective() 2013 Presentation</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2013/6/4/Slides-and-Code-from-my-cfObjective-2013-Presentation</link>
				<description>
				
				Slides and code are available via DropBox and Github. I&apos;ve posted links on my Twitter account &lt;a href=&quot;https://twitter.com/iknowkungfoo&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;@iKnowKungFoo&lt;/a&gt; already, but here they are for those not following me (and why aren&apos;t you?). :)&lt;h2&gt;Slides&lt;/h2&gt;

The slides are located in a shared folder for all of the cfObjective() presentations. You can &lt;a href=&quot;https://www.dropbox.com/s/diey39ykp1t4dke/Modern%20ColdFusion%20Application%20User%20Interfaces.pdf&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;download them here as a PDF&lt;/a&gt;.

&lt;h2&gt;KungFoo Gallery&lt;/h2&gt;

The application is a new take on the CFArtGallery. The code is broken up into multiple repositories.

&lt;h3&gt;Application Code&lt;/h3&gt;

The code for the simple CF application that I showed can be &lt;a href=&quot;https://github.com/iknowkungfoo/KungFooGallery-Simple-ColdFusion-Application&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;found here&lt;/a&gt;. This repository links to a separate one that contains just the static resources. When you pull down a copy of this repo, any linked repos come with it. However, the linked repos are not available in the ZIP download via github.

&lt;b&gt;Note:&lt;/b&gt; In order to run the handlebars example on the individual artist page, you&apos;ll have to get your web server to present the file extension &quot;.handlebars&quot; as text/html.

&lt;h3&gt;JavaScript and CSS&lt;/h3&gt;

The &lt;a href=&quot;https://github.com/iknowkungfoo/KungFooGallery-Resources&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;KungFooGallery Resources&lt;/a&gt; repository contains copies of jQuery, Twitter Bootstrap, jQuery DataTables and Handlebars that work with the application. When I update the application code, this repository will be updated as needed.

&lt;h3&gt;Images&lt;/h3&gt;

All of the images for the KungFoo Gallery are also contained in the &lt;a href=&quot;https://github.com/iknowkungfoo/KungFooGallery-Resources&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;KungFooGallery Resources&lt;/a&gt; repository. They are used under various Create Commons licenses and I claim no ownership whatsoever.

&lt;h4&gt;Data&lt;/h4&gt;

The &lt;a href=&quot;https://github.com/iknowkungfoo/KungFooGallery-Data&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;KungFooGallery Data&lt;/a&gt; repository contains the data for the gallery application. As of this post, I only have an Apache Derby Embedded database available. This is to allow any CF developer to play with the code and data, regardless of OS or preferred DB.

I intend to provide versions for MySQL, PostgreSQL, SQL Server, Oracle and MongoDB. If anyone would care to help, feel free to send a pull request.

If you&apos;d like to browse the Apache Derby DB, try out &lt;a href=&quot;http://www.dbvis.com/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;DbVisualizer&lt;/a&gt;. It&apos;s free and very easy to use with multiple databases. Just know that with an Apache Derby Embedded database, only one application can &quot;start&quot; the database at a time. So you&apos;ll have to shut off your CF server to connect with DBV and vice-versa.

&lt;h2&gt;Thank You&lt;/h2&gt;

Thank you to everyone that attended my presentation, if you have any questions, please let me know. I&apos;ll be blogging about various parts of the application in the coming weeks.

You can see a ColdBox version of this application at my presentation, &lt;a href=&quot;http://www.coldbox.org/cbdw/sessions/28&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;&quot;Better UI means Better UX&quot;&lt;/a&gt; on June 20, 2013, 3pm CST during &lt;a href=&quot;http://www.coldbox.org/cbdw&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;ColdBox Developers Week&lt;/a&gt;. Also, keep an eye out for another presentation with the &lt;a href=&quot;http://www.meetup.com/coldfusionmeetup/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;Online ColdFusion Meetup&lt;/a&gt; group.

Finally, join the &lt;a href=&quot;http://www.meetup.com/Dallas-Fort-Worth-ColdFusion-User-Group/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;DFW ColdFusion User Group&lt;/a&gt; on Meetup.com to keep up with monthly presentations on various topics. Meetings are the 2nd Tuesday of each month and we will have an Adode Connect session available for anyone that can&apos;t attend in person.
				</description>
				
				<category>ColdFusion</category>
				
				<category>Twitter Bootstrap</category>
				
				<category>cfObjective</category>
				
				<category>jQuery</category>
				
				<pubDate>Tue, 04 Jun 2013 22:26:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2013/6/4/Slides-and-Code-from-my-cfObjective-2013-Presentation</guid>
				
				
			</item>
			
			<item>
				<title>Ditching ColdFusion&apos;s UI Controls at cfObjective</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2013/5/16/Ditching-ColdFusions-UI-Controls</link>
				<description>
				
				Saturday at 3pm, I&apos;m presenting at cfObjective(). The title in the schedule says, &quot;Building Modern ColdFusion Applications&quot;, but I should have asked them to update it to say, &quot;Ditch ColdFusion&apos;s UI Controls&quot;. In this session, I&apos;ll cover why and how you can replace the native UI controls with HTML5 and some modern JavaScript and CSS libraries. I&apos;m also running a Birds of a Feather session about Coding Standards and will be giving a Lightning Talk on my multi-monitor standing desk.
				</description>
				
				<category>ColdFusion</category>
				
				<category>Twitter Bootstrap</category>
				
				<category>cfObjective</category>
				
				<category>HTML5</category>
				
				<pubDate>Thu, 16 May 2013 13:18:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2013/5/16/Ditching-ColdFusions-UI-Controls</guid>
				
				
			</item>
			
			<item>
				<title>Installing ColdFusion 10 on OSX 10.8 Mountain Lion</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2013/2/27/Installing-ColdFusion-10-on-OSX-108-Mountain-Lion</link>
				<description>
				
				While setting up my Macbook Pro for web development, I was flummoxed by the issues reported by many people trying to setup ColdFusion 10 on OSX 10.8 Mountain Lion, as well as Window 8. Adobe even has a &lt;a href=&quot;http://blogs.coldfusion.com/post.cfm/pre-release-for-new-platform-support&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;pre-release program&lt;/a&gt; to test new installers for both. I can understand having problems with Windows 8, but installing on OSX 10.8 couldn&apos;t have been easier.&lt;h3&gt;Stop that, do this: OSX&lt;/h3&gt;

Other than my iPhone 4S and iPad (the first one), I haven&apos;t had an Apple computer since my brother and I shared an Apple IIe back in grade school. BTW, that computer still works.

&lt;img src=&quot;/images/blog/cf10-osx/marco_moreno_apple_iie.jpg&quot; alt=&quot;Apple IIe still working.&quot; /&gt;

I know some people have issues using OSX when they&apos;ve been in the Windows world for so long. One comment I saw told the poster to &quot;stop thinking in Windows and start thinking in Unix.&quot; Best advice you can get.

I&apos;ve used BSD, Unix and Linux (CentOS, Red Hat, Ubuntu) for around 15 years, so OSX can&apos;t be to difficult, right?

&lt;h3&gt;Install Java&lt;/h3&gt;

This was probably the easiest time I&apos;ve ever had installing Java. I&apos;d installed a 256 GB SSD and a fresh install of Mountain Lion. The original hard drive had a previous version of OSX and Java was already installed. I wasn&apos;t sure if OSX came with Java pre-installed, so I opened up a Terminal, typed &quot;java -version&quot; and hit enter.

OSX responded like Crush from Finding Nemo: &quot;Yo dude, I know you want to see which Java I have. Sorry bro, don&apos;t have it. I could, you know, &lt;em&gt;get it&lt;/em&gt; for you if that&apos;s cool. Yeah? Awesome. Just hang loose a minute.&quot; And then, BAM! Java&apos;s installed.

&lt;h3&gt;Get Apache up and running&lt;/h3&gt;

OSX ships with Apache pre-installed. With Mountain Lion, Apple &lt;a href=&quot;http://reviews.cnet.com/8301-13727_7-57481978-263/how-to-enable-web-sharing-in-os-x-mountain-lion/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;changed how Apache is controlled&lt;/a&gt; through the System Preferences. Having never used a previous version of OSX, who cares? Let&apos;s proceed.

Apache can (and should) be controlled via the command line, same as with any *nix operating system, by using &lt;a href=&quot;http://linux.about.com/od/commands/l/blcmdl8_sudo.htm&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;&quot;sudo&quot; commands&lt;/a&gt;. The first time you call one of these commands, you&apos;ll get prompted for your password.

&lt;code&gt;
// Start
sudo apachectl start

// Stop 
sudo apachectl stop

// Restart
sudo apachectl restart
&lt;/code&gt;

You&apos;ll get used to using &quot;sudo&quot; as you get more familiar with Unix. Even when you&apos;re not actually &lt;em&gt;using&lt;/em&gt; Unix. (Image courtesy of &lt;a href=&quot;http://xkcd.com/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;http://xkcd.com/&lt;/a&gt;.)

&lt;a href=&quot;http://xkcd.com/149/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://imgs.xkcd.com/comics/sandwich.png&quot; /&gt;&lt;/a&gt;

One Apache is started, you can go to http://localhost or http://127.0.0.1 and you should see the message &quot;It works!&quot;.

&lt;h3&gt;Installing ColdFusion 10&lt;/h3&gt;

If you haven&apos;t installed ColdFusion before, it&apos;s pretty simple. Simon Free has some excellent &lt;a href=&quot;http://www.learncfinaweek.com/week1/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;instructions and videos&lt;/a&gt; over on &quot;Learn CF in a Week&quot;. I also tried &lt;a href=&quot;http://www.trunkful.com/index.cfm/2012/12/26/Installing-ColdFusion-10-on-OS-X-Mountain-Lion&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Wil Genovese&apos;s instructions&lt;/a&gt; for CF10 on Mountain Lion, but he uses a &quot;non-Apple way&quot;, which I couldn&apos;t get to work. For a moment, I considered &lt;a href=&quot;http://www.brilang.com/2012/06/installing-coldfusion-10-under-mamp-pro-2-on-os-x-lion/1137&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;installing CF10 on MAMP&lt;/a&gt;, but I saw something shiny out of the corner of my eye and got distracted.

What was I talking about?

Oh yeah.

You can download the ColdFusion installer from the &lt;a href=&quot;http://www.adobe.com/products/coldfusion-family.html&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Adobe website&lt;/a&gt;. You&apos;ll have to create an account if you don&apos;t already have one to get the installation file.

Simon&apos;s instructions tell you to use the built in web server, but we want to use Apache. Also, don&apos;t set CF to start automatically when OSX starts. You only want CF running when you &lt;em&gt;want&lt;/em&gt; it running.

&lt;ol&gt;
&lt;li&gt;Open Finder &gt; Downloads &gt; double-click the ColdFusion_10_WWEJ_osx10.dmg file.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Introduction:&lt;/strong&gt; Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;License Agreement:&lt;/strong&gt; Accept : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Install Type:&lt;/strong&gt; Developer : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subcomponent Installation:&lt;/strong&gt; Uncheck &quot;Start ColdFusion on system init&quot; : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enable Secure Profile:&lt;/strong&gt; Not for local development : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remote Admin Credentials:&lt;/strong&gt; Meh, not for local development : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select Installation Directory:&lt;/strong&gt; Use the default, &quot;/Applications/ColdFusion10&quot; : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Earlier Versions of CF:&lt;/strong&gt; BORED! : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configure Web Servers:&lt;/strong&gt; Click on Add&lt;br /&gt;
The configuration directory for Apache on Mountain Lion is &quot;/private/etc/apache2&quot;. This is key!&lt;br /&gt;
&lt;img src=&quot;/images/blog/cf10-osx/coldfusion_10_osx_mountain_lion_10.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;You should now see this configuration listed : Next&lt;br /&gt;
&lt;img src=&quot;/images/blog/cf10-osx/coldfusion_10_osx_mountain_lion_09.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configure Open Office:&lt;/strong&gt; I tried to configure &lt;a href=&quot;http://www.libreoffice.org/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Libre Office&lt;/a&gt;, but it didn&apos;t work. Skip this unless you need &lt;a href=&quot;http://www.openoffice.org/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Open Office&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Admin Password:&lt;/strong&gt; Something simple for local development : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enable RDS:&lt;/strong&gt; Only if you want to integrate with ColdFusion Builder and other remote access. Not for Production servers. : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server Updates:&lt;/strong&gt; Yes, please! : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Current User Password:&lt;/strong&gt; This was surprising, but should have been expected. I&apos;ve never seen this on any Linux installation before. Since I&apos;m not using the built in webserver, I think CF needs to &quot;sudo&quot; to alter the Apache configuration file. This would also have been needed if I had elected to start CF when OSX starts.&lt;br /&gt;
&lt;img src=&quot;/images/blog/cf10-osx/coldfusion_10_osx_mountain_lion_15.png&quot; /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Admin Password:&lt;/strong&gt; Something simple for local development : Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pre-installation summary:&lt;/strong&gt; Next&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Installation Complete:&lt;/strong&gt; Launch the Configuration Wizard @ http://127.0.0.1/CFIDE/administrator/index.cfm&lt;br /&gt;
&lt;img src=&quot;/images/blog/cf10-osx/coldfusion_10_osx_mountain_lion_20.png&quot; /&gt;&lt;br /&gt;
This will finish configuring ColdFusion and log you into the CF Admin.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Manage ColdFusion from the Terminal&lt;/h3&gt;

Starting and stopping ColdFusion from the terminal is very similar to Apache. 

&lt;code&gt;
// Start
/Applications/ColdFusion10/cfusion/bin/coldfusion start

// Stop
/Applications/ColdFusion10/cfusion/bin/coldfusion stop

// Restart
/Applications/ColdFusion10/cfusion/bin/coldfusion restart
&lt;/code&gt;

Chris Simmons shows a few more helpful commands &lt;a href=&quot;http://www.cfchimp.com/wordpress/2012/06/helpful-commands-for-coldfusion-10-on-osx-aka-start-and-stop-cf10-from-the-command-line/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;in this blog post&lt;/a&gt;.

&lt;h3&gt;OSX Sites&lt;/h3&gt;

Referring back to &lt;a href=&quot;http://reviews.cnet.com/8301-13727_7-57481978-263/how-to-enable-web-sharing-in-os-x-mountain-lion/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;the cnet article&lt;/a&gt;, you can configure a Sites directory in your Home folder in order to develop multiple web sites/applications.

&lt;ol&gt;
&lt;li&gt;Open the OS X Terminal utility (/Applicaitions/Utilities/)&lt;/li&gt;
&lt;li&gt;Create and edit an Apache user configuration file named after your user account by running the following command:&lt;br /&gt;
&lt;strong&gt;sudo pico /etc/apache2/users/`whoami`.conf&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Copy the following text into the Terminal editor that opens, but be sure to change the &quot;username&quot; text to the short name of your user account:&lt;br /&gt;
&lt;code&gt;&lt;Directory &quot;/Users/username/Sites/&quot;&gt;
     Options Indexes MultiViews
     AllowOverride All
     Order allow,deny
     Allow from all
&lt;/Directory&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Save and close the editor by pressing Control-O followed by Control-X.&lt;/li&gt;
&lt;li&gt;Stay in Terminal and go to your home directory. Create a folder named &quot;Sites&quot;, then create an &quot;index.htm&quot; file in that folder with the contents &quot;I fight for the Users!&quot;.&lt;/li&gt;
&lt;li&gt;Start or re-start Apache to pick up these changes.&lt;/li&gt;
&lt;li&gt;You should be able to visit &quot;http://localhost/~username/index.htm&quot; and see the contents of the file you just created.&lt;/li&gt;
&lt;li&gt;Now create an &quot;index.cfm&quot; file in your Sites folder with this simple content:&lt;br /&gt;
&lt;code&gt;&lt;cfoutput&gt;#now()#&lt;/cfoutput&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Visit &quot;http://localhost/~username/index.cfm&quot; and you should see the current time.&lt;/li&gt;
&lt;/ol&gt;

Now you have a web root folder for your development efforts and you&apos;ve verified that ColdFusion can parse CFML files in your Sites directory.

&lt;h3&gt;Apache Virtual Hosts&lt;/h3&gt;

Often you&apos;ll want to use a local domain like &quot;http://test.site&quot; instead of &quot;http://localhost/~username/test.site&quot;. By enabling Virtual Hosts in Apache, you can create multiple websites with their own domain, pointing to different folders inside the Sites folder.

Rather than write the details here, &lt;a href=&quot;http://osxwebdev.wordpress.com/2012/09/24/enable-apache-virtual-hosts-on-os-x-10-8-mountain-lion/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;I&apos;ll just point to this simple example I found&lt;/a&gt; which is a breeze to implement.

&lt;h3&gt;Start coding&lt;/h3&gt;

Now that I have Apache, ColdFusion and ColdFusion Builder (see related entry) installed on OSX Mountain Lion. I just need some data stores. MySQL and MongoDB will be a good start. 

If you have any questions, feel free to contact me via this website or on Twitter &lt;a href=&quot;https://twitter.com/iknowkungfoo&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;@iknowkungfoo&lt;/a&gt;.
				</description>
				
				<category>ColdFusion</category>
				
				<category>Mountain Lion</category>
				
				<category>Java</category>
				
				<category>Apache</category>
				
				<category>OSX</category>
				
				<pubDate>Wed, 27 Feb 2013 07:00:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2013/2/27/Installing-ColdFusion-10-on-OSX-108-Mountain-Lion</guid>
				
				
			</item>
			
			<item>
				<title>Always install ColdFusion Builder 2 as an Eclipse plugin</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2013/2/26/Always-install-ColdFusion-Builder-2-as-an-Eclipse-plugin</link>
				<description>
				
				I recently picked up a 17&quot; Macbook Pro and am in the process of setting it up as my primary development machine. I&apos;m a long time user of Eclipse and moved from CFEclipse to ColdFusion Builder when version 2 arrived. I&apos;ve heard a number of users complain about performance. Other than opening massive legacy files that contain thousands of lines of code, I haven&apos;t had many issues myself. The trick is to not install CF Builder as a stand-alone IDE. Here&apos;s why and how.&lt;h3&gt;Why install as a plug-in?&lt;/h3&gt;

Why should you install CF Builder as a plug-in? Because in order to distribute a single installation file, the stand alone version of CF Builder installs on a &lt;strong&gt;&lt;em&gt;32-bit version of Eclipse&lt;/em&gt;&lt;/strong&gt;. This is why you&apos;ve had performance problems.
&lt;h3&gt;Installing Eclipse&lt;/h3&gt;
Eclipse Indigo (3.7) is the latest version of Eclipse that is supported by CF Builder. &lt;a href=&quot;http://www.eclipse.org/downloads/packages/release/indigo/sr2&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;You can download it here.&lt;/a&gt; Personally, I use the &quot;for Jave EE Developers&quot; package, grab whichever version you prefer. 

&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th class=&quot;span6&quot;&gt;Windows&lt;/th&gt;&lt;th class=&quot;span6&quot;&gt;OSX (Mountain Lion)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Download the 64-bit .ZIP file.&lt;/td&gt;
&lt;td&gt;Download the 64-bit .TAR.GZ file.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align:center&quot;&gt;When you open the compressed file, you should see an /eclipse/ folder.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Copy this folder to C:\Program Files\eclipse&lt;/td&gt;&lt;td&gt;Drag this folder to your Applications directory.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align:center&quot;&gt;Open the /eclipse/ folder to access the application.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Pin eclipse.exe to your Start Menu.&lt;/td&gt;&lt;td&gt;Drag the eclipse app to the dock.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align:center&quot;&gt;At this point you can start Eclipse. You&apos;ll be prompted to select a workspace for Eclipse when it first starts up.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Default: My Documents/workspace&lt;/td&gt;&lt;td&gt;Default: /Users/{username}/Documents/workspace&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align:center&quot;&gt;You can change the JVM used by Eclipse and alter the memory allocation settings by &lt;a href=&quot;http://wiki.eclipse.org/Eclipse.ini#Specifying_the_JVM&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;editing the eclipse.ini file&lt;/a&gt;. Increasing memory allocation is good for dealing with those pesky, massive legacy files.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tfoot&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;References: &lt;a href=&quot;http://www.cs.dartmouth.edu/~cs5/install/eclipse-osx/index.html&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Eclipse on OSX.&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tfoot&gt;
&lt;/table&gt;

&lt;h3&gt;Installing ColdFusion Builder&lt;/h3&gt;
&lt;a href=&quot;http://www.adobe.com/products/coldfusion-builder.html&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Download ColdFusion Builder&lt;/a&gt; using the &quot;Try&quot; link in the sidebar. These screenshots are from an OSX Mountain Lion installation.

1. Double-click the installation file to get started.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_01.png&quot;&gt;

2. Accept the License Agreement.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_02.png&quot;&gt;

3. Select install type &quot;plugins witin Eclipse&quot;.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_03.png&quot;&gt;

4. Select installation folder. Instead of choosing the default folder &quot;/Applications/Adobe ColdFusion Builder 2 Plugins&quot;, I recommend installing in a sub-folder of the Eclipse folder.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_05.png&quot;&gt;

5. Select Eclipse Installation Folder

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_06.png&quot;&gt;

6. Confirm the Installation settings. Click &quot;Install&quot; if everything&apos;s ok.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_07.png&quot;&gt;

7. Wait a few minutes (on an SSD, this is faaaaaaast).

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_08.png&quot;&gt;

8. Finish the installation.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_09.png&quot;&gt;

9. When you first open Eclipse, you&apos;ll be presented with the Adobe ColdFusion Builder Trial screen. Enter a serial number if you have one, otherwise click &quot;Start Trial&quot;.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_10.png&quot;&gt;

10. Once you&apos;re past this screen, you&apos;ll see a rather cluttered layout. This is due to the  being on the default &quot;Java&quot; perspective.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_11.png&quot;&gt;

11. In the upper right hand corner, click on the &quot;Java EE&quot; perspective icon and select &quot;other&quot;.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_12.png&quot;&gt;

12. Select the &quot;ColdFusion&quot; perspective option at the top of the menu.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_13.png&quot;&gt;

13. Now you should see the default ColdFusion perspective (layout).

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_14.png&quot;&gt;

14. The next time you start Eclipse, you should see the ColdFusion Builder start page.

&lt;img src=&quot;/images/blog/cfbuilder/coldfusion_builder_2_step_15.png&quot;&gt;

&lt;h3&gt;Tweak the installation&lt;/h3&gt;

&lt;blockquote&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Window &gt; Preferences

&lt;strong&gt;OSX:&lt;/strong&gt; Eclipse &gt; Preferences

&lt;strong&gt;OSX (alternate):&lt;/strong&gt; &amp;#8984;,
&lt;/blockquote&gt; 

1. Set ColdFusion Builder as the default perspective.

&lt;blockquote&gt;&gt; General &gt; Perspectives &gt; Select ColdFusion Builder &gt; click on the Make Default button.&lt;/blockquote&gt;

2. Turn off the ColdFusion Builder welcome screen.

&lt;blockquote&gt;&gt; ColdFusion &gt; Setup &gt; Uncheck &quot;Show welcome page&quot;&lt;/blockquote&gt;

3. Change fonts and font size (useful for presentations).

&lt;blockquote&gt;&gt; General &gt; Appearance &gt; Colors and Fonts &gt; Basic &gt; Text Font&lt;/blockquote&gt;

4. Change your workspace.

&lt;blockquote&gt;File &gt; Switch Workspace &gt; other. Once you&apos;ve created multiple workspaces, you&apos;ll see them in this menu item. You might create multiple workspaces to group similar projects together.&lt;/blockquote&gt;

5. Show the current workspace location in the title bar.

Open up eclipse.ini, add &quot;--showlocation&quot; and save.

&lt;h3&gt;Start coding&lt;/h3&gt;

I&apos;ve been using Eclipse since 2002 or so. It&apos;s been my primary IDE for web development since then. I use so many integration points to various systems and programming languages that I just can&apos;t get as much done in a day using other IDEs. 

At first, I had two installs of Eclipse: one with &lt;a href=&quot;http://cfeclipse.org/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;CFEclipse&lt;/a&gt; and one with CFBuilder. It took some getting used to the keyboard shortcuts in CFB over CFE. While you can changes CFB to use the same shortcuts as CFE, I got used to default set and made it my primary CFML editor.

If you&apos;ve had problems with CFBuilder due to a stand alone installation, I recommend giving it another try as a plug-in. You might be pleasantly surprised.
				</description>
				
				<category>ColdFusion</category>
				
				<category>Mountain Lion</category>
				
				<category>ColdFusion Builder</category>
				
				<category>OSX</category>
				
				<pubDate>Tue, 26 Feb 2013 07:00:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2013/2/26/Always-install-ColdFusion-Builder-2-as-an-Eclipse-plugin</guid>
				
				
			</item>
			
			<item>
				<title>ArrayCollection.cfc, a custom JSON renderer for ColdFusion queries</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2012/5/11/ArrayCollectioncfc-a-custom-JSON-renderer-for-ColdFusion-queries</link>
				<description>
				
				There&apos;s been a few recent blogs posts covering how to convert the JSON returned by ColdFusion&apos;s serializeJSON function to a more standard pattern in order to use data with various grids or JavaScript templates. Those posts covered client-side conversions, here&apos;s how to generate the JSON on the server.&lt;h3&gt;ColdFusion and JSON&lt;/h3&gt;

Let&apos;s use this function, with a simple query:

&lt;code&gt;&lt;cffunction name=&quot;books&quot; access=&quot;remote&quot; output=&quot;false&quot; returntype=&quot;string&quot;&gt;
	&lt;cfargument name=&quot;term&quot; type=&quot;string&quot; required=&quot;true&quot; /&gt;
	&lt;cfset var rs = {} /&gt;
	&lt;cfquery name=&quot;rs.q&quot; datasource=&quot;cfbookclub&quot;&gt;
		SELECT DISTINCT
			bookid,
			title,
			genre
		FROM
			books
		WHERE
			title LIKE &lt;cfqueryparam value=&quot;%#arguments.term#%&quot; cfsqltype=&quot;cf_sql_varchar&quot; /&gt;
		ORDER BY
			genre, title
	&lt;/cfquery&gt;
	&lt;cfreturn serializeJSON( rs.q ) /&gt;
&lt;/cffunction&gt;&lt;/code&gt;

This is using the (case sensitive) Embedded Apache Derby database &quot;cfbookclub&quot; that comes with the base install of ColdFusion. If I make this call:

&lt;code&gt;&lt;cfdump var=&quot;#books(&apos;Man&apos;)# /&gt;&lt;/code&gt;

My JSON will look like this:

&lt;code&gt;{
	&quot;COLUMNS&quot;:[&quot;BOOKID&quot;,&quot;TITLE&quot;,&quot;GENRE&quot;],
	&quot;DATA&quot;:[
		[8,&quot;Apparition Man&quot;,&quot;Fiction&quot;],
		[2,&quot;Shopping Mart Mania&quot;,&quot;Non-fiction&quot;]
	]
}&lt;/code&gt;

If I change the function&apos;s return to &amp;lt;cfreturn serializeJSON( rs.q, true ) /&amp;gt;

&lt;code&gt;{
	&quot;ROWCOUNT&quot;:2,
	&quot;COLUMNS&quot;:[&quot;BOOKID&quot;,&quot;TITLE&quot;,&quot;GENRE&quot;],
	&quot;DATA&quot;:{
		&quot;BOOKID&quot;:[8,2],
		&quot;TITLE&quot;:[&quot;Apparition Man&quot;,&quot;Shopping Mart Mania&quot;],
		&quot;GENRE&quot;:[&quot;Fiction&quot;,&quot;Non-fiction&quot;]
	}
}&lt;/code&gt;

But what we really want is an array of structs. Each struct is an object representation of a row in the query.  This is what I&apos;ve known from Flex development as an &lt;a href=&quot;http://jodieorourke.com/view.php?id=104&amp;blog=news&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;ArrayCollection&lt;/a&gt;.

&lt;code&gt;{	
	&quot;data&quot;:[
		{&quot;bookid&quot;:8,&quot;genre&quot;:&quot;Fiction&quot;,&quot;title&quot;:&quot;Apparition Man&quot;},
		{&quot;bookid&quot;:2,&quot;genre&quot;:&quot;Non-fiction&quot;,&quot;title&quot;:&quot;Shopping Mart Mania&quot;}
	]
}&lt;/code&gt;

&lt;h3&gt;Client-side Conversion&lt;/h3&gt;

Here&apos;s a few blog posts that cover how to convert ColdFusion&apos;s standard JSON to this more standard JSON format:

&lt;ul&gt;
&lt;li&gt;Steve Cutter created the jQuery plugin &lt;a href=&quot;http://www.cutterscrossing.com/index.cfm/2012/5/2/JQuery-Plugin-serializeCFJSON&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;serializeCFJSON&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ray Camden shows the function &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2012/5/11/Using-CFC-data-with-Handlebars&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;cfQueryNormalize&lt;/a&gt; to do the same without needing jQuery.&lt;/li&gt;
&lt;/ul&gt;

But we want to serve up our data is this JSON format directly from the server.

&lt;h3&gt;Server-side Conversion&lt;/h3&gt;

The day after Ray put up &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2012/4/19/Demo-of-Handlebars-and-why-you-should-consider-a-templating-engine&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;his first Handlebars demo&lt;/a&gt;, I got to work using &lt;a href=&quot;http://handlebarsjs.com/&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;Handlebars&lt;/a&gt; in an internal application I&apos;m building. Handlebars is a drop-dead simple JavaScript template engine which I&apos;ll talk more about it later.

A few days ago, Julian Halliwell &lt;a href=&quot;http://cfsimplicity.com/53/simpler-handling-of-json-serialised-coldfusion-query-objects&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;put up a post on this same approach&lt;/a&gt;, but his returns both the original CF JSON and the converted JSON. 

The ArrayCollection.cfc only returns the converted JSON and allows you to convert any query on the fly.

&lt;h3&gt;ArrayCollection.cfc&lt;/h3&gt;

Here&apos;s the CFC, which should always be created as a singleton. Props to Ben Nadel for &lt;a href=&quot;http://www.bennadel.com/blog/124-Ask-Ben-Converting-a-Query-to-an-Array.htm&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;giving me a place to start&lt;/a&gt;.

&lt;code&gt;&lt;cfcomponent&gt;

	&lt;cffunction name=&quot;init&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;ArrayCollection&quot;&gt;
		&lt;cfset setContentType(&quot;json&quot;) /&gt;
		&lt;cfset setDataHandle(true) /&gt;
		&lt;cfset setDataHandleName(&quot;data&quot;) /&gt;
		&lt;cfreturn this /&gt;
	&lt;/cffunction&gt;

	&lt;cffunction name=&quot;$renderdata&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;string&quot; hint=&quot;convert a query to an array of structs&quot;&gt;
		&lt;cfset var rs = {} /&gt;
		&lt;cfset var rs.q = variables.data /&gt;
		&lt;cfset rs.results = [] /&gt;
		&lt;cfset rs.columnList = lcase(listSort(rs.q.columnlist, &quot;text&quot; )) /&gt;
		&lt;cfloop query=&quot;rs.q&quot;&gt;
			&lt;cfset rs.temp = {} /&gt;
			&lt;cfloop list=&quot;#rs.columnList#&quot; index=&quot;rs.col&quot;&gt;
				&lt;cfset rs.temp[rs.col] = rs.q[rs.col][rs.q.currentrow] /&gt;
			&lt;/cfloop&gt;
			&lt;cfset arrayAppend( rs.results, rs.temp ) /&gt;
		&lt;/cfloop&gt;
		&lt;cfset rs.data = {} /&gt;
		&lt;cfif hasDataHandle()&gt;
			&lt;cfset rs.data[getDataHandleName()] = rs.results /&gt;
		&lt;cfelse&gt;
			&lt;cfset rs.data = rs.results /&gt;
		&lt;/cfif&gt;
		&lt;cfreturn serializeJSON(rs.data) /&gt;
	&lt;/cffunction&gt;

	&lt;cffunction name=&quot;setData&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;void&quot;&gt;
		&lt;cfargument name=&quot;data&quot; type=&quot;query&quot; required=&quot;true&quot;&gt;
		&lt;cfset variables.data = arguments.data /&gt;
	&lt;/cffunction&gt;

	&lt;cffunction name=&quot;setContentType&quot; access=&quot;private&quot; output=&quot;false&quot; returntype=&quot;void&quot;&gt;
		&lt;cfargument name=&quot;contenttype&quot; type=&quot;string&quot; required=&quot;true&quot; /&gt;
		&lt;cfset variables.contentType = arguments.contentType /&gt;
	&lt;/cffunction&gt;
	&lt;cffunction name=&quot;getContentType&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;string&quot;&gt;
		&lt;cfreturn variables.contentType /&gt;
	&lt;/cffunction&gt;

	&lt;cffunction name=&quot;setDataHandle&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;void&quot;&gt;
		&lt;cfargument name=&quot;datahandle&quot; type=&quot;boolean&quot; required=&quot;true&quot; /&gt;
		&lt;cfset variables.dataHandle = arguments.datahandle /&gt;

	&lt;/cffunction&gt;
	&lt;cffunction name=&quot;hasDataHandle&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;boolean&quot;&gt;
		&lt;cfreturn variables.dataHandle /&gt;
	&lt;/cffunction&gt;

	&lt;cffunction name=&quot;setDataHandleName&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;void&quot;&gt;
		&lt;cfargument name=&quot;dataHandleName&quot; type=&quot;string&quot; required=&quot;true&quot; /&gt;
		&lt;cfset variables.dataHandleName = arguments.dataHandleName /&gt;
	&lt;/cffunction&gt;
	&lt;cffunction name=&quot;getDataHandleName&quot; access=&quot;public&quot; output=&quot;false&quot; returntype=&quot;string&quot;&gt;
		&lt;cfreturn variables.dataHandleName /&gt;
	&lt;/cffunction&gt;

&lt;/cfcomponent&gt;&lt;/code&gt;

&lt;h3&gt;Converting a Query&lt;/h3&gt;

Let&apos;s go back to my original function and change it to return an ArrayCollection.

&lt;code&gt;&lt;cfset rs.ac = createObject(&quot;component&quot;, &quot;ArrayCollection&quot;).init() /&gt;
&lt;cfset rs.ac.setData( rs.q ) /&gt;
&lt;cfreturn rs.ac.$renderdata() /&gt;&lt;/code&gt;

You&apos;ve already seen the results:

&lt;code&gt;{	
	&quot;data&quot;:[
		{&quot;bookid&quot;:8,&quot;genre&quot;:&quot;Fiction&quot;,&quot;title&quot;:&quot;Apparition Man&quot;},
		{&quot;bookid&quot;:2,&quot;genre&quot;:&quot;Non-fiction&quot;,&quot;title&quot;:&quot;Shopping Mart Mania&quot;}
	]
}&lt;/code&gt;

So let&apos;s change the data handle:

&lt;code&gt;&lt;cfset rs.ac = createObject(&quot;component&quot;, &quot;ArrayCollection&quot;).init() /&gt;
&lt;cfset rs.ac.setData( rs.q ) /&gt;
&lt;cfset rs.ac.setDataHandleName( &quot;foo&quot; ) /&gt;
&lt;cfreturn rs.ac.$renderdata() /&gt;&lt;/code&gt;

which returns

&lt;code&gt;{	
	&quot;foo&quot;:[
		{&quot;bookid&quot;:8,&quot;genre&quot;:&quot;Fiction&quot;,&quot;title&quot;:&quot;Apparition Man&quot;},
		{&quot;bookid&quot;:2,&quot;genre&quot;:&quot;Non-fiction&quot;,&quot;title&quot;:&quot;Shopping Mart Mania&quot;}
	]
}&lt;/code&gt;

And if we just want the array without a data handle:

&lt;code&gt;&lt;cfset rs.ac = createObject(&quot;component&quot;, &quot;ArrayCollection&quot;).init() /&gt;
&lt;cfset rs.ac.setData( rs.q ) /&gt;
&lt;cfset rs.ac.setDataHandle(false) /&gt;
&lt;cfreturn rs.ac.$renderdata() /&gt;&lt;/code&gt;

will give us just the array

&lt;code&gt;[
	{&quot;bookid&quot;:8,&quot;genre&quot;:&quot;Fiction&quot;,&quot;title&quot;:&quot;Apparition Man&quot;},
	{&quot;bookid&quot;:2,&quot;genre&quot;:&quot;Non-fiction&quot;,&quot;title&quot;:&quot;Shopping Mart Mania&quot;}
]&lt;/code&gt;

&lt;h3&gt;Teaser&lt;/h3&gt;

I&apos;ll post this CFC to github later on, but soon I&apos;ll post an example of using this with Handlebars AND I&apos;ll tell you why I chose the name &lt;strong&gt;$renderdata()&lt;/strong&gt; instead of &lt;strong&gt;renderdata()&lt;/strong&gt;.
				</description>
				
				<category>ColdFusion</category>
				
				<category>Ajax</category>
				
				<category>ColdBox</category>
				
				<pubDate>Fri, 11 May 2012 19:50:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2012/5/11/ArrayCollectioncfc-a-custom-JSON-renderer-for-ColdFusion-queries</guid>
				
				
			</item>
			
			<item>
				<title>Upgrading ColdFusion: CFGRID has an inconsistent width attribute</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2012/5/10/Upgrading-ColdFusion-CFGRID-has-an-inconsistent-width-attribute</link>
				<description>
				
				I&apos;m in the process of moving a massive, years-old application from ColdFusion 8 to ColdFusion 9. I&apos;m also testing on ColdFusion 10 (currently in beta). I&apos;ve run into a few issues and will document them here. First up: Setting the width of a CFGRID.&lt;h3&gt;What is CFGRID?&lt;/h3&gt;

Write a query, pass it to CFGRID and you get a grid of data rendered in either Flash (Flex?) or in HTML/JavaScript via Ext.js. Here&apos;s an example straight from the documentation:

&lt;code&gt;&lt;!--- Query the database to fill up the grid. ---&gt;
&lt;cfquery name = &quot;GetCourses&quot; dataSource = &quot;cfdocexamples&quot;&gt;
	SELECT Course_ID, Dept_ID, CorNumber,
	CorName, CorLevel
	FROM CourseList
	ORDER by Dept_ID ASC, CorNumber ASC
&lt;/cfquery&gt;

&lt;h3&gt;cfgrid Example&lt;/h3&gt;
&lt;i&gt;Currently available courses&lt;/i&gt;
&lt;!--- cfgrid must be inside a cfform tag. ---&gt;
&lt;cfform&gt;
	&lt;cfgrid name = &quot;FirstGrid&quot; format=&quot;Flash&quot;
		height=&quot;320&quot; width=&quot;580&quot;
		font=&quot;Tahoma&quot; fontsize=&quot;12&quot;
		query = &quot;GetCourses&quot;&gt;
	&lt;/cfgrid&gt;
&lt;/cfform&gt;
&lt;/code&gt;

&lt;h3&gt;Documentation&lt;/h3&gt;

&lt;a href=&quot;http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_g-h_03.html&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;Documentation for ColdFusion 8&lt;/a&gt;.
&lt;code&gt;&lt;cfgrid . . . width=&quot;integer&quot;&gt;&lt;/cfgrid&gt;&lt;/code&gt;

&lt;a href=&quot;http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7baf.html&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;Documentation for ColdFusion 9&lt;/a&gt;.
&lt;code&gt;&lt;cfgrid . . . width=&quot;integer&quot;&gt;&lt;/cfgrid&gt;&lt;/code&gt;

&lt;a href=&quot;http://help.adobe.com/en_US/ColdFusion/10.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7baf.html&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;Documentation for ColdFusion 10&lt;/a&gt;.
&lt;code&gt;&lt;cfgrid . . . width=&quot;integer&quot;&gt;&lt;/cfgrid&gt;&lt;/code&gt;

Regardless of version, for &lt;strong&gt;width&lt;/strong&gt;: 

&quot;In HTML format, can be in &lt;strong&gt;&lt;em&gt;any valid CSS measurement unit&lt;/em&gt;&lt;/strong&gt;, and a numeric-only value specifies pixels.&quot;

&lt;h3&gt;LIES!&lt;/h3&gt;

Some of the CFGRIDs currently in use are set to width=&quot;100%&quot; and they&apos;ve been working for &lt;strong&gt;years&lt;/strong&gt;.

&lt;code&gt;
&lt;cfgrid name = &quot;FirstGrid&quot; format=&quot;Flash&quot;
	height=&quot;320&quot; width=&quot;100%&quot; &lt;!--- Works in CF8 ---&gt;
	font=&quot;Tahoma&quot; fontsize=&quot;12&quot;
	query = &quot;GetCourses&quot;&gt;
&lt;/cfgrid&gt;
&lt;/code&gt;

Run that code in ColdFusion 9 or 10 and BOOM!

&lt;p class=&quot;alert-message error&quot;&gt;
Attribute validation error for the CFGRID tag.
&lt;br /&gt;
height/width attribute cannot be a percentage value.
&lt;/p&gt;

Is a percentage value a &quot;valid CSS measurement unit&quot;? Yes it is! Was this a CF8 bug that was fixed in CF9? An oversight in documentation? Either way it&apos;s a PITA.

&lt;h3&gt;Solution&lt;/h3&gt;

I tried redefining the classes on the DIVs that make up the grid, but they all have inline definitions, so those &amp;lt;style&amp;gt; entries get overridden. Then I tried using &lt;a href=&quot;http://jquery.com&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;jQuery&lt;/a&gt; with setTimeout() to replace the inline CSS values after the page has completed loading, to little effect.

&lt;code&gt;&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){

	setTimeout( function(){
		$(&apos;div.x-grid-container&apos;).css(&apos;width&apos;, &apos;100%&apos;);
		$(&apos;div.x-grid&apos;).css(&apos;width&apos;, &apos;100%&apos;);
		$(&apos;div.x-grid-topbar&apos;).css(&apos;width&apos;, &apos;100%&apos;);
		$(&apos;div.x-grid-scroller&apos;).css(&apos;width&apos;, &apos;100%&apos;);
		$(&apos;div.x-grid-viewport&apos;).css(&apos;width&apos;, &apos;98%&apos;);
		$(&apos;div.x-grid-bottombar&apos;).css(&apos;width&apos;, &apos;100%&apos;);
	}, 2000);

});
&lt;/script&gt;&lt;/code&gt;

This didn&apos;t affect the width of the column headers (if you set autowidth=&quot;true&quot;, the columns scale to the width of their content and then to the width of the grid container). If you resize the browser, an onResize() function kicks in and the DIVs are reset to their original width.

I&apos;m sure we can replace these grids with something like &lt;a href=&quot;http://datatables.net/&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;DataTables&lt;/a&gt; or a direct implementation of an &lt;a href=&quot;http://dev.sencha.com/deploy/ext-4.0.0/examples/#sample-2&quot; class=&quot;outbound&quot; target=&quot;_top&quot;&gt;Ext JS Grid&lt;/a&gt;, but that would incur a lot of regression testing, so that has to wait.

The solution I implemented was to set the width to a static value and move on. If anyone has figured out a way to get these grids to 100% width, I&apos;d love to hear it.
				</description>
				
				<category>ExtJS</category>
				
				<category>ColdFusion</category>
				
				<category>jQuery</category>
				
				<category>Javascript</category>
				
				<pubDate>Thu, 10 May 2012 19:30:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2012/5/10/Upgrading-ColdFusion-CFGRID-has-an-inconsistent-width-attribute</guid>
				
				
			</item>
			
			<item>
				<title>Check All Checkboxes with jQuery - Revisited</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2012/4/18/Check-All-Checkboxes-with-jQuery--Revisited</link>
				<description>
				
				Nearly 4 years ago, I showed how to &quot;check all checkboxes&quot; using jQuery 1.2.6. In this post, I&apos;m going to show a more advanced, but still simple way to handle checkboxes with jQuery that accounts for changes made as of version 1.6.1. I&apos;ll even answer the bracketed field name question that haunts PHP developers.jQuery version 1.6 introduced a new function, &lt;a href=&quot;http://api.jquery.com/prop/&quot; target=&quot;_top&quot; class=&quot;outbound&quot;&gt;.prop()&lt;/a&gt;, for which changes were also made to the &lt;a href=&quot;http://api.jquery.com/attr/&quot; target=&quot;_top&quot; class=&quot;outbound&quot;&gt;.attr()&lt;/a&gt; function. The changes to .attr() were reverted in version 1.6.1 due to a backlash related to backwards compatibility. Basically, it broke everything that was already using .attr(). You can read the documentation for the full details but it boils down to this:

&lt;ul&gt;
&lt;li&gt;Use .attr() to read the HTML attribute of an element.&lt;/li&gt;
&lt;li&gt;Use .prop() to set and read a property of an element. &quot;Properties generally affect the dynamic state of a DOM element &lt;em&gt;without changing the serialized HTML attribute&lt;/em&gt;.&quot; (emphasis mine)&lt;/li&gt;
&lt;/ul&gt;

Here&apos;s an example, straight from the jQuery site:

&lt;fieldset&gt;
&lt;legend&gt;jQuery .attr() vs. .prop()&lt;/legend&gt;
&lt;table class=&quot;zebra-striped&quot;&gt;
&lt;thead&gt;&lt;tr&gt;
&lt;th&gt;.attr()&lt;/th&gt;
&lt;th&gt;Proper .prop() usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$(window).attr...&lt;/td&gt;
&lt;td&gt;$(window).prop...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$(document).attr...&lt;/td&gt;
&lt;td&gt;$(document).prop...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$(&quot;:checkbox&quot;).attr(&quot;checked&quot;, true);&lt;/td&gt;
&lt;td&gt;$(&quot;:checkbox&quot;).prop(&quot;checked&quot;, true);&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$(&quot;option&quot;).attr(&quot;selected&quot;, true);&lt;/td&gt;
&lt;td&gt;$(&quot;option&quot;).prop(&quot;selected&quot;, true);&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/fieldset&gt;

&lt;a href=&quot;http://iknowkungfoo.com/blog/index.cfm/2008/7/9/Check-All-Checkboxes-with-JQuery&quot;&gt;In my previous post&lt;/a&gt;, I used .attr() and .is() as those were the best available functions at the time.

&lt;fieldset&gt;
&lt;legend&gt;Old and busted&lt;/legend&gt;
&lt;code&gt;
 $(&quot;form#&quot; + id + &quot; INPUT[@name=&quot; + name + &quot;][type=&apos;checkbox&apos;]&quot;).attr(&apos;checked&apos;, false);

$(&apos;#checkAllAuto&apos;).is(&apos;:checked&apos;);
&lt;/code&gt;
&lt;/fieldset&gt;

&lt;h3&gt;Specifications!&lt;/h3&gt;

This post is going to cover the following:

&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#spec1&quot;&gt;Check and Uncheck all checkboxes related to a particular &quot;check all&quot; checkbox.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#spec2&quot;&gt;Manage the &quot;check all&quot; box&lt;/a&gt;
&lt;ol&gt;&lt;li&gt;Uncheck the &quot;check all&quot; box when a related checkbox is un-checked.&lt;/li&gt;
&lt;li&gt;Select the &quot;check all&quot; box when all related checkboxes are selected.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#spec3&quot;&gt;Handle the PHP naming convention &amp;lt;input type=&quot;checkbox&quot; &lt;strong&gt;name=&quot;foo[]&quot;&lt;/strong&gt; /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

The end goal is to write generic process to handle ALL of the &quot;check all&quot; functionality throughout your application.

The examples in this post should run on any version of jQuery 1.7 or greater. Also, I tend to switch between &quot;check all&quot; and &quot;select all&quot; quite a bit. Deal with it. :)

&lt;h3&gt;Generating the HTML&lt;/h3&gt;

Let&apos;s create a simple column with two columns of checkboxes and a &quot;Select All&quot; checkbox for each column. While this example uses ColdFusion to dynamically generate the HTML, it can be easily translated to PHP, .NET or any other server-side language.

&lt;code&gt;&lt;html&gt;
	&lt;head&gt;
		&lt;script src=&quot;//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js&quot;&gt;&lt;/script&gt;
		&lt;script src=&quot;checkall.js&quot;&gt;&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		
		&lt;table border=&quot;1&quot;&gt;
			&lt;thead&gt;
				&lt;tr&gt;
					&lt;th&gt;&amp;nbsp;&lt;/th&gt;
					&lt;th&gt;name=&quot;foo&quot;&lt;/th&gt;
					&lt;th&gt;name=&quot;bar&quot;&lt;/th&gt;
				&lt;/tr&gt;
			&lt;/thead&gt;
			&lt;tbody&gt;
				&lt;cfoutput&gt;
					&lt;cfloop from=&quot;0&quot; to=&quot;9&quot; index=&quot;i&quot;&gt;
						&lt;tr&gt;
							&lt;td&gt;#i#&lt;/td&gt;
							&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_#i#&quot; name=&quot;foo&quot; value=&quot;#i#&quot; 
									   data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot; /&gt;&lt;/td&gt;
							&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_#i#&quot; name=&quot;bar&quot; value=&quot;#i#&quot; 
									   data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot; /&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/cfloop&gt;
				&lt;/cfoutput&gt;
			&lt;/tbody&gt;
			&lt;tfoot&gt;
				&lt;tr&gt;
					&lt;td&gt;Select All&lt;/td&gt;
					&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;sa_foo&quot; name=&quot;sa_foo&quot; 
								data-checkbox-name=&quot;foo&quot; class=&quot;selectall&quot; /&gt;&lt;/td&gt;
					&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;sa_bar&quot; name=&quot;sa_bar&quot; 
								data-checkbox-name=&quot;bar&quot; class=&quot;selectall&quot; /&gt;&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/tfoot&gt;
			
		&lt;/table&gt;
		
	&lt;/body&gt;
&lt;/html&gt;&lt;/code&gt;

Here&apos;s the generated table:

&lt;fieldset&gt;&lt;legend&gt;Doing the &quot;check all&quot; thing&lt;/legend&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://iknowkungfoo.com/examples/checkall.js&quot;&gt;&lt;/script&gt;
&lt;table class=&quot;zebra-striped&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&amp;nbsp;&lt;/th&gt;
&lt;th&gt;name=&quot;foo&quot;&lt;/th&gt;
&lt;th&gt;name=&quot;bar&quot;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_0&quot; name=&quot;foo&quot; value=&quot;0&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_0&quot; name=&quot;bar&quot; value=&quot;0&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_1&quot; name=&quot;foo&quot; value=&quot;1&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_1&quot; name=&quot;bar&quot; value=&quot;1&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_2&quot; name=&quot;foo&quot; value=&quot;2&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_2&quot; name=&quot;bar&quot; value=&quot;2&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_3&quot; name=&quot;foo&quot; value=&quot;3&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_3&quot; name=&quot;bar&quot; value=&quot;3&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_4&quot; name=&quot;foo&quot; value=&quot;4&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_4&quot; name=&quot;bar&quot; value=&quot;4&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_5&quot; name=&quot;foo&quot; value=&quot;5&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_5&quot; name=&quot;bar&quot; value=&quot;5&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_6&quot; name=&quot;foo&quot; value=&quot;6&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_6&quot; name=&quot;bar&quot; value=&quot;6&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_7&quot; name=&quot;foo&quot; value=&quot;7&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_7&quot; name=&quot;bar&quot; value=&quot;7&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_8&quot; name=&quot;foo&quot; value=&quot;8&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_8&quot; name=&quot;bar&quot; value=&quot;8&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_9&quot; name=&quot;foo&quot; value=&quot;9&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;bar_9&quot; name=&quot;bar&quot; value=&quot;9&quot; data-select-all=&quot;sa_bar&quot; class=&quot;checkme&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tfoot&gt;
&lt;tr&gt;&lt;td&gt;Select All&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;sa_foo&quot; name=&quot;sa_foo&quot; data-checkbox-name=&quot;foo&quot; class=&quot;selectall&quot;&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;checkbox&quot; id=&quot;sa_bar&quot; name=&quot;sa_bar&quot; data-checkbox-name=&quot;bar&quot; class=&quot;selectall&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tfoot&gt;
&lt;/table&gt;
&lt;/fieldset&gt;

&lt;h3&gt;Avoid inline event handlers.&lt;/h3&gt;

We all learned to use onclick=&quot;this();&quot; and onchange=&quot;that();&quot; in form fields to call some JavaScript function or other. In my opinion, we should stop doing this when possible. I build a lot of applications where the goal is reuse of code and if you write everything inline, you can&apos;t reuse a group of form fields across multiple forms.

I believe that the rules of how a form functions (and that&apos;s what we&apos;re doing here, writing rules) should be moved to an external JavaScript file. Doing so means that you don&apos;t have to go digging into the final HTML to figure out how a form works. This also lets you reuse groups of fields across multiple forms, but gives you the flexibility to easily change how they function.

*steps off the soapbox*

&lt;h3&gt;&lt;a name=&quot;spec1&quot;&gt;&lt;/a&gt;Specification 1: The &quot;check all&quot; checkbox&lt;/h3&gt;

Let&apos;s take a look at the checkboxes in the name=&quot;foo&quot; column:

&lt;code&gt;&lt;input type=&quot;checkbox&quot; id=&quot;foo_#i#&quot; name=&quot;foo&quot; value=&quot;#i#&quot;  data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot; /&gt;&lt;/code&gt;

Using &quot;i&quot; as the index of my loop, 

&lt;ol&gt;
&lt;li&gt;Each checkbox has a unique ID.&lt;/ii&gt;
&lt;li&gt;Each has the same NAME.&lt;/li&gt;
&lt;li&gt;The unique ID is tied to the VALUE.&lt;/li&gt;
&lt;li&gt;The related &quot;check all&quot; checkbox is specified using and HTML &quot;data-&quot; attribute. In this case &lt;strong&gt;data-select-all=&quot;sa_foo&quot;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Every non-&quot;check all&quot; checkbox has the CLASS &quot;checkme&quot;.&lt;/li&gt;
&lt;/ol&gt;

As of jQuery 1.4.3, we can read the value of any &quot;data-&quot; attribute using the function &lt;a href=&quot;http://api.jquery.com/data/&quot; target=&quot;_top&quot; class=&quot;outbound&quot;&gt;.data()&lt;/a&gt;. Yes, &quot;data-&quot; is an HTML5 attribute, but this works for non-HTML5 browsers (although your validator might pitch a fit).

Now here&apos;s the &quot;check all&quot; checkbox for the name=&quot;foo&quot; column:

&lt;code&gt;&lt;input type=&quot;checkbox&quot; id=&quot;sa_foo&quot; name=&quot;sa_foo&quot; data-checkbox-name=&quot;foo&quot; class=&quot;selectall&quot; /&gt;&lt;/code&gt;

If you look at the name=&quot;bar&quot; column, you&apos;ll see the same setup using &quot;bar&quot; instead of &quot;foo&quot;.

&lt;fieldset&gt;
&lt;legend&gt;checkall.js (v1)&lt;/legend&gt;

&lt;code&gt;
$(document).ready(function(){ // 1
	// 2
	$(&apos;:checkbox.selectall&apos;).on(&apos;click&apos;, function(){
		// 3
		$(&apos;:checkbox[name=&apos; + $(this).data(&apos;checkbox-name&apos;) + &apos;]&apos;).prop(&quot;checked&quot;, $(this).prop(&quot;checked&quot;));
		
	});
	
});&lt;/code&gt;

&lt;/fieldset&gt;

This code 

&lt;ol&gt;
&lt;li&gt;Does not run until the document is ready to go ( using $(document).ready(); ).&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Uses the jQuery &quot;:checkbox&quot; selector, restricted to those with the class of &quot;selectall&quot; and adds a CLICK event to them using the jQuery 1.7 &lt;a href=&quot;http://api.jquery.com/on/&quot; target=&quot;_top&quot; class=&quot;outbound&quot;&gt;.on()&lt;/a&gt; function. (Previous to 1.7, you can use .click().)&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;closure&lt;/em&gt; (anonymous function) assigned to the &quot;select all&quot; checkbox
&lt;ol&gt;
&lt;li&gt;Selects all of the &quot;:checkbox&quot; form elements with a NAME matching its &quot;data-checkbox-name&quot; attribute,&lt;/li&gt;
&lt;li&gt;then calls the .prop() function and assigns to each of them the same &quot;checked&quot; property it has.
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

So if the &quot;check all&quot; checkbox has a property of checked=&quot;true&quot;, then so do all of its related checkboxes. If it&apos;s &quot;false&quot;, they&apos;re all checked=&quot;false&quot;.

&lt;h3&gt;&lt;a name=&quot;spec2&quot;&gt;&lt;/a&gt;Specification 2: Manage the &quot;check all&quot; checkbox.&lt;/h3&gt;

Now that you can check all of the individual checkboxes at once, what happens when one of them is unchecked? The &quot;check all&quot; box should be unchecked too. Also, if all of the individual checkboxes are manually checked, then the &quot;check all&quot; should be checked as well.

By relating the individual checkboxes to the &quot;check all&quot; checkbox using a &quot;data-&quot; attribute, this is also pretty straight forward:

&lt;fieldset&gt;
&lt;legend&gt;checkall.js (v2)&lt;/legend&gt;
&lt;code&gt;
$(document).ready(function(){
	
	$(&apos;:checkbox.selectall&apos;).on(&apos;click&apos;, function(){
		$(&apos;:checkbox[name=&apos; + $(this).data(&apos;checkbox-name&apos;) + &apos;]&apos;).prop(&quot;checked&quot;, $(this).prop(&quot;checked&quot;));
	});
	// Individual checkboxes
	$(&apos;:checkbox.checkme&apos;).on(&apos;click&apos;, function(){ // 1

		var _this = $(this); // 2
		var _selectall = _this.prop(&quot;checked&quot;); //3

		if ( _selectall ) { // 4
			// 5
			$( &apos;:checkbox[name=&apos; + _this.attr(&apos;name&apos;) + &apos;]&apos; ).each(function(i){
				// 6
				_selectall = $(this).prop(&quot;checked&quot;);
				return _selectall; // 7
			});

		}
		
		// 8
		$(&apos;:checkbox[name=&apos; + $(this).data(&apos;select-all&apos;) + &apos;]&apos;).prop(&quot;checked&quot;, _selectall);
	});
	
});
&lt;/code&gt;
&lt;/fieldset&gt;

This code also waits until the document is ready to go. Then, 

&lt;ol&gt;
&lt;li&gt;It uses the jQuery &quot;:checkbox&quot; selector, restricted to those with the class of &quot;checkme&quot; and adds a CLICK event to them using the .on() function.&lt;/li&gt;
&lt;li&gt;Inside the closure, for sake of this example, I&apos;ve created a private variable &quot;_this&quot; equal to $(this), which is a pointer to the current $(&apos;:checkbox&apos;) object.&lt;/li&gt;
&lt;li&gt;Next, create a private variable &quot;_selectall&quot; and assign it the value of the &quot;checked&quot; property (true or false) of the current checkbox.&lt;/li&gt;
&lt;li&gt;If this checkbox has a property of &quot;checked&quot; equal to &lt;strong&gt;true&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;then loop through all checkboxes with the same NAME (using another closure; within this closure, $(this) refers to the $(&apos;:checkbox&apos;) object on the previous line.)&lt;/li&gt;
&lt;li&gt;Set &quot;_selectall&quot; to the &quot;checked&quot; property of the current checkbox.&lt;/li&gt;
&lt;li&gt;By returning &quot;_selectall&quot; (true or false) in each iteration of the .each() loop, if the current individual checkbox has a property of &quot;checked&quot; that is &lt;strong&gt;false&lt;/strong&gt;, we break out of the loop and continue&lt;/li&gt;
&lt;li&gt;Finally, use the value of &quot;data-select-all&quot; in the current &quot;checkme&quot; checkbox to find its related &quot;check all&quot; checkbox and set its &quot;checked&quot; property. If &lt;em&gt;any&lt;/em&gt; or the related individual checkboxes is unchecked, then so should be the &quot;check all&quot; box.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;&lt;a name=&quot;spec3&quot;&gt;&lt;/a&gt;Specification 3: PHP and form field names using brackets.&lt;/h3&gt;

If a form has a group of fields with the same name, when it is submitted, the values of those fields are sent as multiple parameters to the server. For example, if we selected all name=&quot;foo&quot; fields and submitted them to foo.htm using a GET, this is the result:

&lt;code&gt;
foo.htm?foo=0&amp;foo=1&amp;foo=2&amp;foo=3&amp;foo=4&amp;foo=5&amp;foo=6&amp;foo=7&amp;foo=8&amp;foo=9&amp;sa_foo=on
&lt;/code&gt;

If the ACTION on the form was foo.cfm, the query string would be the same, but the ColdFusion parser can reference a URL variable &quot;foo&quot; whose value would be &quot;0,1,2,3,4,5,6,7,8,9&quot;.

Now, if the ACTION was foo.php, the PHP parser would set the value of the variable &quot;foo&quot; to that the &lt;em&gt;last instance&lt;/em&gt; of &quot;foo&quot; in the query string. So in this case, PHP would say that foo = 9.

HOWEVER, if we changed the NAME of the individual checkboxes from name=&quot;foo&quot; to name=&quot;&lt;strong&gt;foo[]&lt;/strong&gt;&quot;, the square brackets tell PHP that foo is an ARRAY with 10 elements in it, ranging from values 0 through 9.

&lt;code&gt;
&lt;input type=&quot;checkbox&quot; id=&quot;foo_#i#&quot; name=&quot;foo[]&quot; value=&quot;#i#&quot; data-select-all=&quot;sa_foo&quot; class=&quot;checkme&quot; /&gt;

&lt;input type=&quot;checkbox&quot; id=&quot;sa_foo&quot; name=&quot;sa_foo&quot; data-checkbox-name=&quot;foo[]&quot; class=&quot;selectall&quot; /&gt;
&lt;/code&gt;

But this causes a problem with JavaScript and in this case jQuery. Defining a jQuery selector using name=&quot;foo[]&quot; causes an error (message from Chrome):

&lt;code&gt;
$(&apos;:checkbox[name=&apos; + $(this).data(&apos;checkbox-name&apos;) + &apos;]&apos;);
&lt;/code&gt;

&lt;p class=&quot;alert-message error&quot;&gt;Uncaught Error: Syntax error, unrecognized expression: [name=foo[]]&lt;/p&gt;

The above code is equivalent to this:

&lt;code&gt;
$(&apos;:checkbox[name=foo[]]&apos;);
&lt;/code&gt;

which throws an &quot;unrecognized expression&quot; error &lt;em&gt;because the JavaScript parser thinks that foo[] is a JavaScript variable of type array which has not yet been defined&lt;/em&gt;.

So this is an easy fix:

&lt;code&gt;
$(&apos;:checkbox[name=&quot;&apos; + $(this).data(&apos;checkbox-name&apos;) + &apos;&quot;]&apos;);
&lt;/code&gt;

can you see that? It&apos;s fixed by &lt;em&gt;using double quotes around your attribute value&lt;/em&gt;. The code is now equivalent to this:

&lt;code&gt;
$(&apos;:checkbox[name=&quot;foo[]&quot;]&apos;);
&lt;/code&gt;

to which the JavaScript parser says (in a very &quot;Alan Rickman as Marvin the Robot&quot; style voice), &quot;Wow. Another string value. How very boring.&quot;

&lt;h3&gt;Final checkall.js&lt;/h3&gt;

Here&apos;s the final version of checkall.js with &quot;_this&quot; and blank lines removed.

&lt;code&gt;
$(document).ready(function(){
	$(&apos;:checkbox.selectall&apos;).on(&apos;click&apos;, function(){
		$(&apos;:checkbox[name=&quot;&apos; + $(this).data(&apos;checkbox-name&apos;) + &apos;&quot;]&apos;).prop(&quot;checked&quot;, $(this).prop(&quot;checked&quot;));
	});
	$(&apos;:checkbox.checkme&apos;).on(&apos;click&apos;, function(){
		var _selectall = $(this).prop(&quot;checked&quot;);
		if ( _selectall ) {
			$( &apos;:checkbox[name=&quot;&apos; + $(this).attr(&apos;name&apos;) + &apos;&quot;]&apos; ).each(function(i){
				_selectall = $(this).prop(&quot;checked&quot;);
				return _selectall;
			});
		}
		$(&apos;:checkbox[name=&quot;&apos; + $(this).data(&apos;select-all&apos;) + &apos;&quot;]&apos;).prop(&quot;checked&quot;, _selectall);
	});
});
&lt;/code&gt;

&lt;h3&gt;In conclusion . . .&lt;/h3&gt;

The &quot;check all&quot; checkbox is a standard user interface widget. It is easy to define similar widgets using jQuery to access standard attributes &amp; properties, along with common (if not yet standard) HTML5-style data attributes, of common elements throughout your application. By defining an application-wide library of widgets, it is possible to shorten your development time lines.

I&apos;ll be posting more jQuery examples soon. If there&apos;s anything you&apos;d like to see, please let me know via the Contact page.
				</description>
				
				<category>ColdFusion</category>
				
				<category>PHP</category>
				
				<category>jQuery</category>
				
				<category>Javascript</category>
				
				<category>HTML5</category>
				
				<pubDate>Wed, 18 Apr 2012 08:00:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2012/4/18/Check-All-Checkboxes-with-jQuery--Revisited</guid>
				
				
			</item>
			
			<item>
				<title>Looking for ColdFusion, Java, JavaScript, UI and SQL Developers</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2012/2/17/Looking-for-ColdFusion-Java-JavaScript-UI-and-SQL-Developers</link>
				<description>
				
				I have been at Equator for 2.5 years, currently a Senior Enterprise Architect and I&apos;m having a blast working here. We have multiple openings in Los Angeles, Irvine, Plano, and Seattle. In addition to developers, we also need Business Analysts and Technical Project Managers. If you&apos;re interested in working with a leader in the Real Estate and Financial Services Industry, please read on.&quot;Equator provides a Platform that automates and connects the Default Servicing industry. Mortgage Lenders, Mortgage Insurers, Servicers, Vendors, Real Estate Professionals and Government Entities use the Platform to automate their daily process and connect to transact in a safe and transparent environment.&quot;

Our application stack (core):

&lt;ul&gt;
&lt;li&gt;ColdFusion 8 on IIS&lt;/li&gt;
&lt;li&gt;ColdBox MVC framework&lt;/li&gt;
&lt;li&gt;jQuery and jQueryUI&lt;/li&gt;
&lt;li&gt;JBoss SOA stack&lt;/li&gt;
&lt;li&gt;SQL Server 2008&lt;/li&gt;
&lt;/ul&gt;

Our offices are located in Los Angeles (headquarters), Irvine (CA), Plano (TX) and we just opened in Seattle (WA). Many of these positions are contract only; telecommuting is available for all full-time employees and for contractors on a case-by-case basis. However, you must be based in California, Texas or Washington.

The following positions are open at any of our offices unless noted otherwise.

For more information and to apply for any position, &lt;a href=&quot;https://www.equator.com/home/index.cfm/company/careers/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;visit Equator.com&lt;/a&gt;. On the application form, where it says &quot;Where did you hear about us?&quot;, please put &quot;Adrian Moreno&quot;. :)

&lt;h2&gt;ColdFusion Developers&lt;/h2&gt;

The Developer&apos;s main goal is to implement the application as specified within the planned timeframe. The Developer is also expected to help specify the features of physical design, estimate time and effort to complete each feature, build or supervise implementation of features, prepare product for deployment, and provide technology subject-matter expertise to the team.

Considered a plus: Experience with Java, MVC frameworks and object oriented programming

&lt;h2&gt;Java Developers (LA, Irvine or Dallas)&lt;/h2&gt;

Implements software development projects within planned time frames using Java technologies. Specifies features of physical design, estimates time and effort needed to complete each feature, builds or supervises implementation of features, prepares product for deployment, and provides technology subject matter expertise to the development team.

Considered a plus: Experience with the JBoss SOA stack, Tomcat, Rules Engine, BPM, ESB, Spring, Hibernate and related technologies.

&lt;h2&gt;UI / JavaScript Developers&lt;/h2&gt;

Contribute to the development of Equator&apos;s HTML5 mobile application; Improve website and application usability through the use of AJAX and advanced JavaScript functionality; Establish and maintain HTML/CSS/JS mobile standards documentation; Ensure compliance with best practice coding standards.

We need both a UI Designer and a UI Developer (a.k.a. JavaScript Rock Star).

&lt;h2&gt;SQL Developers&lt;/h2&gt;

These developers will not deal with the administration of SQL Servers. Instead, they will be writing stored procedures and functions to be used by the application developers.

&lt;h2&gt;Business Analyst (Dallas)&lt;/h2&gt;

The Business Analyst works with client to analyze, identify, assess and document business requirements. This role supports internal and external clients with the discovery, approval, specification, creation and testing of projects.

&lt;h2&gt;Technical Project Manager&lt;/h2&gt;

The Project Manager is responsible for effectively managing multiple projects simultaneously, with a focus on launching systems, infrastructure and operational projects. This position will directly support all Equator departments providing project leadership for large, cross-functional, new product and support deployments as well as various special projects, while leveraging existing Equator PMO methodologies and procedures.

&lt;hr /&gt;

Again, for more information and to apply for any position, &lt;a href=&quot;https://www.equator.com/home/index.cfm/company/careers/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;visit Equator.com&lt;/a&gt;. On the application form, where it says &quot;Where did you hear about us?&quot;, please put &quot;Adrian Moreno&quot;. :)
&lt;hr /&gt;

&lt;strong&gt;Attention recruiters:&lt;/strong&gt; please don&apos;t contact me about these positions. We&apos;re already working with selected agencies. Thank you.
				</description>
				
				<category>Jobs</category>
				
				<category>SQL</category>
				
				<category>ColdFusion</category>
				
				<category>ColdBox</category>
				
				<category>Java</category>
				
				<category>jQuery</category>
				
				<category>Javascript</category>
				
				<category>HTML5</category>
				
				<pubDate>Fri, 17 Feb 2012 17:53:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2012/2/17/Looking-for-ColdFusion-Java-JavaScript-UI-and-SQL-Developers</guid>
				
				
			</item>
			
			<item>
				<title>ColdFusion 10 Beta is here!</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2012/2/17/ColdFusion-10-Beta-is-here</link>
				<description>
				
				&lt;a href=&quot;http://labs.adobe.com/technologies/coldfusion10/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;Go get it!.&lt;/a&gt;
				</description>
				
				<category>ColdFusion</category>
				
				<category>jQuery</category>
				
				<category>OOP</category>
				
				<category>HTML5</category>
				
				<pubDate>Fri, 17 Feb 2012 16:48:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2012/2/17/ColdFusion-10-Beta-is-here</guid>
				
				
			</item>
			
			<item>
				<title>D-Flex is hosting Ted Patrick from Sencha Feb 16, 2012</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2012/2/10/DFlex-is-hosting-Ted-Patrick-from-Sencha-Feb-16-2012</link>
				<description>
				
				The DFW ColdFusion User Group normally meets the 2nd Tuesday of each month. We&apos;d planned to avoid Valentine&apos;s day and meet on the 16th with a 2nd presentation on Ext.js. However, the guys at the Dallas Flex User Group informed me that they will be hosting Ted Patrick from Sencha (the owners of Ext.js) on the same night. Check out the details and note that this is NOT at our normal meeting location at Paladin&apos;s offices.&lt;h2&gt;Special Guest @ D-Flex - Take a look at Sencha with Ted Patrick!&lt;/h2&gt;

&lt;strong&gt;Date and Time:&lt;/strong&gt; February 16, 2012 07:00 PM - 09:00 PM&lt;br /&gt;
Please RSVP @ &lt;a href=&quot;http://groups.adobe.com/index.cfm?event=post.display&amp;postid=40888&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;D-Flex.org&lt;/a&gt;.

1st Floor Conference Room&lt;br /&gt;
12001 North Central Expressway&lt;br /&gt;
Dallas, TX 75243

Parking is available in the Garage north of the building.&lt;br /&gt;
*** Avoid spaces marked reserved.  

&lt;iframe width=&quot;425&quot; height=&quot;350&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; src=&quot;http://maps.google.com/maps?q=12001+North+Central+Expressway++Dallas,+TX+75243&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=12001+N+Central+Expy,+Dallas,+Texas+75243&amp;amp;t=m&amp;amp;z=14&amp;amp;ll=32.913802,-96.768409&amp;amp;output=embed&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href=&quot;http://maps.google.com/maps?q=12001+North+Central+Expressway++Dallas,+TX+75243&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=12001+N+Central+Expy,+Dallas,+Texas+75243&amp;amp;t=m&amp;amp;z=14&amp;amp;ll=32.913802,-96.768409&amp;amp;source=embed&quot; style=&quot;color:#0000FF;text-align:left&quot;&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;

&lt;h3&gt;Speaker&lt;/h3&gt;

Ted Patrick currently holds the position of Director of Developer Relations at Sencha. He works with developers to create applications using web technologies including HTML5, JavaScript, and CSS. Prior to Sencha, Ted worked at Barnes and Noble on NOOK Apps and on Flash &amp; Flex at Adobe Systems. Along the way, he founded 4 companies as an entrepreneur, raised vc funding, and sold 1. Ted loves to write software. No, He really, really, loves to write software. So much he can hardly think of it as work. Ted especially loves to help solve the hard strategy problems in combining business and software. The past 2 years have been filled with learning the ins and outs of the Android Operating System and how best to write software for phone-tablet form factor devices (IOS/Android). Lately, Ted dove head first into building apps using HTML5. When he is not writing code, you will find him either spending time with his family or scuba diving.

&lt;h3&gt;Agenda&lt;/h3&gt;

This month we thought we&apos;d take a look at something a little different than our usual. We&apos;ll be welcoming Ted Patrick who will walk you through Sencha&apos;s frameworks for building mobile and desktop applications using web technologies including HTML5, JavaScript, and CSS. We will cover the framework&apos;s foundation (OOP+MVC), standard libraries, containers, components, xtype rendering, and most importantly cross-browser support. Bring an open mind and a laptop, we will be building applications from scratch; feel free to follow along. Sencha provides frameworks, tools, and services for building professional applications with HTML5.

&lt;ul&gt;
&lt;li&gt;7:00pm - 7:15pm : Announcements&lt;/li&gt;
&lt;li&gt;7:15pm - 8:30pm : Hello Sencha: HTML5 Applications&lt;/li&gt;
&lt;li&gt;8:45pm - 9:00pm : Open Question and Answer&lt;/li&gt;
&lt;/ul&gt;

Drinks and meet up afterwards!
				</description>
				
				<category>Sencha</category>
				
				<category>CFUG</category>
				
				<category>Flex</category>
				
				<category>Javascript</category>
				
				<category>HTML5</category>
				
				<pubDate>Fri, 10 Feb 2012 17:34:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2012/2/10/DFlex-is-hosting-Ted-Patrick-from-Sencha-Feb-16-2012</guid>
				
				
			</item>
			
			<item>
				<title>OpenCF Summit and ColdBox Training Discount</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2012/2/10/OpenCF-Summit-and-ColdBox-Training-Discount</link>
				<description>
				
				The first CFML conference of the year is almost here. Come on down to Dallas and hang out with one of the largest ColdFusion / CFML communities in the US.&quot;[The] OpenCF Summit is a community gathering focused exclusively on advancing free and open source software in the CFML community.

If you&apos;re interested in diving into the free software CFML engines,  learning more about the free software movement, and interacting with the most progressive thinkers in the CFML community, OpenCF Summit is for you!&quot; 

&lt;a href=&quot;http://opencfsummit.org&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;http://opencfsummit.org&lt;/a&gt;

The conference is only $72. If you have the means, I highly recommend checking it out. 

Luis Majano, the author of the ColdBox MVC framework for ColdFusion will be in town and he&apos;s offering a discount for ColdBox Training (training is separate from conference fees). 

&lt;a href=&quot;http://coldbox.eventbrite.com/?discount=awesome&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;You can register for training here.&lt;/a&gt; Training will be on Feb. 20 and 22, 2012.
				</description>
				
				<category>Conference</category>
				
				<category>Railo</category>
				
				<category>ColdFusion</category>
				
				<category>ColdBox</category>
				
				<category>OpenBD</category>
				
				<pubDate>Fri, 10 Feb 2012 17:22:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2012/2/10/OpenCF-Summit-and-ColdBox-Training-Discount</guid>
				
				
			</item>
			
			<item>
				<title>iKnowKungFoo is Evolving</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2011/11/29/iKnowKungFoo-is-Evolving</link>
				<description>
				
				It&apos;s been a year and a half since my last post and over two years since my last truly technical post. I promised myself I&apos;d get back to writing this year, but life and work kept getting in the way. Fortunately, I&apos;ve been able to get a number of things back on track over the last few months. This blog is one of them.&lt;h2&gt;Blogging in the Cloud&lt;/h2&gt;

My blog is now on a Rackspace Cloud server, running ColdFusion 9 on CentOS 5.5. I basically spun up one of their LAMP images, then consulted &lt;a href=&quot;http://www.aaronwest.net/blog/index.cfm/2011/2/7/Super-Guide-Installing-ColdFusion-9-on-CentOS-Linux&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Aaron West&apos;s excellent guide&lt;/a&gt;, made a few adjustments for ColdFusion Standard and was up and running in short order.

&lt;h2&gt;Upgrading BlogCFC&lt;/h2&gt;

Previously, I was running BlogCFC version 5.9.001. There have been a number of upgrades since then related to both security and functionality. I exported the MySQL database from my previous host, then installed the latest version of BlogCFC locally, including the latest MySQL schema.

Thankfully, most columns in the BlogCFC database have default values set. Once I had the newest version of the database, I just ran the INSERT scripts from the MySQL dump file in order to populate the database. After that, I updated the single record in &quot;tblusers&quot;, changing the username to that from my live site.

If you&apos;ve run the blog application before making all of these data changes, you&apos;ll not see your data correctly. Re-initializing the blog application won&apos;t help, you&apos;ll have to restart the CF server. At least, that&apos;s what I had to do.

&lt;h2&gt;Twitter Bootstrap&lt;/h2&gt;

At this year&apos;s Adobe MAX conference, I gave a presentation at the ColdFusion Unconference. The presentation was titled, &quot;Laying the Foundation for Modern ColdFusion Applications&quot;. Really, it continued, &quot;using HTML5, BluePrintCSS, jQuery, jQueryUI, jQuery Validate&quot; and so on, but I only had 50 minutes.

After the presentation, someone (and I apologize for not recalling your name) came up and asked if I&apos;d looked at &lt;a href=&quot;http://twitter.github.com/bootstrap/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;Twitter Bootstrap&lt;/a&gt;, &quot;a toolkit from Twitter designed to kickstart development of webapps and sites.&quot; I&apos;d heard of it, but never used it. Until now.

It&apos;s very easy to get started with Twitter Bootstrap if you&apos;re worked with other CSS Grids. Using one of their example layouts, I had the blog styled within a few minutes. Currently, TB is not &quot;reactive&quot;, meaning it doesn&apos;t use CSS Media Queries to re-size itself to whatever device is viewing it. Therefore, you&apos;ll have to switch out layouts programmatically to adjust to smaller displays.

&lt;h2&gt;Moving on up, to HTML5 . . .&lt;/h2&gt;

While I was working on all of this, Adobe made their announcements about focusing on HTML5. I&apos;ve been working with the &lt;a href=&quot;http://html5boilerplate.com/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;HTML5BoilerPlate&lt;/a&gt; as a template for some other recent applications, so i decided to integrate pieces of it with Twitter Bootstrap in order to create my modern application foundation.

I was given a review copy of &lt;a href=&quot;http://www.manning.com/crowther/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;Hello! HTML5 and CSS3&lt;/a&gt; by Rob Crowther from Manning Publishing a few months ago. I&apos;ll post a detailed review shortly, but I&apos;ll say now that after a quick read-through, it was a breeze to pick up on the parallels between how we&apos;ve traditionally laid out HTML4 vs HTML5.

&lt;h2&gt;Evolution&lt;/h2&gt;

I&apos;ve got a couple of years&apos; worth of blog posts rattling around in my head as well as a few books. If there&apos;s anything you&apos;d like me to cover, please use the Contact form and I&apos;ll do my best to respond quickly.

If you happen to see anything odd with the layout, please send me a note and include which browser you&apos;re using. I only tested this layout in Chrome, FireFox 3.6.x and MSIE 9.

During a Fishbowl session at the ColdFusion Unconference this year, &lt;a href=&quot;http://www.boyzoid.com/blog/&quot; class=&quot;outbound&quot; target=&quot;_blank&quot;&gt;Scott Stroz&lt;/a&gt; brought up the fact that as developers, we need to constantly &lt;strong&gt;evolve&lt;/strong&gt;. I couldn&apos;t agree more.

I have been very fortunate to have worked in a wide range of industries. At each employer, I&apos;ve learned concepts which I then applied as needed at subsequent employers. This has allowed me to evolve and, I hope, help others evolve. By getting this blog back up and running, I hope to do both again.
				</description>
				
				<category>ColdFusion</category>
				
				<category>Blog Info</category>
				
				<category>HTML5</category>
				
				<category>Adobe MAX</category>
				
				<pubDate>Tue, 29 Nov 2011 00:57:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2011/11/29/iKnowKungFoo-is-Evolving</guid>
				
				
			</item>
			
			<item>
				<title>Adobe ColdFusion Anthology - a new ColdFusion book!</title>
				<link>http://iknowkungfoo.com/blog/index.cfm/2010/5/3/Adobe-ColdFusion-Anthology--a-new-ColdFusion-book</link>
				<description>
				
				Thanks to Michael and Judith Dinowitz, there is a new ColdFusion book on the market, &lt;a href=&quot;http://www.amazon.com/Adobe-Coldfusion-Anthology-Michael-Dinowitz/dp/1430272155&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Adobe ColdFusion Anthology&lt;/a&gt;, and I&apos;m glad to have had a hand in it.

I&apos;ve been sitting on this for over a year now it&apos;s finally here! The book is an anthology of articles from &lt;a href=&quot;http://www.fusionauthority.com/&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Fusion Authority&lt;/a&gt; magazine. Chapter 11 of the book is my contribution, &quot;You Might Have a Performance Bottleneck If&quot;. Written in the mood of Jeff Foxworthy, I outline 12 common problems in web applications (not just CF applications) that can be easily solved by the proper use of a database.

What are you waiting for? Pick up your copy of &lt;a href=&quot;http://www.amazon.com/Adobe-Coldfusion-Anthology-Michael-Dinowitz/dp/1430272155&quot; target=&quot;_blank&quot; class=&quot;outbound&quot;&gt;Adobe ColdFusion Anthology&lt;/a&gt; today! :)
				</description>
				
				<category>SQL</category>
				
				<category>ColdFusion</category>
				
				<category>Woo-hoo!</category>
				
				<category>Books</category>
				
				<pubDate>Mon, 03 May 2010 14:21:00 -0500</pubDate>
				<guid>http://iknowkungfoo.com/blog/index.cfm/2010/5/3/Adobe-ColdFusion-Anthology--a-new-ColdFusion-book</guid>
				
				
			</item>
			</channel></rss>