<?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>Raymond Camden&apos;s Blog - HTML5</title>
			<link>http://www.raymondcamden.com/index.cfm</link>
			<description>Raymond Camden&apos;s personal blog covering jQuery, Mobile, ColdFusion, and Web Development.</description>
			<language>en-us</language>
			<pubDate>Sat, 25 May 2013 01:59:58 -0400</pubDate>
			<lastBuildDate>Wed, 22 May 2013 09:24: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: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>raymondcamden@gmail.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<item>
				<title>The Future of the Web</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/5/22/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&apos;m fairly excited about, and I hope it excites you as well.Last week I had the pleasure of listening to &lt;a href=&quot;http://dancallahan.info/&quot;&gt;Dan Callahan&lt;/a&gt; give the keynote at cfObjective. I didn&apos;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=&quot;http://www.raymondcamden.com/images/keep-calm-and-learn-javascript.png&quot; /&gt;

If there was one thing I would have added to Dan&apos;s talk it would have been a reminder that web developers are probably also somewhat behind in their HTML knowledge as well. I&apos;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&apos;m reminded about some particular tag or attribute that I&apos;ve forgotten about. Don&apos;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&apos;ve made it my mission over the past few years to focus my energy in this direction. Anyone who reads this blog or listens to me give presentations knows 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&apos;s some growing pains here, but my God, there&apos;s &lt;strong&gt;growth&lt;/strong&gt;.

That is why I&apos;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&apos;ll list in a moment). But in general, they represent an incredible change in the web. To me, they truly are &quot;Web 2.0.&quot; For the first time you&apos;ll be able to define new building blocks (tags, behavior, design) by following web standards. You&apos;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 you are 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&apos;t be loaded until necessary. 

To be clear, this isn&apos;t the exact same as something like &lt;a href=&quot;http://handlebarsjs.com/&quot;&gt;Handlebars.js&lt;/a&gt;. You don&apos;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=&quot;https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html&quot;&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 &quot;black box&quot; 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, &quot;This CSS will apply to this block only. Period. Nothing will leak out or in.&quot; 

Again - I&apos;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=&quot;https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html&quot;&gt;https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html&lt;/a&gt;)  or check out the excellent &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/&quot;&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=&quot;http://jqueryui.com/tabs/&quot;&gt;jQuery UI&apos;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&apos;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=&quot;https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html&quot;&gt;https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html&lt;/a&gt;

&lt;h2&gt;So What, I Can&apos;t Use It Now!&lt;/h2&gt;

I bet you&apos;re asking, how well is this stuff supported? Right now support is pretty limited. In fact, custom elements aren&apos;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&apos;t need to care or pay attention to web standards then 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&apos;ve embedded it below. You can also find his slide deck here: &lt;a href=&quot;http://www.webcomponentsshift.com/&quot;&gt;http://www.webcomponentsshift.com/&lt;/a&gt;. Do note though that you are supposed 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=&quot;600&quot; height=&quot;338&quot; src=&quot;http://www.youtube.com/embed/fqULJBBEVQE?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
				</description>
				
				
				<category>Development</category>
				
				<category>HTML5</category>
				
				<pubDate>Wed, 22 May 2013 09:24:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/5/22/The-Future-of-the-Web</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Capturing camera/picture data without PhoneGap</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/5/20/Capturing-camerapicture-data-without-PhoneGap</link>
				<description>
				
				As people know, I&apos;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&apos;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&apos;s look at an example.Over a year ago I wrote a &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2012/1/13/Demo-of-Color-Palettes-and-PhoneGap&quot;&gt;blog post&lt;/a&gt; in which I created an application called &quot;Color Thief.&quot; This application made use of PhoneGap&apos;s Camera API and a third party JavaScript library called &lt;a href=&quot;http://lokeshdhakar.com/projects/color-thief/&quot;&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=&quot;https://www.youtube.com/watch?v=EPYnGFEcis4&amp;feature=youtube_gdata_player&quot;&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 &quot;capture&quot; support for the input/file field type. This is rather simple to implement:

