<?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: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" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

			<channel>
			<title>Raymond Camden's Blog</title>
			<link>http://www.raymondcamden.com/index.cfm</link>
			<description>Raymond Camden's personal blog covering jQuery, Mobile, ColdFusion, and Web Development.</description>
			<language>en-us</language>
			<pubDate>Wed, 22 May 2013 17:48:58 -0400</pubDate>
			<lastBuildDate>Wed, 22 May 2013 16:39:00 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>raymondcamden@gmail.com</managingEditor>
			<webMaster>raymondcamden@gmail.com</webMaster>
			<itunes:subtitle />
			<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:author />
			<itunes:owner>
				<itunes:email>raymondcamden@gmail.com</itunes:email>
				<itunes:name />
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RaymondCamdensColdfusionBlog" /><feedburner:info uri="raymondcamdenscoldfusionblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
				<title>OSX Outlook keeps asking for a password</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/1fSMRmedxZw/OSX-Outlook-keeps-asking-for-a-password</link>
				<description>Ever since day one at Adobe I've had an odd issue with Outlook on my Mac. About 3-4 times a day it would 'forget' my password. As soon as I entered my password it worked, but it bugged me that I had to keep re-entering it. I Googled but never found the right answer. I deleted and recreated my profile numerous times, but it never helped.

Finally, &lt;a href="http://terrywhite.com/"&gt;Terry White&lt;/a&gt; (fellow Adobe evangelist!) made a simple suggest. Instead of entering my password in Outlook, I should be doing it in the Exchange settings via System Preferences.

So first you go here...

&lt;img src="http://www.raymondcamden.com/images/11.png" /&gt;

And then click Details:

&lt;img src="http://www.raymondcamden.com/images/21.png" /&gt;

That was it. Seriously. I can't believe I didn't figure that out earlier, but every single time I tried to fix it by Googling around I never came across this solution. (Probably because it was too obvious. ;)&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/1fSMRmedxZw" height="1" width="1"/&gt;</description>
				
				
				<category>Misc</category>
				
				<pubDate>Wed, 22 May 2013 16:39:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/22/OSX-Outlook-keeps-asking-for-a-password</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/22/OSX-Outlook-keeps-asking-for-a-password</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>The Future of the Web</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/rbmeqRawaqc/The-Future-of-the-Web</link>
				<description>I know, I know. The title sounds like SEO-link-bait, I apologize. I want to talk about something that I'm fairly excited about, and I hope it excites you as well.Last week I had the pleasure of listening to &lt;a href="http://dancallahan.info/"&gt;Dan Callahan&lt;/a&gt; give the keynote at cfObjective. I didn't get a chance to meet him in person (I basically ran to my presentation and then to the airport), but I greatly enjoyed his talk. His central theme was a simple one - it is time to learn JavaScript. This is a message that I just kind of assume that people already know, but as I still encounter people struggling with client-side development, it is apparent that we (we being the greater web community) still have quite a bit of growing to do.

&lt;img src="http://www.raymondcamden.com/images/keep-calm-and-learn-javascript.png" /&gt;

If there was one thing I would have added to Dan's talk it would have been a reminder that web developers are probably also somewhat behind in their HTML knowledge as well. I've been using HTML since 1993 or so. I spent a long time doing just server-side development for a while but even then I was still generating HTML. But at least once a month I'm reminded about some particular tag or attribute that I've forgotten about. Don't get me started about CSS. Every time I remember that you can specify hover stuff in CSS I remember how many times I wrote the same damn code to highlight menu items with JavaScript. 

I've made it my mission over the past few years to focus my energy in this direction. Any one who reads this blog or listens to me give presentations know this. Developing for the web can still be pretty darn frustrating, but at least the tools, and the environment, are growing in leaps and bounds. There's some growing pains here, but my god, there's &lt;strong&gt;growth&lt;/strong&gt;.

That is why I'm so excited to be hearing more and more about &lt;strong&gt;Web Components&lt;/strong&gt;. Web Components refer to a few different technologies (that I'll list in a moment). But in general, they represent an incredible change in the web. To me, they truly are "Web 2.0." For the first time you'll be able to define new building blocks (tags, behavior, design) by following web standards. You'll be able to extend the web. &lt;strong&gt;That is awesome.&lt;/strong&gt;

So what are Web Components? In general, they describe the following technologies/specs:

&lt;h2&gt;Templates&lt;/h2&gt;

Anyone who has worked with templates in JavaScript know how powerful this can be. Templates allow you to create reusable blocks of content that can be added to the DOM with JavaScript. As a simple example, imagine your using AJAX to fetch content from the server. As this content comes back as pure data, you need to write this out to the DOM. While you can certainly just create large blocks of HTML in JavaScript strings, this gets unwieldy pretty darn quickly. Hence the rise of multiple JavaScript template frameworks. 

