<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en">
<title type="text">dive into mark</title>
<subtitle type="text">once again between addictions</subtitle>
<id>tag:diveintomark.org,2001-07-29:/</id>
<updated>2009-11-03T21:38:59Z</updated>
<link rel="alternate" type="text/html" href="http://diveintomark.org/" />

<link rel="self" href="http://feeds.feedburner.com/diveintomark/all" type="application/atom+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdiveintomark%2Fall" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdiveintomark%2Fall" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdiveintomark%2Fall" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/diveintomark/all" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdiveintomark%2Fall" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdiveintomark%2Fall" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdiveintomark%2Fall" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:browserFriendly>Mu. &lt;h1&gt;Mu.&lt;/h1&gt; Mu.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Why do we have an IMG element?]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/11/02/why-do-we-have-an-img-element" />
<id>tag:diveintomark.org,2009-11-02:/archives/20091102231833</id>
<updated>2009-11-03T21:38:59Z</updated>
<published>2009-11-02T23:18:33Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="history" /><category scheme="http://diveintomark.org" term="html" /><category scheme="http://diveintomark.org" term="mu" /><summary type="html">Quite simply, because Marc Andreessen shipped one, and shipping code wins.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/11/02/why-do-we-have-an-img-element">&lt;p&gt;On February 25, 1993, &lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0182.html"&gt;&lt;cite&gt;Marc Andreessen&lt;/cite&gt; wrote&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0182.html"&gt;
&lt;p&gt;I&amp;#8217;d like to propose a new, optional HTML tag:&lt;/p&gt;
&lt;p&gt;IMG&lt;/p&gt;
&lt;p&gt;Required argument is &lt;code&gt;SRC="url"&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;This names a bitmap or pixmap file for the browser to attempt to pull over the network and interpret as an image, to be embedded in the text at the point of the tag&amp;#8217;s occurrence.&lt;/p&gt;
&lt;p&gt;An example is:
&lt;p&gt;&lt;code&gt;&amp;lt;IMG SRC="file://foobar.com/foo/bar/blargh.xbm"&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;(There is no closing tag; this is just a standalone tag.)&lt;/p&gt;
&lt;p&gt;This tag can be embedded in an anchor like anything else; when that happens, it becomes an icon that&amp;#8217;s sensitive to activation just like a regular text anchor.&lt;/p&gt;
&lt;p&gt;Browsers should be afforded flexibility as to which image formats they support. Xbm and Xpm are good ones to support, for example. If a browser cannot interpret a given format, it can do whatever it wants instead (X Mosaic will pop up a default bitmap as a placeholder).&lt;/p&gt;
&lt;p&gt;This is required functionality for X Mosaic; we have this working, and we&amp;#8217;ll at least be using it internally. I&amp;#8217;m certainly open to suggestions as to how this should be handled within HTML; if you have a better idea than what I&amp;#8217;m presenting now, please let me know. I know this is hazy wrt image format, but I don&amp;#8217;t see an alternative than to just say &amp;#8220;let the browser do what it can&amp;#8221; and wait for the perfect solution to come along (MIME, someday, maybe).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/X_BitMap"&gt;Xbm&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/X_PixMap"&gt;Xpm&lt;/a&gt; were popular graphics formats on Unix systems.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Mosaic&amp;#8221; was one of the earliest web browsers. (&amp;#8221;X Mosaic&amp;#8221; was the version that ran on Unix systems.) When he wrote this message in early 1993, &lt;a href="http://en.wikipedia.org/wiki/Marc_Andreessen"&gt;Marc Andreessen&lt;/a&gt; had not yet founded the company that made him famous, &lt;a href="http://en.wikipedia.org/wiki/Mosaic_Communications_Corporation"&gt;Mosaic Communications Corporation&lt;/a&gt;, nor had he started work on that company&amp;#8217;s flagship product, &amp;#8220;Mosaic Netscape.&amp;#8221; (You may know them better by their later names, &amp;#8220;Netscape Corporation&amp;#8221; and &amp;#8220;Netscape Navigator.&amp;#8221;)&lt;/p&gt;

&lt;p&gt;&amp;#8220;MIME, someday, maybe&amp;#8221; is a reference to &lt;a href="http://en.wikipedia.org/wiki/Content_negotiation"&gt;content negotiation&lt;/a&gt;, a feature of HTTP where a client (like a web browser) tells the server (like a web server) what types of resources it supports (like &lt;code&gt;image/jpeg&lt;/code&gt;) so the server can return something in the client&amp;#8217;s preferred format. &lt;a href="http://www.w3.org/Protocols/HTTP/AsImplemented.html"&gt;The Original HTTP as defined in 1991&lt;/a&gt; (the only version that was implemented in February 1993) did not have a way for clients to tell servers what kind of images they supported, thus the design dilemma that Marc faced.&lt;/p&gt;

&lt;p&gt;A few hours later, &lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0183.html"&gt;&lt;cite&gt;Tony Johnson&lt;/cite&gt; replied&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0183.html"&gt;
&lt;p&gt;I have something very similar in Midas 2.0 (in use here at SLAC, and due for public release any week now), except that all the names are different, and it has an extra argument &lt;code&gt;NAME="name"&lt;/code&gt;. It has almost exactly the same functionality as your proposed &lt;code&gt;IMG&lt;/code&gt; tag. e.g.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;ICON name="NoEntry" href="http://note/foo/bar/NoEntry.xbm"&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The idea of the name parameter was to allow the browser to have a set of &amp;#8220;built in&amp;#8221; images. If the name matches a &amp;#8220;built in&amp;#8221; image it would use that instead of having to go out and fetch the image. The name could also act as a hint for &amp;#8220;line mode&amp;#8221; browsers as to what kind of a symbol to put in place of the image.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t much care about the parameter or tag names, but it would be sensible if we used the same things. I don&amp;#8217;t much care for abbreviations, ie why not &lt;code&gt;IMAGE=&lt;/code&gt; and &lt;code&gt;SOURCE=&lt;/code&gt;. I somewhat prefer &lt;code&gt;ICON&lt;/code&gt; since it imlies that the &lt;code&gt;IMAGE&lt;/code&gt; should be smallish, but maybe &lt;code&gt;ICON&lt;/code&gt; is an overloaded word?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/MidasWWW"&gt;Midas&lt;/a&gt; was another early web browser, a contemporary of X Mosaic. It was cross-platform; it ran on both Unix and VMS. &amp;#8220;SLAC&amp;#8221; refers to the &lt;a href="http://en.wikipedia.org/wiki/Stanford_Linear_Accelerator"&gt;Stanford Linear Accelerator Center&lt;/a&gt; (now the SLAC National Accelerator Laboratory). SLAC hosted the first web server in the United States (in fact &lt;a href="http://www.slac.stanford.edu/history/earlyweb/history.shtml"&gt;the first web server outside Europe&lt;/a&gt;). When &lt;a href="http://www.slac.stanford.edu/history/earlyweb/wizards.shtml#Tony%20Johnson"&gt;Tony&lt;/a&gt; wrote this message, SLAC was an old-timer on the WWW, having hosted &lt;a href="http://www.slac.stanford.edu/history/earlyweb/firstpages.shtml"&gt;five pages&lt;/a&gt; on their web server for a whopping 441 days.&lt;/p&gt;

&lt;p&gt;Tony continued:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;While we are on the subject of new tags, I have another, somewhat similar tag, which I would like to support in Midas 2.0. In principle it is:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;INCLUDE HREF="..."&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The intention here would be that the second document is to be included into the first document at the place where the tag occured. In principle the referenced document could be anything, but the main purpose was to allow images (in this case arbitrary sized) to be embedded into documents. Again the intention would be that when HTTP2 comes along the format of the included document would be up for separate negotiation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#8220;HTTP2&amp;#8221; is a reference to &lt;a href="http://www.w3.org/Protocols/HTTP/HTTP2.html"&gt;Basic HTTP as defined in 1992&lt;/a&gt;. At this point in early 1993, it was still largely unimplemented. The draft known as &amp;#8220;HTTP2&amp;#8221; evolved and was eventually standardized as &amp;#8220;HTTP 1.0&amp;#8221; (albeit &lt;a href="http://www.w3.org/Protocols/HTTP/1.0/spec.html"&gt;not for another three years&lt;/a&gt;). HTTP 1.0 did include &lt;a href="http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#z3"&gt;request headers for content negotiation&lt;/a&gt;, a.k.a. &amp;#8220;MIME, someday, maybe.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Tony continued:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An alternative I was considering was:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;A HREF="..." INCLUDE&gt;See photo&amp;lt;/A&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t much like adding more functionality to the &lt;code&gt;&amp;lt;A&gt;&lt;/code&gt; tag, but the idea here is to maintain compatibility with browsers that can not honour the &lt;code&gt;INCLUDE&lt;/code&gt; parameter. The intention is that browsers which do understand &lt;code&gt;INCLUDE&lt;/code&gt;, replace the anchor text (in this case &amp;#8220;See photo&amp;#8221;) with the included document (picture), while older or dumber browsers ignore the &lt;code&gt;INCLUDE&lt;/code&gt; tag completely.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This proposal was never implemented, although the idea of text-if-an-image-is-missing is &lt;a href="http://diveintoaccessibility.org/day_23_providing_text_equivalents_for_images.html"&gt;an important accessibility technique&lt;/a&gt; which was missing from Marc&amp;#8217;s initial &lt;code&gt;&amp;lt;IMG&gt;&lt;/code&gt; proposal. Many years later, this feature was bolted on as the &lt;a href="http://www.w3.org/TR/html4/struct/objects.html#h-13.8"&gt;&lt;code&gt;&amp;lt;img alt&gt;&lt;/code&gt; attribute&lt;/a&gt;, which Netscape promptly broke by &lt;a href="http://www.cs.tut.fi/~jkorpela/html/alt.html#tooltip"&gt;erroneously treating it as a tooltip&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A few hours after that, &lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0186.html"&gt;&lt;cite&gt;Tim Berners-Lee&lt;/cite&gt; responded&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0186.html"&gt;
&lt;p&gt;I had imagined that figues would be reprented as&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;a name=fig1 href="fghjkdfghj" REL="EMBED, PRESENT"&gt;Figure &amp;lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;where the relation ship values mean&lt;/p&gt;
&lt;pre&gt;EMBED	 Embed this here when presenting it
PRESENT	 Present this whenever the source document is presented&lt;/pre&gt;
&lt;p&gt;Note that you can have various combinations of these, and if the browser doesn&amp;#8217;t support either one, it doesn&amp;#8217;t break.&lt;/p&gt;
&lt;p&gt;[I] see that using this as a method for selectable icons means nesting anchors. Hmmm. But I hadn&amp;#8217;t wanted a special tag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This proposal was never implemented, but the &lt;code&gt;rel&lt;/code&gt; attribute is &lt;a href="http://diveintohtml5.org/semantics.html#link"&gt;still around&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0188.html"&gt;&lt;cite&gt;Jim Davis&lt;/cite&gt; added&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0188.html"&gt;
&lt;p&gt;It would be nice if there was a way to specify the content type, e.g.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;IMG HREF="http://nsa.gov/pub/sounds/gorby.au" CONTENT-TYPE=audio/basic&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But I am completely willing to live with the requirement that I specify the content type by file extension.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This proposal was never implemented, but Netscape did later add arbitrary embedding of media objects with the &lt;code&gt;&amp;lt;embed&gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0192.html"&gt;&lt;cite&gt;Jay C. Weber&lt;/cite&gt; asked&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0192.html"&gt;
&lt;p&gt;While images are at the top of my list of desired medium types in a WWW browser, I don&amp;#8217;t think we should add idiosyncratic hooks for media one at a time. Whatever happened to the enthusiasm for using the MIME typing mechanism?
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0194.html"&gt;&lt;cite&gt;Marc Andreessen&lt;/cite&gt; replied&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0194.html"&gt;
&lt;p&gt;This isn&amp;#8217;t a substitute for the upcoming use of MIME as a standard document mechanism; this provides a necessary and simple implementation of functionality that&amp;#8217;s needed independently from MIME.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0198.html"&gt;&lt;cite&gt;Jay C. Weber&lt;/cite&gt; responded&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0198.html"&gt;
&lt;p&gt;Let&amp;#8217;s temporarily forget about MIME, if it clouds the issue. My objection was to the discussion of &amp;#8220;how are we going to support embedded images&amp;#8221; rather than &amp;#8220;how are we going to support embedded objections in various media&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Otherwise, next week someone is going to suggest &amp;#8216;lets put in a new tag &lt;code&gt;&amp;lt;AUD SRC="file://foobar.com/foo/bar/blargh.snd"&gt;&lt;/code&gt;&amp;#8216; for audio.&lt;/p&gt;
&lt;p&gt;There shouldn&amp;#8217;t be much cost in going with something that generalizes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the benefit of hindsight, it appears that Jay&amp;#8217;s concerns were well-founded. It took a little more than a week, but HTML5 did finally add new &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#video"&gt;&lt;code&gt;&amp;lt;video&gt;&lt;/code&gt;&lt;/a&gt; and &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#audio"&gt;&lt;code&gt;&amp;lt;audio&gt;&lt;/code&gt;&lt;/a&gt; elements.&lt;/p&gt;

&lt;p&gt;Responding to Jay&amp;#8217;s original message, &lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0204.html"&gt;&lt;cite&gt;Dave Raggett&lt;/cite&gt; said&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0204.html"&gt;
&lt;p&gt;True indeed! I want to consider a whole range of possible image/line art types, along with the possibility of format negotiation. Tim&amp;#8217;s note on supporting clickable areas within images is also important.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Later in 1993, &lt;a href="http://www.w3.org/People/Raggett/"&gt;Dave Raggett&lt;/a&gt; proposed &lt;a href="http://www.w3.org/MarkUp/HTMLPlus/htmlplus_1.html"&gt;HTML+&lt;/a&gt; as an evolution of the HTML standard. The proposal was never implemented, and it was superceded by &lt;a href="http://www.w3.org/MarkUp/html-spec/html-spec_toc.html"&gt;HTML 2.0&lt;/a&gt;. HTML 2.0 was a &amp;#8220;retro-spec,&amp;#8221; which means it formalized features already in common use. &amp;#8220;&lt;a href="http://www.w3.org/MarkUp/html-spec/html-spec_1.html#SEC1.1"&gt;This specification brings together, clarifies, and formalizes a set of features&lt;/a&gt; that roughly corresponds to the capabilities of HTML in common use prior to June 1994.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Dave later wrote &lt;a href="http://www.w3.org/MarkUp/html3/CoverPage.html"&gt;HTML 3.0&lt;/a&gt;, based on his earlier HTML+ draft. HTML 3.0 was also never implemented (outside of the W3C&amp;#8217;s own reference implementation, &lt;a href="http://www.w3.org/Arena/"&gt;Arena&lt;/a&gt;), and it was superceded by &lt;a href="http://www.w3.org/MarkUp/Wilbur/"&gt;HTML 3.2&lt;/a&gt;. HTML 3.2 was also a &amp;#8220;retro-spec&amp;#8221; &amp;mdash; &amp;#8220;&lt;a href="http://www.w3.org/TR/REC-html32.html#intro"&gt;HTML 3.2 adds widely deployed features&lt;/a&gt; such as tables, applets and text flow around images, while providing full backwards compatibility with the existing standard HTML 2.0.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Dave later co-authored &lt;a href="http://www.w3.org/TR/html4"&gt;HTML 4.0&lt;/a&gt; and developed &lt;a href="http://tidy.sourceforge.net/"&gt;HTML Tidy&lt;/a&gt;, and went on to help with XHTML, XForms, MathML, and other modern W3C specifications.&lt;/p&gt;

