<?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>Adam Howitt&apos;s Blog - JavaScript</title>
			<link>http://www.webdevref.com/blog/index.cfm</link>
			<description>A blog for ColdFusion, iPhone Development and other musings</description>
			<language>en-us</language>
			<pubDate>Wed, 08 Sep 2010 05:30:38 -0400</pubDate>
			<lastBuildDate>Thu, 13 Nov 2008 11:58:05 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>adamhowitt@gmail.com</managingEditor>
			<webMaster>adamhowitt@gmail.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>adamhowitt@gmail.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			<itunes:image href="" />
			<image>
				<url></url>
				<title>Adam Howitt&apos;s Blog</title>
				<link>http://www.webdevref.com/blog/index.cfm</link>
			</image>
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<item>
				<title>TinyMCE ColdFusion Image Browser</title>
				<link>http://www.webdevref.com/blog/index.cfm/2008/11/13/TinyMCE-ColdFusion-Image-Browser</link>
				<description>
				
				&lt;div&gt;I love tinyMCE but because I use ColdFusion I&apos;ve not been able to use the built image browser. &amp;nbsp;The API provides the hooks required to roll your own so I figured someone else might have done the heavy lifting and sure enough, I found a CF based image browser plugin.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I installed &lt;a href=&quot;http://www.cjboco.com/index.cfm/2007/6/27/A-ColdFusion-ImageFile-Browser-for-TinyMCE&quot; target=&quot;_self&quot; title=&quot;ColdFusion Image Browser Plugin for TinyMCE&quot;&gt;Doug Jones&apos; CF_iBrowser v1.0.4&lt;/a&gt; to work with &lt;a href=&quot;http://tinymce.moxiecode.com/examples/full.php&quot; target=&quot;_self&quot; title=&quot;TinyMCE Rich Text Editor&quot;&gt;TinyMCE 3.2.1&lt;/a&gt; in &lt;a href=&quot;http://blogcfc.riaforge.org/&quot; target=&quot;_self&quot; title=&quot;BlogCFC - Best ColdFusion Blog&quot;&gt;BlogCFC&lt;/a&gt;. &amp;nbsp;His instructions were excellent and you shouldn&apos;t have too many issues. &amp;nbsp;Things to look out for:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;At the time of writing the JavaScript function OpenFile in index.cfm doesn&apos;t trigger the onChange property for the imageURL field (at least in my browser) so I had to manually add the line &lt;div class=&quot;code&quot;&gt;srcWin.ImageDialog.showPreviewImage(fileUrl);&lt;/div&gt; before the &lt;div class=&quot;code&quot;&gt;window.close()&lt;/div&gt; line. &amp;nbsp;This manually calls the showPreviewImage function that sets the image dimensions, otherwise your image will be added with a height and width of 0px!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you are using BlogCFC v5.9.1.001, you&apos;ll need to manually comment out the image browser library since the setting for turning off the file browser didn&apos;t seem to work for me.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Check to see that you don&apos;t already have a an option specified in the tinyMCE.init() code block - mine was set to the PHP based plugin that comes bundled for advimage. &amp;nbsp;Simply replace that value with the line in step 3 of Doug&apos;s instructions.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;Overall, great experience with the plugin once I realized I was looking at the wrong tinyMCE.init block and kudos for Doug for a job well done!&lt;br /&gt;&lt;/div&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>Coldfusion</category>				
				
				<category>Blogging</category>				
				
				<pubDate>Thu, 13 Nov 2008 11:58:05 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2008/11/13/TinyMCE-ColdFusion-Image-Browser</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>WalkJogRun Popfly mashup on Facebook</title>
				<link>http://www.webdevref.com/blog/index.cfm/2008/2/10/WalkJogRun-Popfly-mashup-on-Facebook</link>
				<description>
				
				&lt;p&gt;In just over an hour with no prior experience, I created a mashup using &lt;strong&gt;Microsoft&apos;s Popfly&lt;/strong&gt; application to allow &lt;strong&gt;WalkJogRun&lt;/strong&gt; visitors to enter their username to see an overview of their running routes plotted on &lt;strong&gt;Microsoft&apos;s Virtual Earth&lt;/strong&gt;.&amp;nbsp; Next, through the magic of the Popfly &lt;strong&gt;Facebook plug-in&lt;/strong&gt;, I can share my new application with all my Facebook friends.&lt;br /&gt;&lt;br /&gt;I learned about Popfly just over an hour ago when my wife was reading the New York Times and asked me if I had heard of it.&amp;nbsp; From her description it sounded like a &lt;a href=&quot;http://pipes.yahoo.com&quot; target=&quot;_self&quot; title=&quot;Yahoo Pipes&quot;&gt;Yahoo Pipes&lt;/a&gt; wannabe so my initial reaction was lukewarm.&amp;nbsp; As I kept reading my &lt;a href=&quot;http://www.amazon.com/exec/obidos/ASIN/0060873167/thesurgerepor-20&quot; target=&quot;_self&quot; title=&quot;Next&quot;&gt;Michael Crichton novel&lt;/a&gt;, my brain kept spinning so I finished the chapter and turned on my laptop to play around.&amp;nbsp; Within minutes I had mashed up my geo-tagged Flickr photos with Virtual Earth and so I looked at the Yahoo code block to see what kind of magic was occurring.&lt;br /&gt;&lt;br /&gt;The blocks can all be inspected and there are two important pieces:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Block Description&lt;/strong&gt;: this XML document describes your application and defines the functions in terms of inputs, outputs and any custom object definitions.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Block Code&lt;/strong&gt;: this is JavaScript code and implements your methods&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt;In my case I used the Yahoo Flickr code as a starter since it has a &amp;quot;getUserPhotos&amp;quot; method very similar to an existing function at &lt;a href=&quot;http://www.walkjogrun.net&quot; target=&quot;_self&quot; title=&quot;WalkJogRun.net&quot;&gt;WalkJogRun &lt;/a&gt;called getUserRoutes.&amp;nbsp; After three or four attempts I was able to remove any unnecessary code from the other functions used by the Flickr block, and had a working block that would retrieve the XML from my site and generate an RSS feed of routes by user.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Here is my block description&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;block xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;&amp;nbsp; xsi:noNamespaceSchemaLocation=&amp;quot;http://www.popfly.com/schemas/blockschema.xsd&amp;quot;&lt;br /&gt;&amp;nbsp; class=&amp;quot;WalkJogRunClass&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;providerName&amp;gt;walkjogrun&amp;lt;/providerName&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;providerUrl&amp;gt;http://www.walkjogrun.net/&amp;lt;/providerUrl&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;providerLogoUrl&amp;gt;/images/wjrlogo_tag.gif&amp;lt;/providerLogoUrl&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;blockIconUrl&amp;gt;/images/tshirt_pocket_6x6.png&amp;lt;/blockIconUrl&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;suggest output=&amp;quot;geodisplay&amp;quot; input=&amp;quot;userinput&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;operations&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;operation name=&amp;quot;getUserRoutes&amp;quot; callMode=&amp;quot;auto&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;description&amp;gt;Get user routes.&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;inputs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input name=&amp;quot;userName&amp;quot; required=&amp;quot;true&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;description&amp;gt;username&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;defaultValue&amp;gt;Earnshavian&amp;lt;/defaultValue&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;constraints /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/input&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/inputs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;outputs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;output isArray=&amp;quot;true&amp;quot; type=&amp;quot;custom&amp;quot; object=&amp;quot;Route&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/outputs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/operation&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/operations&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;objects&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;object name=&amp;quot;Route&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;field name=&amp;quot;Route Number&amp;quot; type=&amp;quot;rn&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;latitude&amp;quot; type=&amp;quot;latitude&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;longitude&amp;quot; type=&amp;quot;longitude&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;field name=&amp;quot;pintext&amp;quot; type=&amp;quot;pintext&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;field name=&amp;quot;Description&amp;quot; type=&amp;quot;desc&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;field name=&amp;quot;Long Description&amp;quot; type=&amp;quot;longdesc&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;Distance (m)&amp;quot; type=&amp;quot;dist&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;Distance (km)&amp;quot; type=&amp;quot;distkm&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;Owner&amp;quot; type=&amp;quot;submit_by&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;Route ID&amp;quot; type=&amp;quot;rid&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;Elevation string&amp;quot; type=&amp;quot;elev8ngraph&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;Severity&amp;quot; type=&amp;quot;severity&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;isPrivate&amp;quot; type=&amp;quot;prv&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field name=&amp;quot;Create Date&amp;quot; type=&amp;quot;c_dt&amp;quot; isArray=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/object&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/objects&amp;gt;&lt;br /&gt;&amp;lt;/block&amp;gt;&lt;/div&gt; and here is my block code&lt;div class=&quot;code&quot;&gt;function WalkJogRunClass() {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;WalkJogRunClass.prototype.getUserRoutes = function(userName, number) {&lt;br /&gt;&amp;nbsp;// Retrieves a user&apos;s routes.&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// userName (required): WalkJogRun user name&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // get userid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var params = &amp;quot;&amp;amp;userid=&amp;quot; + escape(userName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var routes = this._getWalkJogRunRoutes(params);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return routes;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WalkJogRunClass.prototype._getWalkJogRunRoutes = function(extraParams)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var root = this._getWalkJogRunXml(extraParams);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var routes = this._getRouteArrayFromXml(root);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return routes;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;WalkJogRunClass.prototype._getWalkJogRunXml = function(params)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var root = environment.getXml(&amp;quot;http://www.walkjogrun.net/functions/act_getRoutes.cfm?1=1&amp;quot;+ params, &amp;quot;walkjogrun&amp;quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var rsp = root.getElementsByTagName(&amp;quot;markers&amp;quot;)[0];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(rsp == &apos;undefined&apos;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var errMsg = &amp;quot;walkjogrun returned an unknown error&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw errMsg;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return root;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;WalkJogRunClass.prototype._getRouteArrayFromXml = function(root) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var routeArray = new Array();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var routes = root.getElementsByTagName(&amp;quot;marker&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var count = routes.length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(var i = 0; i &amp;lt; count; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var route = routes[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var rn = route.getAttribute(&amp;quot;rn&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var lat = route.getAttribute(&amp;quot;lat&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var lng = route.getAttribute(&amp;quot;lng&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var desc = route.getAttribute(&amp;quot;desc&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var longdesc = route.getAttribute(&amp;quot;longdesc&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var dist = route.getAttribute(&amp;quot;dist&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var distkm = route.getAttribute(&amp;quot;distkm&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var submit_by = route.getAttribute(&amp;quot;submit_by&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var rid = route.getAttribute(&amp;quot;rid&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var elev8ngraph = route.getAttribute(&amp;quot;elev8ngraph&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var severity = route.getAttribute(&amp;quot;severity&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var prv = route.getAttribute(&amp;quot;prv&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var c_dt = route.getAttribute(&amp;quot;c_dt&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; routeArray.push(new Route(rn,lat,lng,desc,longdesc,dist,distkm,submit_by,rid,elev8ngraph,severity,prv,c_dt));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return routeArray;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;function Route(rn,lat,lng,desc,longdesc,dist,distkm,submit_by,rid,elev8ngraph,severity,prv,c_dt)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.rn = rn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.latitude = lat;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.longitude = lng;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.desc = desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.longdesc = longdesc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.dist = dist;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.distkm = distkm;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.submit_by = submit_by;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.rid = rid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.elev8ngraph = elev8ngraph;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.severity = severity;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.prv = prv;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.c_dt = c_dt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.toString = function()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return &amp;quot;&amp;lt;a href=&apos;http://www.walkjogrun.net/index.cfm?rid=&amp;quot;+this.rid+&amp;quot;&apos;&amp;gt;&amp;quot; + environment.escapeQuotes(this.desc) + &amp;quot;&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;+&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Description: &amp;quot; + environment.escapeQuotes(this.longdesc) + &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;+&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Distance: &amp;quot;+ environment.escapeQuotes(this.dist) + &amp;quot; miles /&amp;quot; + environment.escapeQuotes(this.distkm)+&amp;quot; km&amp;lt;br /&amp;gt;&amp;quot;+&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Created By: &amp;quot; + environment.escapeQuotes(this.submit_by) + &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;+&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Create Date: &amp;quot; + environment.escapeQuotes(this.c_dt) + &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.pintext = this.toString();&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Next I added the Virtual Earth application to a Popfly mashup page along with my WalkJogRun block and connected them so the geoRSS pumps into Virtual Earth&apos;s addPushpin method.&amp;nbsp; Some case issues were causing some trouble initially but after a couple of attempts, my block was publishing the format required for auto-discovery of inputs for Virtual Earth and I could run the application. &amp;nbsp;&lt;br /&gt;&lt;a href=&quot;http://www.popfly.com/users/earnshavian/WalkJogRun%20User%20Contributed%20Route%20Viewer&quot; target=&quot;_self&quot; title=&quot;WalkJogRun User Contributed Route Viewer mashup&quot;&gt;WalkJogRun User Contributed Route Viewer mashup&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To my surprise, it asked me where I would like to share my new mashup including the option to share on &lt;a href=&quot;http://www.facebook.com&quot; target=&quot;_self&quot; title=&quot;Facebook&quot;&gt;Facebook&lt;/a&gt; or add it to my profile.&amp;nbsp; By adding it to my profile it added the Popfly application to my profile so that my mashups are now shared.&amp;nbsp; Best of all, it gave me the ability to &lt;a href=&quot;http://apps.facebook.com/popflymashups/Default.aspx?r=earnshavian%7CWalkJogRun%20User%20Contributed%20Route%20Viewer&quot; target=&quot;_self&quot; title=&quot;WalkJogRun User Contributed Routes mashup&quot;&gt;share my embedded Facebook app with my friends&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Process Overview&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;So the overview of the whole process is as follows:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Login to Popfly&lt;/li&gt;&lt;li&gt;Create a block by editing the block description and block code or modifying an existing app with similar functions&lt;/li&gt;&lt;li&gt;Save and publish the block&lt;/li&gt;&lt;li&gt;Create a mashup by adding your block and any other components&lt;/li&gt;&lt;li&gt;Save and publish the mashup&lt;/li&gt;&lt;li&gt;Publish it to your Facebook profile&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br /&gt;&lt;p&gt;That took just over an hour for me since I already had a page generating XML based on URL parameters.&amp;nbsp; I&apos;m planning to add more functions to my block soon too but for now, that&apos;s a great start.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How does Microsoft Popfly compare to Yahoo Pipes?&amp;nbsp; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It&apos;s a completely different beast.&amp;nbsp; Yahoo Pipes for me offered great promise but without adding too much value - just a way to repurpose and aggregate multiple RSS feeds.&amp;nbsp; Microsoft Popfly goes much further in adding end points to the feeds with visualization tools and the ability to share your applications more widely than I had imagined.&amp;nbsp; It&apos;s certainly worth an hour of ANY programmer&apos;s time.&lt;br /&gt;&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>Coldfusion</category>				
				
				<pubDate>Sun, 10 Feb 2008 14:50:19 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2008/2/10/WalkJogRun-Popfly-mashup-on-Facebook</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>See Howitt Run</title>
				<link>http://www.webdevref.com/blog/index.cfm/2007/4/30/See-Howitt-Run</link>
				<description>
				
				&lt;p&gt;I have 2 weeks left to raise the remainder of my $3,900 goal for Leukemia and Lymphoma and I need your help. I&apos;m in Week 15 of the Team in Training plan to run the San Diego marathon on June 4th.&amp;nbsp; Saturday was an 18 mile run out in Darien, IL and my legs are still tight from the challenge.&amp;nbsp; It&apos;s a distinct change from the flat course along Chicago&apos;s lakefront.&amp;nbsp; We&apos;ve got a 10 mile run this weekend before the next jump to 20 miles the following week.&lt;/p&gt;&lt;p&gt;I was initially running in memory of my Aunty Moreen who passed away in 2004 after a 6 year struggle with bowel cancer.&amp;nbsp; The weekend after I started my training we discovered that my wife&apos;s 3 year old niece Haidyn had been diagnosed with ALL (Acute Lymphoblastic Leukemia).&amp;nbsp; Over the past 12 weeks she has been a tough little girl fighting infections caused by the drugs reducing her immune response and dealing with the loss of hair caused by the chemo.&amp;nbsp; At mile 16 on Saturday as I felt like my legs couldn&apos;t keep going I remembered the pain her and her family have experienced and it pushed me to the end.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you have ever read one of my posts on SQL, AJAX, ColdFusion or even my most popular post on how to fix a bug on your Motorola DVR, please take time to &lt;a href=&quot;http://www.active.com/donate/tntil/adamhowitt#&quot; target=&quot;_self&quot; title=&quot;Donate to Leukemia and Lymphoma&quot;&gt;donate&lt;/a&gt;.&amp;nbsp; I appreciate anything you can spare.&lt;br /&gt;&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>Sport</category>				
				
				<category>Coldfusion</category>				
				
				<category>SQL</category>				
				
				<pubDate>Mon, 30 Apr 2007 10:26:23 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2007/4/30/See-Howitt-Run</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>ColdFusion Development</title>
				<link>http://www.webdevref.com/blog/index.cfm/2007/2/9/ColdFusion-Development</link>
				<description>
				
				&lt;p&gt;Despite the bottomless pit of information available in Google, I find myself falling back on a core set of sites for the answers to my questions.&amp;nbsp; Through the magic of Google Co-op I have created a &lt;a title=&quot;ColdFusion Development Search Engine&quot; target=&quot;_self&quot; href=&quot;../&quot;&gt;ColdFusion Development Search Engine&lt;/a&gt;.&amp;nbsp; It is a hand made list of sites I trust for answers to my ColdFusion questions.&amp;nbsp; I&apos;ve also included and tagged JavaScript, SQL, Fusebox and AJAX resources with the idea that anything related to CF that I use on a daily basis to do my job is fair game.&lt;/p&gt;&lt;p&gt;If you can&apos;t find what you are looking for, let me know which site provided your answer and I can add it to the list after reviewing it.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;UPDATE: The URL for the search is &lt;a href=&quot;../&quot; target=&quot;_self&quot; title=&quot;Web Development Reference Search Engine&quot;&gt;http://www.webdevref.com&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>Coldfusion</category>				
				
				<category>SQL</category>				
				
				<pubDate>Fri, 09 Feb 2007 09:42:18 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2007/2/9/ColdFusion-Development</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>WalkJogRun on Fox News</title>
				<link>http://www.webdevref.com/blog/index.cfm/2007/1/5/WalkJogRun-on-Fox-News</link>
				<description>
				
				&lt;p&gt;I&apos;m delighted to report that WalkJogRun was featured on Fox News two days ago for the Cool Websites section after I tipped off Nancy Loo about the site.&amp;nbsp; I was surprised in her coverage when she said she had already featured the site at one point but I missed it I guess.&amp;nbsp; This time I was prepared and have my first &lt;a href=&quot;http://www.youtube.com/watch?v=vwExJQIwceI&quot; target=&quot;_self&quot; title=&quot;WalkJogRun youtube video&quot;&gt;YouTube video&lt;/a&gt; up now.&amp;nbsp; I know, I&apos;m probably the last person in the tech world to do this but this is the first thing I felt was worth it.&lt;/p&gt;