The Template feature will provide native support for this. You will be able to use a template tag within your HTML document. The content in the tag is &lt;strong&gt;not executed&lt;/strong&gt; until you actually clone the template and add it to the DOM yourself. So any images or script blocks won't be loaded until necessary. 

To be clear, this isn't the exact same as something like &lt;a href="http://handlebarsjs.com/"&gt;Handlebars.js&lt;/a&gt;. You don't get token replacement. But it is native to the browser itself which means less additional code.

You can read more about the spec here: &lt;a href="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html"&gt;https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html&lt;/a&gt;

&lt;h2&gt;Shadow DOM&lt;/h2&gt;

Shadow DOM is - for me - the hardest concept to get my head around. I probably will not do a great job describing it, but in essence, it is a way to create a "black box" style system for content. Let me give you an example. Imagine you are writing some HTML that is meant to be consumed by someone else. Your HTML is just a H1 tag and a paragraph. You want to style this content, but in order to do so, you have to ensure your CSS does not conflict with anything in the parent document. An iFrame can solve this, but iFrames create other challenges as well. With the Shadow DOM, you can essentially say, "This CSS will apply to this block only. Period. Nothing will leak out or in." 

Again - I'm &lt;i&gt;not&lt;/i&gt; the best person to speak on this. You can read more about it at the spec (&lt;a href="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html"&gt;https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html&lt;/a)  or check out the excellent &lt;a href="http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/"&gt;HTML5 Rocks&lt;/a&gt; article on the topic.

&lt;h2&gt;Custom Elements&lt;/h2&gt;

The most exciting part of web components, for me anyway, are custom elements. As you can guess, they allow you to create new HTML elements. Right now they are prefixed (x-), but if you have ever wanted to define your own markup, this will allow you to do so. You get full lifecycle support (ie, knowing when your element is loaded, shown, etc) and you can even use this feature to extend existing elements. Of course, you can also tie your own JavaScript events and mix in both templates and the Shadow DOM.

If you have ever used something like &lt;a href="http://jqueryui.com/tabs/"&gt;jQuery UI's Tabs&lt;/a&gt; to add tabs to your site, web components will allow you to do it all via web standards.

&lt;h2&gt;HTML Imports&lt;/h2&gt;

The final piece of the puzzle is HTML imports. Essentially, once you've defined a custom element, applied some layout to it via the Shadow DOM and custom behavior, you can then create a reusable template that can be shared with others. In the same way you import a style sheet, the link tag will allow you to import custom elements. For example, x-tab or x-cowbell. 

You can find the spec for this here: &lt;a href="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html"&gt;https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html&lt;/a&gt;

&lt;h2&gt;So What, I Can't Use It Now!&lt;/h2&gt;

I bet you're asking, how well is this stuff supported? Right now support is pretty limited. In fact, custom elements aren't supported at all yet. The features that do work now are limited to Chrome and Firefox Nightly. The specs are still in development. Keep in mind though that a majority of our major browsers now are moving to a continuous update cycle. &lt;strong&gt;If you are still of the mindset that you don't need to care or pay attention to web standards than you are failing in your job as a web developer.&lt;/strong&gt; 

Want to know more? There is an awesome, and short, video by Eric Bidelman of Google that you can watch on this topic. I've embedded it below. You can also find his slide deck here: &lt;a href="http://www.webcomponentsshift.com/"&gt;http://www.webcomponentsshift.com/&lt;/a&gt;. Due note though that you are suppose to click the right arrow to start the presentation. The initial gray screen confused me a bit and I assumed something had broken.

&lt;iframe width="600" height="338" src="http://www.youtube.com/embed/fqULJBBEVQE?rel=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/rbmeqRawaqc" height="1" width="1"/&gt;</description>
				
				
				<category>Development</category>
				
				<category>HTML5</category>
				
				<pubDate>Wed, 22 May 2013 09:24:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/22/The-Future-of-the-Web</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/22/The-Future-of-the-Web</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Infinite Scroll Example with ColdFusion</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/Sit17n4oWWI/Infinite-Scroll-Example-with-ColdFusion</link>
				<description>A few weeks ago a reader asked if I had an example of infinite scroll with a ColdFusion back end. I replied that I did not, and that infinite scroll was the worst thing to happen to the Internet since the rainbow horizontal rule. 

&lt;img src="http://www.raymondcamden.com/images/lirainbw.gif" /&gt;

I'm possibly being a bit overly dramatic, but I'm &lt;strong&gt;really&lt;/strong&gt; not a fan of it. Maybe it's the OCD in me, but the fact that I can never get to the end of an infinite scroll UI just bugs the hell out of me.