&lt;p&gt;Getting back to 1993, &lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0209.html"&gt;Marc replied to Dave&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0209.html"&gt;
&lt;p&gt;Actually, maybe we should think about a general-purpose procedural graphics language within which we can embed arbitrary hyperlinks attached to icons, images, or text, or anything. Has anyone else seen Intermedia&amp;#8217;s capabilities wrt this?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Intermedia_(hypertext)"&gt;Intermedia&lt;/a&gt; was a hypertext project from Brown University. It was developed from 1985 to 1991 and ran on &lt;a href="http://en.wikipedia.org/wiki/A/UX"&gt;A/UX&lt;/a&gt;, a Unix-like operating system for early Macintosh computers.&lt;/p&gt;

&lt;p&gt;The idea of a &amp;#8220;general-purpose procedural graphics language&amp;#8221; did eventually catch on. Modern browsers support both &lt;a href="http://www.w3.org/Graphics/SVG/"&gt;SVG&lt;/a&gt; (declarative markup with embedded scripting) and &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element"&gt;&lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt;&lt;/a&gt; (procedural direct-mode graphics API), although the latter &lt;a href="http://ln.hixie.ch/?start=1089635050&amp;amp;count=1"&gt;started as a proprietary extension&lt;/a&gt; before being &amp;#8220;retro-specced&amp;#8221; by the &lt;a href="http://www.whatwg.org/"&gt;WHATWG&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0217.html"&gt;&lt;cite&gt;Bill Janssen&lt;/cite&gt; replied&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0217.html"&gt;
&lt;p&gt;Other systems to look at which have this (fairly valuable) notion are Andrew and Slate. Andrew is built with _insets_, each of which has some interesting type, such as text, bitmap, drawing, animation, message, spreadsheet, etc. The notion of arbitrary recursive embedding is present, so that an inset of any kind can be embedded in any other kind which supports embedding. For example, an inset can be embedded at any point in the text of the text widget, or in any rectangular area in the drawing widget, or in any cell of the spreadsheet.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#8220;Andrew&amp;#8221; is a reference to the &lt;a href="http://www-2.cs.cmu.edu/~AUIS/"&gt;Andrew User Interface System&lt;/a&gt; (although at that time it was simply known as the &lt;a href="http://en.wikipedia.org/wiki/Andrew_Project"&gt;Andrew Project&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Meanwhile, &lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0215.html"&gt;&lt;cite&gt;Thomas Fine&lt;/cite&gt; had a different idea&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0215.html"&gt;
&lt;p&gt;Here&amp;#8217;s my opinion. The best way to do images in WWW is by using MIME. I&amp;#8217;m sure postscript is already a supported subtype in MIME, and it deals very nicely with mixing text and graphics.&lt;/p&gt;
&lt;p&gt;But it isn&amp;#8217;t clickable, you say? Yes your right. I suspect there is already an answer to this in display postscript. Even if there isn&amp;#8217;t the addition to standard postscript is trivial. Define an anchor command which specifies the URL and uses the current path as a closed region for the button. Since postscript deals so well with paths, this makes arbitrary button shapes trivial.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Display_PostScript"&gt;Display Postscript&lt;/a&gt; was an on-screen rendering technology co-developed by Adobe and NeXT.&lt;/p&gt;

&lt;p&gt;This proposal was never implemented, but the idea that the best way to fix HTML is to replace it with something else altogether &lt;a href="http://dbaron.org/log/20090707-ex-html"&gt;still pops up from time to time&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0221.html"&gt;&lt;cite&gt;Tim Berners-Lee&lt;/cite&gt;, March 2, 1993&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0221.html"&gt;
&lt;p&gt;HTTP2 allows a document to contain any type which the user has said he can handle, not just registered MIME types. So one can experiment. Yes I think there is a case for postscript with hypertext. I don&amp;#8217;t know whether display postcript has enough. I know Adobe are trying to establish their own postscript-based &amp;#8220;PDF&amp;#8221; which will have links, and be readable by their proprietory brand of viewers.&lt;/p&gt;
&lt;p&gt;I thought that a generic overlaying language for anchors (Hytime based?) would allow the hypertext and the graphics/video standards to evolve separately, which would help both.&lt;/p&gt;
&lt;p&gt;Let the &lt;code&gt;IMG&lt;/code&gt; tag be &lt;code&gt;INCLUDE&lt;/code&gt; and let it refer to an arbitrary document type. Or &lt;code&gt;EMBED&lt;/code&gt; if &lt;code&gt;INCLUDE&lt;/code&gt; sounds like a cpp include which people will expect to provide SGML source code to be parsed inline &amp;#8212; not what was intended.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.hytime.org/"&gt;HyTime&lt;/a&gt; was an early, SGML-based hypertext document system. It loomed large in many early discussions of HTML, and later XML.&lt;/p&gt;

&lt;p&gt;Tim&amp;#8217;s proposal for an &lt;code&gt;&amp;lt;INCLUDE&gt;&lt;/code&gt; tag was never implemented, although you can see echoes of it in &lt;code&gt;&amp;lt;object&gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;embed&gt;&lt;/code&gt;, and the &lt;code&gt;&amp;lt;iframe&gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;p&gt;Finally, on March 12, 1993, &lt;a href="http://1997.webhistory.org/www.lists/www-talk.1993q1/0257.html"&gt;Marc Andreessen revisited the thread&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://1997.webhistory.org/www.lists/www-talk.1993q1/0257.html"&gt;
&lt;p&gt;Back to the inlined image thread again &amp;#8212; I&amp;#8217;m getting close to releasing Mosaic v0.10, which will support inlined GIF and XBM images/bitmaps, as mentioned previously. &amp;#8230;&lt;/p&gt;
&lt;p&gt;We&amp;#8217;re not prepared to support &lt;code&gt;INCLUDE&lt;/code&gt;/&lt;code&gt;EMBED&lt;/code&gt; at this point. &amp;#8230; So we&amp;#8217;re probably going to go with &lt;code&gt;&amp;lt;IMG SRC="url"&gt;&lt;/code&gt; (not &lt;code&gt;ICON&lt;/code&gt;, since not all inlined images can be meaningfully called icons). For the time being, inlined images won&amp;#8217;t be explicitly content-type&amp;#8217;d; down the road, we plan to support that (along with the general adaptation of MIME). Actually, the image reading routines we&amp;#8217;re currently using figure out the image format on the fly, so the filename extension won&amp;#8217;t even be significant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I don&amp;#8217;t really know why I wrote this. It wasn&amp;#8217;t what I set out to write. That happens. But I am extraordinarily fascinated with all aspects of this almost-17-year-old conversation. Consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP still exists. HTTP successfully evolved from 0.9 into 1.0 and later 1.1. &lt;a href="http://www.ietf.org/dyn/wg/charter/httpbis-charter.html"&gt;And still it evolves&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;HTML still exists. That rudimentary data format &amp;mdash; it didn&amp;#8217;t even support inline images! &amp;mdash; successfully evolved into 2.0, 3.2, 4.0. &lt;a href="http://www.whatwg.org/"&gt;And still it, too, evolves&lt;/a&gt;. HTML is an unbroken line. A twisted, knotted, snarled line, to be sure. There were plenty of &amp;#8220;dead branches&amp;#8221; in the evolutionary tree, places where standards-minded people got ahead of themselves (and ahead of authors and implementors). But still. Here we are, in 2009, and &lt;a href="http://www.w3.org/People/Berners-Lee/FAQ.html#Examples"&gt;web pages from 1990&lt;/a&gt; still render in modern browsers. I just loaded one up on my Android phone, and I didn&amp;#8217;t even get prompted to &amp;#8220;please wait while importing legacy format&amp;#8230;&amp;#8221;&lt;/li&gt;
&lt;li&gt;HTML has always been a conversation between browser makers, authors, standards wonks, and other people who just showed up and liked to talk about angle brackets. Most of the successful versions of HTML have been &amp;#8220;retro-specs,&amp;#8221; catching up to the world while simultaneously trying to nudge it in the right direction. Anyone who tells you that HTML should be kept &amp;#8220;pure&amp;#8221; (presumably by ignoring browser makers, or ignoring authors, or both) is simply misinformed. HTML has never been pure, and all attempts to purify it have been spectacular failures, matched only by the attempts to replace it.&lt;/li&gt;
&lt;li&gt;None of the browsers from 1993 still exist in any recognizable form. Netscape Navigator was &lt;a href="http://en.wikipedia.org/wiki/History_of_Mozilla_Application_Suite#Open_sourcing_of_Communicator"&gt;abandoned in 1998&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/History_of_Mozilla_Application_Suite#Rewriting_from_scratch"&gt;rewritten from scratch&lt;/a&gt; to create the Mozilla Suite, which was then &lt;a href="http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox"&gt;forked to create Firefox&lt;/a&gt;. Internet Explorer had its humble &amp;#8220;beginnings&amp;#8221; in &amp;#8220;Microsoft Plus! for Windows 95,&amp;#8221; where it was bundled with some desktop themes and a pinball game. (But of course that browser &lt;a href="http://en.wikipedia.org/wiki/Spyglass_Mosaic"&gt;can be traced back further too&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;Some of the operating systems from 1993 still exist, but none of them are relevant to the modern web. Most people today who &amp;#8220;experience&amp;#8221; the web do so on a PC running Windows 2000 or later, a Mac running Mac OS X, a PC running some flavor of Linux, or a handheld device like an iPhone. In 1993, Windows was at version 3.1 (and competing with OS/2), Macs were running System 7, and Linux was distributed via Usenet. (Want to have some fun? Find a graybeard and whisper &amp;#8220;Trumpet Winsock&amp;#8221; or &amp;#8220;MacPPP.&amp;#8221;)&lt;/li&gt;
&lt;li&gt;Some of the same &lt;em&gt;people&lt;/em&gt; are still around and still involved in what we now simply call &amp;#8220;web standards.&amp;#8221; That&amp;#8217;s after almost 20 years. And some were involved in predecessors of HTML, going back into the 1980s and before.&lt;/li&gt;
&lt;li&gt;Speaking of predecessors&amp;#8230; With the eventual popularity of HTML and the web, it is easy to forget the contemporary formats and systems that informed its design. Andrew? Intermedia? HyTime? And HyTime was not some rinky-dink academic research project; &lt;a href="http://xml.coverpages.org/hytime.html"&gt;it was an ISO standard&lt;/a&gt;. It was approved for military use. It was Big Business. And you can read about it yourself&amp;#8230; &lt;a href="http://www.sgmlsource.com/history/hthist.htm"&gt;on this HTML page, in your web browser&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But none of this answers the original question: why do we have an &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; element? Why not an &lt;code&gt;&amp;lt;icon&gt;&lt;/code&gt; element? Or an &lt;code&gt;&amp;lt;include&gt;&lt;/code&gt; element? Why not a hyperlink with an &lt;code&gt;include&lt;/code&gt; attribute, or some combination of &lt;code&gt;rel&lt;/code&gt; values? Why an &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; element? Quite simply, because Marc Andreessen shipped one, and shipping code wins.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s not to say that &lt;em&gt;all&lt;/em&gt; shipping code wins; after all, Andrew and Intermedia and HyTime shipped code too. Code is necessary but not sufficient for success. And I &lt;em&gt;certainly&lt;/em&gt; don&amp;#8217;t mean to say that shipping code before a standard will produce the best solution. Marc&amp;#8217;s &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; element didn&amp;#8217;t mandate a common graphics format; it didn&amp;#8217;t define how text flowed around it; it didn&amp;#8217;t support text alternatives or fallback content for older browsers. And 16, almost 17 years later, &lt;a href="http://tools.ietf.org/html/draft-abarth-mime-sniff"&gt;we&amp;#8217;re still struggling with content sniffing&lt;/a&gt;, and it&amp;#8217;s still &lt;a href="http://code.google.com/p/doctype/wiki/ArticleContentSniffing"&gt;a source of crazy security vulnerabilities&lt;/a&gt;. And you can trace that all the way back, 17 years, through the &lt;a href="http://en.wikipedia.org/wiki/Browser_wars"&gt;Great Browser Wars&lt;/a&gt;, all the way back to February 25, 1993, when Marc Andreessen offhandedly remarked, &amp;#8220;MIME, someday, maybe,&amp;#8221; and then shipped his code anyway.&lt;/p&gt;

&lt;p&gt;The ones that win are the ones that ship.&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Thank you for giving me the opportunity to explain this to you]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/10/19/the-point" />
<id>tag:diveintomark.org,2009-10-20:/archives/20091020024932</id>
<updated>2009-10-20T19:57:09Z</updated>
<published>2009-10-20T02:49:32Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="freedom0" /><category scheme="http://diveintomark.org" term="publishing" /><summary type="html">Free Software doesn't have "end users." That's kind of the point.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/10/19/the-point">&lt;p&gt;Recently, someone did the unthinkable: they published their own version of &lt;a href="http://diveintopython.org/"&gt;Dive Into Python&lt;/a&gt; and got it listed on Amazon.com. This apparently caused a small firestorm within Apress, the exact details of which I am not privy to, but which (I am told) became a somewhat larger firestorm after the Apress executives realized they had no legal recourse, and asked my opinion on the matter. You see, the book is published under the GNU Free Documentation License, which explicitly gives anyone and everyone &lt;a title="see Sections 2 and 3" href="http://www.gnu.org/copyleft/fdl.html"&gt;the right to publish it themselves&lt;/a&gt;. (I was about to write &amp;#8220;gives third parties the right,&amp;#8221; until I realized that there are no third parties because there are no second parties. That&amp;#8217;s kind of the point.)&lt;/p&gt;