&amp;lt;input type=&quot;file&quot; capture=&quot;camera&quot; accept=&quot;image/*&quot; id=&quot;takePictureField&quot;&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&apos;s the code:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5613113.js&quot;&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&apos;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&apos;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&apos;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=&quot;600&quot; height=&quot;450&quot; src=&quot;http://www.youtube.com/embed/knU2SpymiaI?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
				</description>
				
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Mon, 20 May 2013 10:31:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/5/20/Capturing-camerapicture-data-without-PhoneGap</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>MAX Session: Advanced PhoneGap Build</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/5/9/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=&quot;AdobeTV Video Player&quot; width=&quot;600&quot; height=&quot;345&quot; src=&quot;http://tv.adobe.com/embed/1217/18506/&quot; frameborder=&quot;0&quot; allowfullscreen scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;

As always, I hope this is helpful!
				</description>
				
				
				<category>Mobile</category>
				
				<category>HTML5</category>
				
				<pubDate>Thu, 09 May 2013 21:49:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/5/9/MAX-Session-Advanced-PhoneGap-Build</guid>
				
				
				<enclosure url="http://www.raymondcamden.com/enclosures/APB.zip" length="7832632" type="application/zip"/>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Auto-escaping code blocks in Reveal.js</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/25/Autoescaping-code-blocks-in-Revealjs</link>
				<description>
				
				Warning - this falls into the &quot;Cool, but may not be a good idea category.&quot; I&apos;m a huge fan of the &lt;a href=&quot;https://github.com/hakimel/reveal.js/&quot;&gt;Reveal.js&lt;/a&gt; framework for HTML-based presentations and I&apos;ve already posted a few of my utilities/tips/etc for making it work better (or at least better for me). One issue I&apos;ve run into a few times lately is escaping HTML for code slides.Reveal.js has great support for code coloring (color coding?). Here&apos;s a quick screen shot of an example:
 
&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_25_13_10_20_AM.png&quot; /&gt;

In general this works simple enough. Here is how a typical code slide would look.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5460558.js&quot;&gt;&lt;/script&gt;

But if you want to include HTML in your slide then you run into a problem. As you might expect, your HTML will be rendered as, well, HTML, not source code. Typically this isn&apos;t a huge deal. Code samples are short and if you type fast, you can replace &amp;lt; and &amp;gt; in a few minutes, but after doing this a few times, and preparing to do some slides focused on HTML5 development, I thought there might be a cooler way.

By default, Reveal.js initializes itself immediately. I modified the code to do this after the DOMContentLoaded event and did some hacking:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5460602.js&quot;&gt;&lt;/script&gt;

As you can see, I simply make use of querySelectorAll to find all of my code blocks. (I could make that selector a bit more precise.) I then simply grab the HTML, escape the &amp;lt; and &amp;gt; characters, and then update the innerHTML property.

Voila!

&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_25_13_10_28_AM.png&quot; /&gt;
				</description>
				
				
				<category>Development</category>
				
				<category>HTML5</category>
				
				<pubDate>Thu, 25 Apr 2013 10:06:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/25/Autoescaping-code-blocks-in-Revealjs</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>LocalStorage Monitor Updated</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/3/11/LocalStorage-Monitor-Updated</link>
				<description>
				
				Just an FYI - if you follow this blog pretty regularly, then you know I&apos;m a big fan of the LocalStorage API. It is one of those simple, &lt;i&gt;practical&lt;/i&gt; APIs that I think are far more useful than the much praised/talked about canvas tag. A while ago I built a Chrome Extension called the &lt;a href=&quot;https://chrome.google.com/webstore/detail/localstorage-monitor/bpidlidmmmnapeldonddkjmmjkpeiabi&quot;&gt;LocalStorage Monitor&lt;/a&gt;. The idea being that I wanted to know when sites were making use of LocalStorage and have a quick way to view that usage.To be clear, you can always view LocalStorage usage in Chrome Dev Tools, but I don&apos;t always keep that open and this extension was a bit more &quot;up front&quot; about letting me know when a site was using the feature. 

Today &lt;a href=&quot;http://fusiongrokker.com/&quot;&gt;Adam Tuttle&lt;/a&gt; pushed up a mod to the code (&lt;a href=&quot;https://github.com/cfjedimaster/Local-Storage-Monitor&quot;&gt;https://github.com/cfjedimaster/Local-Storage-Monitor&lt;/a&gt;) to add memory usage reports to the display. As an example, here is how Amazon&apos;s Cloud Player is using local storage.

&lt;img src=&quot;http://www.raymondcamden.com/images/screenshot77.png&quot; /&gt;

Anyway, it is a cool little modification and thanks go to Adam for adding it. You can add this to your Chrome install &lt;a href=&quot;https://chrome.google.com/webstore/detail/localstorage-monitor/bpidlidmmmnapeldonddkjmmjkpeiabi&quot;&gt;here&lt;/a&gt;.
				</description>
				
				
				<category>Development</category>
				
				<category>HTML5</category>
				
				<pubDate>Mon, 11 Mar 2013 13:07:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/3/11/LocalStorage-Monitor-Updated</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Simple Reverse Geocoding Example</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/3/5/Simple-Reverse-Geocoding-Example</link>
				<description>
				
				Have you ever seen a web site that seemed to know where you were located? I&apos;m not talking about a map, but the actual &lt;i&gt;name&lt;/i&gt; of the location? This is done with a process called &quot;Reverse Geocoding.&quot; Whereas geocoding refers to translating a human-readable address into a longitude/latitude pair, reverse geocoding is, well, the opposite of that. Given a longitude/latitude pair, what would be the description of that location. In this blog post I&apos;ll show a simple example of this process. My example application will attempt to report the city and state you live in.Once again I&apos;ll be making use of Google for my example. One of the services of the Google Maps API is geocoding as well as &lt;a href=&quot;https://developers.google.com/maps/documentation/javascript/geocoding#ReverseGeocoding&quot;&gt;reverse geocoding&lt;/a&gt;. Their reverse geocode API needs a longitude and latitude, we can get that easily enough using Geolocation. Here is a snippet of code that begins the process:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5091026.js&quot;&gt;&lt;/script&gt;

Please note that in this demo, if the user doesn&apos;t support geolocation I&apos;m not going to do anything else. They won&apos;t get an error though and won&apos;t know what they are missing. 

Once we have the longitude and latitude, we then fire off a request to the geocode service.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5091031.js&quot;&gt;&lt;/script&gt;

As with our initial geolocation support, all I care about here is a success. If anything goes wrong, I don&apos;t care and I just ignore it. 

So, here comes the difficult part. The result was from the geocode call is fairly complex. You get an array of results ordered by the quality of the match. If you check the &lt;a href=&quot;https://developers.google.com/maps/documentation/javascript/geocoding#ReverseGeocoding&quot;&gt;docs&lt;/a&gt;, you can see an example of this. Each individual result is also fairly complex. You get an array of address parts that represent, obviously, parts of an address. If you read the &quot;Address Component Types&quot; section of the docs, you can see an explanation of the types of address parts. Each part has one or more of these types applied as a tag. 

Based on my reading of the spec, I determined I could get the city when the tag was &quot;locality&quot; and the state when the tag was &quot;administrative_area_level_1.&quot; This is US-centric and I&apos;ve not done any testing yet with other countries.

Given that I knew which tags to look for, I decided to work with the first result and see if I could match those tags:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5091064.js&quot;&gt;&lt;/script&gt;

Again, if there isn&apos;t a match I don&apos;t throw an error. Since this is simply window dressing for the site it doesn&apos;t really matter if we don&apos;t get a match. Want to see this in action? Check out the demo below. 

&lt;a href=&quot;http://raymondcamden.com/demos/2013/mar/4/test.html&quot;&gt;&lt;img src=&quot;http://www.raymondcamden.com/images/icon_128.png&quot; title=&quot;Demo, Baby&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
				</description>
				
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Tue, 05 Mar 2013 09:07:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/3/5/Simple-Reverse-Geocoding-Example</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>My IndexedDB recording, and a few notes</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/2/28/My-IndexedDB-recording-and-a-few-notes</link>
				<description>
				
				Here is the recording URL for the presentation I just gave on IndexedDB: &lt;a href=&quot;http://experts.adobeconnect.com/p30v2nmantc/&quot;&gt;http://experts.adobeconnect.com/p30v2nmantc/&lt;/a&gt;

You can find the full source code for the demos and slide deck here: &lt;a href=&quot;https://github.com/cfjedimaster/indexeddb-preso&quot;&gt;https://github.com/cfjedimaster/indexeddb-preso&lt;/a&gt;

Now for some random notes:

I plan on writing up this presentation as an article (not sure for whom yet, maybe Smashing Mag). But basically, I&apos;m going to turn the presentation and demo assets into a guide that can be downloaded, read offline in the bathroom, etc. 

Secondly, one topic I didn&apos;t go into, but bit me in the butt today, was the transaction object&apos;s &quot;oncomplete&quot; handler. This comes into play when doing something like this:

Add some crap.
Run a method to get all crap so I can see it listed.

I&apos;ve had a &quot;Note Database&quot; demo in my presentation for a while now and it worked fine... until today. When I presented it today (and you can see my surprise in the recording), I noticed that my add/edit/delete operations were not updating the list of notes. Why? Because I was asking the system to refresh the notes in the success handler of the &lt;b&gt;request&lt;/b&gt; (where the request was either add/edit/delete). Instead, I needed to wait for the transaction to end as a whole. 

As an example of this mistake, here is my original code for delete:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5059335.js&quot;&gt;&lt;/script&gt;

Notice that displayNotes() is in the request success handler. Here is the corrected version.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5059346.js&quot;&gt;&lt;/script&gt;

I&apos;ve broken up my chained calls there a bit so I get access to the transaction and add the oncomplete there.

Previously this wasn&apos;t required in Chrome, so I&apos;m assuming something has changed, but to be honest, this feels like the right way of doing things anyway.
				</description>
				
				
				<category>Development</category>
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Thu, 28 Feb 2013 13:17:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/2/28/My-IndexedDB-recording-and-a-few-notes</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Presentation: Browser Tools for Debugging</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/2/22/Presentation-Browser-Tools-for-Debugging</link>
				<description>
				
				A &lt;b&gt;huge&lt;/b&gt; thank you goes to &lt;a href=&quot;http://www.tricedesigns.com/&quot;&gt;Andrew Trice&lt;/a&gt; for spending &lt;i&gt;hours&lt;/i&gt; on polishing and editing a video of my last presentation. He uploaded it to Youtube and now you guys can watch it as well. I&apos;m proud of this presentation so I hope it is helpful. As always, criticism is welcome. You can download the demos and slide deck here: 

&lt;a href=&quot;https://github.com/cfjedimaster/BrowserToolsForDebuggingAndProfit&quot;&gt;https://github.com/cfjedimaster/BrowserToolsForDebuggingAndProfit&lt;/a&gt;

&lt;iframe width=&quot;601&quot; height=&quot;338&quot; src=&quot;http://www.youtube.com/embed/Zz0VyMPdKEg?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
				</description>
				
				
				<category>Mobile</category>
				
				<category>Development</category>
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Fri, 22 Feb 2013 14:32:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/2/22/Presentation-Browser-Tools-for-Debugging</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Google Map/Directions Mashup</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/2/18/Google-MapDirections-Mashup</link>
				<description>
				
				A while back I ran into an interesting problem with Google Maps. I was booking travel for a conference and needing to find the closest Marriott to the conference location. I didn&apos;t know the area very well so seeing a few addresses meant nothing to me. I figured Google Maps would be able to help me, but I could only plot one location at a time. (To be clear, I bet there is a way to plot multiple addresses, I just couldn&apos;t find it.) I then tried the Directions service. That too was only able to work with two addresses. I ended up entering 4 or 5 Marriott addresses and just trying to remember which one seemed shorter. To get around this, I built a simple application that lets you enter up to five starting addresses and a destination. It then plots driving directions and reports on the total distances for each. It also reports on which starting address is the best.The code for this application is relatively simple. I began by creating a simple Bootstrapped UI:

&lt;img src=&quot;http://www.raymondcamden.com/images/screenshot64.png&quot; /&gt;

I built in a bit of basic validation logic (which isn&apos;t too exciting) and then began work on the real meat of the application. Here&apos;s the entire JavaScript library behind the demo.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/4977674.js&quot;&gt;&lt;/script&gt;

The interesting part begins around line 47. I geocode the destination address first to ensure it is valid. (I should probably do the same for the starting addresses as well.) Once I have a valid destination address, I map it, and begin a loop for each of the starting addresses. I make use of the &lt;a href=&quot;https://developers.google.com/maps/documentation/directions/&quot;&gt;Google Directions API&lt;/a&gt; to get and plot the directions from each starting address to the destination. This API is very cool (I&apos;ve blogged on it a bunch already), but modifying the display of the plot is a bit broken. Unless you want to handle all of the drawing yourself, you can&apos;t really (nicely) do small modifications, like changing the initial pushpin. (Which is documented to work, but does not.) 

Here&apos;s a quick example:

&lt;img src=&quot;http://www.raymondcamden.com/images/screenshot65.png&quot; /&gt;

You can try this yourself by hitting the demo button below.

&lt;a href=&quot;http://www.raymondcamden.com/demos/2013/feb/13/test.html&quot;&gt;&lt;img src=&quot;http://www.raymondcamden.com/images/icon_128.png&quot; title=&quot;Demo, Baby&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
				</description>
				
				
				<category>jQuery</category>
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Mon, 18 Feb 2013 07:56:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/2/18/Google-MapDirections-Mashup</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Big new releases today - including Reflow</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/2/14/Big-new-releases-today--including-Reflow</link>
				<description>
				
				Today we announced some updates and additions to our &lt;a href=&quot;http://html.adobe.com/edge/&quot;&gt;Edge Tools&lt;/a&gt; lineup. As a reminder, everything here is part of the Creative Cloud lineup, and you can &lt;a href=&quot;https://creative.adobe.com/join/starter?promoid=KAMVW&quot;&gt;sign up&lt;/a&gt; for &lt;b&gt;free&lt;/b&gt; to get these tools &lt;b&gt;right now&lt;/b&gt;. 

First up is &lt;a href=&quot;http://html.adobe.com/edge/reflow/&quot;&gt;Reflow&lt;/a&gt;. I had the pleasure of demoing Reflow at my &quot;Create the Web&quot; tour stops, and this was the application folks were more excited about. Unfortunately, we couldn&apos;t share this with you till now. Today, the first preview release of Reflow is available. For an in depth review of the tool, please see the &lt;a href=&quot;http://blogs.adobe.com/edgereflow/2013/02/14/introducing-adobe-edge-reflow/&quot;&gt;team&apos;s blog post&lt;/a&gt;, but honestly, you need to download this bad boy and try it yourself. I don&apos;t pretend to be a designer, but I&apos;ve found Reflow to be a killer way to visualize and try out responsive designs. You can read about responsive all day long, but Reflow lets you actually &lt;i&gt;build&lt;/i&gt; it and see for yourself. Definitely check this out.

&lt;img src=&quot;http://www.raymondcamden.com/images/edge_reflow_hero.png&quot; /&gt;

Next up is an update to &lt;a href=&quot;http://html.adobe.com/edge/animate/&quot;&gt;Edge Animate&lt;/a&gt;. This tool allows you to build HTML/JavaScript-based animations using a tool much like the Flash IDE. Today version 1.5 was released and brings features like CSS filters, gradients, and support for &lt;a href=&quot;http://html.adobe.com/edge/webfonts/&quot;&gt;Edge Web Fonts&lt;/a&gt;. You can see more about the update (and watch some demonstration videos) on their &lt;a href=&quot;http://blogs.adobe.com/edge/2013/02/14/adobe-edge-animate-1-5-is-here-bringing-new-design-capabilities-to-the-web/&quot;&gt;blog post&lt;/a&gt;.

&lt;img src=&quot;http://www.raymondcamden.com/images/filters.png&quot; /&gt;

Both &lt;a href=&quot;http://brackets.io&quot;&gt;Brackets&lt;/a&gt; and &lt;a href=&quot;http://html.adobe.com/edge/code&quot;&gt;Edge Code&lt;/a&gt; were updated today as well. Brackets is now on Sprint 20 and Edge Code has been updated to Preview 3. Check the &lt;a href=&quot;http://download.brackets.io/&quot;&gt;downloads&lt;/a&gt; page for Brackets for details on Sprint 20 and read this &lt;a href=&quot;http://forums.adobe.com/docs/DOC-3051&quot;&gt;forum post&lt;/a&gt; for information about Edge Code Preview 3.

Finally, Dreamweaver has also been updated. Changes include Edge Web Font integration and better fluid grid support. More details &lt;a href=&quot;http://blogs.adobe.com/dreamweaver/2013/02/dreamweaver-creative-cloud-update-feb-2013.html&quot;&gt;here&lt;/a&gt;.

Again - you can get all of the Edge Tools described above - for free - as part of your &lt;a href=&quot;https://creative.adobe.com/join/starter?promoid=KAMVW&quot;&gt;Creative Cloud&lt;/a&gt; membership!
				</description>
				
				
				<category>Development</category>
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Thu, 14 Feb 2013 12:36:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/2/14/Big-new-releases-today--including-Reflow</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Quick Tip: Running WebSQL commands in Chrome Dev Tools</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/1/16/Quick-Tip-Running-WebSQL-commands-in-Chrome-Dev-Tools</link>
				<description>
				
				I&apos;m a big fan of WebSQL, which is, unfortunately, going the way of the Dodo since it was apparently just too easy to use. One of the nice things about the feature is that Chrome Dev Tools make it real easy to use. As an example, here is what you can see on a page making use of WebSQL.&lt;img src=&quot;http://www.raymondcamden.com/images/ScreenClip164.png&quot; /&gt;

As you can see, both the database and its tables are enumerated. If you click on the table, you get a list of data.

&lt;img src=&quot;http://www.raymondcamden.com/images/ScreenClip165.png&quot; /&gt;

There&apos;s no UI hint to this, but you can click the columns to sort. 

The coolest feature though is the one that is &lt;i&gt;very&lt;/i&gt; non-obvious (in my opinion). If you click the database name, you may notice the right side of the panel empties out...

&lt;img src=&quot;http://www.raymondcamden.com/images/ScreenClip166.png&quot; /&gt;

That&apos;s actually an editor. If you start typing you can execute arbitrary SQL. Hell, Chrome will even autocomplete table names and SQL commands for you. Here&apos;s an example:

&lt;img src=&quot;http://www.raymondcamden.com/images/ScreenClip167.png&quot; /&gt;

One thing to watch out for. If you execute a SQL command that returns no results, Chrome doesn&apos;t display anything. You don&apos;t get a nice &quot;0 Results&quot;. In fact, Chrome will remove the SQL from the pane.
				</description>
				
				
				<category>Development</category>
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Wed, 16 Jan 2013 09:57:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/1/16/Quick-Tip-Running-WebSQL-commands-in-Chrome-Dev-Tools</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Chrome Extension for Microdata</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/1/11/Chrome-Extension-for-Microdata</link>
				<description>
				
				A while back I read an interesting blog post on &lt;a href=&quot;http://en.wikipedia.org/wiki/Microdata_(HTML)&quot;&gt;Microdata&lt;/a&gt;. While I encourage you to read the article I just linked to, the basic gist of the feature is that it provides a way to create metadata for your HTML content. By embedding certain properties into your HTML you can create search engine/robot friendly data for your content. I&apos;m not sure how much this is actually being used in the wild (see my resources links at the bottom), but it seemed like a pretty cool thing.Back in November I &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2012/11/26/Reading-Microdata-Elements-in-Chrome&quot;&gt;posted&lt;/a&gt; a blog entry about how you could parse an HTML page for microdata in Chrome. (There is a much clearer API that is - unfortunately - not supported by Chrome yet.) I thought it might be nice to take that code and package it up into a proper extension. The idea being that you could add microdata to your HTML page and then use Chrome Dev Tools to see how a robot might read it. 

Here is a screen shot to give you an idea of what I&apos;m talking about. The site in question is &lt;a href=&quot;http://southernafricatravel.com/&quot;&gt;Southern African Travel&lt;/a&gt;.

&lt;img src=&quot;http://www.raymondcamden.com/images/screenshot53.png&quot; /&gt;

Here is another example where microdata is used for the reviews at &lt;a href=&quot;http://reviews.ctswholesalesunglasses.com/&quot;&gt;CTS Wholesale Sunglasses&lt;/a&gt;.

&lt;img src=&quot;http://www.raymondcamden.com/images/screenshot54.png&quot; /&gt;

For now, you have to manually open dev tools and select the tab, but I&apos;m considering adding an icon next to the URL bar that flags when it sees microdata being used. 

If you want to install this extension, simply go &lt;a href=&quot;https://chrome.google.com/webstore/detail/schemadump/melmflpcmnoddilkindbepcbcjbjbdin&quot;&gt;here&lt;/a&gt;. The icon is from The Noun Project, courtesy of Ed Jones. (&lt;a href=&quot;http://thenounproject.com/noun/database/#icon-No8859&quot;&gt;Original Icon&lt;/a&gt;)

Ok, if you don&apos;t care how Chrome Extensions are developed, you can stop reading now. What follows is some technical background on the extension and why I almost pulled out all my hair last night. 

I&apos;ve blogged before about the difficult in handling &quot;communication&quot; in Chrome Extensions before. By that I mean having part A talk to park B. Chrome Extensions have rules related to security and context that can make it extremely difficult to get things working. In this extension, the biggest issue was getting the content script (a JavaScript file which can run in the context of the current page) talking to my &quot;devtools&quot; script (where I&apos;d be able to update the content of my panel). There is documentation at Google on this, but &lt;b&gt;nothing that covers this specific use case&lt;/b&gt;. In fact, panels in general are pretty poorly documented. To be honest I don&apos;t know who to complain to and figure it wouldn&apos;t help much anyway. I&apos;m hoping my extensions help out.

I ended up dropping the content script and instead making use of an evaluation technique shared with me by John J. Barton. It worked perfectly. If you want to read more about his workaround, checkout our &lt;a href=&quot;https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/chromium-extensions/IAPboo9ZDlM%5B1-25-false%5D&quot;&gt;discussion thread&lt;/a&gt; on the Google group.

&lt;b&gt;Resources:&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/LawrenceWoodman/mida/wiki/Sites-Using-Microdata&quot;&gt;Sites Using Microdata&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Darn good article: &lt;a href=&quot;http://html5hacks.com/blog/2012/11/21/make-your-page-consumable-by-robots-and-humans-alike-with-microdata/&quot;&gt;Make Your Page Consumable by Robots and Humans Alike With Microdata&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
				</description>
				
				
				<category>Development</category>
				
				<category>HTML5</category>
				
				<pubDate>Fri, 11 Jan 2013 08:06:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/1/11/Chrome-Extension-for-Microdata</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>For your post-Christmas hangover, another CanIUse Mashup</title>
				<link>http://www.raymondcamden.com/index.cfm/2012/12/26/For-your-postChristmas-hangover-another-CanIUse-Mashup</link>
				<description>
				
				This will be short and quick as I&apos;ve got to hit level 24 on Guild Wars 2. A while back I &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2012/9/4/Mashups-of-CanIUsecom-data&quot;&gt;posted&lt;/a&gt; a few demos that made use of &lt;a href=&quot;http://www.caniuse.com&quot;&gt;CanIUse.com&lt;/a&gt; data. These demos were kinda nice I think, although not the most prettiest examples of what you could do with CSS. Based on a suggestion from one of the commenters I created something a bit simpler and more direct.Based on selecting a set of features, this new demo will tell you the minimum version of each major browser required to support those features.

So for example, if form field validation requires IE10 and canvas requires IE9 (&lt;i&gt;I&apos;m not going to rant about this again I&apos;m not going to rant about this again&lt;/i&gt;) then the minimum version of IE you can use for &lt;b&gt;both&lt;/b&gt; those features is IE10.

Here&apos;s a screenshot of this in action. As a reminder, CanIUse.com supports multiple browsers. The ones you see here were simply my list of what I thought was critical enough to include in the UI.


&lt;img src=&quot;http://www.raymondcamden.com/images/screenshot49.png&quot; /&gt;

Ok, check it out, and let me know what you think.

&lt;a href=&quot;http://raymondcamden.com/demos/2012/dec/20/test4.html&quot;&gt;&lt;img src=&quot;http://www.raymondcamden.com/images/icon_128.png&quot; title=&quot;Demo, Baby&quot; border=&quot;0&quot;&gt;&lt;/a&gt;

&lt;b&gt;Edit:&lt;/b&gt; Based on a recommendation by &lt;a href=&quot;http://jessefreeman.com/&quot;&gt;Jesse Freeman&lt;/a&gt;, I finally got around to adding &apos;bookmarkability&apos; to the demo. Check this version: &lt;a href=&quot;http://raymondcamden.com/demos/2012/dec/20/test4.html&quot;&gt;http://raymondcamden.com/demos/2012/dec/20/test4.html&lt;/a&gt;. As you select options, the URL will change. You can then bookmark and load up that version, or share the URL with others.

&lt;b&gt;Edit 2:&lt;/b&gt; After a bug was found in test3.html, I fixed it in test4.html and modified all my links above to just use that version.
				</description>
				
				
				<category>HTML5</category>
				
				<pubDate>Wed, 26 Dec 2012 09:24:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2012/12/26/For-your-postChristmas-hangover-another-CanIUse-Mashup</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>W3C and the HTML5 Spec</title>
				<link>http://www.raymondcamden.com/index.cfm/2012/12/18/W3C-and-the-HTML5-Spec</link>
				<description>
				
				&lt;img src=&quot;http://www.raymondcamden.com/images/w3c_home.png&quot; style=&quot;float:left;margin-right:10px;margin-bottom:10px&quot; /&gt; Ok, I know specs aren&apos;t the most exciting thing that will happen to you this week (and if it is, I&apos;m sorry), but I think this is pretty cool. Yesterday the W3C (Worldwide Web Consortium) finalized the &lt;a href=&quot;http://www.w3.org/TR/2012/CR-html5-20121217/&quot;&gt;HTML5 spec&lt;/a&gt;. This isn&apos;t the final final version, but is the &quot;feature complete&quot; version, and frankly, is a good step forward. Those of you who did the extra credit homework in school should go ahead and start reading up on &lt;a href=&quot;http://www.w3.org/TR/2012/WD-html51-20121217/&quot;&gt;HTML 5.1&lt;/a&gt;!
				</description>
				
				
				<category>HTML5</category>
				
				<pubDate>Tue, 18 Dec 2012 08:49:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2012/12/18/W3C-and-the-HTML5-Spec</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>An example of history management in the browser</title>
				<link>http://www.raymondcamden.com/index.cfm/2012/12/17/An-example-of-history-management-in-the-browser</link>
				<description>
				
				What follows is an example I built to help me learn how to manipulate browser history with JavaScript. &lt;b&gt;Do not consider this a tutorial, an example of best practices, or anything more than a personal learning exercise.&lt;/b&gt; This is a topic I&apos;ve been meaning to learn for months and I finally took the time to wrap my head around it today. I wrote some code that seems to work well and wanted to share it, but keep in mind that I&apos;m probably doing it wrong. Want a good explanation? Try one of the links below.&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://engineering.twitter.com/2012/12/implementing-pushstate-for-twittercom_7.html&quot;&gt;Implementing pushState for twitter.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/DOM/Manipulating_the_browser_history&quot;&gt;MDN: Manipulating the browser history&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://html5doctor.com/history-api/&quot;&gt;Pushing and Popping with the History API&lt;/a&gt;
&lt;/ul&gt;

I began by creating a super simple remote service. It simply returns an array of strings along with a &apos;total&apos; value. The idea being that the front end is going to allow you to view one &apos;page&apos; of content at a time. This back end is written in ColdFusion and simply returns titles of my blog entries along with a total number of results. You may click &lt;a href=&quot;http://www.raymondcamden.com/demos/2012/dec/17/api/service.cfc?method=getdata&quot;&gt;here&lt;/a&gt; to see a sample of the JSON data.

The first iteration of the application was entirely client side. I wrote a quick and ugly application with simple Previous/Next links. Again, this is ColdFusion-specific, but you could imagine this in any language.

&lt;script src=&quot;https://gist.github.com/4322635.js&quot;&gt;&lt;/script&gt;

You can demo this here: &lt;a href=&quot;http://www.raymondcamden.com/demos/2012/dec/17/oldskool/&quot;&gt;http://www.raymondcamden.com/demos/2012/dec/17/oldskool/&lt;/a&gt;

Obviously this is kind of a lame example, but if you imagine the page using &quot;real&quot; layout, then every page would be a complete reload of header graphics, CSS, etc. 

In the next iteration, I rebuilt the front end using JavaScript. This is also kinda ugly, but it uses XHR to fetch pages of content.

&lt;script src=&quot;https://gist.github.com/4322638.js&quot;&gt;&lt;/script&gt;

You can demo this here: &lt;a href=&quot;http://www.raymondcamden.com/demos/2012/dec/17/newskool/&quot;&gt;http://www.raymondcamden.com/demos/2012/dec/17/newskool/&lt;/a&gt;

Better, right? Now each page is loaded without a full page reload. You can quickly jump back and forth to different pages. But it has two issues that the History API can help with. First, it doesn&apos;t allow you to bookmark a page. Second, if you use your browser&apos;s back button, you actually end up leaving the page entirely.

Using the History API is - for the most part - pretty simple. You can use pushState to update the URL of the browser (but not the title, all the browser vendors ignore this) as well as push information to the new page. So a simple example may look like this:

&lt;script src=&quot;https://gist.github.com/4322701.js&quot;&gt;&lt;/script&gt;

Note that third argument there - you really can change the URL to anything. So I could switch to index.ruby if I wanted. But here&apos;s the crucial bit - if the user bookmarks that URL and returns to it later, your server better respond to it.

The other part that confused me was the first argument. I kept thinking of it as data I was sending to the new page. That isn&apos;t exactly right. Rather, you are associating data with that part of your history. I don&apos;t think I&apos;m doing a great job explaining this, but think of it as data you want to use when, in the future, you return to this new history item you are creating. So for example, going from page 1 to page 2, I&apos;ve passed an object. When I go to page 3, and then hit back to page 2, &lt;i&gt;then&lt;/i&gt; I make use of that object. 

You make use of that data using the popstate event handler. 

&lt;script src=&quot;https://gist.github.com/4322732.js&quot;&gt;&lt;/script&gt;

Now - here is where things get tricky. In Chrome, if you listen for the popstate event, you get one &lt;b&gt;immediately&lt;/b&gt; after the page loads. If you use Firefox, you don&apos;t. From what I know, the &lt;i&gt;draft&lt;/i&gt; spec says you should get one on page load, so Firefox is wrong here, but it is a draft spec, not a final spec. 

That made things &lt;i&gt;very&lt;/i&gt; tricky for me. I essentially had to figure a way to ignore an initial popstate event in Chrome but not in Firefox. I found some possible workarounds, but none that worked well for me.

I finally came to a realization. I only needed to worry about popstate once I&apos;ve made at least one change. So I simply wrote some simple code that waited until you had loaded your first new page and then registered the event listener.

&lt;script src=&quot;https://gist.github.com/4322752.js&quot;&gt;&lt;/script&gt;

Make sense? Here&apos;s the complete new version. It isn&apos;t that much different from the earlier version. Also note the support for checking location.search on page load. This allows me to handle a bookmarked version of the application. (That code could be tighter!) 

&lt;script src=&quot;https://gist.github.com/4322760.js&quot;&gt;&lt;/script&gt;

I tested this in Chrome and Firefox and it seems to work reasonably well. Check it out below. 

&lt;a href=&quot;http://www.raymondcamden.com/demos/2012/dec/17/newnewskool/index.html&quot;&gt;&lt;img src=&quot;http://www.raymondcamden.com/images/icon_128.png&quot; title=&quot;Demo, Baby&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
				</description>
				
				
				<category>JavaScript</category>
				
				<category>HTML5</category>
				
				<pubDate>Mon, 17 Dec 2012 15:34:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2012/12/17/An-example-of-history-management-in-the-browser</guid>
				
				
			</item>
			
		 	
			</channel></rss>