That being said - I figured - why not make a quick example. It can't hurt, right?I did some Googling on the topic. Initially the results I found were not very helpful. Many required a bit of configuration and I was really looking for something quick and simple. Finally I came across this &lt;a href="http://stackoverflow.com/a/5059561/52160"&gt;great answer&lt;/a&gt; on Stack Overflow: 

&lt;script src="https://gist.github.com/cfjedimaster/5622664.js"&gt;&lt;/script&gt;

4 simple lines. Nice! So I took this and ran with it. I first created a fake service in a ColdFusion component that would return an infinite amount of data. Not exactly real world, but it worked. Note that I added a bit of a delay to the code so that my local testing would &lt;i&gt;feel&lt;/i&gt; a bit more realistic.

&lt;script src="https://gist.github.com/cfjedimaster/5622677.js"&gt;&lt;/script&gt;

The code here is pretty arbitrary. I return an array of structures containing a title and a body. I accept a start parameter, but I don't really even use it. Again, the entire purpose for this was to just send me a lot of data. Now let's look at the front-end code.

&lt;script src="https://gist.github.com/cfjedimaster/5622689.js"&gt;&lt;/script&gt;

A bit more than 4 lines, but hopefully you will see that I've simply taken the logic from the Stack Overflow answer and wrapped it around a call to a function called loadContent. loadContent handles several things.

&lt;ul&gt;
&lt;li&gt;First, it is intelligent enough to recognize when it is fetching data and prevent you from making multiple XHR requests at once.
&lt;li&gt;Secondly, it handles updating the DOM with a loading message so you know important crap is on the way.
&lt;li&gt;It does the XHR call and handles rendering it out. (Insert reminder about using JavaScript templates here.)
&lt;li&gt;Finally it removes the loading message.
&lt;/ul&gt;

Overall, pretty simple. You can demo this here: &lt;a href="http://www.raymondcamden.com/demos/2013/may/21/test.html"&gt;http://www.raymondcamden.com/demos/2013/may/21/test.html&lt;/a&gt;. If it seems slow, remember that I kept in that sleep() command there. 

I built a second demo that makes use of my actual blog database. For the most part it is the same, but note the use of a Query and limit operations to page the data.

&lt;script src="https://gist.github.com/cfjedimaster/5622720.js"&gt;&lt;/script&gt;

You can demo this version here: &lt;a href="http://www.raymondcamden.com/demos/2013/may/21/test2.html"&gt;http://www.raymondcamden.com/demos/2013/may/21/test2.html&lt;/a&gt;