&lt;p&gt;This didn&amp;#8217;t use to matter, because publishing on paper used to require a serious up-front investment in, well, paper. &amp;#8220;Freedom of the press&amp;#8221; was reserved for those with an actual press, and distribution costs were decidedly non-trivial. Publishing a book commercially just wasn&amp;#8217;t practical for anyone but, well, a book publisher. That&amp;#8217;s no longer the case. Copies can be purchased online, printed on demand, and drop-shipped to the customer &amp;#8212; up-front investment be damned. And that&amp;#8217;s for &lt;em&gt;printed&lt;/em&gt; books; e-books are even easier.&lt;/p&gt;

&lt;p&gt;Software had this problem first, by virtue of its non-corporeality. How many people are selling Free Software on eBay? We deride these sellers as &amp;#8220;scammers,&amp;#8221; but in truth the only time they run afoul of the law is when they attempt to rebrand your software without acknowledgement, or when they fail to abide by some other intentionally inside-out clause of the license that you chose in the first place (e.g. selling GPL&amp;#8217;d binaries without offering source code).&lt;/p&gt;

&lt;p&gt;Still, there&amp;#8217;s a qualitative difference between letting people download your own work from your own site, and watching other people try to profit from it. But it is precisely this difference that strikes at the heart of the Free Software/Free Culture ethos. Part of choosing a Free license for your own work is accepting that people may use it in ways you disapprove of. There are no &amp;#8220;field of use&amp;#8221; restrictions, and there are no &amp;#8220;commercial use&amp;#8221; restrictions either. In fact, those are two of the fundamental tenets of the &amp;#8220;Free&amp;#8221; in Free Software. If &amp;#8220;others profiting from my work&amp;#8221; is something you seek to avoid, then Free Software is not for you. Opt for a Creative Commons &amp;#8220;Non-Commercial&amp;#8221; license, or a &amp;#8220;personal use only&amp;#8221; freeware license, or a traditional End User License Agreement. Free Software doesn&amp;#8217;t have &amp;#8220;end users.&amp;#8221; That&amp;#8217;s kind of the point.&lt;/p&gt;

&lt;p&gt;The aforementioned Apress executive told me that he did not understand why I would be willing to work with a publisher but then be happy about their competition. This is what I told him:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I enjoy working with publishers because it makes me a better writer. But I don&amp;#8217;t write for money; I write for love (or passion, or whatever you want to call it). I choose open content licenses because this is the way I want the world to work, and the only way to change the world is to change yourself first.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t know where that leaves you as a business. But you&amp;#8217;ve made a good amount of money on the original &amp;#8220;Dive Into Python,&amp;#8221; despite the fact that it&amp;#8217;s been available for free online for 8 years. A German translation of &lt;a href="http://diveintopython3.org/"&gt;Dive Into Python 3&lt;/a&gt; is being published this quarter by Springer/Germany [a division of Apress' parent company] almost simultaneously with the English edition &amp;#8212; much sooner-to-market than it would have been under a closed development process. (And &lt;a href="http://gpiancastelli.altervista.org/dip3-it/"&gt;an Italian translation&lt;/a&gt; was just released yesterday. You should snap that one up too before someone else does!) So maybe the problems you perceive are really opportunities in disguise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I am grateful for this anonymous soul who woke up one day and said to herself, &amp;#8220;You know what I should do today? I should try to sell copies of that Free book that Pilgrim wrote.&amp;#8221; Grateful, because it afforded me the opportunity to remind myself why I chose a Free license in the first place. My Zen teacher once told me that, when people try to do you harm, you should thank them for giving you the opportunity to forgive them. In this case it&amp;#8217;s even simpler, because there&amp;#8217;s nothing to forgive, just explain. She&amp;#8217;s redistributing the work that I explicitly made redistributable. She&amp;#8217;s kind of the point.&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Translation From MS-Speak to English of Selected Portions of Tony Ross&#8217; &#8220;Distributed Extensibility Submission&#8221;]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/10/05/distributed-unicorns-and-ponies" />
<id>tag:diveintomark.org,2009-10-05:/archives/20091005195615</id>
<updated>2009-10-05T19:56:15Z</updated>
<published>2009-10-05T19:56:15Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="html5" /><category scheme="http://diveintomark.org" term="microsoft" /><category scheme="http://diveintomark.org" term="rant" /><summary type="html">We're going to keep making up our own shit, whether it validates or not.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/10/05/distributed-unicorns-and-ponies">&lt;p&gt;[Source &lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Sep/att-1216/MicrosoftDistributedExtensibilitySubmission.htm"&gt;Distributed Extensibility Submission from Microsoft - 30 September 2009&lt;/a&gt;]&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is a common practice for authors, tool vendors, and library authors to want to extend languages to represent additional information that can&amp;#8217;t be adequately described by the standard grammar. &amp;#8230; Here are a few examples that apply to HTML:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A JavaScript library processes custom tags in a browser and turns them into custom controls dynamically on the page.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;We would very much like our proprietary &lt;a href="http://msdn.microsoft.com/en-us/library/ms531076(VS.85).aspx"&gt;Custom Tags&lt;/a&gt; to validate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;A browser wants to allow custom behaviors to be defined in one module and attached automatically to custom elements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;We would very much like our proprietary &lt;a href="http://msdn.microsoft.com/en-us/library/ms532146(VS.85).aspx"&gt;HTML Components&lt;/a&gt; to validate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;An author includes processing instructions in the document that will be processed by a server before delivering the document to a user agent.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;We would very much like SharePoint&amp;#8217;s proprietary &lt;a href="http://geekswithblogs.net/stas/archive/2005/06/14/43571.aspx"&gt;InfoPath processing instructions&lt;/a&gt; to validate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;A HTML document editor adds information about tool settings so that a subsequent editing session can continue with the same settings.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;We would very much like Word&amp;#8217;s &amp;#8220;export as HTML&amp;#8221; output &amp;#8212; which is so proprietary that it has spawned &lt;a href="http://www.google.com/search?q=clean+up+word+html"&gt;an entire cottage industry&lt;/a&gt; dedicated to &amp;#8220;cleaning&amp;#8221; it &amp;#8212; to validate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In many cases, the language customizations are used for small niche applications and don&amp;#8217;t require the burden of centralized standardization. Instead these extensions are defined in a distributed fashion among groups of interested developers or authors.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We like making up our own shit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A Distributed Extensibility model for standard HTML is desirable because it means that user agents from different vendors that adhere to the standard can be assured of correctly processing mark-up that contains extensions without destroying the integrity of the document.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Other people keep fucking up our shit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The proposal as stated closely matches behavior that Internet Explorer has had for a number of releases, reducing compatibility concerns.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am &lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Sep/1219.html"&gt;high&lt;/a&gt; &lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Oct/0001.html"&gt;as&lt;/a&gt; &lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Oct/0040.html"&gt;a&lt;/a&gt; &lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Oct/0076.html"&gt;kite&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Supporting distributed extensibility means providing a standard repeatable mechanism for creating these extensions without the need for centralized agreement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We&amp;#8217;re going to keep making up our own shit, whether it validates or not.&lt;/p&gt;

&lt;p style="text-align:right;font-style:oblique"&gt;&lt;small&gt;(with apologies to &lt;a href="http://daringfireball.net/2007/02/macrovision_translation"&gt;John Gruber&lt;/a&gt;,&lt;br /&gt;who did it first and did it best)&lt;/small&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;i&gt;Postscript:&lt;/i&gt; I am not &amp;#8220;against&amp;#8221; extensibility, or distributed extensibility, or decentralized extensibility, or whatever we&amp;#8217;re calling namespaces this week. I just think it&amp;#8217;s funny that some people read this proposal and immediately jumped to &lt;strong&gt;The Glorious And Infinitely Extensible Semantic Web With Unicorns And Ponies&lt;/strong&gt;, when it&amp;#8217;s really just an attempt to get the HTML Working Group to bless a collection of Microsoft-proprietary technologies that they&amp;#8217;ve jammed into Internet Explorer over the years.&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Recently]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/09/30/recently" />
<id>tag:diveintomark.org,2009-10-01:/archives/20091001024951</id>
<updated>2009-10-01T02:49:51Z</updated>
<published>2009-10-01T02:49:51Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="contentsniffing" /><category scheme="http://diveintomark.org" term="html5" /><category scheme="http://diveintomark.org" term="markup" /><category scheme="http://diveintomark.org" term="python" /><category scheme="http://diveintomark.org" term="python3" /><summary type="html">Most of my recent writing has happened elsewhere.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/09/30/recently">&lt;p&gt;Most of my recent writing has happened elsewhere.&lt;/p&gt; 
 
&lt;ul&gt; 
&lt;li&gt;&lt;a href="http://diveintopython3.org/"&gt;Dive Into Python 3&lt;/a&gt;&lt;/li&gt; 
&lt;li&gt;&lt;a href="http://diveintohtml5.org/"&gt;Dive Into HTML5&lt;/a&gt; (in progress)&lt;/li&gt; 
&lt;li&gt;Various articles about HTML5 on the WHATWG blog, including
  &lt;ul&gt; 
  &lt;li&gt;&lt;a href="http://blog.whatwg.org/this-summer-in-html-5-episode-33"&gt;This Summer in HTML5 (episode 33)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href="http://blog.whatwg.org/this-week-in-html-5-episode-34"&gt;This Week in HTML5 (episode 34)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href="http://blog.whatwg.org/response-to-notes-on-html-5"&gt;Response to &amp;#8220;Notes on HTML5&amp;#8243;&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href="http://blog.whatwg.org/this-week-in-html5-episode-35"&gt;This Week in HTML5 (episode 35)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href="http://blog.whatwg.org/this-week-in-html5-episode-36"&gt;This Week in HTML5 (episode 36)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href="http://blog.whatwg.org/content-sniffing-still-sucks"&gt;Sniffing RSS 1.0 feeds served as text/html&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; 
&lt;/li&gt; 
&lt;/ul&gt; 
 
&lt;p&gt;That last article came about during the creation of &lt;a href="http://code.google.com/p/mimesniff/"&gt;mimesniff&lt;/a&gt;, my open source Python 3 library that implements the HTML5 Content-Type detection and character encoding detection algorithms.&lt;/p&gt; 
 
&lt;p&gt;If none of that is your cup of tea, here is a picture of my dog Beauregard, enjoying the beautiful North Carolina summer weather.&lt;/p&gt; 
 
