<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Paul Irish]]></title>
  <link href="http://paulirish.com/atom.xml" rel="self"/>
  <link href="http://paulirish.com/"/>
  <updated>2013-05-12T23:55:38-07:00</updated>
  <id>http://paulirish.com/</id>
  <author>
    <name><![CDATA[Paul Irish]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[WebKit for Developers]]></title>
    <link href="http://paulirish.com/2013/webkit-for-developers/"/>
    <updated>2013-02-28T02:53:00-08:00</updated>
    <id>http://paulirish.com/2013/webkit-for-developers</id>
    <content type="html"><![CDATA[<p><img src="http://paulirish.com/assets/webkit-box.png" alt="WebKit box logo" style="border: 0;
margin: 0;
box-shadow: none;
float: right;
vertical-align: top;" >
For many of us developers, <strong>WebKit is a black box</strong>. We throw HTML, CSS, JS and a bunch of assets at it, and WebKit, somehow.. magically, gives us a webpage that looks and works well.  But in fact, <a href="http://www.youtube.com/watch?v=kiPe7DPmEgE">as my colleague Ilya Grigorik puts it</a>&#8230;</p>

<blockquote><p>WebKit <strong>isn&#8217;t</strong> a black box. It&#8217;s a white box.  And not just that, but an <strong>open</strong>, white box.</p></blockquote>

<p>So let&#8217;s take a moment to understand some things:</p>

<center>
     What is WebKit?
<br> What isn&#8217;t WebKit?
<br> How is WebKit used by WebKit-based browsers?
<br> Why are all WebKits not the same?
</center>




<!--

There are a few things all called, WebKit, so let's enumerate them first..

1. **WebKit the project**, where a bunch of hugely talented developers build one
   of the leading implementations of the web platform
2. **WebKit the embedding API**, available for ports to embed the rendering
   engine in their application
3. **WebCore**, which is what people think of when they say WebKit. (more on
   that later…)
4. **WebKit the repository,** where code for the WebKit API, WebCore,
   JavaScriptCore and more live.
5. and **WebKit, the perception**

Below I'll hop between a few of these definitions in my use of the word. It'll
work, trust me. :)

-->


<p>Now, especially with the news that <a href="http://my.opera.com/ODIN/blog/300-million-users-and-move-to-webkit">Opera has moved to WebKit</a>, we have a lot of WebKit browsers out there, but its pretty hard to know what they share and where they part ways. Below we&#8217;ll hopefully shine some light on this. As a result you&#8217;ll be able to diagnose browser differences better, report bugs at the right tracker, and understand how to develop against specific browsers more effectively.</p>

<h4>Standard Web Browser Components</h4>

<p>Let&#8217;s lay out a few components of the modern day web browser:</p>

<ul>
<li>Parsing (HTML, XML, CSS, JavaScript)</li>
<li>Layout</li>
<li>Text and graphics rendering</li>
<li>Image decoding</li>
<li>GPU interaction</li>
<li>Network access</li>
<li>Hardware acceleration</li>
</ul>


<p>Which of those are shared in WebKit-based browsers? <strong>Pretty much only the first two.</strong></p>

<p>The others are handled by individual WebKit ports. Let&#8217;s review what that
means&#8230;</p>

<h4 id="webkit-ports-explained">The WebKit Ports</h4>


<p>There are different &#8220;ports&#8221; of WebKit, but allow me to let Ariya Hidayat, WebKit
hacker and eng director at Sencha
<a href="http://ariya.ofilabs.com/2011/06/your-webkit-port-is-special-just-like-every-other-port.html">to explain</a>:</p>

<blockquote><p>What is the popular reference to WebKit is usually Apple&#8217;s own flavor of WebKit which runs on Mac OS X (<a href="http://lists.kde.org/?l=kfm-devel&amp;m=104197092318639&amp;w=2">the first and the original</a> WebKit library). As you can guess, the various interfaces are implemented using different native libraries on Mac OS X, mostly centered around <a href="http://developer.apple.com/corefoundation/">CoreFoundation</a>. For example, if you specify a flat colored button with specific border radius, well WebKit knows where and how to draw that button. However, the final actual responsibility of drawing the button (as pixels on the user&#8217;s monitor) falls into <a href="http://developer.apple.com/library/ios/#documentation/CoreGraphics/Reference/CoreGraphics_Framework/_index.html">CoreGraphics</a>.</p></blockquote>

<p>As mentioned above, using CG is unique to the Mac port. Chrome on Mac uses <a href="http://www.chromium.org/developers/design-documents/graphics-and-skia">Skia</a> here.</p>

<blockquote><p>With time, WebKit was &#8220;ported&#8221; into different platform, both desktop and mobile. Such flavor is often called &#8220;a WebKit port&#8221;. For Safari Windows, Apple themselves also ported WebKit to run on Windows, using the <a href="http://developer.apple.com/opensource/internet/webkit_sptlib_agree.html">Windows version</a> of its (limited implementation of) CoreFoundation library.</p></blockquote>

<p>… though Safari for Windows is <a href="http://www.macworld.com/article/1167904/safari_6_available_for_mountain_lion_and_lion_but_not_windows.html">now dead</a>.</p>

<blockquote><p>Beside that, there were many other &#8220;ports&#8221; as well (see <a href="http://trac.webkit.org/wiki#WebKitPorts">the full list</a>). Google has created and continues to maintain its Chromium port. There is also WebKitGtk which is based on Gtk+. Nokia (through Trolltech, which it acquired) maintains the Qt port of WebKit, popular as its <a href="http://doc.qt.nokia.com/qtwebkit.html">QtWebKit module</a>.</p></blockquote>

<h4 id="webkit-ports">Some of the ports of WebKit</h4>


<ul>
<li><strong>Safari</strong>

<ul>
<li>Safari for OS X and Safari for Windows are two different ports</li>
<li>WebKit nightly is an edge build of the Mac port that&#8217;s used for Safari. More later…</li>
</ul>
</li>
<li><strong>Mobile Safari</strong>

<ul>
<li>Maintained in a private branch, but lately <a href="http://trac.webkit.org/changeset/142163">being</a> <a href="http://trac.webkit.org/changeset/142373">upstreamed</a></li>
<li>Chrome on iOS (using Apple&#8217;s WebView; more on it&#8217;s differences later)</li>
</ul>
</li>
<li><strong>Chrome (Chromium)</strong>

<ul>
<li>Chrome on Android (using the Chromium port directly)</li>
<li>Chromium also powers <a href="http://browser.yandex.ru/">Yandex Browser</a>, <a href="http://se.360.cn/">360 Browser</a>, <a href="http://ie.sogou.com/">Sogou Browser</a>, and soon, Opera.</li>
</ul>
</li>
<li><strong>Android Browser</strong>

<ul>
<li>Used the latest WebKit source at the time</li>
</ul>
</li>
<li><strong><a href="http://trac.webkit.org/wiki#WebKitPorts">Plenty more ports</a></strong>: Amazon Silk, Dolphin, Blackberry, QtWebKit, WebKitGTK+, The EFL port (Tizen), wxWebKit, WebKitWinCE, etc</li>
</ul>


<p>Different ports can have different focuses. The Mac port&#8217;s focus is split
between Browser and OS, and introduces Obj-C and C++ bindings to embed the
renderer into native applications. Chromium&#8217;s focus is purely on the browser.
QtWebKit offers its port for applications to use as a runtime or rendering
engine within its cross-platform GUI application architecture.</p>

<h2 id="whats-shared">What&#8217;s shared in all WebKit browsers</h2>


<p>First, let&#8217;s review the commonalities shared by all WebKit ports.</p>

<p><aside class="aside">You know it&#8217;s funny. I tried writing this a few times. <br>Each time I got corrected by Chrome team members, as you&#8217;ll see…</aside></p>

<ol>
<li>So first, WebKit parses HTML the same way. <em>Well, except Chromium is the only port so far to enable <a href="https://bugs.webkit.org/showdependencytree.cgi?id=106127&amp;hide_resolved=0">threaded HTML parsing</a> support.</em></li>
<li>… Okay, but once parsed, the DOM tree is constructed the same. <em>Well, actually Shadow DOM is <a href="http://goo.gl/dsXQf" title="Code Search for ENABLE(SHADOW_DOM) package:^chromium$ file:^src/third_party/WebKit/LayoutTests/platform/">only turned on</a> for the Chromium port, so DOM construction varies. Same goes for custom elements.</em></li>
<li>… Okay, well WebKit creates a <code>window</code> object and <code>document</code> object for everyone. <em>True, though the properties and constructors it exposes can be conditional on the <a href="https://trac.webkit.org/wiki/FeatureFlags">feature flags</a> enabled.</em></li>
<li>… CSS parsing is the same, though. Slurping up your CSS and turning it into CSSOM&#8217;s pretty standard.  <em>Yeah, though Chrome accepts just the <code>-webkit-</code> prefix whereas Apple and other ports accept legacy prefixes like <code>-khtml-</code> and <code>-apple-</code>.</em></li>
<li>… Layout.. positioning? Those are the bread and butter. Same, right? Come on! <em>Sub-pixel layout and saturated layout arithmetic is part of WebKit but differs from port to port.</em></li>
<li>Super.</li>
</ol>


<p>So, it&#8217;s complicated.</p>

<p>Just like how <a href="http://code.flickr.net/2009/12/02/flipping-out/">Flickr</a> and <a href="https://github.com/blog/677-how-we-deploy-new-features">Github</a> implement features behind flags, WebKit does the same. This allows ports to enable/disable all sorts of functionality with <a href="https://trac.webkit.org/wiki/FeatureFlags">WebKit&#8217;s compile-time Feature Flags</a>. Features can also be exposed as run-time flags either through <a href="http://peter.sh/experiments/chromium-command-line-switches/">command line switches (Chromium&#8217;s here) </a> or configuration like <a href="http://blogs.adobe.com/cantrell/archives/2012/07/all-about-chrome-flags.html">about:flags</a>.</p>

<p>All right, well let&#8217;s try again to codify what&#8217;s the same in WebKit land&#8230;</p>

<h4 id="webkit-common">What&#8217;s common to every WebKit port</h4>


<ul>
<li>The DOM, <code>window</code>, <code>document</code>

<ul>
<li>more or less</li>
</ul>
</li>
<li>The CSSOM</li>
<li>CSS parsing, property/value handling

<ul>
<li>sans vendor prefix handling</li>
</ul>
</li>
<li>HTML parsing and DOM construction

<ul>
<li>same if we suspended belief in Web Components</li>
</ul>
</li>
<li>All layout and positioning

<ul>
<li>Flexbox, Floats, block formatting contexts… all shared</li>
</ul>
</li>
<li>The UI and instrumentation for the Chrome DevTools aka WebKit Inspector.

<ul>
<li>Though since last April, Safari uses it&#8217;s own, non-WebKit, closed-source UI for Safari Inspector</li>
</ul>
</li>
<li>Features like contenteditable, pushState, File API, most SVG, CSS Transform math, Web Audio API, localStorage

<ul>
<li>Though backends vary. Each port may use a different storage layer for localStorage and may use different audio APIs for Web Audio API.</li>
</ul>
</li>
<li><a href="http://trac.webkit.org/browser/trunk/Source/WebCore">Plenty of other features &amp; functionality</a></li>
</ul>


<p>It gets a little murky in those areas. Let&#8217;s try some differences that are much less murky.</p>

<h4>Now, what&#8217;s <em>not</em> shared in WebKit ports:</h4>

<ul>
<li>Anything on the GPU

<ul>
<li>3D Transforms</li>
<li>WebGL</li>
<li>Video decoding</li>
</ul>
</li>
<li>2D drawing to the screen

<ul>
<li>Antialiasing approaches</li>
<li>SVG &amp; CSS gradient rendering</li>
</ul>
</li>
<li>Text rendering &amp; hyphenation</li>
<li>Network stack (SPDY, prerendering, WebSocket transport)</li>
<li>A JavaScript engine

<ul>
<li>JavaScriptCore is in the WebKit repo. There are bindings in WebKit for both it and V8</li>
</ul>
</li>
<li>Rendering of form controls</li>
<li><code>&lt;video&gt;</code> &amp; <code>&lt;audio&gt;</code> element behavior (and codec support)</li>
<li>Image decoding</li>
<li>Navigating back/forward

<ul>
<li>The navigation parts of pushState()</li>
</ul>
</li>
<li>SSL features like Strict Transport Security and Public Key Pins</li>
</ul>


<p>Let&#8217;s take one of these: <strong>2D graphics</strong> Depending on the port, we&#8217;re using completely different libraries to handle drawing to screen:</p>

<p><img src="https://lh6.googleusercontent.com/--WfQB-Tr1sQ/TfHQSfY38FI/AAAAAAAAB8s/DSNAn8F71i8/s800/graphicscontext.png" alt="Graphics layer in WebKit" style="display:block; margin: 0 auto;"></p>

<p>Or to go a little more micro&#8230; a recently landed feature: <code>CSS.supports()</code> was <a href="http://trac.webkit.org/changeset/142739">enabled</a> for all ports except win and wincairo, which don&#8217;t have css3 conditional features enabled.</p>

<p>Now that we&#8217;ve gotten technical.. time to get pedantic. Even the above isn&#8217;t correct. It&#8217;s actually WebCore that&#8217;s shared. WebCore is a layout, rendering, and Document Object Model (DOM) library for HTML and SVG, and is generally what people think of when they say WebKit. In actuality &#8220;WebKit&#8221; is technically the binding layer between WebCore and the ports, though in casual conversation this distinction is mostly unimportant.</p>

<p>A diagram should help:</p>

<p><img src="http://paulirish.com/assets/webkit-diagram.png" alt="WebKit Diagram" style="display:block; margin: 0 auto;"> <!-- style="border: 0; margin: 0; box-shadow: none;"  --></p>

<p>Many of the components within WebKit are swappable (shown above in gray).</p>

<p>As an example, WebKit&#8217;s JavaScript engine, JavaScriptCore, is a default in
WebKit. (It is based originally on KJS (from KDE) back when WebKit started as a
fork of KHTML). Meanwhile, the Chromium port swaps in V8 here, and uses unique
DOM bindings to map things over.</p>

<p>Fonts and Text rendering is a huge part of platform. There are 2 separate text
paths in WebKit: Fast and Complex. Both require platform-specific (port-side)
support, but Fast just needs to know how to blit glyphs (which WebKit caches for
the platform) and complex actually hands the whole string off to the platform
layer and says &#8220;draw this, plz&#8221;.</p>

<blockquote id="dimitri-taco">
&#8220;WebKit is like a Sandwich. Though in Chromium&#8217;s case it&#8217;s more like a taco. A
delicious web platform taco.&#8221; <cite> Dimitri Glazkov, Chrome WebKit hacker.
Champion of Web Components and Shadow DOM</cite>
</blockquote>


<p>Now, let&#8217;s widen the lens and look at a few ports and a few subsystems. Below
are five ports of WebKit; consider how varied their stacks are, despite sharing
much of WebCore.</p>

<table id="wk-matrix">
<tr>
<td></td>
<th>Chrome (OS X)</td>
<th>Safari (OS X)</td>
<th>QtWebKit</td>
<th>Android Browser</td>
<th>Chrome for iOS</td>
</tr>
<tr>
<th>Rendering</td>
<td>Skia</td>
<td>CoreGraphics</td>
<td>QtGui</td>
<td>Android stack/Skia</td>
<td>CoreGraphics</td>
</tr>
<tr>
<th>Networking</td>
<td>Chromium network stack</td>
<td>CFNetwork</td>
<td>QtNetwork</td>
<td>Fork of Chromium&#8217;s network stack</td>
<td>Chromium stack</td>
</tr>
<tr>
<th>Fonts</td>
<td>CoreText via Skia</td>
<td>CoreText</td>
<td>Qt internals</td>
<td>Android stack</td>
<td>CoreText</td>
</tr>
<tr>
<th>JavaScript</td>
<td>V8</td>
<td>JavaScriptCore</td>
<td>JSC (V8 is used elsewhere in Qt)</td>
<td>V8</td>
<td>JavaScriptCore (without JITting) *</td>
</tr>
</table>


<p><small>* A side note on Chrome for IOS. It uses UIWebView, as you likely know. Due to
the capabilities of UIWebView that means it can only use the same rendering
layer as Mobile Safari, JavaScriptCore (instead of V8) and a single-process
model. Still, considerable Chromium-side code <a href="https://groups.google.com/a/chromium.org/forum/?fromgroups#!topic/chromium-dev/vYGxPx-tVKE">is leveraged</a>, such as the network
layer, the sync and bookmarks infrastructure, omnibox, metrics and crash
reporting. (Also, for what it&#8217;s worth, JavaScript is so rarely the bottleneck on
mobile that the lack of JITting compiler has minimal impact.)
</small></p>

<h2>All right, so where does this leave us?</h2>

<h4>So, all WebKits are totally different now. I&#8217;m scared.</h4>

<p>Don&#8217;t be! The <a href="http://trac.webkit.org/browser/trunk/LayoutTests">layoutTest coverage in WebKit</a> is enormous (28,000
layoutTests at last count), not only for existing features but for any found
regressions. In fact, whenever you&#8217;re exploring some new or esoteric
DOM/CSS/HTML5-y feature, the layoutTests often have fantastic minimal demos of
the entire web platform.</p>

<p>In addition, the <a href="http://www.w3.org/QA/2013/02/testing_the_open_web_platform.html">W3C is ramping up its effort for conformance suite testing</a>. This
means we can expect both different WebKit ports and all browsers to be testing
against the same suite of tests, leading to fewer quirks and a more
interoperable web. For all those who have assisted this effort by going to a
<a href="http://testthewebforward.org/">Test The Web Forward event</a>&#8230; thank you!</p>

<h4>Opera just moved to WebKit. How does that play out?</h4>

<p>Robert Nyman and Rob Hawkes <a href="http://robertnyman.com/2013/02/14/webkit-an-objective-view/">touched on this, too</a>,
but I&#8217;ll add that one of the significant parts of Opera&#8217;s announcement was that
<strong>Opera adopted Chromium</strong>. This means the WebGL, Canvas, HTML5 forms, 2D
graphics implementations&#8211;all that stuff will be the same on Chrome and Opera
now. Same APIs, and same backend implementation. Since Opera is Chromium-based,
you can feel confident that your cutting-edge work will be compatible with
Chrome and Opera simultaneously.</p>

<p>I should also point out that <strong><a href="http://twatlr.com/thread/301603979257856000">all</a></strong><a href="http://twatlr.com/thread/301603979257856000"> Opera browsers</a> will be adopting
Chromium. So Opera for Windows, Mac and Linux and Opera Mobile (the fully
fledged mobile browser). Even Opera Mini, the thin client, will be swapping out
the current server-side rendering farm based on Presto with one based on
Chromium.</p>

<h4>.. and the WebKit Nightly. What is that?</h4>

<p>It&#8217;s the <a href="http://trac.webkit.org/browser/trunk/Source/WebKit/mac">mac port</a> of
WebKit, running inside of the same binary that Safari uses (though with a few
underlying libraries swapped out). Apple mostly calls the shots in it, so its behavior and feature set is congruent
with what you&#8217;ll find in Safari. In many cases Apple takes a conservative approach when enabling features that other ports may be implementing or experimenting with. Anyway, if you want to go back to middle-school
analogies, think of it as&#8230; WebKit Nightly is to Safari what Chromium is to
Chrome.</p>

<p><a href="http://paulirish.com/2012/chrome-canary-for-developers/">Chrome Canary</a> also
has the latest WebKit source within a day or so.</p>

<h4>Tell me more about WebKit internals.</h4>

<p>You got it, bucko.</p>

<p><a href="https://docs.google.com/presentation/d/1ZRIQbUKw9Tf077odCh66OrrwRIVNLvI_nhLm2Gi__F0/embed?start=false&loop=false&delayms=3000">
<img src="http://paulirish.com/i/3fb890.png" alt="" />
</a></p>

<h4>Further reading:</h4>

<ul>
<li><a href="http://www.webkit.org/coding/technical-articles.html">WebKit internals technical articles | webkit.org</a></li>
<li><a href="http://robertnyman.com/2013/02/14/webkit-an-objective-view/">WebKit: An Objective View | Robert Nyman &amp; Rob Hawkes</a></li>
<li><a href="http://ariya.ofilabs.com/2011/06/your-webkit-port-is-special-just-like-every-other-port.html">your webkit port is special (just like every other port) | Ariya Hidayat</a></li>
<li><a href="http://blogs.adobe.com/webplatform/2013/01/21/getting-started-with-the-webkit-layout-code/">Getting Started With the WebKit Layout Code | Adobe Web Platform Blog</a></li>
<li><a href="http://arunpatole.com/blog/2011/webkit-documentation/">WebKit Documentation Overview | Arun Patole</a></li>
<li><a href="http://www.youtube.com/watch?v=RVnARGhhs9w">Rendering in WebKit, by Eric Seidel | YouTube</a></li>
<li><a href="http://www.igvita.com/slides/2012/web-performance-for-the-curious/">web performance for the curious | Ilya Grigorik</a></li>
</ul>


<p>Hopefully this article described a bit of the internals of WebKit browsers and
gave some insight on where the WebKit ends and the ports begin.</p>

<hr>


<p>Reviewed by Peter Beverloo (Chrome), Eric Seidel (WebKit). <br/>
I&#8217;ll update with any corrections or modifications.</p>

<div update>

<ul>
<li> 8:30am. Removing the slides embed because it&#8217;s making Firefox scroll to its position.
<li> 9:50am. Chrome for Mac&#8217;s font rendering in Skia uses CoreText to draw
glyphs, so it&#8217;s more like CoreText via Skia. (thx thakis!)
<li> 10:49am. Fixed broken link and typo. (thx tim!) Fixed weird meta description choice.
<li> 3:00pm: Mike West pointed to Levi Weintraub&#8217;s sweet & <em>detailed</em> <a href="http://www.youtube.com/watch?v=GGzmST5nNSM">What is WebKit?&#8221; presentation (video)</a>. <a href="http://www.slideshare.net/naseemh/airbnb-tech-talk">slides</a>


<li> 4:00pm. tonikitoo, hacker on QtWebKit wanted to clear up some subtleties:

<blockquote style="font-size: 12px">Nokia (through Trolltech, which it acquired) maintains the Qt port of WebKit, popular as its QtWebKit module. It might be valuable to mentioned that Digia acquired the Trolltech/Qt division of Nokia and now maintains QtWebKit. Also, not to be too nit-picker, in  your subtitles &#8220;Some of the ports of WebKit&#8221; I would have said &#8220;Some of the Products running on top of specific ports of WebKit&#8221; because strictly speaking Safari is not a port, but a &#8220;Browser that makes use of the Apple WebKit port on Mac&#8221;.</blockquote>

True.

<li>5:00pm. <a href="http://myakura.github.com/n/webkit4devs.html">This article has been translated into Japanese</a>. Thanks Masataka Yakura!


<li>2013-03-17: <a href="http://habrahabr.ru/post/173141/">This article has been translated into Russian</a>

<li>2013-03-18: <a href="http://www.infoq.com/cn/articles/webkit-for-developers">This article has been translated into Chinese</a> (also <a href="http://ued.taobao.com/blog/2013/03/webkit-for-developers/">this one!</a>)

<li>2013-04-06: <a href="https://plus.google.com/105636695715347097518/posts/Ubrgmz3LpaR">Chrome emeritus Ben Goodger gave more insight</a> on the relationship between WebCore, WebKit, WebKit2 and the Chromium Content API that&#8217;s useful context.

</ul>
</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Why moving elements with translate() is better than pos:abs top/left]]></title>
    <link href="http://paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/"/>
    <updated>2012-12-20T00:00:00-08:00</updated>
    <id>http://paulirish.com/2012/why-moving-elements-with-translate-is-better-than-pos-abs-top-slash-left</id>
    <content type="html"><![CDATA[<p>In modern days we have two primary options for moving an element across the screen:</p>

<ol>
<li>using CSS 2D transforms and <code>translate()</code></li>
<li>using <code>position:absolute</code> and <code>top</code>/<code>left</code></li>
</ol>


<p><a href="http://css-tricks.com/tale-of-animation-performance/">Chris Coyier was asked why you should use translate. Go read his response</a> which covers well why it&#8217;s more logical to move elements for design purposes (with <code>transform</code>) independent of your element layout (with <code>position</code>).</p>

<p>I wanted to answer this with Chrome and get some good evidence on what&#8217;s going on. I ended up recording a video on the experience:</p>

<iframe width="720" height="464" src="http://www.youtube.com/embed/NZelrwd_iRs" frameborder="0" allowfullscreen></iframe>


<p>It&#8217;s a good watch and dives into Chrome DevTools&#8217; Timeline, compositing, paint cost, accelerated layers, and more&#8230; but if you want the abbreviated text version, read on:</p>

<p>First thing, Chris made some simple demos to try things out:</p>

<p><a href="http://codepen.io/chriscoyier/pen/pBCax"><img width=290 height=190 src="http://paulirish.com/i/cd3fa0.png"></a>
<a href="http://codepen.io/chriscoyier/pen/kyctm"><img width=290 height=190 src="http://paulirish.com/i/c90080.png"></a></p>

<p>This sorta works, but there is such low complexity in this situation that it&#8217;s all going to look pretty great. We need something closer to a complex website to properly evaluate the two <em>(thx <a href="http://joshnh.com/">joshua</a> for the macbook!)</em>:</p>

<p><a href="http://codepen.io/paulirish/pen/nkwKs"><img width=290 height=190 src="http://paulirish.com/i/014f60.png"></a>
<a href="http://codepen.io/paulirish/pen/LsxyF"><img width=290 height=190 src="http://paulirish.com/i/7c70c0.png"></a></p>

<p>Now we&#8217;re starting to get closer, but immediately I get distracted by something.</p>

<h4>Distraction: Pixel snapping</h4>

<p>If you run the demo above you might notice the top edge of the MacBook looks a little bit better in the top/left one. (And here I am writing a post about why translate is better! Preposterous!) So this is due to the absolute positioned macbook sticks to pixel positions, whereas the <code>translate()</code>&#8216;d one can interpolate at sub-pixel positions.</p>

<p>One of the Chrome GPU engineers, James Robinson, called this the &#8220;dubstep effect&#8221;, as these pixels appear to be getting pounded by bass. Here&#8217;s a closeup of the effect&#8230; watch the top white edge of the macbook in each:</p>

<p><img src="http://paulirish.com/wp-content/uploads/2012/12/dubstep-effect1.gif" alt="" /></p>

<p>On the left, you see stair-stepping down three pixels and back up again. This <a href="http://dcurt.is/pixel-fitting">pixel snapping</a> may result in a less distracting transition in this case, though this wouldn&#8217;t be so noticeable if you were moving objects with less of a high-contrast situation.</p>

<h4>Back to performance</h4>

<p>If you run DevTool&#8217;s Timeline Frames mode on these two examples here, they start to tell a very different story:</p>

<p><img src="http://paulirish.com/wp-content/uploads/2012/12/timeline-frames-macbook1.png" alt="" /></p>

<p>The top/left has very large time to paint each frame, which results in a choppier transition. All the CSS including some big box shadows, are computed on the CPU and composited against that gradient backdrop every frame. The <code>translate</code> version, on the other hand, gets the laptop element elevated onto it&#8217;s own layer on the GPU (called a RenderLayer). Now that it sits on its own layer, any 2D transform, 3D transform, or opacity changes can happen purely on the GPU which will stay extremely fast and still get us quick frame rates.</p>

<p>Watch the video above towards the end to see more on how to diagnose paint costs, see what areas are being repainted, and evaluate what elements are on the GPU.</p>

<h4>Demo</h4>

<p>Click through below, try adding more and see how the the framerate reacts. Feel free to open up DevTools, too and explore Timeline:</p>

<p><a href="http://codepen.io/paulirish/pen/nkwKs"><img src="http://paulirish.com/i/f72310.png" width=300 height=226></a><a href="http://codepen.io/paulirish/pen/LsxyF"><img src="http://paulirish.com/i/2cc900.png" width=300 height=226></a></p>

<h4>Guidelines for animation</h4>

<ol>
<li>Use CSS keyframe animation or CSS transitions, if at all possible. The browser can optimize painting and compositing bigtime here.</li>
<li>If needs to be it&#8217;s JS-based animation, use <code>requestAnimationFrame</code>.  Avoid <code>setTimeout</code>, <code>setInterval</code>.</li>
<li>Avoid changing inline styles on every frame (jQuery <code>animate()</code>-style) if you can, declarative animations in CSS can be optimized by the browser way more.</li>
<li>Using 2D transforms instead of absolute positioning will typically provide better FPS by way of smaller paint times and smoother animation.</li>
<li>Use Timeline Frame&#8217;s mode to investigate what is slowing down your behavior</li>
<li>&#8220;Show Paint Rects&#8221; and &#8220;Render Composited Layer Borders&#8221; are good pro-moves to verify where your element is being rendered.</li>
</ol>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Chrome Canary for Developers]]></title>
    <link href="http://paulirish.com/2012/chrome-canary-for-developers/"/>
    <updated>2012-11-02T08:16:00-07:00</updated>
    <id>http://paulirish.com/2012/chrome-canary-for-developers</id>
    <content type="html"><![CDATA[<p><img src="http://paulirish.com/lovesyou/new-browser-logos/chrome-canary-512.png" width=200 align=right></p>

<p>If you do front-end web development and already use Chrome as your development browser, I encourage you to use Chrome Canary.</p>

<p>A new Chrome Canary build is available daily (we cut at 2am PST and take the best of last 40 revisions, to be specific). <strong>Running fresh builds gives you great goodies to look forward</strong>:</p>

<ul>
<li>Chrome DevTools features

<ul>
<li><code>$_</code> (for the Console&#8217;s most recently evaluated result)</li>
<li>Styled console logs (see <a href="https://plus.google.com/u/0/115133653231679625609/posts/5Z1Vj7AoSBM">The Breakpoint ep #2</a>)</li>
<li>JPEG decoding time instrumentation in Timeline</li>
<li>Lots more: read <a href="http://peter.sh">Beverloo&#8217;s WebKit updates</a> and the <a href="http://peter.sh/data/web-inspector-rss.php">Web Inspector commits RSS feed</a></li>
</ul>
</li>
<li>Features for the web platform

<ul>
<li><a href="http://html5rocks.com">HTML5 Rocks</a>, <a href="http://peter.sh">peter.sh</a>, and <a href="http://twitter.com/chromiumdev">@chromiumdev</a> are wise news sources for this. CSS Shaders, holla!</li>
</ul>
</li>
<li>Large, experimental features (go visit <code>about:flags</code>)

<ul>
<li>Right now, there&#8217;s exciting stuff like Web Component&#8217;s Shadow DOM, WebRTC&#8217;s Peer Connection, and more.</li>
</ul>
</li>
</ul>


<h4>Canary runs side by side</h4>

<p>The other reason why Canary is great is because <strong>it can run side-by-side with your other Chrome install</strong>. In fact this is why the URL for Canary&#8217;s download page is &#8220;sxs&#8221;.</p>

<p><img src="http://paulirish.com/i/5efe70.png" width=300></p>

<p><strong>I recommend running Chrome Stable and Canary.</strong> That&#8217;s how most of the Chrome Developer Relations team does it. You never need to update your browser, you can watch the new stuff coming at you (and <a href="http://crbug.com">file bugs</a> if it breaks) and still see what your users see.</p>

<h4>11 Weeks From Canary to 310M Users</h4>

<p>Fun fact: when a feature lands in Canary, it&#8217;s only a short 11 week trip down to shipping to all 300+ million Chrome users on stable. That is, as long as everything is on schedule and the feature doesn&#8217;t need to bake a little longer on dev channel before making its way down. Given that, it&#8217;s a smart move as a dev team to watch as features (and sometimes bugs) trickle down to have time to adapt. When a new stable Chrome is ready, all users will have it within just a few days.</p>

<p>Canary is available for Mac and Windows, but sadly not Linux. :( But luckily there are <a href="http://www.chromium.org/getting-involved/dev-channel#TOC-Linux">packages that track the dev channel Chromium</a> that&#8217;ll keep you up to date on a weekly basis, so you can have a pseudo-canary. If you need a one-off build of the freshest Chromium available, just go to <a href="http://download-chromium.appspot.com">download-chromium.appspot.com</a>; it&#8217;ll detect your OS and serve up a build that&#8217;s less than a few hours old. Hotchachacha!</p>

<p><img src="http://paulirish.com/i/canary-default.png" align=right width=320> <strong>Protip: you can set Canary as your default browser</strong> : Canary itself doesn&#8217;t have a setting to let you do this, as its an edge release. (Read about <a href="http://www.quora.com/Google-Chrome/How-does-the-Chrome-team-ensure-the-stability-of-the-canary-channel/answer/Aaron-Boodman">how Chrome ensures the stability of the Canary build</a>). However&#8230; if you open Safari&#8217;s preferences, Canary will be listed in the <em>Default web browser</em> choices, so you can choose it if you want all new links to open there.</p>

<p>Another small tip: sometimes your Chrome extensions affect your page inspection behavior is weird ways. Jump into incognito where extensions don&#8217;t run to get a clean look.</p>

<h4>Live on the edge</h4>

<p>Running Canary regularly rocks, but so do edge versions of other browsers:</p>

<ul>
<li><a href="http://nightly.mozilla.org/">Mozilla Nightly</a> <a href="http://mozilla.github.com/process-releases/draft/development_specifics/#versioning-firefox">updates daily</a></li>
<li><a href="http://www.opera.com/browser/next/">Opera Next</a> updates often and you can track progress at the <a href="http://my.opera.com/desktopteam/blog/">Opera Desktop blog</a>.</li>
<li><a href="http://nightly.webkit.org/">WebKit Nightly</a> is basically Safari nightly (it&#8217;s their video, GPU, etc stack, but without other Safari browser features)</li>
<li>Internet Explorer gives you platform previews, but since running the time-bombed VMs can be a pain, I run them in <a href="http://www.browserstack.com/start">BrowserStack</a>.</li>
</ul>


<hr>


<p>Oh right, call to action:</p>

<p><a href="https://tools.google.com/dlpage/chromesxs" style="display:block; text-align: center"><img src="http://paulirish.com/i/f0c460.png"></a></p>

<div update>2012.11.02: Added CTA thanks to <a href="https://twitter.com/philip_roberts">philip_roberts</a>&#8217; suggestion.<br>
2013-03-15: Accurate data on when/how we cut Canary builds.</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Interview On Treehouse]]></title>
    <link href="http://paulirish.com/2012/interview-on-treehouse/"/>
    <updated>2012-10-29T05:07:00-07:00</updated>
    <id>http://paulirish.com/2012/interview-on-treehouse</id>
    <content type="html"><![CDATA[<p>The great folks at <a href="http://teamtreehouse.com/">Treehouse</a> sat down with me for 30 minutes to talk about frontend development, my background, HTML5 Boilerplate and tooling.</p>

<iframe width="560" height="315" src="http://www.youtube.com/embed/JhWGSD_TY2Y" frameborder="0" allowfullscreen></iframe>


<p>A few highlights:</p>

<ul>
<li><a href="http://www.youtube.com/watch?feature=player_detailpage&amp;v=JhWGSD_TY2Y#t=222s">3:40</a> Where&#8217;d I grow up? What was I into? <em>(Also, the supercool IE4 DHTML event I went to!)</em></li>
<li><a href="http://www.youtube.com/watch?feature=player_detailpage&amp;v=JhWGSD_TY2Y#t=884s">14:45</a> What&#8217;s my favorite feature inside the HTML5 Boilerplate?</li>
<li><a href="http://www.youtube.com/watch?feature=player_detailpage&amp;v=JhWGSD_TY2Y#t=1114s">18:34</a> Will web development even out where we don&#8217;t need to fuss over so many fallback scenarios?</li>
<li><a href="http://www.youtube.com/watch?feature=player_detailpage&amp;v=JhWGSD_TY2Y#t=1372s">22:52</a> Are abstractions okay? Should you always learn what&#8217;s going on under the covers first?</li>
</ul>


<p>I&#8217;ve also updated the interview listing on my <a href="http://paulirish.com/about/">About page</a>. &lt;3z</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Why I'm so excited about Web Platform Docs]]></title>
    <link href="http://paulirish.com/2012/why-im-so-excited-about-web-platform-docs/"/>
    <updated>2012-10-08T13:09:00-07:00</updated>
    <id>http://paulirish.com/2012/why-im-so-excited-about-web-platform-docs</id>
    <content type="html"><![CDATA[<p><img src="http://docs.webplatform.org/w/skins/webplatform/images/logo.svg" align=right style="margin: 0 0 10px 10px; padding: 5px;"></p>

<p>I absolutely love developing for the clientside of the web. Delivering the actual interactions and UI that all users feel is an absolutely gratifying experience. However… it&#8217;s not a piece of cake to develop for all desktop browsers, mobile browsers, and all the device/OS combinations within.</p>

<p>It&#8217;s hard to track down accurate info, but hey we get by with an unruly combination of Mozilla&#8217;s MDN, StackOverflow, HTML5 Please, W3C/WHATWG specs, Wikipedia, and a mental inventory of blog posts, tweets and articles strewn over the internet.</p>

<iframe width="560" height="315" src="http://www.youtube.com/embed/Ug6XAw6hzaw" frameborder="0" allowfullscreen></iframe>


<p>Today&#8217;s announcement of <a href="http://docs.webplatform.org/wiki/Main_Page">Web Platform Docs</a>, an initiative that&#8217;s been well over a year in the making, is huge. A few reasons why I&#8217;m pumped:</p>

<ul>
<li>All browser vendors are working together to document the all of the clientside web: DOM, CSS, HTML, SVG, Canvas, HTML5, JS, ES5…</li>
<li>They&#8217;ve already contributed much of their content: all of the MSDN IE reference docs, the Opera Web Standards Curriculum, many HTML5 Rocks articles,</li>
<li>Full-time technical writers from Google, Microsoft, Adobe and others authoring content around new features in addition to the strong community contributions.</li>
<li>And obviously, a much more cohesive documentation situation, making it easier for us to develop with all the information we need.</li>
<li>Mozilla&#8217;s MDN content <a href="https://hacks.mozilla.org/2012/10/welcoming-the-new-kid-web-platform-docs/">can be contributed</a>!</li>
<li>The content <em>is still alpha</em>, but we now have a single place to document the web platform.</li>
</ul>


<h4>How can you help?</h4>

<ol>
<li>&#8220;Upstream&#8221; your writing. If you&#8217;ve written a widely cited article exploring a feature or documenting cross-browser bugs, gotchas, certainly you can help a educate a vastly wider audience.</li>
<li>Contribute browser support data. We thrive on knowing the mobile/desktop compat story. PPK will be publishing his compat tables there, and you can upstream compat facts from other sources freely.</li>
<li>Fix bugs! Already a few bugs/annoyances have been unearthed. Please <a href="https://www.w3.org/Bugs/Public/describecomponents.cgi?product=webplatform.org">report them</a> but more importantly, we&#8217;d love help fixing them! Attach a patch to a bugzilla ticket and we can push it live ASAP.</li>
<li>Poke around the <a href="http://docs.webplatform.org/w/index.php?title=Special%3APrefixIndex&amp;prefix=&amp;namespace=3000">WPD: prefixed pages</a> to get a feel for the current content activity.</li>
<li>Jump into #webplatform on freenode IRC or join the <a href="http://lists.w3.org/Archives/Public/public-webplatform/">public-webplatform mailing list</a>.</li>
<li>If you have expertise in technical writing or content strategy, we&#8217;d love your help!</li>
<li>A whole lot more! <strong>Read the <a href="http://docs.webplatform.org/wiki/WPD:Getting_Started">WPD: Getting Started guide!</a></strong></li>
</ol>


<p>This won&#8217;t be perfect overnight and will take a while to completely supplant existing distributed documentation sources&#8230; but I&#8217;m very excited about this <a href="http://blog.webplatform.org/2012/10/one-small-step/">first, shared small step</a>. Three cheers to making a better experience for everyone building for the web.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[A browser benchmark that has your back: RoboHornet]]></title>
    <link href="http://paulirish.com/2012/a-browser-benchmark-that-has-your-back-robohornet/"/>
    <updated>2012-09-24T14:51:00-07:00</updated>
    <id>http://paulirish.com/2012/a-browser-benchmark-that-has-your-back-robohornet</id>
    <content type="html"><![CDATA[<p>The past few years’ browser focus on speed has been great for us and our users. We’ve seen a huge and dramatic performance boost on benchmarks like Sunspider, Kraken, and Octane. But, these benchmarks, often crafted by JavaScript VM engineers, test raw JavaScript performance, which is rarely the bottleneck we have in our apps.</p>

<p>These days, our performance bottlenecks are oftentimes DOM, <code>&lt;canvas&gt;</code> API methods, SVG.  Those are our priorities. So then why do we see all browser vendors competing on raw JS when we are hacking our way around to avoid the actual performance pain points?  So we wanted to solve that with <strong>RoboHornet</strong>.</p>

<p><strong>Today, a cross-vendor collection of developers, led by Google, is <a href="https://github.com/robohornet/robohornet">open-sourcing</a> <a href="http://robohornet.org/">RoboHornet</a>.</strong> As project lead Alex Komoroske <a href="https://plus.google.com/117456450182805712050/posts/Pij4361doN4">put it</a>, “it’s a living, dynamic benchmark that aims to use the collective efforts of the web development community and ultimately get browser vendors to fix real-world performance pain points.” Let’s look at how RoboHornet will hopefully flip the above situation on its head.</p>

<ol>
<li>Web app developers identify and isolate a specific pain point in their app</li>
<li>That issue is reduced down to a solid benchmark</li>
<li>Propose it to a <a href="https://github.com/robohornet/robohornet/wiki/Committee-Membership">committee of JavaScript experts</a> from JSPerf, YUI, Google, Facebook, and others</li>
<li>Everyone <a href="https://github.com/robohornet/robohornet/wiki/Project-Organization">votes</a> for which issues should make it</li>
<li>Of the top voted items, as long as the committee thinks they are good, they head into the benchmark</li>
<li><a href="http://www.robohornet.org/">The RoboHornet Suite</a> now better represents the web app developer communities biggest priorities for performance</li>
<li><strong>Browser vendors compete on their RoboHornet score, optimizing the slow behaviors that developers prioritize</strong></li>
<li>Everybody wins. <em>Yay ice cream for everyone!</em></li>
</ol>


<p><a href="http://robohornet.org"><img src="http://paulirish.com/i/890a40.png" width=600></a></p>

<h4>What’s in there now</h4>

<p>The current items that RoboHornet tests captures the major pain points of jQuery, Google Apps, Google Maps, Ember, Handlebars and Cappuccino:</p>

<ul>
<li>Adding rows to an existing table</li>
<li>Adding columns to an existing table</li>
<li>Descendant selectors at different DOM depths</li>
<li>Converting a 2D canvas to a data URI</li>
<li>Clearing a 2D canvas</li>
<li>Table render speed after innerHTML.</li>
<li>Scrolling speed using scrollTop</li>
<li>Resizing columns in a table</li>
<li>Resizing SVGs</li>
<li>ES5 getter/setters</li>
<li>Referencing the arguments array</li>
<li>Scrolling lots of animated GIFs</li>
<li>The affect of forcing a reflow by calling offsetHeight</li>
<li>Replacing a number of DOM nodes using the Range API</li>
<li>localStorage write performance</li>
<li>localStorage read performance</li>
</ul>


<p>You can <a href="https://github.com/robohornet/robohornet/issues?labels=performance">vote on and review incoming tests</a> in the issue tracker.</p>

<h4>RoboHornet represents you</h4>

<p><strong>The project is still in alpha</strong> and we’d love to get your involvement to better represent everyone. We’re using <a href="http://benchmarkjs.com/">Benchmark.js</a> internally, as its experience on <a href="http://jsperf.com/">jsPerf</a> has proven it a trustworthy and reliable benchmark harness.</p>

<ol>
<li>Please take a look at the site</li>
<li>Watch <a href="https://github.com/robohornet/robohornet">the RoboHornet Github project</a></li>
<li><a href="https://github.com/robohornet/robohornet/wiki/_pages">Read how you can be more involved</a></li>
<li>Submit the performance pain points that your apps run up against.</li>
</ol>


<p>While you’re at it, go check out <a href="http://www.tomshardware.com/reviews/robohornet-web-browser-performance,3303.html">the full review of RoboHornet at Tom’s Hardware
<img src="http://paulirish.com/i/756c50.png" width=300></a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Academic research on browsers, frontend development, and debugging]]></title>
    <link href="http://paulirish.com/2012/academic-research-on-browsers-frontend-development-and-debugging/"/>
    <updated>2012-09-13T08:45:00-07:00</updated>
    <id>http://paulirish.com/2012/academic-research-on-browsers</id>
    <content type="html"><![CDATA[<p>University-level education has never really touched too directly on what we do as frontend developers. I know I was self-taught in the ways of the browser, as were all of my friends. Luckily the sort of webapp work we do these days is quite sophisticated so those CS  graduates bring much of the great ideas to the JavaScript community. (<a href="http://twitter.com/slexaxton">Alex Sexton</a> has been a personal inspiration here)</p>

<p>Early last year, something clicked in my head when I saw this video: <a href="https://www.usenix.org/conference/usenix-security-11/crossing-chasm-pitching-security-research-mainstream-browser-vendors">Crossing the Chasm: Pitching Security Research to Mainstream Browser Vendors</a>.</p>

<p><em>You mean.. there are academics&#8230; who are doing research on browsers.. in universities? My my! You mean bright minds think about the same things as us and don&#8217;t publish them on Octopress? ;)</em></p>

<p>Turns out it&#8217;s quite an active area of research. So, I&#8217;ve put together a list of academic papers, talks, and researchers all centered around frontend development and browsers (Please chime in on the comments if you know of more):</p>

<h4>Webapps</h4>

<p><a href="https://www.usenix.org/conference/webapps12/gibraltar-exposing-hardware-devices-web-pages-using-ajax">Gibraltar: Exposing Hardware Devices to Web Pages Using AJAX</a> <em>UC San Diego, Microsoft Research, Univ. of Singapore</em>, 2012</p>

<p><a href="https://www.usenix.org/conference/webapps12/modeling-and-reasoning-about-dom-events">Modeling and Reasoning about DOM Events</a> <em>Brown University</em>, 2012</p>

<p><a href="https://www.usenix.org/conference/webapps12/don%E2%80%99t-repeat-yourself-automatically-synthesizing-client-side-validation-code">Don’t Repeat Yourself: Automatically Synthesizing Client-side Validation Code for Web Applications</a> <em>University of Illinois at Chicago</em>, 2012</p>

<h4>Performance</h4>

<p><a href="http://www2012.wwwconference.org/proceedings/proceedings/p41.pdf">Who Killed My Battery: Analyzing Mobile Browser Energy Consumption</a> <em>Stanford</em>, 2012</p>

<p><a href="http://dl.acm.org/citation.cfm?id=2187842">How far can client-only solutions go for mobile browser speed?</a> <em>ACM Digital Library</em>, 2012</p>

<p><a href="http://www.srl.inf.ethz.ch/papers/pldi12-wr.pdf">Race Detection for Web Applications</a> <em>Sofia University &amp; ETH Zurich &amp; IBM T.J. Watson Research Center</em>, 2012</p>

<p><a href="http://www.eecs.berkeley.edu/~lmeyerov/">Leo Meyerovich - Berkeley Rsearch</a> <em>UC Berkeley</em>, 2009 (Parallel Browser Execution, Security)</p>

<p><a href="http://research.microsoft.com/en-us/people/mickens/">James Mickens - Microsoft Research</a> <em>Microsoft</em>, 2004- (Performance, localStorage, Mashups, Speculative Execution</p>

<figure>
<img alt="james mickens is amazing" src="http://paulirish.com/i/55d0.png" width=600>
<figcaption>
James Mickens, the &#8220;Galactic Viceroy of Research Magnificence[&#8220;](http://microsoftjobsblog.com/blog/viceroy-james-mickens) at Microsoft Research, does awesome work. The above shot is from his MIX11 talk [Making Better Web Apps For Today&#8217;s Browsers](http://channel9.msdn.com/Events/MIX/MIX11/RES04).
</figcaption>
</figure>


<h4>Debugging &amp; Tools</h4>

<p><a href="http://www.cs.washington.edu/homes/burg/projects/timelapse/">Timelapse - Interactive record/reply with Webkit inspector</a> <em>Univ. of Washington</em>, 2012</p>

<p><a href="http://faculty.washington.edu/ajko/projects/cleanroom/">Cleanroom: Edit-Time Error Detection with the Uniqueness Heuristic</a> <em>Univ. of Washington</em>, 2010</p>

<p><a href="http://getfirebug.com/wiki/index.php/Firebug_Research#Academic_papers_related_to_Firebug">Firebug Research - Academic papers related to Firebug</a> <em>Various</em>, 2012</p>

<p><a href="http://howtonode.org/heat-tracer">Realtime Performance Visualizations using Node.js</a> <em>How to NODE</em>, 2011</p>

<p><a href="ftp://ftp.cs.orst.edu/pub/burnett/TSE-InfoForageDebug-prePrint-2010-12-20.pdf">How Programmers Debug, Revisited: An Information Foraging Theory Perspective</a> <em>Wentworth, OSU, &amp; IBM TJ Watson Research Center</em>, 2010</p>

<h4>Security</h4>

<p><a href="https://www.usenix.org/conference/usenix-security-11/crossing-chasm-pitching-security-research-mainstream-browser-vendors">Crossing the Chasm: Pitching Security Research to Mainstream Browser Vendors</a> <em>Carnegie Mellon</em>, 2011</p>

<p><a href="http://research.microsoft.com/en-us/um/people/livshits/presentations.htm">Benjamin Livshits - Microsoft Research</a> <em>Microsoft</em>, 2004-2012 (Malware, Privacy, JS Benchmarking, JS Compression, JS Static Analysis, Security)</p>

<p><a href="http://sss.cs.purdue.edu/projects/dynjs/">Dynamics of JavaScript</a> <em>Purdue</em>, 2011</p>

<p><a href="http://www.adambarth.com/papers/">Adam Barth - Research</a> <em>Various</em>, 2007- (XSS, CRSF, Security…)</p>

<h4>Data Visualization</h4>

<p><a href="http://infosthetics.com/archives/2011/11/most_interesting_papers_at_infovis_visweek_2011.html">Highlights of the Infovis Conference, VisWeek 2011</a> 2011</p>

<h4>JavaScript</h4>

<p><a href="http://www.cs.purdue.edu/homes/gkrichar/">Gregor Richards - JS Research at Purdue</a> <em>Purdue</em>, 2009-2011</p>

<p><a href="http://faculty.washington.edu/ajko/projects/cleanroom/">Cleanroom</a> <em>University of British Columbia</em>, 2011-2012</p>

<p><a href="http://cs.au.dk/~amoeller/research.html">Anders Møller - Research</a> <em>Aarhus University</em>, 2002-</p>

<h4>Non-JavaScript Tooling</h4>

<p><a href="http://www.cs.cmu.edu/~NatProg/whyline-java.html">Whyline for Java</a> <em>Natural Programming</em>, 2009</p>

<p><a href="http://hci.rwth-aachen.de/stacksplorer">Stacks Plorer</a> <em>Media Computing Group</em>, 2012</p>

<p><a href="http://pleiad.dcc.uchile.cl/tod/">Omniscient debugging with TOD</a> <em>Pleiad</em>, 2007</p>

<p><a href="http://elm-lang.org/">The Elm Programming Language</a> <em>Elm Lang</em>, 2011-2012 (a type-safe, functional reactive language that compiles to HTML, CSS, and JavaScript)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Developers We Admire.]]></title>
    <link href="http://paulirish.com/2012/developers-we-admire/"/>
    <updated>2012-08-17T11:46:00-07:00</updated>
    <id>http://paulirish.com/2012/developers-we-admire</id>
    <content type="html"><![CDATA[<p>One of the good things about having the eyeballs of many people is that you now have the ability to throw other people into the limelight that completely deserve to be in it. <a href="http://nimbupani.com">Divya Manian</a> and I have been, for a while now, putting together a list of people in the front-end development community who, in our opinion, could use more broad acknowledgment and attention. They&#8217;re also inspiring because&#8230;</p>

<ol>
<li>They are excellently skilled in their area of expertise and go out of their way to teach others how to gain these skills</li>
<li>They participate in open source projects that fuel the community&#8217;s knowledge and productivity</li>
<li>They have independent opinions that are derived out of testing, and evidence-based fact finding worthy of learning from</li>
</ol>


<p>So, here is a list of people we admire:</p>

<ul>
<li><p><strong>Ryan Seddon</strong>: <a href="http://twitter.com/ryanseddon">@ryanseddon</a> aka <a href="http://www.thecssninja.com/">the CSS Ninja</a> develops Modernizr, writes polyfills, and explores the edge of DOM APIs. His recent <a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">exploration of source maps</a> lays a lot of groundwork for future web debugging potentials.</p></li>
<li><p><strong>Hans Christian Renl</strong>: <a href="http://twitter.com/drublic">@drublic</a> started contributing extensively to <a href="http://twitter.com/h5bp">HTML5 Boilerplate</a> and has been actively engaged in other projects we have worked on. He also maintains <a href="http://drublic.de/blog/">a blog</a> where he shares his learning experiences and explorations of advanced CSS features.</p></li>
<li><p><strong>Alexis Deveria</strong>: <a href="http://twitter.com/fyrd">@fyrd</a> maintains <a href="http://caniuse.com">caniuse.com</a>, and contributes to <a href="http://svg-edit.googlecode.com/">svg-edit</a>, the open source svg editor. He also created &amp; maintains <a href="http://en.wikipedia.org/wiki/File:Timeline_of_web_browsers.svg">the canonical timeline of web browsers</a>  which has been the basis of <a href="http://evolutionofweb.appspot.com/">other browser history graphs</a> since. He also upstreams all the data from caniuse.com to its API, is used to power sites such as api.html5please.com and html5rocks.com</p></li>
<li><p><strong>Jason Kiss</strong>: <a href="http://twitter.com/jkiss">@jkiss</a>&#8217;s <a href="http://www.accessibleculture.org/articles/">notes on accessibility</a> are like a breath of fresh air into the dense field of accessibility. He tests in as many accessibility technology tools as available and bases his opinions on findings from his research. His articles are extremely valuable to web developers who have long had to base how to do the right thing on superstition and fact-free opinions.</p></li>
<li><p><strong>Kit Cambridge</strong>: <a href="http://twitter.com/kitcambridge">@kitcambridge</a> develops some of the best-in-class javascript libraries and assists many open source projects on Github. Take a look around <a href="http://github.com/bestiejs">bestiejs</a> to see his fine work and friendly demeanor.</p></li>
<li><p><strong>Eric Dahlström</strong>: <a href="http://twitter.com/erikdahlstrom">@erikdahlstrom</a> is not just the editor of SVG specs, but also helps out often in mailing lists and Stack Overflow with SVG questions. Not only that, he is an unbelievably skilled (obviously!) at hand-coding lightweight SVG, and maintains a repository of SVG images that are worthy of learning from on how to do SVG right.</p></li>
<li><p><strong>Masataka Yakura</strong>: <a href="http://twitter.com/myakura">@myakura</a> watches  HTML/etc. specification changes, browser bug trackers and mailing lists, and reports the best stuff on <a href="https://plus.google.com/115203843155141445032/posts">his G+</a></p></li>
<li><p><strong>Matt Seeley</strong>: <a href="http://twitter.com/innerhtml">@innerhtml</a> is a JS hacker at Netflix, who measures constantly and talks about <a href="http://techblog.netflix.com/2012/01/webkit-in-your-living-room.html">the science of cross-device hardware accelleration</a></p></li>
<li><p><strong>Tim Branyen</strong>: <a href="http://twitter.com/tbranyen">@tbranyen</a> created <a href="https://github.com/tbranyen/backbone-boilerplate">Backbone Boilerplate</a> and <a href="https://github.com/tbranyen/backbone.layoutmanager">Backbone Layout Manager</a> to make it easy for everyone to get started with Backbone. He also writes extensively on his <a href="http://tbranyen.com/">blog</a> on dealing with problems of creating web apps.</p></li>
<li><p><strong>Mathieu Henri</strong>: <a href="http://twitter.com/p01">@p01</a> has an in-depth understanding of JavaScript and shares amazing experiments that are possible within less than 1K of JavaScript such as <a href="http://www.p01.org/releases/MATRAKA/matraka.png.html">canvas with audio</a> (warning audio) &amp; <a href="http://www.p01.org/releases/JS1K_Speech_Synthesizer/">Speech Synthesizer</a>. He also frequently contributes to <a href="http://twitter.com/140bytes">@140bytes</a> on what is possible with 140 bytes of JS.</p></li>
<li><p><strong>Roman Cortes</strong>: <a href="http://twitter.com/romancortes">@romancortes</a> is one of few who can explore some interesting innovative uses of CSS. His explanation of a <a href="http://www.romancortes.com/blog/how-i-did-the-1kb-christmas-tree/">1kb chrismas tree</a> is a whirlwind of frontend knowledge.</p></li>
<li><p><strong>Peter Beverloo</strong>: <a href="http://twitter.com/beverloo">@beverloo</a> started off a series on <a href="http://peter.sh">his blog</a> documenting what&#8217;s new in WebKit/Chromium. He&#8217;s since been hired by Google and works on Chrome for Android. His work in distributing edge browser development news has helped thousands of people track the quickly expanding web platform.</p></li>
<li><p><strong>Erik J Moller</strong>: <a href="http://twitter.com/erikjmoller">@erikjmoller</a> is to WebGL what @dahlstrom  is to SVG. His skill and ability to hand-code webGL is unparalleled. He created a <a href="http://my.opera.com/emoller/blog/2012/02/29/webgl-101">10-part video on learning webGL (webGL 101) that is archived on youtube</a> not to mention is the <a href="https://github.com/operasoftware/Emberwind">main contributor to EmberWind</a> an open source webGL game that is highly performant.</p></li>
<li><p><strong>Irene Ros</strong>: <a href="http://twitter.com/ireneros">@ireneros</a> dabbles in info-viz tools and has published several of them on GitHub. She is active in contributing back to open-source projects and also maintaining a few of them including <a href="http://misoproject.com/">Miso Project</a> and <a href="https://github.com/iros/underscore.nest">underscore.nest</a>.</p></li>
<li><p><strong>Mike Taylor</strong>: <a href="http://twitter.com/miketaylr">@miketaylr</a>  is developer relations extraordinare for Opera. He has been a behind-the-scenes force getting a lot of cross-browser compatibility and feature detection complete and distributed.</p></li>
<li><p><strong>Zoe Mickley Gillenwater</strong>: <a href="http://twitter.com/zomigi">@zomigi</a> wrote <a href="http://www.stunningcss3.com/">an excellent book about CSS3</a> and publishes <a href="http://zomigi.com/">informative articles on CSS on her website</a> that are a good resource for anyone who is working with CSS3.</p></li>
<li><p><strong>Niklas von Hertzen</strong>: <a href="http://twitter.com/niklasvh">@Niklasvh</a> created <a href="http://html2canvas.hertzen.com/">html2canvas</a>, essentially a rendering engine in JavaScript. He&#8217;s also had a number of <a href="https://plus.google.com/113127438179392830442/posts/82TXPmNhjKH">exciting experiements</a> like a Sudoku Solver in CSS.</p></li>
<li><p><strong>Zoltan Hawryluk</strong>: <a href="http://twitter.com/zoltandulac">@zoltandulac</a> painstakingly researches making CSS3 features backwards-compatible with IE, in addition to <a href="http://www.useragentman.com/blog/2010/03/09/cross-browser-css-transforms-even-in-ie/">blogging about several discoveries in the process</a>.</p></li>
</ul>


<h4>Other Unsung Heroes</h4>

<p>There are clearly far more people that deserve to have their praises sung. Plenty of people whose names you already know, but also folks like <a href="http://twitter.com/zachleat">@ZachLeat</a>, <a href="http://twitter.com/alex_gibson">@Alex_Gibson</a>, <a href="http://twitter.com/mbostock">@mbostock</a>, <a href="http://twitter.com/robflaherty">@RobFlaherty</a>, <a href="http://twitter.com/raynos2">@Raynos2</a>, <a href="http://twitter.com/bricss">@bricss</a> and more.</p>

<h4>Thank you</h4>

<p>We are grateful towards everyone who has helped us along the way to shape the web to be as friendly as possible to web developers, by driving the work on frameworks, libraries, articles and outreach. They do it on their own time, because of their love of and fascination with the web.</p>

<p>All of them are well worth your time to pay attention to and follow and hear their opinions of the web.</p>

<h4>Who are yours?</h4>

<p>We&#8217;ve left out some of the bigger names in this list, so hopefully we can all discover someone new who covers a relevant field extremely well. This is our list, but feel free to leave a comment with anyone you&#8217;d put on yours. Or better yet, blog it yourself and link up your list here.</p>

<div update>2012.08.27: Heartwarming: @zoltandulac&#8217;s <a href="http://www.useragentman.com/blog/2012/08/26/a-developer-i-admire-walter-zorn/">writeup of the inspirational frontend developer Walter Zorn</a>
2012.08.29: Gray Ghost Visuals <a href="http://blog.grayghostvisuals.com/developers/my-web-heros">wrote about his heroes</a>
</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The Skinny on IE's Update Policy]]></title>
    <link href="http://paulirish.com/2012/the-skinny-on-ies-update-policy/"/>
    <updated>2012-06-29T10:47:00-07:00</updated>
    <id>http://paulirish.com/2012/the-skinny-on-ies-update-policy</id>
    <content type="html"><![CDATA[<p>Every month, WebKit, Firefox and Opera are shipping incredible features; IE10 is also going to settle up and even out those HTML5 Test scores (plus some features they may debut, like Grid Layout!). But while these features are becoming available in some browsers, most of us can&#8217;t use them because we have a sizable audience who have been left behind on old browsers. A while ago I made <a href="http://paulirish.com/2011/browser-market-pollution-iex-is-the-new-ie6/">a big fuss</a> about IE&#8217;s lack of solid upgrade path and how it meant we&#8217;d end up with 10 major versions of IE in the wild. But luckily, things took a turn for the better when <a href="http://windowsteamblog.com/ie/b/ie/archive/2011/12/15/ie-to-start-automatic-upgrades-across-windows-xp-windows-vista-and-windows-7.aspx">Microsoft announced a new autoupdate policy for IE</a>.</p>

<p>I wanted to take a moment to explain <strong>what this IE update policy means for us web developers</strong>.</p>

<p>The big change is how IE now interacts with Windows Update: Before you had to opt-in to have &#8220;Recommended&#8221; updates installed automatically. It&#8217;s likely few folks did. Now, <strong>IE upgrades are shipping as &#8220;Important&#8221; and this class of updates are defaulted to install automatically</strong>. A user can still opt-out and immediately after the announcement of this feature they also published details on <a href="http://windowsteamblog.com/windows/b/springboard/archive/2011/12/15/ie-auto-updates-good-news-for-businesses-too.aspx">how enterprises can opt-out</a>. But still, this is a good move, it helps.</p>

<p>The policy manifests as:</p>

<ol>
<li>Windows XP holdouts on IE6 or IE7 get the boot up to IE8</li>
<li>Windows Vista and 7 users still on IE7 or even on IE8 get shunted up to IE9</li>
<li>IE10 only works on Win7+, and while no policy has been published for Win7 users, it&#8217;s likely any IE8/IE9 users will be moved up to IE10.</li>
</ol>


<p>A very smart policy call was that this update policy also includes all of China, which is important because most of their Windows installs are not genuine. Microsoft decided they should get the IE bump anyway, which is great because China has been <a href="http://gs.statcounter.com/#browser_version_partially_combined-CN-monthly-200807-201206">dominated by IE6 and IE8</a> for ages.</p>

<p>This update procedure was scheduled to start in Australia and Brazil in January 2012. If we look at what happened in Brazil, we have a good shift of users but it&#8217;s flattened out with a nontrivial amount of left behind users: (see the two blue lines in the chart below)</p>

<div id="browser_version_partially_combined-BR-weekly-201141-201224" width="600" height="400" style="width:600px; height: 400px;"></div>


<!-- You may change the values of width and height above to resize the chart -->


<p><small>(Source: <a href="http://gs.statcounter.com/#browser_version_partially_combined-BR-weekly-201141-201224">StatCounter Global Stats - Browser Version (Partially Combined) Market Share)</small></a></p>


<script defer type="text/javascript" src="http://www.statcounter.com/js/FusionCharts.js"></script>


<script  defer type="text/javascript" src="http://gs.statcounter.com/chart.php?browser_version_partially_combined-BR-weekly-201141-201224"></script>


<p>Australia <a href="http://gs.statcounter.com/#browser_version_partially_combined-AU-weekly-201141-201224">has a similar swap of users from IE8 to IE9</a> but IE8 still remains steady above 10% overall share there.</p>

<p>Microsoft is in a tough spot in that they have enterprise customers who have developed their intranet applications in an extremely poor manner and they break outside of old browsers. But we&#8217;re going to need some more pushes from them and us, the developer community, to get in a better state. We want to develop for the web platform of now, not the platform of four years ago.</p>

<hr>


<p><b>TL;DR:</b> There is now a policy in place, but evidence indicates that it&#8217;s not as effective in eradicating these zombie browsers as what we need. Personal opinion: we need to do better.</p>

<p><small>Hopefully this clarifies a bit about the mechanics of the update procedure. Please do correct me if anything is wrong and I&#8217;ll update the post.</small></p>

<div update>2012.08.07: Added TLDR.

2012.07.02: To see this update policy in better context it&#8217;s probably useful to <A href="http://www.netmagazine.com/features/developers-guide-browser-adoption-rates">Read this Developer&#8217;s Guide to browser adoption rates</a> and check the charts from Ars Technica below.</div>


<p><a href="http://static.arstechnica.net/2012/04/02/firefox-adoption-2012-03-4f7a134-intro.png"><img src="http://static.arstechnica.net/2012/04/02/firefox-adoption-2012-03-4f7a134-intro.png" width="200"></a><a href="http://static.arstechnica.net/2012/04/02/chrome-adoption-2012-03-4f7a134-intro.png"><img src="http://static.arstechnica.net/2012/04/02/chrome-adoption-2012-03-4f7a134-intro.png" width="200"></a><a href="http://static.arstechnica.net/2012/04/02/internet-explorer-adoption-2012-03-4f7a134-intro.png"><img src="http://static.arstechnica.net/2012/04/02/internet-explorer-adoption-2012-03-4f7a134-intro.png" width="200"></a></p>

<div update id="20120921">2012.09.21: Months later, the net effect of the update campaign is complete. It pushed a whole bunch of users up to IE9 but IE8 usage remains solid. :(  WinXP is a big problem here, obviously. We have to explore other ways to move these users off a zombie browser&#8230;</div>


<p>(Consider the two blue lines)</p>

<div id="browser_version_partially_combined-ww-weekly-201149-201238" width="600" height="400" style="width:600px; height: 400px;"></div>


<!-- You may change the values of width and height above to resize the chart -->


<p><small>Source: <a href="http://gs.statcounter.com/#browser_version_partially_combined-ww-weekly-201149-201238">StatCounter Global Stats - Browser Version (Partially Combined) Market Share</a></small></p>


<script type="text/javascript" src="http://www.statcounter.com/js/FusionCharts.js"></script>


<script type="text/javascript" src="http://gs.statcounter.com/chart.php?browser_version_partially_combined-ww-weekly-201149-201238"></script>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Accessibility and Developers]]></title>
    <link href="http://paulirish.com/2012/accessibility-and-developers/"/>
    <updated>2012-06-01T00:19:00-07:00</updated>
    <id>http://paulirish.com/2012/accessibility-and-developers</id>
    <content type="html"><![CDATA[<p>Jacob Thornton has an <a href="http://wordsbyf.at/2012/05/21/jsconf-argentina-2012/">inspiring slide deck on accessibility</a> that brings to fore some of the concerns that web developers have with implementing features around accessibility.</p>

<p>For a very long time, developers have been told about making websites &#8216;accessible&#8217;. Like it is a faucet that should be turned on or off. Till <a href="http://www.youtube.com/watch?v=izrC4R7SsH4">Victor Tsaran&#8217;s demonstration of using a screenreader</a> (which was in 2007 - a very long time since accessibility evangelism began) - very few web developers had any idea of the real immediate impact of implementing accessibility features.</p>

<blockquote><p>During a Nicholas Zakas &amp; Victor Tsaran talk years ago I finally grokked the easiest rule for a first step towards accessibility. For such a long time, we conflated functionality while JavaScript-disabled with &#8220;being accessible&#8221;. It took me years to learn that <strong>making it keyboard-navigable</strong> was the top priority.</p></blockquote>

<p><ins>Just as a datapoint, The <a href="http://webaim.org/projects/screenreadersurvey4/">WebAIM survey results</a> (published yesterday) reveal <b>98.6%</b> of screenreader users have javascript enabled.</ins></p>

<h4>What we need</h4>

<p>People like <a href="http://twitter.com/jkiss">Jason Kiss</a> and <a href="http://twitter.com/stevefaulkner">Steve Faulkner</a> who detail the <a href="http://html5accessibility.com/">behavior and support in browsers</a> and screenreaders are providing the developer community with invaluable knowledge, stuff that is far more worthwhile than publishing a yet another list of you-should-do-these-things. (See also <a href="http://paulirish.com/2011/semantics/#recommendation">my resources list in the semantics post</a>).</p>

<p>Most developers have no idea what effect adding ARIA markup to our documents has on people using
screenreaders. We need that. Actual before-and-after video stuff makes this topic real. See <a href="http://zomigi.com/blog/videos-of-screen-readers-using-aria-updated/">zomigi’s recent post: videos of screenreaders using ARIA</a>, for great examples.</p>

<p>Most developers have no idea how to implement ARIA. The <a href="http://www.w3.org/TR/wai-aria-primer/">W3C Primer that looks like a spec</a> is not at all appropriate for a web developer audience.</p>

<p>Just like it’s valuable to witness an a11y usability session where you see how disabled people use your site, I think it’d be useful for the accessibility community to see how developers build, because thus far there has been a disconnect in communicating effectively. I don’t think we need more on the ground evangelism yet. There is a dearth in online resources at the moment, developers need to know these practical ways of using and having users benefit from accessibility techniques:</p>

<ul>
<li>Which features should I use and which should I avoid (which features are actively harmful because of shoddy screen reader/other a11y tech support?)</li>
<li>What are the top priorities for developers to implement?</li>
<li>Videos of screenreaders in use <ins>(<a href="http://zomigi.com/blog/videos-of-screen-readers-using-aria-updated/">Thanks Zoe!</a>)</ins></li>
<li>What one thing can I do as a web developer to my sites and apps that dramatically improves the UX for disabled users</li>
<li>How do some of these features work? What are they for? A demonstration of how each feature makes an impact or gets used by a user would be most helpful (e.g. how do focus rings work?).</li>
</ul>


<h4>Screenreaders &amp; browsers</h4>

<p>Also, I&#8217;m not quite sure how everyone else feels, but from here it feels like yelling at a fucking brick wall with JAWS and Window Eyes. We just kinda hope and pray their support for things improve. As a pragmatic approach, I tell developers that if it works in NVDA, good enough. We have a mess of browsers we need to support already, dealing with ATs that lag years behind is not at all feasible.</p>

<p>A lot of developers do not understand that accessibility first comes from implementing the platform accessibility API by browsers such that screen readers can take advantage of the rendering. Most operating systems expose an API that allows browsers to map what is rendered on the screen to one of the interfaces that the operating system&#8217;s accessibility API exposes.</p>

<p><img src="http://paulirish.com/wp-content/uploads/2012/05/stairs-ramp.jpg" alt="A series of stairs and a ramps interleaving between them" /></p>

<p>Unfortunately, there has been no specification, so each browser has been left to do whatever it wants in terms of defining the relationship between a HTML element and the accessibility interface. Hopefully this will change  with the <a href="http://dvcs.w3.org/hg/html-api-map/raw-file/tip/Overview.html">HTML to Platform Accessibility API implementation guide</a> and ensure each browser exposes each element consistently to the Platform Accessibility API.</p>

<p>Which shores up a greater concern: Better accessibility starts with the browser (and the platform). Browsers should be able to handle content loaded dynamically rather than expecting developers to do it for them. If content on a page that is displayed is altered, it needs to be noted to the accessibility api transparently instead of having developers bolt on extra markup to do so.</p>

<p>Accessibility should not be opt-in but opt-out.</p>

<p><small> This post is a elongated version of the comment I left on Karl Grove’s  <a href="http://www.karlgroves.com/2011/06/16/barriers-to-improving-the-accessibility-game-plan/">Barriers to improving the
accessibility game plan</a>. It was probably the best post on a11y I’ve ever
read. I <strong>really</strong> liked his approach in evolving the a11y strategy and
left my thoughts.</p>

<p>Thanks to Divya Manian for her thoughts and words on this post. Thanks to Jason Kiss for reviewing drafts.</small></p>

<div update>June 1: Added link to freshly published <a href="http://webaim.org/projects/screenreadersurvey4/">WebAIM survey results 2012</a>. I encourage you to read the whole thing, as it&#8217;s a fascinating view into an audience we have challenges understanding.</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Talk: Tooling &amp; The Webapp Development Stack]]></title>
    <link href="http://paulirish.com/2012/talk-tooling-the-webapp-development-stack/"/>
    <updated>2012-05-01T09:57:00-07:00</updated>
    <id>http://paulirish.com/2012/talk-tooling-and-the-webapp-development-stack</id>
    <content type="html"><![CDATA[<p>One of the things I recognize at Google is how productive developers surround themselves with powerful tools for iterative development and debugging. For us front-end developers, the ecosystem of tools has exploded in the past two years, as we have a lot more software and libraries beyond Firebug and jQuery to help us build webapps. In the talk below I walk through the current ecosystem of tools and how they can make your development experience a more enjoyable one.</p>

<iframe src="http://player.vimeo.com/video/40929961?byline=0&amp;portrait=0&amp;color=ff0179" frameborder="0" width="600" height="337"></iframe>


<p>My slides:
<a href="http://dl.dropbox.com/u/39519/talks/tooling-q1/index.html">
<img src="http://paulirish.com/wp-content/uploads/2012/05/toolingappstackss.jpg" alt="" width="450" />
</a></p>

<p>Because there are so many tools around, I wanted to break them down somehow. I think contextualizing the tools as to what phase of development that assist with works well:</p>

<p><img src="http://dl.dropbox.com/u/39519/talks/tooling-q1/timeline.png" alt="" width="500" /></p>

<p><small>(You could think of the Y-axis here as the amount of code in a project..)</small></p>

<p>Looking at our tools this way we end up with:</p>

<ul>
    <li>Boilerplate
    <ul><li>You likely start a project with more than a single blank text file.</li></ul></li>
    <li>Authoring Abstractions
<ul><li>CSS preprocessors, Languages that transpile to JS, Templating</li></ul></li>
    <li>Frameworks and Application Stack
<ul><li>Clientside MVC, UI Components, Widgets</li></ul></li>
    <li>Iteration Workflow
<ul><li>Browser Devtools, Browser/Unit/Integration Testing</li></ul></li>
    <li>Performance Tuning
<ul><li>Profiling, Memory mgmt, browser instrumentation</li></ul></li>
    <li>Build &amp; Optimization
<ul><li>Minifiers, Concat, Image compression&#8230;</li></ul></li>
    <li>Deploy
<ul><li>Continuous Integration, Continuous deployment</li></ul></li>
</ul>


<p>I&#8217;ve been thinking a lot about workflow and integrating these tools together. Screencasts like <a href="http://tarantsov.com/blog/2012/02/sublime-text-workflow-that-beats-coda-and-espresso/">Andrey Tarantsov&#8217;s Sublime Text Workflow</a> really excite me and I&#8217;m eager to see more people exploring a robust development setup.</p>

<div update>2012.05.16: Mr Jon Kemp wrote up an outline of my talk with all the links, for easy clickability: <a href="https://gist.github.com/2713513">https://gist.github.com/2713513</a> </div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Vendor prefixes are not developer-friendly]]></title>
    <link href="http://paulirish.com/2012/vendor-prefixes-are-not-developer-friendly/"/>
    <updated>2012-03-04T23:06:00-08:00</updated>
    <id>http://paulirish.com/2012/vendor-prefixes-are-not-developer-friendly</id>
    <content type="html"><![CDATA[<p>or&#8230; <h4 class="c6 c16"><span>The premise of prefixes makes unrealistic demands on how developers maintain sites</span></h4></p>

<p class="c2"></p>




<p class="c6"><span>There&#8217;s a lot of conversation about making prefixes work (by changing policy), but I believe they already are at odds with the developer workflow. In this proposal I hope to show that:</span></p>




<ol class="c21" start="1">
    <li class="c10 c6"><span>prefixes are not developer-friendly</span></li>

    <li class="c6 c10"><span>recent features would have been in a much better state without prefixes</span></li>

    <li class="c10 c6"><span>im</span><span>plementor maneuverability is not hampered without prefixes</span></li>
</ol>




<h2 class="c6"><a id="h.rt53c7dxmrwu" name="h.rt53c7dxmrwu"></a><span>The developer experience</span></h2>




<p class="c2"></p>




<p class="c6"><span>If I&#8217;m using a feature that&#8217;s prefixed, I have a choice of using a tool to help me manage outputting the various prefixes I need or I&#8217;ll do it myself. &nbsp;Based on my</span> <span class="c3"><a class="c7" href="http://gopollgo.com/vendor-prefixes-dot-how-do-you-deal-with-them">informal poll last week</a></span><span>&nbsp;it looks like 40% of developers are not using tools. Without tool usage, authors are not including</span> <span class="c4">-ms-, -o-</span> <span>or the unprefixed variants.</span> <span class="c3"><a class="c7" href="https://bug708406.bugzilla.mozilla.org/attachment.cgi?id=579826">Page 4 of Mozilla&#8217;s prefix report</a></span><span>&nbsp;verifies this; developers don&#8217;t write necessary prefixed properties about half the time (e.g. -o-transform) and in fact, they already write out the unprefixed variant well before the spec goes to CR (and do this well before adding in</span> <span class="c4">-ms-</span><span>&nbsp;or</span> <span class="c4">-o-</span><span>&nbsp;compatibility).</span></p>




<figure>

    <a href="https://bug708406.bugzilla.mozilla.org/attachment.cgi?id=579826"><img height="195" src="http://paulirish.com/wp-content/uploads/2012/03/image00.jpg" width="525"></a>
    <figcaption><span class="c0">Data summarizing prefixes’ failure with developers [</span><span class="c3 c0"><a class="c7" href="https://bug708406.bugzilla.mozilla.org/attachment.cgi?id=579826">Mozilla&#8217;s prefix report</a></span><span class="c0">, page 4]</span></figcaption>
</figure>




<p class="c6"><span>This matches my experience as well. I don&#8217;t want to return to this code to maintain it, so I&#8217;m going to add the unprefixed version. There is less of a cost to me leaving the unprefixed version and assuming I won&#8217;t need to change it vs. returning to my CSS of shipped-to-production work to add unprefixed variants each time a feature hits CR.</span></p>




<p class="c2"></p>




<p class="c6"><span>Any successful evangelization plan for prefixes relies on tools, but all tools prioritize the unprefixed state.</span> <span class="c3"><a class="c7" href="http://leaverou.github.com/prefixfree/">prefix-free</a></span><span>,</span> <span class="c3"><a class="c7" href="http://compass-style.org/reference/compass/css3/shared/#mixin-experimental"> compass</a></span><span>,</span> <span>and</span> <span class="c3"><a class="c7" href="http://paulirish.com/2010/introducing-css3please/">css3 please</a></span><span>&nbsp;</span><span class="c0">(I&#8217;m a tool vendor, too)</span> <span>all</span><span>&nbsp;heavily suggest starting with the unprefixed state. So any successful evangelization push will just result in the unprefixed version being 100% deployed from the get-go, which ties implementors hands anyway and defeats the purpose of the prefix. I don&#8217;t have data to show that developers are not returning to their deployed, production code to update prefixes, but anecdotal evidence suggest so. Opera’s Web Opener team, for example, reports a &lt;10% success rate when directly</span> <span>contacting</span><span>&nbsp;sites to request updates to their prefixes.</span></p>




<p class="c2"></p>




<p class="c6"><span>PPK</span> <span class="c3"><a class="c7" href="http://www.quirksmode.org/blog/archives/2012/02/the_vendor_pref.html">wrote</a></span><span>&nbsp;“If standards make web developers’ lives much harder, web developers ignore standards. This was true back in 1998, it’s still true today.” Without prefixes, implementors have an opportunity to empower developers to do the right thing while still allowing room for innovation.</span></p>




<h2 class="c6"><a id="h.cvtlte27jiti" name="h.cvtlte27jiti"></a><span>Existing W3C prefix policy provides false expectations</span></h2>




<p class="c6"><span class="c3"><a class="c7" href="http://www.quirksmode.org/blog/archives/2012/02/vendor_prefix_p.html">PPK covered this ground well</a></span><span>&nbsp;last week, but in short the policy of binding prefix-drop to CR has failed plenty. Developers have no expectation of when this will happen, nor should they.</span><span>&nbsp;</span><span class="c3"><a class="c7" href="http://webcache.googleusercontent.com/search?q=cache:MaHFQ3cI7OUJ:robert.ocallahan.org/2012/02/alternatives-to-supporting-webkit.html+&amp;cd=1&amp;hl=en&amp;ct=clnk&amp;gl=us">Mozilla’s roc has confirmed</a></span><span>&nbsp;</span><span>developers are using prefixes and they won&#8217;t stop regardless of their supposed &#8220;experimental&#8221; status.</span></p>




<h2 class="c6"><a id="h.jruvgsvd5z3c" name="h.jruvgsvd5z3c"></a><span>Let’s</span><span>&nbsp;imagine there were no prefixes</span></h2>




<p class="c6">So without prefixes, vendors hands would be tied and the first implementation to ship would be the one to stick, right? Nah. I think we can <span>walk through</span><span> a few examples from recent history too see what it would have been like if there had been no vendor prefixes in play.</span></p>




<h3 class="c6"><a id="h.ylr2g0jgmml" name="h.ylr2g0jgmml"></a><span>transitions, transforms, animations</span></h3>




<p class="c6"><span>While plenty of implementation bugs were fixed, the developer would never have updated their syntax and would have complete browser support.</span></p>




<h3 class="c6"><a id="h.4g73m4o21qrt" name="h.4g73m4o21qrt"></a><span>box-sizing</span></h3>




<p class="c6"><span>No problems. No changes.</span></p>




<h3 class="c6"><a id="h.ga2jxpaib1kl" name="h.ga2jxpaib1kl"></a><span>css-gradients</span></h3>




<p class="c6"><span>Gradients has been the most tumultuous css spec, but if they had been implemented without prefixes, the feature would be in a better situation today.</span></p>




<p class="c2"></p>




<p class="c6"><span>Browsers discard properties and values they don’t parse successfully, so developers would have just included a cascade of the iterations of the spec. This would have successfully targeted all shipped versions of gradients:</span></p>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='css'><span class='line'><span class="nc">.blacktowhite</span> <span class="p">{</span>
</span><span class='line'>  <span class="k">background-image</span><span class="o">:</span> <span class="n">gradient</span><span class="p">(</span><span class="n">linear</span><span class="o">,</span> <span class="k">left</span> <span class="k">top</span><span class="o">,</span> <span class="k">left</span> <span class="k">bottom</span><span class="o">,</span> <span class="n">from</span><span class="p">(</span><span class="nb">black</span><span class="p">)</span><span class="o">,</span> <span class="n">to</span><span class="p">(</span><span class="nb">white</span><span class="p">));</span> <span class="c">/* initial webkit proposal */</span>
</span><span class='line'>  <span class="k">background-image</span><span class="o">:</span> <span class="n">linear</span><span class="o">-</span><span class="n">gradient</span><span class="p">(</span><span class="k">top</span><span class="o">,</span> <span class="nb">black</span><span class="o">,</span> <span class="nb">white</span><span class="p">);</span> <span class="c">/* mozilla proposal */</span>
</span><span class='line'>  <span class="k">background-image</span><span class="o">:</span> <span class="n">linear</span><span class="o">-</span><span class="n">gradient</span><span class="p">(</span><span class="n">to</span> <span class="k">bottom</span><span class="o">,</span> <span class="nb">black</span><span class="o">,</span> <span class="nb">white</span><span class="p">);</span> <span class="c">/* likely the CR */</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>




<h3 class="c6"><a id="h.c5at201o11iy" name="h.c5at201o11iy"></a><span>f</span><span>lexbox</span></h3>




<p class="c6"><span>Mozilla started Flexbox v1, WebKit followed with a slightly stronger implementation. Both Alex Russell (</span><span class="c3"><a class="c7" href="http://infrequently.org/2009/08/css-3-progress/">post</a></span><span>) and I (</span><span class="c3"><a class="c7" href="http://www.html5rocks.com/en/tutorials/flexbox/quick/">article</a></span><span>) recommended boilerplate code that assumed no change for unprefixed state and blocked out</span> <span class="c3"><a class="c7" href="http://samples.msdn.microsoft.com/ietestcenter/#css3flexbox">IE10’s upcoming implementation</a></span><span>. &nbsp;</span></p>




<p class="c2"></p>




<p class="c6"><span>Flexbox v2 debuted and has an implementation in Chrome. Syntax is already different enough that the fallback story is happy. Without prefixing, the resulting browser support of shipped author code would be better. Again, I see no drawbacks in this example had these properties not been prefixed.</span></p>




<h3 class="c6"><a id="h.uydsa7iza1af" name="h.uydsa7iza1af"></a><span>requestAnimationFrame</span></h3>




<p class="c6"><span>Soon after this feature debuted,</span> <span class="c3"><a class="c7" href="http://paulirish.com/2011/requestanimationframe-for-smart-animating/">shims were written</a></span><span>&nbsp;to manage all prefixed implementations including the unprefixed state. &nbsp;(Sorry). Combined with quick adoption, browser &nbsp;have as much ability to change the feature as they would if it were unprefixed to start (that is, not much ability).</span></p>




<h2 class="c6"><a id="h.virs3o2io31f" name="h.virs3o2io31f"></a><span>Risks and Resolutions</span></h2>




<p class="c6"><span>In CSS, new breaking changes have to introduce syntax changes that would break previous parsing attempts, as seen in the gradients example. However, if the semantics of a feature changed without syntax changes, we’d have a situation where developers are forced to detect each behavior and write compatibility code.</span></p>




<p class="c2"></p>




<p class="c6"><span class="c4">border-image</span><span>&nbsp;introduced a similar situation recently: WebKit changed its semantics and required a `fill` keyword to match previous behavior. Sounds like trouble, but this change happened when the unprefixed variant was exposed, matching implementor best practices of changing a feature. The result: Greg Rewis of Adobe</span> <span class="c3"><a class="c7" href="http://blog.assortedgarbage.com/2011/12/change-happens/">blogging that Chrome broke his site</a></span><span>. 

This is truly how it is supposed to work, but still expectations are broken. Developers have plenty of motivation to leave in the unprefixed state at the beginning, but this means that any change will always break them. With prefixes or without prefixes, we would have gotten the same resolution here.</span></p>




<p class="c6"><span>In JavaScript/DOM we have a more secure safety net, as behavior can be detected. Take for example</span> <span class="c4">querySelectorAll()</span><span>; it was shipped without prefix and while implementation differences exist, JavaScript libraries</span> <span class="c3"><a class="c7" href="https://github.com/dperini/nwmatcher/blob/178bad9043/src/nwmatcher.js#L316-355"> detect and route around them</a></span><span>. Of course, semantics can change and the prefix → unprefix move provides an opportunity, but in my experience it’s more common to see these changes happen early on (like</span> <span class="c3 c4"><a class="c7" href="https://groups.google.com/a/chromium.org/group/chromium-html5/browse_thread/thread/2c963f6ecdae0573?pli=1"> blob.slice()</a></span><span class="c3"><a class="c7" href="https://groups.google.com/a/chromium.org/group/chromium-html5/browse_thread/thread/2c963f6ecdae0573?pli=1">’s change</a></span><span>).</span></p>




<p class="c2"></p>




<p class="c6"><span>Without prefixes there will be no mechanism to notify developers “beware, thar be dragons!”. Prefixes don’t do this now, as their removal isn’t prioritized so developers accept them as a fact of life rather than an indication of instability. &nbsp;The solution: getting accurate metrics of feature usage and adoption can inform implementors of if it’s too late to change a feature or still early enough to modify. &nbsp;</span></p>




<h2 class="c6"><a id="h.lwonm0v1qh5p" name="h.lwonm0v1qh5p"></a><span>Yes, but&#8230;</span></h2>




<p class="c6"><span>As vendor prefixing is a well-worn debate, allows me to deflect common challenges to this proposal to:</span></p>




<ol class="c9" start="1">
    <li class="c10 c6"><span class="c3"><a class="c7" href="http://hsivonen.iki.fi/vendor-prefixes/#rebuttal">Vendor Prefixes Are Hurting the Web</a></span><span>&nbsp;by Henri Sivonen (see “Pre-Emptive Rebuttal to the Most Common Counter-Arguments” and on)</span></li>

    <li class="c10 c6"><span class="c3"><a class="c7" href="http://webcache.googleusercontent.com/search?q=cache:MaHFQ3cI7OUJ:robert.ocallahan.org/2012/02/alternatives-to-supporting-webkit.html+&amp;cd=1&amp;hl=en&amp;ct=clnk&amp;gl=us"> Alternatives To Supporting -webkit Prefixes In Other Engines</a></span> <span>by Robert O’Callahan</span></li>

    <li class="c10 c6"><span class="c3"><a class="c7" href="http://www.quirksmode.org/blog/archives/2010/03/css_vendor_pref.html">CSS vendor prefixes considered harmful</a></span><span>&nbsp;by PPK (from 2010)</span></li>
</ol>




<h2 class="c6"><a id="h.3rdo0i7r5wqu" name="h.3rdo0i7r5wqu"></a><span>Logical</span> <span>Actions</span></h2>




<ol class="c9" start="1">
    <li class="c10 c6"><span class="c3">The community to evangelize use of tools</span><span>&nbsp;like <a href="http://compass-style.org/">Compass</a> that protect authors from bad authoring practices and so folks who publish tutorials don&#8217;t solely define their <code>-webkit-</code> styles.</span></li>

    <li class="c10 c6"><span>Browsers to track feature adoption to inform better decision-making around changes. (Answering the question: Are we stuck?) </span>

     <ul class="c8" start="1">
<li>This data should be public and update regularly.</li>
            <li class="c6 c11"><span>Should be based on pageviews, to accurately weigh when a CNN.com implements something</span></li>
        </ul>

</li>

    <li class="c10 c6"><span>Other browsers to implement a defined set of <code>-webkit-</code> prefixes on their mobile browsers. I don’t see a way around this nor do I think it’s bad.</span></li>
   <li>Drop the notion that evangelism gets us out of this mess. I&#8217;ve been doing this evangelism myself for the past 3 years, but I&#8217;m also a realist. This situation needs new policy and (clearly) needs speed out of the CSS WG. 
    <li class="c10 c6"><span>Browsers to clarify a</span> <span class="c3"><a class="c7" href="https://docs.google.com/present/view?id=ajdqczcmx5pv_148ggbxbfg2">feature detection strategy</a></span><span>&nbsp;that it supports. For example, developers have no reliable way of detecting</span> <span>Chrome’s 3D transforms support</span> <sup> <span class="c12">[</span><span class="c3 c12"><a class="c7" href="http://code.google.com/p/chromium/issues/detail?id=104687">1</a></span><span class="c12">,</span> <span class="c3 c12"><a class="c7" href="http://code.google.com/p/chromium/issues/detail?id=92509">2</a></span><span class="c12">]</span></sup><span>&nbsp;or discounting Chrome’s</span> <span class="c4">-webkit-hyphens</span> <span>false positive</span><span class="c12">[</span><span class="c3 c12"><a class="c7" href="http://code.google.com/p/chromium/issues/detail?id=107111">3</a></span><span class="c12">]</span><span>. All proposals for handling experimental properties need accurate feature detection techniques to be effective.</span></li>

</ol>


<p>In summary, the ideal developer experience is 1) using tools to manage prefixes and 2) always using the unprefixed state to reduce maintenance cost. These two facts eviscerate the benefits that prefixes were introduced for, leaving only the drawbacks.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[* { box-sizing: border-box } FTW]]></title>
    <link href="http://paulirish.com/2012/box-sizing-border-box-ftw/"/>
    <updated>2012-02-01T09:11:00-08:00</updated>
    <id>http://paulirish.com/2012/star-{-box-sizing-border-box-}-ftw</id>
    <content type="html"><![CDATA[<p><a href="http://css-tricks.com/box-sizing/"><img src="http://css-tricks.com/wp-content/uploads/2010/09/widthbox.png" align=right width=133></a>One of my least favorite parts about layout with CSS is the relationship of width and padding. You&#8217;re busy defining widths to match your grid or general column proportions, then down the line you start to add in text, which necessitates defining padding for those boxes. And &#8216;lo and behold, you now are subtracting pixels from your original width so the box doesn&#8217;t expand.</p>

<p>Ugh. If I say the width is 200px, gosh darn it, it&#8217;s gonna be a 200px wide box even if I have 20px of padding. So as you know, this is NOT how the box model has worked for the past ten years. Wikipedia has a great <a href="http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug#Background">history of this box model</a>. <ins><a href="http://www.jefftk.com/news/2012-02-18.html">Jeff Kaufman also dove into the history</a></ins></p>

<p><i>Anyway</i>, I have a recommendation for your CSS going forward:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='css'><span class='line'><span class="c">/* apply a natural box layout model to all elements */</span>
</span><span class='line'><span class="o">*</span> <span class="p">{</span> <span class="o">-</span><span class="n">moz</span><span class="o">-</span><span class="n">box</span><span class="o">-</span><span class="n">sizing</span><span class="o">:</span> <span class="k">border</span><span class="o">-</span><span class="n">box</span><span class="p">;</span> <span class="o">-</span><span class="n">webkit</span><span class="o">-</span><span class="n">box</span><span class="o">-</span><span class="n">sizing</span><span class="o">:</span> <span class="k">border</span><span class="o">-</span><span class="n">box</span><span class="p">;</span> <span class="n">box</span><span class="o">-</span><span class="n">sizing</span><span class="o">:</span> <span class="k">border</span><span class="o">-</span><span class="n">box</span><span class="p">;</span> <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>This gives you the box model you want. Applies it to all elements. Turns out many browsers already <a href="http://paulirish.com/wp-content/uploads/2011/gplus-boxsizing.html">use border-box for a lot of form elements</a> (which is why inputs and textareas look diff at width:100%;) But applying this to all elements is safe and wise.</p>

<h4>Browser support</h4>


<p>Due to browser support, this recommendation is only for projects that support IE8 and up. (<a href="https://developer.mozilla.org/En/CSS/Box-sizing#Browser_compatibility">Full browser compat at MDN</a>) Firefox <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=243412">still needs</a> the <code>-moz-</code> prefix, and &lt;= iOS4, Android &lt;= 2.3 need the <code>-webkit-</code>, but everyone else uses the unprefixed. You can find more info about a box-sizing polyfill for IE6 &amp; 7 at <a href="http://html5please.us/#box-sizing">html5please.us/#box-sizing</a> (which was developed with <code>* { box-sizing: border-box</code>!).</p>

<h4>Is it safe to use?</h4>


<p>Totally. jQuery works pretty great with it <small>(<a href="http://bugs.jquery.com/ticket/11004">except this</a>)</small>. As mentioned, browser support is excellent. And a number of projects use this layout model by default, <a href="http://code.google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/inspector/front-end/inspectorCommon.css&type=cs&l=28">including the WebKit Web Inspector</a> (aka Chrome DevTools). I heard from Dutch front-end developer Yathura Thorn on his experience:</p>

<blockquote><p>We&#8217;ve been using <code>*{box-sizing: border-box;}</code> in one of my projects (deployed in production, averaging over 1mln visits a month) at work for about a year now, and it seems to be holding up just fine. The project has been tested in IE8 &amp; 9 and the latests Firefox and Chrome versions and we&#8217;ve had no problems. All jQuery (+UI) offset calculations and animations run fine, even in any element we&#8217;ve displayed as inline-block. As of late we&#8217;ve started testing the project on mobile devices (iPhone, iPad and Android) and we&#8217;ve had no issues regarding box-sizing with any of them yet, so it seems to work just fine.</p></blockquote>

<p>One of my favorite use-cases that border-box solves well is columns. I might want to divide up my grid with 50% or 20% columns, but want to add <code>padding</code> via px or em. Without CSS&#8217;s upcoming <code>calc()</code> this is impossible&#8230; unless you use border-box. So easy. :) Another good one is applying 100% width and then wanting to add a padding to that element.</p>

<h4>Performance</h4>


<p><small>Lastly on <a href="http://twitter.com/miketaylr">@miketaylr</a>&#8217;s inquiry, I also tested perf overhead. <a href="https://docs.google.com/spreadsheet/ccc?key=0ArK1Uipy0SbDdDJSdGRjdEY0dWc0bGE4Y3huUWNIUmc">Anecdotal evidence</a> suggests border-box isn&#8217;t significant.</small></p>

<p>You might get up in arms about the universal <code id="starperf"><em></code> selector. Apparently you&#8217;ve heard its slow. Firstly, it&#8217;s not. It is as fast as <code>h1</code> as a selector. It can be slow when you specifically use it like <code>.foo > </em></code>, so don&#8217;t do that. Aside from that, you are not allowed to care about the performance of * unless you concatenate all your javascript, have it at the bottom, minify your css and js, gzip all your assets, and losslessly compress all your images. If you aren&#8217;t getting 90+ Page Speed scores, it&#8217;s way too early to be thinking about selector optimization. See also: <a href="http://calendar.perfplanet.com/2011/css-selector-performance-has-changed-for-the-better/">CSS Selector Performance has changed! (For the better)</a> by Nicole Sullivan.</p>

<p>So&#8230; enjoy and hope you&#8217;ll find this a far more natural layout model.</p>

<div update>2012.06.25: Adding the following section. </div>




<h4 id="thirdparty">Adjustments for Third Party Content</h4>


<p>Any third party widgets add content directly into the page may need extra attention. Any widgets inside an iframe (like Disqus&#8217;s new theme) are naturally insulated from the parent page&#8217;s layout styles. If you need to make adjustments to the third party content you can apply <code>box-sizing: content-box;</code> to the widget and its descendants. This may not be trivial as form controls in particular are border-box by default, so you&#8217;ll also have to account for that.</p>

<div update>02.01.2012: Added a section on performance

2012.02.03: Included webkit prefixed property and usecase of a 100% width box.

2012.02.22: Added link to Jeff Kaufman&#8217;s history page.
</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Moving The Web Forward]]></title>
    <link href="http://paulirish.com/2011/moving-the-web-forward/"/>
    <updated>2011-12-03T19:33:00-08:00</updated>
    <id>http://paulirish.com/2011/moving-the-web-forward</id>
    <content type="html"><![CDATA[<p><a href="http://movethewebforward.org/"><img src="http://paulirish.com/wp-content/uploads/2011/12/mwf-ss.jpg"></a></p>

<p>This Wednesday, me and a ragtag team of like-minded developers launched <a href="http://movethewebforward.org/">Move the Web Forward</a>, an initiative to direct people&#8217;s passions into productive efforts that assist not only the web community but the entire web platform. People often feel the need to &#8220;give back&#8221;, but when it comes to contributing it&#8217;s a challenge to find the right place. This is something I&#8217;ve seen happen firsthand in the jQuery and HTML5 Boilerplate communities.</p>

<p>The MWF effort was inspired by <a href="https://twitter.com/dglazkov/status/20215500109778944">a tweet</a> by WebKit extraordinaire Dimitri Glazkov.</p>

<div class='embed tweet'><blockquote class="twitter-tweet"><p>If you want to help out with Web standards, you could wear a blue beanie once a year. Or you could start hacking on WebKit/Gecko.</p>&mdash; Dimitri Glazkov (@dglazkov) <a href="https://twitter.com/dglazkov/status/20215500109778944">December 29, 2010</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>


<p>Me and <a href="http://twitter.com/divya">Divya</a> started brainstorming on <a href="https://etherpad.mozilla.org/igotmybeanie">an etherpad</a>. We rounded up some folks on Google+ and IRC and started collecting a lot of excellent resources. Soon after a design was in the making and we started working in an open repo on github&#8230;</p>

<p>At this point, I want to call out Mat Marquis aka <a href="http://twitter.com/wilto">@wilto</a>, in particular, for really taking early ownership of this project and spearheading the design and frontend development. His efforts really made the site communicate its content effectively.</p>

<p>Naturally the site is on github <a href="https://github.com/h5bp/movethewebforward">if you&#8217;d like to contribute</a>. We have a few <a href="https://github.com/h5bp/movethewebforward/issues">issues open</a> that we&#8217;ll be improving the site with. <small>(Also, let me just say for projects like this, a <code>cron</code> job to pull latest from Github makes for such a relaxing workflow.)</small></p>

<p>Thanks to Divya, Mat, <a href="http://twitter.com/aaronforsander">Aaron Forsander</a>, <a href="http://twitter.com/c_t_montgomery">Connor Montgomery</a>, <a href="http://twitter.com/stefsull">Stephanie Rewis</a> (<a href="http://www.webstandards.org/2011/11/30/beyond-the-blue-beanie/">great writeup!)</a>, <a href="http://twitter.com/necolas">Nicolas Gallagher</a>, <a href="http://twitter.com/addyosmani">Addy</a>, and <a href="https://github.com/h5bp/movethewebforward/contributors">all these awesome folk</a>. Truly a socially developed site; everyone collaborating on IRC, etherpad and github (with as many having commit rights as possible). Fun project to work on and I hope to see everyone find the right place for them to get more involved in actively making the web as awesome as you want it to be.</p>

<div update>2011.12.02: #movingwebforward in action!</div>


<p>Beyond all the people who signed up (with the avatars) on the site to commit to things.. We&#8217;ve seen some moves in the community already:</p>

<ul><li>Ben Schwarz is <a href="http://w3.org/QA/2011/11/ben_schwarz_joining_csswg.html">joining the CSSWG</a> to redesign how specs look and act
<li>Connor Montgomery, <a href="http://bugzil.la/702159">wrote up a patch</a> regarding fullscreen support in Firefox
<li>Josh Adam is <a href="http://joshadam.ca/?p=13">inspired</a> to become better
<li>Alex Ball is going to <a href="http://alexball.tv/blog/out-to-change-peoples-lives/">contribute to BuddyPress</a>
<li>Lots of folks in the <a href="http://www.smashingmagazine.com/2011/11/30/the-smashing-guide-to-moving-the-web-forward-community/">accompanying Smashing Magazine</a> article are ready to dig in.
<li>Colin Gourlay will be <a href="http://blog.colin-gourlay.com/blog/2011/12/moving-the-web-forward/">documenting what he learns</a> more
</ul>


<p><code>\o\ \o/ /o/</code></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Web browser, frontend and standards feeds to follow]]></title>
    <link href="http://paulirish.com/2011/web-browser-frontend-and-standards-feeds-to-follow/"/>
    <updated>2011-11-21T19:57:00-08:00</updated>
    <id>http://paulirish.com/2011/web-browser-frontend-and-standards-feeds-to-follow</id>
    <content type="html"><![CDATA[<p>While a lot of conversation has moved to twitter and G+, hugely useful information is still published regularly to blogs. I&#8217;ve shared collections of frontend development feeds <a href="http://paulirish.com/2008/front-end-development-rss-feeds/">twice</a> <a href="http://paulirish.com/2010/front-end-development-feeds-to-follow/">before</a>. Now I&#8217;m back, but with two choices:</p>

<table><tr><td width="33%" style="vertical-align:top;">
<a href="http://www.google.com/reader/bundle/user%2F11165870484951445324%2Fbundle%2Ffrontend"><img src="http://paulirish.com/i/bc7870.png" style="width: 170px">
Frontend development exploration, techniques, tips. Lots of JavaScript. </a>
<br />
275 feeds. 

<td width="33%" style="vertical-align:top;">
<a   href="http://www.google.com/reader/bundle/user%2F11165870484951445324%2Fbundle%2Ffrontend-standards%2Bbrowsers"><img src="http://paulirish.com/i/c25980.png"  style="width: 170px">
Standards development and browser dev news. </a>
<br />
56 feeds.


<td width="33%" style="vertical-align:top;">
<a   href="http://www.google.com/reader/bundle/user%2F11165870484951445324%2Fbundle%2Ffrontend-webapps"><img src="http://paulirish.com/i/4e0280.png"  style="width: 170px">
Blogs focusing on building large webapps (<strong>new!</strong>) </a>
<br />
22 feeds.

</table>




<br />


<p>It&#8217;s easy to click through and subscribe in Google Reader. There is also OPML files if you want to take &#8216;em elsewhere.</p>

<p><small>Also, a short commentary on blogging vs tweeting.. while a lot of people have changed to twitter+jsfiddle only, tweets are not available via search after 30 days, so if you expect anything you share to last, blog it for real. :)</small></p>

<div update>quick protip: In google reader it&#8217;s best to set Reader to only <b>Show updated</b> (<a href="http://paulirish.com/i/2e8940.png">screenshot</a>), so your left sidebar doesn&#8217;t show feeds with nothing new in &#8216;em. #shouldbedefault</div>




<hr>




<div update>2011.12.02: Adding newsletters!

2012.08.09: Refreshed all the bundles. Added the frontend-webapps feed.</div>


<p>Also please subscribe to these guys which do a great job of highlighting the top stories of the week:</p>

<ul>
      <li><a href="http://javascriptweekly.com/">JavaScript Weekly</a>
    <li><a href="http://web-design-weekly.com/">Web Design Weekly</a>
     <li><a href="http://html5weekly.com/">HTML5 Weekly</a>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The Fundamentals, Primitives and History of HTML5]]></title>
    <link href="http://paulirish.com/2011/primitives-html5-video/"/>
    <updated>2011-11-21T05:39:00-08:00</updated>
    <id>http://paulirish.com/2011/the-fundamentals-primitives-and-history-of-html5</id>
    <content type="html"><![CDATA[<p>Just gave this talk at <a href="http://w3conf.org/">W3Conf</a> about some of the innerworkings of HTML5. Lots of did-you-know and cool insight into how browsers work. 37 minutes long,</p>

<iframe width="600" height="345" src="http://www.youtube.com/embed/WxmcDoAxdoY" frameborder="0" allowfullscreen></iframe>


<p><a href="http://dl.dropbox.com/u/39519/talks/html5-foundation/index.html">The Primitives of the HTML5 Foundation - Slides</a></p>

<p>I do discuss optional start and end tags as well as not quoting your attributes. I concede that these ideas scare the shit out of people. In fact, when I first heard <a href="http://code.google.com/speed/articles/optimizing-html.html">Jens Meiert propose the idea in 2009</a> my brain rejected it.</p>

<p><img src="http://meiert.com/en/upload/2009/07/wdr-3.png" alt="comic by Jens Meiert"></p>

<p> Still, I think many of the markup parsing curiosities that can be frightening only need to be understood by HTML minifiers. Always leave it up to tools to make your frontend payload smaller; you just want the most comfortable and maintainable authoring environment possible.</p>

<p>I shared them in this talk because 1) it can lead to writing more beautiful HTML that is easier to maintain. Leaving off <code>&lt;/li></code>&#8217;s is a good example. 2) I just want people to consider browsers less of a black box of uncertainty. There are rules and specs that define behavior, so once understood you can feel confident relying on a consistent behavior. We certainly don&#8217;t have that consistency across all the web platform, but for these examples you do.</p>

<p>In summary, I&#8217;m not advocating you write more spartan markup if you don&#8217;t want to. But if it makes you feel good, by all means, go at it; you know now how the browsers work.</p>

<p><small>ps. the monkey HTML shirt I wore is from a store in tokyo; solo location. but they also sell on this <a href="http://item.rakuten.co.jp/icefield/c/0000000245/">delightfully overwhelming site</a></small></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Semantics in practice and mapping semantic value to its consumers]]></title>
    <link href="http://paulirish.com/2011/semantics/"/>
    <updated>2011-11-14T10:25:00-08:00</updated>
    <id>http://paulirish.com/2011/semantics-in-practice-and-mapping-semantic-value-to-its-consumers</id>
    <content type="html"><![CDATA[<p>Divya Manian kicked off a good bout of discussion of HTML semantics with her post <a href="http://coding.smashingmagazine.com/2011/11/11/our-pointless-pursuit-of-semantic-value/">Our pointless pursuit of semantic value</a>. It called into question the amount of time we spend on identifying the Right and Best ways of marking up our content while highlighting details of some of the consumers of semantics like assistive technology (AT). Jeremy Keith responded in <a href="http://coding.smashingmagazine.com/2011/11/12/pursuing-semantic-value/">Pursing Semantic Value</a>. I wanted to chime in on Jeremy&#8217;s post so, I&#8217;ve published below my comment from the original post:</p>

<hr style="margin-bottom:30px">


<p>Thanks Jeremy for raising a practical example. This discussion is a tough one as much of HTML5 has clear semantics (nav/header/footer), but then parts have underdeveloped semantic meaning or add confusion to authors.</p>

<p><a rel="nofollow" href="https://gist.github.com/1360458">Jeremy’s gist</a> is a great example, in fact, of a poor time investment in semantics. It ascribes value to the new method of document outlining, which recently sees different styling for h1’s depending on section nesting. Recent browsers do indeed <em>style</em> the h1’s different; but if you actually structure your document as such, you do it to the detriment of your screenreader users: they will either <a rel="nofollow" href="http://www.accessibleculture.org/articles/2011/04/html5-aria-2011/#comment-4">get these h1’s all as top level headlines</a> or a <a rel="nofollow" href="http://www.accessibleculture.org/articles/2011/10/jaws-ie-and-headings-in-html5/">mishmash of heading nesting levels that don’t match any expected behavior</a> <small>(As an aside, this is completely unrelated but if anyone’s curious what CSS it takes to make that new h1 styling work across browsers… <strong><a rel="nofollow" href="https://github.com/cboone/hypsometric-css/blob/ac1e1132e9750f8e46b6be965e6fb4232141d63b/html5/html5-defaults.css#L144-275">feast your eyes on this beauty</a></strong>)</small></p>

<p>Additionally, <code>&lt;hgroup&gt;</code> is <a rel="nofollow" href="http://www.w3.org/html/wg/wiki/ChangeProposals#ISSUE-164:_no_hgroup">on the chopping block</a> and is  <a rel="nofollow" href="http://www.accessibleculture.org/articles/2011/10/jaws-ie-and-headings-in-html5/#comment-4">not supported</a> by JAWS.   Suffice it to say, Now is not a smart time to invest your time understanding the unwieldy <a rel="nofollow" href="http://www.456bereastreet.com/archive/201103/html5_sectioning_elements_headings_and_document_outlines/">document outlining algorithm</a>. <a rel="nofollow" href="http://coding.smashingmagazine.com/2011/11/12/pursuing-semantic-value/comment-page-1/#comment-554677">Luke’s comment</a> digs in deeper to the messy semantic state of the outlining algorithm.</p>

<div class='embed tweet'><blockquote class="twitter-tweet"><p>semantics are hard&#8230;let&#8217;s go shopping and CREATE EPIC SHIT&#8230;</p>&mdash; patrick h. lauke (@patrick_h_lauke) <a href="https://twitter.com/patrick_h_lauke/status/136106781821779968">November 14, 2011</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>


<p>The practicalities of making accessible web content are messy, but important.  The fact that we seem to spend more time on <code>div</code> vs <code>article</code> vs. <code>section</code> than on learning ARIA is a crime. (Furthermore, learning ARIA isn’t complete unless you’re <a rel="nofollow" href="http://zomigi.com/blog/videos-of-screen-readers-using-aria/">listening to the results</a> in a screenreader.)</p>

<p><span id="recommendation">My recommendation:</span> follow the work of <a rel="nofollow" href="http://www.paciellogroup.com/blog/">Steve Faulkner</a> and <a rel="nofollow" href="http://www.accessibleculture.org/articles/">Jason Kiss</a>. These two guys are publishing the only data that illuminates what’s actually happening at the AT level in response to our work. <a rel="nofollow" href="http://www.paciellogroup.com/blog/2011/11/html5-semantics-and-accessibility/">Steve’s comment on this post</a> does a solid job of unraveling this complex topic by showing all the many layers involved: specs, editors, authoring experience, aria, browser impl, screenreader compliance.</p>

<p>Also if you’d like to investigate what’s happening under the covers, I recommend:</p>

<ul>
    <li><a rel="nofollow" href="http://www.w3.org/TR/html-aapi/">HTML to Platform Accessibility APIs Implementation Guide</a> – Understand how HTML elements and attributes map to accessibility APIs</li>
    <li><a rel="nofollow" href="http://www.accessibleculture.org/articles/2011/04/html5-aria-2011/">HTML5, ARIA Roles, and Screen Readers in March 2011</a> –  Implementation of HTML5 elements in screenreaders isn’t perfect yet.</li>
    <li><a rel="nofollow" href="http://www.paciellogroup.com/blog/2010/04/html5-and-the-myth-of-wai-aria-redundance/">HTML5 and the myth of WAI-ARIA redundance</a> –  Will HTML5 make the use of WAI-ARIA in HTML redundant? Definitely not.</li>
    <li><a rel="nofollow" href="http://www.paciellogroup.com/blog/2010/10/jaws-support-for-aria/">JAWS Support for ARIA</a> –  Originally published by Freedom Scientific as a MS Word document. *facepalm*</li>
    <li><a rel="nofollow" href="http://www.html5accessibility.com/">html5accessibility.com</a> –  Also from Steve Faulkner; this research is hugely comprehensive and backs up the examples Divya provided</li>
    <li><a rel="nofollow" href="http://www.delicious.com/paul.irish/aria">delicious.com/paul.irish/aria</a> – My own bookmarks on semantics, aria and accessibility.</li>
</ul>


<p>In summary, I think it’s best to ground our efforts in pursuing semantic value by identifying precisely what the results will be. A fair rule of thumb: when it comes to semantics, if it’s confusing enough for you to ask a question about it, chances are the answer won’t make a realistic difference. Let’s build incredible stuff on this impressive platform and avoid getting mired in semantic inconsequentialities. There’s also room for more author engagement and screen-reader involvement in the standards process regarding these issues; but that’s a large topic I’ll have to save for another day.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[What feature would improve the web?]]></title>
    <link href="http://paulirish.com/2011/what-feature-would-improve-the-web/"/>
    <updated>2011-10-19T15:14:00-07:00</updated>
    <id>http://paulirish.com/2011/what-feature-would-improve-the-web</id>
    <content type="html"><![CDATA[<p>Yehuda Katz and I <a href="https://twitter.com/wycats/status/121345147345711104">recently</a> <a href="https://twitter.com/paul_irish/status/121418057775190016">asked</a> this question on Twitter.</p>

<div class='embed tweet'><blockquote class="twitter-tweet"><p>What is the one browser bug you could fix or feature you could add to significantly improve what you could build on the web?</p>&mdash; wycats (@wycats) <a href="https://twitter.com/wycats/status/121345147345711104">October 4, 2011</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>




<!-- img src="http://paulirish.com/i/2dad10.png" othersrc="http://paulirish.com/i/566c00.png" alt="What is the one browser bug you could fix or feature you could add to significantly improve what you could build on the web?" -->


<p>We&#8217;re very interested in seeing web browsers advance and implement the interests of web developers.</p>

<p>We got a great response (230+ responses). After a triage of the responses, we narrowed down things to a hitlist that jumped out as having no immediate solution and would be great for the platform:</p>

<ul>
    <li>flash capturing keyboard events, cursor</li>
    <li>WYSIWYG form element</li>
    <li>inset text shadow</li>
    <li>css blend modes
<ul>
    <li>usecase: image i want to tint on hover</li>
</ul>
</li>
    <li>Why CORS requires a preflight with cookies disabled</li>
    <li>being able to verify the content sent was the content delivered. Probably via headers &amp; apis useful when deploying for mobile/roaming use or in corporate networks when behind proxies.</li>
    <li>Text Flow or caret(Position/Range)FromPoint</li>
    <li>A unified and publicized set of selectors for styling the shadow dom of input/select/etc. elements</li>
    <li>a way to manipulate asset request urls with js on the client before they go out (for serving responsive imgs, etc).
<ul>
    <li>or media query attributes on image tags</li>
</ul>
</li>
    <li>UIKit for Javascript.
<ul>
    <li>Native UI bindings to JS that remove overhead and layers of HTML+DOM in the way. Sony&#8217;s Trilithium did this by binding HW accelerated scene graph, ala Core Animation. see also <a href="http://www.satine.org/archives/2011/09/27/playstation-web-app/">playstation webapp</a></li>
</ul>
</li>
    <li>render a DOM element to canvas, webgl</li>
    <li>DirectWrite in all browsers on all platforms.</li>
    <li>simulate keyboard and CLICK events</li>
    <li>a base tag for CSS</li>
    <li>Filesystem API limitation: IDE cant save files back to disk in original location</li>
    <li>XHR2</li>
    <li>fragment.innerHTML</li>
</ul>




<hr><hr>


<p>There are a lot more where that came from. A few people wanted to see all the responses&#8230; So.. here you are. :)</p>

<!--more-->


<p><del>Right now they are partially categorized.<a href="https://etherpad.mozilla.org/whatfeaturewouldimprovetheweb"> I&#8217;d love your help with that..</a></del><ins>Thank you SO much to rworth and evan, who organized this list. Awesome :)</ins></p>

<h4 id="broad-and-sweeping">Broad and Sweeping</h4>




<ul>
  <li>a fundamental rethinking of the DOM would be a good start.    ~blrandel</li>
  <li>Get rid of HTML. Make web JavaScript/CSS driven.    ~nextinterfaces</li>
  <li>the standards process    ~sethladd</li>
  <li>Browsers suck. Give us a VM that lets us not care about the browser.   ~rxgx</li>
  <li>the &ldquo;feature&rdquo; that allows browsers to render bad/poorly formed HTML. I want that fixed please.    ~durple</li>
  <li>In a perfect world I&rsquo;d say ditch the DOM and give me a real displaylist-style interface, with a consistent composite architecture.    ~awebneck</li>
  <li>consistent implementation of standards across browsers.    ~BrettBearce</li>
  <li>performance    ~mislav</li>
  <li>Should be ilegal to release a browser that doesn&rsquo;t accomplish all the w3c standards    ~FedePaterno</li>
  <li>web page cloud pre render. Then pipe one asset to the browser. :-)    ~halfcube</li>
  <li>create something that makes ads suck less and do not blocking my page    ~jaydson</li>
</ul>




<h4 id="just-everything-all-of-it-and-then-some">Just Everything, all of it, and then some</h4>




<ul>
  <li>all HTML5 features supported by all browsers.    ~chrisreister</li>
  <li>full html5/css3 support cross browser and signed off specs! #inaperfectworld    ~Japhex</li>
  <li>Better support for html5 and css3 (all browsers and platforms) = less hacks, less vendor prefixes, less js = happier life :)    ~rodrigonoales</li>
</ul>




<h4 id="ie--mixed-browser-support">IE &amp; Mixed Browser Support</h4>




<ul>
  <li>Can I say &ldquo;IE&rdquo;? Or is that joke too overdone already?    ~coreyschram</li>
  <li>as usual, IE is holding everything up. I&rsquo;d like wide support for SVG today.    ~nathan_vaughn</li>
  <li>other browsers to keep up the speed of Chrome&rsquo;s implementation of standards and to auto-update to latest version    ~illyriad</li>
  <li>force update IE.    ~Fallion</li>
  <li>An alternative to animated gifs (apng)! FOR GOD&rsquo;S SAKE!!    ~TechBobOmb</li>
  <li>fast upgrade cycle for IE comparable to Chrome&rsquo;s excellent model, and the dropping of compatibility modes going forwards    ~ffub</li>
  <li>Add support for data:image/png;base64, &hellip; to IE6/7.    ~ndorfin</li>
  <li>sorry, release schedule != update strategy; the latter is what I meant to say. Resubmitting&hellip;    ~jswartwood</li>
  <li>IE&rsquo;s update strategy. Most important feature to add to the Web is an ability to use feature X in reasonable time.    ~jswartwood</li>
  <li>how many people answered with IE?    ~omarqureshi</li>
  <li>Legacy Internet Explorers. Patch them all to autoupdate to IE9+ or a third party engine.    ~joegaffey</li>
  <li>i&rsquo;d fix the &lsquo;Microsoft having a browser&rsquo; bug    ~shanecarmody</li>
  <li>oh yeah ie7,8,9    ~negrond</li>
  <li>ie6    ~negrond</li>
  <li>Advanced CSS3 selectors in IE7 and 8. If I had to choose one it would be nth-child.    ~Chris_Krammer</li>
  <li>if I had the chance to fix one it would be to get rid of IE. :)    ~markbates</li>
  <li>IE    ~samullen</li>
  <li>One browser bug? It&rsquo;s the one people refer to as &ldquo;Internet Explorer.&rdquo; It&rsquo;s a notorious bug. Evil bug.    ~rerouse</li>
  <li>the IE self destruct button!    ~jeremywoertink</li>
  <li>the complete removal of ie 6 and upgrade of everybody to modern browsers    ~Mark_Kellett</li>
  <li>IE6-8    ~manufaktor</li>
  <li>am I allowed to classify everything &lt; IE 10 as a bug?    ~chrisdarroch</li>
  <li>Can the bug be ie?    ~bbommarito</li>
  <li>legacy browsers! And all browsers which don&rsquo;t auto update    ~stefanpenner</li>
  <li>And of course a forceful auto-update of all IE installations to version 9 :)    ~craigpatik</li>
  <li>frequent &amp; transparent update for all browsers like Chrome, more coherence on supported features across browsers    ~xeppelin</li>
  <li>the one browser bug would be to eliminate all versions of IE.    ~stash_tray</li>
  <li>Internet Explorer. &lsquo;nuff said.    ~aviraldg</li>
  <li>Auto upgrade for every browser.    ~ojohnnyo</li>
  <li>regular silent automatic delta updates.    ~simbolo</li>
  <li>Bug fix: Android browser.    ~kylebarrow</li>
  <li>automatic Chrome-like updates (along with actual updates) for IE&hellip;? #nevergonnahappen    ~alexrussell101</li>
  <li>Does killing all IE below 8 count? ;)    ~ryanolson</li>
  <li>I&rsquo;d add a feature to Chrome that &ldquo;accidentally&rdquo; detects IE as a virus and deletes it from the user&rsquo;s machine.    ~wmbenedetto</li>
  <li>chrome!    ~JomGapuz</li>
  <li>That&rsquo;s easy &hellip; it&rsquo;s called Internet Explorer #abug    ~trymbill</li>
  <li>An easier way to communicate with databases? and microsoft deprecate IE6 &amp; 7.    ~Tsouloftas</li>
  <li>Internet Explorer retroactively updating itself    ~MyHeroDevon</li>
  <li>automatic updates for all browsers (ie like chrome). rate of innovation would skyrocket    ~smartalec43</li>
  <li>a browser on Android that auto-updates    ~boblet</li>
  <li>Browser bug to fix? I&rsquo;d say, make every browser with out-of-date rendering instantly bitch-slap the user until they upgrade.    ~J6M8</li>
  <li>to that end, mobile web browsers have terrible documentation on what features they support/don&rsquo;t support.    ~bcardarella</li>
  <li>Silent auto updates for IE. If only there were a way to cut that half life&hellip; #webdeveloperheaven    ~josiahsprague</li>
  <li>I suppose IE is the main reason For not improving my websites.    ~gerherz</li>
  <li>Desktop, the bug I&rsquo;d like fixed is &ldquo;IE&rdquo;    ~ljharb</li>
  <li>Crossbrowsing for christ sick! I wish I can see one day all browsers rendering the sites in the exactly same way once for all!    ~FedePaterno</li>
  <li>I would fix IE6 so it would automatically crash itself as soon as anyone decided to open it.    ~adamholwerda</li>
  <li>Can Internet Explorer be considered a bug or feature I&rsquo;d like to improve&hellip; aka eliminate?    ~JtheBruce</li>
  <li>Android is woefully behind desktop Chrome.     ~andybastable</li>
  <li>&ldquo;the one browser bug&rdquo; = Android.    ~danmux</li>
  <li>Decent HW rendering in Android please    ~danmux</li>
</ul>




<h4 id="authentication--identity--crypto">Authentication / Identity / Crypto</h4>




<ul>
  <li>identity. I hate having to create a username and password.    ~sethladd</li>
  <li>Integrated browser authentication. When&rsquo;s the last time you logged in to a native app?    ~madeofcode</li>
  <li>Identity, in a way that&rsquo;s comprehensible and controllable by the user.    ~johnjoseph</li>
  <li>And w3.org/2011/identity-… will be a great advance too    ~cbullokles</li>
  <li>I wish I didn&rsquo;t have to handle identity and SSL. Let my users sign in with existing credentials, and an assurance of encryption.    ~abackstrom</li>
  <li>a full crypto &amp; authentication stack    ~jarrednicholls</li>
  <li>Add SSL over HTTP (instead of HTTP over SSL) to handle Certificate-based authentication in the application instead of the web server    ~genezys</li>
  <li>secure storage for things like OAuth keys (no more proxies needed)    ~manuel</li>
</ul>




<h4 id="browser-testing">Browser Testing</h4>




<ul>
  <li>A better way to test across browsers and browser versions.    ~jacelevine</li>
</ul>




<h4 id="development-tools">Development tools</h4>




<ul>
  <li>Better memory debugging tools. Like YourKit for JavaScript    ~sethladd</li>
  <li>i&rsquo;d say a built-in vim-style code editor w/ git hooks. maybe&hellip;    ~csanz</li>
  <li>saving changes (js,html,css) made thru google chrome dev tool/firebug directly back into the codebase would be cool.    ~4mo1</li>
  <li>an ssh client integrated into google chrome    ~travisglines</li>
  <li>ability to debug CoffeeScript in the browser would have high impact (ideally with IDE/editor integration during debugging)    ~ltackmann</li>
  <li>Merge firebug&rsquo;s realtime CSS editor with chrome developer tools    ~danielcgold</li>
  <li>combine the IDE and the browser.    ~jwaltonmedia</li>
  <li>Summary of my position — improved native development experience over features that I haven&rsquo;t imagined yet :)    ~justinfrench</li>
  <li>I&rsquo;ve been making use of the 3D CSS3 box model inspector in Dev Tools for a heavy interactive site. Godsend. Thank you dude    ~joecritchley</li>
  <li>a better developer tools for IE, remote debugging for iPad    ~mohsen<em>__</em></li>
  <li>something that will fill in a form while I&rsquo;m testing client side validation, checkout, etc.    ~jwaltonmedia</li>
  <li>UIKit for JavaScript.    ~sandofsky</li>
  <li>And a built-in bandwidth throttler / slow-mo mode.    ~kpk</li>
</ul>




<h4 id="languages">Languages</h4>




<ul>
  <li>I want a new client language. I&rsquo;d love to see browsers switch to bytecode that we can compile other languages down to.    ~michael_tomer</li>
  <li>Browsers that can be scripted in languages other than Javascript. (I know, Native Client is attempting this).    ~suranyami</li>
  <li>The &ldquo;Browser VM&rdquo; should allow us to have multiple language implementations. An expressive bytecode, not minimized JavaScript.    ~twcrone</li>
  <li>a VM one layer below JS (ex, LLVM).. to allow us to start innovating languages that run in the browser. JS is not the end all.    ~igrigorik</li>
  <li>JavaScript always, everywhere. Whatever extra security browsers need to release, so devs can rely on JS always being there.    ~webandy</li>
  <li>the lack of multiple mature programming language inside the browser environment.    ~trek</li>
  <li>Ruby as a scripting language    ~elado</li>
  <li>Sass and Coffeescript built into a browser    ~anthonyshort</li>
</ul>




<h4 id="language-features">Language Features</h4>




<ul>
  <li>a way to know if a JavaScript function is actually meant to return something even if this return value is &lsquo;undefined&rsquo;.    ~_sebastienp</li>
  <li>would love if all browsers supported <strong>noSuchMethod</strong> for some elegant script solutions.    ~KaptajnKold</li>
  <li>If we could actually use some of the new Javascript features&hellip;    ~nicobrevin</li>
  <li>Garbage collection.    ~jayarjo</li>
  <li>operator overloading in #js would ease peoples&rsquo; lives when working on gfx stuff    ~philogb</li>
  <li>Actually fixing altering any built in object&rsquo;s .prototype in general doesn&rsquo;t do horrible things, notably DOM objects.    ~Rory_O</li>
  <li>Fixing Object.prototype erik.eae.net/archives/2005/…    ~Rory_O</li>
  <li>Support for Javascript versions &gt; 1.5 in Chrome and Safari. Specifically: I want to use generators and iterators.    ~jonemo</li>
  <li>decoupling JS parsing from load    ~derSchepp</li>
</ul>




<h4 id="media">Media</h4>




<ul>
  <li>Have the ability to pause/mute all media in all other tabs. ex: Mute google music/pandora tab when I hit play on a youtube vid.    ~JoeSloth</li>
  <li>a solid audio api especially on mobile browsers would be great. Esp. for gaming :)    ~wemakedotcoms</li>
  <li>Easily HTML5 Video and Audio at the moment.    ~webfella</li>
  <li>audio and video input and encoding.    ~dshaw</li>
  <li>more audio/video codecs built in    ~masterkain</li>
  <li>i&rsquo;ll go with html5 audio and video also&hellip;    ~rguarilha</li>
  <li>also being able to know how many simultaneous HTML5 Audio objects you support in the current platform would be great.    ~Fokker680</li>
  <li>If talking about Chrome, video masking with overflow hidden.    ~gerherz</li>
  <li>the state of video delivery in and across the browsers is still quite sad. but not an individual browser issue per se.    ~jerememonteau</li>
  <li>Good audio support for mobile browsers.     ~andybastable</li>
</ul>




<h4 id="html5-forms">HTML5 Forms</h4>




<ul>
  <li>universal support for styleable input types (date/time/range/etc)    ~franksvalli</li>
  <li>A rock solid native WYSIWYG form element. With so much content dev being done online, this is an area that seems really behind.    ~reinink</li>
  <li>file uploads need rethinking.    ~sikander</li>
</ul>




<h4 id="dom">DOM</h4>




<ul>
  <li>a &ldquo;Create&rdquo; event launched when a new dom node is inserted    ~JohnHackworth</li>
  <li>Quietly fail and move on when calling a method on a non-existent object : doc.getElementById(&ldquo;does-not-exist&rdquo;).innerHTML = &hellip;    ~craigpatik</li>
</ul>




<h4 id="keyboard">Keyboard</h4>




<ul>
  <li>Consistent handling of keypress/keydown events across browsers and OSes would be killer.    ~pyrolupus</li>
</ul>




<h4 id="mouse--touch">Mouse / Touch</h4>




<ul>
  <li>gesture events like swipes and flicks built-in as DOM events    ~manuel</li>
  <li>doing touch without listening to three events for each gesture    ~mohsen<em>__</em></li>
  <li>now that comes from a cat avatar: an element that catches the mouse would be awesome for games or panorama viewer    ~Flexi23</li>
</ul>




<h4 id="device-input">Device input</h4>




<ul>
  <li>Media Capture API! 21st century, and we are still limited to the text-only input on the web!    ~matas_petrikas</li>
  <li>Access to the FS, to the devices (camera, sensors, readers, scaners&hellip;), direct access to the GPU (3D and complex calculations)    ~gandazgul</li>
  <li>Device APIs. Accelerometer, camera, contacts, etc.    ~filmaj</li>
  <li>Access to device capabilities from a website. gps, gyro,etc.    ~ivanmarcin</li>
  <li>it will never happen, but support for more native functionality like file system, camera, etc… on mobile    ~bcardarella</li>
  <li>Safe, sandboxed way to communicate with user&rsquo;s hardware (GPU, filesystem, camera, etc.)—but that&rsquo;s already on the way.    ~valueof</li>
  <li><code>&lt;input type="voice"&gt;</code> and <code>&lt;input type="webcam"&gt;</code>    ~TimoKissing</li>
  <li>oh, also, device access! shouldn&rsquo;t need flash to get to the camera and mic.    ~jerememonteau</li>
  <li>device api, the use cases increases significantly on mobile .    ~vivianli</li>
  <li>w3.org/2009/dap/    ~jamespearce</li>
  <li>Device APIs.    ~jamespearce</li>
  <li>Mobile, file inputs = camera access    ~ljharb</li>
</ul>




<h4 id="flash">Flash</h4>


<ul>
  <li>Inconsistent keyboard trap issues, often by Flash content. Causes accessibility issues and annoys me no end     - when in a YouTube video in Firefox, ctrl+t\ctrl+w no longer work for closing\creating tabs, and focus gets stuck in player    ~joechidzik</li>
</ul>




<h4 id="css">CSS</h4>




<ul>
  <li>Ah, forgot something veeeery important: @viewport!    ~derSchepp</li>
  <li>if CSS could do math. Ex) height: 100% - 20px;    ~justindross</li>
  <li>I&rsquo;d like css files to have a &lsquo;root&rsquo; variable where you could set the home directory.    ~davidrhoden</li>
  <li>Implementation of CSS Paged Media. To me this seems to be the missing link of modern technology.    ~Rene_Kriest</li>
  <li>a way to disable, or set the device orientation. PLEASE. We need that.    ~Fokker680</li>
  <li>background image rendering in firefox. I dislike how it needs either a   or text to start rendering the image.    ~joshsager</li>
  <li>CSS Filters    ~derSchepp</li>
  <li>an adaptive image file format.    ~derSchepp</li>
  <li>media queries attrs on base/img tags. Will enable downloading smaller images for smaller screens.    ~yoavweiss</li>
  <li>a way to manipulate asset request urls with js on the client before they go out (for serving responsive imgs, etc). &hellip;which already worked until a couple months ago when browser img prefetching became more aggressive.    ~scottjehl</li>
  <li>The one annoying me at the moment is the landscape rotation bug in Mobile Safari: tinyurl.com/5sr7qkm    ~Pipsqueaks</li>
</ul>




<h4 id="styling">Styling</h4>




<ul>
  <li>CSS blendmodes. div{blendmode:&rsquo;overlay&rsquo;} but also div{background:&rsquo;multiply&rsquo; rgba(0,0,0,.3)} + for div{color:&rsquo;add&rsquo; #fff}    ~mknol</li>
  <li>css blend modes    ~waynethebrain</li>
  <li>blending modes. Like multiply/overlay/etc in PS.    ~gb</li>
  <li>Full support for @ page w3.org/TR/CSS2/page.h…    ~sanbeiji</li>
  <li>I&rsquo;d fix pixel overflow &amp; underflow in IE Chrome &amp; Safari.    ~jon_neal</li>
  <li>this would for me be to not use curvycorners js hacks to get rounded borders to work in IE    ~Iclevettdesigns</li>
  <li>multiple background images.    ~Iclevettdesigns</li>
  <li>A unified and publicized set of selectors for styling the shadow dom of input/select/etc. elements    ~JasonWyatt</li>
  <li>I&rsquo;d like CSS to have an inherit:none feature, especially helpful when you&rsquo;re inheriting from styles you have no control over.    ~JayDWhiting</li>
</ul>




<h4 id="text">Text</h4>




<ul>
  <li>text-stretch. :)    ~jonas_lund</li>
  <li>Proper text anti-aliasing on Chrome. Large type looks awful. Note: IE and FF have this already.    ~andybastable</li>
  <li>Text Flow or caret(Position/Range)FromPoint. I&rsquo;ve spent weeks on columns, text flow, and non-contenteditable wysiwyg, etc.    ~grayrest</li>
  <li>Give me inset text-shadows in all browsers and proper edge antialiasing in Chrome and I&rsquo;m all yours.    ~matthewmorek</li>
  <li>There is some small bug with text sometimes (become lighter a bit, when canvas is loaded to that page).    ~slobodan_</li>
  <li>Kerning and consistent type anti-aliasing across all platforms :)    ~endtwist</li>
  <li>DirectWrite in all browsers on all platforms.    ~H_FJ</li>
</ul>




<h4 id="layout">Layout</h4>




<ul>
  <li>absolute centering of images etc in a given div would be one    ~yemster</li>
  <li>I want rock solid layout. Like flexbox/ms-grid including vertical alignment. Basically, table-layout without the tables.    ~b4nn0n</li>
  <li>Strong finalized layout system. Strong forms support for real apps. HTML CSS JS unreachable for the user. No way to modify pages    ~fpiat</li>
  <li>better CSS layouts. I know it&rsquo;s coming, not fast enough    ~sethladd</li>
  <li>A real layout system :)    ~natecavanaugh</li>
  <li>it shouldn&rsquo;t be so difficult to build columns and vertically center things. Seriously why are these still problematic.    ~nathan_vaughn</li>
  <li>layout. hands down.    ~boblet</li>
  <li>Add sane CSS-based layouts to all browsers.    ~jon_neal</li>
  <li>flexbox everywhere    ~mislav</li>
  <li>Have css3 column-count and width work in all browsers, but revert to a stack in resolutions below multi-column width.    ~J_Grimm_</li>
  <li>position:fixed and overflow:scroll on all desktop and mobile browsers would make my day    ~prundin</li>
  <li>Vertical and &ldquo;middle&rdquo; float. I want to be able to put elements in the middle of other elements, horizontally and vertically.    ~iliadraznin</li>
  <li>My #1 is a simply a better layout system. Flexbox = meh.    ~roblifford</li>
  <li>a box model that programatically closer to an AS3 sprite    ~darrownet</li>
  <li>display:table in IE6    ~SubtleGradient</li>
  <li>Mobile, position: fixed.    ~ljharb</li>
</ul>




<h4 id="wysiwyg--native-rich-text-editor">WYSIWYG / Native rich-text editor</h4>




<ul>
  <li>All contenteditable related madness: commands, generated HTML, and selection API    ~jpscaletti</li>
  <li>more consistent and improved implementation of contenteditable. That would really improve and slim down web based editors.    ~DannySorensen</li>
</ul>




<h4 id="animation">Animation</h4>


<ul>
  <li>Broader hardware-acceleration coverage for the display layer. The richness of native mobile/flash is driven by unflinching 60fps.    ~teej_m</li>
  <li>I want to stop repainting from flickering and screwing with my animations.    ~tdreyno</li>
  <li>Bugfix: Hardware-accelerated DOM manipulation using translate3d on Android Browser.    ~bniswe</li>
  <li>(smooth) #CSS3 animations for ALL browsers!    ~AndrewHenderson</li>
  <li>transition/animate pseudo-elements!    ~jacobdubail</li>
  <li>On Android. Hardware Accelerated CSS Transforms.    ~edwk</li>
  <li>CSS transitions (they&rsquo;re just slow and outclassed by javascript in terms of speed)    ~thijsjacobs</li>
  <li>Decent HW rendering in Android please    ~danmux</li>
</ul>




<h4 id="d-graphics--canvas--svg">2d graphics / Canvas / SVG</h4>




<ul>
  <li>Acceleration/performance on SVG. Also think I found a leak with SVG in Chrome when tabs are hidden (but no repro yet).    ~notmatt</li>
  <li>Faster drawing with 2d canvas context.    ~monteslu</li>
  <li>There is some small bug with text sometimes (become lighter a bit, when canvas is loaded to that page).    ~slobodan_</li>
  <li>Good Canvas support for mobile browsers.     ~andybastable</li>
  <li>canvas.drawWindow. Don&rsquo;t even see why it should be restricted to extensions (except in the case of cross domain content)    ~bgrins</li>
  <li>Sony&rsquo;s Trilithium did this by binding HW accelerated scene graph, ala Core Animation. satine.org/archives/2011/…    ~charlietuna</li>
</ul>




<h4 id="d-graphics--webgl">3d graphics / WebGL</h4>




<ul>
  <li>compressed textures for webgl, and everything else people already said.    ~sethladd</li>
  <li>WebGL support in IE would change a lot when it comes to browser games. For 3D as well as 2D.    ~ippalix</li>
  <li>Good WebGL support for mobile browsers.     ~andybastable</li>
</ul>




<h4 id="web-storage">Web Storage</h4>




<ul>
  <li>Making localStorage infinite size    ~nikolatankovic</li>
  <li>Web storage and offline use is a huge mess, even on latest gecko/webkit    ~alexbosworth</li>
</ul>




<h4 id="history">History</h4>




<ul>
  <li>full acceptance of the History API &amp; Ajax. It&rsquo;s all about user experience.    ~Scottblew</li>
  <li>Make browsers understand previous states so that Ajax and back-btn &amp; bookmaring can be implemented easier/seamlessly.    ~vmasto</li>
</ul>




<h4 id="file-api">File API</h4>




<ul>
  <li>Not easy but (until we&rsquo;re all cloud based), a rich and safe way to write webapps to handle local files too crbug.com/47416 That would let us write webapps to replace all sorts of things that currently have to be desktop apps    ~schmerg</li>
  <li>all browsers need stable and consistent support of the JS File API    ~MeltingIce</li>
  <li>integration with the desktop and OS (file API is one of the first things)    ~dnagir</li>
</ul>




<h4 id="file-uploads">File Uploads</h4>




<ul>
  <li>resumable, managed, async browser based file uploads    ~tilsammans</li>
</ul>




<h4 id="offline--app-cache">Offline / App Cache</h4>




<ul>

  <li>a better app cache API (with improved debugging) stevesouders.com/blog/2011/10/0…    ~alex_gibson</li>

  <li>Web storage and offline use is a huge mess, even on latest gecko/webkit    ~alexbosworth</li>
  <li>app cache that doesn&rsquo;t suck.    ~miketaylr</li>
  <li>Fix network-connection JS events:we have online/offline for hardware but what about netonline/netoffline for Inet traffic tests?    ~adamrmcd</li>
  <li>I&rsquo;m going to +1 application cache. @SlexAxton @miketaylr &amp; @julio_ody    ~benschwarz</li>
  <li>that the offline HTML5 API would give a lot more control over the cache. Not sure that&rsquo;s what you asked though    ~julio_ody</li>
  <li>Firefoxes app cache permission requester    ~derSchepp</li>
</ul>




<h4 id="communication-and-web-sockets">Communication and Web Sockets</h4>




<ul>
  <li>I&rsquo;d vote for some way to do P2P connections, or at least some way of opening arbitrary ports in some secure, sandboxed way.    ~rakesh314</li>
  <li>Websockets&hellip;    ~okinsey</li>
  <li>Secure websockets on all browsers will make creating web apps easier. That is a dream right now.    ~chrisreister</li>
  <li>Uniform websocket support across all browsers.    ~clofresh</li>
  <li>Cross domain xhr (as a new session, without the cookies of the original site)    ~elado</li>
  <li>cross domain xhr, but creating a new session and not sending the original cookies. could save jsonp/proxies.    ~elado</li>
  <li>universal support of push notifications without the browser being open.    ~ChrisLove</li>
  <li>not The Single Bug, but here&rsquo;s one: being able to verify the content sent was the content delivered. Probably via headers &amp; apis. Useful when deploying for mobile/roaming use or in corporate networks when behind proxies.    ~rem</li>
  <li>better support for XHR-2 on mobile. iOS partially supports but barely. in the case of the XHR-2 stuff it replaces the API, with a much less functional API on iOS :( PhoneGap is making the effort, but it needs to act as a polyfill and not a replacement API    ~bcardarella</li>
  <li>cross domain xhr, but creating a new session and not sending the original cookies. could save jsonp/proxies.    ~elado</li>
  <li>if could ask for my last gift to the three wise men I&rsquo;d like peer to peer communication, with WebRTC is close to be here    ~cbullokles</li>
</ul>




<h4 id="desktop--os-integration">Desktop / OS Integration</h4>




<ul>
  <li>more OS integrations (like file upload from iOS, access to camera, cross-platform dragdrop files)    ~mislav</li>
  <li>fullscreen maybe    ~slobodan_</li>
  <li>integration with the desktop and OS (file API is one of the first things)    ~dnagir</li>
  <li>On the desktop: Intents (cross app integration).    ~edwk</li>
</ul>




<h4 id="widgets">Widgets</h4>


<ul>
  <li>Begin supporting the W3C Widget spec.    ~mwbrooks</li>
  <li>I really like the support to w3c widgets included in opera. It helps to package web applications as normal apps    ~cbullokles</li>
  <li>Greater steps towards W3C Widgets    ~mwbrooks</li>
  <li>better encapsulation similar to Mozillas XUL widgets seems like a big one.    ~blrandel</li>
</ul>




<h4 id="browser-extensions">Browser Extensions</h4>




<ul>
  <li>also actual cross-browser extensions APIs and packaging while you&rsquo;re handing out unicorn lollipops.    ~miketaylr</li>
</ul>




<h4 id="browser-ui-app-land">Browser UI (App-land)</h4>




<ul>
  <li>Modifying native context menu.    ~JanKuca</li>
  <li>Access to system-level elements. Buttons, contextual menu, etc. Why can my web app look more like a desktop app?    ~sternmeyer</li>
  <li>Firefox&rsquo;s rogue input styling that differs from all other browsers. Inability to style input elements in general in Firefox.    ~taitems</li>
</ul>




<h4 id="browser-ui-user-land">Browser UI (User-land)</h4>




<ul>
  <li>I usually close browser tabs with shortcuts, the &ldquo;x&rdquo;, is actually a hazard for me. Thankfullly there&rsquo;s command-shift-T to reopen.    ~ckundo</li>
  <li>Showing which of the 30 tabs I have open just started playing that song everyone hates, with some kind of icon/colour change?    ~josscrowcroft</li>
  <li>an option to freeze all non-active tabs and browser instances to gain performance and a disruption free browsing experience    ~tuskali</li>
</ul>




<h4 id="browser-features-out-of-scope">Browser features (out of scope)</h4>


<ul>
  <li>a bit late but still, id include in every browser a feature like &ldquo;safari reader&rdquo; (not as extension) and make width resizeable    ~askoth</li>
  <li>not having web inspector&rsquo;s CSS panel jump to the top of the declaration every time I double-click a rule to make a live change.    ~mklickman</li>
  <li>file:/// in Chrome. But it would never get accepted :p    ~me1000</li>
  <li>better bookmarking. Implement thematic and context sensitive trails the way Vannevar Bush envisioned.    ~mik3cap</li>
  <li>And a built-in bandwidth throttler / slow-mo mode.    ~kpk</li>
</ul>




<h4 id="ummmm">Ummmm</h4>




<ul>
  <li>is this a trick question?    ~webandy</li>
  <li>a troll fix    ~mynameiscolin</li>
  <li>sprinkles!    ~<em>jeanniev</em></li>
  <li>counterweights to balance out the missing goats    ~anthonydispezio</li>
  <li>I would like Backbone.js to be built-in. Just kidding.    ~julio_ody</li>
  <li>Is this question partially inspired by nczonline.net/blog/2011/10/0…?    ~roblifford</li>
  <li>A feature that allows browsers to detect duplicate @wycats tweets.    ~jamespearce</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Browser Market Pollution: IE[x] is the new IE6]]></title>
    <link href="http://paulirish.com/2011/browser-market-pollution-iex-is-the-new-ie6/"/>
    <updated>2011-09-27T08:52:00-07:00</updated>
    <id>http://paulirish.com/2011/browser-market-pollution-ie-x-is-the-new-ie6</id>
    <content type="html"><![CDATA[<p>You may soon be developing for 76 browsers.</p>

<p>(╯°□°）╯︵ ┻━┻</p>

<p>Lemme take a step back&#8230; So it&#8217;s fair to say that for most of us, IE6 has gone the way of the dodo. Good! Now in IE7, we have less CSS issues, working PNGs, but pretty much the exact same JavaScript engine (though faster). IE8 gives a few more goodies (localStorage, postMessage, hashchange event) <strong>that&#8217;ll be nice to use when we retire IE7, but IE8 will be with us for a <em>while</em></strong>.</p>

<p><img src="http://royal.pingdom.com/wp-content/uploads/2011/09/110909-IE9.png" alt="" /></p>

<p>Since Windows XP still accounts for 46.6% of Windows users, IE9+ adoption has a significant upper bound. More: <a href="http://royal.pingdom.com/2011/09/09/how-microsoft-is-handicapping-its-own-web-browser/">How Microsoft is handicapping its own web browser</a> and <a href="http://royal.pingdom.com/2011/06/16/ie9-adoption-is-painfully-slow-google-to-the-rescue/">IE9 adoption is painfully slow. Google to the rescue?</a></p>

<p>IE6 has been a source of pain for… I&#8217;d say four years. IE8 will be a source of pain for the next 9, it appears. You&#8217;re clearly aware that IE9 (and IE10&#8230;) are not available on Windows XP, even though Firefox and Chrome continue to ship versions for that operating system (still 40% of the Windows market), so unless the whole world shells out $79 for an upgraded OS, they won&#8217;t get an upgraded browser, without switching. That&#8217;s terrible, clearly. <strong>But this isn&#8217;t the worst part.</strong> No, no&#8230;</p>

<h4>How many browsers would you like to support?</h4>


<p>Personally, I&#8217;m totally happy supporting the latest version of each of the five browsers. <strong>IE10 will be a very impressive browser</strong>, and the latest releases of Chrome, Firefox, Safari, and Opera are all incredible as well. Supporting the legacy versions is not exactly my idea of a good time, but ya know.. With IE6,7,8,9.. I&#8217;m used to it.</p>

<h4>It&#8217;s about to get worse</h4>


<p>IE looks to be on a yearly release cycle. Great! IE10 out in March-ish.. IE11 a mere 52 weeks after that. (Mind you, Firefox and Chrome are shipping every 6 weeks these days). <strong>But what&#8217;s far more important than shipping frequency, is the browser half-life</strong>.</p>

<blockquote>Products like Windows and Office have a <a href="http://support.microsoft.com/gp/lifepolicy">lifecycle policy</a> that typically runs 10+ years because that’s what these organizations need. As part of Windows, IE honors that 10+ year commitment.

<cite>~<a href="http://blogs.msdn.com/b/ie/archive/2011/06/27/a-browser-for-all-windows-customers-it-s-about-and-not-or.aspx">Dean Hachamovitch</a>, IE Corporate VP</cite></blockquote>


<p>IE9 and IE10 are both scheduled to be sunset (as far as official Microsoft support) in 2020. Since IE8 shipped with Windows 7, we can expect the same death date for it. Yes, IE8&#8217;s death date is 9 years from now. Meanwhile, you won&#8217;t have to worry about supporting Firefox 6 or Chrome 13 in November.</p>

<p><img src="http://paulirish.com/wp-content/uploads/2011/09/browserlineupin20191.jpg" alt="graphic of 1 chrome, 1 firefox, 1 safari, 1 opera, and 10 IEs" /></p>

<p>Extrapolating this, if they maintain the same policy, IE17 be released in 2019, before IE8, 9 and 10 finally die. So in a few years from now, you&#8217;ll be supporting one version of Chrome, one version of Firefox, one of Opera, (probably) one of Safari, and <strong>ten versions of IE</strong>.</p>

<h4>Did I say 10 versions of IE? I meant to say 72.</h4>


<p>72 versions of IE on the wall, 72 versions of IE&#8230; Maybe drinking beer at this point in the post would be a smart move.</p>

<p>So you&#8217;re aware that IE ships with multiple document modes. IE essentially ships with legacy versions of the renderer so that you can upgrade your browser but still see content that was terribly coded and cannot withstand the reality of web development, therefore it needs to be locked into a single version. <a href="http://mike.kaply.com/2011/06/23/understanding-the-corporate-impact/#comment-10632">I worded this differently</a> a bit ago.</p>

<blockquote>We seem to be using this term of “intranet apps” or “internal corporate apps” just as a euphemism for poorly written code.
Consumer facing apps have been handling new and unknown browser versions day in and day out for years. Like Kroc said, “Corporate users should be testing their applications against standards, not browser version numbers.”</blockquote>


<p>So IE9 contains IE8, IE7, and IE5 modes. IE10 contains modes for IE9 and on down the line.</p>

<p>The problem percolates when you come to terms with the fact that many of these modes are not the same as the original browser. For example:</p>

<ul>
    <li>IE8&#8217;s IE7 mode: adds sessionStorage &amp; localStorage,  false positives on a feature test for the hashchange event, <a href="http://blog.pengoworks.com/index.cfm/2009/3/19/Internet-Explorer-8-issues-with-Compatibility-View-and-EmulateIE7">mishandles</a> rowspan, and some <a href="http://blogs.msdn.com/b/ie/archive/2009/03/12/site-compatibility-and-ie8.aspx">other event and attribute differences</a>.</li>
    <li>IE9&#8217;s IE8 mode: <a href="http://twatlr.com/thread/113376848716627968">intermittently</a> false positives on a feature test for inline SVG. <a href="http://yfrog.com/ki9x1cp">Renders CSS differently than true IE8</a>, and is <a href="http://code.google.com/p/ie7-js/issues/detail?id=334">crashier</a> than the real one.</li>
</ul>


<p>These are not browsers with reliable replicated browser versions embedded, these are frankenstein versions that behave unpredictably. <small>(To better understand the internals, the new JScript engine (these days it&#8217;s called Chakra) is used in the compatibility modes, but IE engineers remove features and add bugs to make them &#8220;match&#8221; earlier behavior. Luckily they run at their modern speed, but run with a whitelist of bugs being put in place. MSFT has all reason to keep these compat modes as identical as possible, so we should expect fewer issues in IE10+&#8217;s compat modes.)</small></p>

<p>Of course, there is the matter of what % of market share it takes for you to &#8220;support&#8221; a browser (test against during dev / QA against / customize your experience for).. It&#8217;s possible some of these IE versions won&#8217;t have enough numbers for us to care. Kind of like how we support Firefox 3.6 and 6, but not 4 or 5. (btw, Mozilla <a href="https://groups.google.com/d/msg/mozilla.dev.planning/mvVweF8xQRw/HXcSO8bgkGsJ">will soon pull the lever</a> to prompt 3.6 users to upgrade).</p>

<h4>Where, from here? Do we have solutions?</h4>


<p>All this news isn&#8217;t the best, certainly. What are our options?</p>

<p>Asking your users to upgrade their IE version to the latest? We&#8217;ve been naively doing this for a while now, but we&#8217;ve only been shooting ourselves in the foot. <strong>Without an upgrade policy for IE that takes the web seriously, you can&#8217;t responsibly ask your users to upgrade to the latest IE (the future&#8217;s boat-anchor browser.)</strong></p>

<blockquote><strong>boat-anchor browser</strong> (<em>noun</em>): the browser with enough users and not enough capability, holding back the potential of the web. <sup>[<a title="alex russell coined this term" href="http://infrequently.org/2010/10/ie-8-is-the-new-ie-6/">via</a>]</sup></blockquote>


<p><img src="http://static.arstechnica.com/browsers-july-2011/internet-explorer-transition.png" alt="" />
<img src="http://static.arstechnica.com/browsers-july-2011/chrome-transition.png" alt="" /></p>

<p>IE version pigpile. Chrome&#8217;s <a href="http://www.conceivablytech.com/9349/business/rapid-release-process-dissected-google-is-winning-the-browser-war">silent auto-updates</a> (charts via <a href="http://arstechnica.com/web/news/2011/08/july-browser-stats-windows-xp-loses-its-majority-share-of-web-users.ars">arstechnica</a>)</p>

<p><strong>Microsoft&#8217;s move.</strong> Maybe the IE team will introduce a way to upgrade their users well and also serve their business audience that are interested in a snapsnot of the web that doesn&#8217;t change. Maybe they&#8217;ll also introduce a better solution for testing in their browsers than running four (soon five) unique Windows OS images.</p>

<p><img src="http://dl.dropbox.com/u/39519/talks/html5forhumans/static/images/chrome_frame.jpg" alt="" width="150" align="right" /></p>

<p><strong> Chrome Frame</strong> gives us a solid option for handling this situation. (Also, if you haven&#8217;t read <a href="http://infrequently.org/2011/03/half-lives/">these</a> <a href="http://infrequently.org/2010/10/ie-8-is-the-new-ie-6/">three</a> <a href="http://infrequently.org/2010/09/but-ie-9-is-just-around-the-corner/">posts</a> by Alex Russell&#8230; do so.)
At the very least, Chrome Frame will automatically update and has the user-perceived benefit of being &#8220;just a plugin&#8221; (that <a href="http://infrequently.org/2011/08/non-admin-chrome-frame-now-stable/">all users can install</a>) instead of switching to a whole new browser.</p>

<h4>I&#8217;m almost done, I swear</h4>


<p>Clearly, having your users on a browser that not only iterates quickly but appreciates developers by guaranteeing a short browser half-life is a boon to you and the success of the experiences you can deliver. All the browsers are racing to deliver features and speed to you and your users (including IE).</p>

<p>Seriously, all browser engineers are doing incredible, fantastic work.<strong> But without a strategy for how this turns out in the long term, this IE situation will become a complete mess—costing you enormous time in designing how <a href="http://paulirish.com/2011/tiered-adaptive-front-end-experiences/">scale your design</a> to 76+ browsers, testing it, QA&#8217;ing it, and maintaining it.</strong></p>

<p>The IE team is incredibly talented and wise; I think they have a great opportunity here to make the right move (like when they <a href="http://blogs.msdn.com/b/ie/archive/2008/03/03/microsoft-s-interoperability-principles-and-ie8.aspx">reversed policy on X-UA-Compatible</a>). Perhaps with Win8 and Metro we&#8217;ll see a more aggressive approach towards bringing the full potential to the web to all its users.</p>

<hr style="margin: 20px 0;" /><small>Now, I apologize for writing what seems to be a less-than-optimistic post. But truly, from the conversations I&#8217;ve had with the IE team to everything  said publicly on the matter, this looks to be the impending reality. I&#8217;d be happy to correct or amend this post with any facts that conflict with the picture I&#8217;ve painted above.</small>


<div>Macha <a href="http://blog.initprogram.com/2011/09/27/76-ies-not-likely/">posted a thoughtful response</a> ruminating on what browsers will be most at-play for us in 5 years time. I like it,

It&#8217;s also worth pointing out (thx James Pearce) that this post doesn&#8217;t mention mobile. Are desktop browsers relevant in 5-10 years?

</div>


<div>Sylvain Galineau, who works on the standards side of IE, indicates the document mode situation painted above is probably unlikely. I admit it seems preposterous. Perhaps I should have left the document mode aspect out of this post entirely.

Anyway, Sylvain says: <strong>&#8220;Bottom line: I think all you have established is that things will probably not turn out that way.&#8221;</strong> So that&#8217;s good!  :)  Exchange here: <a href="http://paulirish.com/i/d0fb12e598446dc99fbe0998b6731705.png"><img src="http://paulirish.com/i/d0fb12e598446dc99fbe0998b6731705.png" alt="" height="70" /></a>

</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Viewing Chrome's paint cycle]]></title>
    <link href="http://paulirish.com/2011/viewing-chromes-paint-cycle/"/>
    <updated>2011-09-07T12:04:00-07:00</updated>
    <id>http://paulirish.com/2011/viewing-chromes-paint-cycle</id>
    <content type="html"><![CDATA[<p>Jonathan Snook asked me how to get insight in the Chrome DevTools on which elements are getting repainted in the browser&#8217;s paint cycle.</p>

<p>My answer, in video form, dives into <code>--show-paint-rects</code> and the Timeline view. (4 min long)</p>

<p>Lots of small text, so fullscreening will help.</p>

<iframe width="420" height="345" src="http://www.youtube.com/embed/Ea41RdQ1oFQ?hd=1" frameborder="0" allowfullscreen></iframe>


<p>Mentioned links: <a href="http://peter.sh/experiments/chromium-command-line-switches/">Chrome&#8217;s command line switches</a> &amp; <a href="http://crbug.com/71035">crbug.com/71035</a></p>

<div update>btw - I originally posted this 2 weeks ago on <a href="http://paulirish.com/+">my G+ stream</a>, where I&#8217;ve been dropping all sorts of goodies lately. Add me to your circles or whatever. :)</div>

]]></content>
  </entry>
  
</feed>