&lt;p&gt;For anyone who hasn&apos;t read anything about WalkJogRun, it&apos;s over 3 years old and is a community for runners, cyclists, walkers and anyone else to create and share routes.&amp;nbsp; It is based on Google Maps and uses custom AJAX, ColdFusion and is built on BlueDragon 6 with MySQL on an Ubuntu server.&amp;nbsp; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>Ubuntu</category>				
				
				<category>BlueDragon</category>				
				
				<category>Coldfusion</category>				
				
				<category>TV</category>				
				
				<pubDate>Fri, 05 Jan 2007 14:27:19 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2007/1/5/WalkJogRun-on-Fox-News</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Smart Marketing with Google Analytics order tracking</title>
				<link>http://www.webdevref.com/blog/index.cfm/2006/12/14/Smart-Marketing-with-Google-Analytics-order-tracking</link>
				<description>
				
				&lt;p&gt;&lt;a href=&quot;index.cfm?mode=entry&amp;entry=EE9BD312-10D1-AB1D-B93B13755178C4D8&quot; target=&quot;_self&quot; title=&quot;How do you track orders in Google Analytics?&quot;&gt;Edward had asked&lt;/a&gt; about the code I used in Google Analytics to track each transaction. This allows you to see a wealth of information, not just product revenue through the website.&amp;nbsp; When you add the transaction logging to your order complete or &amp;quot;thank you&amp;quot; page, google updates the basic reports it offers with an extra column so each minute piece of data can be cross referenced against the revenue it generated.&amp;nbsp; For example:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;New vs returning customers - how much revenue (total and average) did each segment generate.&amp;nbsp; This report can help you focus your marketing efforts to either increase first time spend or provide discounts for returning users to encourage them to buy more and reward their loyalty.&lt;/li&gt;&lt;li&gt;Which referring sources were responsible for the most revenue on the site?&amp;nbsp; The report columns are all sortable so rather than see which affiliate drove the most traffic to your site, which affiliate drives the biggest spenders?&amp;nbsp; It can help you review your marketing spend with affiliates so you can focus your budget on the people whose visitors are more likely to buy from you.&lt;/li&gt;&lt;li&gt;What is the ROI on your Google adwords campaign?&amp;nbsp; One client spent nearly 3000 dollars per month on adwords campaigns that yielded just 21 dollars in revenue and one sale.&amp;nbsp; He had already asked why Google drove 50% of his traffic and MSN and Yahoo were so small in comparison.&amp;nbsp; I suggested that moving his adwords budget to the search engines without organic presence would make sure he had the exposure he needed at MSN and Yahoo and help adjust the balance.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The CF code I use comes in two parts.&amp;nbsp; The first creates a structure of the items in his order in the act file after his order is processed:&lt;div class=&quot;code&quot;&gt;&amp;lt;cfscript&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans = structNew();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.order_id = client.order_header_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.affiliation = &apos;Name of the Affiliate program&apos;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.total = variables.grandtotal;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.tax = variables.grandtaxes;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.shipping = variables.grandshipcost;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.city = get_shipaddress.city;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.state = get_shipaddress.region;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.country = &apos;USA&apos;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;utm_trans.items = queryNew(&apos;order_id,sku,productname,category,price,quantity&apos;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//add code to populate utm_trans.items query here&lt;br /&gt;&amp;lt;/cfscript&amp;gt;&lt;/div&gt; The second chunk of code is responsible for putting the hidden form on the page in the correct format for Google.&amp;nbsp; You may note that I use cftry/cfcatch around it all with no action in the cfcatch.&amp;nbsp; I did this in case anything odd occurred to prevent the google tracking code from creating a customer service call for the client.&amp;nbsp; You could easily add a simple cfmail to say there was a problem&lt;div class=&quot;code&quot;&gt;&amp;lt;cfoutput&amp;gt;&lt;br /&gt;&amp;lt;cftry&amp;gt;&lt;br /&gt;&amp;lt;form style=&amp;quot;display:none;&amp;quot; name=&amp;quot;utmform&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;textarea id=&amp;quot;utmtrans&amp;quot;&amp;gt;UTM:T|#utm_trans.order_id#|#utm_trans.affiliation#|#utm_trans.total#|#utm_trans.tax#|#utm_trans.shipping#|#utm_trans.city#|#utm_trans.state#|#utm_trans.country# &lt;br /&gt;&amp;lt;cfloop query=&amp;quot;utm_trans.items&amp;quot;&amp;gt;UTM:I|#utm_trans.items.order_id#|#utm_trans.items.sku#|#utm_trans.items.productname#|#utm_trans.items.category#|#utm_trans.items.price#|#utm_trans.items.quantity#&lt;br /&gt;&amp;lt;/cfloop&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;script language=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;__utmSetTrans();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;cfcatch type=&amp;quot;any&amp;quot;&amp;gt;&amp;lt;/cfcatch&amp;gt;&lt;br /&gt;&amp;lt;/cftry&amp;gt;&amp;lt;/cfoutput&amp;gt;&lt;/div&gt;&lt;br /&gt;The first chunk creates the transaction wrapper (starts with UTM:T) then I loop over my collection of items to build the item rows (start with UTM:I).&amp;nbsp; The last part is the __utmSetTrans() which sends the transaction to Google.&lt;/p&gt;&lt;p&gt;If you have found this useful or have any questions about Google Analytics, feel free to let me know in the comments section.&amp;nbsp; I have worked very closely with both the code implementation and reviewing the results to make recommendations.&amp;nbsp;&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>Coldfusion</category>				
				
				<pubDate>Thu, 14 Dec 2006 14:46:04 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2006/12/14/Smart-Marketing-with-Google-Analytics-order-tracking</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Google Analytics trouble</title>
				<link>http://www.webdevref.com/blog/index.cfm/2006/10/23/Google-Analytics-trouble</link>
				<description>
				
				&lt;p&gt;I&apos;ve been helping a client setup Google Analytics, specifically adding the e-commerce tracking.&amp;nbsp; As with most analytics packages, stats are updated as part of a batch every few hours so it&apos;s tricky to troubleshoot the code when things aren&apos;t going well.&lt;/p&gt;&lt;p&gt;I was getting the tracking code to work, even on the SSL encrypted pages but the e-commerce tracking piece wasn&apos;t reporting any revenue.&amp;nbsp; The tracking code is offered in two flavors, either an inline chunk of script to execute or called from the page onload function.&amp;nbsp; To minimize disruption to the dsp_header.cfm in use throughout the site I thought I would add the inline code on the receipt page instead.&amp;nbsp; No dice.&amp;nbsp; Here is the problem: it fails silently on an AJAX call so I was stuck. &lt;a href=&quot;http://livehttpheaders.mozdev.org/&quot; target=&quot;_self&quot; title=&quot;LiveHTTPHeaders&quot;&gt;LiveHTTPHeaders &lt;/a&gt;to the rescue. This neat little Firefox plugin works like Fiddler but is built into your browser.&amp;nbsp; Turn it on and each HTTP request is logged either in the sidebar or a new tab.&amp;nbsp; &lt;/p&gt;&lt;p&gt;With LiveHTTPHeaders turned on it became clear the inline JavaScript fragment didn&apos;t work so I moved my call to the dsp_header.cfm file with a condition based on whether you were viewing a receipt page or not.&amp;nbsp; LiveHTTPHeaders cheerfully reported that I was now sending data to Google.&amp;nbsp; All I need to do now is wait 4 hours to see if the data shows up.&lt;/p&gt;&lt;p&gt;Really loving Google Analytics - has anyone else used it?&amp;nbsp; How does it stack up to other analytics packages you have seen?&amp;nbsp; I love the custom funnel pages to be able to track e-commerce activity and the cross-tabbing of most data points to be able to dig in by city, country etc.&lt;br /&gt;&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>Coldfusion</category>				
				
				<pubDate>Mon, 23 Oct 2006 15:47:53 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2006/10/23/Google-Analytics-trouble</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>How to Design a large AJAX Application</title>
				<link>http://www.webdevref.com/blog/index.cfm/2006/7/7/How-to-Design-a-large-AJAX-Application</link>
				<description>
				
				&lt;p&gt;In the guide which you can download from the link below I&apos;ll cover the process I have developed in the course of implementing two AJAX applications as a developer for &lt;a href=&quot;http://www.duoconsulting.com&quot; target=&quot;_self&quot; title=&quot;Duo Consulting&quot;&gt;Duo Consulting&lt;/a&gt;&amp;nbsp; in Chicago.&amp;nbsp; This approach has made it easier for me to work with the design team, produce estimates for this type of project and communicate what is involved each step of the way to the project managers for scheduling purposes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;presentations/How_to_Design_a_large_AJAX_Application.pdf&quot; target=&quot;_self&quot;&gt;Download the PDF guide&lt;/a&gt; (105kb)&lt;/p&gt;
&lt;p&gt;If this sounds like the type of work you enjoy and you live in Chicago or are willing to move here check out our &lt;a href=&quot;http://www.duoconsulting.com/about/careers.cfm&quot; target=&quot;_self&quot; title=&quot;Duo Consulting hiring&quot;&gt;careers page&lt;/a&gt; as we are looking for talented ColdFusion developers.&lt;br /&gt;
&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>Coldfusion</category>				
				
				<category>ChicagoParkDistrict</category>				
				
				<pubDate>Fri, 07 Jul 2006 12:46:33 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2006/7/7/How-to-Design-a-large-AJAX-Application</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>CFUnited mid-conference roundup</title>
				<link>http://www.webdevref.com/blog/index.cfm/2006/6/29/CFUnited-mid-conference-roundup</link>
				<description>
				
				&lt;p&gt;The sun came out in DC yesterday as the conference began and the city is breathing a sigh of relief. ColdFusion can do that :-) I&apos;ll try and keep it short but you all know how I can ramble on...&lt;/p&gt;&lt;p&gt;CF Roadmap keynote: I agree with my coworker Kelly that the Adobe influence on CF looks ominous. It&apos;s clear that PDF integration for CF jumped the queue at the expense of other key features that were left out. &amp;quot;Scorpio&amp;quot;, the next release of ColdFusion, will include some new PDF form based tags to allow users to fill forms in online. That&apos;s about it from that angle. Flex 2 was launched officially yesterday and Ben Forta gave a demo of a wizard to build a master-detail web application without writing any code. I could see us thinking about this for our CMS &lt;a title=&quot;DuoCMS powers some of the largest legal sites on the web&quot; href=&quot;http://www.duocms.com/&quot; target=&quot;_self&quot;&gt;duoCMS&lt;/a&gt; for the content administration since it offers some saucy looking UI out of the box.&lt;/p&gt;&lt;p&gt;&lt;a title=&quot;Sean&apos;s blog&quot; href=&quot;http://corfield.org/blog/index.cfm?&quot; target=&quot;_self&quot;&gt;Sean Corfield&lt;/a&gt; talked for an hour on factories in the context of &lt;a title=&quot;ColdSpring&quot; href=&quot;http://www.coldspringframework.org/&quot; target=&quot;_self&quot;&gt;ColdSpring&lt;/a&gt;, a framework&amp;nbsp;&lt;a title=&quot;Duo Consulting&quot; href=&quot;http://www.duoconsulting.com/&quot; target=&quot;_self&quot;&gt;Duo Consulting&lt;/a&gt; (my employer)&amp;nbsp;can and should leverage for all of our CMS cfcs. As it stands, the CMS is built in a way that forces us to keep only one version on each server. ColdSpring would allow us to maintain multiple builds of the code so that a client who was built on&amp;nbsp;duoCMS&amp;nbsp;1.1.345 would have identical CMS to another client operating on the same build number. This is HUGE for Duo since we can easily identify a fix for one customer and know that it can be fixed for all clients on that build version. It also allows us to plot upgrade paths for clients based on their build number. I know this isn&apos;t as exciting as my design buddy Jeff&apos;s new addition to the family but it&apos;s a close second :-) The other advantage of the framework is that it allows us to hotswap different databases for an individual client so they are still duoCMS but the connectors for getting and setting information in the database are broken out. &lt;a title=&quot;Fusebox&quot; href=&quot;http://www.fusebox.org/&quot; target=&quot;_self&quot;&gt;Fusebox 5 release candidate 1&lt;/a&gt; was also released on Tuesday but I haven&apos;t had a chance to look at the details yet.&lt;/p&gt;&lt;p&gt;Note: if you are wondering where I have the time for this in the middle of the day, Kelly is attending the &lt;a title=&quot;Microsoft Atlas - AJAX library&quot; href=&quot;http://atlas.asp.net/&quot; target=&quot;_self&quot;&gt;Microsoft Atlas&lt;/a&gt; presentation on their attempt at an AJAX library. The part I saw was too intense about Visual Studio so I skipped out.&lt;/p&gt;&lt;p&gt;Next up was &lt;a title=&quot;Joey Coleman&quot; href=&quot;http://www.designsymphony.com/Welcome.html&quot; target=&quot;_self&quot;&gt;Joey Coleman&lt;/a&gt;, a thoroughly entertaining speaker describing the concept of having turning yourself into an IPO. Not about starting a business but just managing your career as a brand to maximise your earning potential. Things like getting testimonials from your manager about the work you do and taking stock once a year with an annual report. This can make you more productive and help you realize whether you are stagnating and need more training or need to dig in a little more.&lt;/p&gt;&lt;p&gt;Douglas Ward gave an average presentation on Fundamentals of Usability. The issue was that it was another Jakob Nielsen style &amp;quot;Don&apos;t do this, don&apos;t do that&amp;quot; and not enough &amp;quot;You should do this&amp;quot;. Darn negativity drives me crazy. If anyone has any good recommendations on authors or books describing what should be done please let me know. The only good thing I took away&amp;nbsp;was his analogy of your website as a billboard and the notion that an effective billboard is short, sweet and to the point &amp;quot;Good chicken next exit at Bob&apos;s&amp;quot; vs a long winded flowery pile of text which doesn&apos;t help the user get to their end point.&lt;/p&gt;&lt;p&gt;An Adobe presenter, Sarge Sargent gave a disappointing talk on gateways with little substance so it looks like I will need to dig in more myself.&lt;/p&gt;&lt;p&gt;&lt;a title=&quot;John Paul Ashenfelter&apos;s Blog&quot; href=&quot;http://www.ashenfelter.com/&quot; target=&quot;_self&quot;&gt;John Ashenfelter&lt;/a&gt; talked about Agile Programming as a methodology. There was a lot of content and theory but less practical. It would have been better if he had revised his material to focus on the audience: every coder here either builds websites or reports so with that assumption I wanted him to say &amp;quot;a client wants a new website, here is how the process works&amp;quot;. I still have pages scribbled on the topic if anyone wants detail. The nugget here was the use of ANT as a tool for web development. Built into the tools most of our developers use it allows you to automate the deployment of applications and the configuration to setup a project. In our environment this would reduce some of the lead time necessary to set our machines up for maintenance of client websites and grab local copies. He also recommended some great development books he believes every developer you hire should read as part of their job requirements.&lt;/p&gt;&lt;p&gt;This morning, slightly less awake I watched &lt;a title=&quot;Joe Rinehart&apos;s Blog&quot; href=&quot;http://clearsoftware.net/&quot; target=&quot;_self&quot;&gt;Joe Rinehart&lt;/a&gt; introduce &lt;a title=&quot;Model Glue&quot; href=&quot;http://www.model-glue.com/&quot; target=&quot;_self&quot;&gt;Model-glue unity&lt;/a&gt; as a framework for rapidly developing ColdFusion applications with a ruby on rails for ColdFusion feel. In five minutes he built a rudimentary blog from scratch typing every line of code while we watched in awe. The key component is something called reactor which works on most database platforms through JDBC. It understands the database design and then creates the pages with Model-glue to list, edit, add and delete items. &lt;/p&gt;&lt;p&gt;Lastly, I watched a friend from Atlanta present the benefits of running &lt;a title=&quot;New Atlanta makes BlueDragon&quot; href=&quot;http://www.newatlanta.com/&quot; target=&quot;_self&quot;&gt;BlueDragon&lt;/a&gt; on .NET - our company sysadmin and I will need to try a demo of this because the benefits are huge including the ability to leverage application pools allowing you to start and stop one part of a website without bringing down the whole site or any other clients on the server. It also means better monitoring abilities and helps us see which client site is bringing the others down.&lt;/p&gt;&lt;p&gt;Food is being served now so I&apos;ll wrap up. Great conference, great content and a really good crowd.&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>BlueDragon</category>				
				
				<category>Coldfusion</category>				
				
				<pubDate>Thu, 29 Jun 2006 12:48:54 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2006/6/29/CFUnited-mid-conference-roundup</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Spanish Caravan</title>
				<link>http://www.webdevref.com/blog/index.cfm/2006/5/6/Spanish-Caravan</link>
				<description>
				
				New countries, new languages, new problems. Fixed bug in Internet Explorer for &lt;a href=&quot;http://www.walkjogrun.co.uk/index.cfm?rid=FE9B21C8-FF0F-BE87-FF04121ABF3EB73A&amp;mode=hybrid&quot; target=&quot;_self&quot; title=&quot;Spanish characters&quot;&gt;WalkJogRun.co.uk&lt;/a&gt; where Spanish Characters broke the tool!&amp;nbsp; Tip: encoding=&amp;quot;ISO-8859-1&amp;quot; in the xml declaration allows the latin characters.&amp;nbsp; Firefox was good enough to work out what was going on, IE on the other hand thought it was Chico time and turned off the radio.&lt;br /&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<pubDate>Sat, 06 May 2006 23:00:40 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2006/5/6/Spanish-Caravan</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>British pedometer - WalkJogRun</title>
				<link>http://www.webdevref.com/blog/index.cfm/2006/5/6/British-pedometer---WalkJogRun</link>
				<description>
				
				&lt;p&gt;Okay, WalkJogRun has long been available for the UK but now it has it&apos;s own URL &lt;a href=&quot;http://www.walkjogrun.co.uk&quot; target=&quot;_self&quot; title=&quot;WalkJogRun UK version&quot;&gt;WalkJogRun.co.uk&lt;/a&gt; which starts you on a view of Europe, features better resolution satellite maps, &lt;a href=&quot;http://www.walkjogrun.co.uk/index.cfm?lg=12.463560104370117&amp;lat=41.915754824519965&amp;zmlevel=3&amp;mode=hybrid&quot; target=&quot;_self&quot; title=&quot;Dan Brown eat your heart out&quot;&gt;detailed European maps&lt;/a&gt; and imagery (looks like a Dan Brown movie) and a postcode lookup feature. Oh, and it also &lt;a href=&quot;http://www.walkjogrun.co.uk/index.cfm?lg=136.91162109375&amp;lat=35.99578538642032&amp;zmlevel=11&amp;c=Japan&quot; target=&quot;_self&quot; title=&quot;WalkJogRun running routes for Japan&quot;&gt;includes Japan &lt;/a&gt;but at present those maps are all in Japanese so I&apos;m unable to make head nor tail of the place names.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I have to admit that the imaging improvements are all Google&apos;s idea but it doesn&apos;t come free.&amp;nbsp; Google has an &lt;a href=&quot;http://www.google.com/apis/maps/documentation/upgrade.html&quot; target=&quot;_self&quot; title=&quot;Google Maps API 2 upgrade document&quot;&gt;upgrade document&lt;/a&gt; for it&apos;s mapping API users to help you move your code from v1 to v2.&amp;nbsp; The move took about 3 hours for my site but it wasn&apos;t as easy as the upgrade document made out &amp;quot;&lt;em&gt;The quickest way to upgrade is to update your Maps API &amp;lt;script&amp;gt; URL to refer to &apos;v=2&apos; instead of &apos;v=1.&apos;&lt;/em&gt;&amp;quot; Hmm. No dice.&amp;nbsp; The way I proceeded was to start with the function I call to initialize my map and eliminate any subsequent map based code and gradually add it back in, digging into the APIv2 &lt;a href=&quot;http://www.google.com/apis/maps/documentation/reference.html&quot; target=&quot;_self&quot; title=&quot;Google API v2 Class Reference&quot;&gt;Class reference&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;One of the biggest changes for me was the move from GPoint to GLatLng objects which means little until you realize that the old method of passing points has changed and the order you pass in longitude and latitude coordinates is now opposite.&amp;nbsp; One trick someone suggested was a simple function which takes the old format and returns the flipped values but I figured it was easier just to straighten them out manually.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Another such flip was the zoom scales which used to run 0 to 17 with 17 being the most coarse view and 0 allowing you to see up someone&apos;s nose.&amp;nbsp; GMap2 now goes the opposite direction with 0 being the most distant and 17 the closest you can get at this point; presumably this allows them to get closer yet at some point in the future without having to get into negative numbers.&amp;nbsp; This means most of the code you have will need to be rewritten with the substitution 17-oldnum to get the correct new value.&amp;nbsp; Or just stand on your head. &amp;nbsp;&lt;/p&gt;&lt;p&gt;This all coincides with my move to hosting the site on my own server happily running &lt;a href=&quot;http://www.newatlanta.com/products/bluedragon/product_info/overview.cfm&quot; target=&quot;_self&quot; title=&quot;BlueDragon from NewAtlanta&quot;&gt;BlueDragon 6.2.1&lt;/a&gt; on Linux with MySQL and Apache.&amp;nbsp; I have a nice dev environment to play with now instead of playing chicken with large code changes and an easy way to migrate them between environments.&lt;/p&gt;&lt;p&gt;If you have any Google Map related questions and need a hand working out where something is breaking, I will follow up if you have any questions.&lt;/p&gt;&lt;p&gt;Enjoy the rest of your weekend and maybe even plot out a nice run or bike ride.&amp;nbsp;&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>Sport</category>				
				
				<category>Coldfusion</category>				
				
				<pubDate>Sat, 06 May 2006 20:20:47 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2006/5/6/British-pedometer---WalkJogRun</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>A Time to Post</title>
				<link>http://www.webdevref.com/blog/index.cfm/2006/2/2/A-Time-to-Post</link>
				<description>
				
				&lt;p&gt;Anyone who has been a regular reader may have noticed that I haven&apos;t been positng a great deal lately.&amp;nbsp; The cause for the lag has been a 3 month project to rewrite a web application for my local park district to handle registrations four times a year when traffic surges from 2000 visitors per day to 2000 visitors per minute.&lt;/p&gt;&lt;p&gt;The application launches this afternoon and has brought in several challenging new topics: AJAX (including advanced DOM scripting, browser considerations, state management and interaction modelling), Clustering JRun across multiple instances and multiple servers, Load testing, Project Management and scalable application architecture.&lt;/p&gt;&lt;p&gt;After today there will be a two week delay before the madness begins for the Spring registration on February 20th.&amp;nbsp; During this time I will be posting about each of the topics above to describe what happened, what I learned and what resources I found to help guide the application design.&amp;nbsp; You may also find a guest post from Design Jeff to describe how he tackled the new challenge of designing an application for AJAX.&lt;/p&gt;&lt;p&gt;The first post will point you at the finished application to dig around and see what it looks like.&amp;nbsp; Wish me luck!&lt;br /&gt;&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>CSS</category>				
				
				<category>Coldfusion</category>				
				
				<category>SQL</category>				
				
				<pubDate>Thu, 02 Feb 2006 10:46:27 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2006/2/2/A-Time-to-Post</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Using Google Analytics to Monitor AJAX Applications</title>
				<link>http://www.webdevref.com/blog/index.cfm/2005/11/22/Using-Google-Analytics-to-Monitor-AJAX-Applications</link>
				<description>
				
				&lt;p&gt;In this post, I&apos;m going to explain how&amp;nbsp; to use Google Analytics