In my testing this downloaded pretty quick (and I'm on VPN now downloading 2 gigs of VMs). There are two things missing from this version. 

One - I need to enable my front-end service to recognize when it is no longer getting rows of data from the back end. I could handle that with a flag in the result object or some other way. 

Second - If I were to add links to the actual blog entries, I'd need to support some way of remembering where you were when you hit the back button.

If folks care, I'll do some updates to add that.&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/Sit17n4oWWI" height="1" width="1"/&gt;</description>
				
				
				<category>JavaScript</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 21 May 2013 14:34:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/21/Infinite-Scroll-Example-with-ColdFusion</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/21/Infinite-Scroll-Example-with-ColdFusion</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>ColdFusion Summit Announced</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/afeONMkXT3I/ColdFusion-Summit-Announced</link>
				<description>I'm totally stealing this content from the &lt;a href="http://blogs.coldfusion.com"&gt;official ColdFusion blog&lt;/a&gt;, but as it is good news I think I'm allowed. The ColdFusion Summit, a ColdFusion conference organized by Adobe's ColdFusion team, is now officially announced. Details:

October 24th and 25th

&lt;a href="http://www.mandalaybay.com/"&gt;Manadalay Bay Resort &amp; Casino&lt;/a&gt;, Las Vegas, Nevada

Registration cost: $250

Each paid registration will receive a FREE copy of ColdFusion Builder (MSRP value of $299!)


&lt;img src="http://www.raymondcamden.com/images/bobapony.jpg" /&gt;&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/afeONMkXT3I" height="1" width="1"/&gt;</description>
				
				
				<category>ColdFusion</category>
				
				<pubDate>Mon, 20 May 2013 20:03:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/20/ColdFusion-Summit-Announced</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/20/ColdFusion-Summit-Announced</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Capturing camera/picture data without PhoneGap</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/qnbeDtkxBQs/Capturing-camerapicture-data-without-PhoneGap</link>
				<description>As people know, I'm a huge fan of PhoneGap and what it allows me to do with JavaScript, HTML, and CSS. But I think it is crucial to remember that you don't &lt;i&gt;always&lt;/i&gt; need PhoneGap. A great example of that is camera access. Did you know that recent mobile browsers support accessing the camera directly from HTML and JavaScript? Let's look at an example.Over a year ago I wrote a &lt;a href="http://www.raymondcamden.com/index.cfm/2012/1/13/Demo-of-Color-Palettes-and-PhoneGap"&gt;blog post&lt;/a&gt; in which I created an application called "Color Thief." This application made use of PhoneGap's Camera API and a third party JavaScript library called &lt;a href="http://lokeshdhakar.com/projects/color-thief/"&gt;Color Thief&lt;/a&gt;. I loved this example because it demonstrated how you could combine the extra power that PhoneGap provides along with existing JavaScript libraries. 

This morning I watched an excellent Google IO presentation (&lt;a href="https://www.youtube.com/watch?v=EPYnGFEcis4&amp;feature=youtube_gdata_player"&gt;https://www.youtube.com/watch?v=EPYnGFEcis4&amp;feature=youtube_gdata_player&lt;/a&gt;) on Mobile HTML. It was an overview of some of the exciting stuff you can now do with mobile HTML and JavaScript. To be clear, this was all without using wrappers like PhoneGap.

In one of the examples the presenters discussed the new "capture" support for the input/file field type. This is rather simple to implement:

&amp;lt;input type="file" capture="camera" accept="image/*" id="takePictureField"&amp;gt;

If supported (recent Android and latest iOS), the user can then use their camera to select a picture. I decided to rebuild my old demo to skip PhoneGap completely and just make use of this feature. Here's the code:

&lt;script src="https://gist.github.com/cfjedimaster/5613113.js"&gt;&lt;/script&gt;

For the most part, this is pretty similar to the last version. I no longer wait for the deviceready event, but instead just listen for the document itself to load. Instead of listening for a button click, I've switched to an input field using type=file. I now listen for the change event, and on that, I see if I have access to a file. If  I do, I can then use the URL object to create a pointer to the source and then simply add it to my DOM. After that, Color Thief takes over.

The only tricky part I ran into was that in iOS the URL object is still prefixed. You can see how I get around that in the startup code. To be fair, this isn't 100% backwards compatible, I could add a few checks in here to ensure that things will work and gracefully let people on older phones know they can't use this feature.

But the end result is nearly the exact same functionality in a web page - no PhoneGap, no native code.

&lt;iframe width="600" height="450" src="http://www.youtube.com/embed/knU2SpymiaI?rel=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/qnbeDtkxBQs" height="1" width="1"/&gt;</description>
				
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Mon, 20 May 2013 10:31:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/20/Capturing-camerapicture-data-without-PhoneGap</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/20/Capturing-camerapicture-data-without-PhoneGap</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Converting a list of dates into a shorter, combined list</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/D36vLu3oTm0/Converting-a-list-of-dates-into-a-shorter-combined-list</link>
				<description>Forgive the title, I'm not sure it best describes the task. I was asked by a reader to consider a simple problem. Given a list of dates, how would you rewrite them so that two (or more) consecutive dates are displayed together? For example, imagine this input.dates = [(May 1, 2013), (May 4, 2013), (May 5, 2013), (May 7, 2013)]

I want to take this list and join the values that are one day apart. I should end up with:

dates = [(May 1, 2013), (May 4, 2013 - May 5, 2013), (May 7, 2013)]

I wrote two solutions for this - one in ColdFusion and one in JavaScript. Let's start with ColdFusion.

First I create my sample data and a new array that will store my results.

&lt;script src="https://gist.github.com/cfjedimaster/5607780.js"&gt;&lt;/script&gt;

Now for the real "meat" of the logic. My idea here was to store objects in the new date array. The object contains a first and last property referring to the first and last date. What this allows for is a quick date comparison. If the next item in my source data is one day after the last value in the previous range, than we 'extend' the range by resetting the last property. Otherwise we need to add a new item in the result array.

&lt;script src="https://gist.github.com/cfjedimaster/5607787.js"&gt;&lt;/script&gt;

Finally, let's make this easier to use by doing some formatting on the array elements. We will loop through each item and add a 'formatted' key.

&lt;script src="https://gist.github.com/cfjedimaster/5607809.js"&gt;&lt;/script&gt;

And the result is this:

&lt;img src="http://www.raymondcamden.com/images/Screenshot_5_19_13_9_27_AM.png" /&gt;

Woot. Ok, now let's look at the JavaScript version. I'll just share the complete template first and talk about the differences.

&lt;script src="https://gist.github.com/cfjedimaster/5607818.js"&gt;&lt;/script&gt;

Ignore our two helper functions on top for now. Our initial seed data is very similar to the ColdFusion one. Instead of using dateNew we use the Date constructor. 

The first loop is also pretty similar. Do remember that JavaScript arrays begin with 0. The main issue we have is doing the date comparison. There is no dateDiff in JavaScript. You can find great Date libraries out there, but as I had a &lt;i&gt;very&lt;/i&gt; simple need here, I just wrote a quick function that compares the millisecond values of two dates and sees if the difference is less than one day. (By the way, the best JavaScript date library out there - imo - is &lt;a href="http://momentjs.com/"&gt;Moment.js&lt;/a&gt;.)

Finally, I did my formatting. Again, I could have grabbed a library for this, but instead I simply ran toDateString. My dtFormat function is a bit simple. Almost too simple to even be its own function. But I was imagining that I'd probably want to make formatting a bit more complex in the future. This lets me handle that later. 

The result:

&lt;img src="http://www.raymondcamden.com/images/Screenshot_5_19_13_9_36_AM.png" /&gt;

Note - I switched to Firefox for the screenshot as I think it prints objects nicer in the console.

I've included a zip with the complete code for both examples. Note the CFM has a tag-version as well for older CF engines.&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/D36vLu3oTm0" height="1" width="1"/&gt;</description>
				
				
				<category>JavaScript</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Sun, 19 May 2013 09:03:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/19/Converting-a-list-of-dates-into-a-shorter-combined-list</guid>
				
				
				
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/19/Converting-a-list-of-dates-into-a-shorter-combined-list</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~5/AESlflxXkAA/Archive30.zip" length="1517" type="application/zip" /><feedburner:origEnclosureLink>http://www.raymondcamden.com/enclosures/Archive30.zip</feedburner:origEnclosureLink></item>
			
		 	
			
			
			<item>
				<title>Note to folks attending cfObjective and attending my sessions</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/Y5S0RQ9rcFI/Note-to-folks-attending-cfObjective-and-attending-my-sessions</link>
				<description>Due to a problem back home, I have to leave the conference early. I'm giving my Mobile Web Debugging session in the first slot this morning (this schedule change will be announced this morning). Dave Ferguson will be covering my CF10+HTML5 session and Matt Gifford will be covering my PhoneGap session.&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/Y5S0RQ9rcFI" height="1" width="1"/&gt;</description>
				
				
				<category>Misc</category>
				
				<pubDate>Thu, 16 May 2013 06:06:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/16/Note-to-folks-attending-cfObjective-and-attending-my-sessions</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/16/Note-to-folks-attending-cfObjective-and-attending-my-sessions</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>ColdFusion Job Opening - healthendevours.com</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/YepY3M8AbfY/ColdFusion-Job-Opening--healthendevourscom</link>
				<description>Passing it on...

&lt;blockquote&gt;
My name is Derek Bowes and I used to run whousescoldfusion.com and twitter is @whousescf.

I am currently working for healthendeavors.com and our Health Care application uses CF10 with SQL 2008. We need more CF developers and are having a hard time finding good ones. They need to be on site in our Scottsdale, AZ office and we would be willing to pay to relocate the right candidate (US relocation only). Need someone mid-senior, with jQuery and JavaScript.

If you could put the word out, it would be greatly appreciated.

I can be reached at derek@healthendeavors.com.
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/YepY3M8AbfY" height="1" width="1"/&gt;</description>
				
				
				<category>ColdFusion</category>
				
				<pubDate>Wed, 15 May 2013 05:51:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/15/ColdFusion-Job-Opening--healthendevourscom</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/15/ColdFusion-Job-Opening--healthendevourscom</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Forms not working on your ColdFusion server? Size matters.</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/rrCTncnOD34/Forms-not-working-on-your-ColdFusion-server-Size-matters</link>
				<description>I've come across multiple people lately who have been bitten by this so I thought a quick blog post would be useful for my readers. If you've recently upgraded your ColdFusion server or patched it, you may find some forms return an error when submitted. Here is an example:&lt;img src="http://www.raymondcamden.com/images/Screenshot_5_14_13_9_08_AM.png" /&gt;

To cause this error, I simply created a form with 101 fields like so:

&lt;script src="https://gist.github.com/cfjedimaster/5576199.js"&gt;&lt;/script&gt;

If you modify the loop to go to 100 instead of 101, it works fine. People using ColdFusion 10 or a recently patched ColdFusion 9 will encounter this.

The cause is a recent security fix. You can read the details here (&lt;a href="http://www.infosecurity-magazine.com/view/24510/adobe-ships-patch-for-coldfusion-flaw-that-could-lead-to-dos-attacks/"&gt;Adobe ships patch for ColdFusion flaw that could lead to DoS attacks&lt;/a&gt;), but most likely you are only concerned about how to get around this.

In the ColdFusion 10 Administrator, under Settings, way at the bottom, you will find this new setting:

&lt;img src="http://www.raymondcamden.com/images/rayScreenshot_5_14_13_9_12_AM.png" /&gt;

You can tweak this to a value that makes sense for your form. For folks using ColdFusion 8 and 9, you have to edit a bit of XML to handle this. Details may be found here: &lt;a href="http://helpx.adobe.com/coldfusion/kb/coldfusion-security-hotfix.html"&gt;ColdFusion Security Hotfix APSB12-06&lt;/a&gt;.

&lt;b&gt;Edit:&lt;/b&gt;&lt;br/&gt;
A few minutes after I posted this blog post I tried a quick experiment. In ColdFusion 10, you can finally now take form fields of the same name and use this as an array. If you add this.sameformfieldsasarray = "true"; to your Application.cfc and post 2 form fields with the same name, their value in the form scope will be an array. I recommend this setting in general as a list (the normal behavior) cannot be reliably decoded. Turns out, if you use the same field name, you can post any number of form fields you want. I tried with 200, no problem. If you also do the sameformfield thingy, the values work just fine.&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/rrCTncnOD34" height="1" width="1"/&gt;</description>
				
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 14 May 2013 08:55:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/14/Forms-not-working-on-your-ColdFusion-server-Size-matters</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/14/Forms-not-working-on-your-ColdFusion-server-Size-matters</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Hear me wax poetic on Nerd Radio</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/SgoftgGAidI/Hear-me-wax-poetic-on-Nerd-Radio</link>
				<description>Ok, maybe "poetic" is a bit much... but you can listen to my Nerd Radio interview here:

&lt;a href="http://blog.nerdradio.com/post/50118970743/max-day-3-ray-camden-and-stupid-questions"&gt;MAX Day 3: Ray Camden and Stupid Questions&lt;/a&gt;
&lt;blockquote&gt;
Ray Camden, Adobe Creative Cloud Evangelist, talks with us about his sessions at MAX covering topics like PhoneGap Build and web development tools.
&lt;/blockquote&gt;

Thanks to Leif and and Garth for inviting me!

&lt;img src="http://www.raymondcamden.com/images/tumblr_header.png" /&gt;&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/SgoftgGAidI" height="1" width="1"/&gt;</description>
				
				
				<category>Misc</category>
				
				<pubDate>Mon, 13 May 2013 16:54:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/13/Hear-me-wax-poetic-on-Nerd-Radio</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/13/Hear-me-wax-poetic-on-Nerd-Radio</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>JavaScript Design Patterns - The Revealing Module Pattern</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/eXi1YzPBQq4/JavaScript-Design-Patterns--The-Revealing-Module-Pattern</link>
				<description>It has been a few weeks (ok, a few months) since my last blog post on JavaScript design patterns. I'd apologize, but frankly, it will probably be a few more weeks until I blog on this subject again, so hopefully people aren't expecting a &lt;i&gt;fast&lt;/i&gt; series here (grin). As a reminder, the idea behind this series is to create real, &lt;strong&gt;practical&lt;/strong&gt; examples of various JavaScript design patterns based on the book, "Learning JavaScript Design Patterns" by Addy Osmani. (See my review &lt;a href="http://www.raymondcamden.com/index.cfm/2013/4/14/Review-Learning-JavaScript-Design-Patterns"&gt;here&lt;/a&gt;.) In this blog entry I'll be discussing the Revealing Module pattern.Addy Osmani describes the Revealing Module pattern as:

&lt;blockquote&gt;
The Revealing Module pattern came about as [Christian] Heilmann was frustrated with the fact
that he had to repeat the name of the main object when he wanted to call one public
method from another or access public variables. He also disliked the Module pattern's
requirement of having to switch to object literal notation for the things he wished to
make public.
&lt;/blockquote&gt;

There's two main issues here. First, the concept of "repeat the name of the main object when he wanted to call one public method from another..." If your only experience with the Module pattern is based on my &lt;a href="http://www.raymondcamden.com/index.cfm/2013/3/22/JavaScript-Design-Patterns--The-Module-Pattern"&gt;previous blog post&lt;/a&gt;, then this may not make sense. Let's consider a simple example.

&lt;script src="https://gist.github.com/cfjedimaster/5567875.js"&gt;&lt;/script&gt;

I've got a simple module here called revealModuleTest. (And yes, this isn't a "real world example", but I wanted to demonstrate the issue with a simple block first.) My module has one private method, and three public methods. The first one, doPriv, simply wraps a call to the private method. The second public method, pub1, just returns the number 2. Finally, testpub, just makes use of pub1 and multiplies it by two.

Note the three tests at the bottom. As the comments suggest, the final method will fail: &lt;strong&gt;Uncaught ReferenceError: pub1 is not defined &lt;/strong&gt;

Why? When the result of the module (everything in that return) is returned back to the caller the scope has changed such that pub1, by itself, is no longer addressable from testpub. You won't have this issue if a private method calls another one, but you will definitely run into this with the public methods returned by your module.  (I don't think I did a great job explaining this - I may come back and flesh this out.)

