<?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>william j. moner</title>
	<atom:link href="http://williamjmoner.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://williamjmoner.com</link>
	<description>media studies // interactive design // media education</description>
	<lastBuildDate>Fri, 18 May 2012 02:41:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>I&#8217;m reading Responsive Images and Web Standards at the Turning Point</title>
		<link>http://williamjmoner.com/2012/im-reading-responsive-images-and-web-standards-at-the-turning-point/</link>
		<comments>http://williamjmoner.com/2012/im-reading-responsive-images-and-web-standards-at-the-turning-point/#comments</comments>
		<pubDate>Fri, 18 May 2012 02:41:54 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[A List Apart]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1136</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at A List Apart http://www.alistapart.com/articles/responsive-images-and-web-standards-at-the-turning-point/ By: Mat Marquis on May 15, 2012 at 01:44PM Responsible responsive design demands responsive images—images whose dimensions and file size suit the viewport &#8230; <a href="http://williamjmoner.com/2012/im-reading-responsive-images-and-web-standards-at-the-turning-point/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at A List Apart <a target="_blank" href="http://www.alistapart.com/articles/responsive-images-and-web-standards-at-the-turning-point/">http://www.alistapart.com/articles/responsive-images-and-web-standards-at-the-turning-point/</a><br />
</h3>
<h4>By: Mat Marquis on May 15, 2012 at 01:44PM</h4>
<p>
Responsible responsive design demands responsive images—images whose dimensions and file size suit the viewport and bandwidth of the receiving device. As HTML provides no standard element to achieve this purpose, serving responsive images has meant using JavaScript trickery, and accepting that your solution will fail for some users.</p>
<p>Then a few months ago, in response to an article here, a W3C Responsive Images Community Group formed—and proposed a simple-to-understand HTML picture element capable of serving responsive images. The group even delivered picture functionality to older browsers via two polyfills: namely, Scott Jehl’s Picturefill and Abban Dunne’s jQuery Picture. The WHATWG has responded by ignoring the community’s work on the picture element, and proposing a more complicated img set element.</p>
<p>Which proposed standard is better, and for whom? Which will win? And what can you do to help avert an “us versus them” crisis that could hurt end-users and turn developers off to the standards process? ALA’s own Mat Marquis explains the ins and outs of responsive images and web standards at the turning point.</p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-responsive-images-and-web-standards-at-the-turning-point/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading The art of film and TV title design</title>
		<link>http://williamjmoner.com/2012/im-reading-the-art-of-film-and-tv-title-design/</link>
		<comments>http://williamjmoner.com/2012/im-reading-the-art-of-film-and-tv-title-design/#comments</comments>
		<pubDate>Tue, 15 May 2012 05:41:18 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[kottke.org]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1134</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at kottke.org http://kottke.org/12/04/the-art-of-film-and-tv-title-design By: Jason Kottke on April 25, 2012 at 02:30PM From PBS Off Book, a quick look at the thinking behind the opening titles for TV &#8230; <a href="http://williamjmoner.com/2012/im-reading-the-art-of-film-and-tv-title-design/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at kottke.org <a target="_blank" href="http://kottke.org/12/04/the-art-of-film-and-tv-title-design">http://kottke.org/12/04/the-art-of-film-and-tv-title-design</a><br />
</h3>
<h4>By: Jason Kottke on April 25, 2012 at 02:30PM</h4>
<p></p>
<p>From <a href="http://www.youtube.com/pbsoffbook">PBS Off Book</a>, a quick look at the thinking behind the opening titles for TV shows and movies, including Zombieland, Mad Men, and Se7en.</p>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/qbhi-JICKKI?rel=0" frameborder="0"></iframe></p>
<p>See also <a href="http://www.artofthetitle.com/">Art of the Title</a> and <a href="http://vimeo.com/20759580">A Brief History of Title Design</a>. (via <a href="http://devour.com/video/the-art-of-the-title-sequence/">devour</a>)</p>
<p> <strong>Tags:</strong> <a href="http://kottke.org/tag/design">design</a>   <a href="http://kottke.org/tag/movies">movies</a>   <a href="http://kottke.org/tag/video">video</a></p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-the-art-of-film-and-tv-title-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading 100 ideas that changed graphic design</title>
		<link>http://williamjmoner.com/2012/im-reading-100-ideas-that-changed-graphic-design/</link>
		<comments>http://williamjmoner.com/2012/im-reading-100-ideas-that-changed-graphic-design/#comments</comments>
		<pubDate>Tue, 15 May 2012 02:12:04 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[kottke.org]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1132</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at kottke.org http://kottke.org/12/05/100-ideas-that-changed-graphic-design By: Jason Kottke on May 14, 2012 at 02:34PM From Steven Heller and Veronique Vienne, a book about 100 Ideas that Changed Graphic Design. Maria &#8230; <a href="http://williamjmoner.com/2012/im-reading-100-ideas-that-changed-graphic-design/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at kottke.org <a target="_blank" href="http://kottke.org/12/05/100-ideas-that-changed-graphic-design">http://kottke.org/12/05/100-ideas-that-changed-graphic-design</a><br />
</h3>
<h4>By: Jason Kottke on May 14, 2012 at 02:34PM</h4>
<p></p>
<p>From Steven Heller and Veronique Vienne, <a href="http://www.amazon.com/exec/obidos/ASIN/1856697940/ref=nosim/0sil8">a book about 100 Ideas that Changed Graphic Design</a>. Maria Popova <a href="http://www.theatlantic.com/entertainment/archive/2012/05/100-ideas-that-changed-graphic-design/256876/">has a preview at The Atlantic</a>.</p>
<blockquote><p>From how rub-on lettering democratized design by fueling the DIY movement and engaging people who knew nothing about typography to how the concept of the &#8220;teenager&#8221; was invented after World War II as a new market for advertisers, many of the ideas are mother-of-invention parables. Together, they converge into a cohesive meditation on the fundamental mechanism of graphic design &#8212; to draw a narrative with a point of view, and then construct that narrative through the design process and experience.</p>
</blockquote>
<p> <strong>Tags:</strong> <a href="http://kottke.org/tag/books">books</a>   <a href="http://kottke.org/tag/design">design</a>   <a href="http://kottke.org/tag/Maria%20Popova">Maria Popova</a>   <a href="http://kottke.org/tag/Steven%20Heller">Steven Heller</a>   <a href="http://kottke.org/tag/Veronique%20Vienne">Veronique Vienne</a></p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-100-ideas-that-changed-graphic-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading Freesound</title>
		<link>http://williamjmoner.com/2012/im-reading-freesound/</link>
		<comments>http://williamjmoner.com/2012/im-reading-freesound/#comments</comments>
		<pubDate>Tue, 15 May 2012 02:12:01 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[Cool Tools]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1130</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at Cool Tools http://www.kk.org/cooltools/archives/006204.php?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+CoolTools+%28Cool+Tools%29 By: (author unknown) on May 11, 2012 at 12:10PM There are sound effects libraries that cost more than a small car, and they&#8217;re probably &#8230; <a href="http://williamjmoner.com/2012/im-reading-freesound/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at Cool Tools <a target="_blank" href="http://www.kk.org/cooltools/archives/006204.php?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+CoolTools+%28Cool+Tools%29">http://www.kk.org/cooltools/archives/006204.php?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+CoolTools+%28Cool+Tools%29</a><br />