&lt;p&gt;&lt;img src="http://wearehugh.com/public/2009/09/beauregard-on-deck.jpg" alt="Beauregard on deck" width="500" height="375"&gt;&lt;/p&gt; </content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Open for your input]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/08/04/open-for-your-input" />
<id>tag:diveintomark.org,2009-08-04:/archives/20090804145747</id>
<updated>2009-08-04T14:57:47Z</updated>
<published>2009-08-04T14:57:47Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="accessibility" /><category scheme="http://diveintomark.org" term="html5" /><category scheme="http://diveintomark.org" term="w3c" /><summary type="html">A selection of quotes about the W3C, accessibility, and process.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/08/04/open-for-your-input">&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/www-archive/2009Jun/0026.html"&gt;On June 3, 2009, Janina Sajka, Chair of the Protocols and Formats Working Group of the W3C Web Accessibility Initiative (WAI), wrote&lt;/a&gt;:
&lt;blockquote cite="http://lists.w3.org/Archives/Public/www-archive/2009Jun/0026.html"&gt;
&lt;p&gt;The following consensus was reached by Protocols and Formats Working Group during its teleconference of Wednesday, 3 June 2009 &amp;#8230;&lt;/p&gt;
&lt;p&gt;We note that summary is often used as a technique for accessibility support where governmental regulations require governmental web sites to be accessible. &amp;#8230; [link to &lt;a href="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;Guide to the Section 508 Standards for Electronic and Information Technology, Subpart B - Technical Standards, Web-based Intranet and Internet Information and Applications (1194.22), Section (g) "Data Table"&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;If summary is removed [from HTML 5], U.S. Government web sites, might find it more difficult to conform to HTML 5. We further note that Section 508 regulations apply to U.S. state and local governments, and that similar accessibility requirements are emerging in Canada, the U.K., the E.U., Australia, and elsewhere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;Guide to the Section 508 Standards for Electronic and Information Technology, Subpart B &amp;#8211; Technical Standards, Web-based Intranet and Internet Information and Applications (1194.22), Section (g) &amp;#8220;Data Table&amp;#8221;&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;
&lt;p&gt;Web developers who are interested in summarizing their tables should consider placing their descriptions either adjacent to their tables or in the body of the table, using such tags as the CAPTION tag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/www-archive/2009Jun/0027.html"&gt;On June 4, 2009, Ian Hickson, editor of the HTML 5 specification, replied&lt;/a&gt;:
&lt;blockquote cite="http://lists.w3.org/Archives/Public/www-archive/2009Jun/0027.html"&gt;
&lt;p&gt;As far as I can tell this concern is unfounded; the &amp;lt;caption&gt; attribute is in fact encouraged by the very same government (as quoted above) to be used exactly as HTML5 recommends in a manner consistent with the goals of the summary=&amp;#8221;" attribute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/tabular-data.html#table-descriptions"&gt;HTML 5, Editor&amp;#8217;s Draft as of this writing&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://www.whatwg.org/specs/web-apps/current-work/multipage/tabular-data.html#table-descriptions"&gt;
&lt;p&gt;For tables that consist of more than just a grid of cells with headers in the first row and headers in the first column, and for any table in general where the reader might have difficulty understanding the content, authors should include explanatory information introducing the table. This information is useful for all users, but is especially useful for users who cannot see the table, e.g. users of screen readers.&lt;/p&gt;
&lt;p&gt;Such explanatory information should introduce the purpose of the table, outline its basic cell structure, highlight any trends or patterns, and generally teach the user how to use the table.&lt;/p&gt;
&lt;p&gt;There are a variety of ways to include this information, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In prose, surrounding the table&lt;/li&gt;
&lt;li&gt;In the table&amp;#8217;s caption&lt;/li&gt;
&lt;li&gt;In the table&amp;#8217;s caption, in a details element&lt;/li&gt;
&lt;li&gt;Next to the table, in the same figure&lt;/li&gt;
&lt;li&gt;Next to the table, in a figure&amp;#8217;s legend&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Authors may also use other techniques, or combinations of the above techniques, as appropriate.&lt;/p&gt;
&lt;p&gt;If a table element has a summary attribute, the user agent may report the contents of that attribute to the user.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Jul/0258.html"&gt;On July 7, 2009, Janina Sajka, Chair of the Protocols and Formats Working Group of the W3C Web Accessibility Initiative (WAI), wrote&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Jul/0258.html"&gt;
&lt;p&gt;PF responded on these questions formally. We would appreciate the basic human courtessy of acknowledgment. If you don&amp;#8217;t like what we said, please speak to that. But kindly don&amp;#8217;t simply ignore us. [link to the &lt;a href="http://lists.w3.org/Archives/Public/www-archive/2009Jun/0026.html"&gt;June 3, 2009 message announcing the consensus of the Protocols and Formats Working Group&lt;/a&gt;]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Jul/0259.html"&gt;On July 7, 2009, Ian Hickson, editor of the HTML 5 specification, replied&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Jul/0259.html"&gt;
&lt;p&gt;That e-mail received a reply some weeks ago: [link to &lt;a href="http://lists.w3.org/Archives/Public/www-archive/2009Jun/0027.html"&gt;Ian Hickson's message of June 4, 2009&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;Is there a formal reply to that e-mail?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Jul/0260.html"&gt;On July 7, 2009, Janina Sajka, Chair of the Protocols and Formats Working Group of the W3C Web Accessibility Initiative (WAI), replied&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Jul/0260.html"&gt;
&lt;p&gt;No, we don&amp;#8217;t make formal replies to individuals.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0099.html"&gt;On August 2, 2009, John Foliot wrote&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0099.html"&gt;
&lt;p&gt;I maintain that it is not the role of the HTML WG, and the editor in particular, to be offering this guidance, especially when it contradicts the consensus position of the W3C Group chartered to speak on web accessibility issues.  Simply put, you are messing in somebody else&amp;#8217;s yard, and it is against W3C process to be doing so.  If HTML WG feel that they have compelling evidence and data that suggests that the WCAG guidance needs to be reviewed and revised, there is a process for that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0124.html"&gt;On August 3, 2009, Ian Hickson responded to John Foliot&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0124.html"&gt;
&lt;p&gt;I didn&amp;#8217;t want to be the one to have to explain this to you, but nobody else is doing so, so here goes: The W3C process doesn&amp;#8217;t actually require that working groups agree, or not contradict each other. The WAI&amp;#8217;s mission is not binding on other working groups.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0132.html"&gt;On August 3, 2009, at approximately 7:51 pm, Roy Fielding wrote&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0132.html"&gt;
&lt;p&gt;I have no opinion on the value of @summary other than noting the likelihood that its support will be required for some FIPS or government statute for accessibility, and therefore deprecating it within HTML5 will just make HTML5 look stupid.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;Guide to the Section 508 Standards for Electronic and Information Technology, Subpart B &amp;#8211; Technical Standards, Web-based Intranet and Internet Information and Applications (1194.22), Section (g) &amp;#8220;Data Table&amp;#8221;&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;
&lt;p&gt;Web developers who are interested in summarizing their tables should consider placing their descriptions either adjacent to their tables or in the body of the table, using such tags as the CAPTION tag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0136.html"&gt;On August 3, 2009, at approximately 7:59 pm, Roy Fielding wrote&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0136.html"&gt;
&lt;p&gt;[A]uthors are clearly not served by a specification that tells them caption and summary are the same and all such information must be relegated to caption.  As an implementor of content management systems used by government agencies in several different countries, I will not conform to any HTML specification that deprecates or fails to define @summary.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;Guide to the Section 508 Standards for Electronic and Information Technology, Subpart B &amp;#8211; Technical Standards, Web-based Intranet and Internet Information and Applications (1194.22), Section (g) &amp;#8220;Data Table&amp;#8221;&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;
&lt;p&gt;Web developers who are interested in summarizing their tables should consider placing their descriptions either adjacent to their tables or in the body of the table, using such tags as the CAPTION tag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.alistapart.com/articles/tohellwithwcag2/"&gt;On May 23, 2006, Joe Clark wrote&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://www.alistapart.com/articles/tohellwithwcag2/"&gt;
&lt;p&gt;The Web Content Accessibility Guidelines Working Group [part of the W3C Web Accessibility Initiative (WAI)] is the worst committee, group, company, or organization I&amp;#8217;ve ever worked with. Several of my friends and I were variously ignored; threatened with ejection from the group or actually ejected; and actively harassed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.alistapart.com/comments/tohellwithwcag2/#10"&gt;In response to Joe Clark&amp;#8217;s article, John Foliot wrote&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://www.alistapart.com/comments/tohellwithwcag2/#10"&gt;
&lt;p&gt;I can attest to knowing a regular participant to the [Web Content Accessibility Guidelines] WG discussion list who has been shut down and ignored on more than one occasion, and I personally have been dismissed by other working groups within the W3C. &amp;#8230; So the behavior and treatment described by Joe is not unknown any time you strongly voice an opinion counter to the internal W3C herd.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0080.html"&gt;On August 2, 2009, John Foliot wrote&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0080.html"&gt;
&lt;p&gt;I have submitted an alternative [HTML 5] Draft document for consideration; one which I believe rightly returns the role of author guidance for creating accessible content to the W3C WAI &amp;#8211; the group officially chartered by the W3C to speak to these matters.  It is a question of respect.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0148.html"&gt;On August 4, 2009, Ian Hickson asked&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0148.html"&gt;
&lt;p&gt;Are you saying that for you, it is more important that HTML5 not contradict other W3C specifications, than it be that HTML5 address accessibility problems with the HTML language?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0149.html"&gt;On August 4, 2009, John Foliot responded to Ian Hickson&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0149.html"&gt;
&lt;p&gt;You needs to stop contradicting WAI, even if you have proof that WAI might need to update their guidance. &amp;#8230;&lt;/p&gt;
&lt;p&gt;Contradictory information *harms* the overall outreach aspect of teaching people how to create accessible web content, and I speak from the position of one who actually does that for a living, and have been doing so for close to a decade.  THE MESSAGE WE SEND TO THE WORLD&amp;#8217;S WEB DEVELOPERS MUST BE CONSISTENT!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;Guide to the Section 508 Standards for Electronic and Information Technology, Subpart B &amp;#8211; Technical Standards, Web-based Intranet and Internet Information and Applications (1194.22), Section (g) &amp;#8220;Data Table&amp;#8221;&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://www.access-board.gov/sec508/guide/1194.22.htm#(g)"&gt;
&lt;p&gt;Web developers who are interested in summarizing their tables should consider placing their descriptions either adjacent to their tables or in the body of the table, using such tags as the CAPTION tag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0132.html"&gt;On August 3, 2009, Roy Fielding wrote&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0132.html"&gt;
&lt;p&gt;John [Foliot]&amp;#8217;s point is that the W3C has a group specifically tasked to make accessibility recommendations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0134.html"&gt;On August 3, 2009, David Baron responded to Roy Fielding&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0134.html"&gt;
&lt;p&gt;Has that group weighed in in this debate, in response to the evidence presented?  Or is it just that an out-of-date (i.e., not updated in response to newer evidence) recommendation of that group is being cited?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0135.html"&gt;On August 3, 2009, Roy Fielding responded to David Baron&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0135.html"&gt;
&lt;p&gt;I don&amp;#8217;t know &amp;#8212; it isn&amp;#8217;t a relevant question.  The group exists [link to &lt;a href="http://www.w3.org/WAI/"&gt;W3C Web Accessibility Initiative (WAI)&lt;/a&gt;] and seems to be open for your input.&lt;/p&gt;
&lt;/blockquote&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[This is the house]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/07/06/this-is-the-house" />
<id>tag:diveintomark.org,2009-07-06:/archives/20090706192553</id>
<updated>2009-07-06T19:25:53Z</updated>
<published>2009-07-06T19:25:53Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="mu" /><summary type="html">The house of confusion that Jeffrey built.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/07/06/this-is-the-house">&lt;p&gt;This is the house&lt;br /&gt;
This is the house&lt;br /&gt;
The house of confusion&lt;br /&gt;
That Jeffrey built.
&lt;p&gt;These are the tags&lt;br /&gt;
That live in the house&lt;br /&gt;
The house of confusion&lt;br /&gt;
That Jeffrey built.
&lt;p&gt;These are the slashes&lt;br /&gt;
That we all ignore&lt;br /&gt;
That end the tags&lt;br /&gt;
That live in the house&lt;br /&gt;
The house of confusion&lt;br /&gt;
That Jeffrey built.
&lt;p&gt;This is the namespace&lt;br /&gt;
That doesn&amp;#8217;t do squat&lt;br /&gt;
When we parse the slashes&lt;br /&gt;
That end the tags&lt;br /&gt;
That live in the house&lt;br /&gt;
That Jeffrey built.
&lt;p&gt;This is the header&lt;br /&gt;
That nobody sees&lt;br /&gt;
&amp;#8217;Cause they see the namespace&lt;br /&gt;
That doesn&amp;#8217;t do squat&lt;br /&gt;
When we parse the slashes&lt;br /&gt;
That end the tags&lt;br /&gt;
That live in the house&lt;br /&gt;
That Jeffrey built.
&lt;p&gt;This is the spec&lt;br /&gt;
That nobody uses&lt;br /&gt;
&amp;#8217;Cause we use the header&lt;br /&gt;
That nobody sees&lt;br /&gt;
&amp;#8217;Cause they see the namespace&lt;br /&gt;
That doesn&amp;#8217;t do squat&lt;br /&gt;
When we parse the slashes&lt;br /&gt;
That end the tags&lt;br /&gt;
That live in the house&lt;br /&gt;
That Jeffrey built.
&lt;p&gt;Say goodbye to the spec&lt;br /&gt;
That no longer exists&lt;br /&gt;
And stick with the header&lt;br /&gt;
That nobody sees&lt;br /&gt;
And drop the namespace&lt;br /&gt;
That doesn&amp;#8217;t do squat&lt;br /&gt;
And skip the slashes&lt;br /&gt;
That end the tags&lt;br /&gt;
That live in the house&lt;br /&gt;
That live in the house&lt;br /&gt;
The house of confusion&lt;br /&gt;
That Jeffrey built.</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Fuck the foundries]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/04/21/fuck-the-foundries" />
<id>tag:diveintomark.org,2009-04-21:/archives/20090421170644</id>
<updated>2009-04-21T17:08:47Z</updated>
<published>2009-04-21T17:06:44Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="fonts" /><category scheme="http://diveintomark.org" term="rant" /><category scheme="http://diveintomark.org" term="typography" /><category scheme="http://diveintomark.org" term="webfonts" /><summary type="html">Your Fonts are superior to Our Fonts in every conceivable way, except one.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/04/21/fuck-the-foundries">&lt;p&gt;The more I read about embedded web fonts, the more I crystalize my thinking. Take, for example, this latest &amp;#8220;A List Apart&amp;#8221; article where &lt;a href="http://alistapart.com/articles/realfontsontheweb"&gt;Jeffrey Zeldman interviews David Berlow&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://alistapart.com/articles/realfontsontheweb"&gt;
&lt;p&gt;Zeldman: Let me put it another way. I want to use your ITC Franklin in a site I&amp;#8217;m designing, but I&amp;#8217;m not willing to violate my end user licensing agreement. How do we resolve this impasse, from your perspective?&lt;/p&gt;
&lt;p&gt;Berlow: The next step is for those who control the font format(s) to define and document a permissions table to be added with all due haste to the OpenType, CoolType, TrueType, and FreeType formats. &amp;#8230; 
&lt;p&gt;Zeldman: How can type designers and web designers work together to persuade the engineers who control the formats to modify the code to include a permissions table?&lt;/p&gt;
&lt;p&gt;Berlow: [W]eb designers flat-out refused to part with real type, which has filled the web with type as graphic files, scaring the bejesus out of a lot of engineering people. &amp;#8230; How important dynamically rendered type is to design and use on the web must now be clear. In addition, the only other option &amp;#8212; that the type industry cede its intellectual property to the public without permission &amp;#8212; is not going to happen. With no upgrade penalty to any applications, or change in usage by the public, the permissions table is the only invisible (type-like) solution.
&lt;/blockquote&gt;

&lt;p&gt;I like how he focuses on the publisher&amp;#8217;s end of the problem &amp;#8212; &amp;#8220;gee, all we have to do is define this permissions table, that sounds easy.&amp;#8221; What he fails to mention is that &lt;em&gt;every font-consuming application on every platform on every computer on Earth&lt;/em&gt; will need to be &amp;#8220;upgraded&amp;#8221; to &amp;#8220;respect&amp;#8221; this permissions table. Because otherwise they&amp;#8217;re not really permissions, are they? They&amp;#8217;re just useless bits taking valuable chunks out of my metered bandwidth plan. Like the &lt;a href="http://en.wikipedia.org/wiki/Bozo_bit"&gt;bozo bit&lt;/a&gt; without the bozo.&lt;/p&gt;

&lt;p&gt;This, then, is my current thinking about embedded web fonts:&lt;/p&gt;

&lt;p style="font-size:xx-large"&gt;&lt;b&gt;FUCK THE FOUNDRIES&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Seriously. Fuck them. They still think they&amp;#8217;re in the business of shuffling little bits of metal around. You want to use a super-cool ultra-awesome totally-not-one-of-the-&lt;a href="http://dustinbrewer.com/fonts-on-the-web-and-a-list-of-web-safe-fonts/"&gt;11-web-safe-fonts&lt;/a&gt;? Pick an &lt;a href="http://openfontlibrary.fontly.org/"&gt;open source font&lt;/a&gt; and get on with your life.&lt;/p&gt;

&lt;p&gt;I know what you&amp;#8217;re going to say. I can hear it in my head already. It sounds like the voice of the comic book guy from The Simpsons. You&amp;#8217;re going to say, &amp;#8220;Typography is by professionals, for professionals. Free fonts are worth less than you pay for them. They don&amp;#8217;t have good hinting. They don&amp;#8217;t come in different weights. They don&amp;#8217;t have anything near complete Unicode coverage. They don&amp;#8217;t, they don&amp;#8217;t, they don&amp;#8217;t&amp;#8230;&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And you&amp;#8217;re right. You&amp;#8217;re absolutely, completely, totally, 100% right. &amp;#8220;Your Fonts&amp;#8221; are professionally designed, traditionally licensed, aggressively marketed, and bought by professional designers who know a professional typeface when they see it. &amp;#8220;Our Fonts&amp;#8221; are nothing more than toys, and I&amp;#8217;m the guy showing up at the Philadelphia Orchestra auditions with a tin drum and a kazoo. &amp;#8220;Ha ha, look at the freetard with his little toy fonts, that he wants to put on his little toy web page, where they can be seen by 2 billion people ha h&amp;#8230; wait, what?&amp;#8221;&lt;/p&gt;

&lt;p&gt;Let me put it another way. Your Fonts are superior to Our Fonts in &lt;em&gt;every conceivable way&lt;/em&gt;, except one:&lt;/p&gt;