The fix is rather trivial - simply use the same API you would in your own code calling the module:

&lt;script src="https://gist.github.com/cfjedimaster/5567903.js"&gt;&lt;/script&gt;

The second thing Heilmann talks about is the switch to using object notation for defining methods. Everything in the return block is using object notation. Personally, this doesn't seem like a big deal, but all things being considered, I would prefer to write more code in function x() syntax versus x:function(). 

If it sounds like the Revealing Module is just a cosmetic change, that would be fair I think. But don't simply dismiss it. Anything that makes you quicker, more efficient, etc in your development is probably a good thing. I'd also argue that the issue with "public calling public" is something you could easily accidentally trip into. If the Revealing Module pattern makes that easier to avoid, then it is yet another reason to consider it.

Let's look at an example of this - again - using my kinda stupid example.

&lt;script src="https://gist.github.com/cfjedimaster/5568608.js"&gt;&lt;/script&gt;

As you can see, this isn't a radically changed version. It has the same smell, but is just structured a bit differently. Note that all of the real logic is in private functions. The return block is now far simpler - it just provides the public API. 

Ok, so how about a real example? In my previous blog post I created a diary application that allowed you to create and read diary entries stored in WebSQL. I defined my Diary as a module. You can view that source &lt;a href="https://gist.github.com/cfjedimaster/5222944/raw/fabc9a6080632f8623fc088ab42568eb417a8764/gistfile1.js"&gt;here&lt;/a&gt;.