</h3>
<h4>By: (author unknown) on May 11, 2012 at 12:10PM</h4>
<p>
<img src="http://www.kk.org/cooltools/freesound.jpg"/>
<p>There are sound effects libraries that cost more than a small car, and they&#8217;re probably worth it to certain kinds of users — like movie studios or audio production houses — but not to me. In search of interesting, appropriately licensed sounds for personal amusement, some google searching led me to <a href="http://freesound.org">Freesound.org</a>, which has many thousands of freely usable, user-contributed sound recordings, all Creative Commons licensed. Some of them are tiny snippets, the audio equivalent of the icons on a computer screen, and some are lengthy field recordings. (Many of the sounds here are purely synthetic, too, or remixes that the CC licensing facilitates.) Last Halloween, I set up a playlist for my family&#8217;s &#8220;haunted condo,&#8221; consisting of screams, clanks, and creepy laughter (but also repurposed sounds like foghorns and musical instruments I thought sounded ominious), with sounds drawn entirely from this site.</p>
<p> It&#8217;s also a good place to find ring-tone and computer alert sources, if you&#8217;re just looking for audio clip art, or (with headphones, especially) fascinating &#8220;you are there&#8221; audio experiences; being transported to an audio landscape inhabited by <a href="http://www.freesound.org/people/c97059890/sounds/21754/">gentle waves</a>, <a href="http://www.freesound.org/people/milo/sounds/23452/">ships&#8217; horns</a>, and <a href="http://www.freesound.org/people/reinsamba/sounds/17085/">thunderstorms</a> is a legal way to escape ordinary consciousness.</p>
<p>Freesound really is free, too, though donations are accepted; it started as a project of the <a href="http://mtg.upf.edu/">Music Technology Group of the </a><a href="http://www.upf.edu/en/index.shtml">Universitat Pompeu Fabra</a>. One (very small) catch: you can listen all you want just by visiting the site; downloading the files requires free registration. </p>
<p> &#8212; Timothy Lord </p>
<p><a href="http://www.freesound.org/">Freesound<br />
http://www.freesound.org/</a><br />
Free</p>
<p><iframe src="http://feedads.g.doubleclick.net/~ah/f/c9unqchghp60tbn400jj789k54/468/60#http%3A%2F%2Fwww.kk.org%2Fcooltools%2Farchives%2F006204.php" width="100%" height="60" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"></iframe></p>
<div>
<a href="http://feeds.feedburner.com/~ff/CoolTools?a=NIEMgvpfiuo:RKFIeAHfvRU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CoolTools?d=yIl2AUoC8zA" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/CoolTools?a=NIEMgvpfiuo:RKFIeAHfvRU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/CoolTools?d=7Q72WNTAKBA" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/CoolTools?a=NIEMgvpfiuo:RKFIeAHfvRU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/CoolTools?d=dnMXMwOfBR0" border="0"/></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/CoolTools/~4/NIEMgvpfiuo" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-freesound/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading CNN transcript collection, 2000-2012</title>
		<link>http://williamjmoner.com/2012/im-reading-cnn-transcript-collection-2000-2012/</link>
		<comments>http://williamjmoner.com/2012/im-reading-cnn-transcript-collection-2000-2012/#comments</comments>
		<pubDate>Sat, 12 May 2012 08:11:15 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[FlowingData]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1128</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at FlowingData http://flowingdata.com/2012/05/09/cnn-transcript-collection-2000-2012/ By: Nathan Yau on May 09, 2012 at 01:25PM Thanks to the Internet Archive and CNN, thirteen years of transcripts, about a gigabyte compressed, is &#8230; <a href="http://williamjmoner.com/2012/im-reading-cnn-transcript-collection-2000-2012/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at FlowingData <a target="_blank" href="http://flowingdata.com/2012/05/09/cnn-transcript-collection-2000-2012/">http://flowingdata.com/2012/05/09/cnn-transcript-collection-2000-2012/</a><br />
</h3>
<h4>By: Nathan Yau on May 09, 2012 at 01:25PM</h4>
<p></p>
<p>Thanks to the Internet Archive and CNN, thirteen years of transcripts, about a gigabyte compressed, is <a href="http://archive.org/details/cnn-transcripts-2000-2012">available to download as one file</a>.</p>
<blockquote><p>For over a decade, CNN (Cable News Network) has been providing transcripts of shows, events and newscasts from its broadcasts. The archive has been maintained and the text transcripts have been dependably available at transcripts.cnn.com. This is a just-in-case grab of the years of transcripts for later study and historical research.</p>
</blockquote>
<p>Changes in news coverage and CNN&#8217;s focus over the years, anyone?</p>
<p>[via @<a href="https://twitter.com/#!/A_L">A_L</a>]</p>
<h4>Related</h4>
</p>
<ul>
<li><a href="http://flowingdata.com/2008/03/14/10-largest-data-breaches-since-2000-millions-affected/" rel="bookmark" title="10 Largest Data Breaches Since 2000 – Millions Affected">10 Largest Data Breaches Since 2000 – Millions Affected</a></li>
<li><a href="http://flowingdata.com/2007/12/04/transcript-analyzer-for-republican-debate/" rel="bookmark" title="Transcript Analyzer for Republican Debate">Transcript Analyzer for Republican Debate</a></li>
<li><a href="http://flowingdata.com/2010/07/27/afghanistan-war-logs-revealed-and-mapped/" rel="bookmark" title="Afghanistan war logs revealed and mapped">Afghanistan war logs revealed and mapped</a></li>
</ul>
<p><img src="http://feeds.feedburner.com/~r/FlowingData/~4/fecC0Ss-1eE" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-cnn-transcript-collection-2000-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading Talk: Tooling &amp; The Webapp Development Stack</title>
		<link>http://williamjmoner.com/2012/im-reading-talk-tooling-the-webapp-development-stack/</link>
		<comments>http://williamjmoner.com/2012/im-reading-talk-tooling-the-webapp-development-stack/#comments</comments>
		<pubDate>Fri, 11 May 2012 17:57:55 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[Paul Irish]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1126</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at Paul Irish http://paulirish.com/2012/talk-tooling-the-webapp-development-stack/ By: Paul Irish on May 01, 2012 at 11:57AM One of the things I recognize at Google is how productive developers surround themselves with &#8230; <a href="http://williamjmoner.com/2012/im-reading-talk-tooling-the-webapp-development-stack/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at Paul Irish <a target="_blank" href="http://paulirish.com/2012/talk-tooling-the-webapp-development-stack/">http://paulirish.com/2012/talk-tooling-the-webapp-development-stack/</a><br />