&lt;p style="font-size:xx-large"&gt;&lt;b&gt;WE CAN&amp;#8217;T FUCKING USE THEM&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Soon &amp;#8212; and I mean &lt;a href="http://a.deveria.com/caniuse/#feat=fontface"&gt;really fucking soon&lt;/a&gt;, like &amp;#8220;this year&amp;#8221; soon &amp;#8212; there will be enough different browsers in the hands of enough different people that can use &lt;em&gt;any possible font&lt;/em&gt; on &lt;em&gt;any possible web page&lt;/em&gt;. And then a whole lotta people will start noticing fonts again &amp;#8212; not just Your People, just also Our People. People who couldn&amp;#8217;t tell a serif from a hole in their head, but they&amp;#8217;re gonna be looking for new fonts. People who are just savvy enough to be tired of Comic Sans will be looking for a new font to &amp;#8220;spruce up&amp;#8221; their elementary school newsletter, which, in an effort to Love Our Mother (Earth), they now publish exclusively online.&lt;/p&gt;

&lt;p&gt;And maybe, just maybe, they&amp;#8217;ll stumble across Jeffrey Zeldman&amp;#8217;s excellent interview with highly talented David Berlow and think, &amp;#8220;Wow, this guy has over 300 fonts! That&amp;#8217;s awesome! Where can I download them?&amp;#8221; And boy, won&amp;#8217;t they be surprised to learn that those 300 fonts &lt;em&gt;can only be used offline&lt;/em&gt;. Epic fail.&lt;/p&gt;

&lt;p&gt;Dynamic web fonts are coming. Actually they&amp;#8217;re already here, but most of Our People haven&amp;#8217;t noticed yet. But they will, and that&amp;#8217;s going to be a huge boon to somebody. I see you&amp;#8217;ve decided that it won&amp;#8217;t be you. Well, have fun shuffling your little bits of metal around. The rest of us will be over here, using the only fonts we&amp;#8217;re allowed to use: Everything But Yours.&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[hhgregg: DOA]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/04/07/hhgregg-doa" />
<id>tag:diveintomark.org,2009-04-07:/archives/20090407153255</id>
<updated>2009-04-07T15:32:55Z</updated>
<published>2009-04-07T15:32:55Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="retail" /><summary type="html">Timing, as they say, is everything.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/04/07/hhgregg-doa">&lt;div class="punch" style="width:240px"&gt;
&lt;img src="http://wearehugh.com/public/2009/04/2735814739_4d6e1d08c8_m.jpg" alt="[receiver of unknown origin]" title="" width="240" height="180"&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/29360210@N08/2735814739/"&gt;SR-2020 Mystery Receiver&lt;/a&gt; &amp;copy;&amp;nbsp;&lt;a href="http://www.flickr.com/people/29360210@N08/"&gt;mysteryreceiver&lt;/a&gt; / &lt;a title="used under Creative Commons Attribution 2.0 License" href="http://creativecommons.org/licenses/by/2.0/"&gt;CC&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Jason Scott: &lt;a href="http://ascii.textfiles.com/archives/1913"&gt;Brick and Morte&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But honestly, I don&amp;#8217;t know how someone says &amp;#8220;the best way for me to sell this stuff is to go into a building, deal with the endless hassles in today&amp;#8217;s over-licensed and over-regulated world, get everything working, go into debt, open the door and hope like hell I make more than $3000 in the next 30 days.&amp;#8221; Like, now, in the present day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;2009 may not be the best year to complain about over-regulation, but that&amp;#8217;s not what I want to talk about.&lt;/p&gt;

&lt;p&gt;Two things happened recently at the local strip mall (&lt;a href="http://maps.google.com/maps?hl=en&amp;amp;ie=UTF8&amp;amp;q=beaver+creek+commons+apex+nc&amp;amp;fb=1&amp;amp;split=1&amp;amp;gl=us&amp;amp;cid=4639396675081315681&amp;amp;li=lmd&amp;amp;z=14&amp;amp;iwloc=A"&gt;Beaver Creek Commons&lt;/a&gt;): &lt;a href="http://money.cnn.com/2009/01/16/news/companies/circuit_city"&gt;Circuit City closed&lt;/a&gt; and hhgregg built a brand new building and opened in it. My father and I like to lightly chatter about business stuff, and Circuit City has been going downhill for a while now. Every single time the topic of Circuit City&amp;#8217;s imminent demise comes up in conversation, one of us will interject &amp;#8220;NO ONE WILL MISS YOU!&amp;#8221; before letting the other finish their sentence.&lt;/p&gt;

&lt;p&gt;Still, having never been to an hhgregg, my wife and the boys and I sauntered in after a rare occasion of eating out. As it happens, we need a new very-low-end stereo receiver. Not a whole integrated system, mind you; just something that can sit between our &lt;a href="http://www.slimdevices.com/"&gt;SqueezeBox&lt;/a&gt; and the two speakers in our dining room so we can listen to music while eating dinner. This is not a difficult concept.&lt;/p&gt;

&lt;p&gt;hhgregg does not sell receivers. Whole integrated systems, yes. Not parts.&lt;/p&gt;

&lt;p&gt;But they &lt;em&gt;do&lt;/em&gt; sell $10 cables&amp;#8230; &amp;#8220;on sale&amp;#8221; for $100. (But they&amp;#8217;re &lt;a href="http://diveintomark.org/premium"&gt;premium&lt;/a&gt;!) And $200 DVD players that play&amp;#8230; DVDs (not even AVIs). And washing machines &amp;#8212; I swear to God, over half the space in this brand spanking new store-in-a-box was devoted to refrigerators and washing machines &amp;#8212; ranging from $1200 to $1700. Payment plans available. I asked a salesperson about the difference between a $1200 washing machine and a $1700 washing machine. He glanced furtively at the information card and mumbled, &amp;#8220;More bells and whistles.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Recession-busting pro tip: buy your $10 cables for $10 at &lt;a href="http://www.monoprice.com/"&gt;Monoprice&lt;/a&gt;, buy your electronics at &lt;a href="http://www.newegg.com/"&gt;NewEgg&lt;/a&gt;, and don&amp;#8217;t buy a $1700 washing machine from anyone.&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Dive into history, 2009 edition]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/03/27/dive-into-history-2009-edition" />
<id>tag:diveintomark.org,2009-03-27:/archives/20090327172042</id>
<updated>2009-03-27T21:56:07Z</updated>
<published>2009-03-27T17:20:42Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="diveintopython" /><category scheme="http://diveintomark.org" term="docbook" /><category scheme="http://diveintomark.org" term="html" /><summary type="html">Putting an entire chapter on one page sounds bloated, but consider this: my longest chapter so far would be 75 printed pages, and it loads in under 5 seconds. On dialup.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/03/27/dive-into-history-2009-edition">&lt;a href="http://diveintomark.org/archives/2002/08/04/dive_into_history"&gt;Again&lt;/a&gt;, this is more for my benefit than for yours. If I don&amp;#8217;t write this down, I&amp;#8217;ll forget it.

&lt;p&gt;&lt;a href="http://diveintopython3.org/"&gt;Dive Into Python 3&lt;/a&gt; was commissioned in January 2009 by Apress, who published the original &lt;a href="http://diveintopython.org/"&gt;Dive Into Python&lt;/a&gt; in 2004. Upon agreeing to contract terms, I registered a ten-year lease on &lt;code&gt;diveintopython3.org&lt;/code&gt; and immediately published a draft table of contents.&lt;/p&gt;

&lt;p&gt;The original &lt;abbr title="Dive Into Python"&gt;DiP&lt;/abbr&gt; was written in DocBook &lt;abbr&gt;XML&lt;/abbr&gt;. As I&amp;#8217;ve mentioned before, I chose DocBook &lt;abbr&gt;XML&lt;/abbr&gt; because I wanted to learn &lt;abbr&gt;XML&lt;/abbr&gt; and XSL, and DocBook seemed to be &lt;i&gt;Just The Thing&lt;/i&gt; for technical documentation. There was also a bit of self-grandeur involved. I was writing a book &lt;i&gt;For The Ages&lt;/i&gt;, so it was important that it be in a &lt;i&gt;Format Of Forever&lt;/i&gt;. And in the short term, I could transform &lt;i&gt;The Format Of Forever&lt;/i&gt; into useful (but lowly) &lt;i&gt;Output Formats&lt;/i&gt;, so I could do unimportant things like publish it online.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;For The Ages&lt;/i&gt; turned out to be about 10 years. &lt;i&gt;The Format Of Forever&lt;/i&gt; &lt;a href="http://www.docbook.org/specs/docbook-5.0-spec-cs-01.html"&gt;is still going strong&lt;/a&gt;, but Python itself changed so quickly that it didn&amp;#8217;t matter.&lt;/p&gt;

&lt;p&gt;Oh, and there was one other little thing that happened between 2000 and 2009: &lt;a href="http://www.google.com/"&gt;search stopped sucking and took over the web&lt;/a&gt;. Kids today may not remember, but it used to be &lt;em&gt;hard&lt;/em&gt; to find stuff on the web. Once you found it, you wanted to download it so you could read it offline.&lt;/p&gt;

&lt;p&gt;Remember being &amp;#8220;offline&amp;#8221;?&lt;/p&gt;

&lt;p&gt;Anyway, I now realize that there were some hidden assumptions behind my design decisions in 2000. Some of those assumptions turned out to be wrong, or at least not-completely-right. Sure, a lot of people downloaded &lt;abbr&gt;DiP&lt;/abbr&gt;, but it still pales in comparison to the number of visitors I got from search traffic. In 2000, I fretted about my &amp;#8220;home page&amp;#8221; and my &amp;#8220;navigation aids.&amp;#8221; Nobody cares about any of that anymore, and I have nine years of access logs to prove it.&lt;/p&gt;

&lt;p&gt;So, I am writing &lt;abbr title="Dive Into Python3 "&gt;DiP3&lt;/abbr&gt; in pure &lt;abbr&gt;HTML&lt;/abbr&gt; and, modulo some &lt;a href="http://diveintopython3.org/about.html"&gt;lossless minimizations&lt;/a&gt;, publishing exactly what I write. This makes the proofreading feedback cycle faster &amp;#8212; instead of &amp;#8220;building&amp;#8221; the &lt;abbr&gt;HTML&lt;/abbr&gt; output, I just hit &lt;kbd&gt;Ctrl-R&lt;/kbd&gt;. I expected it to make some things more complicated, but they turn out not to matter very much.&lt;/p&gt;

&lt;p&gt;Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DocBook autonumbers callouts in code blocks. In &lt;abbr&gt;HTML&lt;/abbr&gt;, if I insert a callout in the middle of a code block, I have to renumber the other callouts manually. This has happened a few times, but it&amp;#8217;s not something I do all the time.&lt;/li&gt;
&lt;li&gt;When I used DocBook, I used custom &lt;abbr&gt;XML&lt;/abbr&gt; entities for each code fragment in a code block. (&lt;i&gt;i.e.&lt;/i&gt; I show a complete function, then I have separate code blocks to show and talk about individual lines of code.) In &lt;abbr&gt;HTML&lt;/abbr&gt;, I copy-and-paste. This hasn&amp;#8217;t bit me much yet because I haven&amp;#8217;t had to refactor much code. Then again, the &lt;abbr&gt;XML&lt;/abbr&gt; entities technique was also difficult after refactoring, and it required escaping to &lt;abbr&gt;XML&lt;/abbr&gt;&amp;#8217;s weird quoting rules.&lt;/li&gt;
&lt;li&gt;DocBook let me &amp;#8220;chunk&amp;#8221; the &lt;abbr&gt;HTML&lt;/abbr&gt; output differently &amp;#8212; by section, by chapter, or everything in one big file. I published by section online and let people download as one big file. Nobody cared, and I have logs to prove it. Furthermore, the chapter was always the atomic unit &amp;#8212; I would take one concept or one piece of code and build lessons around it for an entire chapter. Splitting up a chapter into multiple pages was just annoying for people who came in from search engines and landed in the middle of a chapter wouldn&amp;#8217;t immediately understand the context. And &lt;em&gt;everyone&lt;/em&gt; comes in from search engines.&lt;/li&gt;
&lt;li&gt;Related to the previous point, &lt;strong&gt;&lt;abbr&gt;HTML&lt;/abbr&gt; is not an output format.&lt;/strong&gt; &lt;abbr&gt;HTML&lt;/abbr&gt; is &lt;i&gt;The Format&lt;/i&gt;. Not &lt;i&gt;The Format Of Forever&lt;/i&gt;, but damn if it isn&amp;#8217;t &lt;i&gt;The Format Of The Now&lt;/i&gt;. Looking back on it now, the &lt;abbr&gt;HTML&lt;/abbr&gt; output from DocBook was &lt;em&gt;atrociously inefficient&lt;/em&gt;. Tables-for-layout for callouts and tips, empty anchors everywhere, and lots of other markup cruft everywhere. Writing my own &lt;abbr&gt;HTML&lt;/abbr&gt;, I can put in only the markup I need &amp;#8212; and it turns out I need very little. Callouts are now ordered lists, tips are now blockquotes, etc. Putting an entire chapter on one page sounds bloated, but consider this: my longest chapter so far would be 75 printed pages, and it loads in under 5 seconds. On dialup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Furthermore, I am no longer under the illusion that this book will be useful forever. Python will either continue to evolve or it will die; either way, static documentation has a shelf life. Today&amp;#8217;s cutting edge code is tomorrow&amp;#8217;s mainstream code is next year&amp;#8217;s legacy code. &lt;abbr&gt;DiP&lt;/abbr&gt;&amp;#8217;s shelf life was about 10 years. I am supremely confident that the &lt;abbr&gt;HTML&lt;/abbr&gt; I&amp;#8217;m writing today will still be readable 10 years from now, and after that it won&amp;#8217;t matter because I&amp;#8217;ll have to rewrite the whole damn book anyway.&lt;/p&gt;

&lt;p&gt;See you in 2020 for &lt;cite&gt;Dive Into Python 4&lt;/cite&gt;!&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Accessibility is a harsh mistress]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/03/21/accessibility-is-a-harsh-mistress" />
<id>tag:diveintomark.org,2009-03-21:/archives/20090321200928</id>
<updated>2009-03-22T01:05:37Z</updated>
<published>2009-03-21T20:09:28Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="accessibility" /><summary type="html">The accessibility orthodoxy does not permit people to question the value of features that are rarely useful and rarely used.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/03/21/accessibility-is-a-harsh-mistress">&lt;p&gt;&lt;a href="http://www.intertwingly.net/blog/2009/03/20/Accessible"&gt;Sam Ruby&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://www.intertwingly.net/blog/2009/03/20/Accessible"&gt;
&lt;p&gt;This blog entry has an [inline &lt;abbr&gt;SVG&lt;/abbr&gt;] image with a text alternative.  Who does it benefit?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Short answer: no one, but you have to do it anyway.&lt;/p&gt;

