<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Lea Verou</title>
	
	<link>http://lea.verou.me</link>
	<description>Life at the bleeding edge (of web standards)</description>
	<lastBuildDate>Wed, 01 May 2013 14:21:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/leaverou" /><feedburner:info uri="leaverou" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>leaverou</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Can we get rid of gradient prefixes?</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/tUYiUBoGiuE/</link>
		<comments>http://lea.verou.me/2013/04/can-we-get-rid-of-gradient-prefixes/#comments</comments>
		<pubDate>Sun, 07 Apr 2013 12:01:12 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS gradients]]></category>
		<category><![CDATA[CSS3]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=2137</guid>
		<description><![CDATA[I recently realized that unprefixed gradients finally propagated to stable Chrome, and after tweeting about it, I decided to do some research on which browsers support unprefixed gradients, and what percentage of users needs them. Currently, unprefixed gradients are supported in: Chrome 26+ Firefox 16+ Opera 12.10+ IE10+ Lets have a look at which prefixes [...]]]></description>
				<content:encoded><![CDATA[<p>I recently realized that unprefixed gradients finally propagated to stable Chrome, and after <a href="https://twitter.com/LeaVerou/status/320365600998305792" target="_blank">tweeting about it</a>, I decided to do some research on which browsers support unprefixed gradients, and what percentage of users needs them.</p>
<p>Currently, unprefixed gradients are supported in:</p>
<ul>
<li><span style="line-height: 13px;">Chrome 26+</span></li>
<li>Firefox 16+</li>
<li>Opera 12.10+</li>
<li>IE10+</li>
</ul>
<p>Lets have a look at which prefixes we actually need to use for gradients today.</p>
<h3>-ms-</h3>
<p>There was <strong>never</strong> a stable release of IE that supported -ms- prefixed gradients, those were only in preview versions (stable IE10 supports both prefixed and unprefixed gradients). So, -ms- is most definitely not required.</p>
<h3>-moz-</h3>
<p>Firefox versions &gt;= 3.6 and &lt; 16 account for <strong>4%</strong> of the global user base*. This might or might not be significant, depending on how good the fallback is that these users will see. If the gradient only adds a subtle shadow or something like that, I’d say ditch -moz-. If it’s more crucial to the design &amp; branding, it might be wise to still keep it. More tech-focused websites probably have a much lower percentage than 4%, so it might be a good idea to drop it there completely.</p>
<h3>-o-</h3>
<p>Opera unprefixed gradients in 12.10. Opera Mini never supported them. Opera versions &lt; 12.10 currently account to a total of <strong>0.25%</strong> of the global user base*. I’d say it’s safe to ditch -o- in gradients in most cases.</p>
<h3>-webkit-</h3>
<p>Chrome only very recently unprefixed gradients and Safari is a long way from doing so. Not to mention all the mobile browsers using WebKit. Unfortunately, we can’t ditch -webkit- in CSS gradients just yet.</p>
<h3>My opinion</h3>
<p>Don’t use -ms- prefixed gradients, there’s absolutely zero point in doing so. Include -moz- for the less subtle gradients. No significant need for -o- gradients. -webkit- is still needed and probably will be at least until the end of 2013. Or, of course, just use <a href="http://leaverou.github.io/prefixfree/">-prefix-free</a> and don’t bother. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Keep in mind that your stats might differ from global stats, so which prefixes you need to include might differ on a case by case basis. <strong>The purpose of this post is to alert you that maybe you don’t need all these prefixes, not to prescriptively tell you which ones to keep.</strong> Except -ms-, please don’t use that. There’s absolutely zero reason whatsoever.</p>
<p><strong>Last but not least, no matter which prefixes you include, always have a good solid color fallback!</strong></p>
<p>&nbsp;</p>
<p>* Global market share statistics from <a href="http://gs.statcounter.com/#browser_version-ww-monthly-201301-201303">StatCounter</a>, for a 3 month period of January 2013 &#8211; March 2013. The graph on the website only displays the most popular browser versions, but downloading the CSV file gives you all of them.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/tUYiUBoGiuE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2013/04/can-we-get-rid-of-gradient-prefixes/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2013/04/can-we-get-rid-of-gradient-prefixes/</feedburner:origLink></item>
		<item>
		<title>border-corner-shape is in danger, and you can help!</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/-JEIVwB1LNI/</link>
		<comments>http://lea.verou.me/2013/03/border-corner-shape-is-in-danger-and-you-can-help/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 19:07:09 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[border-corner-shape]]></category>
		<category><![CDATA[CSS4]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=2091</guid>
		<description><![CDATA[Remember my previous post about an app I made to preview border-corner-shape? It stirred a lot of discussion in the CSS WG, and David Baron posted this: http://dev.w3.org/csswg/css4-background/#border-corner-shape appears to me to be an example of a feature that&#8217;s addressing a problem that we don&#8217;t have &#8212; or at least that we don&#8217;t have enough [...]]]></description>
				<content:encoded><![CDATA[<p>Remember <a href="http://lea.verou.me/2013/03/preview-border-corner-shape-before-implementations/" target="_blank">my previous post about an app I made to preview border-corner-shape</a>? It stirred a lot of discussion in the CSS WG, and <a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0498.html" target="_blank">David Baron posted this</a>:</p>
<blockquote><p>http://dev.w3.org/csswg/css4-background/#border-corner-shape appears<br />
to me to be an example of a feature that&#8217;s addressing a problem that<br />
we don&#8217;t have &#8212; or at least that we don&#8217;t have enough to be worth<br />
adding such a feature. I think it should be removed.</p>
<p>In particular, if there were demand for the bevel | curve | notch<br />
values, we&#8217;d be seeing authors using the equivalents of such values<br />
on significant numbers of Web sites. So before agreeing to accept<br />
this new feature, I&#8217;d like to see examples of Web sites that are<br />
doing what these values would do. Not something similar to what<br />
these values would do, but exactly what these values would do, or at<br />
least close enough that the author wouldn&#8217;t care about the<br />
difference.</p></blockquote>
<p>You can read the whole discussion in the thread I linked to, above.</p>
<p>I might be wrong, but I believe <a href="http://dev.w3.org/csswg/css4-background/#border-corner-shape" target="_blank">border-corner-shape</a> would greatly simplify many common effects, especially its &#8220;bevel&#8221; value, which can even create triangles and other polygons, that we go to great lengths to make with CSS today, and it would degrade much more nicely than border-image or backgrounds. I think it was one of <a href="http://fantasai.inkedblade.net/" target="_blank">fantasai</a>’s many great ideas and I’m glad she added it to <a href="http://dev.w3.org/csswg/css4-background/" target="_blank">the Editor’s Draft of Backgrounds &amp; Borders 4</a>.</p>
<p>I posted a <a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0505.html" target="_blank">list of tutorials and questions from web designers &amp; developers</a>, to illustrate that these effects are needed. However, David <a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0507.html" target="_blank">argued that “Questions from authors don&#8217;t give you enough information to be sure that the feature being added is sufficient for the author&#8217;s needs</a><a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0507.html" target="_blank">”</a>. He did have a point, so with some help from the community, <a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0653.html" target="_blank">I posted a few links to websites using such effects, and use cases</a>. <a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0519.html" target="_blank">Nicole Sullivan</a>, <a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0538.html" target="_blank">Liam Quin</a>, <a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0648.html" target="_blank">fantasai</a> and <a href="http://lists.w3.org/Archives/Public/www-style/2013Mar/0666.html" target="_blank">Lev Solntsev</a> posted a couple more.</p>
<p>However, the more real examples we have, the more likely it is to retain the feature in some form. This is where you come in: If you think border-corner-shape has merit, provide use cases, either by links to websites whose design elements it would simplify, screenshots of websites or descriptions of cases where you needed such a thing (in that order of preference). You can either post to the thread directly, or comment here and I’ll post them to the list in batches.</p>
<p>If you think it has merit but it could be improved, feel free to post about that as well. If you don’t think it’s a good idea, any alternatives you can think of are welcome as well. Or, if you don’t think it’s useful, say that too (but make sure you first fully understand what it can do). If you’re not sure how it can be used, play around with <a href="http://leaverou.github.com/border-corner-shape/" target="_blank">the demo app I made</a> and be creative!</p>
<p>Below are a few examples of shapes:</p>
<p><a href="http://lea.verou.me/wp-content/uploads/2013/03/bevel-1.png"><img alt="bevel-1" src="http://lea.verou.me/wp-content/uploads/2013/03/bevel-1.png" width="300" height="0" /></a><a href="http://lea.verou.me/wp-content/uploads/2013/03/scoop-1.png"><img class="alignnone  wp-image-2102" alt="scoop-1" src="http://lea.verou.me/wp-content/uploads/2013/03/scoop-1.png" width="300" height="208" /></a><a href="http://lea.verou.me/wp-content/uploads/2013/03/notch-1.png"><img class="alignnone  wp-image-2099" alt="notch-1" src="http://lea.verou.me/wp-content/uploads/2013/03/notch-1.png" width="300" /></a> <a href="http://lea.verou.me/wp-content/uploads/2013/03/notch-2.png"><img class="alignnone  wp-image-2101" alt="notch-2" src="http://lea.verou.me/wp-content/uploads/2013/03/notch-2.png" width="300" /></a> <a href="http://lea.verou.me/wp-content/uploads/2013/03/scoop-2.png"><img class="alignnone  wp-image-2103" alt="scoop-2" src="http://lea.verou.me/wp-content/uploads/2013/03/scoop-2.png" width="300" /></a> <a href="http://lea.verou.me/wp-content/uploads/2013/03/bevel-4.png"><img class="alignnone  wp-image-2098" alt="bevel-4" src="http://lea.verou.me/wp-content/uploads/2013/03/bevel-4.png" width="300" /></a> <a href="http://lea.verou.me/wp-content/uploads/2013/03/bevel-3.png"><img class="alignnone  wp-image-2097" alt="bevel-3" src="http://lea.verou.me/wp-content/uploads/2013/03/bevel-3.png" width="300" /></a> <a href="http://lea.verou.me/wp-content/uploads/2013/03/bevel-2.png"><img class="alignnone  wp-image-2096" alt="bevel-2" src="http://lea.verou.me/wp-content/uploads/2013/03/bevel-2.png" width="300" /></a></p>
<p>I wanted to demo triangles and trapezoids as well, but it seems there’s a bug in my app, so I’ll have to debug it first <img src='http://lea.verou.me/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  If we allow border-corner-shape to have different values for all four corners, even more possibilites open (e.g. arrows).</p>
<p>Spend a few minutes to help the CSS WG help you. Thanks!</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/-JEIVwB1LNI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2013/03/border-corner-shape-is-in-danger-and-you-can-help/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2013/03/border-corner-shape-is-in-danger-and-you-can-help/</feedburner:origLink></item>
		<item>
		<title>Preview border-corner-shape, before implementations!</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/pDAn655XE1M/</link>
		<comments>http://lea.verou.me/2013/03/preview-border-corner-shape-before-implementations/#comments</comments>
		<pubDate>Sun, 24 Mar 2013 16:07:50 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Apps & scripts]]></category>
		<category><![CDATA[Original]]></category>
		<category><![CDATA[border-radius]]></category>
		<category><![CDATA[CSS4]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=2074</guid>
		<description><![CDATA[As an editor of the Backgrounds &#38; Borders Level 4 spec, I am naturally a bit more interested in the cool features it will bring, once implementations start (it’s currently too early for that). One of the coolest features in it is border-corner-shape. While in Backgrounds &#38; Borders 3, border-radius was only used for rounded [...]]]></description>
				<content:encoded><![CDATA[<p>As an editor of the <a href="http://dev.w3.org/csswg/css4-background/" target="_blank">Backgrounds &amp; Borders Level 4</a> spec, I am naturally a bit more interested in the cool features it will bring, once implementations start (it’s currently too early for that). One of the coolest features in it is <a href="http://dev.w3.org/csswg/css4-background/#border-corner-shape" target="_blank">border-corner-shape</a>. While in <a href="http://www.w3.org/TR/css3-background/" target="_blank">Backgrounds &amp; Borders 3</a>, <a href="http://www.w3.org/TR/css3-background/#the-border-radius" target="_blank">border-radius</a> was only used for rounded (actually, elliptical) corners, with the help of border-corner-shape, it will be able to do so much more! Beveled corners, scoop-style corners (informally known as “negative border-radius”), even rectangular notches.</p>
<p>Unfortunately, until it’s implemented in browsers, it’s hard to play with it. Or, is it? I spent the weekend creating an app in which you can enter values for border-corner-shape, border-radius, width, and height, and see the result, simulated through SVG, as well as the fallback in browsers that don’t support border-corner-radius (which is currently all browsers).</p>
<p style="text-align: center;"><a href="http://lea.verou.me/wp-content/uploads/2013/03/Screen-Shot-2013-03-24-at-17.45.38-.png"><img class="aligncenter  wp-image-2076" alt="border-corner-shape preview" src="http://lea.verou.me/wp-content/uploads/2013/03/Screen-Shot-2013-03-24-at-17.45.38-.png" width="600" /></a></p>
<p>Obviously, it’s not a full preview, since you can only play with a limited subset of CSS properties, but it should be good for seeing the kinds of shapes that will be possible.You could also copy the generated SVG from the Developer tools of your browser, and use it as a background in any website!</p>
<p>Use it here: <a class="view-demo" href="http://leaverou.github.com/border-corner-shape">border-corner-shape preview</a></p>
<p>Tested to work in at least Chrome, IE9, Firefox, Safari and theoretically, should work in any SVG-enabled browser.</p>
<p>Enjoy! Hope you like it.</p>
<p><strong>Important: </strong>Please note that border-corner-shape is still at a very early stage and might completely change before implementations. You can also help to make it better: Play with it and comment on what you think about its naming and functionality!</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/pDAn655XE1M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2013/03/preview-border-corner-shape-before-implementations/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2013/03/preview-border-corner-shape-before-implementations/</feedburner:origLink></item>
		<item>
		<title>Easily center text vertically, with SVG!</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/4Ua1knPM9zs/</link>
		<comments>http://lea.verou.me/2013/03/easily-center-text-vertically-with-svg/#comments</comments>
		<pubDate>Sun, 24 Mar 2013 00:27:44 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Original]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=2065</guid>
		<description><![CDATA[These days, we have a number of different ways to vertically align text in a container of variable dimensions: Table display modes Flexbox inline-block hacks Wrapping the text in an extra element and absolutely positioning it &#8230;and probably many others I’m forgetting However, often comes a time when neither is suitable, so here I am, [...]]]></description>
				<content:encoded><![CDATA[<p>These days, we have a number of different ways to vertically align text in a container of variable dimensions:</p>
<ul>
<li><span style="line-height: 13px;">Table display modes</span></li>
<li>Flexbox</li>
<li>inline-block hacks</li>
<li>Wrapping the text in an extra element and absolutely positioning it</li>
<li>&#8230;and probably many others I’m forgetting</li>
</ul>
<p>However, often comes a time when neither is suitable, so here I am, adding yet another option to the list. Of course, it comes with its own set of drawbacks, but there are cases where it might be better than the existing solutions.<span id="more-2065"></span></p>
<p>It all started when I discovered the <a href="http://www.w3.org/TR/SVG/text.html#TextAnchorProperty" target="_blank"><code>text-anchor</code></a> SVG property. It determines where the <a href="http://www.w3.org/TR/SVG/text.html#TextElementXAttribute" target="_blank">x</a> and <a href="http://www.w3.org/TR/SVG/text.html#TextElementYAttribute" target="_blank">y</a> attributes on <a href="http://www.w3.org/TR/SVG/text.html#TextElement" target="_blank"><code>&lt;text&gt;</code></a> elements refer to. The magic starts when you set it to “middle”, then the <a href="http://www.w3.org/TR/SVG/text.html#TextElementXAttribute" target="_blank">x</a> and <a href="http://www.w3.org/TR/SVG/text.html#TextElementYAttribute" target="_blank">y</a> attributes refer to the center of the text. So, if you set those to 50%, they refer to the center of the SVG graphic itself, and if you set the SVG width and height to 100%, the text basically sits in the center of the &lt;svg&gt;’s container, which could be any HTML element!</p>
<p>One issue was that this centered the baseline of the text, so I tried to find a way to shift the baseline appropriately. Setting <code><a href="http://www.w3.org/TR/SVG/text.html#DominantBaselineProperty" target="_blank">dominant-baseline</a>: middle;</code> on the <a href="http://www.w3.org/TR/SVG/text.html#TextElement" target="_blank">&lt;text&gt;</a> element seemed to fix it, but it looks like IE doesn’t support that. I ended up adding <a href="http://www.w3.org/TR/SVG/text.html#TextElementDYAttribute" target="_blank">dy</a>=&#8221;.3em&#8221; to the <a href="http://www.w3.org/TR/SVG/text.html#TextElement" target="_blank">&lt;text&gt;</a> element, which fixes it but might need to be adjusted if you change the line-height.</p>
<p>In addition, this method has the following drawbacks I can think of:</p>
<ul>
<li><span style="line-height: 13px;">Extra markup (namely 2 elements: &lt;svg&gt; and <a href="http://www.w3.org/TR/SVG/text.html#TextElement" target="_blank">&lt;text&gt;</a>)</span></li>
<li>If the text is more than one line, it won’t automatically wrap, you have to do it manually.</li>
<li>Some new-ish CSS text properties may not be applied. For example, text-shadow is applied in Chrome but not in Firefox, since technically, it’s still not a part of the SVG spec.</li>
<li><del datetime="2013-03-28T16:34:10+00:00">You need to duplicate the text color as a fill property, since SVG does not understand the color CSS property.</del> No need to duplicate anything, just use <code>fill: currentColor;</code> (<a href="http://lea.verou.me/2013/03/easily-center-text-vertically-with-svg/#comment-841846526">thanks GreLI!</a>)</li>
</ul>
<p>However, it has a few advantages too:</p>
<ul>
<li>You don’t need to change anything on the parent HTML element</li>
<li>Degrades gracefully in non-SVG browsers</li>
<li>Should be perfectly accessible and won’t break SEO</li>
<li>Works perfectly in IE9, unlike Flexbox</li>
<li>You can include any kind of SVG styling on the text. For example, strokes!</li>
</ul>
<p>You can see and play with the result in the dabblet below:</p>
<p><iframe src="http://dabblet.com/gist/5229803" height="500" width="100%"></iframe></p>
<p>Verified to work in at least Chrome, Firefox, IE9+. Hope it’s useful, even though it won’t be a good fit in every single use case.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/4Ua1knPM9zs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2013/03/easily-center-text-vertically-with-svg/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2013/03/easily-center-text-vertically-with-svg/</feedburner:origLink></item>
		<item>
		<title>Use MathML today, with CSS fallback!</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/NN-NItZttmY/</link>
		<comments>http://lea.verou.me/2013/03/use-mathml-today-with-css-fallback/#comments</comments>
		<pubDate>Thu, 21 Mar 2013 17:08:13 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[fallback]]></category>
		<category><![CDATA[MathML]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=2041</guid>
		<description><![CDATA[These days, I’m working on the slides for my next talk, “The humble border-radius”. It will be about how much work is put into CSS features that superficially look as simple as border-radius, as well as what advances are in store for it in CSS Backgrounds &#38; Borders 4 (of which I’m an editor). It [...]]]></description>
				<content:encoded><![CDATA[<p>These days, I’m working on the slides for <a href="http://lea.verou.me/speaking">my next talk</a>, “The humble border-radius”. It will be about how much work is put into CSS features that superficially look as simple as border-radius, as well as what advances are in store for it in <a href="http://dev.w3.org/csswg/css4-background">CSS Backgrounds &amp; Borders 4</a> (of which I’m an editor). It will be fantastic and you should come, but this post is not about my talk.</p>
<p>As you may know, my slides <a href="http://github.com/LeaVerou/CSSS">are made with HTML, CSS &amp; JavaScript</a>. At some point, I wanted to insert an equation to show how border-top-left-radius (as an example) shrinks proportionally when the sum of radii on the top side exceeds the width of the element. I don’t like LaTeX because it produces bitmap images that don’t scale and is inaccessible. The obvious open standard to use was <a href="http://www.w3.org/TR/MathML/" target="_blank">MathML</a>, and it can even be directly embedded in HTML5 without all the XML cruft, just like SVG. I had never written MathML before, but after a bit of reading and poking around existing samples, I managed to write the following MathML code:<span id="more-2041"></span></p>
<pre><code class="language-markup">&lt;math display="block"&gt;
    &lt;mrow&gt;
        &lt;msub&gt;
            &lt;mi&gt;r&amp;prime;&lt;/mi&gt;
            &lt;mi&gt;top-left&lt;/mi&gt;
        &lt;/msub&gt;
        &lt;mo&gt;=&lt;/mo&gt;
        &lt;mi&gt;min&lt;/mi&gt;
        &lt;mo&gt;(&lt;/mo&gt;
        &lt;msub&gt;
            &lt;mi&gt;r&lt;/mi&gt;
            &lt;mrow&gt;
                &lt;mi&gt;top-left&lt;/mi&gt;
            &lt;/mrow&gt;
        &lt;/msub&gt;
        &lt;mo&gt;,&lt;/mo&gt;
        &lt;mi&gt;width&lt;/mi&gt;
        &lt;mo&gt;&amp;times;&lt;/mo&gt;
        &lt;mfrac&gt;
            &lt;mrow&gt;
                &lt;msub&gt;
                    &lt;mi&gt;r&lt;/mi&gt;
                    &lt;mi&gt;top-left&lt;/mi&gt;
                &lt;/msub&gt;
            &lt;/mrow&gt;
            &lt;mrow&gt;
                &lt;msub&gt;
                    &lt;mi&gt;r&lt;/mi&gt;
                    &lt;mi&gt;top-left&lt;/mi&gt;
                &lt;/msub&gt;
                &lt;mo&gt;+&lt;/mo&gt;
                &lt;msub&gt;
                    &lt;mi&gt;r&lt;/mi&gt;
                    &lt;mi&gt;top-right&lt;/mi&gt;
                &lt;/msub&gt;
            &lt;/mrow&gt;
        &lt;/mfrac&gt;
        &lt;mo&gt;)&lt;/mo&gt;
    &lt;/mrow&gt;
&lt;/math&gt;
</code></pre>
<p>I was very proud of myself. My first MathML equation! It’s actually pretty simple when you get the hang of it: <code>&lt;mi&gt;</code> is for identifiers, <code>&lt;mo&gt;</code> for operators and those are used everywhere. For more complex stuff, there’s <code>&lt;mfrac&gt;</code> for fractions (along with <code>&lt;mrow&gt;</code> to denote the rows), <code>&lt;msqrt&gt;</code> for square roots and so on.</p>
<p>It looked very nice on Firefox, especially after I applied Cambria Math to it instead of the default Times-ish font:</p>
<p style="text-align: center;"><a href="http://lea.verou.me/wp-content/uploads/2013/03/mathml-firefox.png"><img class="aligncenter  wp-image-2044" alt="MathML native support in Firefox" src="http://lea.verou.me/wp-content/uploads/2013/03/mathml-firefox.png" width="600" /></a> <a href="http://lea.verou.me/wp-content/uploads/2013/03/mathml-chrome-withcss.png"><br />
</a></p>
<p>However, I soon realized that as awesome as MathML might be, <a href="http://docs.webplatform.org/wiki/mathml#Compatibility">not not all browsers had seen the light</a>. IE10 and Chrome are the most notable offenders. It looked like an unreadable mess in Chrome:</p>
<p style="text-align: center;"><a href="http://lea.verou.me/wp-content/uploads/2013/03/mathml-chrome-nocss.png"><img class="aligncenter  wp-image-2042" alt="MathML in Chrome, with no CSS fallback" src="http://lea.verou.me/wp-content/uploads/2013/03/mathml-chrome-nocss.png" width="600" /></a></p>
<p>There are libraries to make it work cross-browser, the most popular of which is <a href="http://www.mathjax.org/">MathJax</a>. However, this was pretty big for my needs, I just wanted <strong>one</strong> simple equation in <strong>one</strong> goddamn slide. It would be like using a chainsaw to cut a slice of bread!</p>
<p>The solution I decided to go with was to use <a href="http://modernizr.com">Modernizr</a> to detect MathML support, since apparently <a href="https://github.com/Modernizr/Modernizr/blob/master/feature-detects/mathml.js">it’s not simple at all</a>. Then, I used the <code>.no-mathml</code> class in conjunction with selectors that target the MathML elements, to mimic proper styling with simple CSS. It’s not a complete CSS library by any means, I just covered what I needed for that particular equation and tried to write it in a generic way, so that if I need it in future equations, I only have to <em>add</em> rules. Here’s a screenshot of the result in Chrome:</p>
<p style="text-align: center;"><a href="http://lea.verou.me/wp-content/uploads/2013/03/mathml-chrome-withcss.png"><img class="aligncenter  wp-image-2043" alt="MathML in Chrome with CSS fallback" src="http://lea.verou.me/wp-content/uploads/2013/03/mathml-chrome-withcss.png" width="600" /></a></p>
<p>It doesn’t look as good as Firefox, but it’s decent. You can see the CSS rules I used in the following Dabblet:</p>
<p><iframe src="http://dabblet.com/gist/5214646" height="500" width="100%"></iframe></p>
<p>Obviously it’s not a complete MathML-to-CSS library, if one is even possible, but it works well for my use case. If I have to use more MathML features, I’d write more CSS rules. The intention of this post is not to provide a CSS framework to use as a MathML fallback, but to show you a solution you could adapt to your needs. Hope it helps!</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/NN-NItZttmY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2013/03/use-mathml-today-with-css-fallback/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2013/03/use-mathml-today-with-css-fallback/</feedburner:origLink></item>
		<item>
		<title>iOS 6 switch style checkboxes with pure CSS</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/fWysRNFno-A/</link>
		<comments>http://lea.verou.me/2013/03/ios-6-switch-style-checkboxes-with-pure-css/#comments</comments>
		<pubDate>Fri, 15 Mar 2013 14:07:10 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Original]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[forms]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=2027</guid>
		<description><![CDATA[I recently found myself looking at the Tools switch in Espresso: Not because I was going to use it (I rarely do), but because I started wondering what would be the best way to replicate this effect in CSS. I set on to create something that adhered to the following rules: It should be keyboard [...]]]></description>
				<content:encoded><![CDATA[<p>I recently found myself looking at the Tools switch in Espresso:</p>
<p><img src="http://lea.verou.me/wp-content/uploads/2013/03/Screen-Shot-2013-03-15-at-15.32.33-.png" alt="" title="Screen Shot 2013-03-15 at 15.32.33" width="357" height="100" class="aligncenter size-full wp-image-2028" /></p>
<p>Not because I was going to use it (I rarely do), but because I started wondering what would be the best way to replicate this effect in CSS. I set on to create something that adhered to the following rules:</p>
<ol>
<li>It should be keyboard accessible</li>
<li>It should work in as many browsers as possible and degrade gracefully to a plain checkbox in the rest</li>
<li>It shouldn’t depend on pseudo-elements in replaced elements (such as checkboxes), since that’s non-standard so not very dependable</li>
<li>It shouldn’t require any extra HTML elements</li>
<li>It shouldn’t use JS, unless perhaps to generate HTML that could be written by hand if the author wishes to do so.</li>
</ol>
<p>Why you may ask? Some of them are good practices in general, and the rest make it easier to reuse the component (and they made it more challenging too!).</p>
<p><span id="more-2027"></span></p>
<p>The best idea I came up with was to use a radial gradient for the knob and animate its background-position. All that on a checkbox. After a lot of tweaking, I settled on something that looked decent (although not as good as the Espresso one) in the browser I was using (Chrome) and went ahead to test it in others. The result was disappointing: I had forgotten that not all browsers allow that kind of customization on checkboxes. And who can blame them? This is what happens when you’re wandering in Undefined Behavior Land. They are not violating any spec, because there is no spec mandating or forbidding checkboxes from being stylable with CSS and to what extent, so every browser does its thing there.</p>
<p>Here you can see my failed attempt, which only works as intended in Chrome:</p>
<p><iframe src="http://dabblet.com/gist/5078981/457e62ee672ba69fe6ce5a3f6c173528366a2203" width="100%" height="200"></iframe></p>
<p>I realized I had to lift one of the restrictions if I wanted to solve this, so I picked the 4th (no extra HTML elements), as it was the least important one. I could have done it as a pseudoelements on <code>&lt;label&gt;</code>s, but I decided to use a <code>&lt;div&gt;</code> instead, for maximum flexibility. The <code>&lt;div&gt;</code> is added through script in the Dabblet below, but it could be added by hand instead.</p>
<p><iframe src="http://dabblet.com/gist/5078981" width="100%" height="500"></iframe></p>
<p>To get around the limitation of pseudo-elements not being animatable in current and older versions of WebKit, I animate the padding of the <code>&lt;div&gt;</code> instead.</p>
<p>And then I thought, why not make iOS-style switches? Even more challenging! I turned on my iPhone and tried to replicate the look. Adding the ON/OFF text was very painful, as it needs to both animate and be styled differently for &#8220;ON&#8221; and &#8220;OFF&#8221;. Eventually, I ended up doing it with <code>text-indent</code> in such a way that it depends on the knob’s position, so that when the knob animates, the text moves too.</p>
<p>Another challenge with this was the different backgrounds. Changing the background color upon <code>:checked</code> was not enough, since it needs to slide as well, not just abruptly change or fade in. I ended up doing it with a gradient and animating its background-position. Naturally, this makes it not look as good in IE9.</p>
<p>So, without further ado, here is the final result:</p>
<p><iframe src="http://dabblet.com/gist/5166717" width="100%" height="800"></iframe></p>
<p>Yes, I know there are other efforts on the web to replicate this effect with pure CSS, but none of them seems to come as close to the original, without images and with such minimal HTML.</p>
<p>Why bother, you may ask? Well, it was a fun pastime during SXSW breaks or sessions that turned out to be less interesting than expected or in the plane on the way home. Besides, I think that it could be useful in some cases, perhaps if the styling is tweaked to not resemble iOS too obviously or maybe in iOS app mockups or something.</p>
<p>Enjoy!</p>
<p><em>Credits to <a href="http://www.thecssninja.com/css/custom-inputs-using-css" target="_blank">Ryan Seddon</a> for paving the way for custom form elements through CSS, a couple years ago</em></p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/fWysRNFno-A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2013/03/ios-6-switch-style-checkboxes-with-pure-css/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2013/03/ios-6-switch-style-checkboxes-with-pure-css/</feedburner:origLink></item>
		<item>
		<title>W3Conf in San Francisco, February 21-22</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/m4J-q_UkBDU/</link>
		<comments>http://lea.verou.me/2013/01/w3conf-in-san-francisco-february-21-22/#comments</comments>
		<pubDate>Wed, 30 Jan 2013 01:06:55 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Speaking]]></category>
		<category><![CDATA[W3C]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=2006</guid>
		<description><![CDATA[You might have heard about W3Conf, W3C’s conference for web designers and developers. This year, I have the pleasure of not only speaking there but also organizing it, along with Doug Schepers and designing the website for it. Alongside with yours truly, it features an excellent lineup of amazing speakers like Eric Meyer, Alexis Deveria of [...]]]></description>
				<content:encoded><![CDATA[<p>You might have heard about <a href="http://w3.org/conf" target="_blank">W3Conf</a>, <a href="http://w3.org" target="_blank">W3C</a>’s conference for web designers and developers. This year, I have the pleasure of not only speaking there but also organizing it, along with <a href="http://twitter.com/shepazu" target="_blank">Doug Schepers</a> and designing the <a href="http://w3.org/conf" target="_blank">website</a> for it.</p>
<p><a href="http://w3.org/conf"><img class="aligncenter size-large wp-image-2007" style="max-width: 620px;" title="Website screenshot" src="http://lea.verou.me/wp-content/uploads/2013/01/Screen-Shot-2013-01-30-at-02.43.26--1024x640.png" alt="" width="640" height="400" /></a></p>
<p>Alongside with yours truly, it features an excellent lineup of amazing speakers like <a href="http://twitter.com/meyerweb" target="_blank">Eric Meyer</a>, <a href="https://twitter.com/Fyrd" target="_blank">Alexis Deveria</a> of <a href="http://caniuse.com/" target="_blank">caniuse.com</a> fame, <a href="https://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and many others. You can use coupon code <strong>VEROU</strong> to get <strong>$100 off</strong> the already affordable Early Bird price of <strong>$300</strong>. But hurry up, cause Early Bird prices are only valid <strong>until January 31st</strong>!</p>
<p>Hope to see you there!</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/m4J-q_UkBDU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2013/01/w3conf-in-san-francisco-february-21-22/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2013/01/w3conf-in-san-francisco-february-21-22/</feedburner:origLink></item>
		<item>
		<title>One year of pastries</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/-rDtT1zSCn8/</link>
		<comments>http://lea.verou.me/2012/12/one-year-of-pastries/#comments</comments>
		<pubDate>Sun, 30 Dec 2012 21:21:42 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1995</guid>
		<description><![CDATA[Last September, I was approached by Alex Duloz, who invited me to take part in his ambitious new venture, The Pastry Box Project. Its goal was to gather 30 people (&#8220;bakers&#8221;) every year who are influential in their field and ask them to share twelve thoughts — one per month. For 2012, that field would [...]]]></description>
				<content:encoded><![CDATA[<p>Last September, I was approached by <a href="http://bitspushedaround.com/" target="_blank">Alex Duloz</a>, who invited me to take part in his ambitious new venture, <a href="http://the-pastry-box-project.net/" target="_blank">The Pastry Box Project</a>. Its goal was to gather 30 people (&#8220;bakers&#8221;) every year who are influential in their field and ask them to share twelve thoughts — one per month. For 2012, that field would be the Web. I was honored by the invitation and accepted without a second thought (no pun intended). The project was quite successful and recently we all (<a href="https://twitter.com/mollydotcom/status/281108923170308096" target="_blank">almost</a>) agreed for The Pastry Box Project to become a book, whose profits will be donated to charity.</p>
<p>The initial goal of the project was to gather thoughts somehow related to the bakers’ work. Although many stuck to that topic, for many others it quickly drifted away from that, with them often sending thoughts that were general musings about their lives or life in general. For me &#8230;well lets just say I was never good at sticking to the topic at hand. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>The Pastry Box showed me that I want a personal blog so <a href="http://pensieve.verou.me/">I made one today</a>. I will still publish personal stuff here, as long as it&#8217;s even remotely web-related, so not much will change. However, my interests range to more than the Web, so I will now have another medium to express myself in. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Since 2012 is now over, I decided to gather all my &#8220;pastries&#8221; and publish them in two blog posts: I will post the more techy/professional ones below and the more general/personal ones in <a href="http://pensieve.verou.me/post/39242403969/one-year-of-pastries">my personal blog</a>. Since most of them were somewhere in the middle, it wasn’t easy to pick which ones to publish where. I figured the best solution is to allow for some overlap and publish most of them in both blogs.<span id="more-1995"></span></p>
<h2>January</h2>
<p>Often people ask me how I come up with the new ideas I publish. I think my main “differentiator” is that I try not to be restricted by my knowledge about what’s possible and what is not. I first think about what I want to make (for example “I want to do a rating widget with pure CSS”) and then I investigate how it could be done. And I don’t give up easily. Sometimes it even takes months having the question in the back of my head before I come up with a solution.</p>
<p>People push the boundaries of what&#8217;s achievable with web technologies every day. Do you want to be one of them, or do you want to be stuck repeating what&#8217;s been done over and over again until you get sick of it? Don&#8217;t be afraid to try new things. If a voice inside you screams “That isn’t possible!”, ignore it. In most cases, this voice is wrong.</p>
<h2>February</h2>
<p>You may catch more flies with honey than with vinegar, but you catch even more with a little audacity. Being polite is a good rule of thumb, but like everything, it also needs moderation. Don&#8217;t say &#8220;share my content pleeeeeeaaaase&#8221;. It makes people think your content isn&#8217;t worthy of sharing if you have to grovel. In a long email, don&#8217;t write a paragraph apologizing for its length (true story!). Being overly polite when meeting someone, categorizes yourself as inferior in the other person&#8217;s subconscious. Treat yourself with the respect and admiration you expect from other people. If you don&#8217;t think highly of yourself, nobody will. When meeting someone you admire, treat them as an equal and they&#8217;re more likely to do the same.</p>
<p>However, be careful not to cross the fine distinction between treating yourself with respect and being a cocky jackass. Treat others as equals, not as inferiors, otherwise your attitude will get you nowhere — and will piss everyone off along the way.</p>
<h2>March</h2>
<p>You can get quite far by putting cool stuff out there and expecting everything to come to you. Yes, you will eventually get job offers, conference invitations and various distinctions. However, sometimes, just asking will get you what you want much faster.</p>
<p>I used to avoid asking like the plague, and thought that if my work is good enough, what I want will naturally come to me. Which makes sense, to a certain extent: When someone keeps asking for stuff all the time, you can&#8217;t help but think that they merely see you as means to an end.</p>
<p>However, when you really want something, it never hurts to approach it yourself. Lately, I&#8217;ve been experiencing how much easier this makes things, and I&#8217;d strongly recommend you try it too. Turns out that quite often you don&#8217;t have what you want not because you aren&#8217;t good enough, but because the parties involved have no idea you&#8217;re interested.</p>
<h2>April</h2>
<p>The best argument against conventional wisdom is the fate of everyone following it. If you aspire beyond mediocrity, conventional wisdom is recipe for failure. Think out of the box. What can you do to achieve your goals, that others are not already doing? The least popular paths are the most successful. The trick isn&#8217;t doing better than the others, it&#8217;s minimizing the number of &#8220;others&#8221;. Find unexplored territory and make it yours. It&#8217;s much easier than trying to claim your stake on someone else&#8217;s land.</p>
<h2>May</h2>
<p>I never make long-term plans. Life is an unpredictable adventure. Concrete plans restrict this amazing journey. Stressing over a series of mental checkboxes you need to check until a certain date shifts your focus away from making awesomeness. I have long-term dreams instead, and they are all the compass I need. They give me the drive to constantly strive to improve, while still allowing room for surprises. I learned to trust chaos, and so far, I was never disappointed.</p>
<h2>June</h2>
<p>Contrary to popular belief, the defining characteristic of a good professional, in any discipline, is not the ability to blurt out good ideas off the top of their head. It’s perseverance and not being easily satisfied. Where the others would stop, they keep going. For example, when writing CSS, they won’t stop after they’ve achieved a certain style. They will also try to make it more flexible, more maintainable, simpler. Next week, try this: When you’re about to give up and proclaim that something is “done”, try to spend five more minutes on the task, thinking how you can improve it further, how to make it more elegant. I think it will help you be much more satisfied and proud of your work.</p>
<h2>July</h2>
<p>Before you start complaining about what you don’t like in CSS, HTML or JavaScript, ask yourself: How would I do it better? Sometimes, the things that bother us are just unavoidably subpar solutions to very hard problems. It sounds obvious, but many people I’ve spoken with get a completely new perspective when they ask themselves this question. Also, there are many other factors affecting design choices, beyond syntactical elegance and ease of understanding. For example, making implementations easier, maintaining backwards compatibility or matching what browsers already do. Sometimes that “obvious better solution” is just not possible in practice.</p>
<h2>August</h2>
<p>We all teach from time to time, whether it’s explaining something to a colleague, writing a blog post about the cool CSS technique we discovered, or giving a technical talk. If you are serious about becoming better at it, I’d strongly recommend reading up on psychology and neuroscience. If you don’t have the time to, here’s one fact that I’ve found most useful: Humans have incredibly impressive pattern recognition skills. We use them in pretty much everything we do, from learning our native language as kids, to escaping predators in the wild.</p>
<p>How does that help you teach more effectively? In one word: Examples, examples, examples. No matter how good you are at explaining the rules, nothing beats a few good examples of their application in practice. Our abstract thinking is not nearly as good as our pattern recognition skills.</p>
<p>However, don’t be fooled into thinking that theory is useless. Often, multiple explanations fit a given example. The theory helps us pick the one that fits, which might not be the one we initially recognized.</p>
<p>I’ve found that this principle applies to pretty much everything I’ve taught or have been taught, from mathematics to natural and programming languages. You can forget the theory, but you should never forget the examples.</p>
<h2>September</h2>
<p>People often think it’s hard to change my mind, that I’m too fixated on my own opinions. The reason I give this impression is that I will fiercely defend them. However, I will only do so until I see compelling arguments for the other side. I always try to keep an open mind to being wrong, and it has only made me better.</p>
<p>In the past few months I’ve been witnessing myself slowly change my views regarding yet another major life issue: The place I want to live in. Moving to the US has been a life goal for me ever since I first visited, almost fifteen years ago. However, as I spend more time there and get closer to moving, I’ve started noticing things that I don’t like so much. I’ve tried to ignore them, but they keep being there, giving me the finger like dead pixels on a brand new screen. I might go forward with it anyway, or I might pick another country, but this is yet another experience that has taught me to avoid being dogmatic.</p>
<p>We are all, and should be, subject to change. Whoever insists in their rigid convictions reminds me of software whose bugs never get fixed. You are the only maintainer of that software. Be vigilant enough to discover and fix your own bugs. Be open-minded enough to listen to other people’s bug reports about it. Most people forget to do this after a certain age. They become so arrogant that they think they don’t have any more bugs to fix, or so insecure that they believe they can’t fix any more. That’s the turning point where the years that pass by start to become “aging”, instead of “growing up”. Aging doesn’t have to do with how long you’re on this planet, it has to do with giving up on yourself. To stop being subject to change is to start being stagnant.</p>
<h2>October</h2>
<p>These days, we almost all unequivocally embrace graceful degradation and progressive enhancement. It’s the extent that people disagree on, since everyone has a different definition of what is “graceful” and what is “enhancement”. Is a solid color an acceptable fallback for a pattern? What if your lightbox has no overlay? What if your stripes become a solid color? What if your transitions are not there? What if your code has no syntax highlighting? That’s the true challenge: How different can they look? Is it sufficient if the content is accessible in IE8 or does it also have to be pretty? How pretty? Those are the questions you need to agree on with your team to ensure you’re all on the same page. An agreement on the basic premise that websites don’t have to look the same in every browser is far from enough. Graceful degradation is not black &amp; white, it’s a spectrum. You need to find where you lie on that spectrum and where your colleagues lie on it too, otherwise expect a lot of tension every time decisions need to be made.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/-rDtT1zSCn8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/12/one-year-of-pastries/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/12/one-year-of-pastries/</feedburner:origLink></item>
		<item>
		<title>CSS Animations with only one keyframe</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/SQCyasToR7M/</link>
		<comments>http://lea.verou.me/2012/12/animations-with-one-keyframe/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 15:51:04 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[CSS3 animations]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1975</guid>
		<description><![CDATA[This is a very quick tip, about a pet peeve of mine in almost every CSS animation I see. As you may know, I’m a sucker for reducing the amount of code (as long as it remains human readable of course). I demonstrated a very similar example in my “CSS in the 4th dimension” talk, [...]]]></description>
				<content:encoded><![CDATA[<p>This is a very quick tip, about a pet peeve of mine in almost every CSS animation I see. As you may know, I’m a sucker for reducing the amount of code (as long as it remains human readable of course). I demonstrated a very similar example in my “CSS in the 4th dimension” talk, but I recently realized I never blogged about it (or seen anyone else do so).</p>
<p>Lets assume you have a simple animation of a pounding heart, like so:<br />
<span id="more-1975"></span></p>
<pre><code>@keyframes pound {
	from { transform: none; }
	50% { transform: scale(1.4); }
	to { transform: none; }
}

.heart {
	/* ... */
	animation: pound .5s infinite;
}</code></pre>
<p><iframe src="http://dabblet.com/gist/4268782/a7d1b285a6af0a0183f94079ab310217c1076275" style="width:100%; height:500px"></iframe></p>
<p>You can see the problem already: the shrunk heart state is repeated twice in the keyframes (<code>from</code> and <code>to</code>). You probably know you can combine them into one rule, like so:</p>
<pre><code>@keyframes pound {
	from, to { transform: none; }
	50% { transform: scale(1.4); }
}</code></pre>
<p><iframe src="http://dabblet.com/gist/4268782/b8beab24426225097410b9b159d27a5cf7e4e3fd" style="width:100%; height:500px"></iframe></p>
<p>What many don’t know, is that you don’t need these two keyframes at all, since they basically replicate the same state as the one in the <code>.heart</code> rule. To quote the <a href="http://www.w3.org/TR/css3-animations/#keyframes" target="_blank">CSS Animations spec</a>:</p>
<blockquote cite="http://www.w3.org/TR/css3-animations/#keyframes"><p>If a 0% or &#8220;from&#8221; keyframe is not specified, then the user agent constructs a 0% keyframe using the computed values of the properties being animated. If a 100% or &#8220;to&#8221; keyframe is not specified, then the user agent constructs a 100% keyframe using the computed values of the properties being animated.</p></blockquote>
<p>Therefore, the code could actually be as simple as:</p>
<pre><code>@keyframes pound {
	50% { transform: scale(1.4); }
}</code></pre>
<p><iframe src="http://dabblet.com/gist/4268782/b7849dbbd47761cf352fe7e0740c4bc227824f61" style="width:100%; height:500px"></iframe></p>
<p>This trick is very useful for providing fallbacks that are the same as the first or last keyframe, without having to repeat them in the <code>@keyframes</code> rule. Of course it doesn’t only apply to animations where you only have one keyframe beyond <code>from</code> and/or <code>to</code>. You can omit the <code>from</code> and <code>to</code> keyframes in every animation, when you want them to be the same as the styles that are applied to the element anyway. </p>
<p>Of course, to make this particular animation appear more natural, it would be much more wise to do something like this, still with only one keyframe (the <code>from</code> state is dynamically generated by the browser):</p>
<pre><code>@keyframes pound {
	to { transform: scale(1.4); }
}

.heart {
	/* ... */
	animation: pound .25s infinite alternate;
}</code></pre>
<p><iframe src="http://dabblet.com/gist/4268782" style="width:100%; height:500px"></iframe></p>
<p>which just reverses every even iteration, instead of trying to have both states (shrinking and growing) in the animation. The reason this looks more natural is that <code>animation-direction: alternate;</code> (which is what the <code>alternate</code> keyword does in the animation shorthand) also reverses the timing (easing) function for the reversed iterations. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/SQCyasToR7M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/12/animations-with-one-keyframe/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/12/animations-with-one-keyframe/</feedburner:origLink></item>
		<item>
		<title>Lots of improvements coming to dabblet</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/SpHmwnbnqN4/</link>
		<comments>http://lea.verou.me/2012/11/lots-of-improvements-coming-to-dabblet/#comments</comments>
		<pubDate>Wed, 07 Nov 2012 15:18:39 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[dabblet]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1962</guid>
		<description><![CDATA[I posted about this in both the WebPlatform.org blog and Dabblet’s blog, but I thought it might be interesting to many readers of this blog as well: As many of you probably know, I’ve started working for W3C Developer Relations since this August. Half of my time is devoted to WebPlatform.org, a very promising project [...]]]></description>
				<content:encoded><![CDATA[<p>I posted about this in both the <a href="http://blog.webplatform.org/2012/11/live-examples-coming-soon/" target="_blank">WebPlatform.org blog</a> and <a href="http://blog.dabblet.com/post/35203393585/lots-of-improvements-in-the-pipeline" target="_blank">Dabblet’s blog</a>, but I thought it might be interesting to many readers of this blog as well:</p>
<blockquote><p>As many of you probably know, <a href="http://lea.verou.me/" target="_blank">I</a>’ve started working for <a href="http://www.w3.org/community/devrel/" target="_blank">W3C Developer Relations</a> since this August. Half of my time is devoted to <a href="http://www.webplatform.org/" target="_blank">WebPlatform.org</a>, a very promising project to document the web with the help of all major players, in a vendor-neutral way. Even before I joined <a href="http://w3.org" target="_blank">W3C</a>, we discussed using a hosted, customized version of <a href="http://dabblet.com">dabblet</a> in WebPlatform.org, as a platform for live code examples. I recently started working towards making this happen.</p>
<p>A lot of changes and improvements need to be made to achieve this, but the good news is, most of these will be pushed to dabblet.com as well! In a nutshell, this is what I’m currently working on:</p>
<ul>
<li>Adding JavaScript support — This will be a challenge UX-wise, as it shouldn&#8217;t run on every keystroke, like the HTML and CSS, but it should run on startup and it should be straight-forward how to get it to run. Perhaps it will also run after a significant pause in typing.</li>
<li>Dabblets that are not stored in Github, but get their data through POST requests.</li>
<li>Improving cross-browser support</li>
<li>Strengthening security</li>
<li>Integrating <a href="http://prismjs.com/" target="_blank">Prism</a>. Dabblet’s syntax highlighter might have been Prism’s precursor, but currently Prism has solved many of its bugs, and these fixes need to be pushed to dabblet at some point.</li>
<li>General bug fixing</li>
</ul>
<p>These will probably be gradually rolled out in dabblet.com and tested by the community, before we integrate dabblet into WebPlatform.org. If a new feature is significant enough, there will be a new blog post about it here, but don’t expect blog posts about bugfixes. I’m really excited to see dabblet flourish, and I believe you will be too, once these updates are out!</p></blockquote>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/SpHmwnbnqN4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/11/lots-of-improvements-coming-to-dabblet/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/11/lots-of-improvements-coming-to-dabblet/</feedburner:origLink></item>
		<item>
		<title>Easy color contrast ratios</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/gQtCq0btucM/</link>
		<comments>http://lea.verou.me/2012/10/easy-color-contrast-ratios/#comments</comments>
		<pubDate>Sun, 14 Oct 2012 04:22:52 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Apps & scripts]]></category>
		<category><![CDATA[a11y]]></category>
		<category><![CDATA[colors]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1941</guid>
		<description><![CDATA[I was always interested in accessibility, but I never had to comply with any guidelines before. At W3C, accessibility is considered very important, so everything we make needs to pass WCAG 2.0 AA level. Therefore, I found myself calculating color contrast ratios very frequently. It was a very enlightening experience. I used to think that [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://lea.verou.me/wp-content/uploads/2012/10/Screen-Shot-2012-10-14-at-06.08.41-.png"><img class="alignleft size-medium wp-image-1942" title="Screenshot with semi transparent background" src="http://lea.verou.me/wp-content/uploads/2012/10/Screen-Shot-2012-10-14-at-06.08.41--300x254.png" alt="" width="300" height="254" /></a>I was always interested in accessibility, but I never had to comply with any guidelines before. <a href="http://lea.verou.me/2012/08/lea-at-w3-org/" target="_blank">At W3C</a>, accessibility is considered very important, so everything we make needs to pass <a href="http://www.w3.org/TR/WCAG/" target="_blank">WCAG 2.0</a> AA level. Therefore, I found myself calculating color contrast ratios very frequently. It was a very enlightening experience. I used to think that WCAG-mandated contrast ratios were too restrictive and basically tried to force you to use black and white, a sentiment shared by many designers I’ve spoken to. Surprisingly, in practice, I found that in most cases they are very reasonable: When a color combination doesn’t pass WCAG, it usually *is* hard to read. After all, the possible range for a contrast ratio is 1-21 but only ratios lower than 3 don’t pass WCAG AA (4.5 if you have smaller, non-bold text). So, effectively 90% of combinations will pass (82.5% for smaller, non-bold text).</p>
<p>There are <a href="http://snook.ca/technical/colour_contrast/colour.html" target="_blank">plenty</a> <a href="http://www.colorsontheweb.com/colorcontrast.asp" target="_blank">of</a> <a href="http://juicystudio.com/services/luminositycontrastratio.php" target="_blank">tools</a> out there for this. However, I found that my workflow for checking a contrast ratio with them was far from ideal. I had to convert my CSS colors to hex notation (which I don&#8217;t often use myself anymore), check the contrast ratio, then adjust the colors as necessary, covert again etc. In addition, I had to adjust the lightness of the colors with a blindfold, without being able to see the difference my adjustments would make to the contrast ratio. When using semi-transparent colors, it was even worse: Since WCAG only describes an algorithm for opaque colors, all contrast tools only expect that. So, I had to calculate the resulting opaque colors after alpha blending had taken place. After doing that for a few days, I got so fed up that I decided to make <a href="http://leaverou.github.com/contrast-ratio/" target="_blank">my own tool</a>.</p>
<p>In addition, I discovered that there was no documented way of calculating the contrast ratio range that can be produced with a semi-transparent background, so I came up with an algorithm (after many successive failures to find the range intuitively), <a href="http://lists.w3.org/Archives/Public/w3c-wai-ig/2012OctDec/0011.html" target="_blank">published it in the w3c-wai-ig mailing list</a> and used the algorithm in my app, effectively making it the first one that can accept semi-transparent colors. If your math is less rusty than mine, I’d appreciate any feedback on my reasoning there.</p>
<p>Below is a list of features that make this tool unique for calculating color contrast ratios:</p>
<ul>
<li>Accepts any CSS color the browser does, not just hex colors. To do this, it defers parsing of the color to the browser, and queries the computed style, which is always rgb() or rgba() with 0-255 ranges which be parsed much more easily than the multitude of different formats than modern browsers accept (and the even more that are coming in the future).</li>
<li>Updates as you type, when what you&#8217;ve typed can be parsed as a valid CSS color.</li>
<li>Accepts semi transparent colors. For semi-transparent backgrounds, the contrast ratio is presented with an error margin, since it can vary depending on the backdrop. In that case, the result circle will not have a solid background, but a visualization of the different possible results and their likelihood (see <a href="http://lea.verou.me/wp-content/uploads/2012/10/Screen-Shot-2012-10-14-at-06.08.41-.png" target="_blank">screenshot</a>).</li>
<li>You can share your results by sharing the URL. The URL hashes have a reasonable structure of the form #foreground-on-background, e.g. <a href="http://leaverou.github.com/contrast-ratio/#black-on-yellow" target="_blank">#black-on-yellow</a> so you can even adjust the URL as a form of input.</li>
<li>You can adjust the color by incrementing or decrementing its components with the keyboard arrow keys until you get the contrast right. This is achieved by including my <a href="http://lea.verou.me/2011/02/incrementable-length-values-in-text-fields/" target="_blank">Incrementable</a> library.</li>
</ul>
<p>Browser support is IE10 and modern versions of Firefox, Safari, Chrome, Opera. Basic support for IE9. No responsive version yet, sorry (but you can always <a href="https://github.com/LeaVerou/contrast-ratio" target="_blank">send pull requests</a>!)</p>
<p>Save the link: <a href="http://leaverou.github.com/contrast-ratio" target="_blank">leaverou.github.com/contrast-ratio</a></p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/gQtCq0btucM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/10/easy-color-contrast-ratios/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/10/easy-color-contrast-ratios/</feedburner:origLink></item>
		<item>
		<title>Dive deep into CSS3 (and Bolognese!) in Bologna, Italy</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/iqrq_YeONo8/</link>
		<comments>http://lea.verou.me/2012/09/dive-deep-into-css3-in-bologna-italy/#comments</comments>
		<pubDate>Thu, 13 Sep 2012 19:00:00 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Speaking]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1921</guid>
		<description><![CDATA[I don’t usually like to advertise my talks or workshops through blog posts, and even though I&#8217;ve given a lot, I&#8217;ve only posted about less a handful. However, this one is special: It might be my last. Don’t get me wrong: I LOVE giving workshops, teaching people new things and seeing them put them in [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://lea.verou.me/wp-content/uploads/2012/09/spk_verou.png"><img class="alignleft size-full wp-image-1922" title="Illustration of me!" src="http://lea.verou.me/wp-content/uploads/2012/09/spk_verou.png" alt="" width="245" height="219" /></a>I don’t usually like to advertise my talks or workshops through blog posts, and even though I&#8217;ve given a lot, I&#8217;ve only posted about less a handful. However, this one is special: <strong>It might be my last</strong>. Don’t get me wrong: I LOVE giving workshops, teaching people new things and seeing them put them in use right away is fantastic. However, I also find them incredibly exhausting. Speaking for an entire day (or sometimes two!) is pretty much the most tiring thing I&#8217;ve done. So, given <a href="http://lea.verou.me/2012/08/lea-at-w3-org/">my new job at W3C</a>, I&#8217;m not sure if I will do one again. Of course, it goes without saying that I will still do plenty of talks! <img src='http://lea.verou.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The last workshop on my schedule is in <a href="http://2012.fromthefront.it/" target="_blank">FromTheFront conference in Bologna, Italy</a> on <strong>September 20th</strong> (in 7 days!). There are still some spots available, so <a href="http://2012.fromthefront.it/index.html#cart" target="_blank">grab yours while you still can</a>! It only costs <strong>€329.00</strong>. It will be very hands-on, with interactive exercises that help you gain first-hand experience with small but advanced use cases. It will not be your usual CSS3-overview kind of workshop. Instead, we will dive really deep into a handful of CSS3 aspects that I think are most useful for your everyday work.</p>
<p>While you’re at it, I’d also recommend getting a conference ticket as well. The <a href="http://2012.fromthefront.it/speakers.html" target="_blank">line-up</a> has some excellent speakers and it’s only €110 more, so totally worth it!</p>
<p>Apologies that my last two blog posts were personal, the next one will be more technical: I have a very useful tool in the pipeline that I’m gonna release soon <img src='http://lea.verou.me/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/iqrq_YeONo8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/09/dive-deep-into-css3-in-bologna-italy/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/09/dive-deep-into-css3-in-bologna-italy/</feedburner:origLink></item>
		<item>
		<title>lea＠w3․org</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/Q9sKuc_EOKc/</link>
		<comments>http://lea.verou.me/2012/08/lea-at-w3-org/#comments</comments>
		<pubDate>Wed, 01 Aug 2012 03:00:23 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[W3C]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1866</guid>
		<description><![CDATA[In my recent post describing how I got into web development I wrote that I’m in the verge of some big changes in my life. The main one of them starts tomorrow. As of tomorrow, the above will be my professional email. Yes, you guessed it right; I’m joining the W3C team! Yes, the same W3C you all know and [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://lea.verou.me/wp-content/uploads/2012/08/Screen-Shot-2012-08-01-at-14.55.40-.png"><img class="alignleft size-full wp-image-1876" title=":)" src="http://lea.verou.me/wp-content/uploads/2012/08/Screen-Shot-2012-08-01-at-14.55.40-.png" alt="" width="244" height="364" /></a>In my recent post describing <a href="http://lea.verou.me/2012/05/how-i-got-into-web-development-the-long-version/" target="_blank">how I got into web development</a> I wrote that I’m in the verge of some big changes in my life. The main one of them starts tomorrow. As of tomorrow, the above will be my professional email. Yes, you guessed it right; I’m joining the <a href="http://w3.org">W3C</a> <a href="http://www.w3.org/People/">team</a>! Yes, the same <a href="http://w3.org">W3C</a> you all know and love <img src='http://lea.verou.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I decided to title this blog post with it, as I like how a 10 letter string manages to neatly summarize so much.</p>
<p>Working at W3C had been a dream of mine ever since I learned what a web standard is. As you probably know if you&#8217;ve been following my work, I’m a strong believer in open web standards. Even though proprietary technology might offer some short term benefits, in the long run only open standards can allow the Web to reach its full potential.</p>
<p>I’d like to especially thank the two people below (in chronological order). If it wasn’t for them, this dream would have never materialized:</p>
<ul>
<li><a href="http://oli.jp/" target="_blank">Oli Studholme</a>: I still remember our IRC conversation back in January. I was telling him how much I’d love to work for W3C, but &#8220;I’m not that good&#8221;. He repeatedly encouraged me to contact W3C and express my interest, despite my strong reluctance to do so. &#8220;Don’t be like the 15 year old boy that is too shy to ask the girl out&#8221; was the argument that finally convinced me. He even asked around to find which person I should contact.</li>
<li><a href="http://schepers.cc/" target="_blank">Doug Schepers</a>: If it wasn’t for Doug’s heroic efforts, this would have never happened. He believed in me from the start and did everything he could to for this to go through. He spent an incredible amount of time trying to help me, although I repeatedly bombarded him with a cornucopia of silly questions. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Over the course of these 6 months, he didn&#8217;t just become a colleague, but also a friend.</li>
</ul>
<div>Thank you both. I’m deeply grateful.</div>
<p>I will be part of the <a href="http://www.w3.org/community/devrel/" target="_blank">W3C developer relations</a> and <a href="http://www.w3.org/community/webed/" target="_blank">web education</a> efforts, working a lot with Doug (aka <a href="http://twitter.com/shepazu" target="_blank">@shepazu</a>). In practice, this means:</p>
<ul>
<li>Help developers understand where standards are headed, and solicit early feedback on upcoming features.</li>
<li>Help Working Groups understand what developers need.</li>
<li>Help plan W3C developer events, including conferences</li>
<li>Speaking about open web technologies at conferences and other events</li>
<li>Writing articles and documentation about open web technologies</li>
<li>Making demos and tools that demonstrate and help authors understand web standards</li>
</ul>
<p>In addition, I will be helping with the design of many W3C-related things, as I will be the only designer at W3C.</p>
<p>As you can see I’ll be wearing many hats, which is exactly what I love about this role! I had many tempting offers from big US companies that offered salaries with more digits and a lot of perks. However, my heart wanted W3C and this role was practically tailored to my talents and interests.</p>
<p>I&#8217;m honored to be a part of <a href="http://w3.org">W3C</a> and I&#8217;m looking forward to helping out.</p>
<p>&lt;voice type=&#8221;fangirl&#8221;&gt;I have to admit I’m also really looking forward to meeting Sir <a href="http://www.w3.org/People/all#timbl" target="_blank">Tim Berners-Lee</a> in person! <img src='http://lea.verou.me/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> &lt;/voice&gt;</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/Q9sKuc_EOKc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/08/lea-at-w3-org/feed/</wfw:commentRss>
		<slash:comments>85</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/08/lea-at-w3-org/</feedburner:origLink></item>
		<item>
		<title>Introducing Prism: An awesome new syntax highlighter</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/haA_Bbnya8M/</link>
		<comments>http://lea.verou.me/2012/07/introducing-prism-an-awesome-new-syntax-highlighter/#comments</comments>
		<pubDate>Tue, 31 Jul 2012 06:40:10 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Apps & scripts]]></category>
		<category><![CDATA[Original]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1841</guid>
		<description><![CDATA[For the past three weeks, on and off, I’ve been working on releasing Dabblet’s syntax highlighter as standalone, since many people had requested it. Zachary Forrest  suggested the name &#8220;Prism&#8221; and I liked it so much I decided to go with it, even though there is an abandoned Mozilla project with the same name. I ended [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://prismjs.com"><img class="alignleft size-medium wp-image-1858" title="Screenshot from Prism’s homepage" src="http://lea.verou.me/wp-content/uploads/2012/07/Screen-Shot-2012-07-31-at-18.33.58--300x158.png" alt="" width="300" height="158" /></a>For the past three weeks, on and off, I’ve been working on releasing <a href="http://dabblet.com" target="_blank">Dabblet</a>’s syntax highlighter as standalone, since many people had requested it. Zachary Forrest  <a href="https://twitter.com/zdfs/statuses/217834980871639041" target="_blank">suggested the name &#8220;Prism&#8221;</a> and I liked it so much I decided to go with it, even though there is <a href="https://wiki.mozilla.org/Prism" target="_blank">an abandoned Mozilla project with the same name</a>. I ended up refactoring and extending it so much that I will need to backport it to Dabblet one of these days! This doesn’t mean I bloated it, the core is still a tiny 1.5KB minified &amp; gzipped. It just means it’s more awesome. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://prismjs.com"><img class="size-full wp-image-1856 alignnone" title="Prism’s first themes" src="http://lea.verou.me/wp-content/uploads/2012/07/Screen-Shot-2012-07-31-at-18.31.22-.png" alt="" width="813" height="415" /></a></p>
<h2>Seriously? The world needs another syntax highlighter?</h2>
<p>In certain ways, Prism is better than any other syntax highlighter I’ve seen:<span id="more-1841"></span></p>
<ul>
<li>It’s tiny. The core is only 1.5KB minified &amp; gzipped, which can go up to 2KB with the currently available language definitions (CSS, Markup and JS). But many other highlighters are also small, so read on.</li>
<li>It&#8217;s <strong>incredibly extensible</strong>. Not only it&#8217;s easy to add new languages (that&#8217;s a given with every syntax highlighter these days), but also to <strong>extend existing ones</strong>. Most importantly, it supports <strong>plugins</strong>, through <strong>hooks strategically placed in its source</strong>. There are <a href="http://prismjs.com/plugins/">a few plugins already available</a>, and it&#8217;s <a href="http://prismjs.com/extending.html#writing-plugins">really easy to write your own</a>. I haven&#8217;t seen any other highlighter that supports plugins.</li>
<li>It <strong>encourages good author practices</strong>. Other highlighters encourage or even force you to use elements that are semantically wrong, like &lt;pre&gt; (on its own) or &lt;script&gt;. Prism forces you to use the only semantically correct element for marking up code: &lt;code&gt;. On its own for inline code, or inside a &lt;pre&gt; for blocks of code. In addition, the code language is declared through <a href="http://www.w3.org/TR/html5/the-code-element.html#the-code-element">the way recommended in the HTML5 draft</a>: through a language-xxxx class.</li>
<li>One of its best features: <strong>The language definition is inherited</strong>. This means that if multiple code snippets have the same language, you can just define it once, in one of their common ancestors. Obviously, if you define a language on the &lt;body&gt; element, you’ve essentially declared a default language for the entire document.</li>
<li><strong>It looks good</strong>. All three of its existing themes. Most people wanted me to release Dabblet&#8217;s highlighter because they found other highlighters (including their themes) quite ugly.</li>
<li>It supports <strong>parallelism through Web Workers</strong>, for better performance in certain cases.</li>
<li>It <strong>doesn’t force you to use any Prism-specific markup</strong>, not even a Prism-specific class name, only standard markup you should be using anyway. So, you can just try it for a while, remove it if you don’t like it and leave no traces behind.</li>
</ul>
<p>However, there are some limitations too:</p>
<ul>
<li>Pre-existing HTML in the code block will be stripped off. However, there are plugins for <a href="http://prismjs.com/plugins/autolinker/">links</a> and <a href="http://prismjs.com/plugins/line-highlight">highlighting certain lines</a>.</li>
<li>I decided not to support IE8. Prism won&#8217;t break on IE8, it just won&#8217;t work. I don’t think many people using IE8 and below are able to read code, so I don&#8217;t see the point.</li>
</ul>
<p>Enjoy: <a class="view-demo" href="http://prismjs.com">prismjs.com</a></p>
<p>If you like this project, don’t forget to <a href="https://twitter.com/prismjs" target="_blank">follow @prismjs on Twitter</a>!</p>
<p>I&#8217;ll soon update this blog to use Prism in the code examples as well.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/haA_Bbnya8M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/07/introducing-prism-an-awesome-new-syntax-highlighter/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/07/introducing-prism-an-awesome-new-syntax-highlighter/</feedburner:origLink></item>
		<item>
		<title>Important -prefix-free update</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/Iv54X1wIC9g/</link>
		<comments>http://lea.verou.me/2012/07/important-prefix-free-update/#comments</comments>
		<pubDate>Tue, 24 Jul 2012 08:22:46 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[-prefix-free]]></category>
		<category><![CDATA[CSS gradients]]></category>
		<category><![CDATA[css3 gradients]]></category>
		<category><![CDATA[Vendor prefixes]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1845</guid>
		<description><![CDATA[Those of you that have been following and/or using my work, are surely familiar with -prefix-free. Its promise was to let you write DRY code, without all the messy prefixes, that would be standards-compliant in the future (which is why I&#8217;m always against adding proprietary features in it, regardless of their popularity). The way -prefix-free [...]]]></description>
				<content:encoded><![CDATA[<p>Those of you that have been following and/or using my work, are surely familiar with <a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a>. Its promise was to let you write DRY code, without all the messy prefixes, that would be standards-compliant in the future (which is why I&#8217;m always against adding proprietary features in it, regardless of their popularity). The way <a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a> works is that it feature tests which CSS features are available <strong>only</strong> with a prefix, and then adds the prefix in front of their occurences in the code. Nothing will happen if the feature is supported both with and without a prefix or if it&#8217;s not supported at all.</p>
<p>This worked well when browsers implementations aren&#8217;t significantly different from the unprefixed, standard version. It also works fine when the newer and the older version use incompatible syntaxes. For example, direction keywords in gradients. The old version uses <code>top</code> whereas the new version uses <code>to bottom</code>. If you include both versions, the cascade does its job and ignores the latter version if it&#8217;s not supported:</p>
<pre><code class="language-css">background: linear-gradient(top, white, black);
background: linear-gradient(to bottom, white, black);</code></pre>
<p>However, when the same syntax means different things in the older and the newer version, things can go horribly wrong. Thankfully, this case is quite rare. A prime example of this is linear gradient angles. <code>0deg</code> means a horizontal (left to right) gradient in prefixed linear-gradients and a vertical (bottom to top) gradient in unprefixed implementations, since they follow the newer <a href="http://www.w3.org/TR/css3-images/" target="_blank">Candidate Recommendation</a> rather than the old draft. This wasn&#8217;t a problem when every browser supported only prefixed gradients. However, now that <a href="http://blogs.msdn.com/b/ie/archive/2012/06/25/unprefixed-css3-gradients-in-ie10.aspx" target="_blank">IE10</a> and <a href="http://hacks.mozilla.org/2012/07/aurora-16-is-out/" target="_blank">Firefox 16</a> are unprefixing their gradients implementations, it was time for me to face the issue I was avoiding ever since I wrote <a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a>.</p>
<p>The solution I decided on is consistent with <a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a>’s original promise of allowing you to write mostly standards-compliant code that will not even need <a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a> in the future. Therefore, <strong>it will assume that your gradients use the newer syntax</strong>, and if only a prefixed implementation is available, it will convert the angles to the legacy definition. This means that <strong>if you update <a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a> on a page that includes gradients coded with the older definition, they might break</strong>. However, <strong>they would break anyway</strong> in modern browsers, so the sooner the better. Even if you weren&#8217;t using <a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a> at all, and had written all the declarations by hand before the angles changed, you would still have to update your code. Unfortunately, that&#8217;s the risk we all take when using experimental features like CSS gradients and I think it&#8217;s worth it.</p>
<p><a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a> will not take care of any other syntax changes, since when the syntaxes are incompatible, you can easily include both declarations. The angles hotfix was included out of necessity because there is no other way to deal with it.</p>
<p>Here’s a handy JS function that converts older angles to newer ones:</p>
<pre><code class="language-javascript">function fromLegacy(deg) { return Math.abs(deg-450) % 360 }</code></pre>
<p>You can read more about the changes in gradient syntax in <a href="http://blogs.msdn.com/b/ie/archive/2012/06/25/unprefixed-css3-gradients-in-ie10.aspx" target="_blank">this excellent IEblog article</a>.</p>
<p>In addition to this change, a new feature was added to <a href="http://leaverou.github.com/prefixfree/" target="_blank">-prefix-free</a>. If you ONLY want to use the prefixed version of a feature, but still don’t want to write out of all the prefixes, you can just use <code>-*-</code> as a prefix placeholder and it will be replaced with the current browser’s prefix on runtime. So, if you don&#8217;t want to change your angles, you can just prepend <code>-*-</code> to your linear-gradients, like so:</p>
<pre><code class="language-css">background: -*-linear-gradient(0deg, white, black);</code></pre>
<p>However, it&#8217;s a much more futureproof and standards compatible solution to just update your angles to the new definition. You know you’ll have to do it at some point anyway. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Edit:</strong> Although -prefix-free doesn’t handle syntax changes in radial gradients, since the syntaxes are mutually incompatible, you may use this little PrefixFree plugin I wrote for the <a href="http://lea.verou.me/css3patterns/" target="_blank">CSS Patterns Gallery</a>, which converts the standard syntax to legacy syntax when needed:</p>
<pre><code class="language-javascript">StyleFix.register(function(css, raw) {
	if (PrefixFree.functions.indexOf('radial-gradient') &gt; -1) {
		css = css.replace(/radial-gradient\(([a-z-\s]+\s+)?at ([^,]+)(?=,)/g, function($0, shape, center){
			return 'radial-gradient(' + center + (shape? ', ' + shape : '');
		});
	}

	return css;
});</code></pre>
<p>Keep in mind however that it&#8217;s very crude and not very well tested.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/Iv54X1wIC9g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/07/important-prefix-free-update/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/07/important-prefix-free-update/</feedburner:origLink></item>
		<item>
		<title>So, you’ve been invited to speak</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/KtJIHpmchKA/</link>
		<comments>http://lea.verou.me/2012/06/so-youve-been-invited-to-speak/#comments</comments>
		<pubDate>Mon, 25 Jun 2012 12:06:20 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1824</guid>
		<description><![CDATA[I’ve been lucky enough to be invited to do about 25 talks over the course of the past few years and I have quite a few upcoming gigs as well, most of them at international conferences around Europe and the US. Despite my speaking experience, I’m still very reluctant to call myself a &#8220;professional speaker&#8221; or [...]]]></description>
				<content:encoded><![CDATA[<p>I’ve been lucky enough to be invited to do <a href="http://lea.verou.me/speaking/#past" target="_blank">about 25 talks</a> over the course of the past few years and I have quite <a href="http://lea.verou.me/speaking/#upcoming" target="_blank">a few upcoming gigs</a> as well, most of them at international conferences around Europe and the US. Despite my speaking experience, I’m still very reluctant to call myself a &#8220;professional speaker&#8221; or even a &#8220;speaker&#8221; at all. In case you <a href="https://twitter.com/#!/leaverou" target="_blank">follow me on twitter</a>, you might have noticed that my bio says &#8220;Often pretends to be a speaker&#8221;, and that captures exactly how I feel. I’m not one of those confident performers that don’t just present interesting stuff, but also can blurt jokes one after the other, almost like stand-up comedians and never backtrack or go &#8220;ummm&#8221;. I greatly admire these people and I aspire to become as confident as them on stage one day. People like <a href="https://twitter.com/aral" target="_blank">Aral Balkan</a>, <a href="https://twitter.com/#!/codepo8" target="_blank">Christian Heilmann</a>, <a href="https://twitter.com/#!/stubbornella" target="_blank">Nicole Sullivan</a>, <a href="https://twitter.com/#!/jaffathecake" target="_blank">Jake Archibald</a> and many others. Unlike them, I often backtrack mid-sentence, say a lot of &#8220;ummmm&#8221;s and sometimes talk about stuff that was going to be later in my slides, all of which are very awkward.</p>
<p>However, I’ve reached the conclusion that I must be doing something right. I do get a lot of overwhelmingly positive feedback after almost every talk, even by people I admire in the industry. I don’t think I’ve ever gotten a negative comment for a talk, even in cases that I thought I had screwed up. Naturally, after all these conferences, I’ve attended a lot of technical talks myself, and I’ve gathered some insight on what constitutes a technical talk the audience will enjoy. I’ve been pondering to write a post with advice about this for a long time, but my lack of confidence about my speaking abilities put me off the task. However, since people <a href="https://twitter.com/briangarcia/status/213321684890025984" target="_blank">seem</a> <a href="https://twitter.com/yaypie/status/213307187475386369" target="_blank">to</a> <a href="https://twitter.com/miketaylr/status/213299054166286337" target="_blank">consider</a> <a href="https://twitter.com/aral/status/210720110535651330" target="_blank">me</a> <a href="https://twitter.com/aral/status/209580131470147585" target="_blank">good</a>, I figured it might help others doing technical talks as well.</p>
<p>All of the following are rules of thumb. You have to keep in mind that there are exceptions to every single one, but it’s often quicker and more interesting to talk in absolutes. I will try to stay away from what’s already been said in other similar articles, such as &#8220;tell a story&#8221; or &#8220;be funny&#8221; etc, not because it’s bad advice, but because a) I’m not really good at those so I prefer to let others discuss them and b) I don’t like repeating stuff that’s already been said numerous times before. I will try to focus on what I do differently, and why I think it works. It might not fit your style and that’s ok. Audiences like a wide range of presentation styles, otherwise I’d be screwed, as I don’t fit the traditional &#8220;good speaker&#8221; profile. Also, it goes without saying that some of my advice might be flat out wrong. I’m just trying to do pattern recognition to figure out why people like my talks. That’s bound to be error-prone. My talks might be succeeding in spite of X and not because of it.<span id="more-1824"></span></p>
<h3>1. Do something unique</h3>
<p>There are many nice talks with good minimal slides (almost everyone has read <a href="http://www.presentationzen.com/" target="_blank">Presentation Zen</a> by now), funny pictures, good content and confident presenters. In fact, they dominate almost every conference I’ve been at. You can always become a good speaker by playing it safe, and many famous speakers in the industry have earned their fame by doing so. There is absolutely nothing wrong with that. However, to stand out doing that kind of talk, you need to be <strong>really, really good</strong>. Hats off to the speakers that managed to stand out doing talks like that, because it means they are truly amazing.</p>
<p>However, if you, like me, fear that your speaking skills are not yet close to that caliber, you need to figure out something else that sets you apart. Something that will make your talk memorable. <strong>We see a lot of innovation in our discipline, but it’s limited to the scripts and apps we write. Why not to our presentations as well?</strong> Do something different, and make it your thing, your &#8220;trademark&#8221; way of presenting.</p>
<p>For me, that was the embedded demos in my slides. I usually have a small text field where I write code, and something (often the entire slide or text field itself) that displays the outcome. This lets the attendees see not just the end result, but also the intermediate states until we get there, which often proves out to be enlightening. It also makes the slide quite flexible, as I can always show something extra if I have the time.</p>
<p>Of course, it also means that things might (and if you talk often enough, will at some point) go wrong. To mitigate this to a degree, I try to keep demos small, with a sensible starting state, so that I won’t have to write a lot of code. Which brings us to the next point.</p>
<h3>2. Never show a lot of code on a slide</h3>
<p>I have a theory: Attendees’ understanding of code decreases exponentially as the lines of simultaneously displayed code increase. Avoid showing many lines of code at once like the plague. Although I’ve shown up to 10 lines of code on a single slide (maybe even more), I usually try to keep it well below five. Ideally less than three even. If you absolutely <strong>must</strong> present more code, try to use a technique to make the audience understand it by chunks, so that they still only have to process very little code at any given time.</p>
<p>One technique I use for that is showing little code at first, and writing the rest on stage, gradually, explaining the steps as I go. When that isn’t possible or it doesn’t make sense (for example when there is no visual result to see), I try to show parts of the code step by step, explaining what everything does as it appears. This doesn’t necessarily mean showing one line at a time. For example, if you are showing a JS function, it makes sense to show the closing brace at the same time as the opening brace and not at the end. Show the elements of the code in the order you would write them in a top-down implementation, not by pure source order (although in some cases those two may coincide). To make this more clear, here’s an <a href="http://lea.verou.me/polyfilling-the-gaps/#slide45" target="_blank">example slide</a> where I used this technique. It’s from my &#8220;Polyfilling the gaps&#8221; talk at JSConf EU 2011, one of the very few talks of mine that had no live coding.</p>
<p>Also, it goes without saying that if you have to present a lot of code at once, syntax highlighting is a must. Comments aren’t: That’s what you are there for. Comments just add visual clutter and make it harder for people to interpret the actual code. Also, while explaining the code, try to somehow highlight the part you’re currently describing, even if your method is as rudimentary as selecting the text. Otherwise, if someone misses a sentence, they will completely lose track.</p>
<h3>3. IDEs are not good presentation tools</h3>
<p>I’ve seen this so many times: Someone wants to live demo a technology and fires up their IDE or text editor and starts coding. The audience tries to follow along at first, but at some point almost always gets lost. While these tools are great for programming, they are not presentation tools. They have a lot of distracting clutter, very small text and require you to show parts of the code that aren’t really relevant. They also require you to switch applications to toggle between the code and result, which disrupts the flow of your presentation.</p>
<p>In addition, the probability you will make a mistake increases exponentially with the amount of code you write, both in real life and especially in presentations where you are also nervous. Then the audience is stuck with an embarrassed presenter trying to find what’s wrong for five minutes, until someone from the audience decides to put them out of their misery and shout that a closing parenthesis is missing on line 25.</p>
<p>That’s why live coding has gotten a bad reputation over the years.</p>
<p>As you’ve probably figured from tip #1, I’m not against live coding. Done well, it can really help the audience learn. However, if not done properly, it can end up completely wrecking a talk. Even if you absolutely have to use an external tool, try to make the experience as smooth as possible:</p>
<ul>
<li>Hide any toolbars, sidebars, panels. If your editor doesn’t allow you to hide everything that isn’t relevant, use another editor.</li>
<li>Make the text BIG. If possible, as big as the text in your slides. Remember: Text in slides is big, because you need even the attendees sitting in the back rows to still be able to read it. Why is it that this simple consideration seems to escape so many presenter minds when they switch from slides to code?</li>
<li>If parts of the code are needed but not relevant (e.g. CSS files in a JavaScript talk), put them in separate files and reference them. Try to minimize the code you will actually show as much as possible, and then even more.</li>
<li>If applicable, use <a href="http://livereload.com/" target="_blank">LiveReload</a> and have the browser window and code editor side by side.</li>
</ul>
<h3>4. Don’t aim to beginners (only)</h3>
<p>Some of the nastiest criticism I’ve seen against people’s talks was that they were too elementary. Getting feedback like that has almost become a phobia of mine. Of course, it’s always better if your entire audience is at the same level, and you are fully aware what that level is. However, that’s almost never the case, so you will have to err on one side. Do your best to cater to the median, but when you have to err, err on the side of more advanced content. A somewhat selfish reason would be that <strong>when people find your talk too elementary, they will blame you; when they find it too advanced, they will blame themselves.</strong> However, it’s not just covering your ass, it’s better for your audience as well. Someone who didn’t learn anything new gets absolutely nothing out of your talk (unless it’s an interesting performance on its own, e.g. so funny it could have been stand up comedy for geeks). A person that learned many things but didn’t understand some of the more advanced concepts will still have gotten a lot out of it.</p>
<p><strong>If someone learns a useful thing or two from your talk, that’s what they’ll remember.</strong> Even if the rest of the talk was elementary or too advanced for them, they will walk out with a positive impression, thinking &#8220;I learned something today!&#8221;. Even if most of your talk is elementary, try to sneak in some more advanced or obscure bits, that not many people know.</p>
<p>My favorite approach to cater for a diverse audience with very different levels of experience, is to pick a narrow topic, start from the very basics and work my way up to more advanced concepts. This way everyone learns something, and nobody feels intimidated. On the flip side, if you are in a multi-track conference, this also limits the potential audience that might come to your talk.</p>
<h3>5. Eat your own dog food</h3>
<p>I’m a huge fan of HTML-based (or SVG-based) slideshows. I’ve always been, since my first talk. It’s a technology you’re already accustomed to, so you can do amazing things with it. You can write scripts that demonstrate the concepts you describe in some visual way, you can do live demos, you can embed iframes of other people’s demos, you know how to style it much better than you likely know how to use Keynote. Yes, if you’re used to traditional presentation tools, it might be hard at first. Many features you’ve been taking for granted will be missing. Styling is not visual, there are no presenter notes, no next slide preview, no automatic adjustment to the projector resolution to name a few. But what you gain in potential and expressiveness, are totally worth the trade-off. Also, rather than having the talk prep keep you from writing code and becoming better at what you do, it will now actually contribute to it! It’s also a great chance to try experimental stuff, as it’s going to be run in a very controlled environment.</p>
<p>You don’t even need to write your own presentation framework if you don’t want to. There are a ton available now, such as <a href="https://github.com/LeaVerou/CSSS" target="_blank">my own CSSS</a>, <a href="http://bartaz.github.com/impress.js/" target="_blank">impress.js</a> and <a href="http://en.wikipedia.org/wiki/Web-based_slideshow" target="_blank">many others</a>.</p>
<h3>6. Involve the audience</h3>
<p>There is an old Chinese proverb that goes like:</p>
<blockquote><p>Tell me, and I’ll forget<br />
Show me, and I’ll remember<br />
Involve me, and I’ll understand</p></blockquote>
<p>I’ve noticed that audiences respond extremely well to talks that attempt to involve them. <a href="http://seb.ly/" target="_blank">Seb-Lee Delisle</a> gave a talk at Fronteers 2011 where he involved the audience by ideas like demonstrating Web Sockets through making their iPhones flash in such a way that he could create light patterns with the audience. Even though some of the demos failed (I think something crashed, don’t remember very well), the audience <strong>loved every bit</strong>. I’ve rarely seen people that excited about a talk.</p>
<p>Involving the audience was something I wanted to do for a while. In my recent Regular Expressions talks, I had a series of small &#8220;challenges&#8221; where the audience tried to write a regexp to match a certain set of strings as quickly as possible and tweet it. I provided a link to <a href="http://leaverou.github.com/regexplained/" target="_blank">an app I made especially for that</a>. The person who got most regexes right (or more right than others) won a book. This was also very well received and lots of positive feedback mentioned it. When it feels like a game, learning is much more fun.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/KtJIHpmchKA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/06/so-youve-been-invited-to-speak/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/06/so-youve-been-invited-to-speak/</feedburner:origLink></item>
		<item>
		<title>Why I bought a high-end MacBook Air instead of the Retina MBP</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/mZD6cKfmgLE/</link>
		<comments>http://lea.verou.me/2012/06/why-i-bought-a-high-end-macbook-air-instead-of-the-retina-mbp/#comments</comments>
		<pubDate>Sun, 17 Jun 2012 23:22:30 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1803</guid>
		<description><![CDATA[After the WWDC keynote, I was convinced I would buy a new MacBook Air. I was looking forward to any announcements about new hardware during the event, as my 13&#8243; 2010 MacBook Pro (Henceforth abbreviated as MBP) was becoming increasingly slow and dated. Also, I wanted to gift my MBP to my mother, who is [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://lea.verou.me/wp-content/uploads/2012/06/my-mba.jpg"><img class="alignleft size-medium wp-image-1816" title="My new MacBook Air" src="http://lea.verou.me/wp-content/uploads/2012/06/my-mba-300x224.jpg" alt="" width="300" height="224" /></a>After the WWDC keynote, I was convinced I would buy a new MacBook Air. I was looking forward to any announcements about new hardware during the event, as my 13&#8243; 2010 MacBook Pro (Henceforth abbreviated as MBP) was becoming increasingly slow and dated. Also, I wanted to gift my MBP to my mother, who is currently using a horrible tiny Windows XP Netbook and every time I see her struggling to work on it, my insides hurt. All tweets about my shopping plans, or, later, about my new toy (I bought it yesterday) were met with surprise and bewilderment: I was repeatedly bombarded with questions asking why I’m not getting a Retina MacBook Pro, over and over again. The fact that I paid about $2200 + tax for it (it&#8217;s the best 13&#8243; Air you can currently get) made it even more weird: <strong>If you could afford that, why wouldn&#8217;t you possibly get the Retina MBP at the exact same price?</strong></p>
<p>At first, I tried to reply with individual tweets to everyone that asked. Then I got tired of that and started replying with links to the first tweets, then I decided to write a blog post. So, here are my reasons:<span id="more-1803"></span></p>
<h3>Portability</h3>
<p>I travel a lot. For me, it’s very important to be able to use my laptop in a cramped airplane seat, or while standing in a line. You can’t really do that with a 15&#8243; MacBook Pro, even with the new slimmer design. I wanted to be able to quickly pull it out of my tote bag with one hand, hold it with said hand and quickly look up something with the other hand. Usage scenarios of that sort are just unthinkable for big laptops. Of course, portability is not the only thing that matters, as I only use one laptop as my main work machine. Having two machines, one for portability and one for &#8220;real work&#8221;, always seemed to me like more hassle than it’s worth. So, a 11&#8243; MacBook Air was also out of the question. Which brings us to the middle ground of a 13&#8243; laptop. All my laptops had always been around 13&#8243;. It’s a perfect trade-off between power and portability and I don’t wish to change that any time soon. It was quite simple: The 13&#8243; Air is more portable than my MBP. The 15&#8243; Retina MBP was less portable. I needed more portability than I had, not less.</p>
<h3>I saw the Retina MBP and wasn’t too impressed</h3>
<p>When I first went to the Apple Store to buy the MacBook Air, I saw the new Retina display. I even managed to use it a bit, despite the swarm of fellow geeks nerdgasming uncontrollably around it. I won’t lie: I was tempted at first. The display is very crisp indeed, although the difference between icons that were not updated for the Retina is quite obvious, especially next to their accompanying text (which is always crisp, since text is vector-based). I started being unsure about my decision, as <a href="http://www.stubbornella.org/content/" target="_blank">Nicole Sullivan</a> can attest (she was with me). And then it dawned on me: Hey, I should see the MacBook I was planning to buy in person too. Maybe its screen is also quite crisp. Maybe the difference won&#8217;t even be that noticeable. I was right: My simple, untrained eyes could not really tell the difference. MacBook Airs have a decently crisp screen. Of course, if you put them next to each other, I’d imagine the difference would be fairly obvious. But who does that?</p>
<p>However, my impression still wasn&#8217;t sufficient to make a decision. I’ve learned not to trust my unreliable human senses too much. I needed numbers. Calculating the actual DPI of a monitor is actually fairly simple: All you need is the <a href="http://en.wikipedia.org/wiki/Pythagorean_theorem" target="_blank">Pythagorean theorem</a> you learned in school, to calculate the hypotenuse of the screen in pixels, and then divide that number by the length of the diagonal in inches. The result will be the number of pixels per inch, commonly (and slightly incorrectly) referred to as DPI (PPI is more correct). If you know basic JavaScript, you don&#8217;t even need a calculator, just your ol’ trusty console.</p>
<p>I even wrote a handy function that does it for me:</p>
<pre>function dpi(w,h,inches) { return Math.round(Math.sqrt(w*w + h*h)/inches) }</pre>
<p>For the 13&#8243; MacBook Air, the DPI is:</p>
<pre>&gt; dpi(1440, 900, 13.3)
128</pre>
<p>For the Retina MBP, it’s:</p>
<pre> &gt; dpi(2880, 1800, 15.4)
 221</pre>
<p>220 DPI is certainly higher than 130, but it’s not the kind of eyegasm-inducing difference I experienced when I moved from an iPhone 3G to an iPhone 4 (the difference there was 163 DPI vs 326 DPI).</p>
<h3>I don’t want to distance myself too much from the average web user</h3>
<p>It happens more than we like to admit: We get cool new hardware, and eventually we’re carried away and think most web users are close to our level. We start designing for bigger and bigger resolutions, because it&#8217;s hard to imagine that some people are still on 1024&#215;768. We code to better CPUs, because it&#8217;s hard to imagine how crappy computers many of our target users have. We don&#8217;t care about bandwidth and battery, because they aren&#8217;t a concern for most of us. Some of us will realize before launching, during a very painful testing session, some others will only realize after the complaints start pouring in. It&#8217;s the same reason a website always looks and works better in the browser its developers use, even though almost always it gets tested in many others.</p>
<p>We like to think we&#8217;re better than that, that we always test, that we never get carried away, but in most cases we are lying to ourselves. So, even though I recognize that I probably have much better hardware than most web users, I consciously try to avoid huge resolutions as I know I’ll get carried away. I try to keep myself as close to the average user as I can tolerate. Using IE9 on a 1024&#215;768 resolution would be over that threshold, but not using a Retina display is easily tolerable.</p>
<h3>That’s all folks</h3>
<p>Hope this makes sense. Hopefully, it might help others trying to decide between the two. I sure am very happy so far with my new Air <img src='http://lea.verou.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/mZD6cKfmgLE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/06/why-i-bought-a-high-end-macbook-air-instead-of-the-retina-mbp/feed/</wfw:commentRss>
		<slash:comments>86</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/06/why-i-bought-a-high-end-macbook-air-instead-of-the-retina-mbp/</feedburner:origLink></item>
		<item>
		<title>Hacking lookahead to mimic intersection, subtraction and negation</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/aM8uaGlDREs/</link>
		<comments>http://lea.verou.me/2012/05/hacking-lookahead-to-mimic-intersection-subtraction-and-negation/#comments</comments>
		<pubDate>Sun, 13 May 2012 14:01:26 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[regular expressions]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1784</guid>
		<description><![CDATA[Note: To understand the following, I expect you to know how regex lookahead works. If you don’t, read about it first and return here after you’re done. I was quite excited to discover this, but to my dismay, Steven Levithan assured me it’s actually well known. However, I felt it’s so useful and underdocumented (the only references to [...]]]></description>
				<content:encoded><![CDATA[<p><em><strong>Note:</strong> To understand the following, I expect you to know how regex lookahead works. If you don’t, <a href="http://www.regular-expressions.info/lookaround.html" target="_blank">read about it first</a> and return here after you’re done.</em></p>
<p>I was quite excited to discover this, but to my dismay, <a href="https://twitter.com/#!/slevithan/status/201340048317227008" target="_blank">Steven Levithan assured me</a> it’s actually well known. However, I felt it’s so useful and underdocumented (the only references to the technique I could find was several StackOverflow replies) that I decided to blog about it anyway.</p>
<p>If you’ve been using regular expressions for a while, you surely have stumbled on a variation of the following problems:</p>
<ul>
<li><strong>Intersection</strong>: &#8220;I want to match something that matches pattern A AND pattern B&#8221;<br />
<em>Example: A password of at least 6 characters that contains at least one digit, at least one letter and at least one symbol</em></li>
<li><strong>Subtraction</strong>: &#8220;I want to match something that matches pattern A but NOT pattern B&#8221;<br />
<em>Example: </em><em>Match any integer that is not divisible by 50</em></li>
<li><strong>Negation</strong>: &#8220;I want to match anything that does NOT match pattern A&#8221;<br />
<em>Example: Match anything that does NOT contain the string &#8220;foo&#8221;</em></li>
</ul>
<p>Even though in ECMAScript we can use the caret (^) to negate a character class, we cannot negate anything else. Furthermore, even though we have the pipe character to mean OR, we have nothing that means AND. And of course, we have nothing that means &#8220;except&#8221; (subtraction). All these are fairly easy to do for single characters, through character classes, but not for entire sequences.</p>
<p>However, we can mimic all three operations by taking advantage of the fact that lookahead is zero length and therefore does not advance the matching position. We can just keep on matching to our heart’s content after it, and it will be matched against the same substring, since the lookahead itself consumed no characters. For a simple example, the regex <code>/^(?!cat)\w{3}$/</code> will match any 3 letter word that is NOT &#8220;cat&#8221;. This was a very simple example of <strong>subtraction</strong>. Similarly, the solution to the subtraction problem above would look like <code>/^(?!\d+[50]0)\d+$/</code>.</p>
<p>For <strong>intersection</strong> (AND), we can just chain multiple positive lookaheads, and put the last pattern as the one that actually captures (if everything is within a lookahead, you’ll still get the same boolean result, but not the right matches). For example, the solution to the password problem above would look like <code>/^(?=.*\d)(?=.*[a-z])(?=.*[\W_]).{6,}$/i</code>. Note that if you want to support IE8, you have to take <a href="http://blog.stevenlevithan.com/archives/regex-lookahead-bug " target="_blank">this bug</a> into account and modify the pattern accordingly.</p>
<p><strong>Negation</strong> is the simplest: We just want a negative lookahead and a .+ to match anything (as long as it passes the lookahead test). For example, the solution to the negation problem above would look like <code>/^(?!.*foo).+$/</code>. Admittedly, negation is also the least useful on its own.</p>
<p>There are caveats to this technique, usually related to what actually matches in the end (make sure your actual capturing pattern, outside the lookaheads, captures the entire thing you’re interested in!), but it’s fairly simple for just testing whether something matches.</p>
<p>Steven Levithan took lookahead hacking to the next level, by using something similar to <a href="http://blog.stevenlevithan.com/archives/mimic-conditionals" target="_blank">mimic conditionals</a> and <a href="http://blog.stevenlevithan.com/archives/mimic-atomic-groups" target="_blank">atomic groups</a>. Mind = blown.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/aM8uaGlDREs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/05/hacking-lookahead-to-mimic-intersection-subtraction-and-negation/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/05/hacking-lookahead-to-mimic-intersection-subtraction-and-negation/</feedburner:origLink></item>
		<item>
		<title>Teaching: General case first or special cases first?</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/OSQH7WVfZ4Y/</link>
		<comments>http://lea.verou.me/2012/05/teaching-general-case-first-or-special-cases-first/#comments</comments>
		<pubDate>Wed, 09 May 2012 20:44:10 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[teaching]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1780</guid>
		<description><![CDATA[A common dilemma while teaching (I’m not only talking about teaching in a school or university; talks and workshops are also teaching), is whether it&#8217;s better to first teach some easy special cases and then generalize, or first the general case and then present special cases as merely shortcuts. I&#8217;ve been revisiting this dilemma recently, [...]]]></description>
				<content:encoded><![CDATA[<p>A common dilemma while teaching (I’m not only talking about teaching in a school or university; talks and workshops are also teaching), is whether it&#8217;s better to first teach some easy special cases and then generalize, or first the general case and then present special cases as merely shortcuts.</p>
<p>I&#8217;ve been revisiting this dilemma recently, while preparing the slides for <a href="http://lea.verou.me/speaking/" target="_blank">my upcoming regular expressions talks</a>. For example: Regex quantifiers.</p>
<h2>1. General rule first, shortcuts after</h2>
<p>You can use {m,n} to control how many times the preceding group can repeat (m = minimum, n = maximum). If you omit n (like {m,}) it’s implied to be infinity (=&#8221;at least m times&#8221;, with no upper bound).</p>
<ul>
<li>{m, m} can also be written as {m}</li>
<li>{0,1} can also be written as ?</li>
<li>{0,} can also be written as *</li>
<li>{1,} can also be written as +</li>
</ul>
<h3>Advantages &amp; disadvantages of this approach</h3>
<ul>
<li>Harder to understand the general rule, so the student might lose interest before moving on to the shortcuts</li>
<li>After understanding the general rule, all the shortcuts are then trivial.</li>
<li>If they only remember one thing, it will be the general rule. That&#8217;s good.</li>
</ul>
<h2>2. Special cases first, general rule after</h2>
<ul>
<li>You can add ? after a group to make it optional (it can appear, but it may also not).</li>
<li>If you don&#8217;t care about how many times something appears (if at all), you can use *.</li>
<li>If you want something to appear at least once, you can use +</li>
<li>If you want something to be repeated exactly n times, you can use {n}</li>
<li>If you want to set specific upper and lower bounds, you can use {m,n}. Omit the n for no upper bound.</li>
</ul>
<h3>Advantages &amp; disadvantages of this approach</h3>
<ul>
<li>Easy to understand the simpler special cases, building up student interest</li>
<li>More total effort required, as every shortcut seems like a separate new thing until you get to the general rule</li>
<li>Special cases make it easier to understand the general rule when you get to it</li>
</ul>
<h2>What usually happens</h2>
<p>In most cases, educators seem to favor the second approach. In the example of regex quantifiers, pretty much every regex book or talk explains the shortcuts first and the general rule afterwards. In other disciplines, such as Mathematics, I think both approaches are used just as often.</p>
<p>What do you think? Which approach do you find easier to understand? Which approach do you usually employ while teaching?</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/OSQH7WVfZ4Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/05/teaching-general-case-first-or-special-cases-first/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/05/teaching-general-case-first-or-special-cases-first/</feedburner:origLink></item>
		<item>
		<title>Poll: ¿Is animation-direction a good idea?</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/H4N9r0N_rzk/</link>
		<comments>http://lea.verou.me/2012/05/is-animation-direction-a-good-idea/#comments</comments>
		<pubDate>Sun, 06 May 2012 15:00:08 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[CSS3 animations]]></category>
		<category><![CDATA[poll]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1736</guid>
		<description><![CDATA[Summary:
¿What’s the animation-direction property?
¿Is alternate reverse and reverse alternate (either would be allowed) a better value for animation-direction over alternate-reverse?
¿If so, should redundant combinations of normal with alternate or reverse also be allowed, such as normal alternate?
¿Or maybe we should ditch it altogether and replace it with animation-reverse, accepting values of none, all, even, odd?]]></description>
				<content:encoded><![CDATA[<h2>¿animation-direction?</h2>
<p>Lets assume you have a CSS animation for <code>background-color</code> that goes from a shade of yellow (#cc0) to a shade of blue (#079) and repeats indefinitely. The code could be something like this:</p>
<pre><code class="language-css">@keyframes color {
  from { background: #cc0 }
  to { background: #079 }
}

div {
  animation: color 3s infinite;
}</code></pre>
<p>If we linearize that animation, the progression over time goes like this (showing 3 iterations):</p>
<p><a href="http://lea.verou.me/wp-content/uploads/2012/05/Screen-shot-2012-05-05-at-19.53.52-.png"><img class="alignnone  wp-image-1737" title="No animation-direction specified" src="http://lea.verou.me/wp-content/uploads/2012/05/Screen-shot-2012-05-05-at-19.53.52-.png" alt="" width="600" /></a></p>
<p>As you can see, the change from the end state to the beginning state of a new iteration is quite abrupt. You could change your keyframes to mitigate this, but there’s a better way. A property with the name <code>animation-direction</code> gives a degree of control on the direction of the iterations to smooth this out. It also reverses your timing functions, which makes it even smoother.</p>
<p>In early drafts, only the values <code>normal</code> and <code>alternate</code> were allowed. <code>normal</code> results in the behavior described above, whereas <code>alternate</code> flips every other iteration (the 2nd, the 4th, the 6th and so on), resulting in a progression like this (note how the 2nd iteration has been reversed):</p>
<p><a href="http://lea.verou.me/wp-content/uploads/2012/05/Screen-shot-2012-05-05-at-20.04.21-.png"><img class="alignnone  wp-image-1738" title="animation-direction: alternate;" src="http://lea.verou.me/wp-content/uploads/2012/05/Screen-shot-2012-05-05-at-20.04.21--1024x80.png" alt="" width="600" /></a></p>
<p>The latest draft also adds two more values: <code>reverse</code> which reverses <strong>every</strong> iteration and <code>alternate-reverse</code>, which is the combination of both <code>reverse</code> and <code>alternate</code>. Here is a summary of what kind of progression these four values would create for the animation above:</p>
<p><a href="http://lea.verou.me/wp-content/uploads/2012/05/Screen-shot-2012-05-05-at-20.19.05-.png"><img class="alignnone  wp-image-1739" title="animation-direction values" src="http://lea.verou.me/wp-content/uploads/2012/05/Screen-shot-2012-05-05-at-20.19.05--1024x362.png" alt="" width="600" /></a></p>
<h2>The problem</h2>
<p>I was excited to see that <code>reverse</code> and <code>alternate-reverse</code> were finally added to the spec, but something in the syntax just didn&#8217;t click. I initially thought the reason was that these four values essentially set 2 toggles:</p>
<ul>
<li>¿Reverse all iterations? yes/no</li>
<li>¿Reverse even iterations? yes/no</li>
</ul>
<p>so it&#8217;s pointless cognitive overhead to remember four distinct values. <a href="http://lists.w3.org/Archives/Public/www-style/2012Apr/0799.html" target="_blank">I proposed that they should be split in two keywords</a> instead, which would even result to <a href="http://lists.w3.org/Archives/Public/www-style/2012Apr/0804.html" target="_blank">a simpler grammar</a> too.</p>
<p>The proposal was well received by one of the co-editors of the animations spec (<a href="https://twitter.com/#!/sgalineau" target="_blank">Sylvain Galineau</a>), but there was a dilemma as to whether mixing <code>normal</code> with <code>alternate</code> or <code>reverse</code> would make it easier to learn or more confusing.<strong> This is a point where your opinion would be quite useful.</strong> Would you expect the following to work, or would you find them confusing?</p>
<ul>
<li><code>animation-direction: normal alternate;</code> /* Equivalent to animation-direction: alternate; */</li>
<li><code>animation-direction: alternate normal;</code> /* Equivalent to animation-direction: alternate; */</li>
<li><code>animation-direction: normal reverse;</code> /* Equivalent to animation-direction: reverse; */</li>
<li><code>animation-direction: reverse normal;</code> /* Equivalent to animation-direction: reverse; */</li>
</ul>
<h2>A better (?) idea</h2>
<p>At some point, in the middle of writing this blog post (I started it yesterday), while gazing at the graphic above, I had a lightbulb moment. ¡These values are not two toggles! All four of them control one thing: <strong>which iterations are reversed</strong>:</p>
<ul>
<li><code>normal</code> reverses no iterations</li>
<li><code>reverse</code> reverses all iterations</li>
<li><code>alternate</code> reverses even iterations</li>
<li><code>alternate-reverse</code> reverses odd iterations</li>
</ul>
<p>The reason it’s so confusing and it took me so long to realize myself, is that the mental model suggested by these keywords is detached from the end result, especially in the case of <code>alternate-reverse</code>. You have to realize that it works as if both <code>alternate</code> and <code>reverse</code> were applied in sequence, so <code>reverse</code> first reverses <strong>all</strong> iterations and then <code>alternate</code> reverses the <strong>even</strong> ones. Even iterations are reversed <strong>twice</strong>, and are therefore equivalent to the original direction. This leaves the odd ones as being reversed. It&#8217;s basically a double negative, making it hard to visualize and understand.</p>
<p>I thought that a property that would reflect this in a much more straightforward way, would be <code>animation-reverse</code> (or <code>animation-iteration-reverse</code>), accepting the following values:</p>
<ul>
<li><code>none</code> (equivalent to animation-direction: normal)</li>
<li><code>all</code> (equivalent to animation-direction: reverse)</li>
<li><code>even</code> (equivalent to animation-direction: alternate)</li>
<li><code>odd</code> (equivalent to animation-direction: alternate-reverse)</li>
</ul>
<p>Not only this communicates the end result much better, but it&#8217;s also more extensible. For example, if in the future it turns out that reversing every 3rd iteration is a common use case, it will be much easier to add expressions to it, similar to the ones :nth-child() accepts.</p>
<p>I knew before <a href="http://lists.w3.org/Archives/Public/www-style/2012May/0185.html" target="_blank">proposing it</a> that it&#8217;s too late for such drastic backwards-incompatible changes in the <a href="http://www.w3.org/TR/css3-animations/" target="_blank">Animations module</a>, however I thought it&#8217;s so much better that it&#8217;s worth fighting for. After all, <code>animation-direction</code> isn&#8217;t really used that much in the wild.</p>
<p>Unfortunately, it seems that only me and Sylvain thought it&#8217;s better, and even he <a href="http://lists.w3.org/Archives/Public/www-style/2012May/0188.html" target="_blank">was reluctant to support the change</a>, due to the backwards compatibility issues. So, I started wondering if it&#8217;s really as much better as I think. <strong>¿What are your thoughts?</strong> ¿Would it make it simpler for you to understand and/or teach? Author feedback is immensely useful for standardization, so please, <strong>¡voice your opinion!</strong> Even without justifying it if you don&#8217;t have the time or energy. Gathering opinions is incredibly useful.</p>
<h2>TL;DR</h2>
<ol>
<li>¿Is <code>alternate reverse</code> and <code>reverse alternate</code> (either would be allowed) a better value for <code>animation-direction</code> over <code>alternate-reverse</code>?</li>
<li>¿If so, should redundant combinations of <code>normal</code> with <code>alternate</code> or <code>reverse</code> also be allowed, such as <code>normal alternate</code>?</li>
<li>¿Or maybe we should ditch it altogether and replace it with <code>animation-reverse</code>, accepting values of <code>none</code>, <code>all</code>, <code>even</code>, <code>odd</code>?</li>
</ol>
<p><strong>Side note:</strong> If you’re wondering about the flipped question and exclamation marks (¿¡) it&#8217;s because <a href="https://twitter.com/#!/LeaVerou/status/198556042387390464" target="_blank">I believe they improve the usability of the language</a> if widely adopted, so <a href="https://twitter.com/#!/LeaVerou/status/198559059346063360" target="_blank">I&#8217;m doing my part</a> for it <img src='http://lea.verou.me/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  And no, I don’t speak Spanish.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/H4N9r0N_rzk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/05/is-animation-direction-a-good-idea/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/05/is-animation-direction-a-good-idea/</feedburner:origLink></item>
		<item>
		<title>Text masking — The standards way</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/lNuSdOvn0Vw/</link>
		<comments>http://lea.verou.me/2012/05/text-masking-the-standards-way/#comments</comments>
		<pubDate>Fri, 04 May 2012 13:04:53 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Replies]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1721</guid>
		<description><![CDATA[As much as I like .net magazine, I was recently outraged by their &#8220;Texturizing Web Type&#8221; article. It features a way to apply a texture to text with -webkit-mask-image, presenting it as an experimental CSS property and misleading readers. There are even -moz-, -o- and -ms- prefixes for something that is not present in any [...]]]></description>
				<content:encoded><![CDATA[<p>As much as I like .net magazine, I was recently outraged by their &#8220;<a href="http://www.netmagazine.com/tutorials/texturise-web-type-css" target="_blank">Texturizing Web Type</a>&#8221; article. It features a way to apply a texture to text with <code>-webkit-mask-image</code>, presenting it as an experimental CSS property and misleading readers. There are even -moz-, -o- and -ms- prefixes for something that is not present in any specification, and is therefore unlikely to ever be supported by any non-WebKit browser, which further contributes to the misdirection. A while back, <a href="http://www.alistapart.com/articles/every-time-you-call-a-proprietary-feature-css3-a-kitten-dies/" target="_blank">I wrote</a> about how detrimental to our work and industry such proprietary features can be.</p>
<p>A common response to such complaints is that they are merely philosophical and who cares if the feature works right now and degrades gracefully. This argument could be valid for some cases, when the style is just a minor, gracefully degrading enhancement and no standards compliant alternative is present (for example, I&#8217;ve used <code>::-webkit-scrollbar</code> styles myself). However, this is not the case here. We have had <a title="Warning: This is a very early version of the SVG 1.1 spec. For reference, use the latest one." href="http://www.w3.org/TR/2001/WD-SVG11-20011030/" target="_blank">a standards compliant alternative for this for the past 11 years</a> and it&#8217;s called SVG. It can also do much more than masking, if you give it a chance.<br />
<span id="more-1721"></span><br />
Here’s an example of texturized text with SVG:</p>
<p><iframe style="width: 100%; height: 600px;" src="http://dabblet.com/gist/2594420" width="320" height="240"></iframe></p>
<p><strong>Edit:</strong> Thanks to <a href="https://twitter.com/#!/devongovett/status/198513261333848064" target="_blank">@devongovett&#8217;s improvements</a>, the code is now simpler &amp; shorter.</p>
<p>Yes, the syntax might be more unwieldy but it works in a much wider range of browsers: <strong>Chrome, Safari, Firefox, IE9, Opera</strong>. Also, it&#8217;s trivial to make a script that generates the SVG markup from headings and applies the correct measurements for each one. When WebKit fixes <a href="https://bugs.webkit.org/show_bug.cgi?id=65344" target="_blank">this bug</a>, we can even move the pattern to a separate SVG file and reference it from there.</p>
<p>In case you&#8217;re wondering about semantics, the &lt;svg&gt; element is considered &#8220;flow content&#8221; and is therefore allowed in heading elements. Also, even if search engines don&#8217;t understand inline SVG, they will just ignore the tags and still see the content inside the &lt;text&gt; element. Based on that, you could even make it degrade gracefully in IE8, as long as you include the HTML5 fix for the &lt;svg&gt; element. Then the CSS rules for the typography will still apply. You&#8217;ll just need to conditionally hide the &lt;image&gt;, since IE8 displays a broken image there (a little known fact is that, in HTML, &lt;image&gt; is basically equivalent to &lt;img&gt;, so IE8 treats it as such) .</p>
<p><em>Credits to <a href="https://twitter.com/#!/dstorey" target="_blank">David Storey</a>’s <a href="http://my.opera.com/dstorey/blog/using-svg-masks-for-cut-out-text-effects" target="_blank">original example</a> that inspired this.</em></p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/lNuSdOvn0Vw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/05/text-masking-the-standards-way/feed/</wfw:commentRss>
		<slash:comments>63</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/05/text-masking-the-standards-way/</feedburner:origLink></item>
		<item>
		<title>How I got into web development — the long version</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/7VOB1B0Zy64/</link>
		<comments>http://lea.verou.me/2012/05/how-i-got-into-web-development-the-long-version/#comments</comments>
		<pubDate>Tue, 01 May 2012 15:46:53 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1703</guid>
		<description><![CDATA[I’m often asked how I got into web development, especially from people that haven&#8217;t met many women in the field. Other times it&#8217;s people with little kids and they are asking for guidance about how to steer them into programming. I promised them that I would write a long post about it at some point, [...]]]></description>
				<content:encoded><![CDATA[<p>I’m often asked how I got into web development, especially from people that haven&#8217;t met many women in the field. Other times it&#8217;s people with little kids and they are asking for guidance about how to steer them into programming. I promised them that I would write a long post about it at some point, and now that I&#8217;m in the verge of some big changes in my life, I&#8217;ve started reflecting on the fascinating journey that got me here.</p>
<p><a href="http://rmurphey.com/" target="_blank">Rebecca Murphey</a> <a href="http://rmurphey.com/blog/2012/03/25/girls-and-computers/" target="_blank">wrote something similar</a> a while back (albeit much shorter and less detailed), and I think it would be nice if more people in the field started posting their stories, especially women. I sure would find them interesting and if you give it a shot, you&#8217;ll see it&#8217;s quite enjoyable too. I sure had a blast writing this, although it was a bit hard to hit the &#8220;Publish&#8221; button afterwards.</p>
<p>Keep in mind that this is just my personal story (perhaps in excruciating detail). <strong>I&#8217;m not going to attempt to give any advice, and I&#8217;m not suggesting that my path was ideal.</strong> I&#8217;ve regretted some of my decisions myself, whereas some others proved to be great, although they seemed like failures at the time. I think I was quite lucky in how certain things turned out and I thank the <a href="http://en.wikipedia.org/wiki/Flying_Spaghetti_Monster" target="_blank">Flying Spaghetti Monster</a> daily for them.</p>
<p><strong>Warning:</strong> This is going to be a very long read (over 3000 words) and there is no tl;dr.<span id="more-1703"></span></p>
<h2>Childhood (1986-1998)</h2>
<p>I was born on June 13th, 1986. I grew up in a Greek island called <a href="http://en.wikipedia.org/wiki/Lesbos" target="_blank">Lesbos</a> (yes, <a href="http://en.wikipedia.org/wiki/Lesbian#Origin_and_transformation_of_the_term" target="_blank">the island where the word &#8220;lesbian&#8221; comes from</a>, in case you were wondering), in the small town of <a href="http://maps.google.com/maps?q=kalloni+lesbos&amp;um=1&amp;ie=UTF-8&amp;hq=&amp;hnear=0x14ba921f491ef7a1:0xdc822d7cec0b916e,Kalloni,+Greece&amp;ei=ysyfT5CZMYep4gSExvWeAw&amp;sa=X&amp;oi=geocode_result&amp;ct=title&amp;resnum=1&amp;ved=0CCQQ8gEwAA" target="_blank">Kalloni</a>. I didn&#8217;t have a computer as a kid, but I always loved making things. I had no siblings, so my childhood was mostly spent playing solitarily with paper, fabric, staples, scissors and the like. I was making all kinds of stuff: Little books, wallets, bags, pillows, anything I could come up with that was doable with my limited set of tools and materials. I also loved drawing. I had typical toys as well (legos, dolls, playmobil, cars, teddy bears) but the prevailing tendency in my childhood was <em>making stuff</em>. I wasn&#8217;t particularly interested in taking things apart to see how they worked, I just liked making new things.</p>
<p>I had never used a computer until I was around 10. We spent Christmas with an uncle of mine and his family in Athens. That uncle was working at Microsoft Hellas, and had a Windows 95 machine in his apartment. I got hooked from the first moment I used that computer. I didn&#8217;t do anything particularly interesting in it, just played around with MS Paint and some other equally mundane applications. However, for me it was so fascinating that I spent most of my Christmas vacation that year exploring Windows 95.</p>
<p>After I returned to Lesbos, I knew I badly wanted a computer for myself. However, computers were quite expensive back then, so I didn&#8217;t get one immediately, even though my family was quite well off. My father started taking me to his job&#8217;s offices on weekends, and I spent hours every time on a Windows 3.1 machine, exploring it, mostly drawing on its paint app.</p>
<p>In 1997, my mother finally bought me a computer. It cost around 700K drachmas (around €2000?) which was much more at the time than it is today. It was a Pentium MMX at 233MHz with 32MB of RAM and a 3.1GB hard drive, which was quite good at the time. I was so looking forward for it to arrive, and when it did, I spent every afternoon using it, from the moment I got back from school, until late at night. The only times I didn&#8217;t use my computer was when I was reading computer books or magazines or studying for school. In a year, I had become quite proficient about how its OS worked (Windows 95), editing the registry, trying to learn DOS (its command line). I also exercised my creativity by making magazines and newspapers in Microsoft Word. I&#8217;m quite surprised I didn&#8217;t break it, even though I was experimenting with anything I could get my cursor on.</p>
<p>Unfortunately, my computer fascination was largely solitary. There were no other geeks in my little town I could relate to, which I guess made me even more of an introvert. The only people reading my MS Word-generated newspaper were me and a friend of mine. During my years in Lesbos, I only met 2 other kinda geeky kids, and we didn&#8217;t really hit it off. One of them was living too far, the other was kind of annoying. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  The former however gave me his fonts, which I was really grateful for. I loved fonts. I didn&#8217;t have any typographic sophistication, so I loved about every font, but I remember desperately wanting to make my own. Unfortunately, I never pursued that, as I couldn&#8217;t find any font creation software until very recently.</p>
<p>In late 1997, we visited some relatives in a NYC suburb to spend Christmas there. It was my first time in the US and I fell in love with the place. My uncle, knowing my computer obsession took me to a big computer store called CompUSA. I was like a kid in a candy store! The software that caught my eye the most was called &#8220;<a href="http://en.wikipedia.org/wiki/Clickteam" target="_blank">Mutimedia Fusion</a>&#8220;. It was a graphical IDE that allowed you to make applications (mostly games and screensavers, but you could potentially make anything) without writing any code. The thought processes involved were the same as in programming, but instead of typing commands, you picked them from menus or wrote mathematical expressions through a GUI. You could even go online and get new plugins that added functionality, but my access to the internet in my little town was very limited.</p>
<p>I got super excited. The idea of being able to make my very own programs, was too good to be true. I convinced my mother to buy it for me and thankfully, she did. For the year that followed, my afternoons and weekends became way more creative. I wasn&#8217;t interested in making games, but more in utility applications. Things that were going to be useful for my imaginary users. My biggest app back then was something that allowed you to draw different kinds of grids (from horizontal and vertical grids to simple 3d-like kinds of grids), with different parameters, or even mix them together and overlay them over an image. Anything that combined programming with graphics was doubly fascinating for me.</p>
<p>My access to the internet was limited, so I couldn&#8217;t share my creations with anybody. What kept me going was the idea that if I make something amazing, it will get popular and people will use it. I had no idea how that would happen, but it was useful as a carrot in front of me that made me constantly strive to improve. We had dial-up, but due to technical issues, I could only connect about 10% of the times I tried it, and even then I had to keep it short as it was quite expensive. I spent my limited time online downloading plugins for Multimedia Fusion, searching anything I could come up with in Altavista and perusing IRC chatrooms with Microsoft Comic Chat.</p>
<h2>Adolescence (1998-2004)</h2>
<p>After a year of making applications with Multimedia Fusion, I wanted something more flexible and powerful. I wanted to finally learn a programming language. My Microsoft uncle sent me a free copy of Visual Studio, so I was trying to decide which &#8220;Visual Whatever&#8221; language was best to start with. Having read that C++ was &#8220;teh pro stuff&#8221;, I got a book about Visual C++. Unfortunately, I couldn&#8217;t understand much. I decided that it was probably too early for me and C++, so I got a Visual Basic 6 book.  It was about 10cm thick, detailing everything you could ever possibly want to learn about Visual Basic. Thankfully, Visual Basic didn&#8217;t prove so hard, so I started with it, making small apps and finally ported my grid application from Multimedia Fusion to Visual Basic 6.</p>
<p>I had a very fun and creative 3 years, full of new knowledge and exercise for the mind. Unfortunately, when I reached 15, I realized that boys in my little town weren&#8217;t really into geeky girls. I decided that if I wanted a boyfriend, I should quit programming (if any geeky teenage girls are reading this: Just be patient. It gets better, you can&#8217;t imagine how much). It &#8220;helped&#8221; that my computer was broken during the summer and I had to wait for it to come back, so I had to find other things to do in the meantime.</p>
<p>Unable to code, I pursued other geeky interests, such as mobile phones and mathematics, which I guess shows that no matter how much you try, you can&#8217;t escape who you are. In retrospect, this helped me, as I got some pretty good distinctions in the various stages of the national mathematical competitions, up to 2nd place nationally for two years in a row (these competitions had 4 stages. I failed the preliminary contest for the Balkan Mathematical Olympiad, so I never went there.). I was fascinated by Number Theory and started wanting to become a mathematician, rather than a programmer. Sometime around then I also moved from my small town to Athens, which I wanted to do since childhood.</p>
<p>When the time of career decisions came, I chickened out. I knew that if I became a mathematician and failed at research, I would end up teaching mathematics in a high school. I didn&#8217;t want that, so I picked a &#8220;safer&#8221; career path. Since my grades were very good, I went to study Electrical and Computer Engineering, which is a profession held in very high esteem in Greece, about as much as lawyers and doctors. I told myself that I would probably find it interesting, as it would involve lots of mathematics and programming. I was wrong.</p>
<h2>Adulthood (2004-Today)</h2>
<p>I was away from Athens, in a city that most Greeks love (Thessaloniki). However, I found it cold, gray, old and with hordes of cockroaches. I hated it with a passion. I also hated my university. It involved little coding and little theoretical Mathematics, the kind that I loved. Most of it was physics and branches of Mathematics I didn&#8217;t like, such as linear algebra. It only had two coding courses, both of which were quite mundane and lacked any kind of creativity. Moreover, most of my fellow students had perviously wanted to become doctors and failed medical school so they just went for the next highly respected option. They had no interest in technology and their main life goals were job security, making money and be respected. I felt more lonely than ever. After the first semester, I slowly stopped going to lectures and eventually gave up socializing with them. Not going to lectures is not particularly unusual for a university student in Greece. Most Greeks do it after a while, since attendance is not compulsory and Greek universities are free (as in beer). As long as you pass your exams every semester and do your homework, you can still get a degree just fine.</p>
<p>During my first summer as a university student, we decided with my then boyfriend to make an online forum. We were both big fans of online forums and we wanted to make something better. He set up the forum software in an afternoon (using <a href="http://www.simplemachines.org/" target="_blank">SMF</a>) and then we started customizing it. I didn&#8217;t know much about web development back then, so I constrained myself to helping with images and settings. After 2 months, the forum grew to around 200 members, and we decided to switch to the more professional (and costly) forum software, <a href="https://www.vbulletin.com/" target="_blank">vBulletin</a>. It was probably too early, but the signs were positive, so we thought better earlier than later.</p>
<p>The migration took 2-3 days of nonstop work, during which we took turns in sleeping and worked the entire time that we were awake. We wanted everything to be perfect, even the forum theme should be as similar to the old one as possible. I had a more involved role in this, and I even started learning a bit of PHP while trying to install some &#8220;mods&#8221; (modifications to the vBulletin source code that people posted). Due to my programming background, I caught up with it quite easily and after a few months, I was the only one fiddling with code on the website.</p>
<p>I was learning more and more about PHP, HTML, CSS and (later) JavaScript. That online forum was my primary playground, where I put my newly acquired knowledge into practice. Throughout these years, I released quite a few of <a href="http://www.vbulletin.org/forum/member.php?u=106158&amp;hacksort=title#hacks" target="_blank">my own vBulletin mods</a>, many of which are still in use in vBulletin forums worldwide. Having spent so many years making apps that nobody used, I found it fascinating that you can make something and have people use it only a few hours later.</p>
<p>By the end of 2005, I started undertaking some very small scale client work, most (or all) of which doesn&#8217;t exist anymore. I was not only interested in code, but also in graphic design. I started buying lots of books, both about the languages involved and graphic design principles. The pace of learning new things back then was crazy, almost on par with my early adolescence years.</p>
<p>In late 2006, I decided I couldn&#8217;t take it any more with my university. I had absolutely no interest in Electrical Engineering, and my web development work had consumed me entirely. I didn&#8217;t want to give up on higher education, so I tried to decide where I should switch to. Computer Science was the obvious choice, but having grown up with civil engineer parents, I didn&#8217;t want to give up on engineering just yet (strangely, CS is not considered engineering in Greece, it&#8217;s considered a science, kinda like Mathematics). I also loved graphic design, so I considered going to a graphic design school, but there are no respected graphic design universities in Greece and I wasn&#8217;t ready to study abroad. I was also in a long term relationship in Greece, which I didn&#8217;t want to give up on.</p>
<p>I decided to go with Architecture, although I had no interest in buildings. The idea was that it bridges engineering and art, so it would satisfy both of my interests. Unfortunately, since I hadn&#8217;t taken drawing classes in high school, I had to take the entire national university placement exams (Πανελλήνιες), again, including courses I aced the first time, such as Mathematics. I was supposed to spend the first half of 2007 preparing for these exams, but instead I spent most of it freelancing and learning more about web development. I did quite well on the courses I had been previously examined on (although not as good as the first time), but borderline failed freehand drawing. Passing freehand drawing was a requirement for Architecture, so that was out of the question now. This seemed like a disaster at the time, but in retrospect, I&#8217;m very grateful to the grader that failed me. I would&#8217;ve been utterly miserable in Architecture.</p>
<p>Not wanting to go back to EE, I took a look at my options. My mother suggested Computer Science and even though I was still a bit reluctant, I put it in my application. I picked a <a href="http://www.cs.aueb.gr/" target="_blank">CS school</a> that seemed more programming-oriented, as I didn&#8217;t want to have many physics, computer architecture and circuits courses again. When the results came out, I had been placed there. It turned out to be one of my best decisions. I could get good grades on most of the courses with hardly any studying, as I knew lots of the stuff already. I also learned a bunch of useful new things. I can&#8217;t say that everything I learned was useful for my work, but it was enough to make it worth it.</p>
<p>In mid 2007, the online forum we built had grown quite a lot. We decided to make a company around it, in order to be able to accept more high-end advertising. We had many dreams about expanding what it does, most of which never got materialized. In 2008, after a long time of back and forth, we officially registered <a href="http://fresset.gr/" target="_blank">a company</a> for it so I stopped freelancing and focused solely on that.</p>
<p>It wasn&#8217;t easy, but eventually it started generating a very moderate income. I decided to start a Greek blog to post about my CSS and JS discoveries, but it didn&#8217;t go very well. After a dozen posts or so, I decided to close it down, and start a new one, in English this time. It turned out that developers abroad were more interested in what I had to say, so I got my first conference invitation in 2010, to speak in a new Polish conference called <a href="http://2010.front-trends.com/" target="_blank">Front-Trends</a>. When I got the invitation email, I couldn&#8217;t believe my eyes. Why would someone want <strong>me</strong> to speak at a conference? I wasn&#8217;t that good! How would I speak in front of all these people? It even crossed my mind that it might be a joke, but they had confirmed speakers like Douglas Crockford, Jake Archibald, Jeremy Keith and Paul Bakaus. I told my inner shy self to shut up, and enthusiastically agreed to speak there.</p>
<p>I spent the 8 months until that conference stressing about my presentation. I had never been to a conference outside Greece, and the only Greek conference I had attended was a graphic design one. I had only spoken once before, to an audience of around 30 people in a barcamp-style event. I decided that I didn&#8217;t want my first web development conference to be the one I speak at, so I bought a ticket for <a href="http://fronteers.nl/congres/2010" target="_blank">Fronteers 2010</a>. It had a great line-up and was quite affordable (less than €300 for a ticket). I convinced 3 of my friends to come with me (for vacation), and we shared a quadruple hotel room, so the accommodation ended up not costing too much either.</p>
<p>It was an amazing experience that I will never forget. I met people I admired and only knew through their work online. It was the first time in my life that I was face to face with people that really shared the same interests. I even met my partner to date there. Until today, Fronteers is my favorite conference. Partly because it was my first, partly because it&#8217;s a truly great conference with a very strong sense of community.</p>
<p>There was a talk or two at Fronteers that year, which were criticized for showing things that most people in the audience already knew. This became my worst fear about giving talks. Until today, I always try to add nuggets of more advanced techniques in my talks, to avoid getting that kind of reaction, and it works quite well. I remember going back home after Fronteers and pretty much changing all my slides for my upcoming talk. I trashed my death-by-powerpoint kind of slides and my neat bulleted lists and made a web-based slideshow with interactive examples for everything I wanted to show.</p>
<p>I was incredibly nervous before and during my Front-Trends talk, so I kept mumbling and confusing my words. However, despite what I thought throughout, the crowd there loved it. The comments on twitter were enthusiastic! Many people even said it was the best talk of the conference.</p>
<p>That first talk was the beginning of a roller-coaster that I just can&#8217;t describe. I started getting more invitations for talks, articles, workshops and many other kinds of fascinating things. I met amazing people along the way. Funny, like-minded, intelligent people. To this day, I think that getting in this industry has been the best thing in my life. I have experienced no sexism or other discrimination, nothing negative, just pure fun, creativity and a sense that I belong in a community with like-minded people that understand me. It’s been great, and I hope it continues to be like this for a very long time. Thank you all.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/7VOB1B0Zy64" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/05/how-i-got-into-web-development-the-long-version/feed/</wfw:commentRss>
		<slash:comments>64</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/05/how-i-got-into-web-development-the-long-version/</feedburner:origLink></item>
		<item>
		<title>Pure CSS scrolling shadows with background-attachment: local</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/TV8x3uBhnq8/</link>
		<comments>http://lea.verou.me/2012/04/background-attachment-local/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 01:24:20 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[background-attachment]]></category>
		<category><![CDATA[Backgrounds and Borders]]></category>
		<category><![CDATA[CSS3]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1684</guid>
		<description><![CDATA[A few days ago, the incredibly talented Roman Komarov posted an experiment of his with pure CSS &#8220;scrolling shadows&#8221;. If you’re using Google Reader, you are probably familiar with the effect: In Roman’s experiment, he is using absolutely positioned pseudoelements to cover the shadows (which are basically radial gradients as background images), taking advantage of [...]]]></description>
				<content:encoded><![CDATA[<p>A few days ago, the incredibly talented <a href="https://twitter.com/#!/kizmarh" target="_blank">Roman Komarov</a> posted an experiment of his with <a href="http://kizu.ru/en/fun/shadowscroll/" target="_blank">pure CSS &#8220;scrolling shadows&#8221;</a>. If you’re using Google Reader, you are probably familiar with the effect:</p>
<p style="text-align: center;"><a href="http://lea.verou.me/wp-content/uploads/2012/04/scrolling-shadows.png"><img class="aligncenter size-full wp-image-1685" title="“Scrolling shadows” in Google Reader" src="http://lea.verou.me/wp-content/uploads/2012/04/scrolling-shadows.png" alt="Screenshot demonstrating the “scrolling shadows” in Google Reader" width="718" height="379" /></a></p>
<p style="text-align: left;">In Roman’s experiment, he is using absolutely positioned pseudoelements to cover the shadows (which are basically radial gradients as background images), taking advantage of the fact that when you scroll a scrollable container, its background does not scroll with it, but absolutely positioned elements within do. Therefore, when you scroll, the shadows are no longer obscured and can show through. Furthermore, these pseudoelements are linear gradients from white to transparent, so that these shadows are uncovered smoothly.</p>
<p style="text-align: left;">When I saw Roman’s demo, I started wondering whether this is possible with no extra containers at all (pseudoelements included). It seemed like a perfect use case for <code>background-attachment: local</code>. Actually, it was the first real use case for it I had ever came up with or seen.</p>
<p><span id="more-1684"></span></p>
<h2 style="text-align: left;">“background-attachment&#8230; what? I only know scroll and fixed!”</h2>
<p><code>scroll</code> and <code>fixed</code> were the only values for background-attachment back in the days of CSS 2.1. <code>scroll</code> is the initial value and positions the background relative to <em>the element it&#8217;s applied on</em>, whereas <code>fixed</code> positions it relative to <em>the viewport</em>, resulting in the background staying in place when the page was scrolled. As a result of these definitions, when only a part of the page was scrollable (e.g. a &lt;div&gt; with overflow: auto), its background did not scroll when the container itself was scrolled.</p>
<p>In <a href="http://w3.org/TR/css3-background" target="_blank">Backgrounds &amp; Borders Level 3</a>, a new value was added to lift this restriction: <a href="http://www.w3.org/TR/css3-background/#local0" target="_blank"><code>local</code></a>. When <code>background-attachment: local</code> is applied, the background is positioned relative to the element’s contents. The result is that it scrolls when the element is scrolled. This is not a new feature, it has been with us since <a href="http://www.w3.org/TR/2005/WD-css3-background-20050216/#the-background-attachment" target="_blank">the first drafts of Backgrounds and Borders 3 in 2005</a> (of course, implementations took some more time, starting from 2009).</p>
<p>If the way it works seems unclear, play a bit with this dabblet that demonstrates all three values (your browser needs to support all three of course):</p>
<p><iframe style="width: 100%; height: 600px;" src="http://dabblet.com/gist/2494566" width="320" height="240"></iframe></p>
<h2>“Ok, I get it. Back to the scrolling shadows please?”</h2>
<p>Basically, the idea was to convert these absolutely positioned pseudoelements into background layers that have background-attachment: local applied. I tried it, it worked and helped reduce the code quite a lot. Here’s the dabblet with it:</p>
<p><iframe style="width: 100%; height: 600px;" src="http://dabblet.com/gist/2462915" width="320" height="240"></iframe></p>
<p>The drawback of this is that it reduces browser support a bit. Roman’s original experiment might even work in IE8, if the gradients are converted into images (gradients are not essential for the functionality). When you rely on background-attachment: local, you reduce browser support to <strong>IE9+, Safari 5+, Chrome </strong>and<strong> Opera</strong>. Firefox is the most notable absentee of that list, you can vote on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=483446" target="_blank">bug #483446</a> if you&#8217;re interested in getting them to implement it.</p>
<p>However, browser support is not that important, since the effect degrades very gracefully. On browsers that don&#8217;t support this, you just get no shadow. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/TV8x3uBhnq8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/04/background-attachment-local/feed/</wfw:commentRss>
		<slash:comments>69</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/04/background-attachment-local/</feedburner:origLink></item>
		<item>
		<title>git commit -m “EVERYTHING”</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/HIx2fXyeGaU/</link>
		<comments>http://lea.verou.me/2012/04/git-commit-m-everything/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 14:53:24 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1670</guid>
		<description><![CDATA[I was working on a project today, when I realized that I had forgotten to commit for days (local only repo). I switched to my terminal, spent at least five minutes trying to decide on the commit message before settling to the completely uninformative &#8220;Another commit&#8221;. Embarrassed with myself, I shared my frustration with twitter: [...]]]></description>
				<content:encoded><![CDATA[<p>I was working on a project today, when I realized that I had forgotten to commit for days (local only repo). I switched to my terminal, spent at least five minutes trying to decide on the commit message before settling to the completely uninformative &#8220;Another commit&#8221;. Embarrassed with myself, I shared my frustration with twitter:</p>
<!-- tweet id : 187533962283986944 --><style type='text/css'>#bbpBox_187533962283986944 a { text-decoration:none; color:#FF0066; }#bbpBox_187533962283986944 a:hover { text-decoration:underline; }</style><div id='bbpBox_187533962283986944' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#FBE4AE; background-image:url(http://a0.twimg.com/profile_background_images/324344036/bg.png);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#000000; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>The awkward moment when you realize you forgot to commit for days & you can't pick a commit message as nothing describes all these changes.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:35' href='http://twitter.com/#!/LeaVerou/status/187533962283986944' target='_blank'>April 4, 2012 15:35</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=187533962283986944' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187533962283986944' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187533962283986944' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=LeaVerou'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1716232467/avatar-logo_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=LeaVerou'>@LeaVerou</a><div style='margin:0; padding-top:2px'>Lea Verou</div></div><div style='clear:both'></div></div></div><!-- end of tweet -->
<p>Immediately, I started getting a flood of suggestions of what that commit message could have been. Some of them were hilarious, some clever and some both. So, I decided I wouldn&#8217;t be selfish and I&#8217;d share them. Enjoy:<span id="more-1670"></span></p>
<p><!-- tweet id : 187534089937620994 --><style type='text/css'>#bbpBox_187534089937620994 a { text-decoration:none; color:#13456B; }#bbpBox_187534089937620994 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534089937620994' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#336699; background-image:url(http://a0.twimg.com/profile_background_images/64650857/twitterbackground.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "moar awesome"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:36' href='http://twitter.com/#!/codepo8/status/187534089937620994' target='_blank'>April 4, 2012 15:36</a> via <a href="http://www.tweetdeck.com" rel="nofollow" target="blank">TweetDeck</a><a href='https://twitter.com/intent/tweet?in_reply_to=187534089937620994' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534089937620994' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534089937620994' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=codepo8'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1666904408/codepo8_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=codepo8'>@codepo8</a><div style='margin:0; padding-top:2px'>Christian Heilmann </div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187534173429448704 --><style type='text/css'>#bbpBox_187534173429448704 a { text-decoration:none; color:#3B71B8; }#bbpBox_187534173429448704 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534173429448704' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#0C79CC; background-image:url(http://a0.twimg.com/profile_background_images/126068648/twitterbg.jpg); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> Hah, yeah.. "Uhmm... lots of stuff added"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:36' href='http://twitter.com/#!/vmasto/status/187534173429448704' target='_blank'>April 4, 2012 15:36</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187534173429448704' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534173429448704' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534173429448704' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=vmasto'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1925613138/vmasto_avatar_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=vmasto'>@vmasto</a><div style='margin:0; padding-top:2px'>Vassilis Mast</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187534218790846466 --><style type='text/css'>#bbpBox_187534218790846466 a { text-decoration:none; color:#0084B4; }#bbpBox_187534218790846466 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534218790846466' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#022330; background-image:url(http://a0.twimg.com/images/themes/theme15/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> git commit - m "...stuff"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:36' href='http://twitter.com/#!/GovertVerschuur/status/187534218790846466' target='_blank'>April 4, 2012 15:36</a> via <a href="http://www.tweetdeck.com" rel="nofollow" target="blank">TweetDeck</a><a href='https://twitter.com/intent/tweet?in_reply_to=187534218790846466' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534218790846466' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534218790846466' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=GovertVerschuur'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1272738688/Untitled_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=GovertVerschuur'>@GovertVerschuur</a><div style='margin:0; padding-top:2px'>Govert Verschuur</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187534242182467584 --><style type='text/css'>#bbpBox_187534242182467584 a { text-decoration:none; color:#0084B4; }#bbpBox_187534242182467584 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534242182467584' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> A.K.A. "General design improvements"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:37' href='http://twitter.com/#!/upperdog_se/status/187534242182467584' target='_blank'>April 4, 2012 15:37</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=187534242182467584' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534242182467584' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534242182467584' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=upperdog_se'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1762731936/stopsopa_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=upperdog_se'>@upperdog_se</a><div style='margin:0; padding-top:2px'>UPPERDOG</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187534245437243392 --><style type='text/css'>#bbpBox_187534245437243392 a { text-decoration:none; color:#0084B4; }#bbpBox_187534245437243392 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534245437243392' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "Lotsa stuff." Always works for me.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:37' href='http://twitter.com/#!/brunoscheele/status/187534245437243392' target='_blank'>April 4, 2012 15:37</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187534245437243392' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534245437243392' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534245437243392' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=brunoscheele'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1164670691/41382_618670318_2303_q_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=brunoscheele'>@brunoscheele</a><div style='margin:0; padding-top:2px'>Bruno Scheele</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187534264265490433 --><style type='text/css'>#bbpBox_187534264265490433 a { text-decoration:none; color:#9E7900; }#bbpBox_187534264265490433 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534264265490433' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#F3C839; background-image:url(http://a0.twimg.com/profile_background_images/394506130/jpeg.jpeg);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#575543; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> Sounds like you need "committed something or other".</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:37' href='http://twitter.com/#!/idiot/status/187534264265490433' target='_blank'>April 4, 2012 15:37</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=187534264265490433' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534264265490433' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534264265490433' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=idiot'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1892257218/panda_wilde_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=idiot'>@idiot</a><div style='margin:0; padding-top:2px'>Visual Idiot</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187534411955314688 --><style type='text/css'>#bbpBox_187534411955314688 a { text-decoration:none; color:#0000FF; }#bbpBox_187534411955314688 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534411955314688' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#EBEBEB; background-image:url(http://a0.twimg.com/profile_background_images/338052196/blue_binary_code_1600_1200.jpg);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#555555; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> git commit -a -m "Metric ton of changes and stuff..."</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:37' href='http://twitter.com/#!/LukeMaciak/status/187534411955314688' target='_blank'>April 4, 2012 15:37</a> via <a href="http://twitter.com/#!/download/iphone" rel="nofollow" target="blank">Twitter for iPhone</a><a href='https://twitter.com/intent/tweet?in_reply_to=187534411955314688' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534411955314688' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534411955314688' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=LukeMaciak'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1801778926/me_6813276997_71865f738c_o_normal.jpeg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=LukeMaciak'>@LukeMaciak</a><div style='margin:0; padding-top:2px'>Luke Maciak</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187534471703175168 --><style type='text/css'>#bbpBox_187534471703175168 a { text-decoration:none; color:#FF3300; }#bbpBox_187534471703175168 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534471703175168' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#709397; background-image:url(http://a0.twimg.com/images/themes/theme6/bg.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> $git commit -a -m "Hey hehe.. this is awkward but I er... you know.. been busy.. with... stuff..."</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:37' href='http://twitter.com/#!/jfgen/status/187534471703175168' target='_blank'>April 4, 2012 15:37</a> via <a href="https://launchpad.net/polly" rel="nofollow" target="blank">Polly</a><a href='https://twitter.com/intent/tweet?in_reply_to=187534471703175168' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534471703175168' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534471703175168' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jfgen'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1782420055/image1327580171_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jfgen'>@jfgen</a><div style='margin:0; padding-top:2px'>Jorge Encarna&#231;&#227;o</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187534893436256259 --><style type='text/css'>#bbpBox_187534893436256259 a { text-decoration:none; color:#0084B4; }#bbpBox_187534893436256259 a:hover { text-decoration:underline; }</style><div id='bbpBox_187534893436256259' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/profile_background_images/59801323/bg.gif);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> 'things, all the things'</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:39' href='http://twitter.com/#!/AlexGraul/status/187534893436256259' target='_blank'>April 4, 2012 15:39</a> via <a href="http://www.echofon.com/" rel="nofollow" target="blank">Echofon</a><a href='https://twitter.com/intent/tweet?in_reply_to=187534893436256259' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187534893436256259' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187534893436256259' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=AlexGraul'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1906499096/Alex-Graul_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=AlexGraul'>@AlexGraul</a><div style='margin:0; padding-top:2px'>Alex Graul</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187535071627059201 --><style type='text/css'>#bbpBox_187535071627059201 a { text-decoration:none; color:#566B01; }#bbpBox_187535071627059201 a:hover { text-decoration:underline; }</style><div id='bbpBox_187535071627059201' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#518C3F; background-image:url(http://a0.twimg.com/profile_background_images/139480361/twitter1.jpg); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#000000; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=leaverou" class="twitter-action">leaverou</a> Try "Dragons be here"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:40' href='http://twitter.com/#!/captcodemonkey/status/187535071627059201' target='_blank'>April 4, 2012 15:40</a> via <a href="http://www.hootsuite.com" rel="nofollow" target="blank">HootSuite</a><a href='https://twitter.com/intent/tweet?in_reply_to=187535071627059201' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187535071627059201' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187535071627059201' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=captcodemonkey'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1792075411/image1327930335_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=captcodemonkey'>@captcodemonkey</a><div style='margin:0; padding-top:2px'>Craig McCoy</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187535138266165248 --><style type='text/css'>#bbpBox_187535138266165248 a { text-decoration:none; color:#A73FC4; }#bbpBox_187535138266165248 a:hover { text-decoration:underline; }</style><div id='bbpBox_187535138266165248' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#131516; background-image:url(http://a0.twimg.com/images/themes/theme14/bg.gif);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> I tend to call these things "change binges", where I pretend I change a whole bunch of things on a whim before committing.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:40' href='http://twitter.com/#!/BoltClock/status/187535138266165248' target='_blank'>April 4, 2012 15:40</a> via <a href="http://tapbots.com/tweetbot" rel="nofollow" target="blank">Tweetbot for iOS</a><a href='https://twitter.com/intent/tweet?in_reply_to=187535138266165248' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187535138266165248' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187535138266165248' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=BoltClock'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1550234880/bolt_clock_irl_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=BoltClock'>@BoltClock</a><div style='margin:0; padding-top:2px'>Daniel Tan</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187535407397863425 --><style type='text/css'>#bbpBox_187535407397863425 a { text-decoration:none; color:#009999; }#bbpBox_187535407397863425 a:hover { text-decoration:underline; }</style><div id='bbpBox_187535407397863425' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#131516; background-image:url(http://a0.twimg.com/images/themes/theme14/bg.gif);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "catch up commit"!</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:41' href='http://twitter.com/#!/jwkozel/status/187535407397863425' target='_blank'>April 4, 2012 15:41</a> via <a href="http://twitter.com/#!/download/iphone" rel="nofollow" target="blank">Twitter for iPhone</a><a href='https://twitter.com/intent/tweet?in_reply_to=187535407397863425' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187535407397863425' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187535407397863425' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jwkozel'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1121815290/2878025261_e089419494_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jwkozel'>@jwkozel</a><div style='margin:0; padding-top:2px'>JWK</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187536889715228672 --><style type='text/css'>#bbpBox_187536889715228672 a { text-decoration:none; color:#B90000; }#bbpBox_187536889715228672 a:hover { text-decoration:underline; }</style><div id='bbpBox_187536889715228672' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#0A0A0A; background-image:url(http://a0.twimg.com/profile_background_images/493734300/1333550701.jpg); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#222222; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "EVERYTHING."</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:47' href='http://twitter.com/#!/skidding/status/187536889715228672' target='_blank'>April 4, 2012 15:47</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187536889715228672' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187536889715228672' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187536889715228672' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=skidding'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1857530785/me2_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=skidding'>@skidding</a><div style='margin:0; padding-top:2px'>Ovidiu Chereche&#537;</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187537072213598209 --><style type='text/css'>#bbpBox_187537072213598209 a { text-decoration:none; color:#73A325; }#bbpBox_187537072213598209 a:hover { text-decoration:underline; }</style><div id='bbpBox_187537072213598209' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#222222; background-image:url(http://a0.twimg.com/profile_background_images/208384152/x8c449a7a35ee2f9705df18f44d2f069.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#545454; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> a generic "If you can't tell what I've done by reading the source, you don't deserve to complain about my lack of commit message!"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:48' href='http://twitter.com/#!/omgmog/status/187537072213598209' target='_blank'>April 4, 2012 15:48</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187537072213598209' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187537072213598209' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187537072213598209' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=omgmog'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1583035261/moogeh_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=omgmog'>@omgmog</a><div style='margin:0; padding-top:2px'>Max Glenister</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187538150007123969 --><style type='text/css'>#bbpBox_187538150007123969 a { text-decoration:none; color:#094665; }#bbpBox_187538150007123969 a:hover { text-decoration:underline; }</style><div id='bbpBox_187538150007123969' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#F0F0F0; background-image:url(http://a0.twimg.com/profile_background_images/248824215/twitter-bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#252626; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> Just keep it simple with "sorry!"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:52' href='http://twitter.com/#!/stevehickeydsgn/status/187538150007123969' target='_blank'>April 4, 2012 15:52</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187538150007123969' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187538150007123969' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187538150007123969' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=stevehickeydsgn'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1348064347/twitter_normal.jpeg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=stevehickeydsgn'>@stevehickeydsgn</a><div style='margin:0; padding-top:2px'>Steve Hickey</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187538777441452032 --><style type='text/css'>#bbpBox_187538777441452032 a { text-decoration:none; color:#8CA0AB; }#bbpBox_187538777441452032 a:hover { text-decoration:underline; }</style><div id='bbpBox_187538777441452032' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#F3F5F6; background-image:url(http://a0.twimg.com/profile_background_images/437683380/dan.png);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> git commit -m "Acquired by Facebook"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:55' href='http://twitter.com/#!/_dte/status/187538777441452032' target='_blank'>April 4, 2012 15:55</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187538777441452032' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187538777441452032' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187538777441452032' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=_dte'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1903831543/me_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=_dte'>@_dte</a><div style='margin:0; padding-top:2px'>Dan Eden</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187538945305870336 --><style type='text/css'>#bbpBox_187538945305870336 a { text-decoration:none; color:#0084B4; }#bbpBox_187538945305870336 a:hover { text-decoration:underline; }</style><div id='bbpBox_187538945305870336' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/profile_background_images/452250848/wallpaper85023.jpg);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> git commit -a -m "Like a boss"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:55' href='http://twitter.com/#!/nathandim/status/187538945305870336' target='_blank'>April 4, 2012 15:55</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187538945305870336' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187538945305870336' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187538945305870336' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=nathandim'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1939412118/nathandim_normal.jpeg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=nathandim'>@nathandim</a><div style='margin:0; padding-top:2px'>Nathan Dim</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187539130585063424 --><style type='text/css'>#bbpBox_187539130585063424 a { text-decoration:none; color:#009999; }#bbpBox_187539130585063424 a:hover { text-decoration:underline; }</style><div id='bbpBox_187539130585063424' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#131516; background-image:url(http://a0.twimg.com/images/themes/theme14/bg.gif);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "idiot commit"!</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:56' href='http://twitter.com/#!/jwkozel/status/187539130585063424' target='_blank'>April 4, 2012 15:56</a> via <a href="http://twitter.com/#!/download/iphone" rel="nofollow" target="blank">Twitter for iPhone</a><a href='https://twitter.com/intent/tweet?in_reply_to=187539130585063424' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187539130585063424' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187539130585063424' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jwkozel'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1121815290/2878025261_e089419494_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jwkozel'>@jwkozel</a><div style='margin:0; padding-top:2px'>JWK</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187539160851165184 --><style type='text/css'>#bbpBox_187539160851165184 a { text-decoration:none; color:#0000FF; }#bbpBox_187539160851165184 a:hover { text-decoration:underline; }</style><div id='bbpBox_187539160851165184' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#EBEBEB; background-image:url(http://a0.twimg.com/profile_background_images/338052196/blue_binary_code_1600_1200.jpg);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#555555; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> there is only one way around this: delete commit history and start over with "First commit" :p</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:56' href='http://twitter.com/#!/LukeMaciak/status/187539160851165184' target='_blank'>April 4, 2012 15:56</a> via <a href="http://twitter.com/#!/download/iphone" rel="nofollow" target="blank">Twitter for iPhone</a><a href='https://twitter.com/intent/tweet?in_reply_to=187539160851165184' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187539160851165184' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187539160851165184' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=LukeMaciak'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1801778926/me_6813276997_71865f738c_o_normal.jpeg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=LukeMaciak'>@LukeMaciak</a><div style='margin:0; padding-top:2px'>Luke Maciak</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187539379428925442 --><style type='text/css'>#bbpBox_187539379428925442 a { text-decoration:none; color:#0084B4; }#bbpBox_187539379428925442 a:hover { text-decoration:underline; }</style><div id='bbpBox_187539379428925442' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#022330; background-image:url(http://a0.twimg.com/images/themes/theme15/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "what is this, I don't even..."</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:57' href='http://twitter.com/#!/croncobaurul/status/187539379428925442' target='_blank'>April 4, 2012 15:57</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187539379428925442' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187539379428925442' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187539379428925442' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=croncobaurul'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1550299235/id_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=croncobaurul'>@croncobaurul</a><div style='margin:0; padding-top:2px'>Mihai Chereji</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187539668793950208 --><style type='text/css'>#bbpBox_187539668793950208 a { text-decoration:none; color:#088253; }#bbpBox_187539668793950208 a:hover { text-decoration:underline; }</style><div id='bbpBox_187539668793950208' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#EDECE9; background-image:url(http://a0.twimg.com/images/themes/theme3/bg.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#634047; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> 'Fixed stuff' generally fits well :)</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:58' href='http://twitter.com/#!/MayaPosch/status/187539668793950208' target='_blank'>April 4, 2012 15:58</a> via <a href="http://hotot.org" rel="nofollow" target="blank">Hotot for Chrome</a><a href='https://twitter.com/intent/tweet?in_reply_to=187539668793950208' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187539668793950208' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187539668793950208' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=MayaPosch'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1437052880/maya_posch_hermafrodiet07_resized_avatar_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=MayaPosch'>@MayaPosch</a><div style='margin:0; padding-top:2px'>Maya Posch</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187539827493834752 --><style type='text/css'>#bbpBox_187539827493834752 a { text-decoration:none; color:#A30A0A; }#bbpBox_187539827493834752 a:hover { text-decoration:underline; }</style><div id='bbpBox_187539827493834752' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#7C8C7F; background-image:url(http://a0.twimg.com/profile_background_images/3093114/OllyHodgson.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#323232; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "Reinvented the wheel. Again."</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 15:59' href='http://twitter.com/#!/OllyHodgson/status/187539827493834752' target='_blank'>April 4, 2012 15:59</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187539827493834752' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187539827493834752' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187539827493834752' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=OllyHodgson'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1180090289/0f5d5c1_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=OllyHodgson'>@OllyHodgson</a><div style='margin:0; padding-top:2px'>Olly Hodgson</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187540177734991873 --><style type='text/css'>#bbpBox_187540177734991873 a { text-decoration:none; color:#2FC2EF; }#bbpBox_187540177734991873 a:hover { text-decoration:underline; }</style><div id='bbpBox_187540177734991873' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#1A1B1F; background-image:url(http://a0.twimg.com/images/themes/theme9/bg.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#666666; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> only a link to that original tweet, *maybe* with the tweet text as a second paragraph.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:00' href='http://twitter.com/#!/eternicode/status/187540177734991873' target='_blank'>April 4, 2012 16:00</a> via <a href="http://www.tweetdeck.com" rel="nofollow" target="blank">TweetDeck</a><a href='https://twitter.com/intent/tweet?in_reply_to=187540177734991873' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187540177734991873' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187540177734991873' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=eternicode'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1595323864/mangatar_178_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=eternicode'>@eternicode</a><div style='margin:0; padding-top:2px'>Andrew Rowls</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187540310094643201 --><style type='text/css'>#bbpBox_187540310094643201 a { text-decoration:none; color:#333333; }#bbpBox_187540310094643201 a:hover { text-decoration:underline; }</style><div id='bbpBox_187540310094643201' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#EEEEEE; background-image:url(http://a0.twimg.com/profile_background_images/204516353/bg_pattern.gif);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#1A1A1A; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "This changes everything"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:01' href='http://twitter.com/#!/mrtnrsl/status/187540310094643201' target='_blank'>April 4, 2012 16:01</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=187540310094643201' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187540310094643201' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187540310094643201' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=mrtnrsl'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1814968915/avatar-128px_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=mrtnrsl'>@mrtnrsl</a><div style='margin:0; padding-top:2px'>Martin Rosell</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187540668728619008 --><style type='text/css'>#bbpBox_187540668728619008 a { text-decoration:none; color:#1F98C7; }#bbpBox_187540668728619008 a:hover { text-decoration:underline; }</style><div id='bbpBox_187540668728619008' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C6E2EE; background-image:url(http://a0.twimg.com/images/themes/theme2/bg.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#663B12; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> -m "this changes everything. again."</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:02' href='http://twitter.com/#!/kioopi/status/187540668728619008' target='_blank'>April 4, 2012 16:02</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187540668728619008' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187540668728619008' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187540668728619008' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=kioopi'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/380824476/greendudesquare_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=kioopi'>@kioopi</a><div style='margin:0; padding-top:2px'>vTsoumenis</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187541599532744704 --><style type='text/css'>#bbpBox_187541599532744704 a { text-decoration:none; color:#D02B55; }#bbpBox_187541599532744704 a:hover { text-decoration:underline; }</style><div id='bbpBox_187541599532744704' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#352726; background-image:url(http://a0.twimg.com/images/themes/theme5/bg.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#3E4415; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> features: "Made it better", bugs: "Fixed sh*t", tech tasks: "Misc. optimizations" or "Refactoring", mixed: "Chuck Norris was here"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:06' href='http://twitter.com/#!/streetpc/status/187541599532744704' target='_blank'>April 4, 2012 16:06</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=187541599532744704' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187541599532744704' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187541599532744704' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=streetpc'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/69999890/adrien2_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=streetpc'>@streetpc</a><div style='margin:0; padding-top:2px'>Adrien Lavoillotte</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187541700091195392 --><style type='text/css'>#bbpBox_187541700091195392 a { text-decoration:none; color:#009999; }#bbpBox_187541700091195392 a:hover { text-decoration:underline; }</style><div id='bbpBox_187541700091195392' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#131516; background-image:url(http://a0.twimg.com/images/themes/theme14/bg.gif);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "the one true commit" always works for me ;)</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:06' href='http://twitter.com/#!/GNi33/status/187541700091195392' target='_blank'>April 4, 2012 16:06</a> via <a href="http://www.destroytwitter.com" rel="nofollow" target="blank">DestroyTwitter</a><a href='https://twitter.com/intent/tweet?in_reply_to=187541700091195392' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187541700091195392' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187541700091195392' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=GNi33'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1419216430/eightbit-696a2020-9b10-4ba9-837a-94dec8187d39_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=GNi33'>@GNi33</a><div style='margin:0; padding-top:2px'>Lukas B Dot</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187541784870666241 --><style type='text/css'>#bbpBox_187541784870666241 a { text-decoration:none; color:#5E412F; }#bbpBox_187541784870666241 a:hover { text-decoration:underline; }</style><div id='bbpBox_187541784870666241' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#FCEBB6; background-image:url(http://a0.twimg.com/profile_background_images/452803931/xde16d7552ea3258659442d4b205ff32.png);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#CE7834; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> $git commit -a -m "Basically started from scratch and rewrote everything. NBD."</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:07' href='http://twitter.com/#!/jo_Osiah/status/187541784870666241' target='_blank'>April 4, 2012 16:07</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=187541784870666241' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187541784870666241' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187541784870666241' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jo_Osiah'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1909225576/d5f105c8705811e1b9f1123138140926_7_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jo_Osiah'>@jo_Osiah</a><div style='margin:0; padding-top:2px'>Josiah Sprague </div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187541971949203460 --><style type='text/css'>#bbpBox_187541971949203460 a { text-decoration:none; color:#A14727; }#bbpBox_187541971949203460 a:hover { text-decoration:underline; }</style><div id='bbpBox_187541971949203460' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#FFFFFF; background-image:url(http://a0.twimg.com/profile_background_images/230244024/twitter-background.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#111111; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "ALL THE CHANGES"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:07' href='http://twitter.com/#!/dalecruse/status/187541971949203460' target='_blank'>April 4, 2012 16:07</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=187541971949203460' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187541971949203460' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187541971949203460' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=dalecruse'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1657346549/dale_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=dalecruse'>@dalecruse</a><div style='margin:0; padding-top:2px'>Dale Cruse</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187542101658058753 --><style type='text/css'>#bbpBox_187542101658058753 a { text-decoration:none; color:#990000; }#bbpBox_187542101658058753 a:hover { text-decoration:underline; }</style><div id='bbpBox_187542101658058753' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#EBEBEB; background-image:url(http://a0.twimg.com/images/themes/theme7/bg.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> Commit message: What's elvish for "I forgot.";)</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:08' href='http://twitter.com/#!/jordanpittman/status/187542101658058753' target='_blank'>April 4, 2012 16:08</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=187542101658058753' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187542101658058753' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187542101658058753' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jordanpittman'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1790233232/Dribbble_Avatar_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jordanpittman'>@jordanpittman</a><div style='margin:0; padding-top:2px'>Jordan Pittman</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187542353446313984 --><style type='text/css'>#bbpBox_187542353446313984 a { text-decoration:none; color:#0084B4; }#bbpBox_187542353446313984 a:hover { text-decoration:underline; }</style><div id='bbpBox_187542353446313984' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#022330; background-image:url(http://a0.twimg.com/images/themes/theme15/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "REFACTOR ALL THE THINGS"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:09' href='http://twitter.com/#!/michelegera/status/187542353446313984' target='_blank'>April 4, 2012 16:09</a> via <a href="http://twitterrific.com" rel="nofollow" target="blank">Twitterrific for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=187542353446313984' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187542353446313984' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187542353446313984' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=michelegera'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/421956187/michele_bw_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=michelegera'>@michelegera</a><div style='margin:0; padding-top:2px'>Michele Gerarduzzi</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187543502538809344 --><style type='text/css'>#bbpBox_187543502538809344 a { text-decoration:none; color:#0084B4; }#bbpBox_187543502538809344 a:hover { text-decoration:underline; }</style><div id='bbpBox_187543502538809344' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#022330; background-image:url(http://a0.twimg.com/profile_background_images/380351780/damask_wallpaper_seamless_background_black.jpg);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "because of my lack of commits. I have committed myself"</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:13' href='http://twitter.com/#!/StuRobson/status/187543502538809344' target='_blank'>April 4, 2012 16:13</a> via <a href="http://tapbots.com/tweetbot" rel="nofollow" target="blank">Tweetbot for iOS</a><a href='https://twitter.com/intent/tweet?in_reply_to=187543502538809344' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187543502538809344' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187543502538809344' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=StuRobson'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1871526191/smart-phone_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=StuRobson'>@StuRobson</a><div style='margin:0; padding-top:2px'>Stuart Robson</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 187544693779873792 --><style type='text/css'>#bbpBox_187544693779873792 a { text-decoration:none; color:#2FC2EF; }#bbpBox_187544693779873792 a:hover { text-decoration:underline; }</style><div id='bbpBox_187544693779873792' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#1A1B1F; background-image:url(http://a0.twimg.com/images/themes/theme9/bg.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#666666; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> "this is not the commit message you are looking for..." ;)</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on April 4, 2012 16:18' href='http://twitter.com/#!/gmoulin_dev/status/187544693779873792' target='_blank'>April 4, 2012 16:18</a> via <a href="http://www.tweetdeck.com" rel="nofollow" target="blank">TweetDeck</a><a href='https://twitter.com/intent/tweet?in_reply_to=187544693779873792' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=187544693779873792' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=187544693779873792' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=gmoulin_dev'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/sticky/default_profile_images/default_profile_5_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=gmoulin_dev'>@gmoulin_dev</a><div style='margin:0; padding-top:2px'>Guillaume Moulin</div></div><div style='clear:both'></div></div></div><!-- end of tweet --></p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/HIx2fXyeGaU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/04/git-commit-m-everything/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/04/git-commit-m-everything/</feedburner:origLink></item>
		<item>
		<title>In defense of reinventing wheels</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/2p7QHIoa3Tc/</link>
		<comments>http://lea.verou.me/2012/04/in-defense-of-reinventing-wheels/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 10:45:22 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1642</guid>
		<description><![CDATA[One of the first things a software engineer learns is &#8220;don&#8217;t reinvent the wheel&#8221;. If something is already made, use that instead of writing your own. &#8220;Stand on the shoulders of giants, they know what they&#8217;re doing better than you&#8221;. Writing your own tools and libraries, even when one already exists, is labelled &#8220;NIH syndrome&#8221; [...]]]></description>
				<content:encoded><![CDATA[<p>One of the first things a software engineer learns is &#8220;don&#8217;t reinvent the wheel&#8221;. If something is already made, use that instead of writing your own. &#8220;Stand on the shoulders of giants, they know what they&#8217;re doing better than you&#8221;. Writing your own tools and libraries, even when one already exists, is labelled &#8220;<abbr title="Not Invented Here">NIH</abbr> syndrome&#8221;  and is considered quite bad.<br />
<span id="more-1642"></span><br />
<em><strong>&#8220;But what if my version is better?&#8221;</strong></em>. Surely, reinventing the wheel can&#8217;t be bad when your new wheel improves existing wheel designs, right? Well, not if the software is open source, which is usually the case in our industry. &#8220;Just contribute to it&#8221; you&#8217;ll be told. However, contributing to an open source project is basically teamwork. The success of any team depends on how well its members work together, which is not a given. Sometimes, your vision about the tool might be vastly different from that of the core members and it might be wiser to create your own prototype than to try and change the minds of all these people.</p>
<p>However, Open Source politics is not what I wanted to discuss today. It&#8217;s not the biggest potential benefit of reinventing the wheel. <strong>Minimizing overhead is.</strong> You hardly ever need 100% of a project. Given enough time to study its inner workings, you could always delete quite a large chunk of it and it would still fit your needs perfectly. However, the effort needed to do that or to rewrite the percentage you actually need is big enough that you are willing to add redundant code to your codebase.</p>
<p><strong>Redundant code is bad.</strong> It still needs to get parsed and usually at least parts of it still need to be executed. <strong>Redundant code hinders performance.</strong> The more code, the slower your app. Especially when we are dealing with backend code, when every line might end up being executed hundreds or even thousands of times per second. The slower your app becomes, the bigger the need to seriously address performance. The result of that is even more code (e.g. caching stuff) that could have been saved in the first place, by just running what you need. This is the reason software like Joomla, Drupal or vBulletin is so extremely bloated and brings servers to their knees if a site becomes mildly successful. It&#8217;s the cost of code that tries to match everyone&#8217;s needs.</p>
<p>Performance is not the only drawback involved in redundant code. <strong>A big one is maintainability.</strong> This code won&#8217;t only need to be parsed by the machine, it will also be parsed by humans, that don&#8217;t know what&#8217;s actually needed and what isn&#8217;t until they understand what every part does. Therefore, even the simplest of changes become hard.</p>
<p>I&#8217;m not saying that using existing software or libraries is bad. I&#8217;m saying that it&#8217;s always a tradeoff between minimizing effort on one side and minimizing redundant code on the other side. I&#8217;m saying that you should <em>consider</em> writing your own code when the percentage of features you need from existing libraries is tiny (lets say less than  20%). It might not be worth carrying the extra 80% forever.</p>
<p>For example, in a project I&#8217;m currently working on, I needed to make a simple localization system so that the site can be multilingual. I chose to use JSON files to contain the phrases. I didn&#8217;t want the phrases to include HTML, since I didn&#8217;t want to have to escape certain symbols. However, they had to include simple formatting like bold and links, otherwise the number of phrases would have to be huge. The obvious solution is <a href="http://daringfireball.net/projects/markdown/" target="_blank">Markdown</a>.</p>
<p>My first thought was to use an existing library, which for PHP is <a href="http://michelf.com/projects/php-markdown/" target="_blank">PHP Markdown</a>. By digging a bit deeper I found that it&#8217;s actually considered pretty good and it seems to be well maintained (last update in January 2012) and mature (exists for over 2 years). I should happily use it then, right?</p>
<p>That&#8217;s what I was planning to do. And then it struck me: I&#8217;m the only person writing these phrases. Even if more people write translations in the future, they will still go through me. So far, the only need for such formatting is links and bold. Everything else (e.g. lists) is handled by the HTML templates. That&#8217;s literally <strong>two lines of PHP</strong>! So, I wrote my own function. It&#8217;s a bit bigger, since I also added emphasis, just in case:</p>
<pre>function markdown($text) {
 // Links
 $text = preg_replace('@\\[(.+?)\\]\\((#.+?)\\)@', '&lt;a href="$2"&gt;$1&lt;/a&gt;', $text);

 // Bold
 $text = preg_replace('@(?&lt;!\\\\)\\*(?&lt;!\\\\)\\*(.+?)(?&lt;!\\\\)\\*(?&lt;!\\\\)\\*@', '&lt;strong&gt;$1&lt;/strong&gt;', $text);

 // Emphasis
 $text = preg_replace('@(?&lt;!\\\\)\\*(.+?)(?&lt;!\\\\)\\*@', '&lt;em&gt;$1&lt;/em&gt;', $text);

 return $text;
}</pre>
<p>Since PHP regular expressions also support negative lookbehind, I can even avoid escaped characters, in the same line. Unfortunately, since PHP lacks regular expression literals, backslashes have to be doubled (<code>\\</code> instead of <code>\</code> so <code>\\\\</code> instead of <code>\\</code>, which is pretty horrible).</p>
<p>For comparison, PHP Markdown is about 1.7K lines of code. It&#8217;s great, if you need the full power of Markdown (e.g. for a comment system) and I&#8217;m glad Michel Fortin wrote it. However, for super simple, controlled use cases, is it really worth the extra code? I say no.</p>
<p>Rachel Andrew recently wrote about something tangentially similar, in her blog post titled &#8220;<a href="http://www.rachelandrew.co.uk/archives/2012/03/21/stop-solving-problems-you-dont-yet-have/" target="_blank">Stop solving problems you don’t yet have</a>&#8220;. It&#8217;s a great read and I&#8217;d advise you to read that too.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/2p7QHIoa3Tc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/04/in-defense-of-reinventing-wheels/feed/</wfw:commentRss>
		<slash:comments>61</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/04/in-defense-of-reinventing-wheels/</feedburner:origLink></item>
		<item>
		<title>Flexible multiline definition lists with 2 lines of CSS 2.1</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/g5GNcqb_-Q8/</link>
		<comments>http://lea.verou.me/2012/02/flexible-multiline-definition-lists-with-2-lines-of-css/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 20:39:08 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[generated content]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1617</guid>
		<description><![CDATA[If you&#8217;ve used definition lists (&#60;dl&#62;) you&#8217;re aware of the problem. By default, &#60;dt&#62;s and &#60;dd&#62;s have display:block. In order to turn them into what we want in most cases (each pair of term and definition on one line) we usually employ a number of different techniques: Using a different &#60;dl&#62; for each pair: Style [...]]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;ve used definition lists (<code>&lt;dl&gt;</code>) you&#8217;re aware of the problem. By default, <code>&lt;dt&gt;</code>s and <code>&lt;dd&gt;</code>s have <code>display:block</code>. In order to turn them into what we want in most cases (each <em>pair</em> of term and definition on one line) we usually employ a number of different techniques:</p>
<ul>
<li>Using a different <code>&lt;dl&gt;</code> for each pair: Style dictating markup, which is bad</li>
<li>Floats: Not flexible</li>
<li><code>display: run-in;</code> on the <code>&lt;dt&gt;</code>: Browser support is bad (No Firefox support)</li>
<li>Adding a <code>&lt;br&gt;</code> after each <code>&lt;dd&gt;</code> and setting both term and definition as <code>display:inline</code>: Invalid markup. Need I say more?</li>
</ul>
<p>If only adding <code>&lt;br&gt;</code>s was valid&#8230; Or, even better, <strong>what if we could insert <code>&lt;br&gt;</code>s from CSS? Actually, we can!</strong><br />
<span id="more-1617"></span><br />
As you might be aware, the CR and LF characters that comprise a line break are regular unicode characters that can be inserted anywhere just like every unicode character. They have the unicode codes 000D and 000A respectively. This means they can also be inserted as generated content, if escaped properly. Then we can use an appropriate white-space value to make the browser respect line breaks only in that part (the inserted line break). It looks like this:</p>
<pre>dd:after {
	content: '\A';
	white-space: pre;
}</pre>
<p>Note that nothing above is CSS3. It&#8217;s all good ol&#8217; CSS 2.1.</p>
<p>Of course, if you have multiple <code>&lt;dd&gt;</code>s for every <code>&lt;dt&gt;</code>, you will need to alter the code a bit. But in that case, this formatting probably won&#8217;t be what you want anyway.</p>
<p><strong>Edit:</strong> As <a href="https://twitter.com/codepo8/status/173148263124451328" target="_blank">Christian Heilmann pointed out</a>, HTML3 (!) <a href="http://www.w3.org/MarkUp/html3/deflists.html" target="_blank">used to have a compact attribute</a> on <code>&lt;dl&gt;</code> elements, which basically did this. It is now obsolete in HTML5, like every other presentational HTML feature.</p>
<p>You can see a live result here:<br />
<iframe style="width: 100%; height: 800px;" src="http://dabblet.com/gist/1901867" width="320" height="240"></iframe></p>
<p>Tested to work in <strong>IE8+, Chrome, Firefox 3+, Opera 10+, Safari 4+</strong>.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/g5GNcqb_-Q8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/02/flexible-multiline-definition-lists-with-2-lines-of-css/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/02/flexible-multiline-definition-lists-with-2-lines-of-css/</feedburner:origLink></item>
		<item>
		<title>A List Apart article: Every time you call a proprietary feature “CSS3″, a kitten dies</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/k6AYg-Y4KbM/</link>
		<comments>http://lea.verou.me/2012/02/a-list-apart-article-every-time-you-call-a-proprietary-feature-css3-a-kitten-dies/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 18:57:04 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1611</guid>
		<description><![CDATA[My first article in ALA was published today, read it here: Every time you call a proprietary feature &#8220;CSS3&#8243;, a kitten dies Some comments about it on twitter:]]></description>
				<content:encoded><![CDATA[<p>My first article in ALA was published today, read it here:</p>
<p><a href="http://www.alistapart.com/articles/every-time-you-call-a-proprietary-feature-css3-a-kitten-dies/" target="_blank">Every time you call a proprietary feature &#8220;CSS3&#8243;, a kitten dies</a></p>
<p>Some comments about it on twitter:<br />
<span id="more-1611"></span><br />
<!-- tweet id : 169424038421204994 --><style type='text/css'>#bbpBox_169424038421204994 a { text-decoration:none; color:#5C7CC8; }#bbpBox_169424038421204994 a:hover { text-decoration:underline; }</style><div id='bbpBox_169424038421204994' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#43749C; background-image:url(http://a2.twimg.com/profile_background_images/336324260/CUA-BG.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#D1D1D1; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>What you think is CSS3, really may *not* be. How <a href="http://twitter.com/search?q=%23CSS3" title="#CSS3">#CSS3</a>&#160;was infiltrated under a -webkit- cloak! <a href="http://t.co/BKgh0Ehf" rel="nofollow">http://t.co/BKgh0Ehf</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:13' href='http://twitter.com/#!/kkmett/status/169424038421204994' target='_blank'>February 14, 2012 16:13</a> via <a href="http://startgoogleplus.com" rel="nofollow" target="blank">SGPlus</a><a href='https://twitter.com/intent/tweet?in_reply_to=169424038421204994' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169424038421204994' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169424038421204994' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=kkmett'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1645401198/Kmett-BW-Polo-Circle_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=kkmett'>@kkmett</a><div style='margin:0; padding-top:2px'>Keith Kmett, CUA</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169425611801108480 --><style type='text/css'>#bbpBox_169425611801108480 a { text-decoration:none; color:#13456b; }#bbpBox_169425611801108480 a:hover { text-decoration:underline; }</style><div id='bbpBox_169425611801108480' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#336699; background-image:url(http://a3.twimg.com/profile_background_images/64650857/twitterbackground.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Every Time You Call a Proprietary Feature &#8220;CSS3,&#8221; a Kitten Dies - <a href="http://t.co/8dfmh93u" rel="nofollow">http://t.co/8dfmh93u</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:19' href='http://twitter.com/#!/codepo8/status/169425611801108480' target='_blank'>February 14, 2012 16:19</a> via <a href="http://www.tweetdeck.com" rel="nofollow" target="blank">TweetDeck</a><a href='https://twitter.com/intent/tweet?in_reply_to=169425611801108480' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169425611801108480' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169425611801108480' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=codepo8'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a1.twimg.com/profile_images/1666904408/codepo8_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=codepo8'>@codepo8</a><div style='margin:0; padding-top:2px'>Christian Heilmann </div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169425704092573696 --><style type='text/css'>#bbpBox_169425704092573696 a { text-decoration:none; color:#408800; }#bbpBox_169425704092573696 a:hover { text-decoration:underline; }</style><div id='bbpBox_169425704092573696' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#4A4B45; background-image:url(http://a3.twimg.com/profile_background_images/2362616/mann-bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#6E6A6A; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Sing it, @<a href="http://twitter.com/intent/user?screen_name=leavrou" class="twitter-action">leavrou</a> "&#8230;proprietary features of today are no better than ActiveX & IE filters&#8230;only difference is better PR" <a href="http://t.co/TWVTAtSQ" rel="nofollow">http://t.co/TWVTAtSQ</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:20' href='http://twitter.com/#!/lydiamann/status/169425704092573696' target='_blank'>February 14, 2012 16:20</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=169425704092573696' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169425704092573696' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169425704092573696' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=lydiamann'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a1.twimg.com/profile_images/1649735614/me_4005_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=lydiamann'>@lydiamann</a><div style='margin:0; padding-top:2px'>lydiamann</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169426392654684160 --><style type='text/css'>#bbpBox_169426392654684160 a { text-decoration:none; color:#972200; }#bbpBox_169426392654684160 a:hover { text-decoration:underline; }</style><div id='bbpBox_169426392654684160' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#FF6600; background-image:url(http://a2.twimg.com/profile_background_images/1422692/chancegarden1280.gif);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#000000; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>&#10025; Every Time You Call a Proprietary Feature &#8220;CSS3,&#8221; a Kitten Dies by @<a href="http://twitter.com/intent/user?screen_name=leaverou" class="twitter-action">leaverou</a>. <a href="http://t.co/V2iKffE8" rel="nofollow">http://t.co/V2iKffE8</a> <a href="http://twitter.com/search?q=%23webkit" title="#webkit">#webkit</a> <a href="http://twitter.com/search?q=%23mustread" title="#mustread">#mustread</a> <a href="http://twitter.com/search?q=%23css3" title="#css3">#css3</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:22' href='http://twitter.com/#!/zeldman/status/169426392654684160' target='_blank'>February 14, 2012 16:22</a> via <a href="http://twitter.com/tweetbutton" rel="nofollow" target="blank">Tweet Button</a><a href='https://twitter.com/intent/tweet?in_reply_to=169426392654684160' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169426392654684160' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169426392654684160' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=zeldman'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/1732638950/jzgrn_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=zeldman'>@zeldman</a><div style='margin:0; padding-top:2px'>Jeffrey Zeldman</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169426553787256833 --><style type='text/css'>#bbpBox_169426553787256833 a { text-decoration:none; color:#A7491C; }#bbpBox_169426553787256833 a:hover { text-decoration:underline; }</style><div id='bbpBox_169426553787256833' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#FFFFFF; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Lea Verou: Every Time You Call a Proprietary Feature &#8220;CSS3,&#8221; a Kitten Dies. <a href="http://t.co/8ILOQtQz" rel="nofollow">http://t.co/8ILOQtQz</a> <a href="http://twitter.com/search?q=%23css3" title="#css3">#css3</a> <a href="http://twitter.com/search?q=%23webstandards" title="#webstandards">#webstandards</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:23' href='http://twitter.com/#!/alistapart/status/169426553787256833' target='_blank'>February 14, 2012 16:23</a> via <a href="http://twitterrific.com" rel="nofollow" target="blank">Twitterrific for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=169426553787256833' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169426553787256833' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169426553787256833' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=alistapart'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/74642119/alatwit-improved_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=alistapart'>@alistapart</a><div style='margin:0; padding-top:2px'>A List Apart</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169426900865908737 --><style type='text/css'>#bbpBox_169426900865908737 a { text-decoration:none; color:#249ba3; }#bbpBox_169426900865908737 a:hover { text-decoration:underline; }</style><div id='bbpBox_169426900865908737' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#FFFFFF; background-image:url(http://a3.twimg.com/profile_background_images/421561231/Twitter-Background.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Every Time You Call a Proprietary Feature &#8220;CSS3,&#8221; a Kitten Dies: Lea Verou in a special issue of @<a href="http://twitter.com/intent/user?screen_name=alistapart" class="twitter-action">alistapart</a>. <a href="http://t.co/6pcX26Ob" rel="nofollow">http://t.co/6pcX26Ob</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:24' href='http://twitter.com/#!/happycog/status/169426900865908737' target='_blank'>February 14, 2012 16:24</a> via <a href="http://twitterrific.com" rel="nofollow" target="blank">Twitterrific for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=169426900865908737' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169426900865908737' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169426900865908737' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=happycog'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1818126613/hc_twitter_icon_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=happycog'>@happycog</a><div style='margin:0; padding-top:2px'>Happy Cog&#8482;</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169428991470612480 --><style type='text/css'>#bbpBox_169428991470612480 a { text-decoration:none; color:#0084B4; }#bbpBox_169428991470612480 a:hover { text-decoration:underline; }</style><div id='bbpBox_169428991470612480' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Eye opening for me at least, had no idea some features in CSS3 where make believe <a href="http://t.co/vkHk5bEZ" rel="nofollow">http://t.co/vkHk5bEZ</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:33' href='http://twitter.com/#!/AlanBWhitney/status/169428991470612480' target='_blank'>February 14, 2012 16:33</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=169428991470612480' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169428991470612480' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169428991470612480' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=AlanBWhitney'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/76032969/bio-alan_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=AlanBWhitney'>@AlanBWhitney</a><div style='margin:0; padding-top:2px'>Alan Whitney</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169430280883544064 --><style type='text/css'>#bbpBox_169430280883544064 a { text-decoration:none; color:#800909; }#bbpBox_169430280883544064 a:hover { text-decoration:underline; }</style><div id='bbpBox_169430280883544064' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#f7f4f0; background-image:url(http://a0.twimg.com/profile_background_images/160955133/D-beige.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#000000; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>I &lt;3 new @<a href="http://twitter.com/intent/user?screen_name=alistapart" class="twitter-action">alistapart</a> articles: Every Time You Call a Proprietary Feature &#8220;CSS3,&#8221; a Kitten Dies <a href="http://t.co/IRaoGpJx" rel="nofollow">http://t.co/IRaoGpJx</a> <a href="http://twitter.com/search?q=%23webstandards" title="#webstandards">#webstandards</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:38' href='http://twitter.com/#!/LeftyDesigner/status/169430280883544064' target='_blank'>February 14, 2012 16:38</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=169430280883544064' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169430280883544064' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169430280883544064' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=LeftyDesigner'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/1780423726/D-twitter_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=LeftyDesigner'>@LeftyDesigner</a><div style='margin:0; padding-top:2px'>Shannon M&#248;lhave</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169432718038409216 --><style type='text/css'>#bbpBox_169432718038409216 a { text-decoration:none; color:#0084B4; }#bbpBox_169432718038409216 a:hover { text-decoration:underline; }</style><div id='bbpBox_169432718038409216' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>I'm in love with the Valintine's Day issue of @<a href="http://twitter.com/intent/user?screen_name=alistapart" class="twitter-action">alistapart</a>. @<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> is awesome. <a href="http://t.co/EZcU79Bd" rel="nofollow">http://t.co/EZcU79Bd</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:48' href='http://twitter.com/#!/dap6000/status/169432718038409216' target='_blank'>February 14, 2012 16:48</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=169432718038409216' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169432718038409216' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169432718038409216' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=dap6000'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/76750357/Derek_and_Fiona_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=dap6000'>@dap6000</a><div style='margin:0; padding-top:2px'>Derek Pennycuff</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169434598911123456 --><style type='text/css'>#bbpBox_169434598911123456 a { text-decoration:none; color:#0084B4; }#bbpBox_169434598911123456 a:hover { text-decoration:underline; }</style><div id='bbpBox_169434598911123456' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Save teh kitteh (and teh web): Every time you call a proprietary feature &#8220;CSS3&#8221; a kitten dies, by @<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a>: <a href="http://t.co/uW7Lz6Q1" rel="nofollow">http://t.co/uW7Lz6Q1</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 16:55' href='http://twitter.com/#!/martuishere/status/169434598911123456' target='_blank'>February 14, 2012 16:55</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=169434598911123456' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169434598911123456' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169434598911123456' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=martuishere'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1342859760/marta-avatar_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=martuishere'>@martuishere</a><div style='margin:0; padding-top:2px'>Marta Armada</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169442236709355521 --><style type='text/css'>#bbpBox_169442236709355521 a { text-decoration:none; color:#0084B4; }#bbpBox_169442236709355521 a:hover { text-decoration:underline; }</style><div id='bbpBox_169442236709355521' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#022330; background-image:url(http://a0.twimg.com/images/themes/theme15/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Important Read! &#8212; Every Time You Call a Proprietary Feature &#8220;CSS3,&#8221; a Kitten Dies: <a href="http://t.co/T3HX6tYy" rel="nofollow">http://t.co/T3HX6tYy</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 17:25' href='http://twitter.com/#!/rachelober/status/169442236709355521' target='_blank'>February 14, 2012 17:25</a> via <a href="http://twitter.com/tweetbutton" rel="nofollow" target="blank">Tweet Button</a><a href='https://twitter.com/intent/tweet?in_reply_to=169442236709355521' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169442236709355521' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169442236709355521' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=rachelober'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a1.twimg.com/profile_images/1790762387/Rachel_Headshot_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=rachelober'>@rachelober</a><div style='margin:0; padding-top:2px'>Rachel Ober</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169443447554580480 --><style type='text/css'>#bbpBox_169443447554580480 a { text-decoration:none; color:#088253; }#bbpBox_169443447554580480 a:hover { text-decoration:underline; }</style><div id='bbpBox_169443447554580480' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#EDECE9; background-image:url(http://a2.twimg.com/profile_background_images/252282360/sfmoma.jpg); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#634047; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Also on <a href="http://twitter.com/search?q=%23ALA" title="#ALA">#ALA</a>, @<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> on the difference between CSS and WebKit and what it means for kittens <a href="http://t.co/OhOnSiWZ" rel="nofollow">http://t.co/OhOnSiWZ</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 17:30' href='http://twitter.com/#!/sgalineau/status/169443447554580480' target='_blank'>February 14, 2012 17:30</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=169443447554580480' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169443447554580480' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169443447554580480' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=sgalineau'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/1350870912/Capture_normal.PNG' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=sgalineau'>@sgalineau</a><div style='margin:0; padding-top:2px'>Sylvain Galineau</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169448377824722944 --><style type='text/css'>#bbpBox_169448377824722944 a { text-decoration:none; color:#0000ff; }#bbpBox_169448377824722944 a:hover { text-decoration:underline; }</style><div id='bbpBox_169448377824722944' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#000000; background-image:url(http://a3.twimg.com/profile_background_images/4660697/IMG_1122big.jpg); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#000000; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>A List Apart on -webkit- css - <a href="http://t.co/wTGRIG5a" rel="nofollow">http://t.co/wTGRIG5a</a> - remember, the last time vendors ignored standards groups... we got a decade of IE6</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 17:50' href='http://twitter.com/#!/sdague/status/169448377824722944' target='_blank'>February 14, 2012 17:50</a> via <a href="http://twitter-chrome.com" rel="nofollow" target="blank">chrome-share</a><a href='https://twitter.com/intent/tweet?in_reply_to=169448377824722944' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169448377824722944' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169448377824722944' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=sdague'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/1782488690/newme_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=sdague'>@sdague</a><div style='margin:0; padding-top:2px'>Sean Dague</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169451221495717889 --><style type='text/css'>#bbpBox_169451221495717889 a { text-decoration:none; color:#9E0B0F; }#bbpBox_169451221495717889 a:hover { text-decoration:underline; }</style><div id='bbpBox_169451221495717889' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#0e0e0e; background-image:url(http://a1.twimg.com/profile_background_images/4978484/twiitter-bg.png);'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#999999; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>A cautionary tale of modern browsers: Every Time You Call a Proprietary Feature &#8220;CSS3,&#8221; a Kitten Dies: <a href="http://t.co/ynWIpbZN" rel="nofollow">http://t.co/ynWIpbZN</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 18:01' href='http://twitter.com/#!/whitman/status/169451221495717889' target='_blank'>February 14, 2012 18:01</a> via <a href="http://twitter.com/tweetbutton" rel="nofollow" target="blank">Tweet Button</a><a href='https://twitter.com/intent/tweet?in_reply_to=169451221495717889' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169451221495717889' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169451221495717889' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=whitman'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/82337018/bobby-cmag_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=whitman'>@whitman</a><div style='margin:0; padding-top:2px'>Bobby Whitman</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169456073466585088 --><style type='text/css'>#bbpBox_169456073466585088 a { text-decoration:none; color:#0084B4; }#bbpBox_169456073466585088 a:hover { text-decoration:underline; }</style><div id='bbpBox_169456073466585088' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#022330; background-image:url(http://a0.twimg.com/images/themes/theme15/bg.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Go and read what @<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> says about proprietary features, <a href="http://twitter.com/search?q=%23CSS3" title="#CSS3">#CSS3</a> and kittens. <a href="http://t.co/4ogWcjwt" rel="nofollow">http://t.co/4ogWcjwt</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 18:20' href='http://twitter.com/#!/peterwinnberg/status/169456073466585088' target='_blank'>February 14, 2012 18:20</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=169456073466585088' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169456073466585088' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169456073466585088' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=peterwinnberg'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/534474172/pw_small_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=peterwinnberg'>@peterwinnberg</a><div style='margin:0; padding-top:2px'>Peter Winnberg</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169468390736527360 --><style type='text/css'>#bbpBox_169468390736527360 a { text-decoration:none; color:#0084B4; }#bbpBox_169468390736527360 a:hover { text-decoration:underline; }</style><div id='bbpBox_169468390736527360' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#A0C060; background-image:url(http://a1.twimg.com/profile_background_images/3126477/twitterSquirrel.png); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Before you disagree with me, just read this: <a href="http://t.co/pztTosp1" rel="nofollow">http://t.co/pztTosp1</a> I'm so pissed off at @<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> for being so damn talented. Great article.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 19:09' href='http://twitter.com/#!/cssquirrel/status/169468390736527360' target='_blank'>February 14, 2012 19:09</a> via <a href="http://www.tweetdeck.com" rel="nofollow" target="blank">TweetDeck</a><a href='https://twitter.com/intent/tweet?in_reply_to=169468390736527360' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169468390736527360' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169468390736527360' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=cssquirrel'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/1758184078/squirrel_hat_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=cssquirrel'>@cssquirrel</a><div style='margin:0; padding-top:2px'>Kyle Weems</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169475627274088448 --><style type='text/css'>#bbpBox_169475627274088448 a { text-decoration:none; color:#0084B4; }#bbpBox_169475627274088448 a:hover { text-decoration:underline; }</style><div id='bbpBox_169475627274088448' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#080808; background-image:url(http://a2.twimg.com/profile_background_images/32029952/twitter_back.jpg); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> nails it. <a href="http://t.co/H07y5AQJ" rel="nofollow">http://t.co/H07y5AQJ</a> Seems like we keep fighting the same battles. <a href="http://twitter.com/search?q=%23css" title="#css">#css</a> <a href="http://twitter.com/search?q=%23standards" title="#standards">#standards</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 19:38' href='http://twitter.com/#!/jameswillweb/status/169475627274088448' target='_blank'>February 14, 2012 19:38</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=169475627274088448' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169475627274088448' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169475627274088448' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jameswillweb'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a1.twimg.com/profile_images/1468203297/me_library_small_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jameswillweb'>@jameswillweb</a><div style='margin:0; padding-top:2px'>james williamson</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169482651198160896 --><style type='text/css'>#bbpBox_169482651198160896 a { text-decoration:none; color:#8f1e08; }#bbpBox_169482651198160896 a:hover { text-decoration:underline; }</style><div id='bbpBox_169482651198160896' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#e3e0d1; background-image:url(http://a1.twimg.com/images/themes/theme3/bg.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Excellent couple articles on vendor prefixes at ALA: <a href="http://t.co/uz6zA7FW" rel="nofollow">http://t.co/uz6zA7FW</a>, <a href="http://t.co/MSKZVm4a" rel="nofollow">http://t.co/MSKZVm4a</a>. Brace yourself before reading comments tho.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 20:06' href='http://twitter.com/#!/rogerjohansson/status/169482651198160896' target='_blank'>February 14, 2012 20:06</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=169482651198160896' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169482651198160896' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169482651198160896' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=rogerjohansson'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/456195013/456_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=rogerjohansson'>@rogerjohansson</a><div style='margin:0; padding-top:2px'>Roger Johansson</div></div><div style='clear:both'></div></div></div><!-- end of tweet --><br />
<!-- tweet id : 169490532928720896 --><style type='text/css'>#bbpBox_169490532928720896 a { text-decoration:none; color:#9D582E; }#bbpBox_169490532928720896 a:hover { text-decoration:underline; }</style><div id='bbpBox_169490532928720896' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#8B542B; background-image:url(http://a3.twimg.com/profile_background_images/6817186/timmys_bagels.jpg); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>@<a href="http://twitter.com/intent/user?screen_name=LeaVerou" class="twitter-action">LeaVerou</a> great <a href="http://twitter.com/search?q=%23ala" title="#ala">#ala</a> article <a href="http://t.co/gCtSokC7" rel="nofollow">http://t.co/gCtSokC7</a> and the best possible followup for recent misunderstandings. Keep up the good work.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://lea.verou.me/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on February 14, 2012 20:37' href='http://twitter.com/#!/beardChamp/status/169490532928720896' target='_blank'>February 14, 2012 20:37</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=169490532928720896' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=169490532928720896' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=169490532928720896' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=beardChamp'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/561702053/beardChamp_twitter_normal.png' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=beardChamp'>@beardChamp</a><div style='margin:0; padding-top:2px'>Tim McElwee</div></div><div style='clear:both'></div></div></div><!-- end of tweet --></p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/k6AYg-Y4KbM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/02/a-list-apart-article-every-time-you-call-a-proprietary-feature-css3-a-kitten-dies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/02/a-list-apart-article-every-time-you-call-a-proprietary-feature-css3-a-kitten-dies/</feedburner:origLink></item>
		<item>
		<title>Vendor prefixes, the CSS WG and me</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/RFCoX_AX2ag/</link>
		<comments>http://lea.verou.me/2012/02/vendor-prefixes-the-css-wg-and-me/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 13:24:05 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1593</guid>
		<description><![CDATA[The CSS Working Group is recently discussing the very serious problem that vendor prefixes have become. We have reached a point where browsers are seriously considering to implement -webkit- prefixes, just because authors won&#8217;t bother using anything else. This is just sad.  Daniel Glazman, Christian Heilmann and others wrote about it, making very good points [...]]]></description>
				<content:encoded><![CDATA[<p>The CSS Working Group is recently discussing the very serious problem that vendor prefixes have become. We have reached a point where <strong>browsers are seriously considering to implement -webkit- prefixes</strong>, just because authors won&#8217;t bother using anything else. <strong>This is just sad.</strong> <img src='http://lea.verou.me/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  <a href="http://www.glazman.org/weblog/dotclear/index.php?post/2012/02/09/CALL-FOR-ACTION:-THE-OPEN-WEB-NEEDS-YOU-NOW" target="_blank">Daniel Glazman</a>, <a href="http://christianheilmann.com/2012/02/09/now-vendor-prefixes-have-become-a-problem-want-to-help-fix-it/" target="_blank">Christian Heilmann</a> and others wrote about it, making very good points and hoping that authors will wake up and start behaving. If you haven&#8217;t already, visit those links and read what they are saying. I&#8217;m not very optimistic about it, but I&#8217;ll do whatever I can to support their efforts.</p>
<p>And that brings us to the other thing that made me sad these days. 2 days ago, <a href="http://lists.w3.org/Archives/Public/www-style/2012Feb/0313.html" target="_blank">the CSS WG published its Minutes</a> (sorta like a meeting) and I was surprised to hear that I&#8217;ve been mentioned. My surprise quickly turned into this painful feeling in your stomach when you&#8217;re being unfairly accused:</p>
<pre>tantek: Opposite is happening right now. Web standards activists are teaching
 people to use -webkit-
tantek: People like Lea Verou.
tantek: Their demos are filled with -webkit-. You will see presentations
 from all the web standards advocates advocating people to use
 -webkit- prefixes.</pre>
<p><strong>Try to picture being blamed of the very thing you hate, and you might understand how that felt.</strong> I&#8217;ve always been an advocate of inclusive CSS coding that doesn&#8217;t shut down other browsers. It&#8217;s good for future-proofing, it&#8217;s good for competition and it&#8217;s the right thing to do. Heck, <a href="http://leaverou.github.com/prefixfree/" target="_blank">I even made a popular script to help people adding all prefixes</a>! I&#8217;m even one of the few people in the industry who has <strong>never expressed a definite browser preference</strong>. I love and hate every browser equally, as I can see assets and defects in all of them (ok, except Safari. Safari must die <img src='http://lea.verou.me/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>When Tantek realized he had falsely accused me of this, <a href="http://krijnhoetmer.nl/irc-logs/css/20120207#l-1066" target="_blank">he corrected himself</a> in the #css IRC room on w3.org:</p>
<pre>[17:27] &lt;tantek&gt; (ASIDE: regarding using -webkit- prefix, clarification re: Lea Verou - she's advocated using *both* vendor prefixed properties (multiple vendors) and the unprefixed version after them. See her talk http://www.slideshare.net/LeaVerou/css3-a-practical-introduction-ft2010-talk from Front-Trends 2010 for example. An actual example of -webkit- *only* prefix examples (thus implied advocacy) is Google's http://slides.html5rocks.com/ , e.g.
[17:27] &lt;tantek&gt; http://slides.html5rocks.com/#css-columns has three -webkit- property declarations starting with -webkit-column-count )</pre>
<p>That&#8217;s nice of him, and it does help. At least I had a link to give to people who kept asking me on twitter if I was really the prefix monster he made me out to be. <img src='http://lea.verou.me/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  The problem is that not many read the IRC logs, but many more read the www-style archives. Especially since, with all this buzz, many people were directed into reading this discussion by the above articles. I don&#8217;t know how many people will be misled by Tantek&#8217;s uninformed comment without reading his correction, but I know for sure that the number is non-zero. And the worst of all is that many of them are people in the CSSWG or in the W3C in general,  people who I have great respect and admiration for. And quite frankly, that sucks.</p>
<p>I don&#8217;t think Tantek had bad intentions. I&#8217;ve met him multiple times and I know he&#8217;s a nice guy. Maybe he was being lazy by making comments he didn&#8217;t check, but that&#8217;s about it. It could happen to many people. My main frustration is that it feels there is nothing I can do about it, besides answering people when they take the time to talk to me about it. I can do nothing with the ones that won&#8217;t, and that&#8217;s the majority. At least, if a forum was used over a mailing list, this could&#8217;ve been edited or something.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/RFCoX_AX2ag" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/02/vendor-prefixes-the-css-wg-and-me/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/02/vendor-prefixes-the-css-wg-and-me/</feedburner:origLink></item>
		<item>
		<title>Moving an element along a circle</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/HnwE9r3BfAI/</link>
		<comments>http://lea.verou.me/2012/02/moving-an-element-along-a-circle/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 21:08:19 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[CSS3 animations]]></category>
		<category><![CDATA[CSS3 transforms]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1586</guid>
		<description><![CDATA[It all started a few months ago, when Chris Coyier casually asked me how would I move an element along a circle, without of course rotating the element itself. If I recall correctly, his solution was to use multiple keyframes, for various points on a circle&#8217;s circumference, approximating it. I couldn&#8217;t think of anything better [...]]]></description>
				<content:encoded><![CDATA[<p>It all started a few months ago, when <a href="http://css-tricks.com/" target="_blank">Chris Coyier</a> casually asked me how would I move an element along a circle, without of course rotating the element itself. If I recall correctly, his solution was to use multiple keyframes, for various points on a circle&#8217;s circumference, approximating it. I couldn&#8217;t think of anything better at the time, but the question was stuck in the back of my head.<br />
<span id="more-1586"></span><br />
3 months ago, I came up with a first solution. Unfortunately, it required an extra wrapper element. The idea was to use two rotate transforms with different origins and opposite angles that cancel each other at any given time. The first transform-origin would be the center of the circle path and the other one the center of the element. Because we can&#8217;t use multiple transform-origins, a wrapper element was needed.</p>
<p><iframe style="width: 100%; height: 500px;" src="http://jsfiddle.net/leaverou/zXPzY/embedded/result" frameborder="0" width="320" height="240"></iframe></p>
<p>So, even though this solution was better, I wasn&#8217;t fully satisfied with it due to the need for the extra element. So, it kept being stuck in the back of my head.</p>
<p>Recently, I <a href="http://lists.w3.org/Archives/Public/www-style/2012Feb/0201.html" target="_blank">suggested to www-style that transform-origin should be a list</a> and accept multiple origins and presented this example as a use case. And then <a href="http://aryeh.name/" target="_blank">Aryeh Gregor</a> came up with <a href="http://lists.w3.org/Archives/Public/www-style/2012Feb/0294.html" target="_blank">this genius idea</a> to prove that it&#8217;s already possible if you chain translate() transforms between the opposite rotates.</p>
<p>I simplified the code a bit, and here it is:</p>
<p><iframe style="width: 100%; height: 500px;" src="http://dabblet.com/gist/1760283" width="320" height="240"></iframe></p>
<p>With the tools we currently have, I don&#8217;t think it gets any simpler than that.</p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/HnwE9r3BfAI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/02/moving-an-element-along-a-circle/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/02/moving-an-element-along-a-circle/</feedburner:origLink></item>
		<item>
		<title>Simpler CSS typing animation, with the ch unit</title>
		<link>http://feedproxy.google.com/~r/leaverou/~3/SOa_63G1vaM/</link>
		<comments>http://lea.verou.me/2012/02/simpler-css-typing-animation-with-the-ch-unit/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 15:16:22 +0000</pubDate>
		<dc:creator>Lea Verou</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[CSS3 animations]]></category>
		<category><![CDATA[CSS3 values]]></category>

		<guid isPermaLink="false">http://lea.verou.me/?p=1572</guid>
		<description><![CDATA[A while ago, I posted about how to use steps() as an easing function to create a typing animation that degrades gracefully. Today I decided to simplify it a bit and make it more flexible, at the cost of browser support. The new version fully works in Firefox 1+ and IE10, since Opera and WebKit [...]]]></description>
				<content:encoded><![CDATA[<p>A while ago, <a href="http://lea.verou.me/2011/09/pure-css3-typing-animation-with-steps/" target="_blank">I posted</a> about how to use <code>steps()</code> as an easing function to create a typing animation that degrades gracefully.</p>
<p>Today I decided to simplify it a bit and make it more flexible, at the cost of browser support. The new version fully works in Firefox 1+ and IE10, since Opera and WebKit don&#8217;t support <a href="http://www.w3.org/TR/css3-values/#ch-unit" target="_blank">the ch unit</a> and even though IE9 supports it, it doesn&#8217;t support CSS animations.<br />
<span id="more-1572"></span><br />
To put it simply, one <code>ch</code> unit is equivalent to the width of the zero (0) character of the font. So, in monospace fonts, it&#8217;s equivalent to the width of <strong>every</strong> character, since every character has the same width.</p>
<p>In the new version, we don&#8217;t need an obscuring span, so no extra HTML and it will work with non-solid backgrounds too. Also, even though the number of characters still needs to be hard-coded, it doesn&#8217;t need to be hardcoded in the animation any more, so it could be easily done through script without messing with creating/modifying stylesheets. Note how each animation only has one keyframe, and takes advantage of the fact that when the <code>from</code> (0%) and <code>to</code> (100%) keyframes are missing, the browser generates them from the fallback styles. I use this a lot when coding animations, as I hate duplication.</p>
<p>In browsers that support CSS animations, but not the ch unit (such as WebKit based browsers), the animation will still occur, since we included a fallback in ems, but it won&#8217;t be 100% perfect. I think that&#8217;s a pretty good fallback, but if it bothers you, just declare a fallback of auto (or don&#8217;t declare one at all, and it will naturally fall back to auto). In browsers that don&#8217;t support CSS animations at all (such as Opera), the caret will be a solid black line that doesn&#8217;t blink. I thought that&#8217;s better than not showing it at all, but if you disagree, it&#8217;s very easy to hide it in those browsers completely: Just swap the <code>border-color</code> between the keyframe and the <code>h1</code> rule (hint: when a <code>border-color</code> is not declared, it&#8217;s <code>currentColor</code>).</p>
<p><strong>Edit:</strong> It appears that Firefox&#8217;s support for the ch unit is a bit buggy so, the following example won&#8217;t work with the Monaco font for example. This is not the correct behavior.</p>
<p>Enjoy:</p>
<p><iframe style="width: 100%; height: 600px;" src="http://dabblet.com/gist/1745856" width="320" height="240"></iframe></p>
<img src="http://feeds.feedburner.com/~r/leaverou/~4/SOa_63G1vaM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lea.verou.me/2012/02/simpler-css-typing-animation-with-the-ch-unit/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://lea.verou.me/2012/02/simpler-css-typing-animation-with-the-ch-unit/</feedburner:origLink></item>
	</channel>
</rss>