</h3>
<h4>By: Paul Irish on May 01, 2012 at 11:57AM</h4>
<p></p>
<p>One of the things I recognize at Google is how productive developers surround themselves with powerful tools for iterative development and debugging. For us front-end developers, the ecosystem of tools has exploded in the past two years, as we have a lot more software and libraries beyond Firebug and jQuery to help us build webapps. In the talk below I walk through the current ecosystem of tools and how they can make your development experience a more enjoyable one.</p>
<p><iframe src="http://player.vimeo.com/video/40929961?byline=0&amp;portrait=0&amp;color=ff0179" frameborder="0" width="600" height="337"></iframe></p>
<p>My slides:<br /><a href="http://dl.dropbox.com/u/39519/talks/tooling-q1/index.html"><br /><img src="http://paulirish.com/wp-content/uploads/2012/05/toolingappstackss.jpg" alt="" width="450"/><br /></a></p>
<p>Because there are so many tools around, I wanted to break them down somehow. I think contextualizing the tools as to what phase of development that assist with works well:</p>
<p><img src="http://dl.dropbox.com/u/39519/talks/tooling-q1/timeline.png" alt="" width="500"/></p>
<p><small>(You could think of the Y-axis here as the amount of code in a project..)</small></p>
<p>Looking at our tools this way we end up with:</p>
<ul>
<li>Boilerplate
<ul>
<li>You likely start a project with more than a single blank text file.</li>
</ul>
</li>
<li>Authoring Abstractions
<ul>
<li>CSS preprocessors, Languages that transpile to JS, Templating</li>
</ul>
</li>
<li>Frameworks and Application Stack
<ul>
<li>Clientside MVC, UI Components, Widgets</li>
</ul>
</li>
<li>Iteration Workflow
<ul>
<li>Browser Devtools, Browser/Unit/Integration Testing</li>
</ul>
</li>
<li>Performance Tuning
<ul>
<li>Profiling, Memory mgmt, browser instrumentation</li>
</ul>
</li>
<li>Build &amp; Optimization
<ul>
<li>Minifiers, Concat, Image compression…</li>
</ul>
</li>
<li>Deploy
<ul>
<li>Continuous Integration, Continuous deployment</li>
</ul>
</li>
</ul>
<p>I&#8217;ve been thinking a lot about workflow and integrating these tools together. Screencasts like <a href="http://tarantsov.com/blog/2012/02/sublime-text-workflow-that-beats-coda-and-espresso/">Andrey Tarantsov&#8217;s Sublime Text Workflow</a> really excite me and I&#8217;m eager to see more people exploring a robust development setup.</p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-talk-tooling-the-webapp-development-stack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading Ebert&#8217;s greatest films of all time</title>
		<link>http://williamjmoner.com/2012/im-reading-eberts-greatest-films-of-all-time/</link>
		<comments>http://williamjmoner.com/2012/im-reading-eberts-greatest-films-of-all-time/#comments</comments>
		<pubDate>Fri, 11 May 2012 17:57:53 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[kottke.org]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1124</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at kottke.org http://kottke.org/12/05/eberts-greatest-films-of-all-time By: Jason Kottke on May 01, 2012 at 10:58AM For Sight &#38; Sound magazine, Roger Ebert came up with his picks for ten best films &#8230; <a href="http://williamjmoner.com/2012/im-reading-eberts-greatest-films-of-all-time/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at kottke.org <a target="_blank" href="http://kottke.org/12/05/eberts-greatest-films-of-all-time">http://kottke.org/12/05/eberts-greatest-films-of-all-time</a><br />