&lt;p&gt;Long answer: As far as I know, none of the commercially available screenreaders support &lt;abbr&gt;SVG&lt;/abbr&gt; in any way, much less reading the title of an &lt;abbr&gt;SVG&lt;/abbr&gt; image included inline in an &lt;abbr&gt;XHTML&lt;/abbr&gt; page (as opposed to, say, linked from the &lt;code&gt;src&lt;/code&gt; attribute of an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; element, or embedded in an &lt;code&gt;&amp;lt;object&amp;gt;&lt;/code&gt; element). Nonetheless, you have provided a text alternative for the image, and &lt;em&gt;theoretically&lt;/em&gt;, that &lt;em&gt;could&lt;/em&gt; be presented to a user in place of (or in addition to) the image. You have therefore fulfilled your moral duty, even though no one &lt;em&gt;actually&lt;/em&gt; benefits from it. Welcome to the wacky world of &lt;i&gt;access enablement&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;The concept of access enablement is not complicated. In the physical world, it works like this: I build the ramp, you bring the wheelchair. I don&amp;#8217;t have to provide you with a wheelchair; it&amp;#8217;s up to you to procure one. Nor do I have to teach you how to use your wheelchair to get up my ramp. Nor do I have to push you up the ramp when you arrive. If your wheelchair happens to break at the bottom of my ramp, you can&amp;#8217;t sue me for being inaccessible. I did my part: I built the ramp; everything else is &lt;a href="http://en.wikipedia.org/wiki/Somebody_Else's_Problem"&gt;Somebody Else&amp;#8217;s Problem&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For better or for worse, this concept got translated directly into the virtual world of software. Just as there are standards that define the minimum width and maximum slope of wheelchair-accessible ramps, so too there are standards for building accessible software and authoring accessible content. In the desktop software world, priority #1 is to &lt;a href="http://blog.whatwg.org/this-week-day-in-html-5-episode-24"&gt;keep track of the focus&lt;/a&gt;. In the web authoring world, it&amp;#8217;s to &lt;a href="http://www.w3.org/TR/WCAG20/#text-equiv"&gt;provide text alternatives for any non-text content&lt;/a&gt;. The exact techniques vary by medium. For the &lt;abbr&gt;HTML&lt;/abbr&gt; &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; element, the guidelines say you must &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/#alt"&gt;provide an &lt;code&gt;alt&lt;/code&gt; attribute&lt;/a&gt; and (potentially) &lt;a href="http://blog.whatwg.org/the-longdesc-lottery"&gt;a &lt;code&gt;longdesc&lt;/code&gt; attribute&lt;/a&gt;. For &lt;abbr&gt;SVG&lt;/abbr&gt;, they mandate a &lt;a href="http://www.w3.org/TR/SVG-access/#Equivalent"&gt;&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; child element&lt;/a&gt; and (potentially) a &lt;code&gt;&amp;lt;desc&amp;gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;p&gt;The interesting part is not what the guidelines say, but what they do not say.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;No thought of complexity for authors.&lt;/strong&gt; What are the chances that the author is even qualified to write a long description for a complex graph? Or &lt;a href="http://joeclark.org/book/sashay/serialization/Chapter13.html#h2-1450"&gt;captions for a video&lt;/a&gt;? And if they&amp;#8217;re not, how much would it cost to pay someone else to do it? How long would it take for them (or someone they hire) to implement it? Would that delay cause other problems or present other opportunity costs?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No thought of implementation cost for authoring tool vendors.&lt;/strong&gt; Is it reasonable to expect authors to provide text alternatives to a photo they take with their cellphone and upload to a photo sharing site? Is it reasonable to expect tools to enforce this?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No mention of implementation cost for client software.&lt;/strong&gt; Can screenreader vendors justify the cost of implementing and maintaining support for rarely-used features, e.g. reading the title of an inline &lt;abbr&gt;SVG&lt;/abbr&gt; image when only one site in the world actually does that? What about the cost of implementing workarounds for bogus data for popular-but-misused features?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No mention of how end users would learn about the feature.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So here&amp;#8217;s the crux of the problem: &lt;strong&gt;nowhere in the process of defining an accessibility feature is there any consideration for how often it would be used, how often it would be used correctly, what would happen if it were used incorrectly, how much it would cost to implement it, or how users would learn about the feature.&lt;/strong&gt; In short, there is no cost-benefit analysis.&lt;/p&gt;

&lt;p&gt;Now, some features are simple and easy and popular, so these questions never come up. If enough authors use them and tool vendors implement them and end users learn about them, then everything works. But not every feature is simple or easy or popular; a lot of them are waaaaay down the &amp;#8220;long tail&amp;#8221; of usage + implementation + education. So far down that, in any other field, you would start talking about the law of diminishing returns. But in accessibility, there is no such limit.&lt;/p&gt;

&lt;p&gt;Some concrete examples: most browsers don&amp;#8217;t expose information about the access keys available on a page, and most authors don&amp;#8217;t define access keys in their pages, and those that do often conflict with other browser, &lt;abbr&gt;AT&lt;/abbr&gt;, or &lt;abbr&gt;OS&lt;/abbr&gt;-level shortcuts. Most images aren&amp;#8217;t complex enough warrant a long description, and &lt;a href="http://blog.whatwg.org/the-longdesc-lottery"&gt;most authors who try to offer a long description get it wrong&lt;/a&gt;. But it is just assumed that users who would benefit from them will somehow learn of their existence and be motivated to find software that supports them (assuming they can ever find a page that uses them).&lt;/p&gt;

&lt;p&gt;The accessibility orthodoxy does not permit people to question the value of features that are rarely useful and rarely used.&lt;/p&gt;

&lt;p&gt;When this orthodoxy collides with reality, the results are both humorous and sad. When I was an accessibility architect at IBM, I assisted in the final stages of ensuring that Eclipse&amp;#8217;s &lt;a href="http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.gef.doc.isv/guide/guide.html"&gt;Graphical Editing Framework&lt;/a&gt; was fully accessible to blind people. This involved ensuring that all possible objects were focusable, all possible actions were keyboard-accessible (including drag-and-drop), and all possible information about nodes and connectors was exposed to third-party assistive technologies via &lt;a href="http://msdn.microsoft.com/en-us/library/ms971310.aspx"&gt;MSAA&lt;/a&gt;. It was mind-numbing work, full of strange edge cases and bizarre hypothetical situations, not unlike the one Sam is struggling to understand. During one particularly difficult teleconference, an Eclipse developer muttered something like, &amp;#8220;You realize no one is ever actually going to do any of this, right?&amp;#8221; There was an awkward silence as the people who had spent their lives in the trenches of access enablement contemplated the very real possibility that no one would ever benefit from their work.&lt;/p&gt;

&lt;p&gt;Back to Sam&amp;#8217;s question. Few authors publish in &lt;a href="http://diveintomark.org/archives/2003/03/19/the_road_to_xhtml_20"&gt;true &lt;abbr&gt;XHTML&lt;/abbr&gt; mode&lt;/a&gt;, fewer still include &lt;a href="http://www.intertwingly.net/blog/2006/06/17/Inline-SVG"&gt;inline &lt;abbr&gt;SVG&lt;/abbr&gt; images&lt;/a&gt; in their &lt;abbr&gt;XHTML&lt;/abbr&gt;, and fewer still include &lt;a href="http://www.intertwingly.net/blog/2009/03/20/Accessible"&gt;titles or descriptions in those images&lt;/a&gt;. But &lt;em&gt;in theory&lt;/em&gt;, you can imagine a situation where a web author publishes in true &lt;abbr&gt;XHTML&lt;/abbr&gt; mode, &lt;strong&gt;and&lt;/strong&gt; the author includes an inline &lt;abbr&gt;SVG&lt;/abbr&gt; image within an &lt;abbr&gt;XHTML&lt;/abbr&gt; page, &lt;strong&gt;and&lt;/strong&gt; an end user is using a browser that supports true &lt;abbr&gt;XHTML&lt;/abbr&gt;, &lt;strong&gt;and&lt;/strong&gt; that user is using a hypothetical screenreader-of-the-future that implements support for the &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;desc&amp;gt;&lt;/code&gt; elements within inline &lt;abbr&gt;SVG&lt;/abbr&gt; images within &lt;abbr&gt;XHTML&lt;/abbr&gt; pages, &lt;strong&gt;and&lt;/strong&gt; that user stumbles across that page. It&amp;#8217;s theoretically possible, therefore you have to do it. Period. End of discussion.&lt;/p&gt;

&lt;p&gt;Now go retrofit text alternatives into every &lt;abbr&gt;SVG&lt;/abbr&gt; image you&amp;#8217;ve ever published, or an accessibility advocacy group who has never visited your site will sue you on behalf of all the users you&amp;#8217;ve been disenfranchising. All zero of them.&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[If it fails for some, it should fail for all]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/03/18/if-it-fails-for-some" />
<id>tag:diveintomark.org,2009-03-18:/archives/20090318190703</id>
<updated>2009-03-18T22:47:43Z</updated>
<published>2009-03-18T19:07:03Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="accessibility" /><category scheme="http://diveintomark.org" term="html5" /><summary type="html">In all that time, in all those conversations, with all those people, I have never heard anyone say, "Hey, you know what we should do to make the world more accessible? Fuck over all the sighted people."</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/03/18/if-it-fails-for-some">&lt;p&gt;On the topic of &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; accessibility, &lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Mar/0394.html"&gt;John Foliot writes&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Mar/0394.html"&gt;
&lt;p&gt;Finally, I propose that any instance of &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; that lacks at a minimum the 2 proposed mandatory values be non-conformant and not render on screen.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When &lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Mar/0420.html"&gt;pressed for an explanation&lt;/a&gt;, &lt;a href="http://lists.w3.org/Archives/Public/public-html/2009Mar/0418.html"&gt;John continues&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://lists.w3.org/Archives/Public/public-html/2009Mar/0418.html"&gt;
&lt;p&gt;Actually, yes, I have &lt;a href="http://html4all.org/pipermail/list_html4all.org/2008-April/000797.html"&gt;proposed this form of draconian response before&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s about consequences: until such time as there are real consequences for slack developers/tools that allows content to exist that is incomplete, then there will be content that is incomplete &amp;#8211; it&amp;#8217;s a simple as that.  Why would &lt;code&gt;&amp;lt;img src="path..." /&amp;gt;&lt;/code&gt; be any more complete than &lt;code&gt;&amp;lt;img alt="Photo of a leprechaun" /&amp;gt;&lt;/code&gt;?  I mean, clearly, anyone processing that info in their user-agent will &amp;#8216;get&amp;#8217; the intent of the author, right?  Yet today, the first example will render in the browser, the second delivers a &amp;#8216;fail&amp;#8217;.  Ergo (to me) there is a problem of inequity here that must be addressed &amp;#8211; if it fails for some, it should fail for all.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;If it fails for some, it should fail for all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;John also believes that &lt;a href="http://lists.w3.org/Archives/Public/public-html/2008Aug/0407.html"&gt;Flickr is (or at least should be) illegal&lt;/a&gt; because it allows people to publish inaccessible content. I&amp;#8217;ll pause for a moment and let that sink in.&lt;/p&gt;

&lt;p&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s important to understand just how extreme these views are, even within the accessibility community. I was a professional accessibility architect for several years; before that, I took an intense interest in web accessibility; long before that, I was a &lt;a href="http://relayservices.att.com/"&gt;relay operator for AT&amp;amp;T&lt;/a&gt;. A few years ago, I had the pleasure of attending the annual &lt;a href="http://www.csun.edu/cod/conf/"&gt;CSUN accessibility conference&lt;/a&gt;, where I helped staff the Mozilla booth and talked about Firefox&amp;#8217;s accessibility features to anyone who would listen. So I have had the opportunity to speak to a great many people who cared about accessibility, authored accessible content, wrote accessible software, designed accessible hardware, and provided accessibility services.&lt;/p&gt;

&lt;p&gt;In all that time, in all those conversations, with all those people, I have never heard anyone say, &amp;#8220;Seriously, you know what we should do to make the world more accessible? Fuck over all the sighted people.&amp;#8221;&lt;/p&gt;

&lt;p&gt;I know that most of the people who care about accessibility do not have the time or resources to follow the daily machinations of the HTML 5 working groups. That&amp;#8217;s fine; standards take a long time and require a lot of attention, and most people have day jobs somewhere else. But I have observed a kind of &amp;#8220;conventional wisdom&amp;#8221; taking hold in this wider community &amp;#8212; that the HTML working group doesn&amp;#8217;t care about accessibility, that any and all proposals are rejected, that the views of &amp;#8220;experts&amp;#8221; are simply dismissed out of hand.&lt;/p&gt;

&lt;p&gt;I think it would be wise for people who truly care about accessibility to take a closer look at the so-called &amp;#8220;experts&amp;#8221; who are participating on their behalf, and to understand exactly what these people are proposing. It&amp;#8217;s true that some of their proposals have not been adopted, but it&amp;#8217;s not because some cartoonishly monocled villain enjoys being mean to them. It&amp;#8217;s because the proposals are insane.&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[Immersed in the Googleplex ball pit]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/01/11/bff" />
<id>tag:diveintomark.org,2009-01-11:/archives/20090111212840</id>
<updated>2009-01-11T21:29:04Z</updated>
<published>2009-01-11T21:28:40Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="personal" /><summary type="html">Michael and Mark in ball pit in Googleplex building 42</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/01/11/bff">&lt;p&gt;&lt;img class="framed" src="http://wearehugh.com/public/2009/01/2009-01-09-michael-and-mark-in-googleplex-ballpit.jpg" alt="Michael and Mark in ball pit in Googleplex building 42" width="640" height="480"&gt;&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[A gentle introduction to video encoding, part 5: constraints]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/01/08/give-part-5-constraints" />
<id>tag:diveintomark.org,2009-01-09:/archives/20090109021141</id>
<updated>2009-01-09T02:23:31Z</updated>
<published>2009-01-09T02:11:41Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="encoding" /><category scheme="http://diveintomark.org" term="GIVE" /><category scheme="http://diveintomark.org" term="video" /><summary type="html">There is no right or wrong.  There is only what works and what doesn't.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/01/08/give-part-5-constraints">&lt;p&gt;[Part of an &lt;a href="http://diveintomark.org/tag/give"&gt;ongoing series&lt;/a&gt;.]&lt;/p&gt;