to help you monitor AJAX and DHTML activities on your web applications.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Just over a week ago Google launched &lt;a target=&quot;_self&quot; href=&quot;http://www.google.com/analytics/&quot;&gt;Google Analytics&lt;/a&gt; as a free, tag based web analytics package for one and all to use.&amp;nbsp; The product is based on Urchin which &lt;a target=&quot;_self&quot; href=&quot;http://www.siliconvalleywatcher.com/mt/archives/2005/03/google_purchase.php&quot;&gt;Google purchased for $30 million&lt;/a&gt; at the end of March 2005.&amp;nbsp; &lt;/p&gt;&lt;p&gt;This means you can create a free account, copy the basic snippet of code&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;
&lt;p&gt;&amp;lt;&lt;span class=&quot;start-tag&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt; src&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&amp;quot;http://www.google-analytics.com/urchin.js&amp;quot; &lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/p&gt;


&lt;p&gt;&amp;lt;/&lt;span class=&quot;end-tag&quot;&gt;script&lt;/span&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;span class=&quot;start-tag&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;attribute-name&quot;&gt; type&lt;/span&gt;=&lt;span class=&quot;attribute-value&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;
_uacct = &amp;quot;UA-xxxxx-x&amp;quot;;&lt;br /&gt;
urchinTracker();&lt;br /&gt;
&amp;lt;/&lt;span class=&quot;end-tag&quot;&gt;script&lt;/span&gt;&amp;gt;&lt;/p&gt;
&lt;/div&gt;and within 6-12 hours be looking at some great stats.&amp;nbsp; My
personal favorite is that it is goal centered.&amp;nbsp; It makes you think
about what the goal is for your website (readership, whitepaper
downloads, sales, etc.) and focus on tracking those behaviors.

