<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Reinventing Fire &#187; Standards</title>
	<atom:link href="http://schepers.cc/category/standards/feed" rel="self" type="application/rss+xml" />
	<link>http://schepers.cc</link>
	<description>Technology upside down and backwards</description>
	<lastBuildDate>Sun, 09 Oct 2011 19:47:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Retain Accessibility Immediately</title>
		<link>http://schepers.cc/retain-a11y-immediately</link>
		<comments>http://schepers.cc/retain-a11y-immediately#comments</comments>
		<pubDate>Thu, 30 Jun 2011 04:43:09 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=488</guid>
		<description><![CDATA[<br/>There has been a heated argument recently on the W3C Canvas API mailing list between accessibility advocates and browser vendors over a pretty tricky topic: should the Canvas API have graphical &#8220;objects&#8221; to make it more accessible, or should authors use SVG for that? I think it&#8217;s a false dichotomy, and I offer a proposal [...]]]></description>
			<content:encoded><![CDATA[<br/><p>There has been a <a href="http://lists.w3.org/Archives/Public/public-canvas-api/2011AprJun/0040.html" title="hit testing and retained graphics from Richard Schwerdtfeger on 2011-06-17 (public-canvas-api@w3.org from April to June 2011)">heated argument recently on the W3C Canvas API mailing list</a> between accessibility advocates and browser vendors over a pretty tricky topic: should the Canvas API have graphical &#8220;objects&#8221; to make it more accessible, or should authors use SVG for that?  I think it&#8217;s a false dichotomy, and I offer a proposal to suggests a way to improve the accessibility potential of the Canvas 2D API by defining how SVG and the Canvas 2D API can be used together.</p>
<p>This brings together some ideas I&#8217;ve had for a while, but with some new aspects.  This is still a rough overview, but the technical details don&#8217;t seem too daunting to me.</p>
<p><span id="more-488"></span></p>
<h4 id="Retained-Mode_vs_Immediate-Mode_Graphics">Retained-Mode vs Immediate-Mode Graphics</h4>
<p>First, some background…</p>
<p><b>SVG</b> is a <b>retained-mode</b> graphics format, meaning that each shape persists as a separate object, with distinct characteristics such as location, size (bounding box), and precise outline (stroke).  These characteristics can be acted upon within the object structure (DOM) as discrete entities (or groups of entities) for manipulation by script or by user-interface actions (e.g. mouse clicks or keyboard tabbing); one of these interactions may be <a href="http://en.wikipedia.org/wiki/Hit-testing" class="external text" title="http://en.wikipedia.org/wiki/Hit-testing">hit-testing</a>.</p>
<p>The <b>Canvas 2D API</b> is an <b>immediate-mode</b> API, meaning that it allows the programmer to create visual shapes as individual pixels that are unstructured; in other words, if a red circle and a red square are drawn which overlap one another, there is no way to distinguish these from one another, or from the background canvas element (though a programmer could maintain a separate structure in script).</p>
<p>With <b>retained-mode</b> graphics, each object which is added to the DOM increases the memory &#8220;weight&#8221; of the page or application, potentially slowing down the browser or otherwise decreasing performance; by contrast, <b>immediate-mode</b> graphics, which are not represented as objects in the DOM, do not decrease performance, which is an advantage over <b>retained-mode</b> graphics.</p>
<p>Some accessibility advocates have noted that hit-testing and zooming are critical accessibility features of graphics; this requires the ability to access the location, size, and other characteristics of individual graphics.  Unfortunately, adding this retained-mode feature to an immediate-mode API effectively removes the primary advantage of using an immediate-mode graphics system.</p>
<p>However, by defining how SVG and the Canvas 2D API can be used together, a model may be created which allows authors to easily use both together, each for their appropriate strengths.  This approach involves two aspects: defining the behavior, and a potential shared API syntax.</p>
<h4 id="Defining_Behavior">Defining Behavior</h4>
<p>Currently, the Canvas 2D API is only defined to work with the &lt;canvas&gt; element defined in HTML5, and it does not allow SVG to be drawn or imported into the Canvas.  However, it could be extended to work inside SVG or to allow SVG to be used inside Canvas.</p>
<h5 id="Canvas_in_SVG">Canvas in SVG</h5>
<p>At its simplest, the Canvas 2D API could simply be defined to allow authors to draw on the SVG raster &lt;image&gt; element, just as it does in the HTML &lt;canvas&gt; element, but there does not seem to be a reason to limit it to this element.  The Canvas API could be defined to draw to any SVG element, rendering or structural, as an overlay.  It would be merely a visual effect, and would participate in the rendering structure, including &#8220;z-index&#8221;, only as its &#8220;target element&#8221; does.</p>
<h5 id="SVG_in_Canvas">SVG in Canvas</h5>
<p>SVG shapes could be allowed to be imported into the &lt;canvas&gt; drawing context, such that they render there but are also inserted into the DOM or shadow DOM.  Currently, as I understand it, this is not allowed for security restrictions involving content from potentially different sources, but for content that does not have external references (for example, a &lt;use&gt; element to another site, this should not be a security risk.</p>
<p></p>
<h6 id="SVG_in_the_Shadow_Tree">SVG in the Shadow Tree</h6>
<p>The accessibility features of the Canvas 2D API include a &#8220;shadow tree&#8221; and focus ring for those elements, such as text, which are not otherwise accessible to users with limited vision.  Each such &#8220;graphic piece&#8221; which is created and painted to the screen is also represented in this underlying shadow DOM (IIRC).</p>
<p>SVG elements used in conjunction with Canvas could also be placed in this shadow tree, so that navigability is preserved.  In order to save memory usage, a concept like the &lt;use&gt; element in SVG could alternative be used to &#8220;point to&#8221; an SVG in the main DOM from its appropriate place in the shadow tree.</p>
<p>SVG elements could either be used as visual shapes themselves, or could be invisible &#8220;hot-spots&#8221; for specific areas of the screen.</p>
<h4 id="Common_API">Common API</h4>
<p>I have <a href="http://www.w3.org/Graphics/SVG/WG/wiki/Simple_SVG_API">suggested before</a> that we create a simple graphics API that will allow either 2D Canvas (immediate-mode) or SVG (retained-mode) images with the same set of methods and parameters, with the only difference being which &#8220;mode&#8221; the author selects to have as the instantiated form.  If the author draws a circle to the canvas context, it would simply be drawn to the screen with no structure; if the author draws that same circle to the SVG context, it creates a &lt;circle&gt; element with the appropriate attribute values and style and inserts it into the DOM.</p>
<p>There would be certain differences in some of the renderings, because of the different rendering and compositing models of SVG and Canvas, and there would be certain specialized functionality and features each would have, but the majority of the visual appearance would be the same. </p>
<p>This would allow authors to learn only one API for 2D graphics for the Open Web Platform.  With this ease of learning and use, the author could decide on a case-by-case basis, even within the same application, which mode works best.  It would provide incentive to authors to use each to its best effect.</p>
<p>I call this approach <a href="http://schepers.cc/w3c/svg/api/cog.svg">COG: Common Open Graphics</a>.</p>
<h4 id="Example">Example</h4>
<p>An example of the effective use of SVG and Canvas together is a hypothetical game in which the user pilots a spaceship amidst an asteroid field.  </p>
<p>The background of the game includes animated nebulae, passing comets, rotating planets and moons, and other visual effects which are not interactive, and which do not affect the play of the game, but which add visual appeal.  The foreground of the  game (the &#8220;playable area&#8221;) includes asteroids, enemy ships, and energy beams that the player must dodge or shoot at, which increase in size the closer they get, and which benefit from hit-testing and keyboard focusability. The middle-ground of the game contains many smaller asteroids and ships that are not yet interactive, and so don&#8217;t need hit-testing or focusability.</p>
<p>Adding all of these graphics shapes as retained-mode objects in the DOM would unnecessarily increase the memory footprint of the game, degrading performance and playability.  However, since only a small number of these elements (those in the playable area)  need the retained-mode interactivity, the majority of them could be drawn with immediate-mode characteristics, then when a certain &#8220;distance threshold&#8221; is reached, changed to interactive SVG elements, perhaps using the same shared API.  This preserves the accessibility of the game, while also causing minimal performance degradation, and possibly even helping performance, since the hit-testing doesn&#8217;t need to be calculated in script.  From an authoring point of view, using the same shared API means that both types of shape, retained-mode and immediate-mode, are equally easy to generate and maintain.</p>
<p>To enhance the visual appearance of the SVG asteroids, the finer control of the Canvas API could even draw an overlay on the SVG stroke and fill areas, much as filters do, to show craters and other surface details in a more fine-grained manner then can be done efficiently in SVG.  Since this would be drawn specifically on the SVG element, the element itself would still provide the geometry and position characteristics.</p>
<h4 id="Caveats">Caveats</h4>
<p>This proposal has two caveats:</p>
<ol>
<li> Canvas can only be extended to be as accessible as SVG is, in this model.  Even with object retention, there are still many enhancements needed to make SVG truly widely accessible.  However, as plans for SVG accessibility improvements are made, these would be largely importable directly into the Canvas API, rather than working in parallel on two unrelated but overlapping graphics models.</li>
<li> Simply because the Canvas 2D API may be made more accessible, does not mean that all Canvas API applications or content will be automatically accessible, any more than all HTML or SVG content is accessible.  Authors will still need to use best practices and take specific steps to make their applications accessible.  This proposal only provides the means and the incentive to do so.</li>
</ol>
<h4 id="Feedback">Feedback</h4>
<p>I&#8217;m interested in feedback on this, either in the comments section of this blog, or on the W3C Canvas mailing list, <a href="mailto:&#x70;&#x75;&#x62;&#x6C;&#x69;&#x63;&#x2D;&#x63;&#x61;&#x6E;&#x76;&#x61;&#x73;&#x2D;&#x61;&#x70;&#x69;&#x40;&#x77;&#x33;&#x2E;&#x6F;&#x72;&#x67;">public-canvas-api@w3.org</a>.</p>
<hr />
<h4 id="Update">Update</h4>
<p>Someone pointed out offlist that this post emphasizes the accessibility aspect of this proposal, because that was the context of the most recent discussion, but this is a win for anyone who wants to do graphics in the browser, for any reason, not just accessibility.  Like any good accessibility feature, my proposal has general benefits, so it is more likely to be used in more content.  In the example scenario above, the developer gets the hit testing for free, regardless of whether or not Accessibility Technology is involved.  Other general advantages include ease of learning and use of graphics by developers (as mentioned above), sharing of features between modes (like using <em>Canvas.toDataURL()</em> to save an SVG as a PNG), pixel operations (like painting or detecting a color at a point) in SVG, metadata (like microdata, RDFa, or microformats) in select parts of a Canvas app, and so on.  I&#8217;m sure that clever people will come up with a whole boatload of cool things to do with a combined retained-mode/immediate mode API that I couldn&#8217;t imagine here.</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/retain-a11y-immediately/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Smack versus Facts</title>
		<link>http://schepers.cc/smack-v-facts</link>
		<comments>http://schepers.cc/smack-v-facts#comments</comments>
		<pubDate>Tue, 01 Feb 2011 07:42:32 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Logo]]></category>
		<category><![CDATA[Meta]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[TouchTablet]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=464</guid>
		<description><![CDATA[<br/>Offered without comment. Post about HTML5 logo and overblown &#8220;controversy&#8221; surrounding it: 1,078 hits on the first day. Post about details on W3C touch events spec, including a roadmap and future plans: 273 hits on the first day.]]></description>
			<content:encoded><![CDATA[<br/><p>Offered without comment.</p>
<p><a href="http://schepers.cc/insidevoice">Post about HTML5 logo and overblown &#8220;controversy&#8221; surrounding it</a>: <br />
<strong>1,078</strong>  hits on the first day.</p>
<p><a href="http://schepers.cc/getintouch">Post about details on W3C touch events spec, including a roadmap and future plans</a>: <br />
<strong>273</strong> hits on the first day.</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/smack-v-facts/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Getting In Touch</title>
		<link>http://schepers.cc/getintouch</link>
		<comments>http://schepers.cc/getintouch#comments</comments>
		<pubDate>Sat, 29 Jan 2011 20:15:48 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[TouchTablet]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=439</guid>
		<description><![CDATA[<br/>Last week, I published the first draft (and subsequent updates) of the Web Interface specification, which defines touch events. This is the first spec from the new W3C Web Events Working Group. Peter-Paul Koch (PPK) gave it a positive initial review. Apparently, others thought it was news-worthy as well, because there were a few nice [...]]]></description>
			<content:encoded><![CDATA[<br/><p>Last week, I published the <a href="http://dvcs.w3.org/hg/webevents/raw-file/tip/touchevents.html">first draft (and subsequent updates) of the Web Interface specification</a>, which defines touch events.  This is the first spec from the new <a href="http://www.w3.org/2010/webevents/">W3C Web Events Working Group</a>.</p>
<p>Peter-Paul Koch (PPK) gave it a <a href="http://www.quirksmode.org/blog/archives/2011/01/w3c_touch_event.html">positive initial review</a>.  Apparently, others thought it was news-worthy as well, because there were a few nice write-ups in various tech sites.  Naturally, <a href="http://news.cnet.com/8301-30685_3-20029864-264.html">cnet&#8217;s Shank scooped it first</a> (he has his ear to the ground), and it was fairly quickly picked up by <a href="http://www.macgasm.net/2011/01/28/w3c-turns-eye-touchbased-web-apps/">macgasm</a>, <a href="http://www.electronista.com/articles/11/01/28/w3c.readies.standard.for.web.ui.on.phones.tablets/">electronista</a>, and <a href="http://www.webmonkey.com/2011/01/w3c-touch-events-specification-targets-tablets-touch-screens/">Wired webmonkey</a>.</p>
<p>I thought I&#8217;d go into a few of the high-level technical details and future plans for those who are interested.<br />
<span id="more-439"></span><br />
Touch interfaces are nothing novel, nor is using them with Web content, but there are enough differences from mouse interaction that specifying them should lead to easier development and better user experiences on the Open Web platform (or in HTML5 webapps, if you prefer that buzzword).</p>
<p>The most important thing to note for multi-touch events (using more than one finger, say) is that you want the different touch-points to be considered together, not as completely unrelated events.  The WebKit implementation, used in the iPhone and Droid smartphones, as well as many, many others, used a good model for this, with each event exposing lists of currently-active individual touch-points; with wide deployment of WebKit already, it was an obvious starting point.  PPK&#8217;s blog post was off on one minor detail here: while I did base the spec on WebKit&#8217;s behavior, I didn&#8217;t base it directly off of Apple&#8217;s documentation; I wrote it from scratch, for better or worse, and extended it for broader applicability.  </p>
<p>One of these extensions was to take PPK&#8217;s suggestion to add &#8216;touchenter&#8217; and &#8216;touchleave&#8217; events, the equivalent of the &#8216;mouseenter&#8217; and &#8216;mouseleave&#8217; events that we finally specified in DOM3 Events, which work much more intuitively than &#8216;mouseover&#8217; and &#8216;mouseout&#8217;.</p>
<p>I also extended the WebKit model to add &#8216;radiusX&#8217; and &#8216;radiusY&#8217; attributes, to indicate the general size and shape of the thing that touched the surface&#8230; say, a fingertip or a stylus (a fancy way of saying &#8220;pen-like stick&#8221;), described as an ellipse.  I&#8217;ve been soliciting use cases and requirements for a couple of years, and this is meant to cover a similar request across different devices.</p>
<p>That leads me to mention the other use case for this specification: pen-tablets.  Almost a decade ago, I was writing a browser-based SVG editor called SVG-Whiz (long since decomposed into digital fertilizer), and I wanted to be able to use my Wacom tablet with it.  It worked okay as a mouse replacement, but I had to choose the stroke-width manually&#8230; I couldn&#8217;t use the tablet&#8217;s built-in pressure sensitivity.</p>
<p>We&#8217;re about to change that.  Another change to the WebKit model is the addition of a &#8216;force&#8217; attribute to indicate the level of pressure used on the touch or tablet interface.  This will be useful for SVG or Canvas API drawing apps, games, and myriad other purposes.  For example, most touch screens don&#8217;t have the capability to detect hovering (some capacitive screens being the exception)&#8230; this is a challenge for accessibility, but perhaps the pressure sensitivity—expressed in the &#8216;force&#8217; attribute—could be applied to that end.  We may specify a new related CSS mode, or simply define when existing ones apply, such as triggering the CSS &#8216;:hover&#8217; pseudoclass past a certain pressure threshold (device-specific and user configurable, of course).</p>
<p>(On the subject of new CSS properties, Nokia has made the suggestion of <a href="http://www.starlight-webkit.org/CSS/css3-haptics.html">haptic feedback properties for touchscreens</a>, based on their implementation.  This could be a very interesting addition to touch interfaces, even if it&#8217;s not available on all devices.  That work would be handled by the CSS Working Group.)</p>
<p>In addition to pressure-sensitivity, pen input has other characteristics that distinguish it from touch, including the angle of the pen, so we may add that as well.  Pen-inputs, either through tablets or stand-alone digital pens, often include particular mode-shifting buttons, so we have added attributes to detect when the alt, shift, and control keys (or buttons) have been pressed.  </p>
<p>So, to cover a wide range of devices, we will be defining some capabilities beyond basic touchscreens: multi-touch, touch area, force, perhaps pen-angle, and even haptic feedback.  Not every feature will be available for every device, but they will be useful for those that do, but we want the spec to be future-proof and device-independent.</p>
<p>This leads me to another touchy area: gestures.  One of the common requests I&#8217;ve gotten is to add events for specific gestures, like pinch, swipe, twist, flick, etc.  There are two problems with trying to standardize this right now:</p>
<ol>
<li>Each device and each platform has its own gestures, sometimes several to do the same thing, and there is still room for innovation there;</li>
<li>It&#8217;s a patent minefield.</li>
</ol>
<p>Instead, we intend to specify higher-level &#8220;intentional&#8221; events, like zooming in or out, panning, navigating, editing, etc., and define a way to map between the physical actions (touching the screen and moving your fingers) and the intention event (zooming in); it also means we can map between input on other devices, like keyboard and mouse, and the intent behind those actions.  An additional aspect of this is another proposal by Nokia, the <a href="http://lists.w3.org/Archives/Public/public-webevents/2011JanMar/att-0002/TransformActionProposal.html">transform action events</a>; these match the transforms in SVG and CSS, such as translateX and translateY, scale, and rotate, and add the ability to detect the rate of the actions.  Having all these high-level events will ultimately make it much easier to author content and applications that work on multiple devices. </p>
<p>And though gestures are different on each device, we do plan to create an informative document detailing some common ones, perhaps something like the excellent <a href="http://www.lukew.com/ff/entry.asp?1071">Touch Gesture Reference Guide</a> by Luke Wroblewski, Craig Villamor, and Dan Willis.  That might eventually lead to some industry consensus about future efforts to define gesture events.</p>
<p>Last but not least, one of the additions I made to the spec after the first draft was to add my co-editors, Sangwhan Moon from Opera and Matt Brubeck from Mozilla, both of whom have already made excellent suggestions we&#8217;ve integrated into the spec, and who have volunteered to help me write the spec.  It&#8217;s a positive sign that we&#8217;ve got active participation from so many different browser-engine developers, since interoperability here is the most important thing.</p>
<p>For me, this specification has been about a decade in the making&#8230; it&#8217;s one of the things I wanted to tackle when I first came to W3C, even before I worked there.  So, I&#8217;m very excited to finally be doing it, and to help make touchscreens and pen-tablets part of the Open Web platform.  With some hard work and a little luck, we could get this spec completed and implemented in browsers by early next year.</p>
<p>So, if you are interested in helping us make sure the Touch Interface spec meets  your needs as a user, developer, or implementer&#8230; <a href="mailto:public-webevents@w3.org">get in touch</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/getintouch/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTML5 Logorrhea, or Use Your Inside Voice</title>
		<link>http://schepers.cc/insidevoice</link>
		<comments>http://schepers.cc/insidevoice#comments</comments>
		<pubDate>Tue, 25 Jan 2011 08:53:10 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Logo]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=435</guid>
		<description><![CDATA[<br/>I was involved in rolling out the new HTML5 logo for W3C; I wasn&#8217;t the person in charge, but I helped out with some aspects of it. The interesting thing to me was the reaction to the logo, aesthetics aside. (I like the logo personally, but I also like the retro-futurism of Soviet Realist art, [...]]]></description>
			<content:encoded><![CDATA[<br/><p>I was involved in rolling out the new <a href="http://www.w3.org/html/logo/index.html">HTML5 logo</a> for W3C; I wasn&#8217;t the person in charge, but I helped out with some aspects of it.</p>
<p>The interesting thing to me was the reaction to the logo, aesthetics aside.  (I like the logo personally, but I also like the retro-futurism of Soviet Realist art, like the statuary in <a href="http://en.wikipedia.org/Szoborpark">Memento Park</a> in <a href="http://www.szoborpark.hu/index.php?Lang=en">Budapest</a>, and comic books.)  I loved the parodies and jokes about the logo, but I was both unsurprised and disappointed at the some of the negative dialog (and in some cases, monolog) about what the logo is meant to represent.<br />
<span id="more-435"></span><br />
Just like the Gap and Starbucks logos, there were going to be some people who would be unhappy because that&#8217;s what makes them happy.  There would be no pleasing them, and it&#8217;s senseless to try.</p>
<p>But there was another set of people that we really value, and we wanted to make sure that they were comfortable with the logo: the perfectionists.  As you can imagine, it&#8217;s not the easiest group to please, but they are the ones who make standards work, by reviewing the specs to make sure there are as few errors as possible, by creating exacting tests to ensure interoperability between browsers, and by teaching web developers the precision of terminology and best practices that lead to high-quality web sites and webapps&#8230; usually on a volunteer basis.</p>
<p>These are our people, and we wanted to please them.  But at the same time, a logo has to serve lots of different communities&#8230; including managers and clients who don&#8217;t know or care that there is an “HTML5 specification” (whatever that might be), and people throwing around the word  “HTML5” like it&#8217;s birdseed at a geek wedding.  Even people who know better use “HTML5” as shorthand for “Finally, browsers are doing all this cool stuff I want to play with! WHEEEE!”</p>
<p>So, how do you strike a balance between people who want us to say, “This logo is for the HTML5 specification only, and we will sue anyone who puts it on a site that uses HTML4.01+CSS3” and those who want us to give them the shiny and shut up?  You make an “identity system” which includes sub-icons for specific technologies and general technology classes, and you say that the identity system, in toto, represents HTML5 and the peripherally-related technologies like CSS3, SVG, WOFF, Geolocation, etc.</p>
<p>And how do you screw it up?  You oversimplify in the FAQ and use the word “logo” instead of “identity system”, and let people infer that the main logo, the one for HTML5, is meant to represent not only HTML5, but CSS3 as well.  (Interestingly, some of the more vocal people who complained on Twitter don&#8217;t mind the geolocation API or SVG being conflated with HTML5 nearly so much as CSS3&#8230; that seems too fine a distinction to me.)</p>
<p>But we knew we would make some mistakes.  We <a href="http://www.w3.org/html/logo/faq.html#official">went out of our way to explain to people</a> that we were not trying to shove it down their throats&#8230; that we wanted to have a community conversation about it.</p>
<p>Once we had something we thought was ready to share, we released it to the public, rather in a rush.  We took to email, to Twitter, and to blog posts and comments, to collect feedback and clarify our message.  Turns out 140 characters is not enough to <a href="https://twitter.com/#!/shepazu/status/28204114663964673">convey much nuance</a>.  After a couple of days of seeing if the message was clear enough, giving people a chance to have a second look and see if the idea of a “logo system” stuck, we decided it wasn&#8217;t good enough.  We updated the FAQ to split out the <a href="http://www.w3.org/html/logo/faq.html#logo-represent">HTML5 logo</a> from the <a href="http://www.w3.org/html/logo/faq.html#icons-represent">sub-icons</a>.  That seemed clearer to people, though it&#8217;s really saying the same thing in a different way&#8230; but the way you say something matters.</p>
<p>And that&#8217;s my point, here:  The way you say something matters.</p>
<p>W3C started the conversation about the logo by clearly stating, and reinforcing consistently, that we were interested in feedback and we were listening to what people were saying.  <a href="https://twitter.com/#!/adactio/status/28224023695466496">Sometimes people didn&#8217;t believe us</a>, but we were.  (And I sincerely appreciate Jeremy Keith taking the trouble to explain what was frustrating him about the “logo / identity system”.)</p>
<p>But some people didn&#8217;t hear that we were listening, because they were <a href="http://tantek.com/2011/020/b1/new-w3c-html5-logo">too busy shouting</a>.  Shouting things like “Fire W3C Communications Person Who Led Messaging”&#8230; I&#8217;m not the person that&#8217;s targeted at, but I found it a rude and mean-spirited thing to say nevertheless.  (Pet peeve: I can&#8217;t stand when people make a public rant in a post and don&#8217;t allow others to comment on it&#8230; it demonstrates a certain lack of accountability.)  Tantek Çelik has been in Web standards for a long while, and knows exactly who the (overworked) Comm person is whose job he was calling for, and I think that&#8217;s irresponsible.</p>
<p>Tantek compounded this with a <a href="https://twitter.com/#!/t/status/28366364703981568">tweet</a> that somehow manages to pretend that W3C wasn&#8217;t listening, but all the shouting forced us to change our FAQ, then goes on to say in his next blog post:</p>
<blockquote>
<p>Yet with W3C&#8217;s first draft HTML5 FAQ, we almost gave up. Almost. But apparently sometimes angry rants can effect change. Sometimes passion works.</p>
<p>Within 24 hours of the last of our posts, W3C updated the FAQ, removed the errant entry, added more clarification</p>
</blockquote>
<p>You know what also works?  Having a calm conversation, reading the FAQ carefully and seeing where a mistaken impression (or even an outright mistake) might have been made, and making suggestions to the people who have invited you to share your thoughts.  </p>
<p>Folks, you didn&#8217;t need to get angry.  Yes, there was some ambiguity in the FAQ, and that was a mistake&#8230; one we were sorry to make and happy to correct, only a couple days after the logo was released.  But the result of all the shouting was that, several days later, I&#8217;m still talking to people who think that W3C is sending this mixed message with this logo, because that&#8217;s what everyone was shouting about&#8230; and all the clarifications and updates now aren&#8217;t going to put that spilled milk back in the glass, since you sent out the cry to arms.  A few simple words and a modicum of patience and trust would have served your cause—the precision we all value—much better.</p>
<p>W3C went out of our way to give you a voice.  You&#8217;re long-time contributors to standards.  You&#8217;re all insiders&#8230; use your inside voice.</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/insidevoice/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Pointers on Background of SVG Borders on Mutiny</title>
		<link>http://schepers.cc/css-in-svg</link>
		<comments>http://schepers.cc/css-in-svg#comments</comments>
		<pubDate>Sat, 21 Aug 2010 21:37:09 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[CDF]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[SVG 2]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=340</guid>
		<description><![CDATA[<br/>With SVG being integrated more and more into HTML5, both included via &#60;object&#62; and &#60;img&#62; elements, and inline in the same document, some natural questions about SVG and CSS are receiving more focus. This includes box model questions like background and border, and pointer events. I&#8217;m interested in comments from the community on what direction [...]]]></description>
			<content:encoded><![CDATA[<br/><p>With SVG being integrated more and more into HTML5, both included via <code>&lt;object&gt;</code> and <code>&lt;img&gt;</code> elements, and inline in the same document, some <a href="http://lists.w3.org/Archives/Public/www-svg/2010Aug/thread.html#msg28">natural questions</a> about SVG and CSS are receiving more focus.  This includes box model questions like background and border, and pointer events.</p>
<p>I&#8217;m interested in comments from the community on what direction SVG should take.</p>
<p><span id="more-340"></span></p>
<p>It&#8217;s pretty clear that the intent of the SVG 1.1 spec was that the box-model CSS properties must not apply to any SVG elements.  In addition to what the spec states on the subject, my conversations with people who participated in the SVG WG at the time leave me with no doubt on the matter.</p>
<p>The question is, is that the behavior we want?  How hard or easy is it to change that in modern SVG+HTML+CSS implementations?  What is most useful and intuitive for content authors?</p>
<p>In my opinion, we could specify that some aspects of the box model apply without screwing with SVG&#8217;s coordinate-based positioning system.  Here are my initial thoughts on some specific properties:</p>
<h4>Borders</h4>
<p>A borders is different than a stroke.  An SVG element, including any graphical (<code>&lt;rect&gt;</code>, <code>&lt;circle&gt;</code>, <code>&lt;path&gt;</code>, etc.) or container element (<code>&lt;svg&gt;</code>, <code>&lt;g&gt;</code>) can have both a stroke (which conforms to the geometry) and a border (which conforms to the element&#8217;s bounding box).  A common use case is setting the graphics apart from other content, or doing mouseover highlights of an SVG element; for example, when I mouse over or focus a circle, it would be much nicer, and just as semantic, to simply have a CSS property draw a rectangle around that element as a highlight than for me to generate a rectangle based on the bbox and insert that into the DOM, keep a pointer to it, then remove it when I mouse out.</p>
<p>Paint servers and similar resources (gradients, filters, etc.) should not have any border.  Note: <code>&lt;defs&gt;</code> is a non-rendering element, akin to <code>&lt;head&gt;</code>, so no border would be visible for that either, but if the content of a <code>&lt;defs&gt;</code> is <code>&lt;use&gt;</code>d, any border properties would apply in the same manner as for other properties.</p>
<p>The border should not have any effect on the layout or rendering; it would be strictly visual.</p>
<h4>Margin</h4>
<p>No effect on SVG content, but may affect HTML content around that SVG content.  So, an <code>&lt;svg&gt;</code> element with <code>'margin: 20px;'</code>  has a 20-pixel gap around the SVG content, just as if it were <code>&lt;img style="margin: 20px;"/&gt;</code></p>
<p>Alternately, maybe margin only has an effect for <code>&lt;svg&gt;</code> elements; that might be simpler to specify, implement, and understand for content authors.</p>
<h4>Padding</h4>
<p>Again, this has no effect on SVG content, but it does affect how the border is drawn.  This would be a nice way to compensate for thick stroke widths.</p>
<h4>Background</h4>
<p>A background is different than a fill.  Background is much the same as border; it is a rectangle (modulo the border-radius effects) around the shape, based on its geometric bounding box, taking into account padding.</p>
<p>By default, there should be no background color, including for the <code>&lt;svg&gt;</code> element.  Right now, there is a <a href="https://lists.webkit.org/pipermail/webkit-unassigned/2009-July/120301.html ">WebKit bug in Chrome and Safari</a> which renders a white, non-transparent background for SVG fragments or documents; this is a major pain for any content creators trying to use SVG, much like the old Internet Explorer bug on transparency in PNGs.  I hope it receives some attention from the WebKit developers soon.</p>
<p>SVG Tiny 1.2 defines a <a href="http://www.w3.org/TR/SVGTiny12/painting.html#viewport-fill-property"><code>'viewport-fill'</code></a>  and <a href="http://www.w3.org/TR/SVGTiny12/painting.html#viewport-fill-opacity-property"><code>'viewport-fill-opacity'</code></a>.  I think those should be deprecated in favor of <code>'background'</code>  properties; I have no opinion on which should have precedence&#8230; maybe they should be seen as aliases of <code>'background'</code>, if that makes it simpler.</p>
<p>A background on SVG content raises the question of pointer events, which is also relevant to borders.</p>
<h4>Pointer Events</h4>
<p>Should pointer events on the border or background fire on the element itself?  I think that the default should be &#8220;no&#8221;, just to be safe and consistent with older SVG content, but I could easily be persuaded to reverse that.  Either way, there should be a new property or set of properties that can modify this, in a manner consistent with how CSS is defining <code>'pointer-events'</code>.</p>
<p>This touches on the question, asked in a related thread, on whether the <code>&lt;svg&gt;</code> element, by default, should be a proximal event target for pointer events.  My answer on that is a pretty firm &#8220;no&#8221;; if you want to have it as an event target, give it a background, or change the <code>'pointer-events'</code>  value.</p>
<h4>Questions</h4>
<p>A few high level questions:</p>
<ul>
<li><strong>Is this a change from SVG 1.1 and SVG Tiny 1.2?</strong>  Yes.</li>
<li><strong>Is this backwards compatible?</strong>  Kind of.  It introduces new behavior that is not consistent with past behavior, but doesn&#8217;t explicitly change very much.</li>
<li><strong>Does this break existing content?</strong>  Very doubtful.</li>
<li><strong>Is this intuitive for content authors?</strong>  My intuition says yes.</li>
<li><strong>Does this match existing implementations?</strong>  Some, at least.</li>
<li><strong>Does this provide value for content authors?</strong> Yes.</li>
<li><strong>Does this make it harder to implement?</strong>  I don&#8217;t know; I suspect it makes it easier for at least some implementations.</li>
<li><strong>Would defining this improve interoperability?</strong>  Yes.</li>
</ul>
<h4>Conclusion</h4>
<p>I propose we change SVG 2 to explicitly define this behavior.  As the editor of the HTML5 spec, <a href="http://lists.w3.org/Archives/Public/www-svg/2010Aug/0048.html">Hixie seems to imply</a> that this is not for HTML5 to define, and I tend to agree with that, though maybe some informative mention in the HTML5 or CSS specs for how SVG treats margins and padding might be appropriate.  We recently <a href="http://lists.w3.org/Archives/Public/public-cdf/2010Aug/0000.html">formally closed</a> the <a href="http://www.w3.org/2004/CDF/">Compound Document Formats Working Group</a>, which was formed to look at exactly these sorts of questions, and published its specifications as Working Group Notes for posterity; we wanted to be clear about its status.  The CDF WG succumbed to the politics around the reformation of the HTML WG, and probably to good effect overall; but in its absence, we still need to resolve these questions by cooperation between the various groups involved.</p>
<p>I don&#8217;t think this should be any different in standalone SVG files than in SVG files referenced or inlined in HTML.  That would be very unintuitive, in my opinion.</p>
<p>If this is not controversial, I would be happy to put any or all of this in the <a href="http://dev.w3.org/SVG/modules/integration/SVGIntegration.html">SVG Integration spec</a>, which is one of the foundations of SVG 2.  If someone disagrees with this, we&#8217;ll have to talk about it before I start editing the spec.  In either case, it would need to be fleshed out some&#8230; I&#8217;m probably glossing over some possible stumbling blocks in the box model, which I&#8217;d appreciate feedback on.</p>
<p>Please leave a comment if you like my suggestions, if you see a flaw, or have a better suggestion.</p>
<h4 id="update1">Update:</h4>
<p>Just to show what I&#8217;m talking about, I created a sample.  Here is a good example of a bad example; below are 3 instance of the same SVG with the same CSS background and border values, with a border width of 2px.  The first 2 are external files referenced as objects, the third is inline in the HTML (you won&#8217;t see this one unless you are using preview releases of Firefox 4, WebKit, or IE9); the second image also has a padding and margin of 10px.</p>
<p>I tested this in several browsers, and in the referenced cases, the border width increases the image size, spawning scrollbars; I don&#8217;t think that&#8217;s a good outcome&#8230; it should clip the border, just as it does for any graphical overflow&#8230; borders should not contribute to the geometry of SVG images.</p>
<p>In the second case, where I added padding, the argument is less clear, but I still believe that for referenced content, the border and background should not displace the rendered graphics, and should be clipped.  For inline content, it would make sense for the padding and margin to be visible in the rendered document, but it should still not change the geometry of the SVG.</p>
<p><object type="image/svg+xml" width="150" height="150" data="http://www.schepers.cc/svg/blendups/css/border-bg.svg">Please use a modern browser.</object></p>
<p><object type="image/svg+xml" width="150" height="150" data="http://www.schepers.cc/svg/blendups/css/border-bg-padding.svg">Please use a modern browser.</object></p>
<p><svg xmlns="http://www.w3.org/2000/svg" width="150" height="150" viewBox="0 0 50 50" style="border: 2px solid green; background-color: palegreen;"><circle cx="25" cy="25" r="20" fill="orange" stroke="red" style="border: 2px solid gold; background-color: yellow;"/></svg></p>
<p>We&#8217;d need to specify this in order for it to behave the same across browsers (and authoring tools).  So, do people agree or disagree with my conlcusions?</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/css-in-svg/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Short Stuff</title>
		<link>http://schepers.cc/short-stuff</link>
		<comments>http://schepers.cc/short-stuff#comments</comments>
		<pubDate>Mon, 09 Aug 2010 04:31:43 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=300</guid>
		<description><![CDATA[<br/>I&#8217;ve been doing a lot of website stuff this week. Here&#8217;s some highlights: W3C Working Group Sites A few weeks ago, after long neglect, I finally updated the SVG WG page with a template that better matches the new(ish) W3C site redesign. Each working group has its own eclectic home page, which seems a bit [...]]]></description>
			<content:encoded><![CDATA[<br/><p>I&#8217;ve been doing a lot of website stuff this week.  Here&#8217;s some highlights:<br />
<span id="more-300"></span></p>
<h4 id="wg-sites">W3C Working Group Sites</h4>
<p>A few weeks ago, after long neglect, I finally updated the <a href="http://www.w3.org/Graphics/SVG/">SVG WG page</a> with a template that better matches the new(ish) W3C site redesign.  Each working group has its own eclectic home page, which seems a bit silly to me.  So, I took the template I made and converted the group pages of the <a href="http://www.w3.org/2008/webapps/">WebApps WG</a>, <a href="http://www.w3.org/Graphics/SVG/IG/">SVG Interest Group</a>, and <a href="http://www.w3.org/Graphics/fx/">FX Task Force</a>, and I&#8217;m talking with other W3C team contacts about converting theirs as well, though we&#8217;ll see how many switch over.  From my perspective, having a consistent look&#038;feel is important, and would make the W3C site more usable.</p>
<p>The new template I made is done in HTML5, with the &lt;header&gt;, &lt;footer&gt;, &lt;article&gt;, &lt;section&gt;, &lt;aside&gt;, and &lt;nav&gt; elements (and a reference to <a href="http://code.google.com/p/html5shiv/">Remy Sharp&#8217;s HTML5 shiv</a>), possibly even used correctly; the SVG WG page has a scripted live microblog feed from the <a href="https://twitter.com/svgwg">@svgwg</a> Twitter account, and an inline SVG easter egg (look for it in Firefox and WebKit nightlies).</p>
<h4 id="short">Short Notice</h4>
<p>I have been wanting to write or install a URL shortener on my own site for a while, so I didn&#8217;t have to rely on the brittle third-party services like TinyURL, which I feel don&#8217;t fit the spirit of the Web.  They obscure the link, and act as a massive throttling point.  I looked around a bit before for a custom URL shortener, but never found one that suited my fancy.</p>
<p>But on Saturday, after converting my URLs to have nicer, more meaningful, more RESTful names on the advice of the ever-helpful <a href="http://heldermagalhaes.com/blog/">Helder Magalhães</a>, I was in a mood to tackle the problem, and I found a <a href="http://esev.com/blog/review/host-your-own-url-shortener-10-php-apps-reviewed/">great summary of some of the options</a> by a fellow named Eric Severance.  He described a better list of criteria than I&#8217;d considered, and I went with his top pick, <a href="http://blairwilliams.com/pretty-link/">Pretty Link by Blair Williams</a>.</p>
<p>Despite the silly name, Pretty Link has almost all the features I wanted and then some.  It&#8217;s easy to use, it integrates into my WordPress blog, it lets me pick a meaningful shortname, and I can shorten not only my own blog&#8217;s URLs (lots of WP plugins let you do that), but any random URL I want; it even tracks how many people have followed the links, which to me is mildly interesting, but for people more into their brand would be very handy.  The only thing I&#8217;d like to see is a way to automatically publish a public page that lists all the shortened URLs and the title of each page, along with the expanded original URL; maybe I can hack that in, somehow (and maybe I just haven&#8217;t found it yet).  Just for posterity, I compiled a list of all the links I had tweeted before, and dereferenced them, which you can find on my <a href="http://schepers.cc/expanded_urls.html">expanded URLs page</a>.</p>
<h4 id="avatars">Commenter Avatars</h4>
<p>I&#8217;m playing a bit with my site theme.  I&#8217;m happy with it overall, but I think the column width could be a bit wider; I&#8217;ve already bumped up the font size.  I want to enable nested comment threads, because I think they are easier to read, but I&#8217;ll need to overhaul my theme quite a lot to do so, since it&#8217;s from an older version of WordPress.</p>
<p>In the meantime, I added commenter avatars.  The default image is a Gravatar; as with TinyURL, I don&#8217;t like artificial centralization in avatars, and in this case, it seems particularly silly.  So I cobbled together my own WordPress plugin to take an alternative approach, which I&#8217;ll blog about next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/short-stuff/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting to the Point</title>
		<link>http://schepers.cc/getting-to-the-point</link>
		<comments>http://schepers.cc/getting-to-the-point#comments</comments>
		<pubDate>Tue, 13 Jul 2010 15:18:15 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[Standards]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[SVG 2]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=243</guid>
		<description><![CDATA[<br/>SVG paths have a pretty good set of shape commands, enough to let you draw any 2D shape you might want in an authoring tool: horizontal, vertical, and diagonal straight lines, elliptical arc segments, and cubic and quadratic Bézier curves. Béziers are great, giving you precise control over the position and curve interpolation of each [...]]]></description>
			<content:encoded><![CDATA[<br/><p>SVG paths have a pretty good set of shape commands, enough to let you draw any 2D shape you might want in an authoring tool:  horizontal, vertical, and diagonal straight lines, elliptical arc segments, and cubic and quadratic Bézier curves.  Béziers are great, giving you precise control over the position and curve interpolation of each point in a concise format, using control points (&#8220;handles&#8221;), and are easily chained together to create complex shapes.</p>
</p>
<p>But let&#8217;s say you have a series of points, and you want to draw a smooth line between them, e.g. for stock data, an audio wave, or a mathematical graphing equation.  Béziers are not as handy there, because not all the points needed to define a Bézier spline are on the curve itself.  Obviously, you can decompose any set of points into a set of Béziers, but that takes math, and who wants to do that?  (Put your hand down, nerd.  I&#8217;m talking to the normals.)</p>
</p>
<p>Sometimes, you just want to lay down a set of points, and let the browser draw a smooth curve (unlike polylines, where each segment is just a straight line between the points).  Like this:</p>
<p>  <object type="image/svg+xml" width="420" height="120" data="http://schepers.cc/svg/path/pathpoints.svg">Please use a modern browser.</object><br />
<span id="more-243"></span>
</p>
<p> Mouse over the line above to see the equivalent cubic Bézier points.  They are off the line. Off the line! Oh, Math, why do you do this to me?</p>
<p>One thing that&#8217;s always bothered me about SVG&#8230; there should be more simple ways of doing things, and this is one of things.  Over the years, I&#8217;ve idly asked math-minded folks about how to achieve this, and the answers always soared right over my pointy little head.  I probably didn&#8217;t ask the question the right way.</p>
</p>
<p>But a few months ago, I was chatting with Ben Fry, one of the creators of Processing (the graphics programming language), and he mentioned <a href="http://en.wikipedia.org/wiki/Catmull%E2%80%93Rom_spline#Catmull.E2.80.93Rom_spline" title="Cubic Hermite spline - Wikipedia, the free encyclopedia">Catmull-Rom curves</a> as a possible solution.  I took note of that, and later read up on them; they seemed a pretty good fit for my use case.  In my spare time I looked for any libraries out there to convert Catmull-Rom curves to Bézier splines; I found <a href="http://almightybuserror.com/2009/12/04/drawing-splines-in-opengl.html">references</a> that talked about the the conversion using inverted matrixes, but no simple code to be had.  I&#8217;m lazy, and busy, and the problem wasn&#8217;t urgent, so I kept putting it off.</p>
</p>
<p>But in talking to folks about SVG throughout the UK, including designers, the thought kept running through my mind that SVG really does need a better authoring experience (and I don&#8217;t just mean authoring tools, though some nice animation tools would help).  So, when I got back home from vacation, before I really got back into the thick of the dozen other things I should be doing, I put on some music and spent a few hours after work scouring the intartubes for some suitable code.  And as luck would have it, Maxim Shemanarev&#8217;s <a href="http://www.antigrain.com/__code/include/agg_curves.h.html">Anti-Grain Geometry</a> library contained a single simplified conversion matrix and a line of code that did the grunt work in C++, easily ported to Javascript; whip up a custom parser for the &lt;path&gt; syntax, feed it into the convertor function, and you&#8217;ve got yourself a working proof-of-concept.</p>
</p>
<p>Here is a scientific chart showing how awesome the SVG &lt;path&gt; element is, with values derived from the overall awesomeness by different path commands, rendered using an experimental Catmull-Rom path command:</p>
<p><object type="image/svg+xml" width="450" height="400" data="http://schepers.cc/svg/path/path-awesomeness.svg">Please use a modern browser.</object></p>
<p>As you can see, adding Catmull-Rom curves would increase the awesomeness of SVG paths by almost 50%.  That is a lot more awesome!</p>
</p>
<p>The syntax is pretty intuitive&#8230; it&#8217;s just the command &#8216;R&#8217; followed by a set of coordinate points:</p>
<pre><code>
  &lt;path stroke="#BADA55"
        stroke-width="2"
        fill="none"
        d="M20,380
           R58,342
           100,342
           100,300
           140,250
           190,210
           220,197
           250,184
           280,155
           310,260
           404,20"/&gt;
</code></pre>
<p>And the path syntax isn&#8217;t just used for the &#8216;d&#8217; attribute of &lt;path&gt; elements.  It&#8217;s also used for laying out text-paths, and the shapes of SVG Font glyphs.  And it&#8217;s used in animation, both for motion paths and (in the case of Béziers) for timing functions in the &#8216;keysplines&#8217; easing attribute that controls the rate of animation.  So, making it easier to hit specific points for paths could have side benefits for all those uses as well.</p>
</p>
<p>I&#8217;m really interested in feedback from others on the usefulness of this idea.  I&#8217;m not married to the idea of Catmull-Rom curves specifically (<i>Fun fact: Ed Catmull is now the president of the Walt Disney and Pixar animation studios; I believe Rom became an astronaut, was captured by aliens and turned into a cyborg, and is now a Spaceknight</i>), just in the idea of adding this type of point-on-the-path command.  So, if you support the notion of adding this in SVG 2, or have a better idea along the same lines, send an email to the SVG Working Group&#8217;s public list, <a href="mailto:www-svg@w3.org">www-svg@w3.org</a>, to let us know.</p>
<p>The <a href="http://schepers.cc/svg/path/catmullrom2bezier.js">javascript library</a> I wrote to demonstrate this is, of course, open source, available under the MIT or GPL licenses.  Feel free to play around with it, and improve it to make a better proposal.  You&#8217;re welcome to use it for other purposes, but I intended it just as a quick-and-dirty prototype to solicit feedback about extending SVG, so the code isn&#8217;t that great.</p>
<hr />
<h4 id="normals">Update 1:</h4>
<p><a href="http://xn--dahlstrm-t4a.net/">Erik Dahlström</a>, Chief Vectorizer at Opera and chair of the SVG WG, posted a <a href="http://schepers.cc/?p=243#comment-166">visual reply</a>, which WordPress filtered, but I&#8217;ve now <a href="http://schepers.cc/?p=243#comment-166">restored this inline</a>.  Nothing to see here, move along.</p>
<hr />
<h4 id="spiro">Update 2:</h4>
<p>Here is my Catmull-Rom code trying to achieve the nice curves of <a href="http://www.levien.com/spiro/">Spiro</a>, as suggested by Dave Crossland in <a href="http://schepers.cc/?p=243#comment-170">his comment</a>:<br />
<object type="image/svg+xml" width="485" height="277" data="http://schepers.cc/svg/path/spiro.svg">Please use a modern browser.</object></p>
<hr />
<h4 id="spiro-a">Update 3:</h4>
<p>Looking at Spiro curves a bit closer (just the image, not the code), it seems that there are actually different node types illustrated, not simply an undifferentiated set of coordinate points as in my interpretation of the Catmull-Rom algorithm.  This means that, from an syntax standpoint, those segments would need additional parameters in addition to the coordinate points on the curve, which somewhat undercuts the simplicity.</p>
<p>Given that SVG already has a &#8216;Lineto&#8217; command, I set out to see how closely I could match <a href="http://www.levien.com/spiro/spiro.png">the letter &#8220;a&#8221; in Raph Levien&#8217;s example</a>, using just my Catmull-Rom and Lineto segments, and with minimal effort:</p>
<p><object type="image/svg+xml" width="485" height="465" data="http://schepers.cc/svg/path/spiro-a.svg">Please use a modern browser.</object></p>
<p>Mouse over the raster image to hide the SVG path.  There are definite artifacts, and I am running into some known limitations of my script implementation in how it interpolates the last coordinate segment, but with not much effort, I was able to get pretty close.</p>
<p>This is not to belittle Spiro at all&#8230; Spiro generates <a href="http://fontly.com/sandbox/spiro.html">painfully elegant curves</a>.  It&#8217;s just to compare apples to apples.</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/getting-to-the-point/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Slow News Day</title>
		<link>http://schepers.cc/slow-news-day</link>
		<comments>http://schepers.cc/slow-news-day#comments</comments>
		<pubDate>Tue, 13 Jul 2010 04:38:55 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Search Engines]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=273</guid>
		<description><![CDATA[<br/>My last post was slashdotted. Not servers-melting slashdotted, but unusual-volume-of-comments slashdotted. I posted it late on a Saturday night, so I guess they had no other news fit to print. It was interesting, and a little bit exciting, to be linked from Slashdot. I have no great insights, but a few observations. I thought something [...]]]></description>
			<content:encoded><![CDATA[<br/><p>My <a href="http://schepers.cc/?p=160">last post</a> was <a href="http://search.slashdot.org/story/10/07/10/2141224/SVG-and-the-Indexing-of-Web-Standards">slashdotted</a>. Not servers-melting slashdotted, but unusual-volume-of-comments slashdotted.  I posted it late on a Saturday night, so I guess they had no other news fit to print.</p>
<p>It was interesting, and a little bit exciting, to be linked from Slashdot.  I have no great insights, but a few observations.<br />
<span id="more-273"></span></p>
<ol>
<li>I thought something was odd when I started getting comments from outside the SVG community, which is the only place I can imagine I have any sort of fame or notoriety.  So I followed a <a href="http://twitter.com/#search?q=SVG%20and%20The%20Indexing%20of%20Web%20Standards">Twitter reference</a> on SVG back to its source.  I&#8217;m sure this is the most I&#8217;ve been referenced in Twitter, too&#8230; though most weren&#8217;t retweets of my own pointer to my blog.  Interesting to see how Twitter and Slashdot interact, and how aggregators like Slashdot are the primary focus of links from Twitter, moreso than the original source.  Some aggregators retweeted the story several times at intervals, I reckon to get more attention from those who blinked the first few times (srsly, smashingmag? Retweeting it 11 times? Okay).</li>
<li>I was surprised that &#8220;indexing SVG&#8221; was the topic that got the attention of the Slashdot community.  I didn&#8217;t expect anyone to be particularly interested in my little study, outside the rarefied Web Standards community, which is who it was written for.  My guess is that it may have seemed a bit controversial, because someone from the W3C looked with a critical eye at Google (a Giant Corporation, and one of our members).  Everyone loves scandal!  I&#8217;ve learned my lesson&#8230; now all my posts will attack some company.  (If you are interested in some press-grabbing attention, my fee for insulting your company on this blog is very reasonable.)</li>
<li>In true Slashdot fashion, it&#8217;s pretty obvious that many of those who bothered to comment clearly didn&#8217;t read my blog post, or didn&#8217;t get my central point; it&#8217;s not surprising, since that wasn&#8217;t really the audience I expected (and I do ramble a bit).  Some folks tried to turn it into an SVG vs. Flash debate, which entirely missed the point.  That said, there were some thoughtful comments that I replied to on Slashdot and on my blog.</li>
<li>I spent much more time following up on my post than I expected.  I&#8217;m glad it wasn&#8217;t a weekday, where it may have gotten even more attention.  Still, I hope it did give some people food for thought.</li>
<li>Either I&#8217;m too prolix (guilty!), or Twitter has reduced the average attention span to&#8230; ooh, shiny!  Adobe&#8217;s JD took a friendly dig at me <a href="http://schepers.cc/?p=160#comment-160">in his comment</a>, and <a href="http://twitter.com/jdowdell/status/18298074498">maybe</a> on <a href="http://twitter.com/jdowdell/status/18377241765">Twitter</a>, too.  My post was a very long one, simply because I had no leisure to make it shorter.  I prefer to thoroughly explore an idea and provide context and evidence when I bother writing at all.  I suppose that is old fashioned.  I&#8217;ll work on it.</li>
</ol>
<p>Sorry, I have to go now&#8230; my fifteen minutes are up.</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/slow-news-day/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Formata Non Grata</title>
		<link>http://schepers.cc/formata-non-grata</link>
		<comments>http://schepers.cc/formata-non-grata#comments</comments>
		<pubDate>Sat, 10 Jul 2010 15:39:19 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[Metadata]]></category>
		<category><![CDATA[Microformats]]></category>
		<category><![CDATA[Search Engines]]></category>
		<category><![CDATA[Semantics]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=160</guid>
		<description><![CDATA[<br/>Recently, a browser implementer asked me for examples of SVG. He was having trouble finding good examples of SVG in use, particularly as parts of an HTML document. This question has come up again and again, actually, and it always vexes me. I&#8217;ve been active in the SVG community for close to a decade, and [...]]]></description>
			<content:encoded><![CDATA[<br/><p>Recently, a browser implementer asked me for examples of SVG.  He was having trouble finding good examples of SVG in use, particularly as parts of an HTML document.  This question has come up again and again, actually, and it always vexes me.  I&#8217;ve been active in the SVG community for close to a decade, and I&#8217;ve seen thousands of amazing SVG files (and many more of mediocre to average quality), but somehow they seem to have disappeared or bitrotted over the years.  Some of those files only worked with the slightly-unstandard Adobe SVG Viewer, or didn&#8217;t quite work with Firefox&#8217;s incomplete support, I know, but surely not all of them.  Where is all the great SVG content I remember, the games and GUIs and design and development?  Where are all those files to be found?</p>
<p>I hear some browser implementers say that people just don&#8217;t use SVG.  Intuitively, this feels false to me, based on my own experience.  But could it be true?</p>
<p><span id="more-160"></span></p>
<p>The statistical insignificance of SVG is often cited by some people in the WHATWG, based on a large dataset of Web content indexed by Google.  In the WHATWG, where HTML5 started, great stock is placed on statistics, particularly <a href="http://code.google.com/webstats/index.html">those conducted</a> by the editor, Ian Hickson, a Google employee.</p>
<p style="text-align: center;"><a title="Based on a study of one BILLION documents!" href="http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2006-June/006726.html"><img class="aligncenter size-full wp-image-167" title="DrHTML5" src="http://schepers.cc/wp-content/uploads/2009/07/DrHTML5.png" alt="DrHTML5" /></a></p>
<p>There&#8217;s no question about it: HTML is the king of the Web.  I did some rough calculations, similar to claims I&#8217;ve heard before, by counting the number of returns for HTML files versus SVG files.  A <a title="SVG filetype search on Google" href="http://www.google.com/search?q=filetype%3Asvg">search for the filetype &#8220;.svg&#8221;</a> yields around 18,165,500 hits on Google.  (Note that this doesn&#8217;t count the false hits on the word &#8220;SVG&#8221; from St. Vincent and the Grenadines, Stan Van Gundy, the Sexy Valley Girls, or any of the numerous other bizarrities that the acronym stands for.)  SVG content makes up just 0.106% of all Web content, by my rough estimation.  Flash is almost 5 times as common as SVG.  That&#8217;s pretty grim for SVG.</p>
<p>But wait, let&#8217;s put that into perspective.  Flash is about 4.8 times more common than SVG.  HTML is roughly 838 times more common than SVG.  838 times.  Flash content comprises approximately 0.52% of all Web content, and HTML is roughly 189 times more common than  Flash.  So, Flash is clearly much more popular than SVG (even when you consider that some large percentage of Flash content is actually just encapsulated video content, these days).  But that doesn&#8217;t mean that nobody&#8217;s using SVG.  Nearly 20 million documents is pretty impressive, actually, especially given the fact that SVG has been hindered by a lack of native support in browsers for most of its existence (and more recently, even poor support by the Adobe plugin for IE), and a lack of common authoring tools for dynamic content (Inkscape is an excellent vector editor, but it doesn&#8217;t yet do animation or interactivity).</p>
<p>Eighteen million documents.  That&#8217;s a lot of files.  So, given that, why  is it so hard to find SVG content?</p>
<p>Maybe because the most popular search engine in the world, Google, doesn&#8217;t index SVG.</p>
<h3>Indexing SVG</h3>
<p>A long time ago, back in 2002, I made a <a title="Discussion of SVG text search and translation" href="http://schepers.cc/svgaccessibility.html">page</a> discussing my experiments with text search and translation.  The results were not very encouraging, but I reckoned it was just a matter of time.  I optimistically wrote to Google to encourage them to enable text search and translation of SVG files.</p>
<p>8 years down the line, things don&#8217;t seem to have changed much on that front.</p>
<p>To be fair, many SVG files don&#8217;t contain any text at all, not even a &lt;title&gt; element, so indexing them might not yield much.  But many other files do have at least a title, and SVG infographics and webapps usually have at least labels that might be meaningful as search terms.  Often SVG files are even text-heavy.</p>
<p>It&#8217;s not that Google doesn&#8217;t take note of the files&#8230; obviously, you can search for the filetype, or in the worst case, the specific file URL, and normally get back positive results.  But Google doesn&#8217;t seem to search the contents of the SVG files and present them in the relevant result set.  To test this, I tried searching for a few files that I knew to have indexable text content.</p>
<p>As an example, I looked for some SVG files on my little (long out-of-date) SVG promotion site, SVG-Whiz.com.  First, I searched for a file I knew to have a cogent block of text, my explanation of the distinctions between &#8216;display&#8217;, &#8216;visibility&#8217;, and &#8216;opacity&#8217;, called <a href="http://svg-whiz.com/svg/HideShow.svg">HideShow.svg</a>:  </p>
<p><object type="image/svg+xml" width="360" height="400" data="http://svg-whiz.com/svg/HideShow.svg">Please use a modern browser.</object></p>
<p>This file has been hosted on my site since 2003, I&#8217;ve gotten several positive comments about it, and a <a href="http://www.google.com/search?q=http%3A%2F%2Fsvg-whiz.com%2Fsvg%2FHideShow.svg">direct search for that file URL</a> turns up a few hits linking to it, so it&#8217;s seems like a reasonable candidate for indexing.  But what are the results of my in-site <a href="http://www.google.com/search?q=site%3Asvg-whiz.com%20opacity">Google search for the word &#8216;opacity&#8217;</a>?  Okay, that just turned up the explanation page linking to the SVG file in question.  Fair enough, maybe Google doesn&#8217;t treat SVG as a &#8220;document&#8221; file, only as an image.  So, how about an <a href="http://www.google.com/images?q=site%3Asvg-whiz.com%20opacity">image search for the same term</a>?  Nada.  So, maybe Google doesn&#8217;t consider SVG to be either a &#8220;document&#8221; nor an &#8220;image&#8221;&#8230; let&#8217;s <a href="http://www.google.com/search?q=site%3Asvg-whiz.com+opacity+filetype%3Asvg">search for the word &#8216;opacity&#8217; in the site &#8216;svg-whiz.com&#8217; with the filetype &#8216;svg&#8217;</a>.  As specific as that is, at the time of writing, I got not a single resulting hit.</p>
<p>Google can find the files&#8230; why doesn&#8217;t it do something with them?</p>
<h3>Comparison of File Extension Frequency</h3>
<p>So, what criteria does Google use to decide which file types it is going to index?</p>
<p>The <a title="Google's Filetype FAQ" href="http://www.google.com/help/faq_filetypes.html">Google FAQ on search filetypes</a> lists 23 file extensions that it indexes, and says:</p>
<blockquote><p><span style="line-height: 28.5px;">There are 13 main file types searched by Google in              addition to standard web formatted documents in HTML. The most common              formats are PDF, PostScript, Microsoft Office formats [...] </span><span style="line-height: 28.5px;">Google is also scouring the Web for additional file            types that are very rare. You may see them pop up in your results from            time to time.</span><span style="line-height: 28.5px;"> [...] </span><span style="line-height: 28.5px;">PDF formatted files are the most popular after HTML files.            PostScript and Microsoft Word files are also fairly common. The other            file types are relatively uncommon by comparison. </span></p></blockquote>
<p>So, I took the liberty of conducting my own survey of the relative frequency of various filetypes, as collected by Google itself, by using the <span style="line-height: 28.5px;">&#8220;filetype:extension&#8221;</span> query term. I&#8217;m not totally convinced this is at all an accurate means to collect and analyze the data, but it&#8217;s what I had at hand.</p>
<p>I put together a table that compares the different file types that Google explicitly mentions.  (I thought about representing the data as an SVG barchart, but I was afraid it wouldn&#8217;t be indexed&#8230; just kidding, the sheer volume of HTML files would make every other bar just a blip.)</p>
<p>I also threw in some other filetypes of interest, including some with functional similarity to SVG, such as Illustrator, PhotoShop, and Silverlight.  I expected non-Web filetypes such as Illustrator&#8217;s &#8220;*.ai&#8221; to be disproportionately underrepresentated in the results compared to their actual usage, and that was indeed borne out; it&#8217;s hard to know what percentage of SVG files are intended for and presented on the Web (I&#8217;ve spoken to many Inkscape users who only use SVG for print or local hard-drive, which surprised me), but I would guess that it is far, far more heavily tilted toward Web usage&#8230; but I still thought it would be interesting to compare.</p>
<p>What did surprise me was how &#8220;*.svg&#8221; compared to such ubiquitous file extensions as &#8220;*.txt&#8221;, and those for Excel, PowerPoint, and the venerable PostScript.  To be frank, the results make me question my methodology, or perhaps the accuracy of Google&#8217;s reporting.</p>
<table style="text-align:right; background-color:#A2953A; border:none; border-collapse:collapse; border-spacing:0px;" border="0" cellpadding="2px">
<tbody>
<tr style="background-color:#414602; color:#FFFFE3; border-collapse:separate;">
<th style="text-align:center;">File Type</th>
<th style="text-align:center; border-left:#FFFFE3 2px solid;">File Extension</th>
<th style="text-align:center; border-left:#FFFFE3 2px solid;">Number of Results</th>
<th style="text-align:center; border-left:#FFFFE3 2px solid;">Introduction</th>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;" rowspan="5">HyperText Markup Language</th>
<td style="color:#7A7822;">total</td>
<td><strong>16,574,700,000</strong></td>
<td>1991</td>
</tr>
<tr>
<td>html</td>
<td>8,180,000,000</td>
<td></td>
</tr>
<tr>
<td>php</td>
<td>7,010,000,000</td>
<td></td>
</tr>
<tr>
<td>asp</td>
<td>1,370,000,000</td>
<td></td>
</tr>
<tr>
<td>xhtml</td>
<td>14,700,000</td>
<td></td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Adobe Portable Document Format</th>
<td>pdf</td>
<td><strong>281,000,000</strong></td>
<td>1993</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;" rowspan="3">Shockwave Flash</th>
<td style="color:#7A7822;">total</td>
<td><strong>87,923,300</strong></td>
<td>1996</td>
</tr>
<tr>
<td>swf</td>
<td>87,900,000</td>
<td></td>
</tr>
<tr>
<td>fla</td>
<td>23,300</td>
<td></td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Microsoft Word</th>
<td>doc</td>
<td><strong>58,500,000</strong></td>
<td>1983</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;" rowspan="3">Text</th>
<td style="color:#7A7822;">total</td>
<td><strong>32,757,000</strong></td>
<td>1982</td>
</tr>
<tr>
<td>txt</td>
<td>32,600,000</td>
<td></td>
</tr>
<tr>
<td>ans</td>
<td>157,000</td>
<td></td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;" rowspan="3">Scalable Vector Graphics</th>
<td style="color:#7A7822;">total</td>
<td><strong>18,165,500</strong></td>
<td>1999</td>
</tr>
<tr>
<td>svg</td>
<td>18,100,000</td>
<td></td>
</tr>
<tr>
<td>svgz</td>
<td>65,500</td>
<td></td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Microsoft Excel</th>
<td>xls</td>
<td><strong>12,500,000</strong></td>
<td>1982</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Microsoft PowerPoint</th>
<td>ppt</td>
<td><strong>7,790,000</strong></td>
<td>1984</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Rich Text Format</th>
<td>rtf</td>
<td><strong>5,130,000</strong></td>
<td>1987</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Adobe PostScript</th>
<td>ps</td>
<td><strong>2,440,000</strong></td>
<td>1982</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Adobe Illustrator</th>
<td>ai</td>
<td><strong>135,000</strong></td>
<td>1986</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">OpenOffice.org</th>
<td>odt</td>
<td><strong>135,000</strong></td>
<td>1999</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">MacWrite</th>
<td>mw</td>
<td><strong>35,600</strong></td>
<td>1984</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Adobe PhotoShop</th>
<td>psd</td>
<td><strong>21,800</strong></td>
<td>1988</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;" rowspan="3">Silverlight</th>
<td style="color:#7A7822;">total</td>
<td><strong>8,493</strong></td>
<td>2003</td>
</tr>
<tr>
<td>xaml</td>
<td>8,180</td>
<td></td>
</tr>
<tr>
<td>xap</td>
<td>313</td>
<td></td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">CorelDRAW</th>
<td>cdr</td>
<td><strong>8,310</strong></td>
<td>1989</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;" rowspan="4">Microsoft Works</th>
<td style="color:#7A7822;">total</td>
<td><strong>2,266</strong></td>
<td>1987</td>
</tr>
<tr>
<td>wks</td>
<td>1,190</td>
<td></td>
</tr>
<tr>
<td>wps</td>
<td>801</td>
<td></td>
</tr>
<tr>
<td>wdb</td>
<td>275</td>
<td></td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;" rowspan="9">Lotus 1-2-3</th>
<td style="color:#7A7822;">total</td>
<td><strong>1,981</strong></td>
<td>1983</td>
</tr>
<tr>
<td>wks</td>
<td>1,190</td>
<td></td>
</tr>
<tr>
<td>wk1</td>
<td>571</td>
<td></td>
</tr>
<tr>
<td>wki</td>
<td>89</td>
<td></td>
</tr>
<tr>
<td>wk3</td>
<td>47</td>
<td></td>
</tr>
<tr>
<td>wk4</td>
<td>41</td>
<td></td>
</tr>
<tr>
<td>wku</td>
<td>33</td>
<td></td>
</tr>
<tr>
<td>wk5</td>
<td>6</td>
<td></td>
</tr>
<tr>
<td>wk2</td>
<td>4</td>
<td></td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Microsoft Write</th>
<td>wri</td>
<td><strong>1,200</strong></td>
<td>1985</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">Lotus WordPro</th>
<td>lwp</td>
<td><strong>148</strong></td>
<td>1995</td>
</tr>
<tr style="background-color:#7A7822; border-top:#FFFFE3 5px solid;">
<th style="text-align:left; vertical-align:top;">All Web Content</th>
<td></td>
<td><strong>17,081,255,598</strong></td>
<td>1989</td>
</tr>
</tbody>
</table>
<p><strong>Caveat:</strong> I originally compiled this information a few months ago, and when rechecking it for accuracy, I got a surprising result.  Normally, the <a title="Google search for SVG files" href="http://www.google.com/search?q=filetype:svg">Google search for filetype:svg</a> returned 18,100,000 hits, but late one night, it returned only 2,000,000 hits; now, my most recent check showed around 4,300,000 hits.  Jumping around in the results for an explanation, I noticed that there is a lot of duplication of Wikipedia content, and since Wikipedia uses SVG, that might account for some discrepancy.  One possibility is that  the lower figure represents 2 million unique documents, which are duplicated in a lot of places; the same should be said of any HTML content, and probably to a lesser extent of Flash content.  I don&#8217;t know if this is the right conclusion, but it would be an interesting data point.  Even with the much more modest figure of 2 million documents, I still think that represents an impressive body of work, particularly in light of the fact that SVG documents are normally authored individually, not through forum or blog software, or exporting or reformatting of email and text content as HTML.</p>
<h3>Conclusions</h3>
<p>I don&#8217;t think this is some grand conspiracy by Google to suppress SVG.  Simple neglect is much more plausible.  They don&#8217;t seem to see the value in indexing SVG.  But the end result is the same: SVG seems to be statistically underrepresented in terms of access through Google searches, and thus, it is harder to find SVG content. </p>
<p>Relying on the results of a search engine that doesn&#8217;t index SVG, to draw conclusions about how many people are using SVG is not statistically sound.   This is a bit like conducting a phone survey of English speakers in China, and concluding that nobody speaks with a Southern US accent.  I reckon y&#8217;all might could see the problem with that methodology if you lived here in North Carolina.</p>
<p>SVG is at least as plentiful on the Web, by Google&#8217;s own reckoning, as most other file types that Google does index. Search engines, Google included, should index SVG files. They should read the text inside the file, and if the file is referenced in an HTML page, they should associate those keywords with the SVG file, just as they do with raster images. SVG files should display in image searches, as well. Here&#8217;s a list of the kind of useful content that can be gleaned from most SVGs:</p>
<ul>
<li><strong>file name: </strong>while pretty primative, many files give some clue as to their contents in their name</li>
<li><strong>text elements</strong><strong>: </strong>there are several elements in SVG that contain text to be rendered to the screen, including &lt;text&gt;, &lt;tspan&gt;, &lt;textPath&gt;, and &lt;textArea&gt;, and the content should be indexed as if it were text in any other format</li>
<li><strong>embedded HTML: </strong>HTML (and other markup) can be embedded inline in SVG, and search engines should look for that and index it as they would standalone HTML content</li>
<li><strong>links: </strong>Google, and probably most other modern search engines, give weight to files that are linked from other files, and files referenced from SVG content should benefit in the same way; the @xlink:title and @rel can help define the relationship between the files</li>
<li><strong>descriptive elements: </strong>like HTML, SVG has a &lt;title&gt; element that doesn&#8217;t display, but adds to the information about its parent file or element, and SVG also has a &lt;desc&gt; element for a longer description</li>
<li><strong>metadata: </strong>SVG can contain RDF, RDFa, microformats, and ARIA markup, which search engines are starting to pick up on these days; these metadata can reveala lot about a file, from its license information to structured content (like calendars or dates or contact info) to intent (such as ARIA roles, which will soon be expanded to include things like different chart types)</li>
</ul>
<p>And the SVG Working Group would be happy to work with any search engine developers to make improvements to SVG 2 to help make indexing SVG content easier or more fruitful.</p>
<p>I&#8217;m not trying to pick on Google here (though I do note that a <a href="http://www.bing.com/search?q=svg+opacity+svg-whiz.com">Bing search for &#8216;svg opacity svg-whiz.com&#8217;</a> listed the SVG file as the first hit), I&#8217;m just noting a discrepancy and an opportunity for improving the experience that people have on the Web with regards to SVG.  At the very least, SVG should be recognized by Google as a legitimate file type, rather than a formata non grata.</p>
<h4>Update</h4>
<p>Rob Russell delivered great news to us in his SVG Open keynote.  As of August 31, 2010, <a href="http://googlewebmastercentral.blogspot.com/2010/08/google-now-indexes-svg.html?utm_source=feedburner&#038;utm_medium=twitter&#038;utm_campaign=Feed%3A+blogspot%2FamDG+%28Official+Google+Webmaster+Central+Blog%29">Google now indexes SVG</a> and delivers it in some search results.   Kudos to Google for stepping up!  I&#8217;m very pleased&#8230; solid results only 6 weeks later.  (I guess I should thank Slashdot, too.)</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/formata-non-grata/feed</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Web Audio Goes to Eleven</title>
		<link>http://schepers.cc/web-audio-goes-to-eleven</link>
		<comments>http://schepers.cc/web-audio-goes-to-eleven#comments</comments>
		<pubDate>Fri, 14 May 2010 18:58:42 +0000</pubDate>
		<dc:creator>Schepers</dc:creator>
				<category><![CDATA[Audio]]></category>
		<category><![CDATA[CDF]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://schepers.cc/?p=212</guid>
		<description><![CDATA[<br/>I&#8217;m really excited about W3C&#8217;s new public Audio Incubator Group, just launched today, and open for collaborators, innovators, and instigators. Go take a look for yourself, and see if you can contribute. To celebrate the occasion, here&#8217;s a simple example of an experimental audio inteface, in the world&#8217;s first (and worst) audio synthesizer in SVG [...]]]></description>
			<content:encoded><![CDATA[<br/><p>I&#8217;m really excited about W3C&#8217;s new public <a href="http://www.w3.org/2005/Incubator/audio/">Audio Incubator Group</a>, just launched today, and open for collaborators, innovators, and instigators.  Go take a look for yourself, and see if you can contribute.</p>
<p>To celebrate the occasion, here&#8217;s a simple example of an experimental audio inteface, in the world&#8217;s first (and worst) audio synthesizer in SVG (you&#8217;ll need a <a href="https://wiki.mozilla.org/Audio_Data_API#Obtaining_Code_and_Builds">special Minefield build</a> to use it).  Just click on the keyboard&#8230; it&#8217;s pretty rough still, but it shows some of the potential:</p>
<p><iframe src="http://schepers.cc/svg/keyboard.svg" class="aligncenter" scrolling="no" frameborder="0" width="478" height="190">Please use FF1.5+, Opera 9+, WebKit/Safari3.0+, or IE9+</iframe><br />
<em>(<a href="http://schepers.cc/svg/keyboard.svg">standalone SVG file</a>)</em></p>
<p>For some background, read on after this break&#8230;<br />
<span id="more-212"></span></p>
<h3>Background</h3>
<p>Years ago, I was one of several SVG developers interested in doing for audio what SVG did for graphics, and we <a href="http://tech.groups.yahoo.com/group/svg-developers/message/28154">talked</a> a bit about a format we called  <a href="http://uk.groups.yahoo.com/group/SynthML/">SynthML</a>.  The old Adobe SVG viewer included an audio element for MP3 playback, and I found it really useful for adding subtle sounds for button mouseovers, clicks, and other UI effects, so the idea of programmatic control of music on the Web had intrigued me for some time (anyone remember Thomas Dolby&#8217;s Beatnik?), for enhancing user interfaces, adding ambient background music, and providing full fledged music webapps. The SynthML effort fizzled out, and while there are some interesting music markup languages (most notably <a href="http://www.musicxml.org/xml.html">MusicXML</a>, which is more like the MathML of music), there hasn&#8217;t been much traction beyond simple recording playback.</p>
<p>That&#8217;s why I was so psyched when I saw what <a href="http://alistairgmacdonald.com/">Alistair MacDonald</a>, <a href="http://vocamus.net/dave/?cat=25">David Humphrey</a>, <a href="http://twitter.com/corban">Corban Brook</a>, and a few others were up to while attending a  Processing.js community event at <a href="http://loft.bocoup.com/">Bocoup</a>.  David hacked up a <a href="https://wiki.mozilla.org/Audio_Data_API#Obtaining_Code_and_Builds">special build</a> of Gecko to add script access to the raw audio stream of the HTML5 &lt;audio&gt; element, and Al, Corban, and friends were building <a href="http://weblog.bocoup.com/web-audio-all-aboard">cool demos</a> on top of it.</p>
<p>I immediately knew I wanted to see this as a part of the native functionality of the Web platform, across browsers.  In some ways, it&#8217;s the last major missing piece from the open Web&#8230; the ability to view source and hack sound, the last commonly digitizable sensorium. I also knew that I wanted the use cases and requirements to come from the larger community, the musicians and UI designers and developers who will ultimately be the ones using this functionality to sound out the depths of what&#8217;s possible on the Web (okay, I&#8217;m corny).  So, I talked with Corban, David, and Al, and we agreed that a public discussion forum would be the best way to connect with this community, to get them talking and experimenting and building and sharing.</p>
<p>Chris Blizzard of Mozilla was there too, co-sponsoring the event, and he was extremely supportive of getting this work started at W3C.  I wrote up a <a href="http://www.w3.org/2010/04/audio/audio-incubator-charter.html">charter</a> for a public incubator group, and started knocking on doors of the browser vendors, our other members, and the wider community who might be stakeholders, to drum up interest.  Pretty quickly, I got support from folks at the University of Rio (PUC-Rio), BBC, and Google; currently, a W3C Incubator Group takes a minimum of three W3C members to kick it off, though once it&#8217;s started, anyone can join.  With that nicety taken care of, W3C management approved the charter, and the new W3C Audio Incubator Group (or Audio XG) was launched today!</p>
<h3>Joining the Audio XG</h3>
<p>I invite anyone interested in audio, music, speech synthesis, games, or other related topics to get involved, <a href="http://www.w3.org/2005/Incubator/audio/wiki/Join_the_Audio_Incubator">join the Audio XG</a>, and start shaping the future of Web audio on the mailing list, and chat on the <a href="irc://irc.w3.org:6665#audio">#audio</a> IRC channel (irc.w3.org, port 6665, channel #audio).  Incubator participation is free and open to anyone who wants to help out.</p>
<h3>About the SVG Synth</h3>
<p>My SVG synthesizer is a true product of the Web.  I know next to nothing about music&#8230; I can&#8217;t play an instrument, can&#8217;t read music, don&#8217;t know music theory&#8230; I love music, but I&#8217;m a consumer, not a creator.  I&#8217;d love to change that, when I have time, but I&#8217;ll settle for now for enabling others.</p>
<p>So, when I decided to make something with the audio API, naturally my first thought was to do something I didn&#8217;t know how to do, for which I&#8217;m totally unqualified: create a synthesizer in SVG.</p>
<p>I started with the HTML example from the documentation for the <a href="https://wiki.mozilla.org/Audio_Data_API">experimental audio API</a> on the Mozilla wiki, and converted it to SVG (with a few missteps along the way).  As it turns out, the HTML5 audio interface is exposed in Gecko (the Firefox engine) even when there is no HTML content.  This was good news for me.  It made it even easier to programmatically create sound with it.  I suspect that this is something that lies outside any current specification, but it should be codified somewhere.</p>
<p>Next, I looked for a piano keyboard in SVG; I found a few on <a href="http://upload.wikimedia.org/wikipedia/commons/c/c0/Klaviatur-3-en.svg">Wikimedia Commons</a>, but they were not quite what I wanted (and in typical Inkscape fashion, were a little bloated), so ultimately I just made my own, which was trivial to do.</p>
<p>Next, I had to understand which notes each key should sound.  So I read a <a href="http://www.musictheory.halifax.ns.ca/3keyboard.html">lesson on keyboard basics</a>, which sufficed for my purpose.</p>
<p>Then I had to figure out what the frequency of each note is in Hertz (Hz), which is what the audio API understands.  It was no surprise that someone had published just such a <a href="http://www.phy.mtu.edu/~suits/notefreqs.html">table corresponding notes to frequency</a>, with the companion <a href="http://www.phy.mtu.edu/~suits/NoteFreqCalcs.html">equations for deriving them</a>.  </p>
<p>To put the pieces together, I took the simplest possible approach: I handcoded the keyboard (I could have instantiated it with script, because it&#8217;s very deterministic, but I favor declarative markup that can be tweaked in an authoring tool); I assigned an id to each key based on the note (C4, Af0-Bb0, etc., where &#8220;f&#8221;==&#8221;flat&#8221; and &#8220;b&#8221;==&#8221;sharp&#8221;, and the number denotes the octave); I then created an associative array with the note-id as the index and the frequency as the value, so I could look it up with the key&#8217;s id; then it was just a matter of sending the frequency to the script from the HTML example, and adding a duration timer.</p>
<p>Finally, just as a decorative flourish, I found a partial musical staff with a treble clef and beamed eighth-note, <a href="http://upload.wikimedia.org/wikipedia/commons/a/ac/Musical_notes.svg">in SVG, of course</a>, and tweaked it to my liking.</p>
<p>My tools? A Web browser with the audio API enabled (libre source), a search engine, and a text editor.</p>
<p>Voilà!  From knowing almost nothing about formal music (I&#8217;d never even heard the term &#8220;middle C&#8221; before), I created a simple synthesizer, and learned a bit about music along the way.  That&#8217;s the power of the open Web.  That&#8217;s why I&#8217;m so pumped up about this new focus on audio.  This one goes to 11.</p>
]]></content:encoded>
			<wfw:commentRss>http://schepers.cc/web-audio-goes-to-eleven/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