&lt;p&gt;I had lunch with my father the other day, and I explained this series as well as I could to someone who didn&amp;#8217;t start programming when he was 11.  His immediate reaction was, &amp;#8220;Why are there so many different formats?  Why can&amp;#8217;t everybody just agree on a single format?  It is political, or technical, or both?&amp;#8221;  The short answer is, it&amp;#8217;s both.  The history of video in any medium &amp;#8212; and especially since the explosion of amateur digital video &amp;#8212; has been marred by a string of companies who wanted to use &lt;a href="http://diveintomark.org/archives/2008/12/18/give-part-1-container-formats/"&gt;container formats&lt;/a&gt; and &lt;a href="http://diveintomark.org/archives/2008/12/19/give-part-2-lossy-video-codecs"&gt;video codecs&lt;/a&gt; as tools to lock content producers and content consumers into their little fiefdoms.  Own the format, own the future.  And when I say &amp;#8220;history&amp;#8221; &amp;#8212; well, it&amp;#8217;s still going on.  Tried to play a Windows Media Video on Mac OS X lately?  The &lt;a href="http://www.telestream.net/flip4mac-wmv/overview.htm"&gt;codec and container support is out there&lt;/a&gt;, but it&amp;#8217;s not baked in.  Want to watch &lt;a href="http://www.apple.com/trailers/"&gt;movie trailers on Apple.com&lt;/a&gt;?  Please install QuickTime.  And so forth and so on.  The only thing that was pre-installed on both platforms was Flash, so when a few startups dipped their toes into the Internet video waters, the ones that used Flash Video won despite it being an objectively inferior codec.  (Some revision of Flash 9 added support for H.264 video, AAC audio, and the MP4 container, which is what &lt;a href="http://www.youtube.com/browse?s=mphd&amp;amp;c=0&amp;amp;l=&amp;amp;b=0"&gt;YouTube HD&lt;/a&gt; uses.)&lt;/p&gt;

&lt;p&gt;So that&amp;#8217;s the politics.  But there are also technical barriers.  As with all engineering, video encoding is primarily about constraints.  I can think of 10 just off the top of my head:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CPU capacity for decoding and playing in real time&lt;/strong&gt;.  This is one of the most important constraints, since &lt;em&gt;video is meant to be watched in real time&lt;/em&gt;.  That sounds simple, but it&amp;#8217;s incredibly complex.  Every video you&amp;#8217;ve ever watched in your entire life had to be decoded and played in real time.  Otherwise it stutters and the viewing experience sucks.  And we&amp;#8217;re talking about video here; if the viewing experience sucks, there&amp;#8217;s nothing left.  Some codecs are just more complex than others, and that translates into higher system requirements to decode videos in real time.  &lt;a href="http://diveintomark.org/archives/2008/12/19/give-part-2-lossy-video-codecs#h264"&gt;As I&amp;#8217;ve mentioned before&lt;/a&gt;, some codecs are now decoded by specialized hardware.  iPhones have a little chip inside them that understands H.264 Baseline Profile; without that, the iPhone would need a Core 2 Duo processor to play movies, and it would have a battery life of 10 minutes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Codec compatibility&lt;/strong&gt;.  Normal people won&amp;#8217;t download codecs or plug-ins just to watch a dog on a skateboard, or even to watch a trailer for a $100 million blockbuster.  (Sadly, they &lt;em&gt;will&lt;/em&gt; download plug-ins for porn, but those are invariably trojan horses.  Or so I&amp;#8217;ve read.  Moving on&amp;#8230;)  The phone in your pocket can probably play AMR ringtones, maybe MP3 ringtones, but probably not Vorbis ringtones (unless you have an Android phone) &amp;#8212; and you probably couldn&amp;#8217;t download new codecs even if you wanted to (which, I must reiterate, nobody wants to).  Apple and Real Networks tried for &lt;em&gt;years&lt;/em&gt; to corner the web video market, but 99% of schmucks with a browser have Flash, so Flash video won on the web. Meanwhile, Firefox 3.1 will ship with support for the &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; element but will only support Theora and Vorbis in an Ogg container &amp;#8212; even if your underlying operating system ships with other codecs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CPU capacity for encoding&lt;/strong&gt;.  Encoding takes a long time.  Taking my home movie from iMovie to a DVD used to take 8 hours on a Powerbook G4 laptop.  These days you can rip a DVD movie with Xvid in 30 minutes, or you can rip it with a more complex codec with all optional features turned on, and maybe it&amp;#8217;ll still take 8 hours.  It&amp;#8217;ll look better, but will it look 16 times better?  If you&amp;#8217;re only doing it once, maybe you don&amp;#8217;t care.  If you&amp;#8217;re running YouTube and people are uploading 13 hours of video every minute, maybe you do.  CPU cycles aren&amp;#8217;t free; at that scale, they&amp;#8217;re not even cheap.  (That&amp;#8217;s a real statistic, by the way; I got it from the page on the Google intranet entitled &amp;#8220;What can we tell non-Googlers?&amp;#8221; and it&amp;#8217;s accurate as of September 2008.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acceptable delay between recording and delivery&lt;/strong&gt;.  In my own experience, videos I&amp;#8217;ve uploaded on YouTube are available within minutes, which is just mind-boggling when you consider the volume.  If you&amp;#8217;re re-encoding a live stream, even a few minutes delay is probably unacceptable.  That means you&amp;#8217;ll need a faster encoder, a less complex codec, or lower quality settings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audience size&lt;/strong&gt;.  It&amp;#8217;s not a big secret that lots of video on the Internet looks like crap.  Partly that&amp;#8217;s because the video uploader uploaded crappy video, but it&amp;#8217;s also because most Internet videos are only watched by a few people, and it&amp;#8217;s just not a worthwhile tradeoff to spend 8 hours re-encoding it.  On the other hand, if you&amp;#8217;re mastering a DVD that&amp;#8217;ll get sold to 10 million people, you&amp;#8217;ll probably use higher quality settings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Screen dimensions&lt;/strong&gt;.  DVDs can&amp;#8217;t store high-def 1920 x 1080 video because the standard doesn&amp;#8217;t allow for it, which makes perfect sense because it was designed around the screen resolution of standard-def TVs.  Blu-Ray ups the limit, but there&amp;#8217;s still a limit.  Screen sizes vary more for PC video, but there will always be practical upper limits depending on your audience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My bandwidth&lt;/strong&gt;.  If you&amp;#8217;re streaming or downloading video, some percentage of your audience is probably living in a third-world country like the United States, with limited broadband access, slow speeds, and monthly bandwidth caps. Larger file size = longer wait to play = fewer videos watched overall.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your bandwidth&lt;/strong&gt;.  Obviously every bit I download is a bit that you upload, and bandwidth ain&amp;#8217;t free either.  &amp;#8220;When I get a little money I buy bandwidth; and if any is left I buy food and clothes.&amp;#8221;  Or something like that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hard limits on storage size&lt;/strong&gt;.  As I mentioned before, physical media has upper limits on total size.  Commercial DVDs can hold upwards of 9 GB, which seems like a lot but really isn&amp;#8217;t.  Blu-Ray maxes out at 50 GB, which seems like a lot but really isn&amp;#8217;t.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patents / licensing costs&lt;/strong&gt;.  Did I mention that most popular video codecs are patent-encumbered?  This is why &lt;a href="http://commons.wikimedia.org/wiki/Commons:Media_help"&gt;Wikimedia uses Theora exclusively&lt;/a&gt;, and why Firefox can ship a native Theora decoder and but won&amp;#8217;t ever ship H.264.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&amp;#8230;and that&amp;#8217;s the &lt;em&gt;short&lt;/em&gt; list.&lt;/p&gt;

&lt;p&gt;All of which leads me to the Zen of video encoding, which is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There is no right or wrong.  There is only what works and what doesn&amp;#8217;t.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you can find even one combination of tools, delivery devices, and target platforms that satisfies your constraints and still accomplishes your goals, congratulations.  You&amp;#8217;re ahead of 99% of the people who&amp;#8217;ve tried.&lt;/p&gt;

&lt;p&gt;Tomorrow: specifics on common devices/platforms and their limitations.&lt;/p&gt;
</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[A gentle introduction to video encoding: the slides]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/01/08/give-slides" />
<id>tag:diveintomark.org,2009-01-08:/archives/20090108222721</id>
<updated>2009-01-09T20:46:49Z</updated>
<published>2009-01-08T22:27:21Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="encoding" /><category scheme="http://diveintomark.org" term="GIVE" /><category scheme="http://diveintomark.org" term="presentation" /><category scheme="http://diveintomark.org" term="video" /><summary type="html">My tech talk went extremely well.  I can't share the video because we talked about some internal Youtube stuff, but here are the slides.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/01/08/give-slides">&lt;p&gt;My tech talk went extremely well.  Lots of people, lots of great questions.  I can&amp;#8217;t share the video because we talked about some internal Youtube stuff, but here are the slides:&lt;/p&gt;

&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=giveparts1through4200901public-1231522537516765-2&amp;#038;stripped_title=a-gentle-introduction-to-video-encoding-diveintomark-presentation" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=giveparts1through4200901public-1231522537516765-2&amp;amp;stripped_title=a-gentle-introduction-to-video-encoding-diveintomark-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;&lt;a href="http://wearehugh.com/public/2009/01/GIVE-parts-1-through-4-2009-01-public.odp"&gt;Download as OpenDocument presentation&lt;/a&gt;&lt;/p&gt;</content>
</entry>
<entry>
<author>
<name>Mark</name>
<uri>http://diveintomark.org/</uri>
</author>
<title type="html"><![CDATA[A gentle introduction to video encoding, part 4: captioning]]></title>
<link rel="alternate" type="text/html" href="http://diveintomark.org/archives/2009/01/07/give-part-4-captioning" />
<id>tag:diveintomark.org,2009-01-07:/archives/20090107063414</id>
<updated>2009-01-07T22:18:50Z</updated>
<published>2009-01-07T06:34:14Z</published>
<category scheme="http://diveintomark.org" term="unfiled" /><category scheme="http://diveintomark.org" term="accessibility" /><category scheme="http://diveintomark.org" term="captioning" /><category scheme="http://diveintomark.org" term="GIVE" /><category scheme="http://diveintomark.org" term="haali" /><category scheme="http://diveintomark.org" term="mp4" /><category scheme="http://diveintomark.org" term="mplayer" /><category scheme="http://diveintomark.org" term="sami" /><category scheme="http://diveintomark.org" term="smil" /><category scheme="http://diveintomark.org" term="srt" /><category scheme="http://diveintomark.org" term="ssa" /><category scheme="http://diveintomark.org" term="subtitles" /><category scheme="http://diveintomark.org" term="video" /><category scheme="http://diveintomark.org" term="vlc" /><category scheme="http://diveintomark.org" term="vsfilter" /><summary type="html">If you printed out the SMIL 3.0 specification on US-Letter-sized paper, it would weigh in at 395 pages. So don't do that.</summary>
<content type="html" xml:base="http://diveintomark.org/archives/2009/01/07/give-part-4-captioning">&lt;p&gt;[Part of an &lt;a href="http://diveintomark.org/tag/give"&gt;ongoing series&lt;/a&gt;.]&lt;/p&gt;

&lt;p&gt;The first thing you need to know about captions and subtitles is that &lt;a href="http://joeclark.org/access/captioning/bpoc/ST.html"&gt;captions and subtitles are different&lt;/a&gt;.  The second thing you need to know about captions and subtitles is that you can safely ignore the differences unless you&amp;#8217;re creating your own from scratch.  I&amp;#8217;m going to use the terms interchangeably throughout this article, which will probably drive you crazy if you happen to know and care about the difference.&lt;/p&gt;

&lt;p&gt;Historically, captioning has been driven by the needs of deaf and hearing impaired consumers, and captioning technology has been designed around &lt;a href="http://en.wikipedia.org/wiki/Closed_captioning#Television_and_video"&gt;the technical quirks of broadcast television&lt;/a&gt;.  In the United States, so-called &amp;#8220;&lt;a href="http://main.wgbh.org/wgbh/pages/mag/services/captioning/faq/"&gt;closed captions&lt;/a&gt;&amp;#8221; are embedded into a part of the NTSC video source (&amp;#8221;Line 21&amp;#8243;) that is normally outside the viewing area on televisions.  In Europe, they use a completely different system that is embeddable in the PAL video source.  Over time, each new medium (VHS, DVD, and now online digital video) has dealt a blow to the accessibility gains of the previous medium.  For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PAL VHS tapes did not have enough bandwidth to store closed captions at all.&lt;/li&gt;
&lt;li&gt;DVDs have the technical capability, but producers often manage to screw it up anyway; e.g. DVDs of low-budget television shows are often released without the closed captions that accompanied the original broadcast.&lt;/li&gt;
&lt;li&gt;HDMI cables drop &amp;#8220;Line 21&amp;#8243; closed captions altogether.  If you play an NTSC DVD on an HDTV over HDMI, you&amp;#8217;ll never see the closed captions, even if the DVD has them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And &lt;a href="http://joeclark.org/book/sashay/serialization/Chapter13.html"&gt;accessible online video is just fucking hopeless&lt;/a&gt;.  (And no, it won&amp;#8217;t change &lt;a href="http://www.alistapart.com/articles/thisishowthewebgetsregulated/"&gt;unless new regulation forces it to change&lt;/a&gt;.  When it comes to captioning, Joe Clark has been right longer than many of you have been alive.)&lt;/p&gt;

&lt;p&gt;So even in broadcast television, captioning technology was fractured by different broadcast technologies in different countries.  Digital video had the capability of unifying the technologies and learning from their mistakes.  Of course, exactly the opposite happened.  Early caption formats split along company lines; each major video software platform (RealPlayer, QuickTime, Windows Media, Adobe Flash) implemented captioning in their own way, with levels of adoption ranging from nil to zilch.  At the same time, an entire subculture developed around &amp;#8220;&lt;a href="http://en.wikipedia.org/wiki/Fansub"&gt;fan-subbing&lt;/a&gt;,&amp;#8221; i.e. using captioning technology to provide translations of foreign language videos.  For example, non-Japanese-speaking consumers wanted to watch Japanese anime films, so amateur translators stepped up to publish their own English captions that could be overlaid onto the original film.  In the 1980s, fansubbers would actually take VHS tapes and overlay the English captions onto a new tape, which they would then (illegally) distribute.  Nowadays, translators can simply publish their work on the Internet as a standalone file.  English-speaking consumers can have their DVDs shipped directly from Japan, and they use software players that can overlay standalone English caption files while playing their Japanese-only DVDs.  The legality of distributing these unofficial translations (even separately, in the form of standalone caption files) &lt;a href="http://www.nytimes.com/2005/08/21/arts/21solo.html"&gt;has been disputed in recent years&lt;/a&gt;, but the fansubbing community persists.&lt;/p&gt;