&lt;p&gt;With traditional log based analytics packages you only get to see
requests for files but with tag based analytics packages, like Google
Analytics, you can monitor each and every JavaScript action, each click
away from your site and tweak your application based on what your
visitors are doing.&amp;nbsp; &lt;/p&gt;&lt;p&gt;I have an AJAX sear&lt;img width=&quot;228&quot; height=&quot;194&quot; border=&quot;0&quot; align=&quot;right&quot; title=&quot;WalkJogRun.net search box&quot; alt=&quot;WalkJogRun.net search box&quot; src=&quot;images/ajax0.gif&quot; /&gt;ch
box on WalkJogRun.net which up until last week I had no idea how it was
used by visitors.&amp;nbsp; I mean, sure, it said search but people should
know what that means, right?&amp;nbsp; Entering a search term dynamically
filters the list of routes in the panel beneath the search box without
refreshing the page.&lt;/p&gt;&lt;p&gt;Based on the results of tracking this for a
week, it now reads &amp;quot;Find a route by name or zip code&amp;quot; because I was
able to see that the most common behavior was to enter a zip code as a
search term which, until I realized this, was a dead end.&amp;nbsp; The
search was only looking for keywords so a zip search would find no
results here.&amp;nbsp; A simple change and now it recognizes zip codes and
handles your request differently.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Okay, but how do you track events?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Once
you have your Google Analtics account and have copied the snippet into
the head of your web page you are one line of code away from the
answer.&amp;nbsp; Any time you want to log an event or activity to Google
Analytics, add a call to the urchinTracker function which expects the
name of a page (or for the purpose of this example, a virtual page
since the search activity isn&apos;t a real page...&amp;nbsp; You can do this
anywhere you can put JavaScript in a page including your own methods
or, say, the onClick property of an href.&amp;nbsp; Since my application is
already calling a JavaScript function to handle the AJAX call, I added
the following line to my
file:&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;urchinTracker(&apos;/search_routes/&apos;+term);&lt;/div&gt; which
logs the event under a virtual directory called /search_routes/ and
then logs the actual search term used under that.&amp;nbsp; To access this
information in the Google Analytics manager when you are looking at
your reports, click on &amp;quot;All Reports&amp;quot; &amp;gt; &amp;quot;Content Optimization&amp;quot; &amp;gt;
&amp;quot;Content Performance&amp;quot; &amp;gt; &amp;quot;Content Drilldown&amp;quot; and you should see a pie
chart and something like this:&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img width=&quot;500&quot; height=&quot;139&quot; border=&quot;0&quot; title=&quot;Google Analytics snapshot of Content Drilldown&quot; alt=&quot;Google Analytics snapshot of Content Drilldown&quot; src=&quot;images/ajax1.gif&quot; /&gt;
You can see the /search_routes folder here and that 119 visitors have
used the search tool 184 times between them.&amp;nbsp; Click on the folder
icon next to the label &amp;quot;search_routes&amp;quot; and you see the next layer down:&lt;/p&gt;&lt;p&gt;&lt;img width=&quot;500&quot; height=&quot;223&quot; border=&quot;0&quot; title=&quot;Google Analytics Drilldown of search terms used&quot; alt=&quot;Google Analytics Drilldown of search terms used&quot; src=&quot;images/ajax2.gif&quot; /&gt;
The % Exit column reflects the damage that was done by providing a
search box with no results when you search by zipcode!&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;What else can it do?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Since
every href can have an onClick event, you can log each click away from
your site under a virtual folder called /outgoing_links/ to monitor
which links your visitors found the most interesting.&lt;br /&gt;
&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>AJAX</category>				
				
				<category>Coldfusion</category>				
				
				<pubDate>Tue, 22 Nov 2005 11:36:15 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2005/11/22/Using-Google-Analytics-to-Monitor-AJAX-Applications</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Sour Grapes</title>
				<link>http://www.webdevref.com/blog/index.cfm/2005/7/22/Sour-Grapes</link>
				<description>
				
				&lt;p&gt;I originally built a pedometer page a little over a year ago but Map
APIs weren&apos;t an option at that time so my code had to scrape maps off
Yahoo. This wasn&apos;t very reliable so it fell off my plate.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Fast forward to February 2005 and I released &lt;a href=&quot;http://www.walkjogrun.net&quot; target=&quot;_blank&quot;&gt;WalkJogRun.net&lt;/a&gt; which allowed you to use any map you chose.&amp;nbsp; 2 days later a guy from LeHigh took my site and &lt;a href=&quot;http://www.magicspatula.com/run/&quot; target=&quot;_blank&quot;&gt;fitted it with Google&lt;/a&gt; but without the benefits of a public API (acknowledging his influence).&lt;/p&gt;&lt;p&gt;Less
than a month ago I received an email from Jeff who tinkered with the
design for walkjogrun simply saying &amp;quot;Oh buddy...&amp;quot; and linking to the &lt;a href=&quot;http://www.sueandpaul.com/gmapPedometer/&quot; target=&quot;_blank&quot;&gt;Gmaps Pedometer&lt;/a&gt;
which uses the Google API to achieve the same thing and came out less
than a month ago judging by the change history on the left of the page.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;The reason for sour grapes is that I was at dinner with a friend
who is training for a marathon and we were talking about running.&amp;nbsp;
He was talking routes and then says &amp;quot;oh, have you guys heard of
sueandpaul?&amp;nbsp; It&apos;s this cool web site which allows you to draw your
own routes on streets&amp;quot;.&amp;nbsp; Arse.&amp;nbsp; I need to learn to follow
ideas through sooner and more fully to make sure this doesn&apos;t happen
again.&amp;nbsp; I think I even mentioned my running tool in my second
interview with Google this time last year.&lt;br /&gt;
&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<category>Coldfusion</category>				
				
				<pubDate>Fri, 22 Jul 2005 12:34:10 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2005/7/22/Sour-Grapes</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>JavaScript Snippet for Check All</title>
				<link>http://www.webdevref.com/blog/index.cfm/2005/4/1/JavaScript-Snippet-for-Check-All</link>
				<description>
				
				&lt;p&gt;I was working on some UI stuff yesterday for a client it struck me
that one of those select all checkboxes elements would be of use.&amp;nbsp;
Then it occured to me that I didn&apos;t have one handy.&amp;nbsp; A peak at my
webmail program source code resulted in the following script and I
reduced it down to essentials for my own use.&amp;nbsp; &lt;/p&gt;&lt;p&gt;The basic
idea is to loop over all your form elements, check if the name of the
element matches the destination checkbox and if so set it to the
desired state.&amp;nbsp; You will notice in the example that the checkboxes
all share the same name but have different IDs.&amp;nbsp; This means that
on submission you get a list of the values of the boxes with the same
name.&amp;nbsp; &lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;code&quot;&gt;&amp;lt;cfif isdefined(&amp;quot;form.deleteList&amp;quot;)&amp;gt;&amp;lt;cfdump var=&amp;quot;#form.deleteList#&amp;quot;&amp;gt;&amp;lt;/cfif&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;deleteForm&amp;quot; action=&amp;quot;&amp;lt;cfoutput&amp;gt;#cgi.SCRIPT_NAME#&amp;lt;/cfoutput&amp;gt;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;deleteList&amp;quot; id=&amp;quot;box1&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;Box 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;deleteList&amp;quot; id=&amp;quot;box2&amp;quot; value=&amp;quot;2&amp;quot;&amp;gt;Box 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;deleteList&amp;quot; id=&amp;quot;box3&amp;quot; value=&amp;quot;3&amp;quot;&amp;gt;Box 3&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;selectAll&amp;quot; onclick=&amp;quot;toggleDeleteList()&amp;quot;&amp;gt;Select All&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;submit&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;script language=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var lastState = false;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; function SetChecked(val)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dml = document.forms[&apos;deleteForm&apos;];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = dml.elements.length;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dml.elements[i].name==&apos;deleteList&apos;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dml.elements[i].checked=val;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dml.selectAll.checked = val;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; function toggleDeleteList() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lastState == false ? SetChecked(true) : SetChecked(false);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lastState = lastState == true ? false: true;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;/div&gt; &lt;br /&gt;
&lt;/p&gt;
				
				</description>
						
				
				<category>JavaScript</category>				
				
				<pubDate>Fri, 01 Apr 2005 13:43:00 -0400</pubDate>
				<guid>http://www.webdevref.com/blog/index.cfm/2005/4/1/JavaScript-Snippet-for-Check-All</guid>
				
			</item>
			
		 	
			</channel></rss>