<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Pete LePage on the Web</title>
	
	<link>http://petelepage.com/blog</link>
	<description>Thoughts on the web, web design and film photography...</description>
	<lastBuildDate>Tue, 26 Feb 2013 21:40:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/PeteLePage" /><feedburner:info uri="petelepage" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>PeteLePage</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Viewport target-densitydpi support is being deprecated</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/KTzKGoNJAyQ/</link>
		<comments>http://petelepage.com/blog/2013/02/viewport-target-densitydpi-support-is-being-deprecated/#comments</comments>
		<pubDate>Thu, 21 Feb 2013 13:51:20 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[target-densitydpi]]></category>
		<category><![CDATA[viewport]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2835</guid>
		<description><![CDATA[If you're using <code>target-densitydpi</code> in your meta viewport, you should be aware that it's been deprecated from the specification and is being removed from WebKit and Chrome for Android!]]></description>
				<content:encoded><![CDATA[<p>Support for <code>target-densitydpi</code> in the <code>viewport</code> meta tag was recently <a href="http://trac.webkit.org/changeset/119527" target="_blank">removed from WebKit</a> and with Chrome for Android moving forward to current revisions on WebKit, this change is now rolling out in Android. This change affects only a small number of sites because of the limited implementation of the <code>target-densitydpi</code> attribute. It brings Chrome and other WebKit based browsers in compliance with the <a href="http://dev.w3.org/csswg/css-device-adapt/#viewport-meta" target="_blank">specification</a> and matches the behavior of other modern mobile browsers.</p>
<p>In order to to best understand what’s changed, you need to remember that a device pixel is not the same as a CSS pixel (see <a href="http://coding.smashingmagazine.com/2012/08/20/towards-retina-web/" target="_blank">CSS Pixels</a>), and that high DPI displays are able to create crisper and sharper images by fitting more device pixels into a smaller space. This means that in order for content to appear at a normal size, the browser treats each CSS pixel as multiple device pixels and the browser scaled up assets and images to fit within the correct number of CSS pixels.</p>
<p>In Android browser and early versions of Chrome for Android, developers could use <code>target-densitydpi=device-dpi</code> viewport value to force the browser to make a CSS pixel the same size as a device pixel, which may cause content to appear incorrectly scaled on screen (as seen in figure 1).</p>
<div id="attachment_2839" class="wp-caption aligncenter" style="width: 530px"><a href="http://petelepage.com/blog/wp-content/uploads/2013/02/targetdensitydpi.png"><img class=" wp-image-2839 " alt="Effects of target-densitydpi" src="http://petelepage.com/blog/wp-content/uploads/2013/02/targetdensitydpi.png" width="520" height="434" /></a><p class="wp-caption-text">Figure 1 &#8211; The effects of <code>target-densitydpi</code><br /><code>&lt;meta name="viewport" content="width=device-width, target-densitydpi=device-dpi"&gt;</code><br />Left: Android Browser respects the <code>target-densitydpi</code> setting and causes content to be improperly scaled.<br />Right: Chrome for Android ignores the <code>target-densitydpi</code> setting.</p></div>
<h2>An Easy, Quick Fix</h2>
<p>In most cases, if your site is affected by this change you can fix it easily by serving the same mark-up (including viewport) to Chrome for Android as you serve to mobile Safari (which never supported <code>target-densitydpi</code>).</p>
<h2>Best Practices for Modern Mobile Web Sites</h2>
<p>When designing a new mobile site, or updating existing pages, you should use modern techniques for dealing with high DPI displays; including always using <code>&lt;meta name="viewport" content="width=device-width"&gt;</code> and a flexible layout for mobile sites. Remember, device sizes, orientations and pixel ratios vary which means that your site may be displayed on a screen ranging from 320 to over 600 CSS pixels wide.</p>
<p>For more information about best practices for building websites that work well on high DPI displays, check out <a href="https://twitter.com/kaishin" target="_blank">Reda Lemeden’s</a> <a href="http://coding.smashingmagazine.com/2012/08/20/towards-retina-web/" target="_blank">Towards a Rentina Web</a> article on Smashing Magazine.</p>
<h2>One Other Little Note</h2>
<p>While writing up this post, I accidentally did a search for sites that used <code>target-density</code> instead of <code>target-density<strong>dpi</strong></code> and I came across quite a few of them.  If you’re using <code>target-density</code> (without the dpi at the end), you can just remove it, it wasn’t doing anything!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/KTzKGoNJAyQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2013/02/viewport-target-densitydpi-support-is-being-deprecated/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2013/02/viewport-target-densitydpi-support-is-being-deprecated/</feedburner:origLink></item>
		<item>
		<title>Meta viewport syntax – comma or semi-colon?</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/P6S4VRgd4zg/</link>
		<comments>http://petelepage.com/blog/2013/02/meta-viewport-syntax-comma-or-semi-colon/#comments</comments>
		<pubDate>Thu, 14 Feb 2013 21:25:50 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[TipsAndTricks]]></category>
		<category><![CDATA[viewport]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2820</guid>
		<description><![CDATA[If you’re using a semi-colon to separate values in your viewport meta tag, your site may break! Use a comma instead.]]></description>
				<content:encoded><![CDATA[<p><strong>TL;DR:</strong> If you’re using a semi-colon to separate values in your viewport meta tag, your site may break! Use a comma instead.</p>
<p>Browsers can be pretty forgiving most days, they do their best to fix our coding mistakes; but it’s a tough job.  Most days, they manage to get it right, but trying to fix all the possible error cases is pretty hard.  Worse yet, sometimes one browser fixes our code for us, while others don’t.</p>
<p>The viewport meta tag seems to be one of those elements that’s a little bit persnickety.  The <a href="http://dev.w3.org/csswg/css-device-adapt/" target="_blank">CSS Device Adaptation spec</a> says the correct syntax uses a comma to separate the values.  Unfortunately some sites use a semi-colon, which causes the browser to ignore your viewport settings completely!</p>
<h3 style="color:green;">Correct Syntax</h3>
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0&quot; /&gt;
</pre>
<h3 style="color:red;">Incorrect Syntax</h3>
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0; maximum-scale=1.0&quot; /&gt;
</pre>
<p>If you want to see this in action and how bad things can look, use the remote debugger with Chrome for Android Beta to change the comma to a semi-colon in the viewport meta tag on Google.com.  The site will suddenly go from looking good, to looking awful.  </p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2013/02/vp-comma.png"><img src="http://petelepage.com/blog/wp-content/uploads/2013/02/vp-comma-180x300.png" alt="Good viewport syntax" width="180" height="300" class="alignleft size-medium wp-image-2824" /></a><br />
<a href="http://petelepage.com/blog/wp-content/uploads/2013/02/vp-semicolon.png"><img src="http://petelepage.com/blog/wp-content/uploads/2013/02/vp-semicolon-180x300.png" alt="Invalid viewport syntax" width="180" height="300" class="alignright size-medium wp-image-2823" /></a></p>
<div style="clear:both;"></div>
<p>The Developer Tools also warn you in the Console when it comes across an invalid viewport meta tag with the warning: <code>Viewport argument value "device-width;" for key "width" is invalid, and has been ignored. Note that ';' is not a separator in viewport values. The list should be comma-separated.</code></p>
<p>Go make awesome, but use a comma!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/P6S4VRgd4zg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2013/02/meta-viewport-syntax-comma-or-semi-colon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2013/02/meta-viewport-syntax-comma-or-semi-colon/</feedburner:origLink></item>
		<item>
		<title>Using meta viewport</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/f3gI9NroKZY/</link>
		<comments>http://petelepage.com/blog/2012/12/using-meta-viewport/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 23:42:17 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[WebApps]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Multiple Browsers]]></category>
		<category><![CDATA[TipsAndTricks]]></category>
		<category><![CDATA[viewport]]></category>
		<category><![CDATA[Web App]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2794</guid>
		<description><![CDATA[Using meta viewport to optimize rendering on mobile devices
What is the viewport?
Imagine if every web page you opened on your phone or tablet got the same version as your desktop, and was displayed on the small screen of your device. On a phone, that might mean you would see only the top leftmost  [...]]]></description>
				<content:encoded><![CDATA[<h1>Using meta viewport to optimize rendering on mobile devices</h1>
<h2>What is the viewport?</h2>
<div id="attachment_2807" class="wp-caption alignleft" style="width: 234px"><a href="http://petelepage.com/blog/wp-content/uploads/2012/12/img1.png"><img class=" wp-image-2807 " alt="Figure 1 - If mobile browsers didn't apply a default viewport, web pages would overfill the screen." src="http://petelepage.com/blog/wp-content/uploads/2012/12/img1.png" width="224" height="336" /></a><p class="wp-caption-text">Figure 1 &#8211; If mobile browsers didn&#8217;t apply a default viewport, web pages would overfill the screen.</p></div>
<p>Imagine if every web page you opened on your phone or tablet got the same version as your desktop, and was displayed on the small screen of your device. On a phone, that might mean you would see only the top leftmost corner, a tiny 320px by 480px view, and you’d have to scroll around the page to be able to see everything. (See figure 1). Unlike a desktop or laptop, there is no way to resize the browser window to fit the content that you want to see. Thankfully, on mobile devices, almost every modern browser scales and renders the page so that you can more easily see and interact with it, panning and zooming into the areas you’re most interested in.</p>
<div id="attachment_2808" class="wp-caption alignright" style="width: 178px"><a href="http://petelepage.com/blog/wp-content/uploads/2012/12/Fig2-InFocus.png"><img class="size-medium wp-image-2808 " title="Figure 2" alt="Figure 2" src="http://petelepage.com/blog/wp-content/uploads/2012/12/Fig2-InFocus-168x300.png" width="168" height="300" /></a><p class="wp-caption-text">Figure 2</p></div>
<p>Most mobile browsers define a default viewport width of 980px CSS pixels, meaning that they lay out the page on a 980px wide area, then scale it down to fit within the width of the screen. (If you’re unfamiliar with CSS pixels, device pixels, device pixels ratios, or the like, check out the Smashing Magazine article <a href="http://coding.smashingmagazine.com/2012/08/20/towards-retina-web/">Towards a Retina Web</a>. This works great for most desktop sites that don’t take into account mobile devices and were designed for big screens. Sites that were designed to be compatible with narrow screens however are likely to be unnecessarily stretched and scaled. For example, see figure 2 &#8211; there is no viewport set, and the image is 1600px wide, that means users need to scroll left to right to see all of the content.</p>
<p>The meta viewport tag allows you to override the browser default value, allowing you to adjust the display and zoom level to best suit your web page.</p>
<h2>Using meta viewport</h2>
<h3>Setting a specific viewport width</h3>
<p>To override the default viewport defined by the browser you simply need to add a viewport meta tag in the <code>&lt;head&gt;</code> section of your page:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=320&quot; /&gt;
</pre>
<div id="attachment_2809" class="wp-caption alignright" style="width: 178px"><a href="http://petelepage.com/blog/wp-content/uploads/2012/12/vp-320.png"><img class="size-medium wp-image-2809  " alt="A page with a fixed viewport width." src="http://petelepage.com/blog/wp-content/uploads/2012/12/vp-320-168x300.png" width="168" height="300" /></a><p class="wp-caption-text">Figure 3- A page with a fixed viewport width.</p></div>
<p>Setting the viewport width to 320px, is similar to resizing your laptop browser window to be 320px wide, now the browser will render the page on a canvas that’s 320px wide. If your device is 320px, then you’re all set, the browser doesn’t have to do any scaling and you’re pretty much all set. Obviously not all devices are 320px wide, and your site most likely isn’t 320px wide.</p>
<p>But what happens if you rotate the phone from portrait to landscape, and suddenly the device is now actually 480px wide? If this happens, the browser scales the content up by 50%, so that the 320px width, so that the 320px wide document is stretched to fit in the 480px wide browser window. Unfortunately, when this scaling is applied, less content will be displayed above the fold, and the content may look oversized.</p>
<p>If you’ve designed a site for a fixed width desktop, for example, you know your page is 600px wide, then you can simply add <code>&lt;meta name="viewport" content="width=600" /&gt;</code> to the <code>&lt;head&gt;</code> of your document, which will scale the content to fit within the window. Depending on the density of your content, this may work well, but you’ll want to test it to make sure.</p>
<p>Adding a specific width viewport, is discouraged unless you’re adding it to a legacy site as a stop-gap measure until you can build a more responsive site.</p>
<h3>Setting the viewport width to the device-width</h3>
<div id="attachment_2810" class="wp-caption alignright" style="width: 178px"><a href="http://petelepage.com/blog/wp-content/uploads/2012/12/vp-dw.png"><img class="size-medium wp-image-2810 " alt="A page with width=device-width viewport." src="http://petelepage.com/blog/wp-content/uploads/2012/12/vp-dw-168x300.png" width="168" height="300" /></a><p class="wp-caption-text">Figure 4 &#8211; A page with width=device-width viewport.</p></div>
<p>Consider the sustainability of a fixed width website and how it would look given the huge variety of mobile web devices, each with a different screen size, it becomes even more of a challenge when those devices are used in landscape mode. For that reason, building your site using a responsive approach and placing it within the viewport without any zooming will help to make your site look great across all of those devices. It doesn’t need to be responsive from phone all the way to desktop, but it should at least flex from a small portrait phone, to a mid-sized mobile tablet in landscape; about 320px to 640px.</p>
<p>When you design your page or web app using a responsive approach, you don’t want the browser to render your responsive content in a viewport that is 980px wide and then scaled down to the tiny screen; instead you want the content to render in the actual viewport size. To do that, you can tell the browser to set the viewport to be the width of the actual device by applying the following meta viewport tag:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot; /&gt;
</pre>
<p>This means the viewport will be proportional to the width of the device&#8217;s screen, for example on any portrait iPhone (whether or not it is retina) the width would be 320 <a href="http://coding.smashingmagazine.com/2012/08/20/towards-retina-web/" target="_blank">CSS pixels</a>, on a landscape iPhone 3 or iPhone 4 it would be 480 CSS pixels, on a portrait Nexus 4 it would be 384 CSS pixels, and on a landscape Nexus 4 it would be 640 CSS pixels</p>
<h3>Setting the viewport scale</h3>
<p>When you specify a specific value for the viewport width, the browser will automatically determine the appropriate scale factor needed. For example, if you set the <code>width=640</code> on a device that has a screen width of 320px, the browser will scale the content by 0.5.</p>
<p>In some cases, you may want to specify the scale used by the browser. You can do this by setting <code>initial-scale</code>, <code>minimum-scale</code> and <code>maximum-scale</code>.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; /&gt;
</pre>
<p>Initial scale forces the browser to an initial scale, but still allows the user to pinch-zoom on the content to be able to make things larger or smaller. By using <code>minimum-scale</code> or <code>maximum-scale</code>, you can set a boundary on the amount of scaling the user can do.</p>
<p>You can also prevent zooming by adding <code>user-scalable=no</code>, or setting the <code>minimum-scale</code> and <code>maximum-scale</code> to the same values. This is particularly useful for mobile web applications where it doesn’t make sense to allow the user to zoom or scale content.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, 
  maximum-scale=1, minimum-scale=1&quot; /&gt;
</pre>
<p>Currently the user-scalable property does not work in Chrome for Android (m18).</p>
<h3>Setting the viewport height</h3>
<p>In addition to setting the viewport width, you can also set the viewport height. While it’s not something that’s used often, it’s good for mobile web applications that may pan horizontally only.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;height=device-height&quot; /&gt;
</pre>
<h2>Practices that are no longer recommended</h2>
<ul>
<li>Adding a specific width viewport, is discouraged unless you’re adding it to a legacy site as a stop-gap measure until you can build a more responsive site (you’ll need to replace the 320 with the width of your site):<code>&lt;meta name="viewport" content="width=320" /&gt;</code></li>
<li>The viewport property <code>target-densitydpi</code> has been removed from the <a href="http://dev.w3.org/csswg/css-device-adapt/">CSS Device Adaptation</a> specification and should not be used. It has been deprecated in Chrome for Android, and has never been supported in Mobile Safari or Firefox for Android. For more information, see <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=737090">Mozilla Bug 797090</a> or <a href="https://bugs.webkit.org/show_bug.cgi?id=88047">WebKit bug 88047</a>.</li>
</ul>
<h2>Best practice for using meta viewport</h2>
<ul>
<li>Use a <strong>comma</strong> to delimit different viewport properties. Although semi-colons may work, they do not behave consistently across browsers.</li>
<li>For a responsive website, designed with mobile in mind and where the user may want to be able to zoom in to particular areas of content:
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,
  initial-scale=1&quot; /&gt;
</pre>
</li>
<li>For a mobile web application where you don’t want to allow zooming of the content:
<pre class="brush: xml; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,
  minimum-scale=1, maximum-scale=1&quot; /&gt;
</pre>
</li>
</ul>
<h2>The Future</h2>
<p>Currently, the only consistent way to specify the viewport for a page is via the meta viewport tag, but the W3C is currently working on a <a href="http://dev.w3.org/csswg/css-device-adapt/">CSS Device Adaptation</a>, that will provide a way to specify the size, zoom factor and orientation of the viewport in CSS using the <code>@viewport</code> rule. As of late 2012, only Opera Mobile 11+ and Internet Explorer 10 provide support for it using a vendor prefix.</p>
<h2>Additional Resources</h2>
<ul>
<li><a href="http://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/">http://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/</a></li>
<li><a href="http://developer.apple.com/library/safari/#documentation/appleapplications/reference/safariwebcontent/usingtheviewport/usingtheviewport.html">http://developer.apple.com/library/safari/#documentation/appleapplications/reference/safariwebcontent/usingtheviewport/usingtheviewport.html</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Mobile/Viewport_meta_tag">https://developer.mozilla.org/en-US/docs/Mobile/Viewport_meta_tag</a></li>
<li><a href="http://www.quirksmode.org/mobile/viewports.html">http://www.quirksmode.org/mobile/viewports.html</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/f3gI9NroKZY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2012/12/using-meta-viewport/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2012/12/using-meta-viewport/</feedburner:origLink></item>
		<item>
		<title>Thinking about the offline web</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/R1_iTyq2Ucc/</link>
		<comments>http://petelepage.com/blog/2012/04/thinking-about-the-offline-web/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 16:53:24 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[WebApps]]></category>
		<category><![CDATA[AppCache]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[Fast]]></category>
		<category><![CDATA[indexed db]]></category>
		<category><![CDATA[offline]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2790</guid>
		<description><![CDATA[Over the last few months, I’ve spent a lot of time thinking about how to make it easier for developers to build web applications that work offline, its a tough problem to solve. The web has the features/technology to do it, but I think there are two things preventing us from getting there easily.  [...]]]></description>
				<content:encoded><![CDATA[<p>Over the last few months, I’ve spent a lot of time thinking about how to make it easier for developers to build web applications that work offline, its a tough problem to solve. The web has the features/technology to do it, but I think there are two things preventing us from getting there easily. The first is a perception issue for users, many people think that the web only works when they’re online, no internet, no web. That leads to a bit of a catch-22, users aren’t asking for it, so developers aren’t prioritizing it. The second problem is that it requires a change in the way we build web applications. Instead of building server side web applications, we need to build more client side web applications that use web-based APIs to get what they need.</p>
<p><strong>More than just ‘offline’</strong><br />
But applications that work offline isn’t the only reason to start using these new techniques. There are lots of other scenarios that benefit from the offline experience. For example, the intermittent connection where someone may have a connection for 5 minutes, then lose it for 2 then have it again for 3 minutes. The low bandwidth connection, for people connected maybe by dial-up or 3G modem. It also benefits the person with a great net connection &#8211; because any time you load data from the local machine, it’s almost guaranteed to be faster than if it were to come across the network. The performance benefits are pretty significant here!</p>
<p><strong>Reuse the same code for different platforms</strong><br />
If you’re already building native (iOS, Android, Desktop) applications, you probably already have the set of server-side APIs, build your web application to take advantage of those to get the data that it needs. Architect your web application in the same way that you’re building native applications &#8211; using the same set of APIs and XMLHTTPRequests! If you’re worried about performance (and everyone should be), you should cache data locally, so that after the first time the app is run, it only needs to get the newest data from the server, and there is some available immediately at start up.</p>
<p><strong>Offline techniques</strong><br />
Building applications that work offline requires two main things, a way to store the applications components (the HTML, JavaScript, CSS, images, and other assets) on the user’s machine, and some way to store data. Solving the first problem is done with the HTML5 feature application cache, which tells the browser to explicitly store the necessary files locally on the user’s computer, and instead of asking for them from the server every time, load them from the cache.</p>
<p>HTML5 offers lots of great ways to cache data locally, localStorage, indexed DB and web SQL. Unfortunately, the only consistently available storage feature today is localStorage, but it’s got a few drawbacks. WebSQL works across most browsers, but it has been deprecated, and could go away at some point. The recommended method, is indexed DB, but it’s not available in all browsers yet, but it’s coming. Check out <a href="http://caniuse.com">http://caniuse.com</a> for more info about implementation.</p>
<p><strong>Up next</strong> &#8211; how do we get users to demand offline?</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/R1_iTyq2Ucc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2012/04/thinking-about-the-offline-web/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2012/04/thinking-about-the-offline-web/</feedburner:origLink></item>
		<item>
		<title>Introducing Video Player Sample</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/Oa0sEhBLlFw/</link>
		<comments>http://petelepage.com/blog/2012/01/introducing-video-player-sample/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 01:06:04 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Chrome Web Store]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[WebApps]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Video Player]]></category>
		<category><![CDATA[WebApp]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2786</guid>
		<description><![CDATA[Have you ever wanted a fun and beautiful way to publish videos on your own site like the new 60 Minutes or  RedBull.tv apps from the Chrome Web Store? I&#8217;m excited to announce the release of The Video Player Sample! The Video Player Sample is an open source video player web app built using the same  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2012/01/player-full.png"><img class="alignleft size-medium wp-image-2778" title="player-full" src="http://petelepage.com/blog/wp-content/uploads/2012/01/player-full-300x225.png" alt="" width="300" height="225" /></a>Have you ever wanted a fun and beautiful way to publish videos on your own site like the new <a href="https://chrome.google.com/webstore/detail/imjhdahelgojehmfmkmdfjcpfbglbfmj" target="blank">60 Minutes</a> or <a href="https://chrome.google.com/webstore/category/home" target="blank"> RedBull.tv</a> apps from the <a href="https://chrome.google.com/webstore/category/home" target="blank">Chrome Web Store</a>? I&#8217;m excited to announce the release of <a href="http://code.google.com/p/video-player-sample/" target="blank">The Video Player Sample</a>! The Video Player Sample is an open source video player web app built using the same architecture as the 60 Minutes and RedBull.tv apps. It can be customized, extended, or just used out of the box and populated with your own content.</p>
<h3>How it works</h3>
<p>When a user opens the Video Player Sample web app, they can choose to watch a single video or create a playlist of videos/episodes from a list that they have uploaded and populated to the app. <a href="http://video-player-sample.appspot.com/" target="blank">The Video Player Sample</a> is configured and information about the videos is stored in JSON files (config.json and data.json respectively), both of which are located in the data directory.</p>
<h3><a href="http://petelepage.com/blog/wp-content/uploads/2012/01/player-shows.png"><img class="alignright size-medium wp-image-2779" title="player-shows" src="http://petelepage.com/blog/wp-content/uploads/2012/01/player-shows-300x225.png" alt="" width="300" height="225" /></a>Key features</h3>
<ul>
<li>A beautiful video watching experience, including a full screen view</li>
<li>Ability to subscribe to shows, watch episodes, create play lists</li>
<li>Support for multiple video formats depending on what the user’s browser supports (including WebM, Ogg, MP4, and even a Flash fallback)</li>
<li>A <a href="http://video-player-sample.appspot.com/#/shows" target="blank">Categories</a> page with an overview of the different shows/categories available in the app</li>
<li>Notifications of new episodes (when the app is installed via the Chrome Web Store)</li>
<li>Built in support for sharing to Google+, Twitter and Facebook</li>
<li>To ensure easy customization, all source files, including the Photoshop PSD’s, are included</li>
</ul>
<h3>How it&#8217;s built</h3>
<p>The Google Video Application is written for the open web platform using HTML and JavaScript, broadly following the MVC (<a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="blank">Model View Controller</a>) pattern and structure.</p>
<ul>
<li>It is built using the open source Google <a href="http://code.google.com/closure/" target="blank">Closure JavaScript library</a></li>
<li>Compiled with the <a href="http://code.google.com/closure/compiler/" target="blank">Closure Compiler</a></li>
<li>Distributed through the Chrome Web Store to take advantage of notifications</li>
</ul>
<h3>Browser Support</h3>
<p>In addition to working as an app that can be installed through the Chrome Web Store, the Video Player Web App has been tested and works in all of the modern browsers.</p>
<h3>Try it out</h3>
<p>You can see a demo of the video player in action in the <a href="http://video-player-sample.appspot.com/" target="blank">demo app</a>, or by <a href="https://chrome.google.com/webstore/detail/jhojbofcldbpmilfcnlihpknapnaagce" target="blank">Adding it to Chrome</a> through the Chrome Web Store. To learn more about how the app works, check out the <a href="http://docs.video-player-sample.appspot.com/" target="blank">documentation</a>.</p>
<p>You can grab the code from <a href="http://code.google.com/p/video-player-sample/" target="blank">Google Code</a>.</p>
<p>Enjoy!</p>
<p><em>Cross Posted at: <a href="http://google-opensource.blogspot.com/2012/01/introducing-video-player-sample.html" target="_blank">http://google-opensource.blogspot.com/2012/01/introducing-video-player-sample.html</a></em></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/Oa0sEhBLlFw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2012/01/introducing-video-player-sample/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2012/01/introducing-video-player-sample/</feedburner:origLink></item>
		<item>
		<title>Happy Blue Beanie Day</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/H1DN6GYErOs/</link>
		<comments>http://petelepage.com/blog/2011/11/happy-blue-beanie-day/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 16:52:53 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[HTML5Guy]]></category>
		<category><![CDATA[HTML5Hipster]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2772</guid>
		<description><![CDATA[Happy Blue Beanie Day from the HTML5 Hipster

Credits: Seth Ladd for the HTML5 Guy idea. Kevin Cornell (via) Zeldman for the Beanie.
Other Formats: SVG Adobe Illustrator PNG
]]></description>
				<content:encoded><![CDATA[<h2>Happy Blue Beanie Day from the HTML5 Hipster</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy-BBeanie.png"><img class="aligncenter size-medium wp-image-2773" title="HTML5 Guy with Blue Beanie" src="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy-BBeanie-300x300.png" alt="HTML5 Guy with Blue Beanie" width="300" height="300" /></a></p>
<p><strong>Credits:</strong> <a href="http://sethladd.com/" target="_blank">Seth Ladd</a> for the HTML5 Guy idea. <a href="http://www.bearskinrug.co.uk/" target="_blank">Kevin Cornell</a> (via) <a href="http://www.zeldman.com/2009/10/25/toque-o-the-morning/" target="_blank">Zeldman</a> for the Beanie.</p>
<p><strong>Other Formats:</strong> <a href="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy-BBeanie.svg">SVG</a> <a href="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy-BBeanie.ai">Adobe Illustrator</a> <a href="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy-BBeanie.png">PNG</a></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/H1DN6GYErOs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/11/happy-blue-beanie-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/11/happy-blue-beanie-day/</feedburner:origLink></item>
		<item>
		<title>Building A More App-y Web</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/Q_EfIk00gBo/</link>
		<comments>http://petelepage.com/blog/2011/11/building-a-more-app-y-web/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 17:42:32 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Chrome Web Store]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[WebApps]]></category>
		<category><![CDATA[Web App]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2753</guid>
		<description><![CDATA[Everyone wants “apps” these days, on their phone, their tablets, Apple, has the App Store to sell apps for the Mac.  The demand is coming from all over the place, including consumers who have no idea what apps are, to people who are seeing this as a new revenue opportunity (which, it is)!  I even  [...]]]></description>
				<content:encoded><![CDATA[<p>Everyone wants “apps” these days, on their phone, their tablets, Apple, has the App Store to sell apps for the Mac.  The demand is coming from all over the place, including consumers who have no idea what apps are, to people who are seeing this as a new revenue opportunity (which, it is)!  I even heard from one developer who said that his boss came to him all panicked because he got a call from the company’s chairman of the board, wanting to know what their app strategy was.  So far, most of the focus has been on apps for mobile devices, tablets, but thankfully it&#8217;s really starting to take off on the web, and we&#8217;re seeing more web apps appearing.</p>
<p>One piece of the puzzle that hasn’t really solidified yet is what defines a web app, and how does it differ from a web site?  Are <em>app like experiences</em> on the web part of a website, or are they web apps?  What about web sites that provide the same functionality as an app, but looks like a web site?</p>
<h3>Is it a web site, or a web app?</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/11/tripit_web.png"><img class="alignleft size-medium wp-image-2755" title="tripit_web" src="http://petelepage.com/blog/wp-content/uploads/2011/11/tripit_web-300x219.png" alt="" width="300" height="219" /></a>TripIt is a great example, it’s concept is absolutely an app, it helps me to coordinate my travel plans into a single place where I can easily organize my trips into a single online experience.  Here’s where it gets confusing, compare their web application to their tablet application.  I can do exactly the same sets of things, but one looks like an application, and one looks like a website.  They both let me do the same tasks, but they provide very different experiences to complete those tasks. So what is the TripIt web app, is it a site or an app?<br />
<a href="http://petelepage.com/blog/wp-content/uploads/2011/11/tripit_ipad2.png"><img class="alignleft size-medium wp-image-2754" title="tripit_ipad2" src="http://petelepage.com/blog/wp-content/uploads/2011/11/tripit_ipad2-300x225.png" alt="" width="300" height="225" style="clear:left;" /></a></p>
<div style="border: 1px solid #ddd; background-color: #eee; padding: 5px;margin:5px;">Before I go too far though, I want to profess my love for TripIt, I use it for all my travel and have been a Pro user for over a year now, and will renew next time it’s up for renewal.  I love that it tells me where I can find my luggage, how to get to my next gate, and often, it knows my flight is going to be late before the airline tells me!  I love that I can carry it on my phone and quickly look up my flight confirmation code, or when I’m in a foreign country, pull up my hotel information hand my phone to the taxi driver and point to where I want to go.</div>
<h3 style="clear:both;">How do we define a web app then?</h3>
<div>Many people have suggested different ways to define web apps in a single test or definition.  I enjoy reading <a href="http://web.appstorm.net" target="_blank">AppStorm</a>, I think they do a great job of highlighting awesome web apps, but a while ago, they tried to define web apps, and provided one of my favorite <a href="http://web.appstorm.net/general/opinion/what-is-a-web-app-heres-our-definition/" target="_blank">non-answers</a>:</div>
<blockquote><p>A web application is an application utilizing web and [web] browser technologies to accomplish one or more tasks over a network, typically through a [web] browser.</p></blockquote>
<p>That answer is almost as good as saying “because it’s not orange” to the question why is the sky blue.</p>
<h3>It can’t be a single criteria</h3>
<p>Single criteria definitions don’t work for me either.  Can we say something is an app because of a single property?  For example, creation vs. consumption, or architecture.  Add the diversity of web apps to the mix, and I think we hit a wall when it comes to defining web apps with a single criterion.</p>
<h3>A web app checklist</h3>
<p>The diversity of apps makes it impossible to have a single go/no-go checklist that we can use to define apps.  A criterion for one app may be completely inappropriate for another app.  Instead, I think we need to judge apps based on reaching a particular bar of ‘app-y-ness’.</p>
<ul>
<li>Does the app have a tight focus around a single point or purpose?</li>
<li>Is the app self-contained, keeping me within the app to complete my task?</li>
<li>Does the app encourage interaction, engagement and completion of tasks?</li>
<li>Does the app look beaultiful and have a rich user experience?</li>
<li>Does the app have an action oriented interface that uses similar paradigms to native applications, for example dialogs, buttons instead of links and new pages?</li>
<li>Is there at least a functional offline experience?</li>
<li>Does the app take advantage of the capabilities of the device, like geolocation or device motion?</li>
<li>Are traditional websites elements and links are hidden from view?</li>
<li>Is the app architected to uses a primarily client side architecture model?</li>
</ul>
<p>Now, let’s look at TripIt’s web “app” vs. their tablet app:</p>
<table>
<colgroup>
<col />
<col />
<col /></colgroup>
<tbody>
<tr>
<td></td>
<td>Web “app”</td>
<td>Tablet app</td>
</tr>
<tr>
<td>Tight focus</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>Self-contained</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>Encourage interaction, engagement &amp; task completion</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>Beautiful &amp; rich user experience</td>
<td>Maybe</td>
<td>Yes</td>
</tr>
<tr>
<td>Action oriented with native design paradigms</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Offline</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Native capabilities</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>Traditional website elements hidden?</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Client side architecture</td>
<td>No</td>
<td>Yes</td>
</tr>
</tbody>
</table>
<p>By this criteria, even though their web site is super functional, I can get the things done that I want and has some of the qualities of an app, it clearly could be more app-y.  Could TripIt build the same experience as a web app?  Absolutely!  Heck, it might even be less work because then they could reuse a lot of their design and UI components across the web and tablet versions.</p>
<h3>But who really cares?</h3>
<p>I do!  With more and more people demanding apps, I think we’re missing a huge opportunity to provide our users with web applications that are better, faster, and more fun to use than their mobile or native counterparts.  People will pay for mobile and native applications, but we have given them very few web apps that are worth their money.  <strong>We need to step up and change that, let’s build a more app-y web.</strong></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/Q_EfIk00gBo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/11/building-a-more-app-y-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/11/building-a-more-app-y-web/</feedburner:origLink></item>
		<item>
		<title>HTML5 Guy + Gelaskin</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/4wO0uplRM_M/</link>
		<comments>http://petelepage.com/blog/2011/11/html5-guy-gelaskin/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 18:27:47 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2746</guid>
		<description><![CDATA[By popular request &#8211; a few little additions to the HTML5 Guy!
Now, with in SVG!  I also created a skin for my laptop with this guy and had it printed at GelaSkins:

]]></description>
				<content:encoded><![CDATA[<p>By popular request &#8211; a few little additions to the HTML5 Guy!</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy.png"><img class="aligncenter size-medium wp-image-2740" title="HTML5-Guy" src="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy-237x300.png" alt="" width="237" height="300" /></a>Now, with in <a href="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy.svg">SVG</a>!  I also created a <a href="http://petelepage.com/blog/wp-content/uploads/2011/11/gela1.png" target="_blank">skin</a> for my laptop with this guy and had it printed at <a href="http://www.gelaskins.com/" target="_blank">GelaSkins</a>:</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/11/gela1.png"><img class="aligncenter size-medium wp-image-2748" title="gela1" src="http://petelepage.com/blog/wp-content/uploads/2011/11/gela1-300x225.png" alt="" width="300" height="225" /></a></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/4wO0uplRM_M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/11/html5-guy-gelaskin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/11/html5-guy-gelaskin/</feedburner:origLink></item>
		<item>
		<title>Happy Friday from the HTML5 Guy</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/VRo7Fejs9wY/</link>
		<comments>http://petelepage.com/blog/2011/11/html5guy/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 12:58:21 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2739</guid>
		<description><![CDATA[

]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy.png"><br />
<img class="aligncenter size-medium wp-image-2740" title="HTML5-Guy" src="http://petelepage.com/blog/wp-content/uploads/2011/11/HTML5-Guy-237x300.png" alt="" width="237" height="300" /></a></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/VRo7Fejs9wY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/11/html5guy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/11/html5guy/</feedburner:origLink></item>
		<item>
		<title>Canadian Chrome Web Store Incentives</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/LF9n33KuXUc/</link>
		<comments>http://petelepage.com/blog/2011/10/canadian-chrome-web-store-incentives/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 17:40:27 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Chrome Web Store]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ChromeWebStore]]></category>
		<category><![CDATA[Incentives]]></category>
		<category><![CDATA[Web App]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[WebApps]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2727</guid>
		<description><![CDATA[The last month has been really exciting for the Chrome Web Store. Not only did we launch the new (and very much improved user experience), we also launch internationally. The Chrome Web Store is available in lots more countries, but one in particular is close to my heart &#8211; Canada. In fact, I was up  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/10/flag_canada3.jpg"><img class="size-medium wp-image-2728 alignright" title="flag_canada3" src="http://petelepage.com/blog/wp-content/uploads/2011/10/flag_canada3-300x212.jpg" alt="" width="180" height="127" /></a>The last month has been really exciting for the <a href="http://bit.ly/tcqrrG" target="_blank">Chrome Web Store</a>. Not only did we launch the new (and very much improved user experience), we also launch internationally. The Chrome Web Store is available in lots more countries, but one in particular is close to my heart &#8211; Canada. In fact, I was up in Canada last week for a <a href="http://webapphackmtl.eventbrite.com/" target="_blank">hack-a-thon</a> and to meet with some great companies to talk about the Chrome Web Store.</p>
<p>With any newly launched product, there are lots of great opportunities for people to jump on board early, and if you&#8217;re a Web Developer in Canada, this is certainly one of them. On Thursday, we announced a special program for Canadian Web Developers. We want to see more Canadian Web Developers featured with apps that will resonate with Canadians. That&#8217;s why we&#8217;re offering a <a href="http://bit.ly/s4O0Fn" target="_blank">great incentive</a> for submitting your apps! Our panel of experts will review the apps that you submit and for each app that <a href="http://bit.ly/sT3UzT" target="_blank">meets the criteria</a>, you will receive a $200 Amazon gift certificate &#8211; not to mention exposure to more than 200 million Chrome users around the world.</p>
<p><img class="size-full wp-image-2596 alignleft" title="Chrome Web Store" src="http://petelepage.com/blog/wp-content/uploads/2011/06/cws-bag.png" alt="Chrome Web Store - Shopping Bag" width="125" height="125" /></p>
<p>You&#8217;ve got until December 31, 2011 at midnight (PST) to get your app submitted to the Chrome Web Store and fill out the submission form. You&#8217;ve got just about 2 months to get your app built and submitted.  Be sure to read the complete rules and regulations at <a href="http://bit.ly/sT3UzT" target="_blank">here</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="font-weight: bold; font-size: larger;">To learn more visit <a href="http://bit.ly/s4O0Fn" target="_blank">The Chrome Web Store Canadian Web Developer Incentive Program</a> site, including full regulations, and how to submit your app!</p>
<p>If you&#8217;re looking for resources to get you started, check out some of these links:</p>
<ul>
<li><span class="Apple-style-span" style="line-height: 18px;"><strong>Chrome Web Store Developer Guides</strong>: <a href="http://code.google.com/chrome/webstore/docs/index.html" target="_blank">http://code.google.com/chrome/webstore/docs/index.html</a>. These are the developer guides and tutorials for getting started submitting web apps to the Chrome Web Store.</span></li>
<li><span class="Apple-style-span" style="line-height: 18px;"><strong>Tutorial: Getting Started with the Chrome Web Store:</strong> <a href="http://code.google.com/chrome/webstore/docs/get_started_simple.html" target="_blank">http://code.google.com/chrome/webstore/docs/get_started_simple.html</a>. A super easy tutorial that will get your app into the store, without any custom features.</span></li>
<li><span class="Apple-style-span" style="line-height: 18px;"><strong>Background: Extending Your App&#8217;s Life:</strong> <a href="http://code.google.com/chrome/apps/docs/background.html" target="_blank">http://code.google.com/chrome/apps/docs/background.html</a>. This details how to add the background features to your app, using this, you can query for information, and then use notifications to alert the user, even when they&#8217;re not in/on your site.</span></li>
<li><span class="Apple-style-span" style="line-height: 18px;"><strong>Using the Notifications API:</strong> <a href="http://www.html5rocks.com/en/tutorials/notifications/quick/" target="_blank">http://www.html5rocks.com/en/tutorials/notifications/quick/</a> is a tutorial on how to use the notifications API available in Chrome and through the Chrome Web Store.</span></li>
<li><span class="Apple-style-span" style="line-height: 18px;"><strong>Identifying the User:</strong> <a href="http://code.google.com/chrome/webstore/docs/identify_user.html" target="_blank">http://code.google.com/chrome/webstore/docs/identify_user.html</a> is a good overview of OpenID and at the bottom under resources are a couple links to tutorials on implementing OpenID.</span></li>
<li><span class="Apple-style-span" style="line-height: 18px;"><strong>AppMator:</strong> <a href="http://appmator.appspot.com" target="_blank">http://appmator.appspot.com</a> is a tool that will automate the basic process of getting your app into the store. Sadly, it won&#8217;t handle the background page stuff, but does do the basics</span></li>
<li><span class="Apple-style-span" style="line-height: 18px;"><strong>Application Cache:</strong> <a href="http://www.webdirections.org/blog/get-offline/" target="_blank">http://www.webdirections.org/blog/get-offline/</a> and <a href="http://www.html5rocks.com/en/tutorials/#appcache" target="_blank">http://www.html5rocks.com/en/tutorials/#appcache</a> both provide great resources that you&#8217;ll find quite helpful</span></li>
<li><span class="Apple-style-span" style="line-height: 18px;"><strong>Web Storage &#8211; LocalStorage and SessionStorage:</strong> are both widely implemented and allow for storing of name/value pairs, not good for binary data, but useful for things like lessons completed or topics of interest. The other great way we&#8217;ve seen this used is as a temporary cache until the client can connect to the server to update things. <a href="http://www.html5rocks.com/en/features/storage" target="_blank">http://www.html5rocks.com/en/features/storage</a></span></li>
</ul>
<p>Good luck!<br />
PEte</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/LF9n33KuXUc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/10/canadian-chrome-web-store-incentives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/10/canadian-chrome-web-store-incentives/</feedburner:origLink></item>
		<item>
		<title>The Anatomy of a Great Chrome Web Store Listing (Updated)</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/JYvNuCukexs/</link>
		<comments>http://petelepage.com/blog/2011/09/the-anatomy-of-a-great-chrome-web-store-listing-updated/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 19:20:08 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Chrome Web Store]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[ChromeWebStore]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[TipsAndTricks]]></category>
		<category><![CDATA[Web App]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2711</guid>
		<description><![CDATA[A couple of months ago, I blogged about the anatomy of a great Chrome Web Store listing &#8211; and it looks like it’s time to do an update. A couple of weeks ago, we changed the UI on the developer dashboard and started asking for new screen shots, and promotion images. Not only is the new UI a little  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/cws-bag.png"><img class="alignright size-full wp-image-2596" title="Chrome Web Store" src="http://petelepage.com/blog/wp-content/uploads/2011/06/cws-bag.png" alt="Chrome Web Store - Shopping Bag" width="125" height="125" /></a>A couple of months ago, I blogged about the <a href="http://petelepage.com/blog/2011/06/the-anatomy-of-a-great-chrome-web-store-listing/" target="_blank">anatomy of a great Chrome Web Store listing</a> &#8211; and it looks like it’s time to do an update. A couple of weeks ago, we changed the UI on the developer dashboard and started asking for new screen shots, and promotion images. Not only is the new UI a little easier to use and understand, but soon we’ll be launching a new user experience for consumers &#8211; which will require new assets from you. I’d strongly recommend updating your assets sooner than later to make sure that when we do roll out the new UI, you’re ready for it, and are looking great.</p>
<p>Since the consumer UI will change in the near future, I’ve listed my suggestions in the order that they appear within the Developer Dashboard and included screenshots from both the <a href="https://chrome.google.com/webstore/developer/dashboard" target="_blank">Developer Dashboard</a> and the current consumer UI. I’ll update the screenshots when the new UI launches.</p>
<h2>Let’s dive in</h2>
<p>Your first chance to make a great impression with a new user is often on your application listing page in the <a href="https://chrome.google.com/webstore" target="_blank">Chrome Web Store</a>. People will make a split second decision whether to install your application based on what you put on there, so it’s important to make a great first impression. Let’s take a look at what makes a great Chrome Web Store application listing. This updated guide highlights a couple key components of a great Chrome Web Store listing. I tried not to repeat content from the documentation, but instead tease out the important parts or best practices. Be sure to follow the links for additional resources or details.</p>
<h2>A Couple Quick Examples</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/tweetdeck.png"><img class="alignnone size-medium wp-image-2594" title="TweetDeck listing" src="http://petelepage.com/blog/wp-content/uploads/2011/06/tweetdeck-300x214.png" alt="" width="300" height="214" /></a><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/goog-maps.png"><img class="alignnone size-medium wp-image-2583" title="Google Maps listing" src="http://petelepage.com/blog/wp-content/uploads/2011/06/goog-maps-300x208.png" alt="" width="300" height="208" /></a></p>
<p>I think both <a href="http://bit.ly/oPfKaI" target="_blank">TweetDeck</a> and <a href="http://bit.ly/oEYMpj" target="_blank">Google Maps</a> do a great job of providing a compelling, and interesting listing, so we’ll use those as our primary examples.</p>
<h2>Application Name and Short Description</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/appname.png"><img class="alignleft size-medium wp-image-2712" title="Google Maps CWS Header" src="http://petelepage.com/blog/wp-content/uploads/2011/09/appname-300x96.png" alt="" width="300" height="96" /></a>The application manifest file (<a href="http://bit.ly/oxope3" target="_blank">manifest.json</a>) has a property for a short description of your application. Use this to tell users about what your application does and why they should get excited and care about it. It’s limited to 132 characters, and cannot include any HTML. For example, the description for Angry Birds is simply “Birds! Slingshots! Destruction! Feathers! Fun!” For Gmail, it’s “Fast, searchable email with less spam.”</p>
<p>You must also specify the application name within the manifest file &#8211; be sure to specify only the name and not any taglines or things that would be more appropriate for the short description.  In the current UI, the +1 button will also be displayed in this section, another reason to not include tag lines or other stuff in your application name.</p>
<p>One other good tip &#8211; try to use &#8216;simple&#8217; characters in your application name, and don&#8217;t get too fancy including special unicode characters.  For example, if your app is named App<sup>2</sup>, use App2 instead of App<sup>2</sup>.  Currently search sees those two as different app names, and if you search for App2, you won&#8217;t find App<sup>2</sup>.</p>
<h2>Detailed Description</h2>
<p>Beyond the concise description set in the manifest file, a detailed description can be provided via the Chrome Web Store Developer Dashboard. This is your space to really excite your potential users about your application and convince them to install or buy it. If you’ve already built a landing page on your web site, you can likely leverage what you’ve already written here.<a href="http://petelepage.com/blog/wp-content/uploads/2011/09/description.png"><img class="alignright size-medium wp-image-2713" title="Chrome Web Store App Description" src="http://petelepage.com/blog/wp-content/uploads/2011/09/description-300x136.png" alt="" width="300" height="136" /></a></p>
<p>You should provide a detailed description of your application, including it’s features, quotes from great reviews, information about recent updates, and any other information that might be relevant to potential users. If your application has a freemium or free trial, be sure to tell users the differences between the paid and free experience so they’re not surprised or disappointed by functionality that they might not have access to.</p>
<p>Remember, this description will be searchable, so be sure to use any key words in your description that might help users to find your application if they try searching for it without knowing the name of it.</p>
<p>If your product is compatible with a Google product, make reference to that Google product by using the text “for”, “for use with”, or “compatible with”, and be sure to include the ™ symbol with the Google trademark. Example: “for Google Chrome™”. For other third party products, be sure to check any requirements that they may have when describing your application.</p>
<p>I also recommend including a short description of things that have changed since the last update, including any major bug fixes and such. This helps keep the user informed and tells them that you’re invested in the app and listening to their feedback.</p>
<h2>Supplying Icons</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/maps-icon.png"><img class="alignleft size-full wp-image-2598" title="Google Maps application icon" src="http://petelepage.com/blog/wp-content/uploads/2011/06/maps-icon.png" alt="" width="128" height="128" /></a>When you package and upload your application to the Chrome Web Store, it needs to include at least the manifest file, and an application icon. The icon that you include in the ZIP file is the icon that is used on the new tab page in Chrome after the application has been installed. Your icon should be eye catching and representative of your application. You also need to supply a second icon that is uploaded via the Developer Dashboard. This icon is the one that is shown in the Chrome Web Store &#8211; through search, browse and currently on you application listing page.</p>
<p>Personally, I would use the same icon in both places because otherwise it I think it gets confusing for users, they see one icon when they install your application and then can’t find it in their new tab page because you’ve used a different icon!</p>
<p>Remember, the icons are pretty small, so you can’t be too complex or detailed. If your icon is not circular, we recommend you try to keep it within a 96&#215;96 pixels box, with a 16 pixel per side transparent border. For circular icons, you can go up to 112&#215;112 pixels. It’s generally a good idea to avoid words or text because it makes localization difficult and often becomes difficult to read. One exception to this is that if your app name or company name is part of your logo, then it’s probably okay to use.</p>
<p>Here are a couple of my favorite icons</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/music.png"><img class="alignnone size-full wp-image-2714" title="music" src="http://petelepage.com/blog/wp-content/uploads/2011/09/music.png" alt="" width="128" height="128" /></a><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/goodfood.png"><img class="alignnone size-full wp-image-2718" title="goodfood" src="http://petelepage.com/blog/wp-content/uploads/2011/09/goodfood.png" alt="" width="128" height="128" /></a><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/nytimes.png"><img class="alignnone size-full wp-image-2715" title="nytimes" src="http://petelepage.com/blog/wp-content/uploads/2011/09/nytimes.png" alt="" width="128" height="128" /></a><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/word2.png"><img class="alignnone size-full wp-image-2716" title="word2" src="http://petelepage.com/blog/wp-content/uploads/2011/09/word2.png" alt="" width="128" height="128" /></a></p>
<p>Check out the <a href="http://bit.ly/poes2F" target="_blank">Supplying Images</a> of the Chrome Web Store docs for more info.</p>
<h2>Screenshots &amp; Promotional Images</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/images.png"><img class="alignright size-medium wp-image-2722" title="images" src="http://petelepage.com/blog/wp-content/uploads/2011/09/images-300x98.png" alt="" width="300" height="98" /></a>We’ve done some work to increase the quality and provide you with more space to show off what your app does with the new screenshots and promotional images. The old images were simply too small to be able to really be useful or exciting for consumers. We’ve also done away with the customized header background.</p>
<p>Screenshots can be one of the most compelling factors in a user’s decision to install or buy an application, so it’s important to provide at least four or five screen shots that give a user a sense for how your application works, some of the features it offers and an idea of the different elements. You should always start with a beautiful screen shot that provides a detailed overview of the application experience first, and then drill into the additional elements. Make sure the screenshots show your application in use, so that users can see how the application works, and how they might use it. If you’re displaying any kind of data from the user, be sure to use safe or sample data in the screenshots instead of blurring things out or accidentally sharing personally identifiable information.</p>
<p>Screen shots should be full bleed images with square corners that are 1280&#215;800 pixels. Since not every user has a 30” display, you can count on these images being scaled smaller to fit within the Chrome Web Store UI, and the user&#8217;s screen. With such large images, it’s important to show your app both at a high level, but also include images of your app in detail. Be sure to not over-compress or scale images so that you can’t see any of the detail. Further details about supplying screenshots are available in the Chrome Web Store documentation under Supplying Images. You can also provide locale specific screenshots if your app supports multiple locales.</p>
<h3>YouTube Videos &amp; Google Docs Presentations</h3>
<p>A picture may be worth 1000 words, but video is worth many more. The Chrome Web Store allows you to add a YouTube video to the screen shot collection, allowing you to provide a richer way to show people your application, and convince them to install or buy it. Keep in mind that in many cases, people haven’t yet made the decision to install or buy your application, and likely won’t be willing to invest a lot of time, so optimize for a short, high quality overview that highlights the main features and will encourage people to try it.</p>
<h3>Promotional Images</h3>
<p>We’re always on the lookout for great web applications to feature throughout the Chrome Web Store. When we find them we use the promotional images, but if you don’t have promotional images, we can’t promote you! Also in the new UI, the small and large tiles will be featured more prominently across the site for all applications. Only the small marquee is required, but I’d strongly recommend providing all three.</p>
<p>All three promotional images should use the same branding and identity as the rest of the images that you supplied, and have a dark or medium background with light text and avoid any white or very light elements along the edges of the images. The small tile should be 440&#215;280 pixels, the large tile 920&#215;680 pixels, and a marquee tile that’s 1400&#215;560 pixels. All of the tiles should have square corners and with no padding. It’s also a good idea to Additional details on <a href="http://bit.ly/plBiS9" target="_blank">promotional images</a> can be found in the Chrome Web Store documentation.</p>
<h2>Verified Domain</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/gojee.png"><img class="alignleft size-medium wp-image-2719" title="gojee" src="http://petelepage.com/blog/wp-content/uploads/2011/09/gojee-300x69.png" alt="" width="300" height="69" /></a>Verifying your domain via the <a href="http://bit.ly/qcybxL" target="_blank">Google Webmaster Tools</a> is like adding a certificate of authenticity to something that you’re going to buy in the store. A verified application tells potential users they’re about the install a genuine, user experience from your site – and that they’re not getting a cheap, or potentially unsafe knock-off. Also, be sure the domain name that you’ve verified and are using makes sense, and isn’t a development or staging domain; which may scare away your users.</p>
<h3>Additional Links</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/morelinks.png"><img class="alignright size-full wp-image-2720" title="morelinks" src="http://petelepage.com/blog/wp-content/uploads/2011/09/morelinks.png" alt="" width="220" height="255" /></a>You can also provide your potential customers with additional resources that are on your site. Providing the URLs for description and support pages can improve your users’ experience and help make this item’s ratings and comments more meaningful. The “Link to website for your item” should point to the landing page of your website. You can also provide a link to the help or support section of your site via the “Link to support &amp; FAQ for your item”</p>
<h2>Categories</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/category.png"><img class="alignleft size-full wp-image-2597" title="TweetDeck Category Listing" src="http://petelepage.com/blog/wp-content/uploads/2011/06/category.png" alt="" width="270" height="79" /></a>Putting your application into the most appropriate category will make it easy for users to find your application when they browse the store. You can choose up to two categories that are most appropriate for your application. You can find a <a href="http://bit.ly/qDDFUS" target="_blank">list</a> of the different categories as well as a description and examples for each in the Chrome Web Store developer documentation.</p>
<p>Even though you can choose up to two categories, and your application will be listed under both, it will only show one category on the navigation breadcrumb when you view it in the <a href="http://bit.ly/qiYc9d" target="_blank">Chrome Web Store</a>.</p>
<h2>Other Helpful Components</h2>
<h3>Version Number &amp; Last Updated</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/morelinks.png"><img class="alignleft size-full wp-image-2720" title="morelinks" src="http://petelepage.com/blog/wp-content/uploads/2011/09/morelinks.png" alt="" width="220" height="255" /></a>One of the great features of web applications is the ease at which we can add new features, fix bugs and enhance the overall user experience. It’s strongly recommended that you increment the version number in your manifest file and re-upload it to the Chrome Web Store any time you provide significant updates or bug fixes to your application. This ensures that the version number and last updated field on your application listing stay up to date, and users know that you’re application is fresh, and that you’re constantly working to make it better.</p>
<p>Also, when choosing a version number, it’s a good idea to start at 1.0, or as close to it as you can so that people know your application is ready for real world use and that you’re not something that’s still in beta or may not work as expected. If you’re not ready to be out of beta yet, that’s okay, but provide a realistic version number that indicates how close you are to being out of beta. And be sure to stay away from version numbers like 0.0.0.1.</p>
<h3>Mature Content</h3>
<p>If your application isn’t very child friendly, then marking it as Mature Content is probably a good idea. For example, some first person shooter games may not be appropriate for children. When considering whether your application should be marked as mature or not, evaluate your entire application, including any user generated content that may appear. There’s more info about ratings in the Ratings Guidelines section.</p>
<h3>Analytics</h3>
<p>While providing your Google analytics token won’t directly make the user experience any better, it will provide you with lots of data that you can use to understand who’s using your app, how many people are installing it and more detailed information than is available through the number of users or the number of weekly installs.</p>
<p><span class="Apple-style-span" style="font-size: 20px; line-height: normal;">Using the Chrome Web Store Badge</span></p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/ChromeWebStore_Badge_v2_206x58.png"><img class="alignright size-full wp-image-2601" title="ChromeWebStore_Badge_v2_206x58" src="http://petelepage.com/blog/wp-content/uploads/2011/06/ChromeWebStore_Badge_v2_206x58.png" alt="" width="206" height="58" /></a>On your application home page, you can let others know that your app is available in the Chrome Web Store by using the “<a href="http://bit.ly/qiBe4t" target="_blank">Available in the Chrome Web Store</a>” badge on your site and even going so far as to do browser sniffing to provide Chrome users with additional messaging.</p>
<h2>Conclusion</h2>
<p>There’s a lot you can do to make sure that you make a great first impression with your Chrome Web Store listing that encourages users to buy or install your application. Good luck, and let’s go build some cool web apps!  And of course, I&#8217;d be remiss if I didn&#8217;t include a link to <a href="http://bit.ly/nZ08Sd" target="_blank">@sethladd</a>&#8216;s <a href="http://bit.ly/nfA6G9" target="_blank">blog post</a> about 13 great tips!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/JYvNuCukexs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/09/the-anatomy-of-a-great-chrome-web-store-listing-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/09/the-anatomy-of-a-great-chrome-web-store-listing-updated/</feedburner:origLink></item>
		<item>
		<title>HTML5 Slide Decks &amp; Presentation Timer</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/43Gt-Dvpr60/</link>
		<comments>http://petelepage.com/blog/2011/09/html5-slide-decks-presentation-timer/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 16:06:11 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5Slides]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2697</guid>
		<description><![CDATA[A couple of folks at GDD and other events have asked what I use to create my slide decks, and I figured I&#8217;d share and add a link to a little plug in that I wrote for the slide decks.
My slide decks are based on HTML5Slides, the Google HTML5 Slide Template &#8211; it&#8217;s the same one that was used at Google  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/timer.png"><img src="http://petelepage.com/blog/wp-content/uploads/2011/09/timer.png" alt="Countdown Timer For Presentations" title="Presentation Timer" width="93" height="86" class="alignleft size-full wp-image-2699" /></a>A couple of folks at GDD and other events have asked what I use to create my slide decks, and I figured I&#8217;d share and add a link to a little plug in that I wrote for the slide decks.</p>
<p>My slide decks are based on <a href="http://code.google.com/p/html5slides/" target="_blank">HTML5Slides</a>, the Google HTML5 Slide Template &#8211; it&#8217;s the same one that was used at Google IO, generally by the Chrome DevRel team and lots of other folks.  It&#8217;s freely available for anyone to use, modify, fork, whatever you want, and creating the content for it is pretty easy.  One of my favorite things about using the HTML5Slides as my presentation software is that I can embed my demos straight into the slides and when you want to understand what&#8217;s going on, you can simply view source!</p>
<p>There are a couple of things that I think this framework is missing though.  There isn&#8217;t a way to do a presenter view and an audience view (not always necessary, but sometimes helpful to make sure you don&#8217;t forget any of the important points you want to hit).  There wasn&#8217;t an easy way to add fades when doing builds, but most importantly for me, it doesn&#8217;t have any kind of timer.   I love to talk, and can easily lose track of time when on stage.</p>
<h3>Creating a presentation timer</h3>
<p>This weekend, while on the flight from Brazil to Argentina, I build a little timer plug in that would help better keep track of time.  I wanted it to do three things:</p>
<ol>
<li>Tell me how many minutes until the official start time of my presentation</li>
<li>Tell me how many minutes left until I was supposed to be done</li>
<li>Tell me when I was done, and how many minutes over I was</li>
</ol>
<h3>Inserting a canvas element</h3>
<p>Let&#8217;s jump right into the code! When the timer starts, it inserts a &lt;canvas&gt; element at the beginning of the &lt;body&gt; element with <a href="http://mzl.la/r5FuiJ" target="_blank">insertAdjacentHTML</a>.  The canvas element is going to draw our clock face and display the number of minutes left.</p>
<pre class="brush: jscript; title: ; notranslate">
var insertElement = function() {
  var body = document.getElementsByTagName(&quot;body&quot;)[0];
  body.insertAdjacentHTML(&quot;afterbegin&quot;, 
    '&lt;canvas id=&quot;cClock&quot; width=&quot;30&quot; height=&quot;30&quot;&gt;&lt;/canvas&gt;');
}
</pre>
<h3>Make it look pretty, and subtle</h3>
<p>Since I wanted things to be very subtle and configurable, I used CSS to set the position to the upper left corner, and set the opacity to 0.25 to it mostly invisible so that I&#8217;ll likely be the only one who notices it.  I also created a hover pseudo element so that I can hover over the element if I need to.  Finally, I added a hidden class so that the element is completely invisible if the presentation ended a long time ago.</p>
<pre class="brush: css; title: ; notranslate">
#cClock {
  position: fixed;
  top: 0px;
  left: 0px;
  opacity: 0.25;
  z-index: 1000;
}
    
#cClock:hover { opacity: 1.0; }

#cClock.hidden { display: none; }
</pre>
<h3>Refreshing the clock</h3>
<p>When I start the clock, it uses a setTimeout to fire at a specific interval.  I decided to use setTimeout instead of setInterval because I wanted to be able to dynamically change the amount of time between refreshes, depending on where in the presentation I was.  If I was close to either the start time or end time, I want the clock to update more often, where as in the middle, it can fire every minute.</p>
<p>Drawing the clock<br />
Getting the clock to draw in the way I wanted took a little bit of tinkering.</p>
<pre class="brush: jscript; title: ; notranslate">
  var drawClock = function(min, color) {
    var canvas = document.getElementById(&quot;cClock&quot;);
    var ctx = canvas.getContext('2d');
    ctx.clearRect(0,0,30,30);
    ctx.lineWidth = 3;
    ctx.strokeStyle = color;
    ctx.beginPath();
    ctx.arc(15, 15, 10, toRadians(-90), toRadians((((min-60)/60)*360)-90), true);
    ctx.stroke();
    ctx.fillStyle = color;
    ctx.font=&quot;10px sans-serif&quot;
    ctx.textAlign = &quot;center&quot;;
    ctx.textBaseline = &quot;middle&quot;;
    ctx.fillText(min, 15, 15);
  }
</pre>
<h3>Math is hard, let&#8217;s go shopping!*</h3>
<p>drawClock(min, color) grabs the &lt;canvas&gt; element, and uses clearRect() to erase everything in the box.  I then set the line width and color and start the drawing the circle with beginPath() and <a href="http://mzl.la/nRiHGl" target="_blank">arc()</a>.  Let&#8217;s quickly start at the end, the &#8220;true&#8221; tells arc to draw the circle counterclockwise.  Then, the first three parameters tell the arc to put the center at 15, 15 with a radius of 10px.  The next two parameters are the angles to start drawing the circle at in radians.  If you remember high school algebra (which I don&#8217;t), 0 in radians on a circle would be equivalent of 3pm on a clock, so to figure out where the top is, we need to rotate -90 degrees and then convert to radians with toRadians(-90).  </p>
<p>To calculate the second arc position, we need to convert everything to radians again, but we also need to figure out the angle in degrees.  Since I wanted the circle to become more complete the closer the time gets to zero, I started by taking the minutes and subtracting 60.  Next, I needed to figure out where (in degrees) the minutes would be, to do that, I divided by 60 to get a percentage and multiplied by 360 to get the degrees along the circle.  </p>
<p>For example to figure out where the circle should end if the minutes were 15:<br />
toRadians((((15 &#8211; 60) / 60) * 360) &#8211; 90)<br />
-45 / 60 = -0.75 &#8212; The arc line should continue three quarters of the way around<br />
-0.75 * 360 = -270 &#8212; The angle in degrees that the arc should draw to<br />
-270 &#8211; 90 = -360 &#8212; The angle in radians, and remember my comment earlier that 0 (or 360) would be at the 3 o&#8217;clock position.</p>
<p>Phew! When coding this up, that was the hardest part for me.  I&#8217;m not exactly the biggest math fan! <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Next I called .stroke() to draw the circle, and sure enough &#8211; the circle appears!  Finally, I wanted to show the number of minutes left in the center of the circle.  I did that by using fillText().  To get things to fit in the circle perfectly centered, I aligned everything middle and center, and with fillText, set the base point to 15, 15 &#8211; the center of the box.</p>
<h3>Getting the countdown timer on screen</h3>
<p>Finally &#8211; to create an instance of the clock in a presentation, I created a JSON config object that contained the start time, and a length and a warning time, and then created an instance of the timer.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;js/timer.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  window.timerConfig = window.timerConfig || {
    settings : {
      date: new Date('Sept 19 2011 16:30'),
      minutes: 45,
      warnAt: 10
    }
  };
  var t = PresentationTimer();
  t.start()
&lt;/script&gt;
</pre>
<h3>In action</h3>
<p>I&#8217;ve iframed the timer into the window below, or you can try it <a href="http://bit.ly/pIUxqH" target="_blank">here</a>.  It creates a new instance of the timer, and sets the start time to be two minutes from now, with a length of 2 minutes and a warning at 1 minute.  I also made a small change to the CSS so that it&#8217;s less transparent and you can see it better.</p>
<p><iframe src="http://petelepage.com/scratch/presotimer/" style="border: none; width:50px; height: 50px;box-shadow:none;"></iframe></p>
<h3>Summary</h3>
<p>You can see the entire timer.js file in <a href="http://bit.ly/qwqDUc" target="_blank">GitHub</a>, or even grab the <a href="http://bit.ly/nifQCq" target="_blank">whole project.</a>.  I really want to integrate this into the HTML5Slides template at some point, because I think it&#8217;s pretty useful.  Feel free to grab it, use it, fork it, what ever works for you! </p>
<p>*Math is hard, let&#8217;s go shopping is one of my favorite Simpsons quotes.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/43Gt-Dvpr60" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/09/html5-slide-decks-presentation-timer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/09/html5-slide-decks-presentation-timer/</feedburner:origLink></item>
		<item>
		<title>Google Developer Days – South America</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/Pw-j6NgkABY/</link>
		<comments>http://petelepage.com/blog/2011/09/google-developer-days-south-america/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 13:42:41 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Chrome Web Store]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ChromeWebStore]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2690</guid>
		<description><![CDATA[My leg of the Google Developer Day tour is almost over, and it&#8217;s been AWESOME!  Wow!  Not only have I now visited 6 out of 7 continents (anyone know of any conferences or events in Antartica &#8211; it&#8217;s the only one left I&#8217;ve not been to), but I was able to add Sao Paulo and Buenos Aires to the list of  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/09/gdd_logo.jpg"><img class="alignleft size-full wp-image-2694" title="Google Developer Day 2011 Logo" src="http://petelepage.com/blog/wp-content/uploads/2011/09/gdd_logo.jpg" alt="Google Developer Day 2011" width="123" height="106" /></a>My leg of the Google Developer Day tour is almost over, and it&#8217;s been AWESOME!  Wow!  Not only have I now visited 6 out of 7 continents (anyone know of any conferences or events in Antartica &#8211; it&#8217;s the only one left I&#8217;ve not been to), but I was able to add Sao Paulo and Buenos Aires to the list of cities that I need to come back and visit while on vacation.  I&#8217;ve been thoroughly impressed with all of the developers here who showed me some of the really cool stuff that they&#8217;re working on.</p>
<p>I presented two sessions in at each of the Google Developer Days (videos are coming shortly and I&#8217;ll link to them as soon as they&#8217;re posted), and had a small part in the keynote demoing the Chrome stuff.  Our venue in Buenos Aires, a Catholic University, was pretty neat, though as I joked, the last time I was in a university classroom, I was probably at the back of the room trying to stay awake. When we got to the venue on Sunday night to do our rehearsals and tech checks, they hadn&#8217;t put the Google Developer Day decorations up yet, which was a little weird because there was a crucifix on one side, and a large photo of the previous Pope on the other side.  We also hit a little snag because they blocked a couple of the websites that we needed!  Thankfully they were really good and got them unblocked pretty quickly.</p>
<p>I think my favorite on stage oops was during the live speech recognition demo.  Any time you do a speech recognition demo on stage in a big venue, the acoustics work against you &#8211; but can sometimes lead to comical results.  In Brazil, I tried to say &#8220;Hola Brazil&#8221;, which Chrome thought was &#8220;Fort Lauderdale&#8221;.  I did the same demo in Buenos Aires, and got &#8220;Call Argentina&#8221;.</p>
<p>I&#8217;ve listed the demos and slide decks below, and as soon as the videos go online, I&#8217;ll get a post out about those!  The slide decks between the two countries are the same, the only thing that changed was the title slide.</p>
<p>Keynote Demos</p>
<ul>
<li><span><a href="http://bit.ly/okUXoh" target="_blank">All Is Not Lost</a> &#8211; right click on the text box, and choose Inspect Element, then right click on the tag to Add an Attribute, and add the x-webkit-speech attribute.  Then you can try your own speech demo!</span></li>
<li><span><a href="http://bit.ly/o1xIrV" target="_blank">Flux Sliders</a>, <a href="http://bit.ly/pFdzde" target="_blank">Movie Posters</a> &amp; <a href="http://bit.ly/n0cFbB" target="_blank">jQuery Photo Gallery</a> &#8211; the CSS3 3D photo gallery demos</span></li>
<li><span><a href="http://bit.ly/rnkYmn" target="_blank">WebGL Water</a> &#8211; the beautiful pool demo with WebGL</span></li>
<li><span><a href="http://bit.ly/qwi9ka" target="_blank">SimCity 2000</a> &#8211; the Native Client demo</span></li>
</ul>
<p>Sao Paulo, Brazil</p>
<ul>
<li><span class="Apple-style-span" style="line-height: 18px;"><a href="http://bit.ly/pDIxsy" target="_blank">Bleeding Edge HTML5</a> (be sure to try in Canary or other super new browser)</span></li>
<li><span class="Apple-style-span" style="line-height: 18px;"><a href="http://bit.ly/qQxz1q" target="_blank">Building Modern Web Apps</a></span></li>
</ul>
<p>Buenos Aires, Argentina</p>
<ul>
<li><span class="Apple-style-span" style="line-height: 18px;"><a href="http://bit.ly/nFqST8" target="_blank">Bleeding Edge HTML</a> (be sure to try in Canary or other super new browser)</span></li>
<li><a href="http://bit.ly/nrjLs7" target="_blank">Building Modern Web Apps</a></li>
</ul>
<div><span class="Apple-style-span" style="line-height: 19px;">Thanks for a great trip guys &#8211; and if you&#8217;re in Buenos Aires and want to grab a beer (or wine) and chat about web apps, I&#8217;d love to meet and see what you&#8217;re working on!  </span></div>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/Pw-j6NgkABY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/09/google-developer-days-south-america/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/09/google-developer-days-south-america/</feedburner:origLink></item>
		<item>
		<title>HTML5 Hack-A-Thon Coming To A City Near You</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/Ua38ZG8pPZ0/</link>
		<comments>http://petelepage.com/blog/2011/07/html5-hack-a-thon-coming-to-a-city-near-you/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 16:30:42 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Chrome Web Store]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ChromeWebStore]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HackAThon]]></category>
		<category><![CDATA[HTML5 For Web Designers]]></category>
		<category><![CDATA[InAppPayments]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2675</guid>
		<description><![CDATA[Well, hopefully it&#8217;ll be near you &#8211; if not, let me know in the comments where you are so we can try to get some more of these events set up!
Google is holding a few developer focused hack-a-thons around the US and would like to invite you to attend. At these events, we will be covering some of the  [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://petelepage.com/blog/wp-content/uploads/2011/07/javascript.jpg" alt="JavaScript code on computer screen" title="" width="240" height="180" class="alignleft size-full wp-image-2676" />Well, hopefully it&#8217;ll be near you &#8211; if not, let me know in the comments where you are so we can try to get some more of these events set up!</p>
<p>Google is holding a few developer focused hack-a-thons around the US and would like to invite you to attend. At these events, we will be covering some of the latest and greatest features of HTML5, Chrome Web Store and In-App Payments. You will learn about the end to end flow of building a web app, distributing the app and monetizing it using these APIs. You will also have the opportunity to work hands on with the APIs and ask our experts (including me) questions.  I&#8217;ll be helping out in Chicago and Mountain View.</p>
<p>For more information on the events and to register, please check out the location specific links below:</p>
<p>New York &#8211; 8/1 &#8211; <a href="http://bit.ly/nqeLGh">http://www.eventbrite.com/event/1892631913</a><br />
Chicago &#8211; 8/3 &#8211; <a href="http://bit.ly/oS7xKh">http://www.eventbrite.com/event/1910102167</a><br />
Seattle &#8211; 8/8 &#8211; <a href="http://bit.ly/pdc3LV">http://www.eventbrite.com/event/1910138275</a><br />
Mountain View &#8211; 8/11 &#8211; <a href="http://bit.ly/nXuLtG">http://www.eventbrite.com/event/1910202467</a></p>
<p><small><br />
* Image <a href="http://www.flickr.com/photos/dmitry-baranovskiy/2378867408/">http://www.flickr.com/photos/dmitry-baranovskiy/2378867408/</a><br />
</small></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/Ua38ZG8pPZ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/07/html5-hack-a-thon-coming-to-a-city-near-you/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/07/html5-hack-a-thon-coming-to-a-city-near-you/</feedburner:origLink></item>
		<item>
		<title>Showing &amp; Hiding Panels with HTML and CSS</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/dB0LGBLkMP0/</link>
		<comments>http://petelepage.com/blog/2011/07/showing-hiding-panels-with-html-and-css/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 19:20:11 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2657</guid>
		<description><![CDATA[I’ve always loved web apps that use little panels that animate in from the sides as a way to show and hide content, settings, or other components of a web page.  We used them a couple of times in Tweeter Fall, so I figured I’d share my way of doing them.  I wanted to try doing this without any  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/07/small.png"><img src="http://petelepage.com/blog/wp-content/uploads/2011/07/small.png" alt="" title="small" width="60" height="445" class="alignleft size-full wp-image-2668" /></a>I’ve always loved web apps that use little panels that animate in from the sides as a way to show and hide content, settings, or other components of a web page.  We used them a couple of times in <a href="http://bit.ly/TweeterFall">Tweeter Fall</a>, so I figured I’d share my way of doing them.  I wanted to try doing this without any libraries to start, using only HTML5, CSS3 and as little JavaScript as possible, which will work for most browsers, but not all.  Once we get it working with the latest stuff, I’ll go back and make the necessary modifications to get it to work across all browsers.</p>
<p>I’m using a slightly modified version of <a href="http://meyerweb.com/eric/tools/css/reset/">Eric Meyer’s CSS reset</a> to ensure that everything is ready to go, you can use that or other ones as you see fit.  </p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/07/large.png"><img src="http://petelepage.com/blog/wp-content/uploads/2011/07/large-227x300.png" alt="" title="large" width="227" height="300" class="alignright size-medium wp-image-2667" /></a></p>
<h3 style="clear:both;">Let&#8217;s get started!</h3>
<p>First, let’s create the panel where everything will live</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;left-panel&quot;&gt;
&lt;/div&gt;
</pre>
<p>and we need to apply a bit of CSS.  Typically when I start working on something like this, I’ll use super ugly colors to make sure that the stuff that I’m working on sticks out, so in this case, I’m going for a nice bright red.</p>
<pre class="brush: css; title: ; notranslate">
#left-panel {
  width: 300px;
  height: 400px;
  border: 3px solid red;
  background-color: #fcc;
}
</pre>
<h3>Positioning The Panel</h3>
<p>Great, we’ve not got our panel, though it’s not in the right place, but at least it’s on screen.  Next, let’s move it to it’s default position, so that it’s minimized.  To do that, I’m going to set the position to fixed &#8211; I want it so that it’s always on screen.  Then, we need to move the left side of the panel into the negative space, and move the panel down the screen.</p>
<pre class="brush: css; highlight: [6]; title: ; notranslate">
#left-panel {
  width: 300px;
  height: 400px;
  border: 5px solid red;
  background-color: #fcc;
  position: fixed;
  top: 150px;
  left: -275px;
}
</pre>
<h3>Making the panel appear</h3>
<p>To get the panel to be fully visible, we’re going to add both a hover pseudo-class as well as a show class.  The pseudo-class will move it out just a bit, to add some realism and a clear indication that the panel has more to show.</p>
<pre class="brush: css; title: ; notranslate">
#left-panel:hover {
  left: -250px;
}

#left-panel.show {
  left: 0px;
}
</pre>
<h3>Adding controls to show &amp; hide the panel</h3>
<p>You could simply show the panel on any hover, but that always gets a little annoying to me, especially when I’m moving my mouse around quite a bit, so I’d rather not do that.  Now we need to add the logic that will show and hide the panel.  I’m going to use a hyperlink as the main item, and a little JavaScript to toggle the show class.  The &amp;gt; will come in handy a bit later. <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;left-panel&quot;&gt;
  &lt;a href=&quot;#&quot; onclick=&quot;showLeftPanel();&quot; class=&quot;controller&quot;&gt;&amp;gt;&lt;/a&gt;
&lt;/div&gt;
</pre>
<p>The CSS for the hyperlink is pretty simple, it absolutely positions the hyperlink in the upper right hand corner, and removes the underline from the text.  </p>
<pre class="brush: css; title: ; notranslate">
#left-panel .controller {
  position: absolute;
  right: 0px;
  top: 0px;
  text-decoration: none;
}
</pre>
<h3>Hooking everything up</h3>
<p>Finally, we need the JavaScript to toggle the CSS class.  I’m using a new property off element called callList that gives me similar functionality to a lot of libraries for modifying classes on elements.  classList provides the ability to add, remove or toggle classes on elements.  </p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
  function showLeftPanel() {
    var elem = document.getElementById(&quot;left-panel&quot;);
    elem.classList.toggle(&quot;show&quot;);
  }
&lt;/script&gt;
</pre>
<p>Now, when we click on the &gt;, the panel becomes visible, and clicking on it again, makes it disappear, perfect!  The panel isn’t exactly beautiful yet, and it doesn’t take advantage of any of the cool CSS3 stuff yet, so let’s add a bit of that.  </p>
<h3>Adding a bit of style</h3>
<p>First, we’ll add some rounded corners to the top right, and bottom right, and a little bit of spacing inside the panel with a 5px padding along all the edges.  Next, I’ll add the transtion properties.  The first, <code>-wekit-transition</code> specifies that all properties that change (beyond what’s indicated in #left-panel), they’ll appear over 0.5 seconds, and will use the ease-in-out transition. In a bit, we’ll need to add the transitions for other browsers that support it &#8211; but we’re going to get it working in Chrome first.</p>
<pre class="brush: css; highlight: [9]; title: ; notranslate">
#left-panel {
  width: 300px;
  height: 400px;
  border: 5px solid red;
  background-color: #fcc;
  position: fixed;
  top: 150px;
  left: -275px;
  border-radius: 0 1em 1em 0;
  padding: 5px;
  -webkit-transition: all 0.5s ease-in-out;
}
</pre>
<p>I also need to make a few other modifications to a couple of the other classes.  I’ve changed the left on #left-panel.show to -5px.  That hides the border on the left, and ensures the 5px padding on the left doesn’t look too odd.  I could have modified the border to only display on three sides, but it kind of felt like more work to me. <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre class="brush: css; title: ; notranslate">
#left-panel.show {
  left: -5px;
}
</pre>
<h3>Add hinting to help the user</h3>
<p>The other thing that I want to do is make a few changes to the open/close hyperlink.  Because of the rounded corners, we need to move it in a bit, but I’m also going to add transitions to it as well.</p>
<pre class="brush: css; highlight: [6]; title: ; notranslate">
#left-panel a.controller {
  position: absolute;
  right: 5px;
  top: 5px;
  text-decoration: none;
  -webkit-transition: all 0.5s ease-in-out;
}
</pre>
<p>So why add the transitions? When the panel is closed, we’re using a &gt; which renders like an arrow pointing to the right, to indicate the panel can be closed, we want the arrow to point to the left, so I used a transform and rotated the character by 180 degrees, and suddenly my &gt; is a &lt;! </p>
<pre class="brush: css; title: ; notranslate">
#left-panel.show a.controller {
  -webkit-transform: rotate(180deg);
}
</pre>
<h3>Our first working version</h3>
<p>Alright, so here’s the final code that works in Chrome, with some nicer colors:</p>
<p>The HTML</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;left-panel&quot;&gt;
  &lt;a href=&quot;#&quot; onclick=&quot;showLeftPanel();&quot; class=&quot;controller&quot;&gt;&amp;gt;&lt;/a&gt;
&lt;/div&gt;
</pre>
<p>The CSS</p>
<pre class="brush: css; title: ; notranslate">
#left-panel {
  width: 300px;
  height: 400px;
  border: 5px solid #555;
  background-color: #ccc;
  position: fixed;
  top: 150px;
  left: -275px;
  border-radius: 0 1em 1em 0;
  padding: 5px;
  -webkit-transition: all 0.5s ease-in-out;
}

#left-panel:hover {
  left: -250px;
}

#left-panel.show {
  left: -5px;
}

#left-panel a.controller {
  position: absolute;
  right: 5px;
  top: 5px;
  text-decoration: none;
  -webkit-transition: all 0.5s ease-in-out;
  color: black;
  font-weight: bold;
}

#left-panel.show a.controller {
  -webkit-transform: rotate(180deg);
}
</pre>
<p>And finally, the JavaScript</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
  function showLeftPanel() {
    var elem = document.getElementById(&quot;left-panel&quot;);
    elem.classList.toggle(&quot;show&quot;);
  }
&lt;/script&gt;
</pre>
<h3>But what about other browsers?</h3>
<p>To get this working in other browsers, we need to change our CSS a bit to add other vendor prefixed items, and we’ll need to make some changes to our JavaScript as well.  </p>
<h3>Safari</h3>
<p>Safari doesn’t support classList’s yet, so we need to modify our JavaScript here.  The absolute easiest way to make this change would be to use jQuery’s toggle function, but I want to do this without any libraries.  That means we’ll have to do some feature detection to see if elem.classList is supported, if it is, we’ll use that, otherwise we’ll manually add or remove the show class. </p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
  function showLeftPanel() {
    var elem = document.getElementById(&quot;left-panel&quot;);
    if (elem.classList) {
      elem.classList.toggle(&quot;show&quot;);
    } else {
      var classes = elem.className;
      if (classes.indexOf(&quot;show&quot;) &gt;= 0) {
        elem.className = classes.replace(&quot;show&quot;, &quot;&quot;);
      } else {
        elem.className = classes + &quot; show&quot;; 
      }
      console.log(elem.className);
    }
  }
&lt;/script&gt;
</pre>
<p>That’s all we need for Safari to work!  </p>
<h3>Firefox and Opera</h3>
<p>Firefox 3.6+ and Opera 11.5+ both support classList, and previous versions will fall back to the manual method, so our JavaScript is good to go.  But, the -webkit- vendor prefixed stuff needs a little love and thankfully it’s pretty easy!  </p>
<p>In #left-panel and #left-panel a.controller add:</p>
<pre class="brush: css; title: ; notranslate">
-moz-transition: all 0.5s ease-in-out;
-o-transition: all 0.5s ease-in-out;
</pre>
<p>In #left-panel.show a.controller add:</p>
<pre class="brush: css; title: ; notranslate">
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
</pre>
<h3>Internet Explorer</h3>
<p>Unfortunately, Internet Explorer (9 or the Platform Previews for 10), don’t have support for transtions yet, which mean that our panels just appear and disappear, but that’s not an awful experience, it’s just not ideal.  In fact, the experience for Internet Explorer 7, 8 and 9 is identical except IE9 does have rounded corners.  Just in case they add support for transitions in the future, I added the -ms- vendor prefix already. </p>
<h3>Summary</h3>
<p>There you go &#8211; you’ve not got a simple panel that can be displayed by the simple click of a link, and gets out of the way when not needed.  It works in IE7/8/9, Chrome, Firefox, Opera and Safari and I suspect it will work in IE6, though I didn’t test that.  </p>
<p>Give it a try at <a href="http://petelepage.com/scratch/slider-panel/">http://petelepage.com/scratch/slider-panel/</a></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/dB0LGBLkMP0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/07/showing-hiding-panels-with-html-and-css/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/07/showing-hiding-panels-with-html-and-css/</feedburner:origLink></item>
		<item>
		<title>Is It Time To Rethink Web Navigation?</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/wFziEhtVkJc/</link>
		<comments>http://petelepage.com/blog/2011/07/is-it-time-to-rethink-web-navigation/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 00:08:38 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2649</guid>
		<description><![CDATA[While on my way into work this morning, I read a post on SixRevisions asking the question “Is It Time To Rethink Website Navigation?” For a very long time, navigation on websites has been stagnant, it’s either a navbar across the top, or maybe down the side. Sometimes, with a little JavaScript,  [...]]]></description>
				<content:encoded><![CDATA[<p>While on my way into work this morning, I read a post on <a href="http://sixrevisions.com/" target="_blank">SixRevisions</a> asking the question “<a href="http://sixrevisions.com/user-interface/is-it-time-to-rethink-website-navigation/" target="_blank">Is It Time To Rethink Website Navigation?</a>” For a very long time, navigation on websites has been stagnant, it’s either a navbar across the top, or maybe down the side. Sometimes, with a little JavaScript, it’s interactive, but it almost always contains the same types of link. The logo almost always takes you “home”, there’s an about link, a site index link, contact us, well, you know what I’m talking about. Oh, and don’t forget about the standard footer at the bottom of most sites.</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/07/greenhouses.png"><img class="alignleft size-medium wp-image-2650" title="greenhouses" src="http://petelepage.com/blog/wp-content/uploads/2011/07/greenhouses-300x200.png" alt="" width="300" height="200" /></a>We’ve certainly seen a number of web sites start to push the boundaries of traditional navigation and they call out a couple like <a href="http://www.clairetnet.com/serre-a-voeux/index.php?lang=en" target="_blank">The Wishes Greenhouse at Clair et Net</a> or how other sites use responsive web design to provide a better experience depending on the capabilities of the device you’re on.</p>
<h3>Web Pages &amp; Sites vs. Web Applications</h3>
<p>This worked well when the web was only about sites and pages &#8211; navigating from one page to another and consuming content. But as we see more and more web applications come online, the traditional navigation model doesn’t work any more.</p>
<p>I think the author missed a great opportunity though to talk about the difference in navigation between web applications and web sites &#8211; two very different models. In a web site, navigation provides a connection from one page to another and a way to move around from one piece of content to another. Web application navigation is different, instead of moving between pages, it’s more about providing the user with an ability to control and interact with content. Changing the paradigm away from navigation towards control is one of the core components that separate websites and pages from applications.</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/07/google_music1.jpg"><img class="alignright size-full wp-image-2651" title="google_music1" src="http://petelepage.com/blog/wp-content/uploads/2011/07/google_music1.jpg" alt="" width="371" height="250" /></a>Let’s take a quick look at <a href="http://music.google.com" target="_blank">Music by Google</a>. Notice there isn’t a nav bar across the top, or on the sides, and there isn’t a footer either? Instead along the right side, there are a number of links that change my view. At the bottom, where the footer normally would be are the player controls (back, play, forward, volume, etc). Instead of providing links to help me get somewhere &#8211; the links on the page help me accomplish something, or change the view that I have (maybe to a different playlist, artist or genre).</p>
<h3>Being More App-y</h3>
<p>So what makes a web application app-y? Certainly the navigation and controls do. When I look at a web application and how the designers and developers have laid out the navigation, I ask myself how this app might be different if it were a client or mobile application. When was the last time you saw the privacy policy, terms of service or copyright notice not in an about screen on a desktop app, or tucked away under settings in a mobile application? Imagine if that were at the bottom of iTunes and took up the bottom 10%! And we see this all the time in web applications. In fact, GMail is one of my favorite offenders here. Why not tuck that away under settings in top right?</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/07/gmail.png"><img class="aligncenter size-full wp-image-2652" title="gmail" src="http://petelepage.com/blog/wp-content/uploads/2011/07/gmail.png" alt="" width="372" height="83" /></a></p>
<h3>Step Out Of The Box</h3>
<p>It will take some time for this paradigm to change, but it’s an important one. Today we still think in the web site and web page “box” too often when creating web applications. <strong>Let’s get out of that box, and make web applications feel more like <em>applications</em> and less like web pages</strong>.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/wFziEhtVkJc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/07/is-it-time-to-rethink-web-navigation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/07/is-it-time-to-rethink-web-navigation/</feedburner:origLink></item>
		<item>
		<title>What Makes For A Great Web App?</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/1eIRlnoiGjY/</link>
		<comments>http://petelepage.com/blog/2011/07/what-makes-for-a-great-web-app/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 00:27:55 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[WebApps]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2633</guid>
		<description><![CDATA[What makes a web application great?  I recently sat down with Christos, one of the guys on my team to look at a number of the top web applications in the Chrome Web Store to try to identify which ones were really great, versus good, and what advice we could give to the good apps to become  [...]]]></description>
				<content:encoded><![CDATA[<p>What makes a web application great?  I recently sat down with Christos, one of the guys on my team to look at a number of the top web applications in the Chrome Web Store to try to identify which ones were really great, versus good, and what advice we could give to the good apps to become &#8220;great&#8221;.</p>
<p>Before we could start rating these apps, we built out a set of principles and criteria that we felt were important in providing a great application experience on the web.  We based our principles on some <a href="http://code.google.com/chrome/apps/articles/thinking_in_web_apps.html">earlier work</a> done by <a href="http://twitter.com/#!/Mahemoff">Mike</a> and <a href="http://twitter.com/#!/Paul_Kinlan">Paul</a>, and refined their thinking into three principles.  We tried to create a set of objective criteria for each of the principles that we could use to rate the apps &#8211; and while we didn&#8217;t actually assign a score, we wanted to be as objective as possible.</p>
<h2 style="clear: both;">A Tight Focus</h2>
<p>A web application has a tight focus encouraging people to interact, engage, and accomplish something, rather than passively view content. It doesn’t distract people with content or components that are orthogonal to the task they’re trying to complete.  People integrate it into their day to day lives because it feels like a natural extension of the things that they understand and do every day.</p>
<ul>
<li>The application is limited to a single, core scenario</li>
<li>Orthogonal scenarios and tasks are removed from view and not presented to the user</li>
<li>The primary application components are accessible at all times</li>
<li>Standard web page content and navigation is minimized and the application controls are the primary focus</li>
<li>The application looks and behaves consistently across different screens, dialogs, controls and other components</li>
<li>The application starts immediately and requires no set up or configuration before it&#8217;s first use</li>
<li>When starting the application, the user is taken directly to the application instead of a landing page or marketing page</li>
<li>The application can be used without registering or signing in, or the sign in/up process is extremely easy</li>
</ul>
<h2 style="clear: both;">Rich Visual Experiences</h2>
<p>A web application provides rich visual experiences that will delight the eye without distracting the mind.  A positive first impression makes users comfortable, assures them your application is reliable and professional and encourages people to make the product their own.  A great web application puts a premium on aesthetics without sacrificing usability.</p>
<ul>
<li>Appropriate fonts and other typographic features are used to enhance readability</li>
<li>Graphics and illustrations are high quality and look professional</li>
<li>The application uses all of the screen real estate available to it</li>
<li>Textures, gradients, and shadows add to the visual appeal of the application</li>
<li>Controls and graphics convey meaning without requiring additional context</li>
<li>Controls and graphics offer a manner of realism</li>
<li>Standard web page content and navigation is minimized</li>
<li>Animations are used to introduce new content, dialogs, or other items that require attention or interaction from the user</li>
<li>Window resize events appropriately handle new screen sizes, resized graphics and images</li>
<li>Messages and information provided to the user is helpful, easy to understand and actionable</li>
</ul>
<h2 style="clear: both;">Rich Interactive Experiences</h2>
<p>A web application provides a rich, interactive experience that makes technology transparent so people can complete their task confidently without ever having to know or understand what makes the application work.</p>
<ul>
<li>The application feels fast and responsive</li>
<li>The application provides appropriate notifications and information to keep the user informed</li>
<li>The application follows best practices for building fast web applications</li>
<li>The application provides a full featured offline experience</li>
<li>Input from the user is validated before being sent to the server and appropriate input types are used</li>
<li>Adding or removing data from the application is easy</li>
</ul>
<h2>A couple of my favorite apps</h2>
<h3 style="clear: both;">QuickNote</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/07/QuickNote.png"><img class="alignleft size-medium wp-image-2634" title="QuickNote" src="http://petelepage.com/blog/wp-content/uploads/2011/07/QuickNote-300x233.png" alt="" width="300" height="233" /></a><a href="https://chrome.google.com/webstore/detail/mijlebbfndhelmdpmllgcfadlkankhok">QuickNote</a> was on application that stood out in this category &#8211; not only does it focus on it&#8217;s primary task (note taking), it didn&#8217;t require any setup or logging in to get started.</p>
<h3 style="clear: both;">Flixster</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/07/flixster.png"><img class="size-medium wp-image-2636 alignright" title="flixster" src="http://petelepage.com/blog/wp-content/uploads/2011/07/flixster-300x255.png" alt="" width="300" height="255" /></a>I&#8217;m a web developer who knows enough about design to appreciate good design, but not enough to do it myself.  <a href="http://flixster.rottentomatoes.com/">Flixster</a> was a good example of involving design early on in the process &#8211; the use of rich CSS3 features like gradients, shadows and such make the app visually appealing and fun to use.</p>
<h3 style="clear: both;">280 Slides</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/07/280Slides.png"><img class="alignleft size-medium wp-image-2638" title="280Slides" src="http://petelepage.com/blog/wp-content/uploads/2011/07/280Slides-300x227.png" alt="" width="300" height="227" /></a>I love it when I see a web application and think &#8211; it must be Flash, only to find out that it isn&#8217;t &#8211; seeing the creativity and ingenuity of other web developers is awesome.  <a href="http://280slides.com/Editor/">280 Slides</a> is one of those web applications.  Like PowerPoint or Keynote, it&#8217;s an app to build slide decks and presentations &#8211; but it&#8217;s all built using the open web stack.  It was built using <a href="http://cappuccino.org/">Cappuccino</a>, a really powerful web framework for building apps, not web sites.  Def worth checking out.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/1eIRlnoiGjY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/07/what-makes-for-a-great-web-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/07/what-makes-for-a-great-web-app/</feedburner:origLink></item>
		<item>
		<title>GoDaddy and AppCache Manifest Files</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/yDGXHCvZA9U/</link>
		<comments>http://petelepage.com/blog/2011/06/godaddy-and-appcache-manifest-files/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 20:31:36 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[AppCache]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[GoDaddy]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[manifest]]></category>
		<category><![CDATA[MimeType]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2609</guid>
		<description><![CDATA[In trying to add HTML5 Application Cache support to one of my web apps today, I hit a few little snags with my hoster (GoDaddy with a Shared Deluxe Windows account) and wanted to share as I&#8217;m sure other people will run into the same thing.
Each time I uploaded my web.config file, I kept getting 500  [...]]]></description>
				<content:encoded><![CDATA[<p>In trying to add HTML5 Application Cache support to one of my web apps today, I hit a few little snags with my hoster (GoDaddy with a Shared Deluxe Windows account) and wanted to share as I&#8217;m sure other people will run into the same thing.</p>
<p>Each time I uploaded my <code>web.config</code> file, I kept getting 500 server errors that weren&#8217;t very helpful.  As it turns out, the extension <code>.manifest</code> is already taken by the mime-type <code>application/x-ms-manifest</code>, and when I tried to override that, IIS got kind of angry, and served the 500 Server error.  I wasn&#8217;t quite sure what was happening, but was able to figure it out by reverting to my original <code>web.config</code> file, and requesting the <code>appcache.manifest</code> file that I had already uploaded.  Sure enough, using the network tab in the Chrome DevTools, I saw it was being served back with the wrong mime type.</p>
<p>To resolve the issue, I added a new static file handler for <code>.appcache</code> files in the system.web -&gt; httpHandlers section.  If you don&#8217;t do this, IIS doesn&#8217;t know about the file type and it won&#8217;t serve unknown file types at all.  Then in system.webServer -&gt; staticContent, I added a mimeMap extension for <code>.appcache</code> files with the mimetype of <code>text/cache-manifest</code>.  After uploading the <code>web.config</code> file again, I retried my request, and sure enough, everything worked perfectly!</p>
<p>My final web.config now looks like&#8230;</p>
<pre class="brush: xml; title: ; notranslate">
&lt;configuration&gt;
  &lt;system.web&gt;
    ...
    &lt;httpHandlers&gt;
      ...
      &lt;add verb=&quot;GET,HEAD&quot; path=&quot;*.appcache&quot; 
        type=&quot;System.Web.StaticFileHandler&quot; /&gt;
    &lt;/httpHandlers&gt;
  &lt;/system.web&gt;
  ...
  &lt;system.webServer&gt;
  ...
    &lt;staticContent&gt;
    &lt;mimeMap fileExtension=&quot;.appcache&quot; 
      mimeType=&quot;text/cache-manifest&quot; /&gt;
    ...
    &lt;/staticContent&gt;
    ...
  &lt;/system.webServer&gt;
  ...
&lt;/config&gt;
</pre>
<p>Check out this <a href="http://www.html5rocks.com/en/tutorials/appcache/beginner/" target="_blank">tutorial on Application Cache at HTML5Rocks.com</a>.  Also, you can find a full list of the default mime types provided by GoDaddy&#8217;s IIS servers <a href="http://help.godaddy.com/article/3821" target="_blank">here</a>.</p>
<p><strong>[Update 6/30/11 @ 1:53pm]</strong> <a href="http://twitter.com/paul_irish">@Paul_Irish</a> pointed out that the recommended extension is <code>.appcache</code> specifically to avoid the unregistered Microsoft extension, and referred to a <a href="http://html5.org/tools/web-apps-tracker?from=5811&#038;to=5812">bug</a> on <a href="http://html5.org">HTML5.org</a>. So there you have it! <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/yDGXHCvZA9U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/06/godaddy-and-appcache-manifest-files/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/06/godaddy-and-appcache-manifest-files/</feedburner:origLink></item>
		<item>
		<title>The Anatomy of a Great Chrome Web Store Listing</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/gxN7Stq9zkc/</link>
		<comments>http://petelepage.com/blog/2011/06/the-anatomy-of-a-great-chrome-web-store-listing/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 16:37:43 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Chrome Web Store]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[ChromeWebStore]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Web App]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2581</guid>
		<description><![CDATA[Your first chance to make a great impression with a new user is often on your application listing page in the Chrome Web Store.  People will make a split second decision whether to install your application based on what you put on there, so it’s important to make a great first impression.  Let’s  [...]]]></description>
				<content:encoded><![CDATA[<p>Your first chance to make a great impression with a new user is often on your application listing page in the <a href="https://chrome.google.com/webstore" target="_blank">Chrome Web Store</a>.  People will make a split second decision whether to install your application based on what you put on there, so it’s important to make a great first impression.  Let’s take a look at what makes a great Chrome Web Store application listing.  This guide highlights a couple key components of a great Chrome Web Store listing.  I tried not to repeat content from the documentation, but instead tease out the important parts or best practices.  Be sure to follow the links for additional resources or details.</p>
<h2 style="clear: both;">TweetDeck &amp; Google Maps</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/tweetdeck.png"><img class="alignleft size-medium wp-image-2594" title="TweetDeck listing" src="http://petelepage.com/blog/wp-content/uploads/2011/06/tweetdeck-300x214.png" alt="" width="250" /></a><br />
<a href="http://petelepage.com/blog/wp-content/uploads/2011/06/goog-maps.png"><img class="alignnone size-medium wp-image-2583" title="Google Maps listing" src="http://petelepage.com/blog/wp-content/uploads/2011/06/goog-maps-300x208.png" alt="" width="250" /></a><br />
I think both <a href="https://chrome.google.com/webstore/detail/hbdpomandigafcibbmofojjchbcdagbl" target="_blank">TweetDeck</a> and <a href="https://chrome.google.com/webstore/detail/lneaknkopdijkpnocmklfnjbeapigfbh">Google Maps</a> do a great job of providing a compelling, and interesting listing, so we&#8217;ll use those as our primary examples.</p>
<h2 style="clear: both;">Category</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/category.png"><img class="alignleft size-full wp-image-2597" title="TweetDeck Category Listing" src="http://petelepage.com/blog/wp-content/uploads/2011/06/category.png" alt="" width="270" height="79" /></a>Putting your application in to the most appropriate category will make it easy for users to find your application when they browse the store.  You can choose up to two categories that are most appropriate for your application.  You can find a <a href="http://code.google.com/chrome/webstore/docs/best_practices.html#categories" target="_blank">list</a> of the different categories as well as a description and examples for each in the <a href="http://code.google.com/chrome/webstore/docs/" target="_blank">Chrome Web Store developer documentation</a>.</p>
<p>Even though you can choose up to two categories, and your application will be listed under both, it will only show one category on the navigation breadcrumb when you view it in the Chrome Web Store.  Unfortunately at this time there is no way to change which one is listed when you link directly to the page.</p>
<h2 style="clear: both;">Header Details</h2>
<h3 style="clear: both;">Screen Shots and Video</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/uploaded-screenshot.png"><img class="alignright size-medium wp-image-2595" title="uploaded screenshot" src="http://petelepage.com/blog/wp-content/uploads/2011/06/uploaded-screenshot-300x206.png" alt="" width="300" height="206" /></a>Screen shots can be one of the most compelling factors in a user&#8217;s decision to install or buy an application, so it’s important to provide at least four or five screen shots that give a user a sense for how your application works, some of the features it offers and an idea of the different elements.  You should always start with a beautiful screen shot that provides a detailed overview of the application experience first, and then drill into the additional elements.  Make sure the screen shots show your application in use, so that users can see how the application works, and how they might use it.  If you&#8217;re displaying any kind of data from the user, be sure to use safe or sample data in the screen shots instead of blurring things out or accidentally sharing personally identifiable information.</p>
<p>Screen shots should be full bleed images with square corners that are 400&#215;275 pixels.  Very few applications will actually fit within those dimensions, which means you may have to do some creative scaling, or cropping to provide appropriate screenshots.  Be sure to not over-compress or scale images so that you can’t see any of the detail.   Further details about supplying screen shots are available in the Chrome Web Store documentation under <a href="http://code.google.com/chrome/webstore/docs/images.html#screenshots" target="_blank">Supplying Images</a>.</p>
<p>A picture may be worth 1000 words, but video is worth many more.  The Chrome Web Store allows you to add a YouTube video to the screen shot collection, allowing you to provide a richer way to show people your application, and convince them to install or buy it.  Keep in mind that in many cases, people haven’t yet made the decision to install or buy your application, and likely won’t be willing to invest a lot of time, so optimize for a short, high quality overview that highlights the main features and will encourage people to try it.</p>
<h3 style="clear: both;">Icon</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/maps-icon.png"><img class="alignleft size-full wp-image-2598" title="Google Maps application icon" src="http://petelepage.com/blog/wp-content/uploads/2011/06/maps-icon.png" alt="" width="128" height="128" /></a>Your application’s icon represents identity of your application, and is an important part of the overall brand.  The icon should be professional, and appropriately sized so that it’s not pixelated or skewed. The icon file should be a 128&#215;128 pixel PNG, where the actual icon size should be 96&#215;96 (for square icons); an additional 16 pixels per side should be transparent padding, adding up to 128&#215;128 total image size.  Additional details about icons can be found in the <a href="http://code.google.com/chrome/webstore/docs/images.html#icons" target="_blank">Supplying Images</a> section of the Chrome Web Store documentation.</p>
<h3 style="clear: both;">Verified Domain</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/verified.png"><img class="alignright size-full wp-image-2599" title="verified" src="http://petelepage.com/blog/wp-content/uploads/2011/06/verified.png" alt="" width="261" height="88" /></a>Verifying your domain via the <a href="http://www.google.com/webmasters/" target="_blank">Google Webmaster Tools</a> is like adding a certificate of authenticity to something that you’re going to buy in the store.  A verified application tells potential users they’re about the install a genuine, user experience from your site &#8211; and that they’re not getting a cheap, or potentially unsafe knock-off.  Also, be sure the domain name that you’ve verified and are using makes sense, and isn&#8217;t a development or staging domain; which may scare away your users.</p>
<h3 style="clear: both;">Short Description</h3>
<p>The application manifest file (<a href="http://code.google.com/chrome/extensions/manifest.html" target="_blank">manifest.json</a>) has a property for a short description of your application.  Use this to tell users about what your application does and why they should get excited and care about it.  It’s limited to 132 characters, and cannot include any HTML.  For example, the description for Angry Birds is simply “Birds! Slingshots! Destruction! Feathers! Fun!”  For Gmail, it’s “Fast, searchable email with less spam.”</p>
<h3>Customized Header Background</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/header-background-image.png"><img class="alignleft size-thumbnail wp-image-2586" title="Sample header background image" src="http://petelepage.com/blog/wp-content/uploads/2011/06/header-background-image-150x150.png" alt="" width="150" height="150" /></a>You can supply a customized background for the header description that appears on the right side of the header in your application’s store listing.  The header background allows you to enhance the identity and branding elements on your listing page.  When supplying the background image, make sure your app&#8217;s title and description are still readable and that the background elements don’t distract from the overall listing.</p>
<p>The header background image should fill the entire 570&#215;275 pixel canvas, though don’t put anything important in the bottom 60px as those are reserved for the rating, buy or install buttons.  Be sure to choose a background color that will provide the appropriate contrast with either white, or black text, though a dark or medium background color is recommended, like in this <a href="http://petelepage.com/blog/wp-content/uploads/2011/06/header-in-store-screenshot.png" target="_blank">example</a>.  Additional details can be found in the <a href="http://code.google.com/chrome/webstore/docs/images.html#bg" target="_blank">Header background</a> section of the Chrome Web Store documentation.</p>
<h2 style="clear: both;">Full Description</h2>
<p>Beyond the concise description set in the manifest file, a detailed description can be provided via the Chrome Web Store Developer Dashboard. This is your space to really excite your potential users about your application and convince them to install or buy it.  If you’ve already built a landing page on your web site, you can likely leverage what you’ve already written here.</p>
<p>You should provide a detailed description of your application, including it’s features, quotes from great reviews, information about recent updates, and any other information that might be relevant to potential users.  If your application has a freemium or free trial, be sure to tell users the differences between the paid and free experience so they’re not surprised or disappointed by functionality that they might not have access to.</p>
<p>Remember, this description will be searchable, so be sure to use any key words in your description that might help users to find your application if they try searching for it without knowing the name of it.</p>
<p>If your product is compatible with a Google product, make reference to that Google product by using the text &#8220;for&#8221;, &#8220;for use with&#8221;, or &#8220;compatible with&#8221;, and be sure to include the ™ symbol with the Google trademark. Example: &#8220;for Google Chrome™&#8221;.  For other third party products, be sure to check any requirements that they may have when describing your application.</p>
<h2 style="clear: both;">Other Helpful Components</h2>
<h3 style="clear: both;">Version Number &amp; Last Updated</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/last-updated.png"><img class="alignright size-full wp-image-2600" title="Last Updated Field" src="http://petelepage.com/blog/wp-content/uploads/2011/06/last-updated.png" alt="" width="221" height="224" /></a>One of the great features of web applications is the ease at which we can add new features, fix bugs and enhance the overall user experience.  It’s strongly recommended that you increment the version number in your manifest file and re-upload it to the Chrome Web Store any time you provide significant updates or bug fixes to your application.  This ensures that the version number and last updated field on your application listing stay up to date, and users know that you’re application is fresh, and that you’re constantly working to make it better.</p>
<p>Also, when choosing a version number, it’s a good idea to start at 1.0, or as close to it as you can so that people know your application is ready for real world use and that you’re not something that’s still in beta or may not work as expected.  If you’re not ready to be out of beta yet, that’s okay, but provide a realistic version number that indicates how close you are to being out of beta.  And be sure to stay away from version numbers like 0.0.0.1.</p>
<h3 style="clear: both;">Promotional Images</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/small-promo-image.png"><img class="alignleft size-full wp-image-2592" title="Small Promotional Image" src="http://petelepage.com/blog/wp-content/uploads/2011/06/small-promo-image.png" alt="" width="210" height="140" /></a>It’s always a good idea to provide a <a href="http://petelepage.com/blog/wp-content/uploads/2011/06/small-promo-image.png" target="_blank">small</a> and <a href="http://petelepage.com/blog/wp-content/uploads/2011/06/large-promo-image.png" target="_blank">large</a> promotional images; in case your application is chosen to be featured in one of the many featured application listings.  If it doesn’t have at least one promotional image, it there’s little chance of it being chosen as a feature application!  Both images should use the same branding and identity as the rest of the images that you supplied, and have a dark or medium background with light text.  The small image should be 210&#215;140 pixels and the large 585&#215;220 pixels, both with square corners and no padding.  Additional details on <a href="http://code.google.com/chrome/webstore/docs/images.html#promo" target="_blank">promotional images</a> can be found in the Chrome Web Store documentation.</p>
<h3 style="clear: both;">Using the Chrome Web Store badge</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/06/ChromeWebStore_Badge_v2_206x58.png"><img class="alignright size-full wp-image-2601" title="ChromeWebStore_Badge_v2_206x58" src="http://petelepage.com/blog/wp-content/uploads/2011/06/ChromeWebStore_Badge_v2_206x58.png" alt="" width="206" height="58" /></a>On your application home page, you can let others know that your app is available in the Chrome Web Store by using the &#8220;<a href="http://code.google.com/chrome/webstore/branding.html#badge" target="_blank">Available in the Chrome Web Store</a>&#8221; badge on your site and even going so far as to do browser sniffing to provide Chrome users with additional messaging. Be sure to check out</p>
<h2 style="clear: both;">Conclusion</h2>
<p>There’s a lot you can do to make sure that you make a great first impression with your Chrome Web Store listing that encourages users to buy or install your application.  Good luck, and let’s go build some cool web apps!</p>
<p><strong>[Update]</strong> &#8211; thanks to <a href="http://twitter.com/mikewest" target="_blank">@mikewest</a> for pointing out a few grammatical and other mistakes!<br />
<strong>[Update2]</strong> &#8211; <a href="http://twitter.com/sethladd" target="_blank">@sethladd</a> reminded me that he&#8217;s got a great blog post titled <a href="http://blog.sethladd.com/2010/11/12-tips-for-great-chrome-web-store.html" target="_blank">13 Tips for a Great Chrome Web Store Listing Page</a></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/gxN7Stq9zkc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/06/the-anatomy-of-a-great-chrome-web-store-listing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/06/the-anatomy-of-a-great-chrome-web-store-listing/</feedburner:origLink></item>
		<item>
		<title>TweeterFall – Web Workers</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/ye6Z21lUvEg/</link>
		<comments>http://petelepage.com/blog/2011/05/tweeterfall-web-workers/#comments</comments>
		<pubDate>Fri, 20 May 2011 17:29:12 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Workers]]></category>
		<category><![CDATA[webWorker]]></category>
		<category><![CDATA[Workers]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2566</guid>
		<description><![CDATA[How often have you seen this dialog, or something similar &#8211; telling you that some scripts on a page are taking too long while your browser has become completely unresponsive.  Because JavaScript runs in the same thread as the rest of the browser UI, we&#8217;re often faced with the challenge of being  [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://petelepage.com/blog/wp-content/uploads/2011/05/unresponsive-300x154.png" alt="" title="unresponsive" width="300" height="154" class="alignleft size-medium wp-image-2567" />How often have you seen this dialog, or something similar &#8211; telling you that some scripts on a page are taking too long while your browser has become completely unresponsive.  Because JavaScript runs in the same thread as the rest of the browser UI, we&#8217;re often faced with the challenge of being unable to run any complex or long running JavaScript without the fear of blocking the browser.  That&#8217;s where web workers come in.</p>
<p>Web Workers are part of the HTML5 specification and allow you to run scripts in the background, independently of the main browser thread. This means that you can do complex calculations or run scripts that may take a while to run without yielding to keep the page responsive.  The <a href="http://dev.w3.org/html5/workers/">W3C spec</a> has some great examples of use cases and other helpful descriptions that are worth reading for deeper details.  It also notes that workers are relatively heavy weight and are not intended to be used in large numbers.</p>
<p>In order to to maintain thread safety, workers run in an effective sandbox, which means they don&#8217;t have access to the DOM or many other components.  To get information back and forth between the worker and the main application, we need to use the postMessage method and listen for message events.</p>
<p>In TweeterFall, we used a worker thread poll Twitter for new tweets and then we &#8216;pushed&#8217; those new tweets to the main thread.  Let&#8217;s have a look how we used workers.</p>
<h3>Starting &amp; Stopping the Worker</h3>
<p>We only ever have one working running in our application, and to maintain an easy handle to it, we defined it&#8217;s variable in the global scope.  We then had two methods that would handle how the worker would behave &#8211; <code>startWorker()</code> and <code>stopWorker()</code>.  The <code>startWorker()</code> method takes a parameter that provides information about the username or list that we want to pull tweets from, how often we should poll Twitter and the ID of the last tweet we saw.</p>
<pre class="brush: jscript; title: ; notranslate">
var myWorker;

function startWorker(settings) {
  settings.cmd = &quot;start&quot;;
  settings.lastTweetID = lastTweetID();
  console.log(&quot;WebWorker: Starting&quot;, settings);
  myWorker = new Worker(&quot;scripts/worker.js&quot;);
  myWorker.addEventListener(&quot;message&quot;, newTweetHandler, false);  
  myWorker.postMessage(settings);
}

function stopWorker() {
  if (myWorker != undefined) {
    console.log(&quot;WebWorker: Terminating&quot;);
    myWorker.terminate();
    myWorker = null;
  }
}
</pre>
<p>In our <code>startWorker()</code> thread, we create the new worker with <code>myWorker = new Worker("scripts/worker.js");</code>, and then add an event listener and listen for any messages that the worker wants to pass back to us &#8211; this is the only way we&#8217;re going to be able to communicate to the worker because it&#8217;s working off in it&#8217;s own little isolated world.  At this point, the worker exists, and if it wants to tell us anything, we&#8217;re ready to listen, but now we need to tell it to do something, which is the <code>myWorker.postMessage(settings);</code>.</p>
<p>Stopping our worker is pretty similar, we check to make sure that we have a valid object, and as long as we do, <code>.terminate()</code> will immediately close the worker without giving it an opportunity to shut down properly or clean up after itself.  This works in our case because we don&#8217;t have anything in memory and we&#8217;re not doing any calculations of any kind.  If you may need to save state or want to clean up after yourself, the better way to shut down would be to send a stop message via <code>.postMessage()</code> and within your worker thread, shut down gracefully by calling <code>self.close();</code> after completing any clean up.</p>
<h3>The Worker Thread</h3>
<p>Inside our worker thread, we need to set up an event listener to listen for messages from our parent thread and any other code that we want to execute.</p>
<pre class="brush: jscript; title: ; notranslate">
self.addEventListener('message', function(e) {
	var data = e.data;
	switch (data.cmd) {
		case 'start':
		  self.postMessage(&quot;Worker: Starting&quot;);
			setConfig(data);
			readTweets();
			break;
		case 'stop':
		  self.postMessage(&quot;Worker: Stopping&quot;);
			self.close();
			break;
		default:
		  self.postMessage(&quot;Worker: Error - Unknown Command&quot;);
	};
}, false);
</pre>
<p>Our event listener listens for messages from the parent and will start or stop the worker as necessary.  When we get the start command, we parse the settings data (<code>setConfig</code>), and then start reading tweets (<code>readTweets()</code>).  For sake of readability, I&#8217;ll skip the code we used for <code>setConfig()</code>, but it&#8217;s easy enough to find if you want it.</p>
<pre class="brush: jscript; title: ; notranslate">
function getURL() {
  var sinceID = &quot;&quot;;
  if (parseInt(lastKnownTweetID, 10) &gt; 0) {
    sinceID = &quot;&amp;since_id=&quot; + lastKnownTweetID;
  }
  if (typeof userList === 'undefined') {
    return 'http://twitter.com/statuses/user_timeline/' + twitterUser 
      + '.json?count=' + tweetCount+ '&amp;callback=processTweets' + sinceID;
  } else {
    //For a list
    return 'http://api.twitter.com/1/' + twitterUser + '/lists/' + 
      userList + '/statuses.json?callback=processTweets' + sinceID;
  }
}

function readTweets() {
  try {
    var url = getURL();
    self.postMessage(&quot;Worker: Attempting To Read Tweets From - &quot; + url);
    importScripts(url);
  }
  catch (e) {
    self.postMessage(&quot;Worker: Error - &quot; + e.message);
    setTimeout(readTweets, 120000);
  }
}
</pre>
<p><code>readTweets()</code> is the function that does the dirty work, making a JSONP call to Twitter that requests the latest tweets.  We encapsulated the URL generation into it&#8217;s own method so that we could use it even if we weren&#8217;t using workers.  Because we don&#8217;t have access to the DOM, we can&#8217;t just insert a <code>&lt;script&gt;</code> block, so after getting the URL, we call <code>importScripts(url);</code>, which makes an synchronous call and injects the result into the worker.  If we run into any problems, like over capacity, not being able to reach Twitter or anything else, it&#8217;s caught in the catch block, and we wait two minutes before trying again.  Here&#8217;s the JSONP call we make <a href="http://api.twitter.com/1/petele/lists/chromedevrel-11/statuses.json?callBack=processTweets">http://api.twitter.com/1/petele/lists/chromedevrel-11/statuses.json?callBack=processTweets</a>.</p>
<p>The request we sent to Twitter includes <code>?callback=processTweets</code> in the query string which will cause <code>processTweets()</code> to be executed once we&#8217;ve pulled the new tweets from Twitter.</p>
<pre class="brush: jscript; title: ; notranslate">
function processTweets(data) {
  var len = data.length;
  for (var i = 0; i &lt; len; i++) {
    if (data[i].id_str &gt;= lastKnownTweetID) {
      lastKnownTweetID = data[i].id_str;
    }
  }
  returnTweets(data);
}

function returnTweets(data) {
  if (data.length &gt; 0) {
    self.postMessage(&quot;Worker: New Tweets - &quot; + data.length);
    self.postMessage(data);
  } else {
    self.postMessage(&quot;Worker: New Tweets - 0&quot;);
  }
  setTimeout(readTweets, updateDelay);
}
</pre>
<p><code>processTweets()</code> enumerates all of the tweets we got back to find the most recent tweet ID.  That way, when we ask Twitter again later for tweets, we&#8217;re only asking for the ones that we haven&#8217;t seen.  Once we&#8217;ve done that, we call <code>returnTweets()</code> to push the new tweets back to the application.  We could have merged <code>processTweets()</code> and <code>returnTweets()</code>, and I don&#8217;t remember why I decided to do it as two separate methods.  Once we&#8217;re returned the tweets via <code>returnTweets()</code> we use <code>setTimeout()</code> to call <code>readTweets()</code> again.  </p>
<h3>A couple of quick tips</h3>
<p>A couple things to remember about web workers, no DOM access means that you can&#8217;t manipulate the DOM, so that means that if you want to create new UI components in threads, you can, but you need to do it in the thread, and then pass that back to the main application via <code>postMessage()</code>.  Unfortunately, it also means that jQuery doesn&#8217;t work in threads, so generating those UI components becomes a little more complex.  I&#8217;ve heard rumors of a worker safe jQuery library, but haven&#8217;t seen it yet.  Hopefully! <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   </p>
<p>The other good thing to know is that you can debug works in the Chrome Developer Tools by clicking on the Scripts tab, and scrolling down in the column on the right to Workers and clicking on the debug checkbox.   </p>
<h3>Summary</h3>
<p>I found using workers to be really easy, and a good way of handling this.  There are plenty of other good ways to use workers &#8211; and it gives us some pretty good power to be able to push complex work down to the client.  Especially as browsers JavaScript engines are getting faster and faster.  </p>
<h3>Additional Resources</h3>
<ul>
<li><a href="https://developer.mozilla.org/en/using_web_workers">Mozilla Developer Center &#8211; Using Web Workers</a></li>
<li><a href="http://dev.w3.org/html5/workers/">W3C Web Workers Spec</a></li>
<li><a href="http://en.wikipedia.org/wiki/Web_Workers">Web Workers on Wikipedia</a></li>
<li><a href="http://www.html5rocks.com/tutorials/workers/basics/">HTML5Rocks Web Workers Tutorial</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/ye6Z21lUvEg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/05/tweeterfall-web-workers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/05/tweeterfall-web-workers/</feedburner:origLink></item>
		<item>
		<title>TweeterFall – Notifications</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/Occ_o7EA6xI/</link>
		<comments>http://petelepage.com/blog/2011/05/tweeterfall-notifications/#comments</comments>
		<pubDate>Fri, 20 May 2011 06:38:36 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[HTML Notifications]]></category>
		<category><![CDATA[Notifications]]></category>
		<category><![CDATA[Notifications API]]></category>
		<category><![CDATA[webkitNotifications]]></category>
		<category><![CDATA[WebNotifications]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2550</guid>
		<description><![CDATA[In TweeterFall, when a new tweet is received, we notify the user about that tweet via desktop notifications.  If you use Chrome and Gmail, you&#8217;ve probably seen notifications pop up when you receive a new mail, or about an upcoming appointment.  The Desktop Notifications API allows script to request  [...]]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-2551" title="notification" src="http://petelepage.com/blog/wp-content/uploads/2011/05/notification.png" alt="" width="315" height="104" />In <a href="http://bit.ly/TweeterFall">TweeterFall</a>, when a new tweet is received, we notify the user about that tweet via desktop notifications.  If you use Chrome and Gmail, you&#8217;ve probably seen notifications pop up when you receive a new mail, or about an upcoming appointment.  The Desktop Notifications API allows script to request a small toast to appear on the desktop of the user.  The contents of the toast can either be specified as iconUrl/title/text strings, or as a URL to a remote resource which contains the contents of the toast.  They&#8217;re part of the <a href="http://dev.w3.org/2006/webapi/WebNotifications/publish/">WebAPI spec</a>, though still in early draft, and so far only implemented in Chrome.</p>
<p>Since notifications are still something that may change, in Chrome, they&#8217;re under the <code>webkit</code> vendor prefix.  The Chromium implementation details can be found on the <a href="http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification">Chromium</a> site.</p>
<p>There are two types of notifications that you can surface, what I&#8217;ll call simple notifications like the one on the left that contains an image, a headline and some text; and HTML notifications.  HTML notifications are much more powerful because instead of sending the image, headline and text, you send it a URL, and it will display the contents of that URL. That means you can style your notification to match your applications UI and even provide interactivity through links, javascript, etc.</p>
<p>Let&#8217;s have a look at how we implemented new tweet notifications in TweeterFall.</p>
<h3>Requesting Permission</h3>
<p>When the user turns on notifications in TweeterFall, we need to check to see if we have permission to show notifications and if we don&#8217;t we need to ask for it.  Desktop Notifications pop open a new window and could quickly become an easy spam target if we didn&#8217;t provide some kind of permission system.  When a user grants or denies permission, they do so for the domain.</p>
<pre class="brush: jscript; title: ; notranslate">
function requestPermissionIfRequired() {
  if (!hasNotificationPermission() &amp;&amp; (window.webkitNotifications)) {
    window.webkitNotifications.requestPermission();
  }
}</pre>
<p>In <code>requestPermissionIfRequired()</code>, we check to see if the browser supports notifications, and if we already have permission.  If we don&#8217;t have permission, but notifications are supported, Chrome prompts the user asking for permission to provide notifications.<br />
<img class="size-full wp-image-2552" title="The notifications permission infobar in Google Chrome" src="http://petelepage.com/blog/wp-content/uploads/2011/05/The-notifications-permission-infobar-in-Google-Chrome.png" alt="" width="457" height="63" /></p>
<h3>Checking For Permission</h3>
<p>I also use feature detection here to check to see if notifications are supported in the browser.  We will only return true if notifications are supported and the user has already given permission to show notifications.</p>
<pre class="brush: jscript; title: ; notranslate">
function hasNotificationPermission() {
  return !!(window.webkitNotifications) 
    &amp;&amp; (window.webkitNotifications.checkPermission() == 0);
}
</pre>
<h3>Show the Notification</h3>
<p>We&#8217;re finally ready to show our notification to the user.</p>
<pre class="brush: jscript; title: ; notranslate">
function showNotification(pic, title, text) {
  if (hasNotificationPermission()) {
    var notificationWindow = 
      window.webkitNotifications.createNotification(pic, title, text);
    notificationWindow.show();
    setTimeout(function(notWin) {
      notWin.cancel();
    }, 10000, notificationWindow);
  } else {
    console.log(&quot;showNotification: No Permission&quot;);
  }
}
</pre>
<p>The method takes three parameters, the image to use, the title and the text do display.  When the function is called, it checks to see if it has permission using our previously established permission check that also encompasses feature detection, so we know we&#8217;ll be safe calling this even if the browser doesn&#8217;t support notifications.  We then create the notification with <code>window.webkitNotifications.createNotification(pic, title, text)</code> and show it with <code>.show()</code>.</p>
<p>Immediately below that, we have a <code>setTimeout</code> call with an anonymous function that takes one parameter (the window handle to the notification) and will  hide the notification after the timeout period has expired.  If we didn&#8217;t do this, the notification would remain on screen until the user clicked the close button, or closed the browser.  I&#8217;ve hard coded the timeout to be 10000ms, and you can change this to suit your needs.</p>
<h3>Summary</h3>
<p>As you can see, showing notifications is pretty easy, check &amp; ask for permission, and then show the notification.  You can use these to let the user know when a task is complete, when there&#8217;s new information that they might be interested in and so forth.  Obviously these only work when a user is on your site, but you can overcome that limitation by publishing your app in the Chrome Web Store and using background pages.</p>
<h3>Other Resources</h3>
<p>Be sure to check out the <a href="http://www.html5rocks.com/tutorials/notifications/quick/">notification tutorial</a> on <a href="http://html5rocks.com">HTML5Rocks</a>, it covers some additional things like the events that notifications fire and using HTML notifications.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/Occ_o7EA6xI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/05/tweeterfall-notifications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/05/tweeterfall-notifications/</feedburner:origLink></item>
		<item>
		<title>Building TweeterFall</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/Ash4hPFSiOQ/</link>
		<comments>http://petelepage.com/blog/2011/05/building-tweeterfall/#comments</comments>
		<pubDate>Thu, 19 May 2011 16:13:33 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[HTML5 For Web Designers]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2536</guid>
		<description><![CDATA[I want to devote some time to how Ernest and I built TweeterFall, the demo that we used for our I/O Boot Camp presentation last week.  Instead of showing isolated demos of some of the new HTML5 features, we wanted to show how you might use some of these things in real world scenarios, and thus we  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/05/TweeterFall.png"><img class="alignleft size-medium wp-image-2545" title="TweeterFall" src="http://petelepage.com/blog/wp-content/uploads/2011/05/TweeterFall-300x181.png" alt="" width="300" height="181" /></a>I want to devote some time to how <a href="http://twitter.com/edr">Ernest</a> and I built <a href="http://bit.ly/TweeterFall">TweeterFall</a>, the demo that we used for our <a href="http://www.io-bootcamp.com/">I/O Boot Camp</a> presentation last week.  Instead of showing isolated demos of some of the new HTML5 features, we wanted to show how you might use some of these things in real world scenarios, and thus we built TweeterFall.  TweeterFall is a Twitter visualizer that grabs the tweets from a list and shows them in a kind of waterfall like visualization.</p>
<p>What did we use to build TweeterFall?</p>
<h3>HTML5 Semantics</h3>
<p>We used the new HTML5 semantic elements as our primary markup elements.  The bar across the top is a &lt;header&gt;, the area on the left where the tweets fall is a &lt;section&gt;, the list of Tweets on the right and the configuration panel are both &lt;aside&gt;&#8217;s, and the individual tweets are &lt;article&gt;s.</p>
<h3>GeoLocation</h3>
<p>Since we figured that most people would be in SF, it&#8217;d be fun to use some kind of geo location to show how close the person was to your current position when they made their Tweet.  To do that, we pull the users current location using navigator.geolocation.watchPosition and compare that to the geo data in the tweet.  We used the <a href="http://www.html5rocks.com/tutorials/geolocation/trip_meter/">GeoLocation tutorial</a> from <a href="http://html5rocks.com">HTML5Rocks.com</a> as our inspiration for this.</p>
<h3>IndexedDB</h3>
<p>Twitter only allows you to pull about 20 tweets at a time, so if you want to see anything before that, you either need to log in (and we didn&#8217;t really want to deal with OAuth for this presentation) or store the previous tweets locally.  IndexedDB was the perfect solution for this, as it allows you to store significant quantities of structured data.  Figuring out IndexedDB was probably my biggest challenge for this project, mostly because it&#8217;s pretty new and there isn&#8217;t a lot of documentation on it yet.  That and the fact that everything you do is asynchronous, so you need lots of fun callbacks!  Look for a whole post on this one shortly.</p>
<h3>LocalStorage</h3>
<p>IndexedDB works great for structured data, but we also wanted a place to store simple configuration data, so we used web storage for that.  I wanted to have my configuration data in an object so I could easily access things, so I used JSON to parse and stringify my config object as it went into and came out of local storage.</p>
<h3>Notifications</h3>
<p>We used simple notifications to alert users when there were new tweets, and also included a special handler so that they would disappear after a couple of seconds and not remain on screen for too long.  One of the updates I want to make here is to use HTML notifications, so that we can make things look a little more like the rest of the UI.</p>
<h3>Speech Input</h3>
<p>Okay, so this one was a bit gratuitous. <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   If you add x-webkit-speech to text inputs, Chrome will add a microphone icon to the text box.  When the user clicks on the icon, Chrome turns on the microphone, listens for input and then converts what you said into text!  No JavaScript, just all magic!</p>
<h3>Web Workers</h3>
<p>Web Workers are great for handing off complex or intensive processes off to another thread so they don&#8217;t block the rest of the browser. In our case, we wanted to isolate the requests we were making to Twitter into their own place and allow them to &#8220;push&#8221; notifications to us.  One thing to remember with Web Workers, is that they run off in their own separate thread, and don&#8217;t have access to the DOM or most other window objects (which means jQuery won&#8217;t work either).</p>
<h3>Canvas</h3>
<p>This was a bit gratuitous too, we&#8217;ve got a fun update in mind for this that is equally gratuitous, but much prettier.</p>
<h3>2D Transforms</h3>
<p>When you mouse over the list of Tweets on the right, they get bigger to make them easier to read.  To do this, we use the :hover pseudo selector and apply a scale transform to make it bigger, and then a translation to ensure it appears in the right place.  If we didn&#8217;t do the translation, part of the tweet would get cut off on the right side.</p>
<h3>CSS Animations</h3>
<p>When I first created the TweeterFall visualization, I was using CSS transitions and transforms to animate the tweet as it fell down, but then realized that the better way to do it would be CSS Animations and transforms.</p>
<h3>Web Fonts</h3>
<p>We used Web Fonts to spice up the look of the page somewhat, there are lots of great fonts available.  Typically I&#8217;ll either grab fonts from <a href="http://www.fontsquirrel.com/">Font Squirrel</a> or <a href="http://www.google.com/webfonts">Google&#8217;s Web Fonts</a>.  As Ernest presented the section on web fonts, he said something to the effect of developers have had only 8 fonts they can count on across multiple platforms/browsers, and because Comic Sans doesn&#8217;t really count, they only really had 7.</p>
<h3>Chrome Developer Tools</h3>
<p>So we didn&#8217;t really use this in the app, but let me say this, the JavaScript console was the biggest life saver as we were debugging and trying to understand everything that was going on.  Not only did we use a few console.log&#8217;s, we also were able to execute code and do all kinds of other great things.  In fact, Paul Irish blogged about the I/O session he did with Pavel Feldman, and linked to the video - definitely worth checking out!</p>
<p>Up next, a dive into each of these!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/Ash4hPFSiOQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/05/building-tweeterfall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/05/building-tweeterfall/</feedburner:origLink></item>
		<item>
		<title>I/O Boot Camp – Getting Started With HTML5</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/ye_TAz_4IdE/</link>
		<comments>http://petelepage.com/blog/2011/05/io-boot-camp-getting-started-with-html5/#comments</comments>
		<pubDate>Wed, 18 May 2011 17:12:39 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2538</guid>
		<description><![CDATA[
Last week at I/O Boot Camp, Ernest Delgado and I presented a session titled Getting Started with HTML5.
Rather than take folks through the laundry list cool new stuff that&#8217;s part of HTML5, we took them through a smaller subset of features, showing how we used them in a real world application &#8211;  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/05/bootcamp_logo.png"><img class="alignleft size-medium wp-image-2541" title="bootcamp_logo" src="http://petelepage.com/blog/wp-content/uploads/2011/05/bootcamp_logo-300x87.png" alt="" width="300" height="87" /></a></p>
<p>Last week at <a href="http://www.io-bootcamp.com/">I/O Boot Camp</a>, <a href="http://twitter.com/edr">Ernest Delgado</a> and I presented a session titled Getting Started with HTML5.</p>
<p>Rather than take folks through the laundry list cool new stuff that&#8217;s part of HTML5, we took them through a smaller subset of features, showing how we used them in a real world application &#8211; <a href="http://bit.ly/TweeterFall">TweeterFall</a>.</p>
<p><iframe width="560" height="349" src="http://www.youtube.com/embed/yd30Nmb3mPU" frameborder="0" allowfullscreen></iframe></p>
<p>You can watch the <a href="http://bit.ly/jg95xi">video</a>, check out the <a href="http://bit.ly/bootcamp-html5intro">slides</a> and try <a href="http://bit.ly/TweeterFall">TweeterFall</a>.  When trying the slides, be sure to try them in Chrome dev, Canary or Safari to get the full 3D effects!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/ye_TAz_4IdE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/05/io-boot-camp-getting-started-with-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/05/io-boot-camp-getting-started-with-html5/</feedburner:origLink></item>
		<item>
		<title>1970′s Retro Pong</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/qYJ1Vhf-v4I/</link>
		<comments>http://petelepage.com/blog/2011/04/1970s-retro-pong/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 16:30:12 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[HTML5 Games]]></category>
		<category><![CDATA[Pong]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2525</guid>
		<description><![CDATA[I started writing my first article for HTML5Rocks.com the other day, and as I started working on it, I wanted to do something fun with it, something that folks could play with and enjoy, but still learn something.  I found a really simple Pong implementation and decided that I&#8217;d re-write it in SVG,  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/04/pong.png"><img class="alignleft size-medium wp-image-2526" title="Pong" src="http://petelepage.com/blog/wp-content/uploads/2011/04/pong-300x225.png" alt="screen shot of pong" width="300" height="225" /></a>I started writing my first article for <a href="http://html5rocks.com">HTML5Rocks.com</a> the other day, and as I started working on it, I wanted to do something fun with it, something that folks could play with and enjoy, but still learn something.  I found a really simple <a href="http://en.wikipedia.org/wiki/Pong">Pong</a> implementation and decided that I&#8217;d re-write it in SVG, use the HTML5 audio tag and a few other little things for some extra fun.  The article isn&#8217;t done yet, but I at least wanted to put the game up!</p>
<h2><a href="http://petelepage.com/scratch/pong/">Play Pong</a></h2>
<p>The little &#8220;boink&#8221; noise is me.  But it actually presented an interesting challenge, you&#8217;ll probably notice that the boink doesn&#8217;t happen every time the ball hits the wall.  When the ball hits a wall twice, in quick succession, the browser is still playing the first boink, and doesn&#8217;t start a second boink [sad trombone noise].  While it&#8217;s still in early draft, this is a really great example of something the <a href="http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html">Web Audio API</a> will be really useful for &#8211; playing sounds in quick succession.</p>
<p>Thanks to <a href="http://twitter.com/cwilso">Chris Wilson</a> for suggesting a painfully obvious optimization &#8211; I had two loops running in the game world, one for the paddle and one for the ball moving.  Chris suggested one loop and tracking which key is pressed and moving both the paddle and the ball at the same time.</p>
<p>I&#8217;ve tested the game in Chrome 10, Firefox 4, Opera 11, Safari 5 and Internet Explorer 9 and it worked well in all of them.</p>
<p>The one thing I didn&#8217;t include was a scoring system, and I didn&#8217;t really see any interesting ones on the &#8216;net anywhere.  I think the next update I&#8217;ll include one that is timer based, but if anyone has any better suggestions, I&#8217;m open!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/qYJ1Vhf-v4I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/04/1970s-retro-pong/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/04/1970s-retro-pong/</feedburner:origLink></item>
		<item>
		<title>I’ve seen the future.  It’s in my browser.</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/88unennVL6s/</link>
		<comments>http://petelepage.com/blog/2011/04/ive-seen-the-future-its-in-my-browser/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 13:45:23 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2520</guid>
		<description><![CDATA[Five weeks ago, I packed up my office and made a quick tweet and then drove across 520, no longer a Microsoft employee.&#160; Microsoft was an awesome experience, and I’m super-proud to have been able to work with the great people that I did, and some really great products.&#160; But, after almost ten years  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2011/03/HTML5_Logo_512.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="HTML5_Logo_512" border="0" alt="HTML5_Logo_512" align="left" src="http://petelepage.com/blog/wp-content/uploads/2011/03/HTML5_Logo_512_thumb.png" width="200" height="200" /></a>Five weeks ago, I packed up my office and made <a href="http://twitter.com/#!/petele/status/41288481976098816">a quick tweet</a> and then drove across 520, no longer a Microsoft employee.&#160; Microsoft was an awesome experience, and I’m super-proud to have been able to work with the great people that I did, and some really great products.&#160; But, after almost ten years (May 17th would have been my 10 year anniversary), I decided it was time to turn my life upside-down and try something completely different.&#160; </p>
<p>Within a week, the movers showed up to pack my condo and help me move south to San Francisco.&#160; A new challenge was awaiting me there, and something I’m really passionate and excited about.&#160; Today will mark the end of week three at Google as a Developer Advocate on the Chrome Web Store team.&#160; </p>
<p>There are a lot of aspects of the role that drew me to it and have excited to go into work every morning &#8211; for example, I get to write code again! I’m an engineer at heart, and would much rather write JavaScript than a value proposition.&#160; Heck, I’d rather write low level assembly than write another value propositions again!&#160; I get to participate in community events, conferences, hack-a-thons and meet ups (PS &#8211; if you’re looking for a speaker for an event, let me know)!&#160; But most importantly, I get to work directly with the web developer community to build awesome new web applications using open web technologies like HTML5 and CSS3.</p>
<p>I’ve been really amazed with the <a href="http://twitter.com/#!/petele/chromedevrel-11">Chrome Developer Relations team</a> &#8211; they’re absolutely brilliant and I’ll learn a lot from them (hopefully they’ll learn stuff once I get over the information overload of the new guy on the team).&#160;&#160; If you haven’t already, check out <a href="http://html5rocks.com/">http://html5rocks.com</a>, I sit within about a dozen feet of the guys who built it – not the agency, but the real people who did the work and keep the site up to date, adding new and fresh content all the time.&#160; The site is a great jumping off place for all things HTML5, and includes an overview of what’s in HTML5 (through the <a href="http://slides.html5rocks.com">slides</a>), as well as all kinds of cool tutorials, and a code playground.&#160; I’ve started writing my first tutorial on device orientation and hope to have it up shortly! </p>
<p><a href="https://chrome.google.com/webstore"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="cws" border="0" alt="cws" align="right" src="http://petelepage.com/blog/wp-content/uploads/2011/03/cws.png" width="103" height="127" /></a>I admit that when I started I didn’t really know or understand the purpose of the <a href="https://chrome.google.com/webstore">Chrome Web Store</a>, but as I talked to the team, and learned more about what we are trying to accomplish, I realized that it’s just another mechanism for web developers to use to get their web applications out there and used by people like my Mom.&#160; It’s not about a pay wall, or browser war, but it’s about making great web experiences easier to find, giving developers a great distribution model, and putting your web applications in front of more than 120 million Chrome users world wide.</p>
<p>If you want to put your web application into the Chrome Web Store, there’s a great tutorial at <a href="http://code.google.com/chrome/webstore/docs/get_started_simple.html">http://code.google.com/chrome/webstore/docs/get_started_simple.html</a> that will walk you through everything you need to do.&#160; Basically, you create an application manifest file (a single JSON file), package a couple of icons in there, zip it up, and upload it to the Chrome Web Store.&#160; If you’ve already got a cool web app and want to get it in front of more people, this is another great opportunity!</p>
<p>If you haven’t started playing with HTML5 yet, it’s definitely time to start &#8211; there are a bunch of great tutorials on HTML5Rocks at <a href="http://www.html5rocks.com/tutorials/">http://www.html5rocks.com/tutorials/</a>.&#160; And also check out Paul Irish’s <a href="http://html5boilerplate.com/">HTML5 Boiler Plate</a>, I’ve used it quite a bit on a couple of projects so far, and it’s super helpful.&#160; And if you’re looking for inspiration &#8211; and want to see what’s possible with HTML5, check out <a href="http://makeawesomeweb.com/">http://makeawesomeweb.com/</a></p>
<p>PEte</p>
<p>PS &#8211; the Google campus, aaaa-mazing!&#160; But I’ll save that for another post later!</p>
<p>PPS &#8211; Happy April Fools Day, I don’t know what the joke will be today, but I’m excited to find out!!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/88unennVL6s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2011/04/ive-seen-the-future-its-in-my-browser/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2011/04/ive-seen-the-future-its-in-my-browser/</feedburner:origLink></item>
		<item>
		<title>New Internet Explorer Testing VHDs Are Available</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/QsnPGMPmuPM/</link>
		<comments>http://petelepage.com/blog/2010/10/new-internet-explorer-testing-vhds-are-available/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 15:07:21 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[VPC]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/10/new-internet-explorer-testing-vhds-are-available/</guid>
		<description><![CDATA[After a little delay, the Internet Explorer App Compat Testing VHDs are now available for download on the Microsoft Download Center.&#160; Like the previous set of images, these ones are time-bombed for 90 days and will expire on January 11th, 2011.&#160; 
Live we’ve done in the past, there are five  [...]]]></description>
				<content:encoded><![CDATA[<p>After a little delay, the <a href="http://go.microsoft.com/fwlink?LinkID=70868">Internet Explorer App Compat Testing VHDs</a> are now available for download on the Microsoft Download Center.&#160; Like the previous set of images, these ones are time-bombed for 90 days and will expire on January 11th, 2011.&#160; </p>
<p>Live we’ve done in the past, there are five different images that we’ve made available…</p>
<ul>
<li>Internet Explorer 6 on Windows XP SP3</li>
<li>Internet Explorer 7 on Windows XP SP3</li>
<li>Internet Explorer 8 on Windows XP SP3</li>
<li>Internet Explorer 7 on Windows Vista SP1</li>
<li>Internet Explorer 8 on Windows Vista SP1</li>
</ul>
<p>These images are a bit different then the previous ones we last released in June, the default user account is an admin on the machine, and you have to use a password to log on to the VHD.&#160; The password and other important information is in the readme.txt file – so be sure to check that out.</p>
<p>As you test your sites, remember that with Internet Explorer 8 and Internet Explorer 9, you can switch the rendering mode with the F12 Developer Tools and get an almost perfect replication of IE9, IE8 or even IE7.&#160; That way, you can save using the VHDs for when there may be an issue with something like Protected Mode, or you need to test IE6.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/QsnPGMPmuPM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/10/new-internet-explorer-testing-vhds-are-available/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/10/new-internet-explorer-testing-vhds-are-available/</feedburner:origLink></item>
		<item>
		<title>Book Review: Introducing HTML5</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/6Hwl7CSCvEg/</link>
		<comments>http://petelepage.com/blog/2010/10/book-review-introducing-html5/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 17:25:44 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Introducing HTML5]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/10/book-review-introducing-html5/</guid>
		<description><![CDATA[
Introducing HTML5 by Bruce Lawson and Remy Sharp       Published By: New Riders       Available From: Amazon or Your Local Book Store       ISBN: 978-0-321-68729-6

It’s taken me a little longer than it should have to write the review of this book, and I’ll blame the fact that, oh I don’t know, we  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/10/introinghtml5.jpg"><img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="introinghtml5" border="0" alt="introinghtml5" align="right" src="http://petelepage.com/blog/wp-content/uploads/2010/10/introinghtml5_thumb.jpg" width="240" height="240" /></a></p>
<blockquote><p>Introducing HTML5 by <a href="http://twitter.com/brucel">Bruce Lawson</a> and <a href="http://twitter.com/rem">Remy Sharp</a>       <br />Published By: <a href="http://www.newriders.com">New Riders</a>       <br />Available From: <a href="http://www.amazon.com/gp/product/0321687299?ie=UTF8&amp;tag=petecom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321687299">Amazon</a> or Your Local Book Store       <br />ISBN: 978-0-321-68729-6</p>
</blockquote>
<p>It’s taken me a little longer than it should have to write the review of this book, and I’ll blame the fact that, oh I don’t know, we had a beta to get out the door, but now that that’s done – I’ve got a few minutes in my day again.&#160; And I did promise Bruce that I’d write a review of the book, so here it is.</p>
<p><strong>The short review</strong> – lots of great content, and even more puns and bad jokes!</p>
<p><strong>The long review…</strong></p>
<div style="border-bottom: #ddd 1px dotted; border-left: #ddd 1px dotted; padding-bottom: 5px; padding-left: 5px; width: 75%; padding-right: 5px; border-top: #ddd 1px dotted; border-right: #ddd 1px dotted; padding-top: 5px">
<p><strong>Topics Covered</strong></p>
<ul>
<li>Their definition of HTML5 and it’s history </li>
<li>The new structural elements of HTML5 </li>
<li>How the new structural can be used when creating pages </li>
<li>The new HTML5 form elements </li>
<li>Audio, Video, Codecs and Backwards Compatibility </li>
<li>Canvas, from basic stuff all the way to playing with video </li>
<li>Data Storage methods </li>
<li>Off-Line Applications </li>
<li>Drag and Drop </li>
<li>GeoLocation </li>
<li>Messages, Web Workers and Web Sockets </li>
</ul></div>
<p>One of the most important things that HTML5 books can do these days is be up-front about how they’re defining HTML5 – what’s in and what’s not, because it can be somewhat confusing unless you’re really plugged in.&#160; Bruce and Remy do this within the first few pages of their book, and while I don’t agree with their definition of HTML5, I see where they’re coming from.&#160; In their book, the specs that they’re talking about are “HTML5 and the related specifications that came from the WHATWG.”&#160; I tend to think about HTML5 as the specifications that come out of the W3C, and while the specs are very close, there are some things that the W3C hasn’t looked at or even talked about at this point.&#160; The upside of having a book from the WHATWG perspective though is that you can see and hear things from a different perspective.</p>
<p>One of the things that impressed me the most about the book was the neutrality that the authors took – when something wasn’t implemented in one of the browsers, they didn’t call them out or make any of the oft easy jokes that can be made about certain legacy browsers.&#160; Instead of saying “browser X doesn’t do Y”, they provided some really good work-arounds and even tips for helping bring legacy browsers up to snuff!&#160; For example, in IE8 and below, if you specify a CSS style on an element that the browser doesn’t know about, it won’t style that element.&#160; Bruce provides a great tip and some best practices for enabling the new elements in IE8 and below.</p>
<p>The book is filled with lots of good examples, some of which you’d probably show your Mom, and a few that you wouldn’t show your Mom.&#160; In fact, I strongly encourage you to read the content of the samples, in addition to looking at them for what they’re trying to show.&#160; </p>
<p>For example</p>
<blockquote><p>The &lt;i&gt; element “represents a span of text in an alternate voice or mood, or otherwise offset from the normal prose, such as a taxonomic designation, a technical term, an idiomatic phrase from another language, a thought, a ship name, or some other prose whose typical typographic presentation is italicized.”</p>
</blockquote>
<p>And the examples they use:</p>
<blockquote><p>&lt;p&gt;The design needs a bit more &lt;i lang=fr&gt;ooh la la&lt;/i&gt;.&lt;/p&gt;      <br />&lt;p&gt;You, sir, deserve a jolly good kick up the &lt;i&gt;gluteus maximus&lt;/i&gt;!&lt;/p&gt;</p>
</blockquote>
<p>As I mentioned earlier, there are a few things they talk about that aren’t in the HTML5 spec and a few that aren’t really widely implemented, like Web SQL Databases, GeoLocation, Web Workers and Web Sockets.&#160; I wish they had been a bit more clear here that these things are still pretty cutting edge and likely to change.&#160; For example Web SQL gets about 1/2 a chapter, but it feels to me like it’s likely to die a slow painful death to be replaced by the Indexed Database API.&#160; Sure it’ll work now, and if you’re building prototypes or using libraries to abstract that kind of stuff – no big deal, but if you’re trying plan a long term strategy around this, it’s not super clear what the status of it is.</p>
<p>Still reading?&#160; Glad to hear! <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I think my favorite chapter of the book was the canvas section.&#160; Canvas is one of those things that I think we’ve only really seen a scratch on the surface of what it’s capable of.&#160; While in theory it seems pretty simple (it reminds me a lot of logo), when you start to see the cool stuff folks do with it, you realize it’s much more complex than it appears on the surface.&#160; Remy does a really good job of laying out not only the basics, but also taking us a step further into some of the more fun, neat and complex things – like using video in canvas and the cool things that you can do with your videos when put inside canvas.</p>
<p>I’m really glad I got the book – it was worth my time to read it, and it’s not a complex or long read, though it’s certainly longer and goes into more depth than <a href="http://petelepage.com/blog/2010/07/book-review-html5-for-web-designers/">HTML5 For Web Designers</a> does.&#160; In fact, I’d suggest that book is great for PHB’s and folks who might write some HTML5 markup, but more than likely just want to be educated on the subject.&#160; This is a book that does a good job for those of us who want to know what’s going on, and how we can start playing with it today.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/6Hwl7CSCvEg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/10/book-review-introducing-html5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/10/book-review-introducing-html5/</feedburner:origLink></item>
		<item>
		<title>Internet Explorer App Compat VPC Update</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/nRzI-KXjWIc/</link>
		<comments>http://petelepage.com/blog/2010/10/internet-explorer-app-compat-vpc-update/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 17:02:04 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[Multiple Browsers]]></category>
		<category><![CDATA[VPC]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/10/internet-explorer-app-compat-vpc-update/</guid>
		<description><![CDATA[A bunch of folks have asked about the status of the Internet Explorer App Compat VHDs (VPCs) as the current set have expired and we haven’t published new ones yet.&#160; First off, I want to let folks know that we are still committed to them and we haven’t abandoned them!&#160; We’ve just run into a few  [...]]]></description>
				<content:encoded><![CDATA[<p>A bunch of folks have asked about the status of the <a href="http://go.microsoft.com/fwlink?LinkID=70868">Internet Explorer App Compat VHDs</a> (VPCs) as the current set have expired and we haven’t published new ones yet.&#160; First off, I want to let folks know that we are still committed to them and we haven’t abandoned them!&#160; We’ve just run into a few hiccups that weren’t quite what I expected this time around.&#160; </p>
<p>At the beginning of this fiscal year, we changed the process that we use to create the VHDs.&#160; First, we brought the work in house and are building them internally instead of using a vendor to do it.&#160; Second, we found out a little too late that the old system we used for time-bombing had been retired and spent some time working to figure out if there was a replacement program in place or how we could continue to support the Windows XP VHDs.&#160; Thankfully we were able to figure out a new process, but with any new process, there are always some hiccups.&#160; And this time, there were more hiccups than I had expected.&#160; <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://petelepage.com/blog/wp-content/uploads/2010/10/wlEmoticonsadsmile.png" />&#160; </p>
<p>The big change between these images is that this Windows XP SP3 installation is a “trial sku” instead of the “full package product” (FPP).&#160; That means that we don’t have to use the complex time-bombing process any more – though because it’s a trial sku, they do still expire after 90 days.&#160; I haven’t tried these VHDs on other VPC hosts, so I can’t speak to if they’ll run without activation.</p>
<p>I finished the last few steps for creating the VHDs late last night, and am working through the release process now.&#160; One good thing about moving them in house, I managed to get the download size way down again, and they’re running between 494meg and 583meg!&#160; Hopefully the smaller size will be good news for those of you who don’t have super fat interweb pipes.</p>
<p>Hopefully they’ll be up tonight (Pacific time) or sometime early tomorrow.&#160; I’ll either update this post, or post a tweet via Twitter when they’re up!</p>
<p>PS: I’m also working with <a href="http://twitter.com/#!/reybango">@reybango</a> to get a VHD or other system in place so that those of you not running Windows Vista or Windows 7 can try Internet Explorer 9.&#160; Sadly when IE9 runs in a VPC host, you don’t get hardware acceleration, but it’s still an opportunity to try or test your site if you’re not running a supported OS. </p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/nRzI-KXjWIc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/10/internet-explorer-app-compat-vpc-update/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/10/internet-explorer-app-compat-vpc-update/</feedburner:origLink></item>
		<item>
		<title>Quick Perf Tip: Always Add A Trailing Slash</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/s-nQKvvZoIo/</link>
		<comments>http://petelepage.com/blog/2010/07/quick-perf-tip-always-add-a-trailing-slash/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 15:44:31 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/07/quick-perf-tip-always-add-a-trailing-slash/</guid>
		<description><![CDATA[Here’s a quick performance tip for your Friday (or Saturday for those of you across the date line) – when linking to a directory, be sure to add the trailing slash to the directory name, otherwise, it causes a redirect from the server, thus adds a bit of time to your page load!
Do
&#60;a  [...]]]></description>
				<content:encoded><![CDATA[<p>Here’s a quick performance tip for your Friday (or Saturday for those of you across the date line) – when linking to a directory, be sure to add the trailing slash to the directory name, otherwise, it causes a redirect from the server, thus adds a bit of time to your page load!</p>
<h2><font color="#00ff00">Do</font></h2>
<p>&lt;a href=”http://petelepage.com/blog<strong>/</strong>”&gt;Pete’s Blog&lt;/a&gt;</p>
<h2><font color="#ff0000">Don’t</font></h2>
<p>&lt;a href=”http://petelepage.com/blog”&gt;Pete’s Blog&lt;/a&gt;</p>
<h2>What’s going on?</h2>
<p>When the browser makes a web request for a page without the slash, it responds with a 301 redirect response, which then causes the browser to make a second request for almost the exact same page, except it asks for it with the trailing slash!&#160; On a client with a slow network connection, that’s going to be really painful!&#160; Even if it’s not a slow connection, it is going to add some extra time to your page load!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/s-nQKvvZoIo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/07/quick-perf-tip-always-add-a-trailing-slash/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/07/quick-perf-tip-always-add-a-trailing-slash/</feedburner:origLink></item>
		<item>
		<title>Tips &amp; Tricks: Cheat Sheets For Web People</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/sFfMJIQzl10/</link>
		<comments>http://petelepage.com/blog/2010/07/tips-tricks-cheat-sheets-for-web-people/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 03:25:50 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[Cheat Sheet]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Reference]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/07/tips-tricks-cheat-sheets-for-web-people/</guid>
		<description><![CDATA[I have a set of blogs that I read every day, some are really technical, and I learn lots, and others are more inspirational, they show me the cool stuff that we as web designers and web developers can build.&#160; 
I’ll admit that one of the blogs I read has the educational value of something you’d pick  [...]]]></description>
				<content:encoded><![CDATA[<p>I have a set of blogs that I read every day, some are really technical, and I learn lots, and others are more inspirational, they show me the cool stuff that we as web designers and web developers can build.&#160; </p>
<p>I’ll admit that one of the blogs I read has the educational value of something you’d pick up at a grocery store check out, the pictures are really pretty, and it’s good inspiration, but I’d never actually walk out of the store with it.&#160; Well today, they posted an article that changed my mind.&#160; Almost!&#160; One of today’s posts was a collection of cheat sheets for web designers and developers, and I wanted to share my favorites.</p>
<h2>HTML4 and HTML5 Cheat Sheets</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/woork_html5.jpg"><img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="woork_html5" border="0" alt="woork_html5" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/07/woork_html5_thumb.jpg" width="240" height="180" /></a><a href="http://woorkup.com/2009/12/16/html5-visual-cheat-sheet-reloaded/"><strong>HTML5 Visual Cheat Sheet</strong></a><strong> from </strong><a title="http://woorkup.com/" href="http://woorkup.com/"><strong>http://woorkup.com/</strong></a></p>
<p>I think came in as my favorite and prettiest cheat sheet.&#160; It prints on an 11&#215;17 piece of paper, and is a great reference for all of the HTML4 and HTML5 tags that you’ll ever need to reference.&#160; It nicely includes the attributes that you can set, what version of the HTML spec they’re from and lots more useful information.</p>
<p style="clear: both"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/veignhtml5.png"><img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="veignhtml5" border="0" alt="veignhtml5" align="right" src="http://petelepage.com/blog/wp-content/uploads/2010/07/veignhtml5_thumb.png" width="240" height="180" /></a><a href="http://veign.com/reference/html5-guide.php"><strong>HTML5 Reference Guide</strong></a><strong> from </strong><a title="http://veign.com/" href="http://veign.com/"><strong>http://veign.com/</strong></a><strong>&#160;</strong></p>
<p>The Veign folks go into a lot more detail on their cheat sheet, or more accurately, cheat sheets because this guy is 4 pages long.&#160; One of the things I like about this one was that it goes in to much further depth about the attributes, supported HTML versions (indicating elements that aren’t supported in HTML5 with a highlight), and a very brief description of the element.</p>
<p style="clear: both"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/charcheat.png"><img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="charcheat" border="0" alt="charcheat" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/07/charcheat_thumb.png" width="240" height="180" /></a><a href="http://www.addedbytes.com/cheat-sheets/html-character-entities-cheat-sheet/"><strong>HTML Character Entity Reference</strong></a><strong> from </strong><a title="http://addedbytes.com/" href="http://addedbytes.com/"><strong>http://addedbytes.com/</strong></a><strong>&#160; </strong></p>
<p>I’ve often found myself forgetting what the special character sequence is to get a particular character to show up, or I’ll be looking for a character to use in my breadcrumb navigation – this cheat sheet solves that and lists all of the characters and their sequence to get exactly what you want!</p>
<p style="clear: both"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/canvascheat.png"><img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="canvascheat" border="0" alt="canvascheat" align="right" src="http://petelepage.com/blog/wp-content/uploads/2010/07/canvascheat_thumb.png" width="240" height="180" /></a><a href="http://blog.nihilogic.dk/2009/02/html5-canvas-cheat-sheet.html"><strong>Canvas Cheat Sheet</strong></a><strong> from </strong><a title="http://blog.nihilogic.dk" href="http://blog.nihilogic.dk"><strong>http://blog.nihilogic.dk</strong></a></p>
<p>Canvas is one of those things that’s super new to a lot of folks, so having a handy cheat sheet is really useful!&#160; It’s not going to be super-useful for beginners since it’s basically just the API reference, but once you have a pretty good handle on Canvas, this will be a great desk reference until it gets cemented in your brain. </p>
<h2 style="clear: both">CSS2 and CSS3 Cheat Sheets</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/css2veign.png"><img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="css2veign" border="0" alt="css2veign" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/07/css2veign_thumb.png" width="240" height="180" /></a><a href="http://veign.com/reference/css2-guide.php"><strong>CSS2 Reference</strong></a><strong> from </strong><a href="http://veign.com"><strong>http://veign.com</strong></a><strong> </strong></p>
<p>Those folks over at Veign are pretty good at putting together a reference sheet, maybe not as pretty as some of the other ones, but just as functional and makes my life easier, so I’m not complaining!&#160; Their CSS2 reference is great and provides all the detail you’ll need if you need to look something up quickly!</p>
<p style="clear: both"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/css3veign.png"><img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="css3veign" border="0" alt="css3veign" align="right" src="http://petelepage.com/blog/wp-content/uploads/2010/07/css3veign_thumb.png" width="240" height="180" /></a><a href="http://veign.com/reference/css3-guide.php"><strong>CSS3 Reference</strong></a><strong> from </strong><a href="http://veign.com"><strong>http://veign.com</strong></a></p>
<p>The CSS3 reference isn’t quite as awesome as the HTML5 reference, because they don’t tell you what properties are CSS3 vs CSS2, so if you’re having to code for multiple browsers like most folks, you may accidentally add something and then scratch your head as to why it’s not working in an older browser.</p>
<h2 style="clear: both">Other Useful Cheat Sheets</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/jscheat.png"><img style="border-right-width: 0px; margin: 0px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="jscheat" border="0" alt="jscheat" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/07/jscheat_thumb.png" width="240" height="180" /></a><a href="http://www.addedbytes.com/cheat-sheets/javascript-cheat-sheet/"><strong>JavaScript Cheat Sheet</strong></a><strong> from </strong><a href="http://addedbytes.com"><strong>http://addedbytes.com</strong></a><strong> </strong></p>
<p>For whatever reason, JavaScript and I don’t get along, I think it’s because I like strongly typed languages that tell me if I’ve done something wrong before it gets there.&#160; If you’re building websites and not using a tool that doesn’t have intellisense, then having a cheat sheet like this would be super valuable.&#160; All the APIs you’ll need, right at your fingertips!</p>
<p style="clear: both"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/seocheat.png"><img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="seocheat" border="0" alt="seocheat" align="right" src="http://petelepage.com/blog/wp-content/uploads/2010/07/seocheat_thumb.png" width="240" height="180" /></a><a href="http://www.seomoz.org/blog/the-web-developers-seo-cheat-sheet"><strong>SEO Cheat Sheet</strong></a><strong> from </strong><a href="http://www.seomoz.org"><strong>http://www.seomoz.org</strong></a></p>
<p>A week or so ago, I posted my tips and tricks for ensuring your site was best optimized to make it into search engines efficiently.&#160; Here’s another great easy to follow cheat sheet that will help you make the best of the time and resources that you have on getting your site optimized.&#160; It’s a great resource to look over and share with co-workers or friends when they ask why you’re doing something!</p>
<h2 style="clear: both">Summary</h2>
<p>There you go, those are the quick reference guides that are now printed and sitting on my bulletin board beside my desk at work!&#160; Hopefully you’ll find a good nugget or two in there as well!&#160; If you’ve got other good references or cheat sheets, be sure to share them with me!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/sFfMJIQzl10" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/07/tips-tricks-cheat-sheets-for-web-people/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/07/tips-tricks-cheat-sheets-for-web-people/</feedburner:origLink></item>
		<item>
		<title>How To: HSL and HSLA Color Models</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/bdP29aGN5_4/</link>
		<comments>http://petelepage.com/blog/2010/07/how-to-hsl-and-hsla-color-models/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 16:50:02 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[HSL]]></category>
		<category><![CDATA[HSLA]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[IE9]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2397</guid>
		<description><![CDATA[HSLA is defined in the CSS3 Color Module, and is another way that designers and developers can specify the color of something via CSS.  I grew up understanding color defined by light, varying the amounts of red, green and blue result in different colors – yellow and blue make green, or if you’re in  [...]]]></description>
				<content:encoded><![CDATA[<p>HSLA is defined in the CSS3 Color Module, and is another way that designers and developers can specify the color of something via CSS.  I grew up understanding color defined by light, varying the amounts of red, green and blue result in different colors – yellow and blue make green, or if you’re in the USA, yellow and blue mean your ziploc bag is sealed. <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://petelepage.com/blog/wp-content/uploads/2010/07/wlEmoticonsmile.png" alt="Smile" /></p>
<p>It took me a little while to wrap my head around the HSL color model because it’s quite different from the RGB model.  Instead of adding different amounts of each of those, the color is defined by three properties:</p>
<ol>
<li><strong>Hue </strong><em>[0 to 360]</em> – defines the color according to a position or degree on the color wheel.  The color wheel is split into effectively three areas, with 0° being pure red, 120° being pure green and 240° being pure blue.  Therefore, if you wanted purple, it’d be halfway between red (0 or 360) and blue (240), or 300°<br />
<a href="http://petelepage.com/blog/wp-content/uploads/2010/07/Wheel.png"><img class="wlDisabledImage" style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="Wheel" src="http://petelepage.com/blog/wp-content/uploads/2010/07/Wheel_thumb.png" border="0" alt="Wheel" width="240" height="240" /></a></li>
<li><strong>Saturation</strong> <em>[0-100%]</em> – defines the intensity of the color, zero, there is no instensity to the color and it shows as gray, and as the number gets bigger, the more intense the color.</li>
<li><strong>Lightness</strong> <em>[0-100%]</em> – defines how bright, or dark the color is.  50% is the true color, the larger the number, the closer you get to white, and the smaller the number, the closer you get to black.</li>
<li><strong>Alpha</strong> <em>[0-1]</em> – is the alpha transparency, and tells the browser how transparent or opaque the color should be.  The closer to 1, the more opaque, and the closer to 0, the more transparent.</li>
</ol>
<h2>Let’s See It In Action!</h2>
<p>In the samples below, if your browser supports HSLA, you&#8217;ll see two color swatches, the first which sets the table cell background color via the HSLA property, and the second, an image of the same.  If your browser doesn&#8217;t support HSLA, you&#8217;ll only see the image.  Each color box is represented by the code sample below, in order from left to right.</p>
<table style="width:100%;border:1px solid #cccccc;">
<tr>
<td colspan="3"><strong>Hue</strong></td>
</tr>
<tr>
<td style="background-color: hsla(0, 100%, 50%, 1.0);"></td>
<td style="background-color: hsla(120, 100%, 50%, 1.0);"></td>
<td style="background-color: hsla(240, 100%, 50%, 1.0);"></td>
</tr>
<tr>
<td colspan="3"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/hue.png"><img src="http://petelepage.com/blog/wp-content/uploads/2010/07/hue.png" alt="" title="Hue" width="550" height="14" class="alignnone size-full wp-image-2435" /></a></td>
</tr>
<tr>
<td colspan="3">
<pre class="brush: css; title: ; notranslate">
background-color: hsla(0, 100%, 50%, 1.0);
background-color: hsla(120, 100%, 50%, 1.0);
background-color: hsla(240, 100%, 50%, 1.0);
</pre>
<p>The value for hue is specified as a number between 0 and 359, but you can go above 359, which just cycles around the circle again.  For example 480 represents green, because 480 &#8211; 360 = 120.
</td>
</tr>
</table>
<table style="width:100%;border:1px solid #cccccc;">
<tr>
<td colspan="5"><strong>Saturation</strong></td>
</tr>
<tr>
<td style="background-color: hsla(300, 0%, 50%, 1.0);"></td>
<td style="background-color: hsla(300, 25%, 50%, 1.0);"></td>
<td style="background-color: hsla(300, 50%, 50%, 1.0);"></td>
<td style="background-color: hsla(300, 75%, 50%, 1.0);"></td>
<td style="background-color: hsla(300, 100%, 50%, 1.0);"></td>
</tr>
<tr>
<td colspan="5"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/saturation.png"><img src="http://petelepage.com/blog/wp-content/uploads/2010/07/saturation.png" alt="" title="Saturation" width="550" height="14" class="alignnone size-full wp-image-2441" /></a></td>
</tr>
<tr>
<td colspan="5">
<pre class="brush: css; title: ; notranslate">
background-color: hsla(300, 0%, 50%, 1.0);
background-color: hsla(300, 25%, 50%, 1.0);
background-color: hsla(300, 50%, 50%, 1.0);
background-color: hsla(300, 75%, 50%, 1.0);
background-color: hsla(300, 100%, 50%, 1.0);
</pre>
<p>The saturation needs to be a percentage between 0% and 100% and defines the intensity of the color. At 0%, with no intensity, we end up with gray.
</td>
</tr>
</table>
<table style="width:100%;border:1px solid #cccccc;">
<tr>
<td colspan="5"><strong>Lightness</strong></td>
</tr>
<tr>
<td style="background-color: hsla(300, 100%, 0%, 1.0);"></td>
<td style="background-color: hsla(300, 100%, 25%, 1.0);"></td>
<td style="background-color: hsla(300, 100%, 50%, 1.0);"></td>
<td style="background-color: hsla(300, 100%, 75%, 1.0);"></td>
<td style="background-color: hsla(300, 100%, 100%, 1.0);"></td>
</tr>
<tr>
<td colspan="5"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/lightness.png"><img src="http://petelepage.com/blog/wp-content/uploads/2010/07/lightness.png" alt="" title="Lightness" width="550" height="14" class="alignnone size-full wp-image-2443" /></a></td>
</tr>
<tr>
<td colspan="5">
<pre class="brush: css; title: ; notranslate">
background-color: hsla(300, 100%, 0%, 1.0);
background-color: hsla(300, 100%, 25%, 1.0);
background-color: hsla(300, 100%, 50%, 1.0);
background-color: hsla(300, 100%, 75%, 1.0);
background-color: hsla(300, 100%, 100%, 1.0);
</pre>
<p>Like the saturation attribute, the lightness attribute is a percentage between 0% and 100%.  Changing the value, allows you to easily create black or white, but you can also get very subtle shades of a color, for example by setting the lightness to 98%, will result in an almost white, with a hint of color in it.
</td>
</tr>
</table>
<table style="width:100%;border:1px solid #cccccc;">
<tr>
<td colspan="5"><strong>Alpha</strong></td>
</tr>
<tr>
<td style="background-color: hsla(300, 100%, 50%, 0.0);"></td>
<td style="background-color: hsla(300, 100%, 50%, 0.25);"></td>
<td style="background-color: hsla(300, 100%, 50%, 0.50);"></td>
<td style="background-color: hsla(300, 100%, 50%, 0.75);"></td>
<td style="background-color: hsla(300, 100%, 50%, 1.0);"></td>
</tr>
<tr>
<td colspan="5"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/alpha.png"><img src="http://petelepage.com/blog/wp-content/uploads/2010/07/alpha.png" alt="" title="Alpha" width="550" height="13" class="alignnone size-full wp-image-2451" /></a></td>
</tr>
<tr>
<td colspan="5">
<pre class="brush: css; title: ; notranslate">
background-color: hsla(300, 100%, 50%, 0.0);
background-color: hsla(300, 100%, 50%, 0.25);
background-color: hsla(300, 100%, 50%, 0.50);
background-color: hsla(300, 100%, 50%, 0.75);
background-color: hsla(300, 100%, 50%, 1.0);
</pre>
<p>Alpha transparency makes the object more or less transparent.  This is very useful if you want to overlay something on top of another object, but still want to be able to see the object underneath.  Like other places where you can specify the alpha transparency, the value is between 0 and 1, where 0 is completely transparent (effectively invisible), and 1 is completely opaque and you cannot see through it at all.
</td>
</tr>
</table>
<table style="width:100%;border:1px solid #cccccc;">
<tr>
<td colspan="5"><strong>Black, Grays and White</strong></td>
</tr>
<tr>
<td style="background-color: hsla(0, 0%, 0%, 1.0);"></td>
<td style="background-color: hsla(0, 0%, 25%, 1.0);"></td>
<td style="background-color: hsla(0, 0%, 50%, 1.0);"></td>
<td style="background-color: hsla(0, 0%, 75%, 1.0);"></td>
<td style="background-color: hsla(0, 0%, 100%, 1.0);"></td>
</tr>
<tr>
<td colspan="5"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/black.png"><img src="http://petelepage.com/blog/wp-content/uploads/2010/07/black.png" alt="" title="Black" width="550" height="16" class="alignnone size-full wp-image-2447" /></a></td>
</tr>
<tr>
<td colspan="5">
<pre class="brush: css; title: ; notranslate">
background-color: hsla(0, 0%, 0%, 1.0);
background-color: hsla(0, 0%, 25%, 1.0);
background-color: hsla(0, 0%, 50%, 1.0);
background-color: hsla(0, 0%, 75%, 1.0); 
background-color: hsla(0, 0%, 100%, 1.0);
</pre>
<p>When defining black, grays and white, the hue doesn&#8217;t matter at all.  The needs to be set at 0, to indicate that there should be no indication of the color showing through.  Then, by changing the lightness you can adjust the shade of black, with 0% being black, and 100% being pure white.
</td>
</tr>
</table>
<h2>Using It Today</h2>
<p>If you want to use the HSLA color model today, but still have to support browsers that don&#8217;t support the HSLA color model, the fact that CSS styles cascade (crazy I know), allow you to do support both models.
</p>
<pre class="brush: css; title: ; notranslate">
div {
 background-color: #ff00ff;
 background-color: hsla(300, 100%, 50%, 1);
}
</pre>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/bdP29aGN5_4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/07/how-to-hsl-and-hsla-color-models/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/07/how-to-hsl-and-hsla-color-models/</feedburner:origLink></item>
		<item>
		<title>Book Review: HTML5 For Web Designers</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/Q4V2B0Fh5fY/</link>
		<comments>http://petelepage.com/blog/2010/07/book-review-html5-for-web-designers/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 15:54:35 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[HTML5 For Web Designers]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2388</guid>
		<description><![CDATA[
HTML5 For Web Designers by Jeremy Keith
Published by: A Book Apart
Available From: A Book Apart
ISBN: 978-0-9844425-0-8
I was super excited yesterday when I walked by my mailbox at work to see a small package in it – having completely forgot that I had ordered my copy of HTML5 For Web Designers by  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://books.alistapart.com/product/html5-for-web-designers"><img class="wlDisabledImage" style="margin: 0px 5px; display: inline; border-width: 0px;" title="buy-html5-for-web-designers" src="http://petelepage.com/blog/wp-content/uploads/2010/07/buyhtml5forwebdesigners.png" border="0" alt="buy-html5-for-web-designers" width="228" height="320" align="right" /></a></p>
<blockquote><p><strong>HTML5 For Web Designers</strong> by <a href="http://adactio.com/" target="_blank">Jeremy Keith</a><br />
Published by: <a href="http://books.alistapart.com/" target="_blank">A Book Apart</a><br />
Available From: <a href="http://books.alistapart.com/product/html5-for-web-designers" target="_blank">A Book Apart</a><br />
ISBN: 978-0-9844425-0-8</p></blockquote>
<p>I was super excited yesterday when I walked by my mailbox at work to see a small package in it – having completely forgot that I had ordered my copy of HTML5 For Web Designers by Jeremy Keith a while ago.  I had heard it was a nice, easy fun read and I wasn’t disappointed.  In fact, about 6pm last night I sat down to read it and had read it in full by about 7pm!</p>
<blockquote><p><strong>Wait! Stop!</strong> Let’s define HTML5 for a minute because it’s turned into a word that means different things to different people.  In Keith’s book, he’s referring to the W3C Specification that defines the next generation of the HTML mark-up language.  He isn’t referring to the buzz word HTML5 that includes CSS3, ECMAScript 5, Web Workers, and all that other stuff that sometimes gets lumped into HTML5.</p></blockquote>
<div style="width: 75%; border: #ddd 1px dotted; padding: 5px;">
<p><strong>Topics Covered</strong></p>
<ul>
<li>The road from XHTML to HTML5</li>
<li>Design principles of HTML5</li>
<li>Syntax: marking it up your way</li>
<li>Web Forms 2.0—sliders and spinners and color pickers, oh, my!</li>
<li>Canvas: drawing with code</li>
<li>Audio and video</li>
<li>Semantics and extensibility: microformats and boiling the ocean</li>
<li>New and changed HTML elements</li>
<li>New structure elements</li>
<li>New content models</li>
<li>ARIA, styling, and validation</li>
<li>Using HTML5 today—tactics and strategy</li>
<li>Shiny new toys: JavaScript APIs</li>
<li>Feature detection</li>
<li>The future of HTML5</li>
</ul>
</div>
<p>I’ve always thought a little history is important to set the stage, and he does that by explaining where HTML5 came from, why XHTML 2.0 didn’t work, the difference between HTML5 and HTML 5 from the WHATWG.  Heck, I’ve been around the web world for over 10 years, and I’ll say I learned quite a bit and feel like I understand some of the challenges of HTML5 more now.  What’s also great is that he explains the design principals of HTML5.  There’s a couple of places where you may ask yourself why the heck they did something, and the principals help to clear it up.</p>
<p>The book did have a few minor let downs for me – the first was one I should have been able to glean from the title, but there is only one mention of the new JavaScript functionality in HTML5, and the mention is basically, that as a designer Keith doesn’t use many APIs, and that the new ones are “over my head.”</p>
<p>Instead of going deep into code, the book does a great job of explaining what the new features of HTML5 are.  There’s a section on Rich Media where he covers Canvas, &lt;audio&gt; and &lt;video&gt;, SVG and so forth.  And there’s some really good nuggets of info in there, for example the concept of boolean attributes.  Boolean attributes mean that no matter their value, the fact that they’re in there triggers the property, for example boolAttr=”true” is exactly the same as boolAttr=”false”!  That may take some getting used to.  He also introduces Web Forms and the new HTML tags that are added along with the semantics that they impose.</p>
<p>My other let down, and again I think this was somewhat intentional is that when referring to browsers, Keith didn’t mention version numbers at all.  In some cases that doesn’t matter, but when he says something like “Internet Explorer doesn’t support HTML5 feature X”, it’s like saying car’s don’t have airbags.  Sure the older ones may not, but the new ones do.  There’s a ton of HTML5 support in Internet Explorer 9, but that doesn’t come across in the book at all.  I know the book was started before we shipped the first of the Platform Previews, but the editing certainly wasn’t.</p>
<p>Keith closes the book trying to answer one of the most commonly asked questions that I think people have today, when can I use it?!  And if I can use it today, how?  Keith answers that question and gives a few best practices for being successful with HTML5 today.  I’ll give you a hint, one of them includes feature detection instead of browser detection!</p>
<p>If you want to understand what HTML5 is, whether you’re a designer or developer, this is a great book for you!  It makes the 1100+ page spec look like something a first grader could read and understand – when in fact it’s the complete opposite!  It’ll be GREAT to share with your coworkers and friends.  Whether you’re an old hat at this, or just getting started, you’ll be able to understand the new concepts and features of HTML5 with ease.  For hard core JavaScript developers, yah, it’s missing that, but I expect to see that in more books soon enough.  But for everyone else, web designers, and web devigners (hybrid developer designers), you’ll find a great resource on HTML5!</p>
<p>With books like this, I can’t wait to see what the guys at A Book Apart have up their sleeves next!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/Q4V2B0Fh5fY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/07/book-review-html5-for-web-designers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/07/book-review-html5-for-web-designers/</feedburner:origLink></item>
		<item>
		<title>Top 10 Design Mistakes: #7</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/dy9LLuz3ksU/</link>
		<comments>http://petelepage.com/blog/2010/07/top-10-design-mistakes-7/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 16:47:29 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/07/top-10-design-mistakes-7/</guid>
		<description><![CDATA[I hope everyone had a fantastic weekend, other than the weather I had a really great one – Seattle has had one of the crappiest starts to summer that I can remember in my 9 years of living here!&#160; It’s like summer just wouldn’t come; but it looks like it arrived this morning and is supposed to stay  [...]]]></description>
				<content:encoded><![CDATA[<p>I hope everyone had a fantastic weekend, other than the weather I had a really great one – Seattle has had one of the crappiest starts to summer that I can remember in my 9 years of living here!&#160; It’s like summer just wouldn’t come; but it looks like it arrived this morning and is supposed to stay through the week – finally!&#160; But enough with idle chit-chat, time for number seven in the 10 Things I Hate About Your Website series!</p>
<h1>#7 – SEO: Isn’t Just For Highly Paid Consultants!</h1>
<p>As web developers, we sometimes forget that tags are often more than just a way of styling text, they’re meant to provide some semantic meaning to the content that you’re putting on a page.&#160; For example, some people think that an &lt;h1&gt; tag means that the text inside it is really large, instead of its true meaning of the primary heading for a page.</p>
<p>Search Engine Optimization or SEO is important to many, but not all sites, if all of your traffic is intranet and you only have one site, you probably don’t need to worry about it.&#160; But, with more and more content appearing online, in the corporate intranet, the corporate extranet or the internet, it’s getting harder and harder to organically find content and search is becoming super important.&#160; I remember a couple of years ago when the Microsoft Origami project name was leaked, and I wanted to know what it was – search made it possible, but because of poor SEO, it was more difficult than it should have been.&#160; As you’re building out your site, you need to consider how folks will get to it, and what you want them to do once they get there.</p>
<p>One of the easiest ways to find some tips and tricks for search engine optimization is to just search for SEO Tips, either on <a href="http://www.google.com/search?q=seo+tips" target="_blank">Google</a> or <a href="http://www.bing.com/search?q=seo+tips" target="_blank">Bing</a>, though some of them are complete bunk – my favorite so far has been “become a foreigner”.&#160; One of the most important tips that I can recommend and that I’ve seen on other sites, is that content is king!&#160; If the quality of your content is good, then you’ll likely have a better chance of ranking higher in search results.</p>
<p>After spending a significant amount of time reading and researching, here are my top 8 suggestions that will carry the most impact when coding your site:</p>
<h2>8 Tips &amp; Tricks for SEO</h2>
<ol>
<li>Title &amp; Meta Tags – ensure every page has a unique and relevant title set, and that you’re using meta tags to provide descriptions and keywords about the content on the page.&#160; Make sure that the keywords are relevant to the copy on the page – if they’re not, search engines will likely discount them, and rank your page lower. </li>
<li>Write copy for SEO – Search engines look at many parts of your page, looking for keywords, copy, how &lt;h?&gt; tags are used and so on.&#160; It’s important to keep the use of the &lt;h?&gt; tags to relevant headings and other appropriate parts.&#160; Think about how a search engine sees your page, it doesn’t execute JavaScript so make sure you content is accessible if JavaScript is turned off. </li>
<li>Provide a sitemap.xml file – there are several tools that will help create these, or you can hand code it (though it’s a bit of a pain).&#160; I host most of my sites on GoDaddy, and they have a built in tool for creating sitemaps.xml file for me.&#160; Site maps make it super easy for search engines to look at your site and determine the content and what you have without them having to do any work.&#160; Oh, and don’t forget if you block access to your site by turning off spiders in the robots.txt file, search engines will not be able to access your site! </li>
<li>alt <strike>Tags</strike> attributes – search engines are really good at being able to “see” and understand text, but they cannot see images, or photos or graphics – so be sure to include alt attributes on all of your images.&#160; And don’t include your content in images!&#160; Check out one of the sites below for my favorite site that’s guilty of this one! </li>
<li>If you’re using Flash, Silverlight, or other rich media on your site, be sure that you supplement it with HTML content.&#160; Search engines aren’t able to truly understand rich media and so finding the content in there will be almost impossible for them! </li>
<li>Verify internal links – when you’re providing links within your site to the default page, are you linking to http://site.com/index.htm or are you linking to http://site.com/ or http://site.com?&#160; Each one of those may be seen as a link to a different page, and cause complexities for search engines. </li>
<li>Make Links Easy – when coding your site, if the content is going to be dynamic or accessible via URLs, make the URLs easy to read and understand.&#160; The MSDN website is an AWESOME example of how NOT do to this.&#160; For example, check out the URL <a title="http://msdn.microsoft.com/en-us/ie/cc405106.aspx" href="http://msdn.microsoft.com/en-us/ie/cc405106.aspx">http://msdn.microsoft.com/en-us/ie/cc405106.aspx</a> – do you have any idea where it goes or what might be contained within that URL?&#160; Instead use something more friendly – that URL can also be accessed via <a href="http://msdn.com/iecompat">http://msdn.com/iecompat</a>, much easier to read and understand – you know what you’re going to get from just looking at the URL and so does a search engine! </li>
<li>Use search engines web master tools – Bing, Google, Yahoo, and most other search engines have an area where they have best practices and help for ensuring your website ranks well in search.&#160; I’ve listed a few of them below. </li>
</ol>
<h2>Useful Tools, Sites And Resources for SEO</h2>
<h3>Google</h3>
<ul>
<li><a href="http://www.google.com/support/webmasters/bin/answer.py?answer=70897" target="_blank">Google 101: How Google Craws, indexes and serves the web</a> </li>
<li><a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=35291" target="_blank">Search Engine Optimization Help</a> </li>
<li><a href="https://www.google.com/webmasters/tools/home?hl=en" target="_blank">Google Web Master Tools</a> </li>
<li><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/search-engine-optimization-starter-guide.pdf" target="_blank">Google Search Engine Optimization Starter Guide [PDF]</a> </li>
</ul>
<h3>Bing</h3>
<ul>
<li><a href="http://www.bing.com/toolbox/posts/archive/2009/12/01/seo-and-sem-basics.aspx" target="_blank">SEO and SEM Basics</a> </li>
<li><a href="http://www.bing.com/community/blogs/webmaster/archive/2009/09/03/search-engine-optimization-for-bing.aspx" target="_blank">Search Engine Optimizations for Bing</a> </li>
<li><a href="http://www.bing.com/webmaster/SubmitSitePage.aspx" target="_blank">Submit A Site [or page] To Bing</a> </li>
<li><a href="http://www.microsoft.com/video/en/us/details/876f924a-7abf-4f49-9da4-fd8ee1498168" target="_blank">Using the IIS SEO Toolkit [Video]</a> </li>
</ul>
<h2>Let’s see some examples!</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/neck_and_backPain.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="neck_and_backPain" border="0" alt="neck_and_backPain" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/07/neck_and_backPain_thumb.png" width="244" height="184" /></a>There is not a single word of text on this page, it’s all images! If you want to copy and paste the address into a mapping program, fail.&#160; Want the search engine to know more about these guys, nothing!&#160; Every single piece of content on this site is an image, and no signs of any alt tags.&#160; If you’re coming to this site with a screen reader, again, nothing.&#160; Sad panda!</p>
<p style="clear: left"><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/xuacompatsearch.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="x-ua-compat-search" border="0" alt="x-ua-compat-search" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/07/xuacompatsearch_thumb.png" width="244" height="184" /></a> This is another favorite of mine, go to Bing and search for X-UA-Compatible – you’d think that a Microsoft site would be the first link, in fact that we’d be the first couple of links.&#160; Nope, in fact we’re not there until the third link.&#160; A List Apart (which is fantastic, don’t get me wrong), is the first link!</p>
<h2 style="clear: left">Best Practice Suggestions</h2>
<ul>
<li>
<div style="clear: left">Review and use the tips and techniques provided by the search engines themselves, they’re more likely to work than some of the fun stuff you’ll find on the internet.</div>
</li>
<li>
<div style="clear: left">Don’t use link farms – they’ll often result in lower results.</div>
</li>
</ul>
<p><strong>Don’t Forget:</strong> If I pick on your website, I apologize! It’s meant as a learning opportunity for both of us, and I’m happy to help you move from my offending list, to my best practices list! I’ve only shared a few of my favorites in this blog post, and there are plenty more out there! What are some of your favorites? Leave your favorite offending sites in the your comments! For designers who may be reading, I’d love to hear your thoughts and comments! What bugs you, what makes your life hard when working with web developers?</p>
<p><strong>Update:</strong> <a href="http://twitter.com/pornelski">@pornelski</a> tweeted me and said he thought my first tip on using keywords was wrong, and linked to a <a href="http://googlewebmastercentral.blogspot.com/2009/09/google-does-not-use-keywords-meta-tag.html">Google webmaster blog post</a> where they explicitly say they don&#8217;t use keywords.  I generally think it&#8217;s still worthwhile because it&#8217;s possible that other search engines do use it.</p>
<p>He also added the clarification, that the alt attribute (which I incorrectly mentioned as a tag), shouldn&#8217;t literally describe the image, but instead provide an alternative description of the image.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/dy9LLuz3ksU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/07/top-10-design-mistakes-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/07/top-10-design-mistakes-7/</feedburner:origLink></item>
		<item>
		<title>Internet Explorer Develop Tools: CSS</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/WJLQqPRAM5k/</link>
		<comments>http://petelepage.com/blog/2010/07/internet-explorer-develop-tools-css/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 20:36:48 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[IE9]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/07/internet-explorer-develop-tools-css/</guid>
		<description><![CDATA[In continuing my series about the IE Dev Tools that come build in to Internet Explorer – today I’ll take a look at the CSS Tab and how you can use it to add, edit, change, or remove CSS rules and dive deeper in to the CSS on your page, where styles are coming from and such.
The CSS Tab
The CSS tab  [...]]]></description>
				<content:encoded><![CDATA[<p>In continuing <a href="http://petelepage.com/blog/tag/developer-tools/" target="_blank">my series about the IE Dev Tools</a> that come build in to Internet Explorer – today I’ll take a look at the CSS Tab and how you can use it to add, edit, change, or remove CSS rules and dive deeper in to the CSS on your page, where styles are coming from and such.</p>
<h1>The CSS Tab</h1>
<p>The CSS tab shows the all of the CSS files that your page includes via embedded, linked style sheets, or imported style sheets.&#160; Like all of the other tabs, it includes the standard menu bar, the ability to change rendering and browser mode, and the standard buttons <em>Select Element By Click</em> <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" class="wlDisabledImage" title="DevTools-SelectByClick2" border="0" alt="DevTools-SelectByClick2" src="http://petelepage.com/blog/wp-content/uploads/2010/07/DevToolsSelectByClick2.png" width="24" height="25" />, <em>Clear Browser Cache</em> <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="DevTools-ClearCache" border="0" alt="DevTools-ClearCache" src="http://petelepage.com/blog/wp-content/uploads/2010/07/DevToolsClearCache.png" width="28" height="24" /> and <em>Save</em> buttons <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="DevTools-Save" border="0" alt="DevTools-Save" src="http://petelepage.com/blog/wp-content/uploads/2010/07/DevToolsSave.png" width="29" height="25" />.&#160; Beside the standard buttons is a drop down list that allows you to choose which set of styles you want to look at.&#160; It includes all of the styles that Internet Explorer loads for that page, including iFrames.</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/csstab2.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" class="wlDisabledImage" title="csstab-2" border="0" alt="csstab-2" src="http://petelepage.com/blog/wp-content/uploads/2010/07/csstab2_thumb.png" width="504" height="180" /></a></p>
<p>If you have multiple embedded style blocks, each block will be listed separately within the drop down list.&#160; iFrame styles are denoted by the square brackets around the name of the [] stylesheet, for example <em>[iframeSource.htm] stylesheet.css.</em>&#160; As you change the drop down, the contents of the CSS display box will show all the rules, along with their individual attributes.</p>
<h2>Using the CSS Tools</h2>
<p>Like the <a href="http://petelepage.com/blog/2010/06/internet-explorer-developer-tools-html/" target="_blank">HTML tab</a>, you can turn on and off rules, or the individual attributes as well as add, remove or edit all of their values and see the changes in real time.&#160; </p>
<h3>Getting Started</h3>
<ol>
<li>If you’re in Internet Explorer now, hit F12, if you aren’t switch over to IE8 and load a site that has a bunch of CSS and HTML on it then hit F12 (pretty much page).&#160; See if you can find a site that has at least one iFrame on it so you can see how iFrames look as well. </li>
<li>Switch over to the CSS tab to see all of the CSS files that are loaded on the page you’re viewing.      <br /><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/csstab3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="csstab-3" border="0" alt="csstab-3" src="http://petelepage.com/blog/wp-content/uploads/2010/07/csstab3_thumb.png" width="155" height="119" /></a>       <br />You’ll now see a list of all the rules that are defined within the selected style. </li>
</ol>
<h3>Turning Rules or Attributes On and Off</h3>
<p>The easiest way to turn off style rules or individual attributes within those is to use the checkbox beside each node.&#160; Unchecking the rule turns off all of the attributes for that rule, or you can simply choose to turn off the specific attributes.</p>
<h3>Changing Existing Rules or Attributes</h3>
<p>To change an existing rule, you can do the same thing as in the HTML tab, simply click on the item you want to edit and Internet Explorer will change that item into edit mode.&#160; You can change the rule names, attribute names and the attribute values.&#160; After you’ve made your change, hit enter and IE will apply the changes to your page.</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/DevToolsCSSSingleClick.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" class="wlDisabledImage" title="DevTools-CSS-SingleClick" border="0" alt="DevTools-CSS-SingleClick" src="http://petelepage.com/blog/wp-content/uploads/2010/07/DevToolsCSSSingleClick_thumb.png" width="404" height="102" /></a></p>
<h3>Adding or Removing Rules or Attributes</h3>
<p>This is one of the cooler features of the CSS tab that I often forget about because surfacing it isn’t super obvious.&#160; If you right click on a rule or attribute, a content menu appears that allows you to add or delete attributes and rules.&#160; You can choose where you want them to fit within the cascade via the <em>Add Rule Before</em> or <em>All Rule After</em>.</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/07/DevToolsCSSRightClick.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" class="wlDisabledImage" title="DevTools-CSS-RightClick" border="0" alt="DevTools-CSS-RightClick" src="http://petelepage.com/blog/wp-content/uploads/2010/07/DevToolsCSSRightClick_thumb.png" width="204" height="194" /></a></p>
<p>When adding an attribute, you do it pretty much exactly like you would type it in a style sheet or style block.&#160; When I click <em>Add Attribute</em>, the dev tools, creates a new node for me in the tree view, and I type the style I want to add, followed by a colon, then IE pops me over to a new text box where I can type the value for that style followed by a semi-colon. Once I hit enter, IE will update the page with my changes.</p>
<p>Adding a new rule is similar, in that you click <em>Add Rule After</em> (or Before), and it creates a new node in the tree in the appropriate place.&#160; Then using the same <em>Add Attribute</em> right click, you add the appropriate attributes to that node.</p>
<h2>CSS Editing with Internet Explorer Developer Tools</h2>
<p> There you go – hopefully this will make your editing and debugging of CSS a little easier!&#160; Stay tuned for posts on debugging and profiling your JavaScript code!   </p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/WJLQqPRAM5k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/07/internet-explorer-develop-tools-css/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/07/internet-explorer-develop-tools-css/</feedburner:origLink></item>
		<item>
		<title>Top 10 Design Mistakes: #8</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/BRr16Ximpgw/</link>
		<comments>http://petelepage.com/blog/2010/06/top-10-design-mistakes-8/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 22:53:55 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/top-10-design-mistakes-8/</guid>
		<description><![CDATA[Time to continue my top ten list of web site pet peeves – and we’re in at number 8 with something that requires a little bit of balance, because for many sites, it’s a requirement, it’s the only way they really are able to provide the content that they do, for the price we pay…
#8 – Advertising Is  [...]]]></description>
				<content:encoded><![CDATA[<p>Time to continue my top ten list of web site pet peeves – and we’re in at number 8 with something that requires a little bit of balance, because for many sites, it’s a requirement, it’s the only way they really are able to provide the content that they do, for the price we pay…</p>
<h1>#8 – Advertising Is A Reality, Sometimes</h1>
<p>Somebody once said, “there’s no such thing as a free lunch.”  And the web is no different, someone has to pay for the content that we’re consuming online, whether it’s through me doing this in my own time, and paying for my own hosting, or by showing ads on a page, it takes time and money to create good content.  At this point, I think everyone has accepted that for many of the sites we look at each day, we’re going to see ads in addition to the content.  And when done at a reasonable level, I don’t have a problem with that – especially if the ads are targeted at me, so that I’m not seeing ads for products that aren’t really of much interest to me.</p>
<p>One of my favorite examples of a site with too many ads is <a href="http://www.thedieselstop.com/forums" target="_blank">The Diesel Stop forums</a><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/dieselstop1.png"><img class="wlDisabledImage" style="margin: 0px 5px 0px 0px; display: inline; border-width: 0px;" title="dieselstop1" src="http://petelepage.com/blog/wp-content/uploads/2010/06/dieselstop1_thumb.png" border="0" alt="dieselstop1" width="244" height="184" align="left" /></a>.  It’s a site for fans of Ford trucks – lots of great community conversations, sharing of information, all the stuff that you’d expect from a forum site.  A little while ago, they did a re-design, and added a few ads to their site.  And by few, I mean, that I have to scroll over 740 pixels down my page before I can see any real content!  740 pixels!  Imagine how that looks on a netbook!</p>
<p>As you build out your website, it’s really important to remember what is driving people to your site, is it the content or the ads that people want to look at?  I’d be willing to bet that they’re probably not coming to your site to look at the ads!  One of the important things that you need to do is find a balance – content vs. ads. </p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/overlayad1.png"><img class="wlDisabledImage" style="margin: 0px 0px 0px 5px; display: inline; border-width: 0px;" title="overlay-ad1" src="http://petelepage.com/blog/wp-content/uploads/2010/06/overlayad1_thumb.png" border="0" alt="overlay-ad1" width="244" height="184" align="right" /></a>Another one of my pet peeves is blocking ads, ads that sit in front of the site and force you to close them before you can view the content – again, users are coming to your site for content, and ads are a way to help you subsidize your content.  Making it hard for users to get to content is going to discourage them from coming back. </p>
<p>Then there are other options besides the regular ads – ask yourself when visiting a website, have you trained yourself to look past the typical ad locations and shapes that look like ads?  I know I’ve gotten myself pretty well trained to ignore certain places on a page or certain shapes!  The person who figures out an innovative, and unobtrusive way to get ads on a page is going to make a lot of money!</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/nytimes.png"><img class="wlDisabledImage" style="margin: 0px 5px 0px 0px; display: inline; border-width: 0px;" title="nytimes" src="http://petelepage.com/blog/wp-content/uploads/2010/06/nytimes_thumb.png" border="0" alt="nytimes" width="244" height="159" align="left" /></a>One site that has found a way to do that is the <a href="http://www.nytimes.com/" target="_blank">New York Times</a> – it’s a site that I really appreciate for it’s design and layout.  They’ve done a number of things to put ads on the page, make them flow nicely into the page so that they catch my eye but don’t feel obtrusive or obnoxious.</p>
<h2 style="clear: left;">Best Practice Suggestions</h2>
<ul>
<li>Make your content the primary subject of your site, it’s what drives people to your site!</li>
<li>Don’t hide content with ads and make users work to get to your content, they’ll remember that and go to other places where it’s easier to find the content they’re looking for!</li>
</ul>
<h2 style="clear: left;">Summary</h2>
<p>Remember what drives people to your site, make the content the strong point, and integrate the ads into your site in a way that fits, putting too many ads on a page will drive people away!If you’re using an ad network like <a href="https://www.google.com/adsense/support/?hl=en&amp;sourceid=aso&amp;subid=ww-en-et-storefrontEN_v2_HCFooterLink&amp;medium=link" target="_blank">AdSense</a> or <a href="https://pubcenter.microsoft.com/" target="_blank">pubCenter</a>, be sure to read through their <a href="https://www.google.com/adsense/support/bin/answer.py?hl=en&amp;answer=171656" target="_blank">tips and tricks</a>, they’re interested in helping you make money, because it helps them make money! Be creative! Figure out how to be a little different – be the person who finds the next advertising opportunity.    </p>
<p><strong>Don’t Forget:</strong> If I pick on your website, I apologize! It’s meant as a learning opportunity for both of us, and I’m happy to help you move from my offending list, to my best practices list! I’ve only shared a few of my favorites in this blog post, and there are plenty more out there! What are some of your favorites? Leave your favorite offending sites in the your comments! For designers who may be reading, I’d love to hear your thoughts and comments! What bugs you, what makes your life hard when working with web developers?</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/BRr16Ximpgw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/top-10-design-mistakes-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/top-10-design-mistakes-8/</feedburner:origLink></item>
		<item>
		<title>A Quick Intro: Canvas in IE9</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/vXBDkOrvpHQ/</link>
		<comments>http://petelepage.com/blog/2010/06/a-quick-intro-canvas-in-ie9/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 18:37:13 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[Fast]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2304</guid>
		<description><![CDATA[Yesterday, with the release of Internet Explorer 9 Platform Preview 3, the engineering team announced support for hardware accelerated &#60;canvas&#62;!  The &#60;canvas&#62; element is a part of the HTML5 Standards specification and allows for dynamic scriptable rendering of 2D graphics.  To use it, you put a  [...]]]></description>
				<content:encoded><![CDATA[<p>Yesterday, with the release of Internet Explorer 9 Platform Preview 3, the engineering team announced support for hardware accelerated &lt;canvas&gt;!  The &lt;canvas&gt; element is a part of the HTML5 Standards specification and allows for dynamic scriptable rendering of 2D graphics.  To use it, you put a simple &lt;canvas&gt; element in your HTML, which defines the drawing area, then through JavaScript, you can get the 2d context and begin dynamically drawing within that region.</p>
<p>Much like SVG, you can draw on the page using basic shapes, but you can also easily include rasterized images, videos and other objects.  But unlike SVG, when you draw on the page, the browser doesn&#8217;t remember any of the &#8220;drawings&#8221;.  With SVG, the &#8220;drawings&#8221; just become elements in the DOM and you can script them, change them, basically treat them like any other element.  Canvas on the other hand, doesn&#8217;t remember the state of the &#8220;drawings&#8221; so you can&#8217;t change them as easily.</p>
<h3>Quick Code Sample</h3>
<pre class="brush: xml; title: ; notranslate">
&lt;canvas id=&quot;myCanvas&quot; width=&quot;200&quot; height=&quot;200&quot; 
    style=&quot;border: 1px solid black;&quot;&gt;
      Your browser doesn’t support Canvas, sorry.
&lt;/canvas&gt;
</pre>
<pre class="brush: jscript; title: ; notranslate">
    var canvasElement = document.getElementById(&quot;myCanvas&quot;);
    if (canvasElement.getContext) {
        // The Context exists, so we know we have a canvas element 
        // we can work with.
        var context = canvasElement.getContext(&quot;2d&quot;);
        context.fillStyle = &quot;rgb(255,0,0)&quot;;
        context.fillRect(30, 30, 50, 50);
    }
    else {
        // There is no Context, so we can't do anything.
        // Put fall back code here.
    }
</pre>
<h3>Results in&#8230;</h3>
<p><canvas id="myCanvas" width="200" height="200" style="border: 1px solid black;"><br />
  Your browser doesn’t support Canvas, sorry.<br />
</canvas></p>
<p><script type="text/javascript">
    var canvasElement = document.getElementById("myCanvas");
    if (canvasElement.getContext) {
        // The Context exists, so we know we have a canvas element we can work with.
        var context = canvasElement.getContext("2d");
        context.fillStyle = "rgb(255,0,0)";
        context.fillRect(30, 30, 50, 50);
    }
    else {
        // There is no Context, so we can't do anything.
        // Put fall back code here.
    }
</script></p>
<h3>The More Exciting Stuff&#8230;</h3>
<p>Okay, so I can draw a little red box on a page, woop-de-doo right!  This is when I recommend you check out the IETestDrive.com website where the truly cool demos are.  Be sure when you&#8217;re looking at these demos that you take a minute to look at the source code as well &#8211; it&#8217;s pretty interesting to see how few lines of HTML are required, and in many cases how few lines of JavaScript as well!</p>
<ul>
<li><a href="http://ie.microsoft.com/testdrive/Performance/AmazonShelf/Default.html">Amazon Shelf</a> &#8211; A visualization of Amazon&#8217;s top books and a way to read a bit more into them</li>
<li><a href="http://ie.microsoft.com/testdrive/Performance/FishIE%20tank/Default.html">FishIE Tank</a> &#8211; Remember the Windows 7 beta fish, he&#8217;s back!</li>
<li><a href="http://ie.microsoft.com/testdrive/Performance/MrPotatoGun/Default.html">Mr. Potato Gun</a> &#8211; Mr. Potato plus what looks like an air canon is never good for Mr. Potato!</li>
<li><a href="http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html">Asteroid Belt</a> &#8211; be sure to look at the HTML for this one, there really isn&#8217;t any!</li>
<li><a href="http://ie.microsoft.com/testdrive/Graphics/DeepZoom/Default.html">DeemZoom</a> &#8211; this is truly making web apps native!</li>
<li><a href="http://ie.microsoft.com/testdrive/Graphics/CanvasPad/Default.html">Canvas Pad</a> &#8211; An interactive canvas drawing app</li>
</ul>
<p>Enjoy!<br />
PEte</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/vXBDkOrvpHQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/a-quick-intro-canvas-in-ie9/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/a-quick-intro-canvas-in-ie9/</feedburner:origLink></item>
		<item>
		<title>How To: Put HTML5 &lt;video&gt; On A Page</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/ZqSkkCqq-iA/</link>
		<comments>http://petelepage.com/blog/2010/06/how-to-put-html5-video-on-a-page/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 06:41:42 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CodeSample]]></category>
		<category><![CDATA[encode]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[h264]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[PP3]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[xWeb]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2294</guid>
		<description><![CDATA[This week has been kind of fun, we’ve been getting ready for the release of IE9 Platform Preview 3, and around 2pm PST today – it was released!  The reception has been awesome so far!  This is the build that supports &#60;video&#62;, &#60;audio&#62; and uber cool – &#60;canvas&#62;!
I’m going to save &#60;canvas&#62; for another  [...]]]></description>
				<content:encoded><![CDATA[<p>This week has been kind of fun, we’ve been getting ready for the release of IE9 Platform Preview 3, and around 2pm PST today – it was released!  The reception has been awesome so far!  This is the build that supports &lt;video&gt;, &lt;audio&gt; and uber cool – &lt;canvas&gt;!</p>
<p>I’m going to save &lt;canvas&gt; for another post but wanted to get a post out tonight about some quick ways to try out the &lt;video&gt; tag and ways to encode H.264 video.</p>
<div style="padding:5px;border: 1px solid red;">
<strong>REMEMBER</strong>: This is still an early preview release and there may be some fun issues&#8230;  For example, in my demos below, IE9 is showing both the video and the non-video content, it should only be showing the video.  That&#8217;s why these are platform previews! <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</div>
<h2>Putting &lt;video&gt; on your page is EASY!</h2>
<pre class="brush: xml; title: ; notranslate">
    &lt;video poster=&quot;http://www2.petelepage.com/videos/poster.jpg&quot; src=&quot;http://www2.petelepage.com/videos/skydive.mp4&quot; preload=&quot;none&quot; controls style=&quot;border-radius: 10px; border: 5px solid black;&quot;&gt;
        &lt;div style=&quot;margin:5px;padding:5px;border:1px solid black;&quot;&gt;
            &lt;h2&gt;Sad Panda: HTML5 Video Not Supported&lt;/h2&gt;
            &lt;p&gt;This browser doesn't support HTML5 video with the H.264 video codec, so instead, you get the generic fall back.&lt;/p&gt;
            &lt;p&gt;You could install the &lt;a href=&quot;http://ietestdrive.com&quot;&gt;IE9 Platform Preview&lt;/a&gt;&lt;/p&gt;
            &lt;p&gt;In reality, you should probably put a Flash or Silverlight fall back here, 'cause not everyone will install a new browser just to see my/your video!&lt;/p&gt;
        &lt;/div&gt;
    &lt;/video&gt;
</pre>
<h3>Results In&#8230;</h3>
<p>    <video poster="http://www2.petelepage.com/videos/poster.jpg" src="http://www2.petelepage.com/videos/skydive.mp4" preload="none" controls style="border-radius: 10px; border: 5px solid black;"></p>
<div style="margin:5px;padding:5px;border:1px solid black;">
<h2>Sad Panda: HTML5 Video Not Supported</h2>
<p>This browser doesn&#8217;t support HTML5 video with the H.264 video codec, so instead, you get the generic fall back.</p>
<p>You could install the <a href="http://ietestdrive.com">IE9 Platform Preview</a></p>
<p>In reality, you should probably put a Flash or Silverlight fall back here, &#8217;cause not everyone will install a new browser just to see my/your video! <img src='http://petelepage.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</p></div>
<p>    </video></p>
<p>The video above was shot while I was in Australia earlier this year, a bunch of my friends and I went sky diving just outside of Sydney to celebrate Christian’s birthday.  Eric (the second one) compiled all of our videos together into one single video, put a sound track to it, and made this great video!  It’s about 35 megs for the 5:30 minutes worth of video. It won&#8217;t start until you hit play, so it shouldn&#8217;t cause stuff to start playing without your input!</p>
<h3>So What Does Everything Mean?</h3>
<ul>
<li><em><strong>preload=&#8221;none&#8221;</strong></em> tells the browser not to preload the video file unless the user hit&#8217;s the play button &#8211; saves on bandwidth.</li>
<li><em><strong>poster=&#8221;"</strong></em> indicated where the browser should load the poster file from, that&#8217;s the image the browser shows until you hit play, or it finishes loading the video file</li>
<li><em><strong>src=&#8221;"</strong></em> &#8211; well, that one&#8217;s pretty obvious, it&#8217;s the video you&#8217;re trying to load</li>
<li><em><strong>controls</strong></em> &#8211; tells the browser to show the video controls. In IE9 PP3, if the video width is less than about 400px, it won&#8217;t show the controls because the image is too small, I fought with that one for more than a few minutes! Grrr! Also, I&#8217;m using the more relaxed HTML5 syntax here, and not giving the attribute a value, you could do controls=&#8221;controls&#8221; if you want to make sure your code validates as expected.</li>
</ul>
<p>You could also add&#8230;</p>
<ul>
<li><em><strong>autoplay</strong></em> &#8211; plays the video without the user having to click the play button.</li>
<li><em><strong>loop</strong></em> &#8211; loops the video infinitely, or until the user hits the stop button, or navigates away from the page.</li>
<li><em><strong>width</strong> </em>or<em> <strong>height</strong></em> &#8211; sets the width and height of the video element.</li>
</ul>
<h2>Encoding Videos</h2>
<p>Getting the &lt;video&gt; element on your page is the easiest part! How big is the video, both from a screen size perspective, and from a file download size is the more challenging part! Is it encoded with the right encoder? Some point and shoot cameras record in H.264 mode, some (like my Canon SD780 IS) don’t <img class="wlEmoticon wlEmoticon-sadsmile" style="border-style: none;" src="http://petelepage.com/blog/wp-content/uploads/2010/06/wlEmoticonsadsmile1.png" alt="Sad smile" />.  Encoding the video is likely the most difficult!</p>
<p>So how what’s the best way to resize and encode your video? There are a bunch of tools available today, some free, some paid. Sadly, the free Windows Live Movie Maker won’t encode videos with the H.264 encoder . I’m going to walk through how to do this with <a href="http://www.microsoft.com/expression/products/EncoderPro_Overview.aspx">Expression Encoder 4 Pro</a>. It’s part of the Expression Studio set of tools. If you’re an MSDN subscriber, you can download it as part of your MSDN subscription. Otherwise, you can download the 60 day free trial from the <a href="http://www.microsoft.com/expression/products/Purchase.aspx">Expression Site</a>, after that you’ll need to purchase a license for it.</p>
<p>For the rest of the walk through, I’m going to assume you’ve already got Expression Encoder 4 Pro installed, and you’ve got the video file that you want to encode ready to go.</p>
<ol>
<li>Start Expression Media Encoder, when it starts, it’ll prompt you with a “Load A New Project” dialog box.  Since we’re going to put our video online with the HTML5 video tag, not Silverlight, you want to create a new Transcoding Project.<br />
<a href="http://petelepage.com/blog/wp-content/uploads/2010/06/xmedia1.jpg"><img class="wlDisabledImage" style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="xmedia1" src="http://petelepage.com/blog/wp-content/uploads/2010/06/xmedia1_thumb.jpg" border="0" alt="xmedia1" width="244" height="187" /></a></li>
<li>Now that we’re in Expression Media Encoder, we need to import the video file that we want to encode.  Under the <em>File</em> menu, choose <em>Import</em> and find the file that you want to encode.  It’ll take a second to analyze and for Expression Encoder to read the file completely (especially if it’s a big file you want to encode).<br />
<a href="http://petelepage.com/blog/wp-content/uploads/2010/06/XE11.jpg"><img class="wlDisabledImage" style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="XE1" src="http://petelepage.com/blog/wp-content/uploads/2010/06/XE1_thumb1.jpg" border="0" alt="XE1" width="244" height="184" /></a></li>
<li>Now we need to chose our output encoding settings, thankfully Encoder 4 Pro makes that pretty easy for us.  <a href="http://petelepage.com/blog/wp-content/uploads/2010/06/xmediaencodingsettings.png"><img class="wlDisabledImage" style="margin: 0px 5px 0px 0px; display: inline; border-width: 0px;" title="xmedia-encoding-settings" src="http://petelepage.com/blog/wp-content/uploads/2010/06/xmediaencodingsettings_thumb.png" border="0" alt="xmedia-encoding-settings" width="104" height="244" align="left" /></a>In the <em>Presets</em> box in the left, there are a bunch of pre-configured settings you can choose from.  Video can get really big, depending on the quality and length of video, so unless I need super high quality, I typically choose one of the <em>Encoding For Online Services</em> profiles, and from there I usually use an standard def profile, but again, you’ll want to experiment with this depending on your needs and the bandwidth of your users and your server.  For this example, I chose the “<em>H.264 YouTube SD</em>” profile, which results in a file that’s about 4megs per minute of video.  Be sure to click <em>Apply</em> once you’ve chosen your profile to apply the settings.  You’ll notice that the area in red now defines the output format, and other information.  You can go in and expand out any of those tabs to change how the video is encoded. The video that I’m encoding is 16:9, but you’ll notice the output format is 4:3.  Because of that, Expression Encoder will automatically add the black bars above and below the video, and give me a letter box look.</li>
<li style="clear: left;"><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/xmediaoutput.png"><img class="wlDisabledImage" style="display: inline; border-width: 0px;" title="xmedia-output" src="http://petelepage.com/blog/wp-content/uploads/2010/06/xmediaoutput_thumb.png" border="0" alt="xmedia-output" width="183" height="244" align="right" /></a>The other important tab you’ll want to make sure you’ve got set up how you want it is the <em>Output</em> tab – this is where Expression Web will save file that it just encoded. I change the output directory from my user folder to the web folder that I’m working on, and also turn off the <em>Sub-folder by Job ID</em> check box.  I don’t use Job ID’s, so there’s no need for that.</li>
<li>We’re now ready to encode!  Push the <em>Encode</em> button on the bottom left part of the screen and Expression Encoder 4 Pro will start it’s magic…  After a couple of minutes, you’re file will be done and ready to go!</li>
</ol>
<h2>Other Resources</h2>
<p>There’s a fantastic post on <a href="http://diveintohtml5.org/" target="_blank">DiveIntoHTML5.org</a> with some really great info about the video tag and how to use it that I’d highly recommend checking out at <a title="http://diveintohtml5.org/video.html" href="http://diveintohtml5.org/video.html">http://diveintohtml5.org/video.html</a>.  On there, he also talks about other encoders that you can use (including some of the free ones), and also the different issues surrounding codecs.</p>
<h2>Some Other Fun Videos</h2>
<p>I shot these videos last January while I was in <a href="http://www.pjiae.com/">St. Maarten</a>.  If you’re an airplane buff like I am, it’s a place you HAVE to go at some point, watching a 747-400 land or take off less than 100 feet from you is AMAZING!  I never knew a Dash-8-Q400 could give such a good exfoliation when standing behind it <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://petelepage.com/blog/wp-content/uploads/2010/06/wlEmoticonsmile2.png" alt="Smile" /></p>
<p>    <video src="http://www2.petelepage.com/videos/landing.mp4" controls preload="none"></p>
<div style="margin:5px;padding:5px;border:1px solid black;">
<h2>Sad Panda: HTML5 Video Not Supported</h2>
<p>This browser doesn&#8217;t support HTML5 video with the H.264 video codec, so instead, you get the generic fall back.</p>
</p></div>
<p>    </video></p>
<p>    <video src="http://www2.petelepage.com/videos/q400_to.mp4" controls preload="none"></p>
<div style="margin:5px;padding:5px;border:1px solid black;">
<h2>Sad Panda: HTML5 Video Not Supported</h2>
<p>This browser doesn&#8217;t support HTML5 video with the H.264 video codec, so instead, you get the generic fall back.</p>
</p></div>
<p>    </video></p>
<p>Enjoy!<br />
PEte</p>
<p><strong>PS:</strong> I tested these links and videos in Internet Explorer 9 Platform Preview 3, and Chrome 5.<br />
<strong>[UPDATE 6/24/2010 @ 3:42PM PST]</strong> I added the preload=&#8221;none&#8221; attribute to all the videos so browsers that do support video don&#8217;t download the videos unless you ask for them.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/ZqSkkCqq-iA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/how-to-put-html5-video-on-a-page/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="http://www2.petelepage.com/videos/skydive.mp4" length="38309841" type="video/mp4" />
<enclosure url="http://www2.petelepage.com/videos/landing.mp4" length="643609" type="video/mp4" />
<enclosure url="http://www2.petelepage.com/videos/q400_to.mp4" length="1675477" type="video/mp4" />
		<feedburner:origLink>http://petelepage.com/blog/2010/06/how-to-put-html5-video-on-a-page/</feedburner:origLink></item>
		<item>
		<title>Tools For Web Designers and Web Developers</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/h05LEENlgg8/</link>
		<comments>http://petelepage.com/blog/2010/06/tools-for-web-designers-and-web-developers/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 18:31:39 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Expression]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[Multiple Browsers]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[xWeb]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/tools-for-web-designers-and-web-developers/</guid>
		<description><![CDATA[Building cool websites requires tools beyond your development environment.&#160; In my last two posts, I introduced the Internet Explorer Developer Tools, and the HTML Tab within the Internet Explorer Developer Tools.&#160; Today, I want to take a quick tangent off of the IE Developer Tools, and look at some  [...]]]></description>
				<content:encoded><![CDATA[<p>Building cool websites requires tools beyond your development environment.&#160; In my last two posts, I introduced the <a href="http://petelepage.com/blog/2010/06/internet-explorer-developer-tools/" target="_blank">Internet Explorer Developer Tools</a>, and the <a href="http://petelepage.com/blog/2010/06/internet-explorer-developer-tools-html/" target="_blank">HTML Tab within the Internet Explorer Developer Tools</a>.&#160; Today, I want to take a quick tangent off of the IE Developer Tools, and look at some other tools available from Microsoft that you may find useful.</p>
<h2 style="clear: left">Expression Web SuperPreview</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/xWeb3a.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="xWeb3a" border="0" alt="xWeb3a" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/xWeb3a_thumb.png" width="244" height="184" /></a><a href="http://www.microsoft.com/expression/products/SuperPreview_Overview.aspx" target="_blank">Expression Web SuperPreview</a> is part of the <a href="http://www.microsoft.com/expression/" target="_blank">Expression Studio</a> set of tools, and is a visual debugging tool that makes it much easier to see and debug different rendering engines side by side!&#160; One of the coolest features of Expression Web SuperPreview is that it has the IE6 rendering engine built it, so if you want to see what your site looks like in IE6, without having to find a machine with IE6 on it, you’re good to go!&#160; In fact, it’ll show you how your page renders in IE6, plus whatever versions of IE you have installed, as well as Firefox!</p>
<p>You can do side-by-side views of the different browsers, as well as visual overlays, sort of like an onion-skin mode.&#160; This is really great if you’re trying to get pixel identical layout.&#160; As you move your mouse over different elements in the page, SuperPreview shows you where that element would be in the other browser.&#160; And when you click on the element, a little window pops up giving you information about that element.&#160; What’s most useful about that is that it will show you the properties that are different.&#160; For example, when I look at my site in IE6 and IE8, I immediately notice lots of extra space between the header and the content.&#160; If I click on the “Home” link, in IE8, I can see the top is at “230” where as in IE6 it’s at 299.&#160; </p>
<p>One thing Expression Web SuperPreview doesn’t really let me do is interact with my page beyond that.&#160; I can’t click on links, navigate through pages, enter any information, and it doesn’t execute any JavaScript.&#160; But for comparing layouts on static pages, or on pages where you can get them into a state that you want before loading them – this is the tool for you!</p>
<p>Expression Web SuperPreview is a paid product that comes as part of the Expression Studio set of tools.&#160; If you’ve got an MSDN subscription, you can download it as part of your subscription, but if you don’t, you can get a 60 day free trial at <a href="http://microsoft.com/expression">http://microsoft.com/expression</a>.&#160; </p>
<h2 style="clear: left">Expression Web SuperPreview Remote</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/xWeb5.png"><img style="border-right-width: 0px; margin: 0px 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="xWeb5" border="0" alt="xWeb5" align="right" src="http://petelepage.com/blog/wp-content/uploads/2010/06/xWeb5_thumb.png" width="244" height="184" /></a>I’m calling out the Remote feature of Expression Web SuperPreview separately because it’s still in beta, and you have to sign up for it, but this is super cool.&#160; Remote adds an additional browser to the matrix, adding Safari 4.0 for the Mac!&#160; Now, if you’re a PC user and don’t have access to a Mac, you can see what your site looks like without having to find a Mac.</p>
<p>Just like you can with Expression Web SuperPreview, you can click on elements and see where they’re laying out on the page and interact with them like you can when running locally, but this way you’re not resource constrained based on the hardware you’re running on your machine.&#160; A quick easy way to verify your pages in other browsers and other operating systems.</p>
<p>Expression Web SuperPreview Remote is part of Expression Web SuperPreview, and the only thing that you need to do to use is it is to activate it, which requires a valid email address.&#160; Takes only a few seconds to get set up and working!&#160; Again, you can get a 60 day free trial of Expression Web SuperPreview at <a href="http://microsoft.com/expression">http://microsoft.com/expression</a>. </p>
<h2 style="clear: left">Expression Encoder Pro</h2>
<p style="clear: left"><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/XE1.jpg"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="XE1" border="0" alt="XE1" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/XE1_thumb.jpg" width="244" height="184" /></a>I’ll just include a quick note here on this one, but one of the tools that comes with the Expression Studio set of tools is <a href="http://www.microsoft.com/expression/products/EncoderPro_Overview.aspx" target="_blank">Expression Encoder Pro</a>.&#160; It’s a great tool for encoding video for the web.&#160; It’s the primary tool for creating Silverlight video, but it will also encode to H.264 video, which is the codec used by Internet Explorer 9!&#160; While I wouldn’t give it to my Mom to use, as someone who is reasonable tech savvy, you should be able to figure it out without any problems.</p>
<p style="clear: left">I’ve used it to encode videos from one format to another, or re-encode them to a smaller size.&#160; Super powerful, and fun to play with!</p>
<h2 style="clear: left">Virtual PC Testing Images</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/VPCDownloads.png"><img style="border-right-width: 0px; margin: 0px 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="VPCDownloads" border="0" alt="VPCDownloads" align="right" src="http://petelepage.com/blog/wp-content/uploads/2010/06/VPCDownloads_thumb.png" width="244" height="184" /></a>People have often asked about installing multiple versions of Internet Explorer on the same machine, and while there are tools and utilities out there, there isn’t a supported, official way to do it right now.&#160; The tools that are available are risky in a couple of ways:</p>
<ol>
<li>You’re installing system files from a somewhat random website, are you sure you want to do that?&#160; Are you sure they haven’t tampered with the files and inserted malware or anything like that? </li>
<li>Internet Explorer is part of the operating system, and there are several components that you need to replace to change versions including the JavaScript engine, parts of the network stack, in addition to the rendering engine.&#160; If any of those get out of sync, or the OS tries to call an API that didn’t exist in a previous version, you could find your system becoming unstable and not quite working right. </li>
<li>How many real world customers are using these “Frankenbuilds”?&#160; While it may be an interesting test concept, it doesn’t mimic how real world users are visiting your site.&#160; </li>
</ol>
<p>That’s why we strongly encourage you to virtualize your test environment, and we try to make that easier by providing VHD images that you can use to test what your customers will see and use.&#160; We provide IE6, IE7 and IE8 on Windows XP, as well as IE7 on Vista and IE8 on Vista.&#160; These images used to work on other virtualized hosts other than VPC, and right now, they’re not working.&#160; I’m still looking for solutions, and haven’t given up!&#160; I recommend that you build your own images in the mean time.&#160; The XP hard drives are time bombed because, we’re basically giving away the OS, and that makes some folks here uncomfortable.&#160; </p>
<p>You can download the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&amp;displaylang=en" target="_blank">Internet Explorer App Compat VPC Images</a> from the Microsoft Download Center.&#160; We’re updating the images today (6/22/10), and are just waiting for them to propagate out through the system.</p>
<h2 style="clear: left">Using XPERF To Really Dive Into IE Performance</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/MeasuringPerf_10.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="MeasuringPerf_10" border="0" alt="MeasuringPerf_10" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/MeasuringPerf_10_thumb.png" width="244" height="156" /></a>During my TechEd presentation about browser performance, I talked about how if you knew where the browser was spending the most of it’s time, you could optimize for the most expensive parts.&#160; The thing that I didn’t cover, was the tools you can use to understand where Internet Explorer is spending it’s time.</p>
<p>Well, last night, the IE team posted a great blog post titled <a href="http://blogs.msdn.com/b/ie/archive/2010/06/21/measuring-browser-performance-with-the-windows-performance-tools.aspx" target="_blank">Measuring Browser Performance with the Windows Performance Tools</a>.&#160; They’ve given you everything that you need to know in order to dive in here.&#160; I won’t include the whole post here, or even recap it, but strongly recommend you check it out!</p>
<p>Enjoy!   <br />PEte</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/h05LEENlgg8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/tools-for-web-designers-and-web-developers/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/tools-for-web-designers-and-web-developers/</feedburner:origLink></item>
		<item>
		<title>Internet Explorer Developer Tools: HTML</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/xo8sUKuakUI/</link>
		<comments>http://petelepage.com/blog/2010/06/internet-explorer-developer-tools-html/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 17:42:25 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[IE9]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/internet-explorer-developer-tools-html/</guid>
		<description><![CDATA[In one of my previous posts, I introduced the built in, Internet Explorer Developer Tools that come with Internet Explorer 8.&#160; Today, I want to take a deeper dive into the HTML Tab and what you can do with it.
The HTML Tab
The HTML tab shows the underlying mark up behind your page as seen by the  [...]]]></description>
				<content:encoded><![CDATA[<p>In one of my <a href="http://petelepage.com/blog/2010/06/internet-explorer-developer-tools/" target="_blank">previous posts</a>, I introduced the built in, Internet Explorer Developer Tools that come with Internet Explorer 8.&#160; Today, I want to take a deeper dive into the HTML Tab and what you can do with it.</p>
<h2>The HTML Tab</h2>
<p>The HTML tab shows the underlying mark up behind your page as seen by the Internet Explorer document object model (DOM), and not only shows the elements, and layout for the page, but also how the attributes affect how the page looks.&#160; The HTML tab is split into two windows, the DOM tree view, and is a set of tabs that help you understand the way your page looks.</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevTools1.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" class="wlDisabledImage" title="DevTools1" border="0" alt="DevTools1" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevTools1_thumb.png" width="550" height="205" /></a></p>
<p> As I walk through these tools, follow along, hit F12 to bring up the developer tools, and try changing the way my site looks! <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://petelepage.com/blog/wp-content/uploads/2010/06/wlEmoticonsmile1.png" />&#160; All of these screen shots are from the <a href="http://petelepage.com/blog/2010/06/internet-explorer-developer-tools/" target="_blank">IE Dev Tools Intro post</a> I made a few days ago.<br />
<h2 style="clear: left">Using the HTML Tools</h2>
<h3 style="clear: left">Select An Element</h3>
<p>There are several ways that you can select an element and then use the different tools in the HTML Tab to edit those elements.</p>
<ol>
<li><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="DevTools-SelectByClick" border="0" alt="DevTools-SelectByClick" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsSelectByClick.png" width="92" height="100" />&#160;<strong>Select Element By Click</strong> <em>(CTRL-B)</em> – This is probably the easiest way to select an element and is pretty self explanatory.&#160; Clicking on this guy, then clicking on an element will select that element.&#160; Moving the mouse around the element you want to select will draw a blue line around the element, if you want to grab the parent element, move the mouse just outside of the element you’re trying to select.&#160; Alternatively, you can select the element, then use the DOM view to move up and down the DOM. </li>
<li>You can use the <strong>“Search HTML”</strong> box to find all element with particular attributes or elements of a particular type. </li>
<li>The <strong>DOM Tree</strong> view is another way that you can select particular elements.&#160; Usually I use a combination of Select Element By Click and the DOM tree.&#160; When the developer tools open, and the page is loaded, you’re shown a view of the DOM, but the tree view isn’t expanded, you can click on the “+” sign to expand out the tree view and see all of the contents of each node in the DOM.&#160; This is a really good way to get into and see how elements are related to each other and where they’re falling within the DOM. </li>
</ol>
<p>If you just want to see an outline of the elements on your page, and see how they’re all fitting together, under the <em>Outline</em> menu bar item, you can select from <em>Table Cells, Tables, DIV Elements, Images, Any Elements, </em>or<em> Positioned Objects</em>.&#160; </p>
<h3 style="clear: left">Changing Attributes and Elements</h3>
<p>One of the powerful features of the IE developer tools is that they allow you to change properties and attributes of the elements live while looking at the page.&#160; Once you’ve selected the element, you can use any of the tools below to change the element in memory.&#160; Remember, this won’t serialize those changes back down to your source file – you’ll have to do that yourself, but it’s a great way to figure out what you do need to change.&#160; </p>
<p>The developer tools do have the ability to save the changes you’ve made to your page, but they’re going to save out IE’s DOM version of your page, and not the beautiful code you wrote!</p>
<h3 style="clear: left">Style Tool</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsStyle.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="DevTools-Style" border="0" alt="DevTools-Style" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsStyle_thumb.png" width="244" height="147" /></a>The Style tool shows how your CSS rules have been applied to the currently selected element.&#160; By default, the tress is fully expanded, so you can see where the values are coming from.&#160; For example, on the left, you’ll notice that in the <em>BODY </em>element, the color and font-size both are displayed with a line through them, those attributes are being overridden by another CSS rule further down in the cascade.&#160; You can use the check boxes to turn the attributes on and off as you’re looking at the page to see how particular rules and attributes are being applied to that specific element.&#160; Personally, I find this particular tool to be the least useful to me, and much prefer the next too, the Trace Style Tool.</p>
<h3 style="clear: left">Trace Styles Tool</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsTrace.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="DevTools-Trace" border="0" alt="DevTools-Trace" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsTrace_thumb.png" width="244" height="148" /></a>Alright, like I said, this is the tool that I personally find most useful when I’m trying to figure out why my CSS isn’t rendering like I expect it to in the browser.&#160; The Trace Style tool shows you all of the style attributes that are being applied to this element.&#160; By expanding out the tree, you can see where the attributes are coming from, and how they cascade.&#160; In this particular case, in style.css, the body style rule has been defined twice for some reason, and because of the cascade, the body color of #4e4e4e is being overridden and set to black.&#160; If you click on the “style.css” link on the right side of the screen, you’re taken directly to the specific line in the code! </p>
<p>The Trace Style tool gives you two other things I really like – the check boxes so you can turn the styles on and off in real time to see how the rule changes the element.&#160; The second one is that you can actually edit those CSS values inline and see how they appear.&#160; If you click on the “black” and type “yellow”, you’ll notice the page updates in real time!</p>
<h3 style="clear: left">Layout Tool</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsLayout.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="DevTools-Layout" border="0" alt="DevTools-Layout" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsLayout_thumb.png" width="244" height="149" /></a>I know I’ve said this before, but for whatever reason, I just can’t seem to remember the difference between margin and padding – every time I think I remember it right, I’m wrong again.&#160; The single most helpful tool for me when I get into these types of problems is the Layout Tool.&#160; It draws a visual representation of elements and their box model – it shows the size of the element (that’s the light blue in the center in this case the 574&#215;32), the padding, the border, the margin and the offset.&#160; All visually in a way that I can see and understand – without having to put “<em>border: 1px solid black;</em>” around my elements to debug them! <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://petelepage.com/blog/wp-content/uploads/2010/06/wlEmoticonsmile1.png" />&#160; </p>
<p>Like the other tools, you can also edit the values in line.&#160; The inline editor is somewhat picky though, and you have to enter the value in just like you would if you were putting it in as an inline style, so you need to use the value, the units and a semi-colon.&#160; For example, if I click on the “32” above and want to change it to 75, I’d need to type “75px;”.&#160; </p>
<h3 style="clear: left">Attributes Tool</h3>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsAttributes.png"><img style="border-right-width: 0px; margin: 0px 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="DevTools-Attributes" border="0" alt="DevTools-Attributes" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsAttributes_thumb.png" width="244" height="149" /></a>Okay, so now we’ve seen all of the styles that are being applied to our page, all the styles that are being applied to the selected element, we’ve been able to visualize the box model for the selected element.&#160; But there are attributes on elements that aren’t style, and we need a tool to be able to view and edit those.&#160; That’s what the Attributes tool is for – it’s not just the style and CSS attributes, but all attributes that are on the selected element.&#160; In this particular case, the Node box indicates we’re looking at an h1 tag, and that h1 tag has only one attribute, which is the class attribute.</p>
<p>To add an attribute to the element, you can click on the plus sign <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="DevTools-AttributesEditor" border="0" alt="DevTools-AttributesEditor" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsAttributesEditor.png" width="125" height="29" />, it then moves the focus to the table, and provides you with a drop down list of all of the attributes that you can set for that element.&#160; You’ll likely notice some attributes like “<em>background (css)</em>” – those attributes will be set as inline style attributes for the selected element.</p>
<h2>HTML Editing with Internet Explorer Developer Tools</h2>
<p>Well, that wraps up this post, hopefully you found it useful!&#160; I’ll be back soon with another post covering the CSS Editing tools, and another for JavaScript!&#160; </p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/xo8sUKuakUI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/internet-explorer-developer-tools-html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/internet-explorer-developer-tools-html/</feedburner:origLink></item>
		<item>
		<title>Top 10 Design Mistakes: #9</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/X6llskQQqDE/</link>
		<comments>http://petelepage.com/blog/2010/06/top-10-design-mistakes-9/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 20:58:22 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/top-10-design-mistakes-9/</guid>
		<description><![CDATA[Continuing my series of top web design mistakes that are often made by web developers, lets dive into number 9.
#9 – Hansel &#38; Gretel would need bread crumbs to find their way!
Have you ever visited a site where you’re not quite sure what you’re supposed to do once you land on the site?  Or that as  [...]]]></description>
				<content:encoded><![CDATA[<p>Continuing my series of top web design mistakes that are often made by web developers, lets dive into number 9.</p>
<h1>#9 – Hansel &amp; Gretel would need bread crumbs to find their way!</h1>
<p>Have you ever visited a site where you’re not quite sure what you’re supposed to do once you land on the site?  Or that as your surfing around, without using the back button in your browser, you can’t get back to where you were before?</p>
<p>There are a couple of ways to look at this when you think about building navigation on your sites.</p>
<ul>
<li>What are the actions you want visitors or users of your site to take?</li>
<li>What’s the work flow for what they’re going to need to do?</li>
<li>If there’s something you want them to read or learn about, are you making that easy to find?</li>
<li>Is the navigation around your site easy to use and easy to find?</li>
</ul>
<p>Are you making those options easy for them to find and accomplish?</p>
<h2>The Offenders</h2>
<p><a title="http://lesailes.hermes.com/us/en/" href="http://lesailes.hermes.com/us/en/"><strong>http://lesailes.hermes.com/us/en/</strong></a></p>
<p><a href="http://lesailes.hermes.com/us/en/" target="_blank"><img class="wlDisabledImage" style="margin: 0px 5px 0px 0px; display: inline; border: 0px;" title="Hermes" src="http://petelepage.com/blog/wp-content/uploads/2010/06/Hermes.png" border="0" alt="Hermes" width="484" height="364" align="left" /></a></p>
<p>Now maybe the problem is that I’m not exactly the target audience for Hermes, about the only thing I know about them is from The Devil Wears Prada, and that they make silk scarves, but I’m sure they do more than that.  So I figured I’d visit their site to see if I could learn more.  When the site loads, it shows me a really pretty Flash experience, and then there’s a whole bunch of tiles that I think I’m supposed to click on, but once I do, I don’t know what the actions that I’m supposed to take are.  After spending some time on the site, I really don’t know anything more about Hermes than I did before!  Give it a shot, try clicking on the any of the tiles, what are you supposed to do?</p>
<p><a title="http://www.genicap.com/Site/" href="http://www.genicap.com/Site/"><strong>http://www.genicap.com/Site/</strong></a></p>
<p><a href="http://www.genicap.com/Site/" target="_blank"><img class="wlDisabledImage" style="margin: 0px 0px 0px 5px; display: inline; border: 0px;" title="Genicap" src="http://petelepage.com/blog/wp-content/uploads/2010/06/Genicap.png" border="0" alt="Genicap" width="484" height="364" align="right" /></a>A friend of mine emailed me a while ago with with a link to this site.  His question to me what what they heck does this company do?  We both spent way too much time trying to understand the point of the site, what are they trying to sell or do?</p>
<p>There’s a bunch of text at the bottom of the screen that talks about some stuff that I don’t really understand, and the image tiles across the page, while pretty don’t really help me understand what they do.  As it turns out, this company makes ray tracing tools, but I can’t find any way to purchase or learn more about their tools!</p>
<h2>Best Practice Suggestions</h2>
<ul>
<li>Figure out the actions you want users to take when they visit your site, do you make those actions easy to find and easy to accomplish?</li>
<li>Make it easy to learn about you’re the point of your site – put the mission statement or other important information on the home page of your site.</li>
<li>Before starting to design your site, create a consistent navigation plan that you can implement across your site.  Make it easy for folks to find what they’re looking for without having to rely on search to find what they want.</li>
</ul>
<h2>Summary</h2>
<p>If you don’t have a good understanding of what you want your visitors to do or if you make it hard to find, users aren’t going to be able to do it.  The navigation on your site needs to be consistent, and easy to follow.</p>
<p><strong>Don’t Forget:</strong> If I pick on your website, I apologize! It’s meant as a learning opportunity for both of us, and I’m happy to help you move from my offending list, to my best practices list! I’ve only shared a few of my favorites in this blog post, and there are plenty more out there! What are some of your favorites? Leave your favorite offending sites in the your comments! For designers who may be reading, I’d love to hear your thoughts and comments! What bugs you, what makes your life hard when working with web developers?</p>
<p><strong>[UPDATE 06/21/2010 9:34am PST]</strong> As I was reading my favorite blogs this morning, I came across a post about <a href="http://www.1stwebdesigner.com/development/usability-ux-pitfalls-howto-avoid/" target="_blank">9 Usability and UX Pitfalls, and How To Avoid Them</a> and one of the sites they listed, was the Hermes site &#8211; looks like I&#8217;m not the only one to not get it!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/X6llskQQqDE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/top-10-design-mistakes-9/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/top-10-design-mistakes-9/</feedburner:origLink></item>
		<item>
		<title>Top 10 Design Mistakes: #10</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/PON0G79YSyo/</link>
		<comments>http://petelepage.com/blog/2010/06/top-10-design-mistakes-10/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 06:39:11 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/?p=2210</guid>
		<description><![CDATA[As promised, I&#8217;m going to start my series on (as my friend Sarah called it), &#34;10 Things I Hate About Your Website&#34;. And in reality, I admit to be guilty of many of these, so really I think I should call it &#34;10 Things I Hate About My Websites&#34;.&#160;&#160; This series is aimed at web developers who often find  [...]]]></description>
				<content:encoded><![CDATA[<p>As promised, I&#8217;m going to start my series on (as my friend Sarah called it), &quot;10 Things I Hate About Your Website&quot;. And in reality, I admit to be guilty of many of these, so really I think I should call it &quot;10 Things I Hate About My Websites&quot;.&#160;&#160; This series is aimed at web developers who often find themselves having to do some design work, whether it&#8217;s just that little bit here and there, or you&#8217;re the only web person at your company this applies to you!</p>
<p>I consider myself a web developer &#8211; not a web designer. I know when a site on the web looks good, and I know when a site has kick butt usability. But, for me to accomplish both of those things on a website, probably not something I do well every time.</p>
<p>And with that, let&#8217;s jump in to number 10&#8230;</p>
<h1>#10 &#8211; Word Writes Better Code Than Me!</h1>
<p>Yep! As web developers, sometimes we focus too much on getting the job done and adding that extra cool feature instead of focusing on the code and the usability. When we write non-web code, it has to be compiled, and there&#8217;s a level of verification before it&#8217;s run, but that&#8217;s not the case for the web. You put in online, and the the browser runs it &#8211; even if there are errors in our code.</p>
<p>Sometimes, the errors in the code aren&#8217;t our fault! When I present this session with a live audience, I always ask how many folks are using a content management system, and on average about 50% of people are. When that&#8217;s the case, you can&#8217;t guarantee how the code will be spit out? Did the person who last edited that one box close their tags right, did they use the rich editor, or did they hand code their HTML after reading HTML for Dummies?</p>
<p>Now, don&#8217;t get me wrong &#8211; I personally don&#8217;t believe that my code has to pass at 100% on any of the W3C validation suites. I do believe that it should be close &#8211; 1, 2, 3, maybe 5 errors; that I can deal with. If there are more than that, I have to ask myself what&#8217;s wrong here? It&#8217;s going to make dealing rendering issues a real pain in the butt!</p>
<h2>The Offenders</h2>
<p><strong><a href="http://continental.com">http://continental.com        <br /><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="Continental" border="0" alt="Continental" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/Continental1.png" width="479" height="303" /></a></strong>I&#8217;m a Continental flyer, I really love the airline and have had nothing but great experiences flying them, heck, I have often been known to fly out of my way to fly them! So, it kind of pains me to put them on my list of offenders, but hey, they&#8217;re an airline, not a web design shop and I can&#8217;t get too upset at them for their HTML. Their website from a design and UI perspective seems pretty good &#8211; it&#8217;s super functional, I can find what I&#8217;m looking for, get done what I need to do, and do it all pretty quickly. Seems like a good site on the surface.</p>
<p>&#160;</p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/W3CContinental1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="W3CContinental" border="0" alt="W3CContinental" align="right" src="http://petelepage.com/blog/wp-content/uploads/2010/06/W3CContinental_thumb1.png" width="479" height="303" /></a>But let&#8217;s try running the <a href="http://validator.w3.org/check?verbose=1&amp;uri=http%3a%2f%2fwww.continental.com%2fweb%2fen-US%2fdefault.aspx" target="_blank">W3C HTML validator on the Continental web site</a>. Normally I can deal with a couple of errors, but as of the time I wrote this blog post, there are <strong>2050 errors</strong>, and if I refresh the site, the number changes!</p>
<p>That is absolutely going to make site maintenance very difficult, or trying to find out why my design isn&#8217;t looking quite like I expect &#8211; almost impossible!</p>
<h2>Best Practice Suggestions</h2>
<ul>
<li>Use the W3C Validators &#8211; <a href="http://validator.w3c.org">http://validator.w3c.org</a> to see how your code it outputting and if it would pass a “compiler” if it existed on the web. </li>
<li>If you&#8217;ve got non-web folk putting stuff online, get them trained, or put systems in place so that they can&#8217;t edit the HTML and that the tools they&#8217;re using are spitting out correct HTML </li>
<li>Be aware of your surroundings! Where is your code going to go, and how is it going to get used? That snipped you just typed, do all the tags close? Is it going into a proper container type? How is it getting used? </li>
</ul>
<h2>Summary</h2>
<p>Keeping your code clean and professional is important &#8211; you may be the person who has to update this in 6, 12 or 18 months, but it may be someone else. Leave a legacy that you want someone to respect you for afterwards. Having messy code is going to make it maintenance near impossible! It may take some extra work in the short term, but will certainly pan out in the long term!</p>
<p><strong>PS:</strong> If I pick on your website, I apologize! It&#8217;s meant as a learning opportunity for both of us, and I&#8217;m happy to help you move from my offending list, to my best practices list! I&#8217;ve only shared a few of my favorites in this blog post, and there are plenty more out there! What are some of your favorites? Leave your favorite offending sites in the your comments! For designers who may be reading, I&#8217;d love to hear your thoughts and comments! What bugs you, what makes your life hard when working with web developers?</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/PON0G79YSyo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/top-10-design-mistakes-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/top-10-design-mistakes-10/</feedburner:origLink></item>
		<item>
		<title>Internet Explorer: Understanding Compat Features For Developers</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/EfOGK9_2-M4/</link>
		<comments>http://petelepage.com/blog/2010/06/internet-explorer-understanding-compat-features-for-developers/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 21:03:00 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Compat]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[X-UA-Compatible]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/internet-explorer-understanding-compat-features-for-developers/</guid>
		<description><![CDATA[The IE Engineering team posted a great blog post on the IE Blog yesterday about the compatibility features of Internet Explorer 9 that is really worth checking out – it explains in great depth about the different modes that Internet Explorer offers as well as provides some best practices for how to  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspx"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="IE9DocMode" border="0" alt="IE9DocMode" align="left" src="http://petelepage.com/blog/wp-content/uploads/2010/06/IE9DocMode.png" width="244" height="184" /></a>The IE Engineering team posted a great blog post on the <a href="http://blogs.msdn.com/ie">IE Blog</a> yesterday about the compatibility features of Internet Explorer 9 that is really worth checking out – it explains in great depth about the different modes that Internet Explorer offers as well as provides some best practices for how to make sure your code works exactly the way <strong>you</strong> expect it to!</p>
<p><a href="http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspx" target="_blank">IE’s Compatibility Features for Site Developers</a></p>
<p>They even went so far as to create a flow chart type diagram that shows how Internet Explorer chooses which rendering engine to use when displaying a page, both as a png (which I’ve included below) and as <a href="http://ieblog.members.winisp.net/misc/How%20IE9%20Determines%20Document%20Mode.svg" target="_blank">SVG</a> diagram! </p>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/IE9DocModeFlowChart.png"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" class="wlDisabledImage" title="IE9DocModeFlowChart" border="0" alt="IE9DocModeFlowChart" src="http://petelepage.com/blog/wp-content/uploads/2010/06/IE9DocModeFlowChart_thumb.png" width="504" height="771" /></a></p>
<p>And in other cool news, the product management team (the team I’m on) also started a blog this week, Ryan Gavin posted the first post and it should be an interesting read.&#160; If you’re a web designer or web developer, you’ll likely want to stick with the IE Engineering Blog, but pop over to our other blog once in a while, it should make for some interesting reading about things that aren’t quite engineering related!&#160; </p>
<p><a title="http://windowsteamblog.com/ie/" href="http://windowsteamblog.com/ie/">http://windowsteamblog.com/ie/</a></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/EfOGK9_2-M4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/internet-explorer-understanding-compat-features-for-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/internet-explorer-understanding-compat-features-for-developers/</feedburner:origLink></item>
		<item>
		<title>Web Site Performance Resources</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/1gUidCoh39s/</link>
		<comments>http://petelepage.com/blog/2010/06/web-site-performance-resources/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 17:12:34 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Fast]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/web-site-performance-resources/</guid>
		<description><![CDATA[At TechEd last week, I presented a session that covered 20 Tips and Tricks for Writing Fast Web Applications.&#160; A couple of folks asked for more resources and where they could find more info, and I figured I’d share some of it here more publically.
I’d highly recommend checking out Steve Souders’  [...]]]></description>
				<content:encoded><![CDATA[<p>At TechEd last week, I presented a session that covered 20 Tips and Tricks for Writing Fast Web Applications.&#160; A couple of folks asked for more resources and where they could find more info, and I figured I’d share some of it here more publically.</p>
<p>I’d highly recommend checking out <a href="http://stevesouders.com/" target="_blank">Steve Souders</a>’ two books:</p>
<p><a href="http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309/ref=ntt_at_ep_dpi_1" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="HighPerf" border="0" alt="HighPerf" src="http://petelepage.com/blog/wp-content/uploads/2010/06/HighPerf.jpg" width="240" height="240" /></a><a href="http://www.amazon.com/Even-Faster-Web-Sites-Performance/dp/0596522304/ref=ntt_at_ep_dpi_2" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="EvenFaster" border="0" alt="EvenFaster" src="http://petelepage.com/blog/wp-content/uploads/2010/06/EvenFaster.jpg" width="240" height="240" /></a></p>
<p>   In the coming days/weeks, I’ll get some additional details posted about the 20 tips and tricks that I talked about, and how you can make sure you’re using them on your site!  </p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/1gUidCoh39s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/web-site-performance-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/web-site-performance-resources/</feedburner:origLink></item>
		<item>
		<title>Internet Explorer Developer Tools</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/8N3FYkMtQAw/</link>
		<comments>http://petelepage.com/blog/2010/06/internet-explorer-developer-tools/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 07:22:25 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Color Picker]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Profiler]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/internet-explorer-developer-tools/</guid>
		<description><![CDATA[One the the coolest features of Internet Explorer 8 that most developers don’t know about are the build in developer tools.  Think Firebug, except for Internet Explorer, and built by the IE Team, so you don’t have to download anything, install it, or enable it.  Heck, my Mom could bring up the  [...]]]></description>
				<content:encoded><![CDATA[<p>One the the coolest features of Internet Explorer 8 that most developers don’t know about are the build in developer tools.  Think Firebug, except for Internet Explorer, and built by the IE Team, so you don’t have to download anything, install it, or enable it.  Heck, my Mom could bring up the developer tools if she really wanted!  Over the next week or so, I’m going to do a short series on the Internet Explorer Developer Tools and what you can do with them.  Since Internet Explorer 9 is still in the “Platform Preview”, I’m going to focus on Internet Explorer 8, though there are some cool new IE9 tools, I’ll save those for another day.</p>
<h2 style="clear:left;">Starting the Developer Tools</h2>
<p>There are two ways you can open the IE Developer Tools, you can either hit F12, or under the Tools menu icon, you can choose “Developer Tools”.  Both of these will open the Developer Tools, which you can either run in a separate window, or docked to the bottom of your browser window as I’ve shown below.</p>
<p><img class="wlDisabledImage" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="DevTools-HTML" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsHTML.jpg" border="0" alt="DevTools-HTML" width="584" height="439" /></p>
<p>When the Developer Tools open, there are four main tabs that provide the major functionality of the tools</p>
<h2 style="clear:left;">HTML Tab</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsHTML1.jpg"><img class="wlDisabledImage" style="margin: 0px 5px 5px 0px; display: inline; border: 0px;" title="DevTools-HTML" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsHTML_thumb.jpg" border="0" alt="DevTools-HTML" width="244" height="184" align="left" /></a></p>
<p>This tab allows you to see and edit in real time the HTML and applied styles that make up your page as seen by the Internet Explorer DOM.  From here you can move through the DOM either via the tree view on the bottom left, or you can click on the little mouse pointer icon, and grab individual elements.  When you do that, IE automatically takes you to the element you’ve selected.  On the left side of the HTML panel, is another set of tabs, that show the <em>Style</em> and inheritance information for the CSS that’s being applied, an ability to <em>Trace Styles</em>, so you can see what particular style is being applied, and why.  The <em>Layout</em> tab is particularly useful if you’re forgetful like me and mix up margin and padding (for years, I’ve not been able to keep it straight, and every time I think I’m remembering it right, I goof it up again).  Finally the <em>Attributes</em> tab shows the attributes that are on that element.</p>
<h2 style="clear:left;">The CSS Tab</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsCSS.jpg"><img class="wlDisabledImage" style="margin: 0px 5px 5px 0px; display: inline; border: 0px;" title="DevTools-CSS" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsCSS_thumb.jpg" border="0" alt="DevTools-CSS" width="244" height="184" align="left" /></a>Shows you all of the styles that are being pulled down for your site, how they cascade against one another and is useful to view and turn off styles individually or at the entire style level.  Like the HTML tab, you can edit your styles in real time to see how changing properties affects the page.  So if you’re not sure why something isn’t being styled right, this is a great place to look.</p>
<h2 style="clear:left;">The Script Tab</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsScript.jpg"><img class="wlDisabledImage" style="margin: 0px 5px 5px 0px; display: inline; border: 0px;" title="DevTools-Script" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsScript_thumb.jpg" border="0" alt="DevTools-Script" width="244" height="184" align="left" /></a>Like any good development tools, debugging is a vital component of understanding why something isn’t working, or why you’re getting that a 3 instead of a 2.  The Internet Explorer 8 developer tools let you do everything that you’d expect in a full-fledge debugger (it’s almost as powerful as the debugging tools in VS2010 – not quite, but pretty good).  Like the HTML tab, there are several tabs on the right side of this window.  There’s the <em>Console</em> tab, so you can output to the console window if you’ve added debugging code to your scripts.  The <em>Break Points</em> tab, to help you be able to apply break points and debug into your code on specific lines.  There’s also the <em>Local</em> and <em>Watched Variables</em> tab so you can see what’s happening to your variables as your applications is running.  And finally the <em>Call Stack</em> tab to dig into the call stack.</p>
<h2 style="clear:left;">The Profiler Tab</h2>
<p><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsProfiler.jpg"><img class="wlDisabledImage" style="margin: 0px 5px 0px 0px; display: inline; border: 0px;" title="DevTools-Profiler" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevToolsProfiler_thumb.jpg" border="0" alt="DevTools-Profiler" width="244" height="184" align="left" /></a>This is the one that I think is probably the coolest feature of the Internet Explorer 8 Developer Tools, and that’s the built in code profiler.  Want to know what’s happening, what functions are being called, why things are taking longer than you expect, or not getting called, the Profile is your guide to what’s going on.  Once you turn the Profiler on, you can run your code and IE will keep track of the number of times every method is called the length of time spend in that method (<em>Exclusive Time</em>), the length of time spend in that method and any methods called by that method (<em>Inclusive Time</em>), as well as where that method is.</p>
<h2 style="clear:left;">Other Useful Developer Tool Features</h2>
<p>There’s a couple other things that I want to highlight in this Internet Explorer Developer Tools introduction, that I think are really useful when I’m working on building a new site, or editing an existing one.</p>
<h3 style="clear:left;">Browser Mode and Document Mode</h3>
<p>Internet Explorer 8 shipped with two rendering engines, the Internet Explorer 7 rendering engine, and the Internet Explorer 8 rendering engine.  By default, as long as you’ve include the right DOCTYPE switch, Internet Explorer 8 will use the Internet Explorer 8 rendering engine.  But you can’t always guarantee your users are going to be using IE8, and you want to see how your site will look with the IE7 rendering engine.</p>
<p><img class="wlDisabledImage" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="DevTools2" src="http://petelepage.com/blog/wp-content/uploads/2010/06/DevTools2.jpg" border="0" alt="DevTools2" width="454" height="175" /></p>
<h4 style="clear:left;">Document Mode</h4>
<p>Document Mode allows you to manually choose which rendering engine you want IE to render the page with; choosing the Internet Explorer 8 Standards mode uses the IE8 rendering engine, Internet Explorer 7 Standards Mode uses the IE7 rendering engine, or Quirks Mode uses the quirky, IE5.5 rendering engine. Changing the Document Mode does NOT change the user agent string that is sent to the server and is primarily used for testing and seeing how your site will look in IE7.</p>
<h4 style="clear:left;">Browser Mode</h4>
<p>Browser Mode changes both the Document Mode, and the User Agent string, which allows Internet Explorer 8 to lie about who it says it is.</p>
<ul>
<li><em><strong>“Internet Explorer 8”</strong></em> uses the IE8 rendering engine and the UA string tells the server that the browser is IE8 by including the “MSIE 8.0” and “Trident/4.0” tokens in the User Agent String.</li>
<li><strong><em>”Internet Explorer 8 Compatibility Mode”</em></strong> uses the IE7 rendering engine and the UA string tells the server that it’s IE7, but if you know better, it’s really IE8.  It does this by sending the “MSIE 7.0” token along with the “Trident/4.0” token.  That way, if the server is looking for “MSIE 7.0” and you get the expected IE7 behavior.</li>
<li><strong><em>”Internet Explorer 7”</em></strong> uses the IE7 rendering engine and the UA string tells the server that the browser is IE7, it doesn’t include the “Trident/4.0” token, only the “MSIE 7.0”.</li>
</ul>
<p>If you want to see what your browser is reporting for it’s user agent string, check out <a title="http://petelepage.com/samples/uastring.aspx" href="http://petelepage.com/samples/uastring.aspx">http://petelepage.com/samples/uastring.aspx</a>.  Then open the Developer Tools and try changing the Browser Mode and Document Mode to see how the page renders in different ways.</p>
<h3 style="clear:left;">Color Picker</h3>
<p>Ever wonder what color is on another site, and don’t want to dig into their CSS to find it, or don’t remember what color you picked, the color picker is a little eye dropper tool that lets you click on a particular part of the page and it gives you the HEX color value, so you can just plug it right in where you need it.  You can find the Color Picker under the Tools menu!</p>
<h2 style="clear:left;">More To Come!</h2>
<p>In my future posts, I’ll dive deeper into each of the above features, and how you can use them to debug your websites!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/8N3FYkMtQAw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/internet-explorer-developer-tools/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/internet-explorer-developer-tools/</feedburner:origLink></item>
		<item>
		<title>About: DOM Storage</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/lzIGSkxbGwM/</link>
		<comments>http://petelepage.com/blog/2010/06/about-dom-storage/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 00:30:46 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[localStorage]]></category>
		<category><![CDATA[sessionStorage]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/about-dom-storage/</guid>
		<description><![CDATA[One of my sessions at TechEd 2010 this year was about advanced standards support in Internet Explorer 8.  The DOM Storage API (which used to be part of the HTML5 Spec but are now in their own spec), were introduced to Internet Explorer in version 8, and provide methods for storing data on the  [...]]]></description>
				<content:encoded><![CDATA[<p>One of my sessions at TechEd 2010 this year was about advanced standards support in Internet Explorer 8.  The DOM Storage API (which used to be part of the HTML5 Spec but are now in their own spec), were introduced to Internet Explorer in version 8, and provide methods for storing data on the client in a secure manner using the Document Object Model (DOM). DOM Storage allows you to store name value pairs, and unlike cookies, you don’t need to round-trip the data with every request.  The other big difference is the quantity of data that you can store.  Cookies are limited to about 4k, and 20 name value pairs, whereas DOM Storage allows you to store up to 10 megabytes, with no effective limit on the number of name value pairs.  Data in the DOM Store also doesn’t expire, and is available unless the user clears their browser.</p>
<p>There are two types of storage, <a href="http://msdn.microsoft.com/en-us/library/cc197020(VS.85).aspx">sessionStorage</a> and <a href="http://msdn.microsoft.com/en-us/library/cc848902">localStorage</a>.  Session Storage is primarily intended for scenarios where the user is carrying out a single transaction.  Information that is put in the store is available across all windows tabs and frames for the entire session the browser stays open.  Local Storage persists across sessions, so even after closing and reopening the browser, the data is still available.</p>
<h3>Using The Storage APIs</h3>
<p>The Storage object use expando properties as the key.  As mentioned above, the data is name/value pairs, and only supports strings.  If you want to store data other than strings, you need to convert before storing it.  If you want to store binary data like images, Flash, Silverlight files and so forth, you can use <em>datauri</em> to display it on the screen.</p>
<h3>Session Storage</h3>
<p>As I mentioned already, session storage is great for circumstances where you need to store something on the machine only for that session, for example you might want to locally cache certain data so you don’t have to keep downloading it as the user moves through your site.  You might also use it for storing inputs the user may have provided on a previous page – maybe shopping cart information, or what comments a user has already seen.</p>
<div class="codeSample">sessionStorage.keyName = &#8220;hello&#8221;;<br />
var result = sessionStorage.keyName;</div>
<h3>Local Storage</h3>
<p>Local Storage allows you to store information that goes beyond the session.  I might want to cache some of my user settings locally, so I don’t have to look them up every single time.  For example, I might store the users preferred name, their preferred color scheme and their favorite stocks, along with some historical data about those stocks.  That way, when the user arrives on my site, we don’t have to query that every single time.</p>
<div class="codeSample">localStorage.keyName = &#8220;Hi!&#8221;;<br />
var local = localStorage.keyName;</div>
<h3>Storage Events</h3>
<p>Internet Explorer fires events when data is either stored or updated, so that you can be sure information is synchronized between multiple instances of the browser.  The <a href="http://msdn.microsoft.com/en-us/library/cc197059(VS.85).aspx">onstorage</a> is fired in a document when the storage area changes, and the <a href="http://msdn.microsoft.com/en-us/library/cc288674(VS.85).aspx">onstoragecommit</a> fires when Internet Explorer writes the localStorage data to disk.</p>
<h3>Security and Privacy Implications of DOM Storage</h3>
<p>Data in the local store is only available to sites within the domain in which they&#8217;re called.  For example, if <a href="http://nocommonground.com">NoCommonGround.com</a> tries to access the localStorage data from PeteLePage.com, it will fail.  But, <a href="http://www.petelepage.com">www.PeteLePage.com</a> can access anything from <a href="http://petelepage.com">PeteLePage.com</a>.  There also isn&#8217;t any way to restrict the data by path, so anywhere site within your domain will be able to access from the data store of your domain.  Even if you use key names that are hard to guess, there are APIs that allow you to enumerate the keys.</p>
<h3>Additional Resources</h3>
<p>You can find lots more information about DOM Storage in the following places:</p>
<ul>
<li><a href="http://www.w3.org/TR/html5/">W3C HTML5 Specification</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/cc197062(VS.85).aspx">MSDN DOM Store Details</a></li>
</ul>
<h3>Browser Support*</h3>
<table>
<thead>
<tr>
<th width="50%" valign="top">Browser</th>
<th width="25%" valign="top">Version Added</th>
<th width="25%" valign="top">Additional Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top">Internet Explorer</td>
<td valign="top">8.0</td>
<td valign="top"></td>
</tr>
<tr>
<td valign="top">Firefox</td>
<td valign="top">3.0</td>
<td valign="top"></td>
</tr>
<tr>
<td valign="top">Chrome</td>
<td valign="top">3.0</td>
<td valign="top"></td>
</tr>
<tr>
<td valign="top">Safari</td>
<td valign="top">4.0</td>
<td valign="top"></td>
</tr>
<tr>
<td valign="top">Opera</td>
<td valign="top">10.5</td>
<td valign="top"></td>
</tr>
</tbody>
</table>
<p>*From <a href="http://caniuse.com">CanIUse.com</a></p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/lzIGSkxbGwM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/about-dom-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/about-dom-storage/</feedburner:origLink></item>
		<item>
		<title>IE9: A Lap Around For Developers</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/IhMEPKES2Uk/</link>
		<comments>http://petelepage.com/blog/2010/06/ie9-a-lap-around-for-developers/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 02:23:00 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[PP2]]></category>
		<category><![CDATA[TechEd]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/ie9-a-lap-around-for-developers/</guid>
		<description><![CDATA[First, a disclaimer: The code in the slides for this demo isn’t perfect, in fact, it’s a little messy, but I wanted to get the information that I shared with folks out as quickly as I could, and that means I haven’t cleaned it up, or used any kind of best practices to get it to look nice!&#160; Like the  [...]]]></description>
				<content:encoded><![CDATA[<p style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; margin: 10px; padding-left: 5px; padding-right: 5px; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"><em><font color="#ff0000">First, a disclaimer:</font> The code in the slides for this demo isn’t perfect, in fact, it’s a little messy, but I wanted to get the information that I shared with folks out as quickly as I could, and that means I haven’t cleaned it up, or used any kind of best practices to get it to look nice!&#160; Like the </em><a href="http://ietestdrive.com"><em>IE Test Drive</em></a><em> site, it’s more meant to show some neat stuff off, instead of provide coding best practices.</em></p>
<p>TechEd 2010 in New Orleans is almost a wrap, I think all that’s left is the attendee party (and that’s taking place right now), the last session are over, the TLC stations are closed and folks are starting to head home.&#160; My flight leaving in just over 12 hours – 6 hours of flying and time to get caught up on email.&#160; It was awesome to meet so many new folks and see the excitement around Internet Explorer 9.&#160; </p>
<p>One of the sessions I presented at TechEd this year was the IE9: A Lap Around For Developers.&#160; It was an overview of all the new features and support that we’ve announced and lots of live demos.&#160; In fact, it was entirely a demo.&#160; I created a simple AJAX application that filled in a DIV with “slides” that were actually HTML snippets.&#160; </p>
<p>I focused on three areas in my presentation…</p>
<ul>
<li><b>Performance</b>
<ul>
<li>Performance improvements across all systems, not just the JavaScript engine. </li>
<li>The new JavaScript engine </li>
</ul>
</li>
<li><b>Same Mark Up</b>
<ul>
<li>How the team engineering team designs, develops and tests the browser </li>
<li>How the team works with the W3C to ensure that the same mark-up you write works in all browsers </li>
<li>The announced features, including demos and code (I didn’t announce anything, I’ll save that for the <a href="http://blogs.msdn.com/ie">IE Blog</a>!) </li>
</ul>
</li>
<li><b>GPU Accelerated HTML</b>
<ul>
<li>Why acceleration matters, and what it&#8217;s doing </li>
<li>How hardware acceleration will make your sites work better, without any changes to your code </li>
</ul>
</li>
</ul>
<p>As part of one of the demos, I’m using CSS3 Media Queries and set the page to only display when the browser window is between 1200px and 1300px wide.&#160; If your browser window isn’t wide enough, it will show a different set of CSS that sets most of the content to display:none;.</p>
<p>You can find the deck online at <a title="http://petelepage.com/presentations/teched2010/ie9pp2/" href="http://petelepage.com/presentations/teched2010/ie9pp2/">http://petelepage.com/presentations/teched2010/ie9pp2/</a></p>
<p>As I said above, the code isn’t perfect, and I haven’t tested it in other browsers.&#160; I’ll put money down that if things don’t work quite right,it a problem with my html.</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/IhMEPKES2Uk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/ie9-a-lap-around-for-developers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/ie9-a-lap-around-for-developers/</feedburner:origLink></item>
		<item>
		<title>20 Tips and Tricks For Writing Fast Web Applications</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/oDC1akRFFPE/</link>
		<comments>http://petelepage.com/blog/2010/06/20-tips-and-tricks-for-writing-fast-web-applications/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 18:30:00 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[Fast]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[TechEd]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/20-tips-and-tricks-for-writing-fast-web-applications/</guid>
		<description><![CDATA[I’m about 30 minutes from walking on stage to present my last session here at TechEd 2010 in New Orleans and I wanted to share this presentation early, just in case the session room fills up and folks can’t make it in or for those of you who weren’t able to make it.  If you’re a TechEd attendee,  [...]]]></description>
				<content:encoded><![CDATA[<p>I’m about 30 minutes from walking on stage to present my last session here at <a href="http://northamerica.msteched.com">TechEd 2010 in New Orleans</a> and I wanted to share this presentation early, just in case the session room fills up and folks can’t make it in or for those of you who weren’t able to make it.  If you’re a TechEd attendee, the slides are up on the Schedule Builder, otherwise, you can find my deck <a href="http://petelepage.com/presentations/decks/TE2010-WEB05-INT.pptx">here</a> [8meg PPTX].</p>
<p>The Internet Explorer engineering team spends a lot of time working to understand what developers and doing when building their websites, where the bottle necks are (both in the browser and in the code that developers write).  With all of the information that they gathered, they built set of 20 tips and tricks that will help your site run faster, and more efficiently.  While the research they did used Internet Explorer as the base, almost all of these tips and tricks apply to all browsers.</p>
<p>Jason Weber presented these tips and tricks at MIX2010 this year – the session web page is at <a title="http://live.visitmix.com/MIX10/Sessions/CL29" href="http://live.visitmix.com/MIX10/Sessions/CL29">http://live.visitmix.com/MIX10/Sessions/CL29</a> and you can also download the <a href="http://ecn.channel9.msdn.com/o9/mix/10/pptx/CL29.pptx">slides</a>, or the video in <a href="http://ecn.channel9.msdn.com/o9/mix/10/mp4/CL29.mp4">MP4</a>, <a href="http://ecn.channel9.msdn.com/o9/mix/10/wmv/CL29.wmv">Windows Media Format</a> or <a href="http://ecn.channel9.msdn.com/o9/mix/10/wmv-hq/CL29.wmv">High Quality Windows Media Format</a>.  It runs about 80 minutes and should be required watching for every developer out there I think. I know I learned a few things and I think my site breaks some of the best practices that I’ve got listed below!  (I guess I’ve got some work to do! <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://petelepage.com/blog/wp-content/uploads/2010/06/wlEmoticonsmile.png" alt="Smile" />)</p>
<p>Without any further ado, I present to you…</p>
<h2>20 Tips &amp; Tricks To Improve Your Website Performance</h2>
<ol>
<li>Ensure server side compression is enabled on “text” like files</li>
<li>Use conditional requests</li>
<li>Provide cacheable content</li>
<li>Minify your JavaScript</li>
<li>Don’t scale images (I’m really guilty of this one)</li>
<li>Use image sprites</li>
<li>Link JavaScript at the bottom of your file, and avoid inline JavaScript</li>
<li>Add the “defer” tag when you have to link to JavaScript at the top of your page</li>
<li>Link Style Sheets at the top of your page</li>
<li>Avoid using @import</li>
<li>Minimize Walking Look Up Chain</li>
<li>Cache Function Pointers</li>
<li>Use the Native JSON object</li>
<li>Remove duplicate scripts</li>
<li>Minimize DOM interactions</li>
<li>Use efficient DOM Methods</li>
<li>Use querySelectorAll for groups</li>
<li>Only send required styles</li>
<li>Simplify your selectors</li>
<li>Minimize page layouts</li>
</ol>
<p>PS: If you want a little laugh, go to the <a href="http://northamerica.msteched.com">TechEd</a> site, and look at my <a href="http://NorthAmerica.MSTechEd.com/featuredspeakers?fbid=pfq8PhbInf4&amp;mtag=mbar&amp;site_id=email#Pete_LePage">bio</a> – it wasn’t quite supposed to read like that <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://petelepage.com/blog/wp-content/uploads/2010/06/wlEmoticonsmile.png" alt="Smile" /></p>
<p><strong>[UPDATED 6/10/10 1:25pm PST]</strong> Fixed the link to the slides, sorry about that!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/oDC1akRFFPE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/20-tips-and-tricks-for-writing-fast-web-applications/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://ecn.channel9.msdn.com/o9/mix/10/wmv-hq/CL29.wmv" length="327598302" type="video/x-ms-wmv" />
<enclosure url="http://ecn.channel9.msdn.com/o9/mix/10/wmv/CL29.wmv" length="146847179" type="video/x-ms-wmv" />
<enclosure url="http://ecn.channel9.msdn.com/o9/mix/10/mp4/CL29.mp4" length="60018123" type="video/mp4" />
		<feedburner:origLink>http://petelepage.com/blog/2010/06/20-tips-and-tricks-for-writing-fast-web-applications/</feedburner:origLink></item>
		<item>
		<title>Browser Speed: It’s Not All About JavaScript</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/M7opSaXAmtU/</link>
		<comments>http://petelepage.com/blog/2010/06/browser-speed-its-not-all-about-javascript/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 18:14:55 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/browser-speed-its-not-all-about-javascript/</guid>
		<description><![CDATA[On Tuesday, I presented my IE9: A Lap Around for Developers session here at TechEd and it went really well, it was a lot of fun, and the “slide” deck that I presented worked well!&#160; As it turns out, Joab Jackson, a reporter for the IDG News Service was in the audience and wrote a really great  [...]]]></description>
				<content:encoded><![CDATA[<p>On Tuesday, I presented my <em>IE9: A Lap Around for Developers</em> session here at TechEd and it went really well, it was a lot of fun, and the “slide” deck that I presented worked well!&#160; As it turns out, <a href="http://twitter.com/Joab_Jackson">Joab Jackson</a>, a reporter for the IDG News Service was in the audience and wrote a really great article that ran on <a href="http://www.pcworld.com">PC World</a> about how browser speed isn’t just dependant on JavaScript, but is affected by all parts of the browser!</p>
<p><a title="http://www.pcworld.com/article/198396/microsoft_browser_speed_not_all_about_javascript.html" href="http://www.pcworld.com/article/198396/microsoft_browser_speed_not_all_about_javascript.html">http://www.pcworld.com/article/198396/microsoft_browser_speed_not_all_about_javascript.html</a></p>
<p>I’ll be posting my slides later this afternoon – just want to finish my last presentation of TechEd!</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/M7opSaXAmtU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/browser-speed-its-not-all-about-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/browser-speed-its-not-all-about-javascript/</feedburner:origLink></item>
		<item>
		<title>How To: Create or Edit SVG Graphics</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/ElnSqWMq7HI/</link>
		<comments>http://petelepage.com/blog/2010/06/how-to-create-or-edit-svg-graphics/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 16:01:51 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/06/how-to-create-or-edit-svg-graphics/</guid>
		<description><![CDATA[One of the cool new features of Internet Explorer 9 is support for SVG 1.1 Second Edition, Full.  A bit of a mouthful but cool none the less.
A Quick Intro To Graphics Types
There are two different types of graphics vector graphics and rasterized graphics.  I’m sure there’s an official definition  [...]]]></description>
				<content:encoded><![CDATA[<p>One of the cool new features of Internet Explorer 9 is support for <a href="http://dev.w3.org/SVG/profiles/1.1F2/publish/">SVG 1.1 Second Edition</a>, Full.  A bit of a mouthful but cool none the less.</p>
<h3>A Quick Intro To Graphics Types</h3>
<p>There are two different types of graphics vector graphics and rasterized graphics.  I’m sure there’s an official definition on Wikipedia or other place online, but the best way to think about them is that rasterized images are those that define pixels, and not how they relate to one-another.  For example a photograph or image that has a lot of intricate detail and few hard, solid lines optimally would be a rasterized image.  Vector graphics define images based on lines and shapes, where different items are related to one another based on size, shape and location.  Vector images work really well for images that are more line based, like logos, organizational charts, and drawings that don’t have very complex textures, backgrounds and so forth.</p>
<p>Another important difference is that vector graphics are typically described via a plain-text XML description.  If you were to try to open a rasterized image in a text editor, all you’d see is jibberish.</p>
<h3>How To Create or Edit SVG Graphics</h3>
<p>There are several tools available that can help you create or edit SVG images.  Since it’s just XML content you could easily create it in a text editor like notepad, vim or your editor of choice.  The <a href="http://blogs.msdn.com/b/webdevtools/archive/2009/10/06/working-with-svg-files-in-visual-studio-and-visual-web-developer.aspx">Visual Web Developer Tools team created a schema</a> that you can add to Visual Studio 2010 that will make things a bit easier if you want to hand edit your SVG.  Maybe not the most fun way of doing it but certainly one way.</p>
<h4>Installing the Visual Studio 2010 SVG Schema</h4>
<ol>
<li>Download the <a href="http://petelepage.com/blog/wp-content/uploads/2010/06/svg.xsd">SVG.XSD</a> file</li>
<li>Create Schemas folder in your Web site or Web Application project root.</li>
<li>Place downloaded <em><a href="http://petelepage.com/blog/wp-content/uploads/2010/06/svg.xsd">SVG.XSD</a></em> in the Schemas folder.</li>
<li>Create a new XML file and save it with SVG extension, such as <em>svg-test.svg</em>.</li>
<li>Add basic SVG content and save the file, for example<br />
<em><span style="font-family: Consolas;">&lt;svg xmlns=&#8221;http://www.w3.org/2000/svg” width=&#8221;500&#8243; height=&#8221;500&#8243;&gt;<br />
&lt;rect x=&#8221;100&#8243; y=&#8221;100&#8243; width=&#8221;300&#8243; height=&#8221;300&#8243; /&gt;<br />
&lt;/svg&gt;</span> </em></li>
<li>Add new HTML file (say, svg-test.htm) in the root folder and add<br />
<em>&lt;object data=&#8221;svg-test.svg&#8221; type=&#8221;image/svg+xml&#8221; width=&#8221;500&#8243; height=&#8221;500&#8243; /&gt;<br />
</em>to the <em>&lt;body&gt;</em> element. You can also use existing HTML or ASPX page.</li>
<li>Right-click on the svg-test.htm file in Solution Explorer and choose Browse With&#8230;.</li>
<li>Pick an SVG-enabled browser (like IE9PP1 or greater) and click OK. You should see SVG content rendered as below:<br />
<a href="http://petelepage.com/blog/wp-content/uploads/2010/06/svg_in_ie9pp2.png"><img class="wlDisabledImage" style="display: inline; border: 0px;" title="svg_in_ie9pp2" src="http://petelepage.com/blog/wp-content/uploads/2010/06/svg_in_ie9pp2_thumb.png" border="0" alt="svg_in_ie9pp2" width="644" height="484" /></a></li>
<li>Now try typing &lt; in the SVG file. XML editor should now provide you wil intellisense for SVG elements and atributes:<br />
<a href="http://petelepage.com/blog/wp-content/uploads/2010/06/svg_in_vs2010.jpg"><img class="wlDisabledImage" style="display: inline; border: 0px;" title="svg_in_vs2010" src="http://petelepage.com/blog/wp-content/uploads/2010/06/svg_in_vs2010_thumb.jpg" border="0" alt="svg_in_vs2010" width="644" height="399" /></a></li>
</ol>
<h4>Using Adobe Illustrator To Create SVG Files</h4>
<p>Another option is to use Adobe Illustrator to create SVG images.  Once you’ve created your vector drawing in Illustrator you can do a File, Export and save the image as a vector drawing!</p>
<h4>Other Tools</h4>
<p>While I was surfing around, I found a few online tools that would convert rasterized images to vector images.  They seemed to do a decent job, nothing great ,but enough to get me started.  Unfortunately, I don’t remember what they were now, and I haven’t been able to find them  again <img class="wlEmoticon wlEmoticon-sadsmile" style="border-style: none;" src="http://petelepage.com/blog/wp-content/uploads/2010/06/wlEmoticonsadsmile.png" alt="Sad smile" /></p>
<p>What do you use for creating and editing vector graphics?</p>
<p>[Q8UBWMA4HVM8]</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/ElnSqWMq7HI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/06/how-to-create-or-edit-svg-graphics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/06/how-to-create-or-edit-svg-graphics/</feedburner:origLink></item>
		<item>
		<title>Design Mistakes Made By Web Developers</title>
		<link>http://feedproxy.google.com/~r/PeteLePage/~3/SgLvIurpn4c/</link>
		<comments>http://petelepage.com/blog/2010/05/design-mistakes-made-by-web-developers/#comments</comments>
		<pubDate>Mon, 31 May 2010 22:22:00 +0000</pubDate>
		<dc:creator>Pete</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Design & Development]]></category>
		<category><![CDATA[ForMSDNIEDC]]></category>
		<category><![CDATA[TechEd]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://petelepage.com/blog/2010/05/design-mistakes-made-by-web-developers/</guid>
		<description><![CDATA[I mentioned in a previous blog post that I’m doing one of my favorite sessions at TechEd again this year – Top 10 Design Mistakes Made By Web Developers.&#160; I would consider myself a web developer, not so much a web designer.&#160; I can make something that doesn’t look bad, but it’s typically doesn’t  [...]]]></description>
				<content:encoded><![CDATA[<p>I mentioned in a previous blog post that I’m doing one of my favorite sessions at TechEd again this year – Top 10 Design Mistakes Made By Web Developers.&#160; I would consider myself a web developer, not so much a web designer.&#160; I can make something that doesn’t look bad, but it’s typically doesn’t have the same shine that a good web designer can do.&#160; </p>
<blockquote><h3>Top Ten Design Mistakes Made By Web Developers (WEB04-INT)</h3>
<p>We&#8217;ve all seen those sites where it&#8217;s obvious the developer didn&#8217;t consult a designer. There&#8217;s no user experience flow, the colors clash, you don’t quite know what to do on the site. During this session, we take a look at the top mistakes made by Web developers when they don&#8217;t have access to Web designers; and hopefully learn a few techniques for making sure your sites look great!      <br /><em>Monday June 7th, 2010 @ 1:00pm – 2:15pm – Room 350</em></p>
</blockquote>
<p>I feel guilty listing the non-Microsoft sites here because I don’t really want to call anyone out in public, so instead, I’ll share a few of my “favorite” Microsoft sites.&#160; If you make it to my TechEd session, I promise to make you laugh or maybe cry…</p>
<ul>
<li><a title="http://msdn.microsoft.com/en-us/ie/cc405106.aspx" href="http://msdn.microsoft.com/en-us/ie/cc405106.aspx">http://msdn.microsoft.com/en-us/ie/cc405106.aspx</a> – too much content on one page, IMPOSSIBLE! </li>
<li><a title="http://msdn.microsoft.com/en-us/library/ms816327(v=MSDN.10).aspx" href="http://msdn.microsoft.com/en-us/library/ms816327(v=MSDN.10).aspx">http://msdn.microsoft.com/en-us/library/ms816327(v=MSDN.10).aspx</a> – try finding content in here, never an easy task! </li>
<li><a title="http://www.bing.com/" href="http://www.bing.com/">http://www.bing.com/</a> – looking for web master tools?&#160; &lt;cough&gt; Computer says, noooo. </li>
</ul>
<p>What are your favorite sites (either Microsoft or not) that you think think need the help of a good web designer?</p>
<img src="http://feeds.feedburner.com/~r/PeteLePage/~4/SgLvIurpn4c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://petelepage.com/blog/2010/05/design-mistakes-made-by-web-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://petelepage.com/blog/2010/05/design-mistakes-made-by-web-developers/</feedburner:origLink></item>
	</channel>
</rss>