To modify this to match the Revealing Module pattern, I moved everything into private methods and created a much simpler return block.

&lt;script src="https://gist.github.com/cfjedimaster/5568660.js"&gt;&lt;/script&gt;

So what do you think? I have to be honest. When I first read about this pattern, I really didn't think much about it. As I said, it seemed just cosmetic. But after seeing the change to my Diary module, it just... feels better. 

I didn't put this up as a 'live' demo since the functionality is the exact same as before. (And as a reminder, it only works in WebKit browsers, which is bad, and will be addressed later.) If you really want to try this, you can download the code from the last entry and drop in the new diary. Since it is has the exact same API, everything will just plain work!&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/eXi1YzPBQq4" height="1" width="1"/&gt;</description>
				
				
				<category>JavaScript</category>
				
				<pubDate>Mon, 13 May 2013 06:53:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/13/JavaScript-Design-Patterns--The-Revealing-Module-Pattern</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/13/JavaScript-Design-Patterns--The-Revealing-Module-Pattern</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Missed MAX 2013? How to catch up...</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/Pm-yMs0Y9f0/Missed-MAX-2013-How-to-catch-up</link>
				<description>&lt;img src="http://www.raymondcamden.com/images/2013-05-06 08.00.172.jpg" style="float:left;margin-right:10px;margin-bottom:10px" /&gt;

 This year was my second MAX as an employee and was both exciting - and pretty tiring. If you weren't able to make it though there is an easy way to catch what you missed.&lt;h2&gt;Keynotes&lt;/h2&gt;