&lt;p&gt;Technically, there is a lot of variation in captioning formats.  At their core, captions are a combination of text to display, start and end times to display it, information about where to position the text on a screen, fonts, styling, alignment, and so on.  Some captions roll up from the bottom of the screen, others simply appear and disappear at the appropriate time.  Some caption formats mandate where each caption should be placed and how it should be styled; others merely suggest position and styling; others leave all display attributes entirely up to the player.  Almost every conceivable combination of these variables has been tried.  Some forms of media try multiple combinations at once.  DVDs, for example, can have two entirely distinct forms of captioning &amp;#8212; closed captioning (as used in NTSC broadcast television) embedded in the video stream, and one or more subtitle tracks.  DVD subtitle tracks are used for many different things, including subtitles (just the words being spoken, in the same language as the audio), captions for the hearing impaired (which include extra notations of background noises and such), translations into other languages, and director&amp;#8217;s commentary.  Oh, and they&amp;#8217;re stored on the DVD as images, not text, so the end user has no control over fonts or font size.&lt;/p&gt;

&lt;p&gt;Beyond DVDs, most caption formats store the captions as text, which inevitably raises the issue of character encoding.  Some caption formats explicitly specify the character encoding, others only allow UTF-8, others don&amp;#8217;t specify any encoding at all.  On the player side, most players respect the character encoding if present (but may only support specific encodings); in its absence, some players assume UTF-8, some guess the encoding, and some allow the user to override the encoding.  Obviously standalone caption files can be in any format, but if you want to embed your captions as a track within a &lt;a href="http://diveintomark.org/archives/2008/12/18/give-part-1-container-formats"&gt;video container&lt;/a&gt;, your choices are limited to the caption formats that the video container supports.&lt;/p&gt;

&lt;p&gt;And remember when I said that there were a &lt;a href="http://diveintomark.org/archives/2008/12/30/give-part-3-lossy-audio-codecs"&gt;metric fuck-ton of audio codecs&lt;/a&gt;?  Forget that.  There are an &lt;em&gt;imperial fuck-ton&lt;/em&gt; of caption formats (i.e. multiply by 9/5 and add 32).  Here is a &lt;em&gt;partial&lt;/em&gt; list of caption formats, taken from the list of formats supported by &lt;a href="http://www.urusoft.net/products.php?cat=sw"&gt;Subtitle Workshop&lt;/a&gt;, which I used to caption my &lt;a href="http://diveintomark.org/tag/diveintomarkshow"&gt;short-lived video podcast series&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://www.urusoft.net/products.php?cat=sw"&gt;
&lt;p&gt;Adobe Encore DVD, Advanced SubStation Alpha, AQTitle, Captions 32, Captions DAT, Captions DAT Text, Captions Inc., Cheetah, CPC-600, DKS Subtitle Format, DVD Junior, DVD Studio Pro, DVD Subtitle System, DVDSubtitle, FAB Subtitler, IAuthor Script, Inscriber CG, JACOSub 2.7+, Karaoke Lyrics LRC, Karaoke Lyrics VKT, KoalaPlayer, MacSUB, MicroDVD, MPlayer, MPlayer2, MPSub, OVR Script, Panimator, Philips SVCD Designer, Phoenix Japanimation Society, Pinnacle Impression, PowerDivX, PowerPixel, QuickTime Text, RealTime, SAMI Captioning, Sasami Script, SBT, Sofni, Softitler RTF, SonicDVD Creator, Sonic Scenarist, Spruce DVDMaestro, Spruce Subtitle File, Stream SubText Player, Stream SubText Script, SubCreator 1.x, SubRip, SubSonic, SubStation Alpha, SubViewer 1.0, SubViewer 2.0, TMPlayer, Turbo Titler, Ulead DVD Workshop 2.0, ViPlay Subtitle File, ZeroG.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which of these formats are important?  The answer will depend on whom you ask, and more specifically, how you&amp;#8217;re planning to distribute your video.  This series is primarily focused on videos delivered as files to be played on PCs or other computing devices, so my choices here will reflect that.  These are some of the most well-supported caption formats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#srt"&gt;SubRip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ass"&gt;SubStation Alpha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mp4tt"&gt;MPEG-4 Timed Text&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sami"&gt;SAMI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#smil"&gt;SMIL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="srt"&gt;&lt;a href="http://en.wikipedia.org/wiki/SubRip"&gt;SubRip&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;SubRip is the &lt;a href="http://diveintomark.org/archives/2008/12/18/give-part-1-container-formats"&gt;AVI&lt;/a&gt; of caption formats, in the sense that its basic functionality is supported everywhere but various people have tried to extend it in mostly incompatible ways and the result is a huge mess.  As a standalone file, SubRip captions are most commonly seen with a &lt;code&gt;.srt&lt;/code&gt; extension.  SubRip is a text-based format which can include font, size, and position information, as well as a limited set of HTML formatting tags, although most of these features are &lt;a href="http://ale5000.altervista.org/subtitles.htm"&gt;poorly supported&lt;/a&gt;.  Its &amp;#8220;official&amp;#8221; specification is &lt;a href="http://forum.doom9.org/showthread.php?p=470941#post470941"&gt;a doom9 forum post from 2004&lt;/a&gt;.  Most players assume that &lt;code&gt;.srt&lt;/code&gt; files are encoded in Windows-1252 (what Windows programs frequently call &amp;#8220;ANSI&amp;#8221;), although some can detect and switch to UTF-8 encoding automatically.&lt;/p&gt;

&lt;p&gt;Because &lt;code&gt;.srt&lt;/code&gt; files are so often &lt;a href="http://www.opensubtitles.org/en"&gt;published&lt;/a&gt; separately from the video files they describe, the most common use case is to put your &lt;code&gt;.srt&lt;/code&gt; file in the same directory as your video file and give them the same name (up to the file extensions).  But it is also possible to embed SubRip captions directly into AVI files with &lt;a href="http://www.alexander-noe.com/video/amg/"&gt;AVI-Mux GUI&lt;/a&gt;, into MKV files with &lt;a href="http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge-gui.html"&gt;mkvmerge&lt;/a&gt;, and into MP4 files with &lt;a href="http://gpac.sourceforge.net/packager.php"&gt;MP4Box&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can play SubRip captions in Windows Media Player or other DirectShow-based video players after installing &lt;a href="http://www.videohelp.com/tools/VSFilter_DirectVobSub"&gt;VSFilter&lt;/a&gt;; in QuickTime after installing &lt;a href="http://www.perian.org/"&gt;Perian&lt;/a&gt;; on Linux, both &lt;a href="http://www.mplayerhq.hu/DOCS/HTML/en/index.html"&gt;mplayer&lt;/a&gt; and &lt;a href="http://www.videolan.org/vlc/"&gt;VLC&lt;/a&gt; support it natively.&lt;/p&gt;

&lt;h3 id="ass"&gt;&lt;a href="http://en.wikipedia.org/wiki/SubStation_Alpha"&gt;SubStation Alpha&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;SubStation Alpha and its successor, Advanced SubStation Alpha, are the preferred caption formats of the fansubbing community.  As standalone files, they are commonly seen with &lt;code&gt;.ssa&lt;/code&gt; or &lt;code&gt;.ass&lt;/code&gt; extensions.  They have &lt;a href="http://www.matroska.org/technical/specs/subtitles/ssa.html"&gt;a spec longer than three paragraphs&lt;/a&gt;.  They are actually miniature scripting languages.  A &lt;code&gt;.ass&lt;/code&gt; file contains a series of commands to control position, scrolling, animation, font, size, scaling, letter spacing, borders, text outline, text shadow, alignment, and so on; and a series of time-coded events for displaying text given the current styling parameters.  It has support for multiple character encodings.&lt;/p&gt;

&lt;p&gt;The playing requirements for SubStation Alpha captions are almost identical to SubRip.  The same plugins are required for Windows and Mac OS X.  On Linux, mplayer prides itself on having the most complete SSA/ASS implementation.&lt;/p&gt;

&lt;h3 id="mp4tt"&gt;&lt;a href="http://en.wikipedia.org/wiki/MPEG-4_Part_17"&gt;MPEG-4 Timed Text&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;a.k.a. &amp;#8220;MPEG-4 Part 17,&amp;#8221; a.k.a. &lt;a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=39478"&gt;ISO 14496-17&lt;/a&gt;, MPEG-4 Timed Text (hereafter &amp;#8220;MP4TT&amp;#8221;) is the one and only caption format for the &lt;a href="http://diveintomark.org/archives/2008/12/18/give-part-1-container-formats"&gt;MP4 container&lt;/a&gt;.  It is not a file format; it is only defined in terms of a track within an MP4 container.  As such, it can not be embedded in any other video container, and it can not exist as a separate file.  (Note: the last sentence was a lie; the MPEG-4 Timed Text format is really the 3GPP Timed Text format, and it can very much be embedded in a 3GPP container.  What I meant to say is that the format can not be embedded in any of the other popular video container formats like AVI, MKV, or OGG.  I could go on about the subtle differences between MPEG-4 Timed Text in an MP4 container and 3GPP Timed Text in a 3GPP container, but it would just make you cry, and besides, technical accuracy is for pussies.)&lt;/p&gt;

&lt;p&gt;MP4TT defines detailed information on text positioning, fonts, styles, scrolling, and text justification.  These details are encoded into the track at authoring time, and can not be changed by the end user&amp;#8217;s video player.  The most readable description of its features is actually &lt;a href="http://gpac.sourceforge.net/doc_ttxt.php"&gt;the documentation for GPAC&lt;/a&gt;, an open source implementation of much of the MPEG-4 specification (including MP4TT).  Since MP4TT doesn&amp;#8217;t define a text-based serialization, GPAC invented one for their own use; since their format is designed to capture all the possible information in an MP4TT track, it turns out to be an easy way to read about all of MP4TT&amp;#8217;s features.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gpac.sourceforge.net/packager.php"&gt;MP4Box&lt;/a&gt;, part of the GPAC project, can take an &lt;code&gt;.srt&lt;/code&gt; file and convert it into a MPEG-4 Timed Text track and embed it in an existing MP4 file.  It can also reverse the process &amp;#8212; extract a Timed Text track from an MP4 file and output a &lt;code&gt;.srt&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;On Mac OS X, QuickTime supports MP4TT tracks within an MP4 container, but only if you rename the file from &lt;code&gt;.mp4&lt;/code&gt; to &lt;code&gt;.3gp&lt;/code&gt; or &lt;code&gt;.m4v&lt;/code&gt;.  &lt;a href="http://diveintomark.org/archives/2006/07/23/video-howto#qt7"&gt;I shit you not&lt;/a&gt;.  (On the plus side, changing the file extension will allow you to sync compatible video to an iPod or iPhone, which will actually display the captions.  Still not kidding.)  On Windows, any DirectShow-based video player (such as Windows Media Player or &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=205650"&gt;Media Player Classic&lt;/a&gt;) supports MP4TT tracks once you install &lt;a href="http://haali.cs.msu.ru/mkv/"&gt;Haali Media Splitter&lt;/a&gt;.  On Linux, VLC has supported MP4TT tracks for several years.&lt;/p&gt;

&lt;h3 id="sami"&gt;&lt;a href="http://en.wikipedia.org/wiki/SAMI"&gt;SAMI&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;SAMI was Microsoft&amp;#8217;s first attempt to create a captioning format for PC video files (as opposed to broadcast television or DVDs).  As such, it is natively supported by Microsoft video players, including Windows Media Player, without the need for third-party plugins.  It has &lt;a href="http://msdn.microsoft.com/en-us/library/ms971327.aspx"&gt;a specification on MSDN&lt;/a&gt;.  It is a text-based format that supports a large subset of HTML formatting tags.  SAMI captions are almost always embedded in an &lt;a href="http://diveintomark.org/archives/2008/12/18/give-part-1-container-formats"&gt;ASF container&lt;/a&gt;, along with Windows Media video and Windows Media audio.&lt;/p&gt;

&lt;p&gt;Don&amp;#8217;t use SAMI for new projects; it has been superceded by &lt;a href="http://en.wikipedia.org/wiki/Synchronized_Multimedia_Integration_Language"&gt;SMIL&lt;/a&gt;.  For historical purposes, you may enjoy reading about &lt;a href="http://www.webaim.org/techniques/captions/windows/"&gt;creating SAMI captions and embedding them in an ASF container&lt;/a&gt;, as long as you promise to never, ever try it at home.&lt;/p&gt;

&lt;h3 id="smil"&gt;&lt;a href="http://en.wikipedia.org/wiki/Synchronized_Multimedia_Integration_Language"&gt;SMIL&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;SMIL (Synchronized Multimedia Integration Language) is not actually a captioning format.  It is &amp;#8220;an XML-based language that allows authors to write interactive multimedia presentations.&amp;#8221;  It also happens to have a &lt;a href="http://www.w3.org/TR/SMIL3/smil-timing.html"&gt;timing and synchronization module&lt;/a&gt; that can, in theory, be used to display text on a series of moving pictures.  That is to say, if you think of SMIL as a way to provide captions for a video, you&amp;#8217;re doing it wrong.  You need to invert your thinking &amp;#8212; your video and your captions are each merely components of a SMIL presentation.  SMIL captions are not embedded into a &lt;a href="http://diveintomark.org/archives/2008/12/18/give-part-1-container-formats"&gt;video container&lt;/a&gt;; the video and its captions are referenced from a SMIL document.&lt;/p&gt;

&lt;p&gt;SMIL is &lt;a href="http://www.w3.org/AudioVideo/"&gt;a W3C standard&lt;/a&gt;; the most recent revision, &lt;a href="http://www.w3.org/TR/SMIL3/"&gt;SMIL 3.0&lt;/a&gt;, was just published in December 2008.  If you printed out the SMIL 3.0 specification on US-Letter-sized paper, it would weigh in at 395 pages.  So don&amp;#8217;t do that.&lt;/p&gt;

&lt;p&gt;QuickTime supports &lt;a href="http://developer.apple.com/documentation/QuickTime/IQ_InteractiveMovies/quicktimeandsmil/chapter_10_section_1.html"&gt;a subset of SMIL 1.0&lt;/a&gt;.  WebAIM provides a nice &lt;a href="http://www.webaim.org/techniques/captions/quicktime/"&gt;tutorial on using SMIL to add captions to a QuickTime movie&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://joeclark.org/book/sashay/serialization/Chapter13.html"&gt;Multimedia Accessibility [Joe Clark]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.webaim.org/techniques/captions/"&gt;Web Captioning Overview [WebAIM]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.afterdawn.com/guides/archive/subtitle_formats_explained.cfm"&gt;Subtitle formats explained [AfterDawn]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.opensubtitles.org/en/downloads"&gt;How to play subtitles [OpenSubtitles]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Subtitle_(captioning)"&gt;Subtitle (captioning) [Wikipedia]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Closed_captioning"&gt;Closed captioning [Wikipedia]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://forum.doom9.org/showthread.php?t=62723"&gt;MP4 FAQ [doom9]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.youtube.com/support/youtube/bin/answer.py?answer=100077&amp;amp;cbid=-evuehvvzg96r&amp;amp;src=cb&amp;amp;lev=answer"&gt;Adding/editing captions on Youtube videos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
</entry>
</feed>