</h3>
<h4>By: Jason Kottke on May 01, 2012 at 10:58AM</h4>
<p></p>
<p>For Sight &amp; Sound magazine, <a href="http://blogs.suntimes.com/ebert/2012/04/the_greatest_films_of_all_time.html">Roger Ebert came up with his picks for ten best films ever</a>.</p>
<blockquote><p>&#8220;Citizen Kane&#8221; speaks for itself. &#8220;2001: A Space Odyssey&#8221; is likewise a stand-along monument, a great visionary leap, unsurpassed in its vision of man and the universe. It was a statement that came at a time which now looks something like the peak of humanity&#8217;s technological optimism. Many would choose &#8220;Taxi Driver&#8221; as Scorsese&#8217;s greatest film, but I believe &#8220;Raging Bull&#8221; is his best and most personal, a film he says in some ways saved his life. It is the greatest cinematic expression of the torture of jealousy &#8212; his &#8220;Othello.&#8221;</p>
</blockquote>
<p>(via <a href="http://daringfireball.net/">df</a>)</p>
<p> <strong>Tags:</strong> <a href="http://kottke.org/tag/best%20of">best of</a>   <a href="http://kottke.org/tag/lists">lists</a>   <a href="http://kottke.org/tag/movies">movies</a>   <a href="http://kottke.org/tag/Roger%20Ebert">Roger Ebert</a></p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-eberts-greatest-films-of-all-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading Understanding Mojito</title>
		<link>http://williamjmoner.com/2012/im-reading-understanding-mojito/</link>
		<comments>http://williamjmoner.com/2012/im-reading-understanding-mojito/#comments</comments>
		<pubDate>Thu, 10 May 2012 11:42:11 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[and research about emerging technologies.]]></category>
		<category><![CDATA[O'Reilly Radar - Insight]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1122</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at O&#39;Reilly Radar &#8211; Insight, analysis, and research about emerging technologies. http://radar.oreilly.com/2012/05/yahoo-mojito-javascript-code.html?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29 By: Simon St. Laurent on May 10, 2012 at 02:05AM Yahoo&#8217;s Mojito is a different kind &#8230; <a href="http://williamjmoner.com/2012/im-reading-understanding-mojito/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at O&#39;Reilly Radar &#8211; Insight, analysis, and research about emerging technologies. <a target="_blank" href="http://radar.oreilly.com/2012/05/yahoo-mojito-javascript-code.html?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29">http://radar.oreilly.com/2012/05/yahoo-mojito-javascript-code.html?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29</a><br />
</h3>
<h4>By: Simon St. Laurent on May 10, 2012 at 02:05AM</h4>
<p></p>
<p>Yahoo&#8217;s <a href="http://developer.yahoo.com/cocktails/mojito/">Mojito</a> is a different kind of framework: all JavaScript, but running on both the client and the server. Code can run on the server, or on the client, depending on how the framework is tuned. It shook my web architecture assumptions by moving well beyond the convenience of a single language, taking advantage of that approach to process code where it seems most efficient. Programming this way will make it much easier to bridge the gap between developing code and running it efficiently.
</p>
<p>
I talked with Yahoo architect fellow and VP Bruno Fernandez-Ruiz (<a href="http://twitter.com/#!/olympum">@olympum</a>) about the possibilities Node opened and Mojito exploits.</p>
<p>
Highlights from the full video interview include:
</p>
<ul>
<li> &#8220;The browser loses the chrome.&#8221; Web applications no longer always look like they&#8217;ve come from the Web. [Discussed at the <a href="http://www.youtube.com/watch?v=YVOtPsLd7qw#t=02m11s">02:11 mark</a>]</li>
<li> Basic &#8220;Hello World&#8221; in Mojito. How do you get started? [Discussed at the <a href="http://www.youtube.com/watch?v=YVOtPsLd7qw#t=05m05s">05:05 mark</a>]</li>
<li> Exposing web services through YQL. Yahoo Query Language lets you work with web services without sweating the details. [Discussed at the <a href="http://www.youtube.com/watch?v=YVOtPsLd7qw#t=07m56s">07:56 mark</a>]</li>
<li> Manhattan, a closed Platform as a Service.  If you want a more complete hosting option for your Mojito applications, take a look. [Discussed at the <a href="http://www.youtube.com/watch?v=YVOtPsLd7qw#t=10m29s">10:29 mark</a>]</li>
<li> Code should flow among devices.  All of these devices speak HTML and JavaScript. Can we help them talk with each other? [Discussed at the <a href="http://www.youtube.com/watch?v=YVOtPsLd7qw#t=11m50s">11:50 mark</a>]</li>
<p>
</ul>
<p>You can view the entire conversation in the following video:</p>
<p><iframe width="600" height="335" src="http://www.youtube.com/embed/YVOtPsLd7qw" frameborder="0"></iframe></p>
<div style="float:left;border-top:thin gray solid;border-bottom:thin gray solid;padding:20px;margin:20px 2px;clear:both">
<a href="http://fluentconf.com/fluent2012?_discount=RADAR20&amp;intcmp=il-code-fl12-code-podcast-yahoo-mojito"><img style="float:left;border:none;padding-right:10px" src="http://cdn.oreilly.com/radar/images/promos/0312-fluent12-promo-148.png"/></a><a href="http://fluentconf.com/fluent2012?_discount=RADAR20&amp;intcmp=il-code-fl12-code-podcast-yahoo-mojito"><strong>Fluent Conference: JavaScript &amp; Beyond</strong></a> — Explore the changing worlds of JavaScript &amp; HTML5 at the O&#8217;Reilly Fluent Conference (May 29 &#8211; 31 in San Francisco, Calif.).</p>
<p><a href="http://fluentconf.com/fluent2012?_discount=RADAR20&amp;intcmp=il-code-fl12-code-podcast-yahoo-mojito"><strong>Save 20% on registration with the code RADAR20</strong></a>
</div>
<p></p>
<p><strong>Related:</strong></p>
<p>
<ul>

<li> <a href="http://itunes.apple.com/us/podcast/oreilly-medias-code-podcast/id520292841">Subscribe to the free Code podcast through iTunes</a>
</li>
<p>
<li> <a href="http://radar.oreilly.com/2012/03/yahoo-cocktails-livestand-toc-podcast.html">The vision behind Yahoo&#8217;s Cocktails platform and Livestand app</a>
</li>
<p>
</ul>
<div>
<a href="http://feeds.feedburner.com/~ff/oreilly/radar/atom?a=8hr-ZLoeM7Y:Kh_v7ghQk9E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/oreilly/radar/atom?i=8hr-ZLoeM7Y:Kh_v7ghQk9E:V_sGLiPBpWU" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/oreilly/radar/atom?a=8hr-ZLoeM7Y:Kh_v7ghQk9E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/oreilly/radar/atom?d=yIl2AUoC8zA" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/oreilly/radar/atom?a=8hr-ZLoeM7Y:Kh_v7ghQk9E:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/oreilly/radar/atom?i=8hr-ZLoeM7Y:Kh_v7ghQk9E:JEwB19i1-c4" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/oreilly/radar/atom?a=8hr-ZLoeM7Y:Kh_v7ghQk9E:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/oreilly/radar/atom?d=7Q72WNTAKBA" border="0"/></a> <a href="http://feeds.feedburner.com/~ff/oreilly/radar/atom?a=8hr-ZLoeM7Y:Kh_v7ghQk9E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/oreilly/radar/atom?d=qj6IDK7rITs" border="0"/></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/oreilly/radar/atom/~4/8hr-ZLoeM7Y" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-understanding-mojito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading Yochai Benkler explains SOPA</title>
		<link>http://williamjmoner.com/2012/im-reading-yochai-benkler-explains-sopa/</link>
		<comments>http://williamjmoner.com/2012/im-reading-yochai-benkler-explains-sopa/#comments</comments>
		<pubDate>Wed, 09 May 2012 05:11:47 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[Boing Boing]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1120</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at Boing Boing http://boingboing.net/2012/05/08/yochai-benkler-explains-sopa.html?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+boingboing%2FiBag+%28Boing+Boing%29 By: Cory Doctorow on May 08, 2012 at 09:08PM The Guardian: Blueprint for Democratic Participation from The Guardian and The Paley Center for Media &#8230; <a href="http://williamjmoner.com/2012/im-reading-yochai-benkler-explains-sopa/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at Boing Boing <a target="_blank" href="http://boingboing.net/2012/05/08/yochai-benkler-explains-sopa.html?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+boingboing%2FiBag+%28Boing+Boing%29">http://boingboing.net/2012/05/08/yochai-benkler-explains-sopa.html?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+boingboing%2FiBag+%28Boing+Boing%29</a><br />
</h3>
<h4>By: Cory Doctorow on May 08, 2012 at 09:08PM</h4>
<p></p>
<p><a href="http://fora.tv/v/c15533">The Guardian: Blueprint for Democratic Participation</a> from <a href="http://fora.tv/partner/Guardian">The Guardian</a> and <a href="http://fora.tv/partner/Paley_Center_for_Media">The Paley Center for Media</a> on <a href="http://fora.tv">FORA.tv</a>
</p>
<p>
Here&#8217;s Yochai Benkler &#8212; author of <a href="http://www.amazon.com/exec/obidos/ASIN/0300125771/downandoutint-20">Wealth of Networks</a>, one of the most important books written about how the Internet changes society &#8212; describing the fight to stop SOPA with laser clarity and precision, cutting through the DC/media consensus that &#8220;Google killed SOPA&#8221; or &#8220;Wikipedia killed SOPA&#8221; and showing instead how the ecosystem of people who care about networks collaborated to do the unprecedented.</p>
<p>
<a href="http://fora.tv/2012/05/03/The_Guardian_Blueprint_for_Democratic_Participation">The Guardian: Blueprint for Democratic Participation</a></p>
<p>(<i>via <a href="http://www.michaelgeist.ca">Michael Geist</a></i>)</p>
<p><br style="clear:both"/><br style="clear:both"/><a href="http://ads.pheedo.com/click.phdo?s=b121ebe0282809b5d8cc85638806bf96&amp;p=1"><img alt="" style="border:0" border="0" src="http://ads.pheedo.com/img.phdo?s=b121ebe0282809b5d8cc85638806bf96&amp;p=1"/></a><br />
<img alt="" height="0" width="0" border="0" src="http://tags.bluekai.com/site/5148"/><img alt="" height="0" width="0" border="0" src="http://insight.adsrvr.org/track/evnt/?ct=0:dupdmqp&amp;adv=wouzn4v&amp;fmt=3"/><img src="http://feeds.feedburner.com/~r/boingboing/iBag/~4/IdmhjtUIbPE" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-yochai-benkler-explains-sopa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m reading HTML5 Audio — The State of Play</title>
		<link>http://williamjmoner.com/2012/im-reading-html5-audio-the-state-of-play/</link>
		<comments>http://williamjmoner.com/2012/im-reading-html5-audio-the-state-of-play/#comments</comments>
		<pubDate>Wed, 09 May 2012 03:56:29 +0000</pubDate>
		<dc:creator>wjm</dc:creator>
				<category><![CDATA[Starred on Google Reader]]></category>
		<category><![CDATA[HTML5 Doctor]]></category>

		<guid isPermaLink="false">http://williamjmoner.com/?p=1118</guid>
		<description><![CDATA[This Starred Entry from my Google Reader RSS feed can be found at HTML5 Doctor http://html5doctor.com/html5-audio-the-state-of-play/ By: Mark Boas on May 08, 2012 at 09:00AM This is a follow up to my 2009 article Native Audio in the Browser, which &#8230; <a href="http://williamjmoner.com/2012/im-reading-html5-audio-the-state-of-play/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>This Starred Entry from my Google Reader RSS feed can be found at HTML5 Doctor <a target="_blank" href="http://html5doctor.com/html5-audio-the-state-of-play/">http://html5doctor.com/html5-audio-the-state-of-play/</a><br />
</h3>
<h4>By: Mark Boas on May 08, 2012 at 09:00AM</h4>
<p></p>
<p>This is a follow up to my 2009 article <a href="http://html5doctor.com/native-audio-in-the-browser/"><cite>Native Audio in the Browser</cite></a>, which covers the basics of HTML5 audio. It may well be worth reading if you want to get a feel for the <code>&lt;audio&gt;</code> element and associated API.</p>
<p>Now, two and a half years later, it’s time to see how things are progressing. With many new advanced audio APIs being actively worked on and plenty of improvements to the existing native audio we all know and love, it’s certainly an exciting time to revisit the heady world of <code>&lt;audio&gt;</code>.</p>
<p>A good way of understanding how the land lies is by going through a few use cases. That’s what I’ll attempt to do in this post.</p>
<p>So how do we get started? Well, there are a few things we need to do to prepare the ground. Let’s tackle MIME types first.</p>
<h2>MIME Types <a href="http://html5doctor.com/#mime-types">#</a><br />
</h2>
<p>MIME types (also known as <a href="http://en.wikipedia.org/wiki/Internet_media_type">Internet Media Types</a>) are a way of defining file formats so that your system knows how to handle them.</p>
<h3>Server Side <a href="http://html5doctor.com/#mime-types-server-side">#</a><br />
</h3>
<p>First things first: your media server should be configured to serve correct MIME types. In the case of the Apache web server, this means adding the following lines to your <code>.htaccess</code> file:</p>
<p><strong>Tip:</strong> Do not apply gzip compression to your media files on the server. Most formats are already compressed, and there’s limited support for those that aren’t. Further, in the case of a fallback solution, Flash does not support gzipped media.</p>
<pre><code># AddType TYPE/SUBTYPE EXTENSION
AddType audio/mpeg mp3
AddType audio/mp4 m4a
AddType audio/ogg ogg
AddType audio/ogg oga
AddType audio/webm webma
AddType audio/wav wav</code></pre>
<h3>Client Side <a href="http://html5doctor.com/#mime-types-client-side">#</a><br />
</h3>
<p>When defining sources in your code or markup, you can also specify the MIME type, which will help the browser identify the media correctly.</p>
<p>To set up HTML5 audio in the most robust manner, you could write something like this:</p>
<pre><code>&lt;audio&gt;
   &lt;source src="elvis.mp3" type='audio/mpeg; codecs="mp3"'&gt;
   &lt;source src="elvis.oga" type='audio/ogg; codecs="vorbis"'&gt;
   &lt;!-- add your fallback solution here --&gt;
&lt;/audio&gt;</code></pre>
<p>Here we define the element and the sources to use. The browser will only pick one. It won’t play both. In this code, we also place a fallback solution after the &lt;<code>source</code>&gt; elements.</p>
<p>Note that you can omit the codecs portion of the <code>type</code> attribute, but for robustness and efficiency, I recommend you supply the browser with as much media information as possible.</p>
<p>Along with the source, we specify a <code>type</code> attribute. Although not strictly necessary, this attribute allows the browser to know the MIME type and the codecs of the supplied media before it downloads it. If not, supplied the browser will guess and take a trial-and-error approach to detecting the media type.</p>
<p>Cool. So now we know how to define our audio sources, and the browser will happily pick the first source that it supports. But what if we want to supply the correct source in a more dynamic manner?</p>
<h2>Knowing in Advance: <code>canPlayType</code> Can Help, Probably <a href="http://html5doctor.com/#canPlayType">#</a><br />
</h2>
<p>Fortunately the audio API provides us with a way to find out whether a certain format is supported by the browser. But first, here’s a quick recap on how we manipulate the audio element via the API.</p>
<div>
<p>If you mark up your element in HTML as we did in our previous example, you can grab the <code>&lt;audio&gt;</code> element by doing the following:</p>
<pre><code>var audio = document.getElementByTagName('audio')[index];

// or, if you gave it an id attribute
var audio = document.getElementById('my-audio-id');</code></pre>
<p>Alternatively, you can also create your element entirely in JavaScript:</p>
<pre><code>var audio = new Audio();</code></pre>
</div>
<p>Once you have your audio element, you’re ready to access its methods and properties. To test format support, you can use the <code>canPlayType</code> method, which takes a MIME type as a parameter:</p>
<pre><code>audio.canPlayType('audio/ogg');</code></pre>
<p>You can even explicitly include the codec:</p>
<pre><code>audio.canPlayType('audio/ogg; codecs="vorbis"');</code></pre>
<p><code>canPlayType</code> returns one of three values:</p>
<ol>
<li>
<code>probably</code>,</li>
<li>
<code>maybe</code>, or</li>
<li>“” (the empty string).</li>
</ol>
<p>Previously, <code>canPlayType</code> returned “no” instead of the empty string. Worth knowing for use with early audio enabled browsers such as Firefox 3.5, Chrome 4, and Safari 4, although these make up a very small percentage of active browsers.</p>
<p>The reason we have these odd return types is because of the general weirdness surrounding codecs. The browser can only guess at whether a certain codec is playable without actually trying to play it.</p>
<p>So to test for support, you could do this:</p>
<pre><code>var audio = new Audio();
  var canPlayOgg = !!audio.canPlayType &amp;&amp; audio.canPlayType('audio/ogg; codecs="vorbis"') != "";</code></pre>
<p>All we’re doing here is checking that <code>canPlayType</code> is supported (<code>!!</code> effectively casts to a boolean) and then checking that <code>canPlayType</code> of our chosen format doesn’t return an empty string.</p>
<h2>Current Browser Codec Support <a href="http://html5doctor.com/#support">#</a><br />
</h2>
<p>Let’s check the codec support in the current crop of modern browsers.</p>
<table>
<caption>Desktop browser audio codec support</caption>
<thead>
<tr>
<th>Desktop Browser</th>
<th>Version</th>
<th>Codec Support</th>
</tr>
</thead>
<tbody>
<tr>
<td>Internet Explorer</td>
<td>9.0+</td>
<td>MP3, AAC</td>
</tr>
<tr>
<td>Chrome</td>
<td>6.0+</td>
<td>Ogg Vorbis, MP3, WAV†</td>
</tr>
<tr>
<td>Firefox</td>
<td>3.6+</td>
<td>Ogg Vorbis, WAV</td>
</tr>
<tr>
<td>Safari</td>
<td>5.0+</td>
<td>MP3, AAC, WAV</td>
</tr>
<tr>
<td>Opera</td>
<td>10.0+</td>
<td>Ogg Vorbis, WAV</td>
</tr>
</tbody>
</table>
<p>  <small>† WAV since Chrome 9</small></p>
<table>
<caption>Mobile browser audio codec support</caption>
<thead>
<tr>
<th>Mobile Browser</th>
<th>Version</th>
<th>Codec Support</th>
</tr>
</thead>
<tbody>
<tr>
<td>Opera Mobile</td>
<td>11.0+</td>
<td>Device-dependent</td>
</tr>
<tr>
<td>Android</td>
<td>2.3+</td>
<td>Device-dependent</td>
</tr>
<tr>
<td>Mobile Safari (iPhone, iPad, iPod Touch)</td>
<td>iOS 3.0+</td>
<td>MP3, AAC</td>
</tr>
<tr>
<td>Blackberry</td>
<td>6.0+</td>
<td>MP3, AAC</td>
</tr>
</tbody>
</table>
<p><strong>Fun fact:</strong> Android 2.2 supports the <code>&lt;video&gt;</code> element but not its <code>&lt;audio&gt;</code> counterpart. In order to play audio, you need to use the video element.</p>
<p>The good news is that at the time of writing, it’s estimated that around 80% of browsers now support HTML5 audio.</p>
<p>The bad news is that there is still no consensus on which codec to support, so you’ll need to provide both MP3 <em>and</em> Ogg Vorbis sources in order to take full advantage of HTML5 audio.</p>
<h2>Containers, Formats, and File Extensions (oh, and MIME types again) <a href="http://html5doctor.com/#containers">#</a><br />
</h2>
<p>Above, I’ve referred to the audio formats as they’re commonly known, but technically we should refer to their container format. (A container can contain more than one format — e.g., MP4 can contain AAC or AAC+.)</p>
<p><strong>Tip:</strong> To check the codec support of your browser, you can visit <a href="http://jplayer.org/HTML5.Audio.Support/">the jPlayer audio support tester</a> or, more comprehensively (for audio and video), <a href="http://www.baccano.com/video/support.htm">baccano.com</a>.</p>
<table>
<thead>
<tr>
<th>Container</th>
<th>Format(s)</th>
<th>File Extensions</th>
<th>MIME Type</th>
<th>Codec String</th>
</tr>
</thead>
<tbody>
<tr>
<td>MP3</td>
<td>MP3</td>
<td>.mp3</td>
<td>audio/mpeg</td>
<td>mp3</td>
</tr>
<tr>
<td>MP4</td>
<td>AAC, AAC+</td>
<td>.mp4, .m4a, .aac</td>
<td>audio/mp4</td>
<td>mp4a.40.5</td>
</tr>
<tr>
<td>OGA/OGG</td>
<td>Ogg Vorbis</td>
<td>.oga, .ogg</td>
<td>audio/ogg</td>
<td>vorbis</td>
</tr>
<tr>
<td>WAV</td>
<td>PCM</td>
<td>.wav</td>
<td>audio/wav</td>
<td>1</td>
</tr>
</tbody>
</table>
<h2>We have <code>&lt;audio&gt;</code> and we’re not afraid to use it! <a href="http://html5doctor.com/#properties">#</a><br />
</h2>
<p>Okay, we’ve done the minimum amount of work to get our audio element set up and playable. What else can we do? At the moment, we’re relying on the browsers’ default audio players, each of which looks and works a little bit differently than the rest. Perhaps we’d like to customise the experience and create our own. To help us do that, the <code>&lt;audio&gt;</code> element supports several different properties exposing its current state.</p>
<p>Some of the more commonly used properties:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Return Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>currentTime</td>
<td>playhead position</td>
<td>double (seconds)</td>
</tr>
<tr>
<td>duration</td>
<td>media duration</td>
<td>double (seconds); read-only</td>
</tr>
<tr>
<td>muted</td>
<td>is volume muted?</td>
<td>boolean</td>
</tr>
<tr>
<td>paused</td>
<td>is media paused?</td>
<td>boolean</td>
</tr>
<tr>
<td>volume</td>
<td>volume level</td>
<td>double (between 0 and 1)</td>
</tr>
</tbody>
</table>
<p>You may need to check the <code>durationchange</code> event as some durations could change while media downloads. Also, depending on whether metadata is available, you might need to wait until the audio starts playing to check its duration. In short, keep an eye on the <code>durationchange</code> event, and watch out for <code>NaN</code> values when the duration isn’t yet known!</p>
<p>Using these properties is pretty straightforward. For example:</p>
<pre><code>var audio = new Audio();
var duration = audio.duration;</code></pre>
<p>The variable <code>duration</code> now holds the duration (in seconds) of the audio clip.</p>
<h2>Buffering, Seeking, and Time Ranges <a href="http://html5doctor.com/#buffering-seeking-and-time-ranges">#</a><br />
</h2>
<p>The situation is improving in this area, as browser makers start to implement key parts of the spec.</p>
<p>The API provides attributes called <code>buffered</code> and <code>seekable</code> that can be used in situations where we want to ascertain which part of the media has been buffered, preloaded, or is ready to be played without delay.</p>
<p>Let’s first take a look at the <code>buffered</code> and <code>seekable</code> attributes. Both return a <a href="http://www.w3.org/TR/html5/video.html#timeranges">TimeRanges</a> object. The <code>TimeRanges</code> object is a list of time periods containing start and end times that can be referenced by their indexes.</p>
<h3>The <code>buffered</code> Attribute <a href="http://html5doctor.com/#buffered-attribute">#</a><br />
</h3>
<p>The <code>buffered</code> attribute will return the time ranges that have been completely downloaded. A little bit of a code:</p>
<pre><code>// returns TimeRanges object of buffered media
var buffered = audio.buffered;

// returns time in seconds of the last buffered TimeRange
var bufferedEnd = audio.buffered.end();</code></pre>
<h3>The <code>TimeRanges</code> Object <a href="http://html5doctor.com/#time-ranges">#</a><br />
</h3>
<p>The <code>TimeRanges</code> object contains data on the parts on buffered media in the form of one or more — you guessed it — time ranges. A <code>TimeRanges</code> object consists of these properties:</p>
<ol>
<li>
<code>length</code> — number of time ranges</li>
<li>
<code>start(index)</code> — start time in seconds of a particular time range</li>
<li>
<code>end(index)</code> — end time in seconds of a particular time range</li>
</ol>
<p><strong>Fun fact:</strong> The default unit of time used by the JavaScript Audio API is seconds, while many traditional JavaScript functions, such as <code>setInterval</code>, use milliseconds.</p>
<p>You may be wondering in what situation the <code>TimeRanges</code> object would contain more than one time range. Imagine the user clicks forward to a portion of unbuffered media. The idea is that the media would then start buffering from that point, and you’d have two time ranges:</p>
<pre>------------------------------------------------------
|=============|                    |===========|     |
------------------------------------------------------
0             5                    15          19    21</pre>
<p>So in this case:</p>
<ul>
<li>
<code>audio.buffered.length</code> returns 2</li>
<li>
<code>audio.buffered.start(0)</code> returns 0</li>
<li>
<code>audio.buffered.end(0)</code> returns 5</li>
<li>
<code>audio.buffered.start(1)</code> returns 15</li>
<li>
<code>audio.buffered.end(1)</code> returns 19</li>
<li>
<code>audio.buffered.end()</code> returns 19</li>
</ul>
<p><strong>Tip:</strong> Most audio-capable browsers enable seeking to new file positions during a download. To allow this, you must enable range requests on your server. Although enabled by default on web servers such as Apache, you can verify by checking that your server responds with the <code>Accept-Ranges</code> header.</p>
<p>Note that if the user is actively seeking through the media throughout the buffering process, a contiguous buffered progress bar actually makes little sense. Also consider that some browsers will read part of the end of the file to establish duration and so create two time ranges almost immediately. Now you’re starting to appreciate why making an accurate buffered progress bar is a little tricky!</p>
<p>You can check out <code>TimeRanges</code> in real-time using this handy <a href="http://jplayer.org/HTML5.Media.Event.Inspector/">HTML5 Media Event Inspector</a>.</p>
<h3>Seeking and Seekable <a href="http://html5doctor.com/#seeking-and-seekable">#</a><br />
</h3>
<p>Seeking is the act of looking forward (or backward) in a media file. This usually happens when a section of media is requested before it’s finished loading.</p>
<p>The <code>seeking</code> attribute can be used to determine whether that part of the media is being actively “seeked”. When it returns true, the portion of the media the user requested is still being loaded.</p>
<p><strong>Fun fact:</strong> All modern browsers, apart from Safari on Windows, enable the <code>seekable</code> attribute, which means the <code>seeking</code> event never seems to fire as the user can jump directly to the requested part. The <code>seeked</code> event does fire though, which annoys some people who think that <code>seeking</code> should always fire before <code>seeked</code>.</p>
<p>To recap a little, the <code>buffered</code> property tells us what’s been downloaded and is often used as an indication of what part of the media can be directly played. If the browser supports it, however, it may make more sense to use the <code>seekable</code> attribute to determine which parts of the media can be jumped to and played immediately.</p>
<p><code>seekable</code> returns a <code>TimeRanges</code> object of time ranges that can be played immediately. This uses a technology known as byte-range requests, which allows part of the content to be requested over HTTP. In short, we don’t have to load all the data prior to the desired part in order to play it.</p>
<p>An example:</p>
<pre><code>// Is the player currently seeking?
var isSeeking = audio.seeking;

// Is the media seekable?
var isSeekable = audio.seekable &amp;&amp; audio.seekable.length &gt; 0;

// Time in seconds within which the media is seekable.
var seekableEnd = audio.seekable.end();</code></pre>
<div>
<p>Time ranges can be confusing. <code>audio.seekable.end()</code> actually tells us the end point of the last time range (not the end point of all seekable media). In practice, though, this is good enough, as the browser either enables range requests or doesn’t. If it doesn’t, then <code>audio.seekable</code> will be equivalent to <code>audio.buffered</code>, which will give a valid indication of the end of seekable media.</p>
</div>
<p>Note that media being in a “seekable” state is different than media being in a “buffered” state. Media doesn’t have to be buffered to be seekable.</p>
<p><strong>Fun fact:</strong> In practice only one seekable TimeRange object is created. Where browsers support range requests the TimeRange object spans zero to the media duration, where they don’t, the TimeRange object starts at zero and its end grows as the media downloads.</p>
<p>Buffered and seekable data can be useful information, but it would be too easy if there weren’t a few gotchas.</p>
<ol>
<li>Preloading is not supported in all older audio-capable browsers (Opera 10/Firefox 3.6).</li>
<li>The <code>buffered</code> attribute is not always supported (Blackberry PlayBook).</li>
<li>Not all HTML5 browsers allow byte-range seeking — for example, Safari on Windows. In this case, you can still seek within the downloaded content. It downloads from the start until the end, as does Flash.</li>
</ol>
<p>If you want to deliver the best possible solution to your users, you’ll need to feature test.</p>
<h3>A Note about Preloading <a href="http://html5doctor.com/#preloading">#</a><br />
</h3>
<p>I mentioned the <code>preload</code> attribute in the previous article. This attribute accepts three possible values:</p>
<ol>
<li>
<code>none</code> — Do not preload any media. Wait for a play event before downloading anything.</li>
<li>
<code>metadata</code> — Preload just the metadata. Grab the start and the end of the file via range-request and determine the duration.</li>
<li>
<code>auto</code> — Preload the whole file. Grab the start and the end of the file to determine duration, then seek back to the start again for the preload proper.</li>
</ol>
<p><strong>Fun fact:</strong> Mobile Safari ignores the <code>preload</code> attribute, effectively always using <code>preload="none"</code>.</p>
<p>When it comes to preloading, remember that it’s a request or hint to tell the browser how you’d like to preload the media. The browser is not under any obligation to fulfill that request. For this reason, certain browsers may handle these requests differently.</p>
<h2>Well-Played <a href="http://html5doctor.com/#played">#</a><br />
</h2>
<p><strong>Tip:</strong> If you loop through <code>audio.played</code>, sum the time ranges between starts and ends, and then compare it with the duration, you can determine the percentage of the audio that the user has listened to. This may be a useful metric.</p>
<p>It’s worth mentioning the <code>played</code> property in passing. This property tells us which time ranges have been played within the media. For example:</p>
<pre><code>// returns a TimeRanges object
var played = audio.played;</code></pre>
<h2>Media Events <a href="http://html5doctor.com/#events">#</a><br />
</h2>
<p>Underpinning both the native audio and video APIs is a comprehensive set of events. A full list can be found at the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#mediaevents">WhatWG version of the spec</a>.</p>
<p>Attaching handlers to media events allows you to easily react to changes in state. For example, it might be useful to update the time info in a custom-built player each time the <code>timeupdate</code> event occurs.</p>
<p>A quick summary of the more commonly used media events:</p>
<table>
<thead>
<tr>
<th>Event</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>durationchange</td>
<td>The <code>duration</code> attribute has been updated.</td>
</tr>
<tr>
<td>ended</td>
<td>Playback has stopped as the end of the media was reached.</td>
</tr>
<tr>
<td>pause</td>
<td>The media playback has been paused. Note there is no <code>stop</code> event.</td>
</tr>
<tr>
<td>play</td>
<td>The media has started playing.</td>
</tr>
<tr>
<td>timeupdate</td>
<td>The current playback position changed (usually every 250ms).</td>
</tr>
<tr>
<td>volumechange</td>
<td>The volume changed.</td>
</tr>
</tbody>
</table>
<p><strong>Tip:</strong> Android (at least 2.3) does not always fire the <code>ended</code> event. Well, it sometimes throws one out for good measure, but generally you need to create your own by capturing the <code>pause</code> event that is fired upon reaching the end of the media and comparing <code>audio.currentTime</code> with <code>audio.duration</code>. Alternatively, you can listen for the <code>pause</code> event and check that <code>audio.currentTime</code> is zero. To be absolutely certain, use a combination of both techniques.</p>
<p>Other useful events:</p>
<table>
<thead>
<tr>
<th>Event</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>canplay</td>
<td>The media can be played but may need to pause while the file is downloaded.</td>
</tr>
<tr>
<td>canplaythrough</td>
<td>At current download rates, it is estimated that the media can be played from start to finish without pause.</td>
</tr>
<tr>
<td>progress</td>
<td>The browser is fetching the media data (usually every 250ms).</td>
</tr>
</tbody>
</table>
<p>Again, the <a href="http://jplayer.org/HTML5.Media.Event.Inspector/">HTML5 Media Event Inspector</a> is your friend.</p>
<p>Additionally, you can test browser support by using <a href="http://areweplayingyet.org/">areweplayingyet.org</a>. It’s worth checking out the code behind the tests to understand the goings-on under the hood.</p>
<h2>Streaming <a href="http://html5doctor.com/#streaming">#</a><br />
</h2>
<p>Streaming audio is a common requirement. This is an area that until recently has been dominated by Adobe’s Flash technology. Proprietary server technologies and protocols are well-established. One of the leading examples of this is Adobe’s <a href="http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol">Real Time Messaging Protocol</a> (RTMP). However, current browsers only support streaming over HTTP, and so something like Flash is required to process RTMP streams.</p>
<p>Currently, audio-enabled browsers only support <a href="http://en.wikipedia.org/wiki/SHOUTcast">SHOUTcast</a> and <a href="http://en.wikipedia.org/wiki/Icecast">Icecast</a> servers that stream audio over HTTP. SHOUTcast is propriety and allows streaming of MP3 and AAC files only, while Icecast is non-propriety and supports Ogg Vorbis as well as MP3 and AAC.</p>
<table>
<thead>
<tr>
<th>Stream</th>
<th>AAC</th>
<th>MP3</th>
<th>Ogg Vorbis</th>
<th>Native Support</th>
</tr>
</thead>
<tbody>
<tr>
<td>Icecast</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>SHOUTCast</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>RTMP</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>No (requires Flash)</td>
</tr>
</tbody>
</table>
<h2>An Evolving Spec (Or, “Whoa, this thing is moving!”) <a href="http://html5doctor.com/#spec">#</a><br />
</h2>
<p>As the audio spec is still evolving, there are a couple of inconsistencies in browser implementations to watch out for. These generally affect older browsers.</p>
<h3>The <code>load</code> Method <a href="http://html5doctor.com/#load">#</a><br />
</h3>
<p>Until fairly recently, the <code>load</code> method was required in order to tell the browser about a change in the media source and to get it to update appropriately. Now, <code>media.load()</code> causes the element to reset and to start selecting and loading a new media resource from scratch.</p>
<p>So for older browsers, such as Firefox 3.6, in order to change the media source, you’ll not only need to change the source value but also issue a load command:</p>
<pre><code>var audio = new Audio();
audio.setAttribute("src","mynew.mp3");
audio.load(); // required for 'older' browsers</code></pre>
<h3>When Browsers Go Off-Spec <a href="http://html5doctor.com/#hacks">#</a><br />
</h3>
<p>When creating cross-browser solutions, it’s useful to know which browsers follow <a href="http://dev.w3.org/html5/spec/video.html#audio">the W3C spec</a> to what extent and how they deviate.</p>
<h4>Autoplay and Volume <a href="http://html5doctor.com/#autoplay-and-volume">#</a><br />
</h4>
<p>iOS and Blackberry devices ignore the <code>autoplay</code> attribute and media element volume changes, whereas Android supports <code>autoplay</code> but not volume changes.</p>
<p>Effectively, on Blackberry and iOS devices, <code>autoplay</code> functionality is disabled as both require a user-initiated event to “kick it off”. This has the unfortunate side-effect that any audio suffers a delay between user interaction and playback.</p>
<p>To mitigate against these issues, you may want to take a look at <a href="http://remysharp.com/2010/12/23/audio-sprites/">Doctor Remy Sharp’s excellent article on Audio Sprites and fixes for iOS</a>.</p>
<h4>Simultaneous Playback of Multiple Audio Elements <a href="http://html5doctor.com/#multiaudio">#</a><br />
</h4>
<p>A particular annoyance for developers of anything but the most simple audio web apps: not all browsers will play multiple audio elements simultaneously. This is a particular problem for games developers. Again, we see this issue with iOS and Blackberry devices.</p>
<h4>Operating System Dependence <a href="http://html5doctor.com/#oses">#</a><br />
</h4>
<p>Although of limited use to developers, you could install other codecs such as Ogg Vorbis on the underlying operating system, and browsers that use OS codecs should be able to play them back.</p>
<p><a href="http://happyworm.com/blog/2010/08/17/safari-requires-quicktime-for-html5-based-media/">Safari (5+) relies on Quicktime being installed.</a> This is rarely a problem unless you are running it on Windows.</p>
<p>Internet Explorer (9+) relies on the codecs being present at the operating system level. As it only runs on Windows, this is fortunately almost always the case.</p>
<h2>What’s New? <a href="http://html5doctor.com/#whats-new">#</a><br />
</h2>
<p>There are a few new features and whole new APIs being specified for web-based audio, so let’s take a look at what’s around the corner.</p>
<h3>A Change of Pace <a href="http://html5doctor.com/#playback-rate">#</a><br />
</h3>
<p>A couple of noteworthy upcoming features are <code>playbackRate</code> and <code>defaultPlaybackRate</code>. As you can probably imagine, these fellas let us alter the speed and direction of playback. This functionality could be used for fast-forward and rewind functions or perhaps to allow users to tweak the playback speed so they can fit more podcasts into their day.</p>
<ul>
<li>
<code>audio.playbackRate</code> returns 1 at normal speed and acts as a multiple that is applied to the rate of playback. For example, setting <code>playbackRate</code> to 2 would double the speed, while setting it to -1 would play the media backwards.</li>
<li>
<code>audio.defaultPlaybackRate</code> is the rate at which the audio will play after you pause and restart the media (or issue any event for that matter).</li>
</ul>
<h3>Media Fragments <a href="http://html5doctor.com/#media-fragments">#</a><br />
</h3>
<p>Currently, if we wish to reference some part of a media file, we often first have to download at least some of the media we don&#8217;t actually need. <a href="http://www.w3.org/TR/media-frags/">The W3C Media Fragments proposal</a> was created to address this issue <a href="http://www.w3.org/TR/2009/WD-media-frags-reqs-20091217/">and others</a>, such as the retrieval of an area of video or just the associated text track. In the case of audio, it will allow us to specify which parts we want to download using parameters on the source URI.</p>
<h2>Advanced Audio APIs: The Future Sound of Browsers <a href="http://html5doctor.com/#advanced-apis">#</a><br />
</h2>
<p>When it comes to more advanced audio functionality, Mozilla was first to enter the fray with <a href="https://wiki.mozilla.org/Audio_Data_API">an early experimental Audio Data API for Firefox</a>. This was intended to facilitate audio manipulation via JavaScript and created a platform for low-level tinkering.</p>
<p>Not to be outdone, Google released <a href="https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html">the Web Audio API for Chrome</a> and put it forward as a W3C proposal. The Web Audio API is a higher-level implementation that takes an audio-node based approach and provides many useful functions.</p>
<p>Both implementations address the desire by developers to do more with audio — to create, manipulate, analyse, and mix audio on the fly. In effect, we may one day be able to do in a browser anything we can currently do with native applications.</p>
<p>So what if we want to play with advanced audio in the browser? Well, two separate implementations currently exist. If you want to write applications that use both APIs in any reasonable way, you need third-party bridging libraries to abstract away the differences.</p>
<p>Also fairly new on the scene is <a href="http://www.w3.org/TR/2011/WD-streamproc-20111215/">Mozilla&#8217;s MediaStream Processing API</a>, which takes another approach to audio and video streams to allow us to manipulate at both high and low levels.</p>
<p>In fact, using advanced APIs and taking advantage of the speed of modern JavaScript engines, we can even write decoders for unsupported codecs. Currently, we have <a href="http://codecs.ofmlabs.org/">the JSMad MP3 decoder and the lossless Alac.js decoder</a>. Apparently, FLAC and AAC are in the pipeline. There is hope, then, that in the future, we may not have to worry about which browsers are supporting which formats.</p>
<p>For those curious about advanced web audio, I wrote about the differences in approaches and the different libraries that allow us to write cross-browser solutions in <a href="http://happyworm.com/blog/2011/11/15/html5-audio-apis-how-low-can-we-go/"><cite>HTML5 Audio APIs: How Low can we Go?</cite></a></p>
<p>The good news is that all relevant parties are talking, and things seem to be buzzing on <a href="http://www.w3.org/2011/audio/">the W3C Audio Working Group</a>. It looks like everyone is coming together to put their ideas into <a href="http://www.w3.org/TR/audioproc/">a unified Audio Processing API</a>, which is rapidly approaching publication as a Web Standard.</p>
<h2>Summary <a href="http://html5doctor.com/#summary">#</a><br />
</h2>
<p>Although browser implementations of the current HTML5 audio spec are improving, there are still a few issues to watch out for when creating comprehensive cross-browser solutions. You certainly need to be aware of browser limitations on platforms like iOS. Hopefully, as support matures, these issues will disappear.</p>
<p>Positive news on the &#8220;advanced audio&#8221; front too: <a href="http://www.w3.org/TR/audioproc/">a new standard is being established</a>, and we&#8217;re close to get a unified spec for browser makers to work from. In the meantime, JavaScript libraries are available to help bridge the gaps between existing implementations.</p>
<p>There are also signs that we may be seeing the end of the requirement for different browser-dependent codecs. Opera Mobile already supports MP3 where the underlying OS supports it, and <a href="http://groups.google.com/group/mozilla.dev.platform/browse_thread/thread/fb14de8b9ad84e15/4cfccdde2cb064d1?#4cfccdde2cb064d1">Mozilla look like they may enable this too</a>. If this option exists for mobile browsers, it&#8217;s not a huge stretch to imagine that desktop browsers will follow suit.</p>
<p>So lots happening and lots already achieved. The rough edges of existing browser implementations are being smoothed, consensus and standards are being forged, and we can see the foundations of some very exciting new technologies being established.</p>
<p>The future of web-based audio looks bright!</p>
<h2>Further Reading <a href="http://html5doctor.com/#links">#</a><br />
</h2>
<ul>
<li><a href="http://24ways.org/2010/the-state-of-html5-audio">&#8220;Probably, Maybe, No&#8221;: The State of HTML5 Audio</a></li>
<li><a href="http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio">The State of HTML5 Audio</a></li>
<li><a href="http://www.catswhocode.com/blog/mastering-the-html5-audio-property">Mastering the HTML5 &lt;audio&gt; tag</a></li>
<li><a href="http://blogs.msdn.com/b/ie/archive/2011/05/13/unlocking-the-power-of-html5-lt-audio-gt.aspx">Unlocking the power of HTML5 &lt;audio&gt;</a></li>
<li><a href="http://my.opera.com/core/blog/2010/03/03/everything-you-need-to-know-about-html5-video-and-audio-2">Everything you need to know about HTML5 video and audio</a></li>
</ul>
<div>
<h3>Related Posts:</h3>
<ul>
<li><a href="http://html5doctor.com/native-audio-in-the-browser/" rel="bookmark">Native Audio in the browser</a></li>
<li><a href="http://html5doctor.com/video-the-track-element-and-webm-codec/" rel="bookmark">Video: the track element and webM codec</a></li>
<li><a href="http://html5doctor.com/the-video-element/" rel="bookmark">The video element</a></li>
<li><a href="http://html5doctor.com/video-subtitling-and-webvtt/" rel="bookmark">Video Subtitling and WebVTT</a></li>
<li><a href="http://html5doctor.com/getusermedia/" rel="bookmark">It’s Curtains for Marital Strife Thanks to getUserMedia</a></li>
</ul>
</div>
<p><a href="http://html5doctor.com/html5-audio-the-state-of-play/" rel="bookmark">HTML5 Audio — The State of Play</a> originally appeared on <a href="http://html5doctor.com">HTML5 Doctor</a> on May 8, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://williamjmoner.com/2012/im-reading-html5-audio-the-state-of-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