Monday's keynote was focused on our product announcements and featured our first hardware announcements ever - Mighty and Napoleon. If you haven't heard yet, Creative Suite is now Creative Cloud. You can find out more at the &lt;a href="http://www.adobe.com/products/creativecloud/faq.html"&gt;FAQ&lt;/a&gt; or feel free to just ask me. 

&lt;iframe title="AdobeTV Video Player" width="600" height="345" src="http://tv.adobe.com/embed/1217/18400/" frameborder="0" allowfullscreen scrolling="no"&gt;&lt;/iframe&gt;

By the way - the hardware announcements were a &lt;i&gt;complete&lt;/i&gt; surprise to me!

Tuesday's keynote was cool as well. It focused on four different creatives discussing their process and showcasing their work. 

&lt;iframe title="AdobeTV Video Player" width="600" height="345" src="http://tv.adobe.com/embed/1217/18405/" frameborder="0" allowfullscreen scrolling="no"&gt;&lt;/iframe&gt;

&lt;h2&gt;Sneaks&lt;/h2&gt;

There isn't a filtered list of the sneaks yet, and it looks like they aren't even all online (there were 12 total), but if you go to the &lt;a href="http://www.youtube.com/user/AdobeCreativeCloud"&gt;AdobeCreativeCloud&lt;/a&gt; channel on YouTube, you can find a playlist called &lt;a href="http://www.youtube.com/playlist?list=PLD8AMy73ZVxXRHZvcj5WvsMopeNMcL_so"&gt;Adobe Max 2013&lt;/a&gt;. In this playlist are 6 of the 12 sneaks. Unfortunately, both of the Brackets sneaks are not there. I'm going to do a separate blog post on Brackets and what was sneaked later.

&lt;h2&gt;Sessions&lt;/h2&gt;

