<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Tiffany B. Brown &#187; html5</title>
	<atom:link href="http://tiffanybbrown.com/tag/html5/feed/" rel="self" type="application/rss+xml" />
	<link>http://tiffanybbrown.com</link>
	<description>A web log about web development and internet culture with frequent detours into other stuff.</description>
	<lastBuildDate>Wed, 23 May 2012 16:23:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>input type=&quot;range&quot; and Android&#8217;s stock browser.</title>
		<link>http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/</link>
		<comments>http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 04:04:56 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[WebKit]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 forms]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6629</guid>
		<description><![CDATA[Android&#8217;s stock browser supports the range input type, but in versions 3.x4.x and below (not sure about Android 4.x), it doesn&#8217;t actually display the UI. It does, however, support parts of the Shadow DOM. That means we can style this element, and give our users a visible control. The image below shows a rather garish [...]]]></description>
			<content:encoded><![CDATA[<p>Android&#8217;s stock browser supports the <code>range</code> input type, but in versions <del datetime="2012-02-09T14:40:47+00:00">3.x</del><ins datetime="2012-02-09T14:40:47+00:00">4.x</ins> and below <del datetime="2012-02-09T14:40:47+00:00"> (not sure about Android 4.x)</del>, it doesn&#8217;t actually display the UI.</p>
<p>It does, however, support parts of the <a href="http://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/">Shadow DOM</a>. That means we can style this element, and give our users a visible control.</p>
<p>The image below shows a rather garish green-and-orange version of the range user interface widget. This is after adding some styling, as it appears in the stock Android browser.</p>
<div class="image500"><img src="http://webinista.s3.amazonaws.com/images/uploads/2012/02/rangeui.png" alt="" title="safarirange" width="499" height="52" class="aligncenter size-full wp-image-6632"></div>
<p>And below is the CSS that gives us the above image.</p>
<pre><code>
input[type='range']{
    background: #0c0;
    height:10px;
}

input[type='range']::-webkit-slider-thumb{
    background:#f60;
    height:30px;
    width:30px;
    border-radius: 30px;
}
</code></pre>
<p>To date, this does <em>not</em> affect Chrome or Safari for the Desktop. <code>::-webkit-slider-thumb</code> does partially affect iOS Safari. I&#8217;ve included an image of what it looks like below (not to scale). Notice that the thumb color changes, but the slider background does not.</p>
<div class="image500"><img src="http://webinista.s3.amazonaws.com/images/uploads/2012/02/safarirange.png" alt="" title="safarirange" width="500" height="134" class="aligncenter size-full wp-image-6632"></div>
<p>This <em>may</em> also affect other browsers that use <a href="http://www.webkit.org/">Webkit</a> such as the Web Browser for S60 Nokia and Samsung&#8217;s Dolfin. I haven&#8217;t tested it yet, but if you have, please let us know in the comments.</p>
<p>Also keep in mind that this element has a pretty poor user interaction in Android browser. It&#8217;s not very responsive, and doesn&#8217;t operate all that intuitively. This is true of most mobile browsers, but in my opinion (and based on limited experience), Android is worst of all.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>input type=&quot;url&quot;, validation and user interfaces</title>
		<link>http://tiffanybbrown.com/2012/01/03/input-typeurl-validation-and-user-interfaces/</link>
		<comments>http://tiffanybbrown.com/2012/01/03/input-typeurl-validation-and-user-interfaces/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 06:54:33 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 forms]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6580</guid>
		<description><![CDATA[Recently a friend messaged me about the url input type, and how to prevent Opera from automatically prepending http:// to the value of a URL input field if it is missing. I think I&#8217;ve found a workaround, but first, I want to discuss the url input type, and how different browsers handle it. HTML5 introduces [...]]]></description>
			<content:encoded><![CDATA[<p>Recently a friend messaged me about the <code>url</code> input type, and how to prevent Opera from automatically prepending http:// to the value of a URL input field if it is missing. I think I&#8217;ve found a workaround, but first, I want to discuss the <code>url</code> input type, and how different browsers handle it.</p>
<p>HTML5 introduces several additional <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html">types for the <code>input</code> element</a>. One goal of these additional types is to offload error checking from the JavaScript layer to the browser. The HTML5 specification includes rules and patterns for data validation, including for URLs with the <code>url</code> attribute value.</p>
<p>According to the HTML5 specification, a <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#valid-url">URL is valid</a> when it is <b>not an empty string</b>, and is a <q class="b">valid absolute URL.</q> A complete definition of what constitutes a valid URL can be found in <a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> and <a href="http://tools.ietf.org/html/rfc3987">RFC 3987</a>. The short version is that a valid URL <em>must</em>, at minimum, consist of a scheme (https://, ftp://, gopher://) and a host name. If it does not, validation should fail, and the browser should throw an error.</p>
<p>Now most recent browsers<a href="#n20120103">*</a> take the following steps when it encounters an invalid URL such as <code>foo.com</code> or <code>example:80</code>.</p>
<ol>
<li>Fire an <code>invalid</code> event on the element in question.</li>
<li>Display an error message to the user. </li>
<li>Prevent form submission.</li>
</ol>
<p>To prevent careless input errors and guarantee validation, Opera will <a href="http://tiffanybbrown.com/code/2012/forms_input_type/default/">automatically prepend <code>http://</code></a> to the value of a URL input field if it is missing when the field loses focus (and if no pattern attribute has been added). This means that the invalid event usually will not be fired.</p>
<p>Of course, &#8220;most recent browsers&#8221; does not mean &#8220;all.&#8221; To date, <b>Safari</b> will fire the <code>invalid</code> event, but it will <b>do so silently</b>. No error message will be shown to the user. Form submission will succeed. The value submitted will be the same as what was entered by the user. <b>Android&#8217;s WebKit</b> behaves much the same way.</p>
<p>Safari also does something else differently <b>on mobile devices</b>: it shows a keyboard layout that is optimized for typing URLs, complete with a <kbd>.com</kbd> virtual button.<br />
<img src="http://webinista.s3.amazonaws.com/images/uploads/2012/01/iossafari-kbd.jpg" width="320" alt="The iOS keyboard"></p>
<p>Back to my friend&#8217;s use case: he wanted the benefit of mobile Safari&#8217;s UI sugar, so he was using <code>&lt;input type="url"&gt;</code>. He was unconcerned with whether the URL was valid because he was using server-side validation. His <strong>primary goal was ease of data entry for domain names on iOS devices</strong>.</p>
<p>However: <b>that isn&#8217;t really the purpose of <code>&lt;input type="url"&gt;</code></b>. Validation is, and a domain name by itself is not a valid URL.</p>
<p>But since the ship has sailed, the horse has left the barn, and the chickens have flown the coop, let&#8217;s talk about how to prevent Opera from automatically prepending http:// to the value of a URL input field.</p>
<p>To do this, we need to do two things:
<ul>
<li>Add a <code>novalidate</code> attribute to the form element.</li>
<li>Add a null <code>pattern</code> attribute to the field element.</li>
</ul>
<p>For example:</p>
<pre>&lt;form action="../form.php" method="post" novalidate&gt;
    &lt;input type="url" name="uri" id="uri" value="" pattern=""&gt;
    &lt;button type="submit"&gt;submit&lt;/button&gt;
&lt;/form&gt;</pre>
<p>The <code>novalidate</code> attribute turns off client-side validation for the entire form. The pattern attribute override&#8217;s Opera&#8217;s native validation checking.</p>
<p>See <a href="http://tiffanybbrown.com/code/2012/forms_input_type/stopprepending/">for yourself</a>. This will still trigger the URL-entry keyboard layout in iOS browsers, while killing Opera&#8217;s prepending.</p>
<p>If you use this technique, keep in mind that <b>server-side validation is even more important</b>. Because we are not providing any constraints on this data, we have increased our chances of getting invalid or malicious data. You should be validating anyway, however, since it is not 100% possible to guarantee that the data reaching our form script has actually come from our form.</p>
<p class="footnote" id="n20120103">*And by &#8220;recent browsers,&#8221; I mean the latest versions of Opera, Chrome, Firefox, and the forthcoming Internet Explorer 10, but not IE9.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2012/01/03/input-typeurl-validation-and-user-interfaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is HTML5?</title>
		<link>http://tiffanybbrown.com/2011/10/26/what-is-html5/</link>
		<comments>http://tiffanybbrown.com/2011/10/26/what-is-html5/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 20:45:16 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6467</guid>
		<description><![CDATA[My super-short post that attempts to answer this question as completely and accurately as possible in three presentation-friendly bullet points. HTML5 &#8230; re-imagines HTML as an API with objects, events, interfaces, and methods or a collection of interfaces. defines an algorithm for generating a consistent, cross-browser friendly DOM tree, regardless of the quality of the [...]]]></description>
			<content:encoded><![CDATA[<p>My super-short post that attempts to answer this question as completely and accurately as possible in three presentation-friendly bullet points.</p>
<p>HTML5 &#8230; </p>
<ul>
<li>re-imagines HTML as an <abbr title="Application Programming Interface">API</abbr> <del datetime="2011-10-26T20:45:49+00:00">with objects, events, interfaces, and methods</del> <ins datetime="2011-10-26T20:45:49+00:00">or a collection of interfaces</ins>.</li>
<li>defines an algorithm for generating a consistent, cross-browser <ins datetime="2011-10-26T20:46:31+00:00">friendly</ins> DOM tree, regardless of the quality of the author&#8217;s markup.</li>
<li>adds new elements with semantic meaning and multimedia capabilities.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/10/26/what-is-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looping video in browsers that don&#8217;t yet support the loop attribute</title>
		<link>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/</link>
		<comments>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 10:00:43 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[JavaScript/ECMAScript]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[DOMScripting]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[multimedia]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6314</guid>
		<description><![CDATA[To date, Firefox does not yet support the loop attribute of the &#60;video&#62; element. This snippet is a simple work-around. Once the video&#8217;s ended event is fired, it calls the play method. For more, consult the media events section of the HTML5 specification.]]></description>
			<content:encoded><![CDATA[<p>To date, Firefox does not yet support the <code>loop</code> attribute of the <code>&lt;video&gt;</code> element. This snippet is a simple work-around. Once the video&#8217;s  <code>ended</code> event is fired, it calls the <code>play</code> method.</p>
<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/webinista/eUvrc/embedded/"></iframe></p>
<p>For more, consult the <a href="http://dev.w3.org/html5/spec-author-view/media-elements.html#mediaevents">media events</a> section of the HTML5 specification.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick PHP Tip: Uploading multiple files in HTML5</title>
		<link>http://tiffanybbrown.com/2011/03/29/quick-php-tip-uploading-multiple-files-in-html5/</link>
		<comments>http://tiffanybbrown.com/2011/03/29/quick-php-tip-uploading-multiple-files-in-html5/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 08:00:51 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 forms]]></category>
		<category><![CDATA[multiple file uploads]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5827</guid>
		<description><![CDATA[One of the neat things about HTML5 is that it allows for multiple file uploads in one file upload field. Of course, you have to have a browser that supports such a feature. Currently Opera 11.10 does. So do Firefox 4, the latest version of Chrome, and Safari 5.0.4. (Internet Explorer 9 does not.) Now [...]]]></description>
			<content:encoded><![CDATA[<p>One of the neat things about HTML5 is that it allows for multiple file uploads in one file upload field. Of course, you have to have a browser that supports such a feature. Currently Opera 11.10 does. So do Firefox 4, the latest version of Chrome, and Safari 5.0.4. (Internet Explorer 9 does not.)</p>
<p>Now what&#8217;s less clear is how to send data from multiple files to a server-side PHP script. Turns out, it&#8217;s quite easy. Treat it in the same way you&#8217;d treat any other array of options (radio buttons, for example) and include square ([]) brackets in the field name. See the code below for an example:</p>
<pre>
&lt;!DOCTYPE html&gt;
&lt;html lang="en-us"&gt;
&lt;head&gt;
	&lt;meta charset="UTF-8"&gt;
	&lt;title&gt;HTML5 Multiple File Upload&lt;/title&gt;
	&lt;link rel="stylesheet" href="s.css" media="screen"&gt;
	&lt;style media="screen"&gt;&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;form action="processor.php" method="post" enctype="multipart/form-data"&gt;
		&lt;input type="file" value="" name="upload[]" multiple&gt;
		&lt;button type="submit"&gt;Upload!&lt;/button&gt;
	&lt;/form&gt;
&lt;script&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>In processor.php, all we&#8217;re going to do is print the <code>$_FILES</code> array so you can see what&#8217;s happening.</p>
<pre>
&lt;pre&gt;
&lt;?php
     print_r( $_FILES );
?&gt;
&lt;/pre&gt;
</pre>
<p>Copy and paste this code and save it to your own server to see everything in action.</p>
<h3>Related:</h3>
<ul>
<li><a href="http://dev.w3.org/html5/spec/Overview.html">HTML5 Specification</a></li>
<li><a href="http://tiffanybbrown.com/html5forms/">Slides from my recent HTML5 Forms talk</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/03/29/quick-php-tip-uploading-multiple-files-in-html5/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>HTML5 does NOT allow &#8220;self-closing&#8221; tags …</title>
		<link>http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/</link>
		<comments>http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 16:31:34 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 parsing]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5735</guid>
		<description><![CDATA[&#8230; on non-void elements, at least. One of the big misconceptions about HTML5 is that any tag can be self-closed. That&#8217;s not true, though it appears that way. What HTML5 does is provide parsing rules for handling mismatched tags and markup. While it seems like self-closing tags are acceptable, that&#8217;s not the case. This post [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; on non-void elements, at least.</p>
<p>One of the big misconceptions about HTML5 is that <em>any</em> tag can be self-closed. <strong>That&#8217;s not true</strong>, though it appears that way. </p>
<p>What HTML5 does is provide <a href="http://dev.w3.org/html5/spec/parsing.html#parsing">parsing rules</a> for handling mismatched tags and markup. While it seems like self-closing tags are acceptable, that&#8217;s not the case. This post explains what&#8217;s really at play. Let&#8217;s take a look.</p>
<h2>&#8216;Self-closing&#8217;? Our old friend /&gt;</h2>
<p>Let&#8217;s separate void elements from empty tags that don&#8217;t contain content. You&#8217;re probably familiar with &quot;<a href="http://dev.w3.org/html5/spec/Overview.html#void-elements">void</a>&quot; elements &#8212; elements that can&#8217;t have any content. They include the <code>img</code>,  <code>br</code>,  <code>hr</code>, and <code>meta</code> elements. </p>
<p>In XHTML, we closed void elements according to the rules of XML syntax, which requires all elements to be closed with end tags or self-closing tags. That&#8217;s where we get the familiar space-slash (&nbsp;/&gt;) of XHTML. HTML5, however, uses HTML parsing syntax, making the &nbsp;/&gt; unnecessary for void elements. It is, however, valid to use it. Yes: <code>&lt;meta charset="UTF-8"&gt;</code> and <code>&lt;meta charset="UTF-8" /&gt;</code> are both acceptable.</p>
<p>Here&#8217;s the thing: a void element is not the same as an element that doesn&#8217;t contain any content. And &#8216;self-closing&#8217; does <em>not</em> mean the same thing as &#8220;the end tag is optional.&#8221;</p>
<p>To state it clearly:  <strong>Most HTML5 elements are <em>not</em> self-closing, but many elements do not require an end tag.</strong></p>
<h2>Wait, what? End tags are optional? It&#8217;s like HTML 3.2 all over again!</h2>
<p>Yes, some HTML5 elements do not require an end tag. Those circumstances are outlined in the <a href="http://dev.w3.org/html5/spec/Overview.html#normal-elements">HTML5 specification</a>. The <code>p</code> element, for example, does not require an end tag if <q>the <code>p</code> element is immediately followed by an <code>address</code>, <code>article</code>, <code>aside</code>, <code>blockquote</code>, <code>dir</code>, <code>div</code>, <code>dl</code>, <code>fieldset</code>, <code>footer</code>, <code>form</code>, <code>h1</code>, <code>h2</code>, <code>h3</code>, <code>h4</code>, <code>h5</code>, <code>h6</code>, <code>header</code>, <code>hgroup</code>, <code>hr</code>, <code>menu</code>, <code>nav</code>, <code>ol</code>, <code>p</code>, <code>pre</code>, <code>section</code>, <code>table</code>, or <code>ul</code>, element, or if there is no more content in the parent element and the parent element is not an <code>a</code> element.</q></p>
<p>In fact, some tags can be <a href="http://dev.w3.org/html5/spec/Overview.html#html-elements">omitted altogether</a>. Browsers with compliant HTML5 parsers (such as the recently released <a href="http://labs.opera.com/news/2011/02/22/">Opera 11.5 snapshot</a>) will add the end tags to the DOM.</p>
<p>But again: &quot;end-tag optional&quot; is a <em>different concept</em> than self-closing.</p>
<h2>How about some examples?</h2>
<p>Let&#8217;s take a look at the following bit of code:</p>
<pre>
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en-us&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;HTML tag example&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;styles.css&quot; media=&quot;screen&quot;&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;header&gt;
    &lt;hgroup&gt;
        &lt;h1&gt;When self-closing tags fail&lt;/h1&gt;
        &lt;h2&gt;Not all HTML5 elements are self closing, though some are &#8216;end tag optional&#8217;&lt;/h2&gt;
    &lt;/hgroup&gt;
&lt;/header&gt;

&lt;article&gt;
&lt;p&gt;This is to demonstrate that all HTML elements are &lt;em&gt;not&lt;/em&gt; actually self closing. There is a &quot;self-closed&quot; &lt;code&gt;p&lt;/code&gt; element following this closed paragraph. And it&#8217;s followed by a a &quot;self-closed&quot; &lt;code&gt;a&lt;/code&gt; tag and another paragraph.&lt;/p&gt;

&lt;p id=&quot;notaselfclosinggraf&quot; /&gt;&lt;a id=&quot;notaselfclosinganchor&quot; /&gt;

&lt;p&gt;As you can see, this paragraph is part of the preceeding link.&lt;/p&gt;

&lt;/article&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>You can <a href="http://tiffanybbrown/not-all-html5-tags-are-self-closing/index.html">view the code yourself</a>. Notice that the last paragraph is actually treated as the link text of the of the supposedly self-closed link before it. </p>
<p>Let&#8217;s take a look at <a href="http://tiffanybbrown/not-all-html5-tags-are-self-closing/">another example</a>:</p>
<pre>
&lt;!DOCTYPE html&gt;
&lt;html lang="en-us"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width,user-scalable=yes,initial-scale=1.0"/&gt;
    &lt;title&gt;HTML tag example&lt;/title&gt;
    &lt;link rel="stylesheet" href="styles.css" media="screen" /&gt;
    &lt;style&gt;
        .trigger1{
            background: #369;
            border-radius: 4px;
            display:block;
            padding:3px;
            color:#fff;
        }

        #tvFinderImg{
            background:#0c0;
            display:block;
            width: 10px;
            height:10px;
        }    

        #tvFinderImg h3{
            border:1px dashed #c09;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;header&gt;
    &lt;h1&gt;Spans aren't self-closing either&lt;/h1&gt;
&lt;/header&gt;

&lt;div&gt;
&lt;a
class="trigger1" href="#tvFindersrchd"&gt;Lorem ipsum &lt;span id="tvFinderImg" /&gt;&lt;/a&gt;
&lt;p&gt;This is some copy after the "self-closed" tag.&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>In older browsers &#8212; Internet Explorer 8, for example &#8212; the supposedly self-closed tags are handled like unclosed tags. In those browsers, you will see a pink border around <q>This is some copy after the &#8220;self-closed&#8221; tag.</q> </p>
<p><img src="http://webinista.s3.amazonaws.com/images/uploads/2011/03/html5parsingspans.png" alt="" title="html5parsingspans" width="640" height="356" class="alignnone size-full wp-image-5740" /></p>
<p>In browsers that <em>do</em> have HTML5-compliant parsers &#8212; Firefox 4, the Opera 11.5 labs build mentioned above &#8212; the browser re-writes the DOM and adds a closing span tag. Yep. HTML5 saves developers from ourselves by providing rules for handling bad markup. View the DOM of that page in Opera 11.5 with Dragonfly, or Firefox 4 using Firebug (or in Chrome, Safari or IE9 using their developer tools) to see what I mean.</p>
<p>Let me restate this point for clarity: <strong>it only <em>appears</em> that self-closing tags are permitted in HTML5. In actuality, the browser parser treats non-void, self-closed tags as start tags and closes them for you.</strong></p>
<p>Don&#8217;t believe me? Try running <a href="http://validator.w3.org/check?uri=http%3A%2F%2Ftiffanybbrown.com%2Fnot-all-html5-tags-are-self-closing%2Findex.html&#038;charset=%28detect+automatically%29&#038;doctype=Inline&#038;group=0">these</a> <a href="http://validator.w3.org/check?uri=http%3A%2F%2Ftiffanybbrown.com%2Fnot-all-html5-tags-are-self-closing%2Fwithspans.html&#038;charset=%28detect+automatically%29&#038;doctype=Inline&#038;group=0&#038;user-agent=W3C_Validator%2F1.2">pages</a> through the W3C Markup Validator. </p>
<h3>So I can go back to sloppy code?</h3>
<p><em>Maybe</em>. I think you can make an excellent argument for using relaxed markup rules when targeting end-users who may be paying per byte of bandwidth or who are on slow connections &#8212; Canadian mobile users, for example. Send less code. Make the browser handle it.</p>
<p>But keep in mind that older browsers do not have HTML5 parsers. Internet Explorer 7 &#038; 8 do not. Opera 11.10 beta does not. Opera Mobile does not. (Older versions of WebKit technically don&#8217;t either, but WebKit has long <a href="http://www.webkit.org/blog/1273/the-html5-parsing-algorithm/">supported the <code>/&gt;</code> syntax</a>.)  If you have a large proportion of older browser users in your audience, stick to the stricter, XML-style syntax: if you have a start tag, use an end tag. The space-slash is optional for void elements. Don&#8217;t forget to validate!</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>On URL design</title>
		<link>http://tiffanybbrown.com/2011/01/06/on-url-design/</link>
		<comments>http://tiffanybbrown.com/2011/01/06/on-url-design/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 19:07:51 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[uri]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5546</guid>
		<description><![CDATA[Namespaces can be a great way to build up a pragmatic URL structure that&#8217;s easy to remember with continued usage. What do I mean by a namespace? I mean a portion of a URL that dictates unique content. One of Kyle Neath&#8217;s tips from his post URL design. This. URLs make your site more usable, [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Namespaces can be a great way to build up a pragmatic URL structure that&#8217;s easy to remember with continued usage. What do I mean by a namespace? I mean a portion of a URL that dictates unique content.</p></blockquote>
<p>One of <a href="http://warpspire.com/">Kyle Neath&#8217;s</a> tips from his post <a href="http://warpspire.com/posts/url-design/">URL design</a>.</p>
<p>This. URLs make your site more usable, navigable and extensible, particularly when your site is a <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Representational_State_Transfer">RESTful</a> application.</p>
<p>[Via <a href="http://adactio.com/journal/4256/">Jeremy Keith</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/01/06/on-url-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recommended: &#8220;Wrapping Things Nicely with HTML5 Local Storage&#8221;</title>
		<link>http://tiffanybbrown.com/2010/12/07/recommended-wrapping-things-nicely-with-html5-local-storage/</link>
		<comments>http://tiffanybbrown.com/2010/12/07/recommended-wrapping-things-nicely-with-html5-local-storage/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 17:19:12 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[local storage]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[super cookies]]></category>
		<category><![CDATA[web storage]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5153</guid>
		<description><![CDATA[Today&#8217;s 24Ways entry is from Christian Heilmann and takes a look at HTML5 Local Storage. Heilmann explains: Why client-side storage can be a good thing; The origins of and need for local storage; How to use local storage; When to use local storage; I implemented local storage in browsers that support it for our wedding [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s 24Ways entry is from <a href="http://wait-till-i.com/">Christian Heilmann</a> and takes a look at <a href="http://dev.w3.org/html5/webstorage/">HTML5 Local Storage</a>. </p>
<p>Heilmann explains: </p>
<ul>
<li>Why client-side storage can be a good thing;</li>
<li>The origins of and need for local storage;</li>
<li>How to use local storage;</li>
<li>When to use local storage;</li>
</ul>
<p>I implemented local storage in browsers that support it for our <a href="http://jtandtb.com/">wedding web site</a>. It saves the open or closed state of each content chunk. It was easy enough to save the data. And it gives the user a bit of added convenience.</p>
<p><a href="http://24ways.org/2010/html5-local-storage">Read the piece</a>.</p>
<p><strong>Keep in mind:</strong> local storage can be &#8212; and will be, and right now is probably being &#8212; used to create hard-to-delete &#8220;super cookies&#8221; for advertising, marketing, and other privacy-eroding things.</p>
<p>The good news is the web storage specification and all browsers that support it restrict local storage data to the originating domain. The bad news is that most browsers don&#8217;t offer an easy way to local storage objects. In Safari, for example, you&#8217;ll need to fire up Terminal (quit Safari first) and navigate to /Users/tbrown/Library/Safari/LocalStorage to delete items individually or collectively.</p>
<p>This isn&#8217;t a new issue. <a href="http://www.adobe.com/products/flashplayer/articles/lso/">Flash &#8216;cookies&#8217;</a> have existed for years (<a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html">view, manage or delete yours</a>). But what <em>is</em> new is that some (most?) browser makers have made it hard to manage and control what gets stored and for how long. </p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/12/07/recommended-wrapping-things-nicely-with-html5-local-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On the promise of HTML5</title>
		<link>http://tiffanybbrown.com/2010/07/12/on-the-promise-of-html5/</link>
		<comments>http://tiffanybbrown.com/2010/07/12/on-the-promise-of-html5/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 14:00:47 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[christopher blizzard]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4269</guid>
		<description><![CDATA[The most important aspect of HTML5 isn&#8217;t the new stuff like video and canvas (which Safari and Firefox have both been shipping for years) it&#8217;s actually the honest-to-god promise of interoperability. Even stodgy old Microsoft, who has been doing their best to hold back the web for nearly a decade, understands this and you&#8217;ll see [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>The most important aspect of HTML5 isn&#8217;t the new stuff like video and canvas (which Safari and Firefox have both been shipping for years) it&#8217;s actually the honest-to-god promise of interoperability. Even stodgy old Microsoft, who has been doing their best to hold back the web for nearly a decade, understands this and you&#8217;ll see it throughout their marketing for IE9. &#8230; The idea that the same markup, even with mistakes, will be rendered exactly the same. HTML5 represents the chance for browsers to work together and find common ground.</p></blockquote>
<p>That&#8217;s Christopher Blizzard, the Director of Developer Relations and Open Source Evangelist at <a href="http://www.mozilla.org/">Mozilla</a> in his June post, <a href="http://www.0xdeadbeef.com/weblog/2010/06/intellectual-honesty-and-html5/">intellectual honesty and html5</a>.</p>
<p>He&#8217;s referring to Apple&#8217;s <a href="http://www.apple.com/html5/">HTML5 demo</a>. It seems somewhere along the way, HTML5 went from <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">specification</a> to <a href="http://twitter.com/mollydotcom/status/17678901200">consumer marketing buzzword</a>, and now <em>everyone</em> is confused about what HTML5 is and isn&#8217;t, and which browsers support it and don&#8217;t. </p>
<p>Thumbs down Apple. Thumbs down.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/07/12/on-the-promise-of-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The HTML5 video progress event: Redux</title>
		<link>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/</link>
		<comments>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 22:14:58 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[event handling]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4216</guid>
		<description><![CDATA[In my first post on HTML5 video and its progress event, I wrote: Only Firefox provides a means to calculate the amount of the video that has been loaded. The progress event object includes total and loaded properties that reflect the total size of the video file, and the amount the browser has retrieved from [...]]]></description>
			<content:encoded><![CDATA[<p>In my first post on <a href="http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/">HTML5 video</a> and its progress event, I wrote:</p>
<blockquote><p>Only Firefox provides a means to calculate the amount of the video that has been loaded. The progress event object includes total and loaded properties that reflect the total size of the video file, and the amount the browser has retrieved from the server. This is also a reflection of how each browser handles video downloads.</p></blockquote>
<p>Erm, that&#8217;s only sort of true. As zcorpan <a href="http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/#comment-60732130">explained in the comments</a>, the latest version of Firefox implements an old version of the specification. </p>
<p>In the most recent version of the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#video">HTML5 spec</a>, the total and loaded properties of the progress event were removed and (mostly) replaced by the <code>video.buffered</code> property. </p>
<p>So while Firefox 3.6.x <em>is still the only browser that provides total and loaded properties in the progress event</em>, the latest revision added a new property to the <code>video</code> element that works <strong>similarly</strong> &#8212; note the emphasis on &#8216;similarly.&#8217;</p>
<p>What&#8217;s the difference? Both the <code>total</code> and <code>loaded</code> properties of the progress event express the download&#8217;s progress <strong>in terms of bytes.</strong> The <code>video.buffered</code> property expresses the download&#8217;s progress <strong>in terms of seconds</strong>. They&#8217;re similar in that you can determine the status of a download, but using seconds instead of bytes is more relevant for seeking within a timed media file. </p>
<p>By checking <code>video.buffered.end()</code>, we can determine how many seconds of the video are available to the browser and provide the relevant error handling (if a user seeks too far) or interface changes (such as a loading progress bar).</p>
<p>I am still learning how the <code>video.buffered</code> property works, particularly in conjunction other properties and events of the video object. I will post more about this later.</p>
<p>One thing to remember: Firefox has not yet implemented the <code>video.buffered</code> property. It is only available in Safari, Chrome and (sort of) in Opera (still learning the ins-and-outs). (And Internet Explorer doesn&#8217;t support the video element <em>at all</em>, though version 9 should when it&#8217;s released.)</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The HTML5 video progress event</title>
		<link>http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/</link>
		<comments>http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 17:53:15 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[DOM]]></category>
		<category><![CDATA[JavaScript/ECMAScript]]></category>
		<category><![CDATA[event handling]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[multimedia]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4183</guid>
		<description><![CDATA[UPDATE: Thanks to zcorpan&#8217;s comments, I have posted a follow-up entry that should clarify the current status of the video element and its properties. I have been playing around with the HTML5 video interface lately, trying to understand what can be done with it, and how each browser supports its features as set forth in [...]]]></description>
			<content:encoded><![CDATA[<div class="editors-note"><b>UPDATE:</b> Thanks to zcorpan&#8217;s comments, I have posted a <a href="http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/">follow-up entry</a> that should clarify the current status of the video element and its properties.</div>
<div class="editors-note">I have been playing around with the HTML5 video interface lately, trying to understand what can be done with it, and how each browser supports its features as set forth in the <a href="http://www.w3.org/TR/html5/video.html">specification</a> (which is a working draft, and far from a final version).</p>
<p>Consider this in the first in a series of note-style posts that I will write (or perhaps not) about the HTML5 video interface as I develop an HTML5 video player interface.
</p></div>
<p>The <code>progress</code> event is fired as the browser loads more of the media file. It may not be fired reliably, however. Chrome, for example, will not fire the progress event if it has cached the video file. </p>
<p>Only Firefox provides a means to calculate the amount of the video that has been loaded. The progress event object includes <code>total</code> and <code>loaded</code> properties that reflect the total size of the video file, and the amount the browser has retrieved from the server. This is also a reflection of how each browser handles video downloads.</p>
<p>Firefox requests partial content on the initial page load, then pauses downloading until the play event is fired. After the play event is fired &#8212; whether when the user clicks the &#8216;play&#8217; button or the video tag has the <code>autoplay</code> attribute &#8212; Firefox resumes downloading the video file. </p>
<p>Safari, Chrome, and Opera conversely, download the entire video on page load &#8212; they automatically buffer by default. Opera and Chrome, however, will make the video available for play almost immediately, while Safari takes several seconds to download a larger portion of the file. Firefox will behave similarly if when the <a href="http://hacks.mozilla.org/2009/12/autobuffering-video-in-firefox/" title="autobuffering video in Firefox"><code>autobuffer</code> attribute</a> is present. </p>
<p>Presumably because they auto-buffer video, neither Safari, Chrome, nor Opera offer a means by which to detect either the video&#8217;s size, nor how much of the video has loaded.</p>
<p>Some example code for handling the progress event (assuming we&#8217;re wrapping this video element in a <code>&lt;div&gt;</code> tag with an id of &#8216;container&#8217;). This will return the percentage of the video loaded in Firefox (and other browsers that don&#8217;t auto-buffer), and fail silently in other browsers.</p>
<pre>
var container = document.getElementById('container');
var video = document.createElement(video);
// only Firefox and Opera support Ogg <ins datetime="2010-07-06T13:09:11+00:00">... oh yeah Chrome does too.</ins>
video.setAttribute('src','movie.ogv');
function progressHandler(e){
      if(e.total &#038;&#038; e.loaded){
           // percentage of video loaded
          var proportion = Math.round( e.loaded / e.total );
          return proportion * 100;
      } else {
           // do nothing because we're autobuffering.
      }
}
video.addEventListener('progress',progressHandler,false);
container.appendChild(video);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>And Still More on Flash versus HTML5</title>
		<link>http://tiffanybbrown.com/2010/06/30/and-still-more-on-flash-versus-html5/</link>
		<comments>http://tiffanybbrown.com/2010/06/30/and-still-more-on-flash-versus-html5/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 15:14:20 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4155</guid>
		<description><![CDATA[We need to do more than just point the browser at a video file like the image tag does &#8211; there’s a lot more to it than just retrieving and displaying a video. The &#60;video&#62; tag certainly addresses the basic requirements and is making good progress on meeting others, but the &#60;video&#62; tag does not [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>We need to do more than just point the browser at a video file like the image tag does &#8211; there’s a lot more to it than just retrieving and displaying a video. The <code>&lt;video&gt;</code> tag certainly addresses the basic requirements and is making good progress on meeting others, but the <code>&lt;video&gt;</code> tag does not currently meet all the needs of a site like YouTube.</p></blockquote>
<p>From the YouTube API Blog: <a href="http://apiblog.youtube.com/2010/06/flash-and-html5-tag.html">Flash and the HTML5 &lt;video&gt; tag</a>.</p>
<p>Software John Harding says that YouTube&#8217;s <a href="http://www.youtube.com/html5">HTML5 experiment</a> showed that the format isn&#8217;t <em>quite</em> ready for prime-time. Among the reasons? HTML5 video doesn&#8217;t yet have the robust streaming capabilities, encapsulation capability, content protection, or camera and microphone support. Flash, however, does.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/06/30/and-still-more-on-flash-versus-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On the ArmBlog: &#8220;The Mess and Magic of HTML5 Video&#8221;</title>
		<link>http://tiffanybbrown.com/2010/06/15/on-the-armblog-the-mess-and-magic-of-html5-video/</link>
		<comments>http://tiffanybbrown.com/2010/06/15/on-the-armblog-the-mess-and-magic-of-html5-video/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 16:12:11 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Productivity & Career]]></category>
		<category><![CDATA[armchair media]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[selfpromotion]]></category>
		<category><![CDATA[underarmchair]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4040</guid>
		<description><![CDATA[If audience measurement, ad support, and rights management are part of your business requirements, stick to Flash exclusively. HTML5 video does not yet have the ecosystem of services for ad serving, analytics, or streaming that Flash video does. That&#8217;s what I said in my latest post &#8220;The Mess and Magic of HTML5 Video,&#8221; on the [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>If audience measurement, ad support, and rights management are part of your business requirements, stick to Flash exclusively. HTML5 video does not yet have the ecosystem of services for ad serving, analytics, or streaming that Flash video does.</p></blockquote>
<p>That&#8217;s what I said in my latest post &#8220;<a href="http://armchairmedia.com/2010/06/15/the-mess-and-magic-of-html5-video/">The Mess and Magic of HTML5 Video</a>,&#8221; on the Armchair Media blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/06/15/on-the-armblog-the-mess-and-magic-of-html5-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hulu.com: More on HTML5 v. Flash</title>
		<link>http://tiffanybbrown.com/2010/05/14/hulu-html5-flash/</link>
		<comments>http://tiffanybbrown.com/2010/05/14/hulu-html5-flash/#comments</comments>
		<pubDate>Fri, 14 May 2010 17:01:09 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[ActionScript, Flash & Flex]]></category>
		<category><![CDATA[Internet life]]></category>
		<category><![CDATA[eric wei]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[hulu]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[new teevee]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=3925</guid>
		<description><![CDATA[Our player doesn&#8217;t just simply stream video, it must also secure the content, handle reporting for our advertisers, render the video using a high performance codec to ensure premium visual quality, communicate back with the server to determine how long to buffer and what bitrate to stream, and dozens of other things that aren’t necessarily [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://webinista.s3.amazonaws.com/blog_images/hulu.com.png" class="image500"/></p>
<blockquote><p>Our player doesn&#8217;t just simply stream video, it must also secure the content, handle reporting for our advertisers, render the video using a high performance codec to ensure premium visual quality, communicate back with the server to determine how long to buffer and what bitrate to stream, and dozens of other things that aren’t necessarily visible to the end user.</p></blockquote>
<p>In February, I offered four reasons why you <a href="http://tiffanybbrown.com/2010/02/04/on-apples-ipad-html5-and-the-future-of-flash/">shouldn&#8217;t count Flash out just yet</a>. Eugene Wei <a href="http://hulu.com/">Hulu.com</a>&#8216;s Vice President of Product offers four more in his post <a href="http://blog.hulu.com/2010/05/13/pardon-our-dust/">Pardon Our Dust</a> about Hulu&#8217;s new video player (Via <a href="http://newteevee.com/2010/05/13/hulu-html5-isnt-ready-for-prime-time/">New TeeVee</a>).</p>
<p>Thank you Mr. Wei for writing a follow-up post for me. HTML5 is great way to deliver audio and video to the browser in a way that frees users from having to install a plug-in. What it isn&#8217;t so great for &#8212; yet &#8212; are the things that many content creators and advertisers find important: tracking, DRM and ad serving. </p>
<p>Here&#8217;s a business suggestion for Hulu: offer an HTML5 player as a premium upgrade. Hulu plans to <a href="http://latimesblogs.latimes.com/entertainmentnewsbuzz/2010/04/hulu-pushes-forward-with-995-subscription-service.html">charge $10 per month</a>. What if they offered &#8212; for, say, an extra $5 or $10 &#8212; &#8220;iPad-ready&#8221; video using HTML5?</p>
<p>Check out Hulu&#8217;s video introducing the new player.</p>
<div class="video"><object width="512" height="288"><param name="movie" value="http://www.hulu.com/embed/7SaU0v3GQiWb-XdmjgGmCA"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.hulu.com/embed/7SaU0v3GQiWb-XdmjgGmCA" type="application/x-shockwave-flash"  width="512" height="288" allowFullScreen="true"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/05/14/hulu-html5-flash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On Apple&#8217;s iPad, HTML5, and the future of Flash</title>
		<link>http://tiffanybbrown.com/2010/02/04/on-apples-ipad-html5-and-the-future-of-flash/</link>
		<comments>http://tiffanybbrown.com/2010/02/04/on-apples-ipad-html5-and-the-future-of-flash/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 06:40:09 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[WebKit]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[dom storage]]></category>
		<category><![CDATA[e-reader]]></category>
		<category><![CDATA[excanvas]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flash builder]]></category>
		<category><![CDATA[g1]]></category>
		<category><![CDATA[gadgets]]></category>
		<category><![CDATA[h.264]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[mobile web]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[ogg theora]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=3359</guid>
		<description><![CDATA[So Apple announced the iPad, and it won&#8217;t support Flash. That shouldn&#8217;t be a surprise. Neither the iPhone nor iPod Touch support Flash. Indeed most mobile platforms don&#8217;t (yet) support Flash. Even the smartest of smart phones have limited processing power and storage space compared to laptops and desktops. According to Steve Jobs, Apple doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<div class="image500"><a href="http://www.apple.com/ipad/"><img src="http://tiffanybbrown.com/images/uploads/2010/02/ipad.jpg" alt="" title="ipad" width="580" height="398" class="alignnone size-full wp-image-3361" /></a></div>
<p>So Apple announced the <a href="http://www.apple.com/ipad/" class="ext">iPad</a>, and it <a href="http://www.guardian.co.uk/technology/blog/2010/feb/02/flash-plugin-browser-apple-adobe">won&#8217;t support Flash</a>. </p>
<p>That shouldn&#8217;t be a surprise. Neither the iPhone nor iPod Touch support Flash. Indeed most mobile platforms don&#8217;t (yet) support Flash. Even the smartest of smart phones have limited processing power and storage space compared to laptops and desktops.</p>
<p>According to Steve Jobs, Apple doesn&#8217;t support Flash on its mobile devices because &#8220;<a href="http://www.wired.com/epicenter/2010/01/googles-dont-be-evil-mantra-is-bullshit-adobe-is-lazy-apples-steve-jobs/" class="ext">it&#8217;s buggy</a>.&#8221; But I&#8217;d guess their decision has as much to do with Flash&#8217;s capabilities. Many of the products in that <a href="http://www.informationweek.com/news/personal_tech/iphone/showArticle.jhtml?articleID=208403482" class="ext" title="$1.2 billions? GOTDAMN!">cash cow</a> known as the Apple App Store could be developed using Flash instead.<sup><a href="#n20100203a">1</a></sup> Supporting Flash would undermine that billion-dollar revenue stream, piss off iPhone / iPad developers, and also put Apple at Adobe&#8217;s mercy. </p>
<p>Besides, everyone&#8217;s moving towards <a href="http://www.w3.org/TR/html5/">HTML5</a>, right? Well yes they are, but not so quickly. <strong>I wouldn&#8217;t rule Flash out for another 3 to 5 years</strong>.<br />
<span id="more-3359"></span><br />
Why do I say this?  Four reasons:</p>
<ol>
<li>
<p><strong>Flash has inertia on its side</strong>. Major content sites such as <a href="http://disney.go.com/index" class="ext">Disney</a> and <a href="http://www.hulu.com/">Hulu</a> still use Flash to deliver video, animation, and interactive experiences. According to Adobe&#8217;s statistics, Flash has <a href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html">over 90% penetration</a> in mature markets. Developers already know how to use Flash and ActionScript to create these experiences. In short: there are a lot of folks invested in Flash as a platform.</p>
</li>
<li>
<p><strong>HTML 5 isn&#8217;t quite ready for prime time</strong>. It&#8217;s a shifting standard, a work-in-progress. Though even Internet Explorer 8 <a href="http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29.aspx" class="ext" title="I know, right? I was shocked to learn that too.">supports some significant HTML5 features</a>, Internet Explorers 6 and 7 do not. And both browser versions are still used widely enough that dropping support is not an option for most developers.<sup><a href="#n20100203b">2</a></sup></p>
</li>
<li>
<p><strong>Flash is still the best cross-browser, cross-platform way to serve audio and video</strong>. Safari / WebKit, Firefox / Mozilla and Opera all support the HTML5 <code>video</code> element. They <em>do not</em>, however support the same codec. </p>
<p>Apple is squarely in the <a href="http://www.apple.com/quicktime/technologies/h264/">H.264 camp</a>. Google paid a licensing fee so that it could <a href="http://www.sitepoint.com/blogs/2010/01/25/the-dark-side-of-html-5-video/">include an H.264 decoder</a> in Chrome. H.264 is a patented codec. Any browser that wants to enable H.264 video will need to pay a licensing fee.</p>
<p>Licensing fees and patent concerns are why <a href="http://arstechnica.com/open-source/news/2009/07/decoding-the-html-5-video-codec-debate.ars">Opera and Mozilla are backing Ogg Theora</a>. <a href="http://www.theora.org/" class="ext">Ogg Theora</a> is an open sourced codec with no known patents. I should add here that Chrome also supports Ogg Theora. Google, perhaps wisely, chose to include both.</p>
<p>The big monkey wrench in <code>video</code> element adoption, however, is Internet Explorer. Internet Explorer is waiting for <a href="http://www.internetnews.com/dev-news/article.php/3828901">them other fools to work out that default codec business</a> before it implements support for the element. </p>
<p>And all of this is before we get into the differences in how browser vendors will execute the specification. That&#8217;s a whole &#8216;nother headache.</p>
<p>We will be using Flash until clients are willing to pay for separate Safari, Firefox and Internet Explorer video integration or until the HTML5 working group agrees  on a default codec.</p>
</li>
<li><strong>Adobe is working to <a href="http://blogs.adobe.com/conversations/2010/02/open_access_to_content_and_app.html">bring Flash to other mobile platforms</a>.</strong> As Adobe&#8217;s Chief Technology Officer Kevin Lynch explained, <q>We are now on the verge of delivering Flash Player 10.1 for smartphones with all but one of the top manufacturers. This includes Google&#8217;s Android, RIM&#8217;s Blackberry, Nokia, Palm Pre and many others across form factors including not only smartphones but also tablets, netbooks, and internet-connected TVs.</q> Could the iPhone and iPad&#8217;s lack of Flash support be a deciding factor in consumers&#8217; decisions not to buy an Apple device?</li>
</ol>
<h3>My Prediction for Flash</h3>
<p>I suspect that as HTML5 gains prominence, Flash will &#8212; eff that, it <em>should</em> &#8212; shift from an authoring environment for its proprietary SWF format to one that generates HTML, CSS, JS and SVG code for the browser. I think the building blocks for such software are in place. <a href="http://labs.adobe.com/technologies/flashbuilder4/">Flash Builder (formerly Flex Builder)</a> for example, eliminates (most of) the need for FLA files.  Perhaps developers will one day use a mix of ActionScript and JavaScript in the Flash Builder authoring environment to create web-ready assets and animation that don&#8217;t require a browser plug-in.</p>
<h3>Mobile-friendly Web Development Right Now</h3>
<p>Despite the fact that Flash is supposed to come to every other mobile platform, Apple&#8217;s decision to keep Flash off of the iPhone, iPad, and iPod Touch is not without impact. Apple still runs the smart phone market; in some ways they drive the mobile web. That means the prudent path is (still) <a href="http://hesketh.com/publications/articles/progressive-enhancement-paving-the-way-for/" class="ext" title="Progressive Enhancement: Paving the Way for Future Web Design">progressive enhancement</a>, and ensuring that your critical content and navigation are built using HTML.</p>
<h3>So will I buy an iPad?</h3>
<p>Nope. I have a laptop, a smart phone (a T-Mobile G1), a desktop and an iPod Touch. To me, the iPad is that weird spot between my smart phone or iPod Touch and a laptop with the convenience of neither. It doesn&#8217;t have the pocket-sized portability of my iPod Touch or my phone. And it doesn&#8217;t (yet) have the robust features of a laptop &#8212; USB ports, optical media drives, and the ability to install <em>any</em> app. I can&#8217;t justify the value for the price.</p>
<p>Besides, I still much prefer books to e-readers. I can sell books, trade books, leave books, loan books, and get books wet. I am not about to soak in the tub with a $300 device, but I would with an $11 book. </p>
<p><strong>What do you think about the iPad, Apple&#8217;s decision, or the future of Flash and HTML5?</strong></p>
<p id="n20100203a" class="footnote"><sup>1</sup>  Many of these apps could also be <a href="http://quirksmode.org/blog/archives/2009/11/apple_is_not_ev.html">built using HTML, CSS and JavaScript</a>, but there&#8217;s no money in that either.</p>
<p id="n20100203b" class="footnote"><sup>2</sup> There are scripts available to make IE act right, of course. <a href="http://excanvas.sourceforge.net/" class="ext">ExCanvas</a>, for example, mimics support for the <code>canvas</code> element in IE. Simple HTML5 isn&#8217;t much different from HTML 4.01. You can actually forge ahead with HTML5 now if you don&#8217;t need advanced features like <a href="https://developer.mozilla.org/en/DOM/Storage">DOM Storage</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/02/04/on-apples-ipad-html5-and-the-future-of-flash/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