Finally, you can view most, but not all, of the sessions, on Adobe TV: &lt;a href="http://tv.adobe.com/show/max-2013"&gt;MAX 2013 - The Creativity Conference&lt;/a&gt;. &lt;strong&gt;Note:&lt;/strong&gt; Not all of the sessions are available currently. For example, two of mine are still being encoded. (I'll blog when each one becomes available.) But there's quite a bit ready now and some damn interesting stuff there. (And to be clear, some great &lt;i&gt;developer&lt;/i&gt; content!)&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/Pm-yMs0Y9f0" height="1" width="1"/&gt;</description>
				
				
				<category>Development</category>
				
				<pubDate>Fri, 10 May 2013 16:11:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/10/Missed-MAX-2013-How-to-catch-up</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/10/Missed-MAX-2013-How-to-catch-up</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>MAX Session: Advanced PhoneGap Build</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/S-75noqmI1I/MAX-Session-Advanced-PhoneGap-Build</link>
				<description>Oddly, the &lt;i&gt;last&lt;/i&gt; of my Adobe MAX sessions is available online now but none of my earlier ones. I assume they will show up in the next day or so. But for now, enjoy my eloquent presentation on the more advanced aspects of using PhoneGap Build. You can download the source code for the sample apps and slide deck as well.&lt;iframe title="AdobeTV Video Player" width="600" height="345" src="http://tv.adobe.com/embed/1217/18506/" frameborder="0" allowfullscreen scrolling="no"&gt;&lt;/iframe&gt;

As always, I hope this is helpful!&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/S-75noqmI1I" height="1" width="1"/&gt;</description>
				
				
				<category>Mobile</category>
				
				<category>HTML5</category>
				
				<pubDate>Thu, 09 May 2013 21:49:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/9/MAX-Session-Advanced-PhoneGap-Build</guid>
				
				
				
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/9/MAX-Session-Advanced-PhoneGap-Build</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~5/8yMPtHfFV18/APB.zip" length="7832632" type="application/zip" /><feedburner:origEnclosureLink>http://www.raymondcamden.com/enclosures/APB.zip</feedburner:origEnclosureLink></item>
			
		 	
			
			
			<item>
				<title>How I'd sell unit testing...</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/_odU-l47h0o/How-Id-sell-unit-testing</link>
				<description>Someone came up to me after my MAX session on web development debugging and asked for some advice on how to 'sell' unit testing to his clients. This was my response:

&lt;blockquote&gt;
Simple. Tell the client you feel unit testing is so important that you're willing to talk about it with him face to face. In fact, you'll even fly him to your location. In order to save money though you're going to use a budget airline that skips testing.
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/_odU-l47h0o" height="1" width="1"/&gt;</description>
				
				
				<category>Development</category>
				
				<pubDate>Wed, 08 May 2013 14:48:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/8/How-Id-sell-unit-testing</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/8/How-Id-sell-unit-testing</feedburner:origLink></item>
			
		 	
			
			
			<item>
				<title>Update to my Edge Inspect Viewer</title>
				<link>http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/D0DGh29UK1g/Update-to-my-Edge-Inspect-Viewer</link>
				<description>Many moons ago I &lt;a href="http://www.raymondcamden.com/index.cfm/2012/11/6/Proof-of-Concept--An-Edge-Inspect-Screenshot-Viewer"&gt;blogged&lt;/a&gt; about a proof of concept I built that allowed you to view Edge Inspect screen shots via a nice web interface. This was built in Node using the Express framework. I've finally gotten around to doing some updates to it as well as pushing it up to Github.First, I applied the &lt;a href="http://topcoat.io/"&gt;Topcoat&lt;/a&gt; UI framework. This is an open source UI framework for desktop and mobile available for forking on Github. 

Here is a screen shot of the app in action:

&lt;img src="http://www.raymondcamden.com/images/one.png" /&gt;

And here is a shot of the detail view (I'd like to add a bit more detail here):

&lt;img src="http://www.raymondcamden.com/images/onepointfive.png" /&gt;

New features include the ability to filter by operating system or device. Here's a filter on Android:

&lt;img src="http://www.raymondcamden.com/images/two.png" /&gt;

So, like it? As I've said before, I'm still rather new to Node so take this code with a grain of salt. You can download (or fork and improve!) here: &lt;a href="https://github.com/cfjedimaster/inspectviewer"&gt;https://github.com/cfjedimaster/inspectviewer&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/RaymondCamdensColdfusionBlog/~4/D0DGh29UK1g" height="1" width="1"/&gt;</description>
				
				
				<category>Mobile</category>
				
				<category>Development</category>
				
				<pubDate>Tue, 07 May 2013 14:55:00 -0400</pubDate>
				<guid isPermaLink="false">http://www.raymondcamden.com/index.cfm/2013/5/7/Update-to-my-Edge-Inspect-Viewer</guid>
				
				
			<feedburner:origLink>http://www.raymondcamden.com/index.cfm/2013/5/7/Update-to-my-Edge-Inspect-Viewer</feedburner:origLink></item>
			
		 	
			</channel></rss>
