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

<channel>
	<title>Stubbornella</title>
	<atom:link href="http://www.stubbornella.org/content/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stubbornella.org/content</link>
	<description>A Term of Endearment</description>
	<lastBuildDate>Mon, 09 Nov 2009 21:42:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CSS Wish List</title>
		<link>http://www.stubbornella.org/content/2009/11/09/css-wish-list/</link>
		<comments>http://www.stubbornella.org/content/2009/11/09/css-wish-list/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 21:42:57 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[XHTML / HTML]]></category>
		<category><![CDATA[oocss]]></category>
		<category><![CDATA[Specification]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[w3c]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=422</guid>
		<description><![CDATA[Don't get me wrong, I think CSS is awesome. It is a great way of defining the UI, but it could be even better. I'm excited about the special effects, transitions, and graphic elements currently being added to the CSS specification. They will help us write faster pages by eliminating the need for UI graphics for things like rounded corners. On the other hand, we also need to <em>add structure to the language</em> to make it easier for designers and developers to author new pages and applications.  I hope the CSS Working Group will consider my suggestions.

<h3>Suggestions for the CSS Working Group</h3>

The community has been talking about some form of <a href="http://fantasai.inkedblade.net/style/specs/constants/">constants</a> or <a href="http://disruptive-innovations.com/zoo/cssvariables/">variables</a> in different incarnations for almost a decade, it is time to make this a reality. While it is possible to duplicate this functionality with a preprocessor (an excellent stop gap until browser support catches up), ultimately this is a tool which should live within the CSS itself. It is a powerful way of expressing more about the objects we are building.

The mixins and prototypes (and associated includes and extends properties) are designed to allow document authors to abstract reusable bits of code and better manage and maintain their style sheets. The goal is to mimic the effect of using multiple class names in the HTML without the drawbacks associated with current implementations. Authors need extends and include in order to write faster, smaller, more efficient style sheets.

CSS is a powerful expressive language. It needs certain modifications so that it will be robust, maintainable, and easy to implement. 

<div style="width:425px;text-align:left" id="__ss_2453976"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/stubbornella/css-wish-list" title="CSS Wish List @JSConf">CSS Wish List @JSConf</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=new-091108211142-phpapp01&#038;stripped_title=css-wish-list" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=new-091108211142-phpapp01&#038;stripped_title=css-wish-list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/stubbornella">Nicole Sullivan</a>.</div></div>
<a href="http://jsconf.eu">From JSConf.eu</a>]]></description>
			<content:encoded><![CDATA[<p>Don&#8217;t get me wrong, I think CSS is awesome. It is a great way of defining the UI, but it could be even better. I&#8217;m excited about the special effects, transitions, and graphic elements currently being added to the CSS specification. They will help us write faster pages by eliminating the need for UI graphics for things like rounded corners. On the other hand, we also need to <em>add structure to the language</em> to make it easier for designers and developers to author new pages and applications.  I hope the CSS Working Group will consider my suggestions.</p>
<ul style="list-style-type: square; padding-left: 20px;">
<li>Make CSS a better declarative language </li>
<li>Abstract repeating patterns in the code</li>
<li>Do not make CSS a programming language</li>
</ul>
<h3>Suggestions for the CSS Working Group</h3>
<p>The community has been talking about some form of <a href="http://fantasai.inkedblade.net/style/specs/constants/">constants</a> or <a href="http://disruptive-innovations.com/zoo/cssvariables/">variables</a> in different incarnations for almost a decade, it is time to make this a reality. While it is possible to duplicate this functionality with a preprocessor (an excellent stop gap until browser support catches up), ultimately this is a tool which should live within the CSS itself. It is a powerful way of expressing more about the objects we are building.</p>
<p>The mixins and prototypes (and associated includes and extends properties) are designed to allow document authors to abstract reusable bits of code and better manage and maintain their style sheets. The goal is to mimic the effect of using multiple class names in the HTML without the drawbacks associated with current implementations. Authors need extends and include in order to write faster, smaller, more efficient style sheets.</p>
<p>CSS is a powerful expressive language. It needs certain modifications so that it will be robust, maintainable, and easy to implement. </p>
<div style="width:425px;text-align:left" id="__ss_2453976"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/stubbornella/css-wish-list" title="CSS Wish List @JSConf">CSS Wish List @JSConf</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=new-091108211142-phpapp01&#038;stripped_title=css-wish-list" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=new-091108211142-phpapp01&#038;stripped_title=css-wish-list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/stubbornella">Nicole Sullivan</a>.</div>
</div>
<p><a href="http://jsconf.eu">From JSConf.eu</a></p>
<h4>How did this begin?</h4>
<p>At some point, I realized I was coding CSS with a bunch of “rules” and best practices that weren’t the currently accepted norm. I found myself writing comments to try to express these rules like: </p>
<pre>/* ----- faq (extends mod) ----- */</pre>
<p>and </p>
<pre>/* margin top = bottom height - corner height */</pre>
<p>At that point I realized that I was trying to express via comments something which was missing from existing CSS syntax. I looked at other proposals and my own work building web sites for the last 9 years (eek! almost a decade). I first <a href="http://www.slideshare.net/stubbornella/taming-css-selectors">cataloged many of the rules</a> because, at this point, they were mostly intuition and I needed to figure out <strong>why</strong> I do things the way I do. </p>
<p>When that had stabilized, I began to explore a syntax for this new language of declarative objects. Trying to balance standard programming practices with a desire that the syntax fit well with document authors expectations for how the language works.</p>
<h4>CSS Inheritance Today</h4>
<p>It is currently possible to implement CSS inheritance in three ways, however, each has its drawbacks.  </p>
<ol style="list-style-type: square; padding-left: 20px;">
<li><strong>Multiple class names</strong>, clog the HTML with classes that have the same semantic value (just more or less abstract). They introduce an unnecessary dependency because CSS inheritance is defined in the HTML.</li>
<li>By <strong>chaining comma delimited selector strings</strong>, authors lose the ability to group related rules into discrete blocks of code. The quantity of code increases dramatically.  A preprocessor could make option #2 more feasible, but abstracting a necessary part of the language into another layer isn&#8217;t a permanent solution. As well, the resulting CSS is not human readable, this step should take place in the document tree.</li>
<li>With a <strong>JavaScript parser</strong>, the heavy lifting could be done on the client-side, however this would likely have a negative performance impact particularly on older browsers and slower machines.</li>
</ol>
<h4>A Concrete Example &#8211; Based on YUI Standard Module Format</h4>
<p>I found myself writing the following code:</p>
<pre>/* weatherModule <strong>(extends .mod)</strong> */
.weatherModule{...}
.weatherModule .hd{...}
.weatherModule .ft{...}
.weatherModule .bd{...}
</pre>
<p> The html looked like this:</p>
<pre>
&lt;div class=&quot;<strong>mod weatherMod</strong>&quot;&gt;
  &lt;div class=&quot;hd&quot;&gt;Local Weather for SF&lt;/div&gt;
  &lt;div class=&quot;bd&quot;&gt;Cloudy with 100% chance of rain, and fog.&lt;/div&gt;
  &lt;div class=&quot;ft&quot;&gt;&lt;a href=&quot;newLoc.html&quot;&gt;Change your location?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p>I was using multiple class names (which is great because ultimately it reduces the footprint of the CSS file by an order of magnitude), but it would be better if the browser could understand my intention, and process any instance of weatherModule as if it was also a mod. </p>
<pre>
&lt;div class=&quot;weatherMod&quot;&gt;
&lt;!-- <strong>Can the browser treat this as an instance of mod?</strong> --&gt;
  &lt;div class=&quot;hd&quot;&gt;Local Weather for SF&lt;/div&gt;
  &lt;div class=&quot;bd&quot;&gt;Cloudy with 100% chance of rain, and fog.&lt;/div&gt;
  &lt;div class=&quot;ft&quot;&gt;&lt;a href=&quot;newLoc.html&quot;&gt;Change your location?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p>Thanks so much to the following people who gave invaluable advice, feedback, and (in some cases) tolerated an enormous number of iterations. Nothing gets created in a vacuum and dissenting opinions were as helpful as supporters. <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <a href="http://www.cs.utexas.edu/~wcook/">William Cook</a>, David Federman, <a href="http://t3.dotgnu.info/">Gopal Vijayaraghavan</a>, <a href="http://www.crockford.com/">Douglas Crockford</a>, <a href="http://www.phpied.com/">Stoyan Stefanov</a>, <a href="http://wonko.com/">Ryan Grove</a>, Marcel Laverdet, <a href="http://meyerweb.com/">Eric Meyer</a>, <a href="http://simplebits.com/">Dan Cederholm</a>, <a href="http://unstoppablerobotninja.com/">Ethan Marcotte</a>, <a href="http://www.zeldman.com/">Jeffrey Zeldman</a>, <a href="http://twitter.com/goonieiam">Gonzalo Cordero</a>, Jenny Han Donnelly, Chris Klaiber, <a href="http://tantek.com/">Tantek Çelik</a>, <a href="http://adactio.com/">Jeremy Keith</a>, <a href="http://sp1ral.com/">Wendy Chisholm</a>,  <a href="http://www.easy-reader.net/">Aaron Gustafson</a>, <a href="http://twitter.com/fredsa">Fred Sauer</a>, <a href="http://webkit.org/blog/">Dave Hyatt</a>, Eric Schurman, <a href="http://codinginparadise.org/">Brad Neuberg</a>, <a href="http://johnfallsopp.com/">John Allsopp</a>, <a href="http://kid666.com/">Tom Hughes-Croucher</a>, <a href="http://dev.opera.com/author/974138">Chris Mills</a>, <a href="http://www.nczonline.net/">Nicholas C. Zakas</a>, <a href="http://www.quirksmode.org/">Peter-Paul Koch</a>, <a href="http://www.w3.org/People/all#schepers">Doug Schepers</a>, <a href="http://slash7.com/">Amy Hoy</a>, <a href="http://twitter.com/getify">Kyle Simpson</a>, <a href="http://westcoastlogic.com/">Brian LeRoux</a>, <a href="http://twitter.com/ChrisBlizzard">Chris Blizzard</a>, <a href="http://www.w3.org/People/LeHegaret/">Philippe Le Hegaret</a> and (of course) <a href="http://glazman.org/weblog/">Daniel Glazman</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/11/09/css-wish-list/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Bread</title>
		<link>http://www.stubbornella.org/content/2009/09/11/bread/</link>
		<comments>http://www.stubbornella.org/content/2009/09/11/bread/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 18:55:49 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=415</guid>
		<description><![CDATA[<a href="http://outerlandssf.blogspot.com/">Outerlands</a> is a lovely place to have brunch before a day at the beach. They bake homemade bread which is absolutely yummy. It is a small place run by a lovely couple who are very busy at their successful restaurant.

Me (omg!): You <strong>have to</strong> bake bread <em>every day</em>?

Owner (happy smile): No, I <strong>get</strong> to bake bread every day.

That's how I feel about code. I would do the very same thing even if no one paid me at all. Lucky for me, this thing I love to do is also my work. ]]></description>
			<content:encoded><![CDATA[<p><a href="http://outerlandssf.blogspot.com/">Outerlands</a> is a lovely place to have brunch before a day at the beach. They bake homemade bread which is absolutely yummy. It is a small place run by a lovely couple who are very busy at their successful restaurant.</p>
<p>Me (omg!): You <strong>have to</strong> bake bread <em>every day</em>?</p>
<p>Owner (happy smile): No, I <strong>get</strong> to bake bread every day.</p>
<p>That&#8217;s how I feel about code. I would do the very same thing even if no one paid me at all. Lucky for me, this thing I love to do is also my work. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/09/11/bread/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>HTML5, who is bad enough to take on canvas?</title>
		<link>http://www.stubbornella.org/content/2009/08/31/html5-who-is-bad-enough-to-take-on-canvas/</link>
		<comments>http://www.stubbornella.org/content/2009/08/31/html5-who-is-bad-enough-to-take-on-canvas/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 20:25:29 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[XHTML / HTML]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[w3c]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=380</guid>
		<description><![CDATA[<a style="float:left; padding-right: 10px;"  href="http://www.flickr.com/photos/zeldman/3813120876/in/set-72157622014232906/"><img src="http://farm4.static.flickr.com/3502/3813120876_d411995a75_m.jpg" alt="HTML5 Superfriends" /></a>

I recently went to New York to hang with some people who are interested in HTML5 and figure out what I thought about the future of this web standard. I'm a skeptic by nature, so I went into <a href="http://www.flickr.com/photos/zeldman/sets/72157622014232906/">our little quest</a> expecting to be unimpressed by HTML5, but in fact, it isn't so bad, and even has a few additions I'm excited about. 

<h3>Down with Pseudocode!</h3>

On the other hand the spec itself drives me crazy because I feel like pseudocode is a poor substitute for properly and clearly stating what you are trying to achieve. It is easy to mask your agenda in pseudocode and harder for people to sort out later what was intentional versus incidental. 

<blockquote>#html5 .pseudo-code { display: none;} Thought experiments don't belong in a spec &#038; pseudocode can't replace properly specifying requirements.
<p><a href="http://twitter.com/stubbornella/status/3211924115">@stubbornella</a></p>
</blockquote>]]></description>
			<content:encoded><![CDATA[<p><a style="float:left; padding-right: 10px;" href="http://www.flickr.com/photos/zeldman/3813120876/in/set-72157622014232906/"><img src="http://farm4.static.flickr.com/3502/3813120876_d411995a75_m.jpg" alt="HTML5 Superfriends" /></a></p>
<p>I recently went to <a href="http://www.zeldman.com/superfriends/">New York to hang with some people who are interested in HTML5</a> and figure out what I thought about the future of this web standard. I&#8217;m a skeptic by nature, so I went into <a href="http://www.flickr.com/photos/zeldman/sets/72157622014232906/">our little quest</a> expecting to be unimpressed by HTML5, but in fact, <a href="http://www.zeldman.com/superfriends/guide/">it isn&#8217;t so bad</a>, and even has a few additions I&#8217;m excited about. </p>
<h3>Down with Pseudocode!</h3>
<p>On the other hand the spec itself drives me crazy because I feel like pseudocode is a poor substitute for properly and clearly stating what you are trying to achieve. It is easy to mask your agenda in pseudocode and harder for people to sort out later what was intentional versus incidental. </p>
<blockquote><p>#html5 .pseudo-code { display: none;} Thought experiments don&#8217;t belong in a spec &#038; pseudocode can&#8217;t replace properly specifying requirements.</p>
<p><a href="http://twitter.com/stubbornella/status/3211924115">@stubbornella</a></p>
</blockquote>
<h3>Additional Elements</h3>
<p>One of the things that pleased me about the spec was what was <em>not</em> in it. While there are a bunch of additional elements that seem unnecessary, they haven&#8217;t gone too badly overboard. I suggested a sanity test of the data used to gather these classes because sometimes they got the name correct, but the use-case wrong. I won&#8217;t go into it here because it will be on the section titled &#8220;footer&#8221; in a document we will publish shortly.</p>
<h3>Multinode Elements</h3>
<p>I think we need a mechanism to define more complex structures than one element allows. I&#8217;d like to be able to define the small lego that make up the building blocks of my sites. The existing elements in the HTML 5 specification are more than sufficient, I&#8217;d just like to have a mechanism to define combinations of those that repeat throughout the site. It would also be great to be able to define error handling, for example, what happens if the browser finds a module with no body? Or automatically insert presentational junk so it doesn&#8217;t clutter dev code or add bytes over the wire. </p>
<h3>Performance</h3>
<p>It should be possible to do <strong>more</strong> with <em>less javascript</em>. I&#8217;d like to see browser support for common aspects of web pages as well as web applications. Practically every site in the known universe has toggle blocks, tabs, carousels, or accordion menus. I&#8217;d like to seen native browser support and CSS styling, so that these element incur no particular performance cost. </p>
<h3>Woot! for mashups being compatible with standards</h3>
<p>The addition of the section tag means we can mashup content from different sources without worrying about messing up a table of contents or site map generated from the pages of the site. Very cool. I thought section was completely stupid, but it has this cool feature, so now I&#8217;m satisfied.</p>
<h3>Canvas</h3>
<p>Who isn&#8217;t excited about canvas? It pushes the boundaries of what we can do in our webapps and websites. Very very cool. On the other hand there is a giant gnarly unsolved technical problem with the canvas element. How do we provide universal access to an element that exists primarily via JavaScript? What would the API look like that insures that anyone can get the data goodies out of canvas and interact with its controls? What do browsers need to implement to make this workable? How can app developers get started today without ruining the accessibility of their work?</p>
<p>Standardistas meet JavaScripters, JavaScripters meet Standardistas. There. Much better. There are a few of us who span both worlds, but remarkably few considering how much our work overlaps. Maybe I should have said <a href="http://ajaxian.com/">Ajaxian</a> meet <a href="http://www.alistapart.com/">A List Apart</a>, A List Apart, Ajaxian. You would probably like each other if you got to know one another. Though you don&#8217;t speak the same language, you both really care about <em>users</em>. <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div id="attachment_389" class="wp-caption alignnone" style="width: 600px"><a href="http://www.stubbornella.org/content/2009/08/31/html5-who-is-bad-enough-to-take-on-canvas/bespin/" rel="attachment wp-att-389"><img src="http://www.stubbornella.org/content/wp-content/uploads/2009/08/bespin.jpg" alt="Bespin raises questions about universal access to the canvas tag" title="Bespin" width="590" height="135" class="size-full wp-image-389" /></a><p class="wp-caption-text">Bespin raises questions about universal access to the canvas tag</p></div>
<p>We have a really cool technical problem to solve (In my book, really cool == hard, otherwise it would be boring!).  If we are going to build bigger and more complicated stuff out of canvas (holy crap <a href="https://bespin.mozilla.com/">Bespin</a>!), and we want to display data via interactive charts and controls, how in the world do we make this stuff universally accessible? How can we make sure search engines can see the data? How do people access it on any device? Without sight? Without a mouse (like cell phones).</p>
<p>We want the stuff we build to be used as widely as possible. So JavaScripters, what do you want from browsers? What could they do now that would make your life far easier? We need to solve this now, before this thing (HTML5) goes into Last Call and we end up with a half-baked solution. We&#8217;ve only just gotten started thinking about all the cool stuff we can build with Canvas, but the specification needs suggestions now. Where is the developer bad-ass enough to figure it out? Is there anything we can learn from flash? SVG?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/08/31/html5-who-is-bad-enough-to-take-on-canvas/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Overflow &#8211; a secret benefit</title>
		<link>http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/</link>
		<comments>http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 17:44:59 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=362</guid>
		<description><![CDATA[Overflow does some cool things you should know about.

<ul style="padding: 5px 10px 5px 20px; list-style-type: decimal;">
	<li>Creates Block Formatting Context</li>
	<li>Clears Floats</li>
</ul>

<h3>Generating block formatting context</h3>

Arnaud Gueras called this "contexte de formattage" years ago, and I was kind of surprised when I moved back to the US how few developers here had heard of this "secret weapon". When the overflow property is set, a new <a href="http://www.w3.org/TR/CSS2/visuren.html#block-formatting">block formatting context</a> is created. What does that mean? It changes the way the block interacts with floats. It no longer wraps around floats, but rather <a href="http://www.w3.org/TR/CSS2/visuren.html#bfc-next-to-float">becomes narrower</a>.

<h4>Sweet, so how can you use it?</h4>

A block with a new formatting context takes all the remaining space on a line, while leaving room for floats which have already been positioned. In my object-oriented CSS open source project I use the formatting context in two ways.

<h5>Main content column</h5>

Adding a formatting context means that my main column takes all the space that remains after my left and right columns have been rendered. This means having only one template because if you want to remove a column from the three column layout, you simply delete the column from the html. No changes to make anywhere else, CMS developers will love you for that. 

<h5><a href="http://oocss.org/template.html">Play with the template</a> in Firebug. </h5>
<ol style="padding-left: 20px; list-style-type: decimal;">
	<li>Try adding the class "liquid" to the "page" element. </li>
	<li>Add or remove one of the columns from the HTML. </li>
	<li>Extend one of the column objects with the additional classes listed in the documentation. </li>
	<li>Try changing the width of the column directly in Firebug.</li>
</ol>


<h5>Grids</h5>

Anyone who has developed a grids system knows the pain of sub-pixel rounding errors. Browsers don't know what to do with 33.3 pixels, so they all do something different. The YUI grids system hid these differences in the gutters between the blocks, but we can also hide that difference inside the units themselves.

A new block formatting context can be used to make the last unit in any grids line absorb the tiny differences in size. <a href="http://oocss.org/grids_docs.html">Play with the grids</a>, you'll notice that as you modify the sizes of the units, the last unit grows and shrinks to accommodate the difference. It has no width, and yet, with a new block formatting context is also doesn't wrap around floats. ]]></description>
			<content:encoded><![CDATA[<p>Overflow does some cool things you should know about.</p>
<ul style="padding-left: 20px; list-style-type: decimal;">
<li>Creates Block Formatting Context</li>
<li>Clears Floats</li>
</ul>
<h3>Generating block formatting context</h3>
<p>Arnaud Gueras called this &#8220;contexte de formattage&#8221; years ago, and I was kind of surprised when I moved back to the US how few developers here had heard of this &#8220;secret weapon&#8221;. When the overflow property is set, a new <a href="http://www.w3.org/TR/CSS2/visuren.html#block-formatting">block formatting context</a> is created. What does that mean? It changes the way the block interacts with floats. It no longer wraps around floats, but rather <a href="http://www.w3.org/TR/CSS2/visuren.html#bfc-next-to-float">becomes narrower</a>.</p>
<style type="text/css">
.wrapper{background-color: #e2e2e2;overflow:hidden; _overflow:visible; zoom:1; margin: 10px; padding:10px;}
.float{float:left; width:50px; height:50px; background-color:#64b0c0; color:#fff;}
.context{overflow:hidden;}
.content{background-color: #c9ebeb;}
</style>
<div class="wrapper">
<div class="float">floated box</div>
<div class="content">
<h6>Without the effect</h6>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></div>
</div>
<div class="wrapper">
<div class="float">floated box</div>
<div class="content context">
<h6>With new block formatting context</h6>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></div>
</div>
<blockquote><p>The border box of a table, a block-level replaced element, or an element in the normal flow that establishes a new block formatting context (such as an element with &#8216;overflow&#8217; other than &#8216;visible&#8217;) must not overlap any floats in the same block formatting context as the element itself.<br />
<cite class="author">W3C, CSS 2.1</cite>
</p></blockquote>
<p>This is <em>not a hack</em>, it is all in the spec from the w3c. </p>
<h4>Sweet, so how can you use it?</h4>
<p>A block with a new formatting context takes all the remaining space on a line, while leaving room for floats which have already been positioned. In my object-oriented CSS open source project I use the formatting context in two ways.</p>
<ul style="padding-left: 20px; list-style-type: square;">
<li>
<p><strong>Main content column</strong> &#8211; adding a formatting context means that my main column takes all the space that remains after my left and right columns have been rendered. This means having only one template because if you want to remove a column from the three column layout, you simply delete the column from the html. No changes to make anywhere else, CMS developers will love you for that. </p>
<h5><a href="http://oocss.org/template.html">Play with the template</a> in Firebug. </h5>
<ol style="padding-left: 20px; list-style-type: decimal;">
<li>Try adding the class &#8220;liquid&#8221; to the &#8220;page&#8221; element. </li>
<li>Add or remove one of the columns from the HTML. </li>
<li>Extend one of the column objects with the additional classes listed in the documentation. </li>
<li>Try changing the width of the column directly in Firebug.</li>
</ol>
</li>
<li><strong>Grids</strong> &#8211; anyone who has developed a grids system knows the pain of sub-pixel rounding errors. Browsers don&#8217;t know what to do with 33.3 pixels, so they all do something different. The YUI grids system hid these differences in the gutters between the blocks, but we can also hide that difference inside the units themselves.
<p>A new block formatting context can be used to make the last unit in any grids line absorb the tiny differences in size. <a href="http://oocss.org/grids_docs.html">Play with the grids</a>, you&#8217;ll notice that as you modify the sizes of the units, the last unit grows and shrinks to accommodate the difference. It has no width, and yet, with a new block formatting context is also doesn&#8217;t wrap around floats. </li>
</ul>
<h3>Clearing Floats</h3>
<p>You have probably heard about clearing floats. People have been <a href="http://www.sitepoint.com/blogs/2005/02/26/simple-clearing-of-floats/">talking about clearing floats via the overflow property</a> for a while now. Some consider it hacky, but a careful reading of the spec shows that while this may not have been expressly intended by spec authors, it was a reasonable interpretation by browser vendors. </p>
<p>In order for them to calculate what overflowed the bounds of the block (and thus should be hidden), they needed to know the size of the block. Because these blocks do no have an explicit height set, the browsers used the calculated height of the content instead. For more <a href="http://meyerweb.com/eric/thoughts/2009/02/16/css3-feedback-layout/#comment-443521">information on clearing</a>, see this conversation Eric Meyer and I had on his blog.</p>
<h4>Caveats</h4>
<p>Overflow can clip bits of too big content (like giant images, pre, or tables), I&#8217;m now experimenting with overflow: auto versus hidden to see which is a better trade off.</p>
<h3>Other work in this Area</h3>
<p>Lots of people are working to find solutions to grids to meet different requirements:</p>
<ul>
<li>Matt Sweeney of the YUI team is experimenting with inline-blocks</li>
<li>Thierry Koblentz is playing with the idea of using table-cell</li>
<li>Lindsey Simon at Google is looking at alternatives to overflow:hidden that would work well for web applications</li>
<li>Blueprint and 960gs use widths in pixels rather than percent. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>A loving Indian family</title>
		<link>http://www.stubbornella.org/content/2009/07/22/a-loving-indian-family/</link>
		<comments>http://www.stubbornella.org/content/2009/07/22/a-loving-indian-family/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 06:22:48 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=353</guid>
		<description><![CDATA[Eight techniques for thriving in a big Indian family.

<strong>The meaningless ack. </strong>You <em>mean</em> that you care about their opinion; you <em>say</em> that you agree with what they are saying. If it ever comes up again, you use one of the following techniques.

<strong>Distract.</strong> Add more or less unrelated information to the discussion, the more the better.

<strong>Delay.</strong> Decide to decide after some given point, which may or may not ever arrive. Insist that it is now too late to decide.

<strong>Seek additional advice.</strong> Everyone’s opinion counts equally. If the currently included opinions are not in your favor, invite an auntie or cousin to give their opinion. If you are really losing a battle invite so many opinions that it is impossible to sort out who thinks what. Ideally, this will include the entire family.

<strong>Claim supporters</strong>, whether or not they have actually expressed an opinion is mostly irrelevant. For example, “Auntie thinks I should get to eat nothing but cake.”

<strong>Reevaluation</strong>. Decisions are <em>never</em> final. You might think a decision has been made and you are on your way to get a bite to eat, when in fact things have magically evolved and you are going to visit an obscure neighbor on the other side of the city. Turn the tide of the discussion at the last moment before the decision needs to be acted upon to allow reevaluation to work in your favor.

<strong>Disagree respectfully and with a smile</strong> and you can get away with being quite forceful. The downside, everyone else will be doing the same, and they have a lot more practice than you do. You are hopelessly outmatched and you will eat five times as much as you meant to. A bit of Zen will go a long way. Remember, letting go is just a gesture.

<strong>Give up</strong>. Some arguments are not winnable. For example, your friends mother is completely incapable of understanding why you might want to go to the ATM, know the address or phone number where you are staying, buy a map, or have your own cell phone. She can’t imagine you going off on your own or even getting lost because the idea of doing things independently has no place in her worldview. Why would you ever want to be alone if you could be with others? She may treat you like a small child, but she will also make you chai ten times a day and generally spoil you rotten. Revel in it, mother love is a beautiful thing.]]></description>
			<content:encoded><![CDATA[<p><strong>The meaningless ack. </strong>You <em>mean</em> that you care about their opinion; you <em>say</em> that you agree with what they are saying. If it ever comes up again, you use one of the following techniques.</p>
<p><strong>Distract.</strong> Add more or less unrelated information to the discussion, the more the better.</p>
<p><strong>Delay.</strong> Decide to decide after some given point, which may or may not ever arrive. Insist that it is now too late to decide.</p>
<p><strong>Seek additional advice.</strong> Everyone’s opinion counts equally. If the currently included opinions are not in your favor, invite an auntie or cousin to give their opinion. If you are really losing a battle invite so many opinions that it is impossible to sort out who thinks what. Ideally, this will include the entire family.</p>
<p><strong>Claim supporters</strong>, whether or not they have actually expressed an opinion is mostly irrelevant. For example, “Auntie thinks I should get to eat nothing but cake.”</p>
<p><strong>Reevaluation</strong>. Decisions are <em>never</em> final. You might think a decision has been made and you are on your way to get a bite to eat, when in fact things have magically evolved and you are going to visit an obscure neighbor on the other side of the city. Turn the tide of the discussion at the last moment before the decision needs to be acted upon to allow reevaluation to work in your favor.</p>
<p><strong>Disagree respectfully and with a smile</strong> and you can get away with being quite forceful. The downside, everyone else will be doing the same, and they have a lot more practice than you do. You are hopelessly outmatched and you will eat five times as much as you meant to. A bit of Zen will go a long way. Remember, letting go is just a gesture.</p>
<p><strong>Give up</strong>. Some arguments are not winnable. For example, your friends mother is completely incapable of understanding why you might want to go to the ATM, know the address or phone number where you are staying, buy a map, or have your own cell phone. She can’t imagine you going off on your own or even getting lost because the idea of doing things independently has no place in her worldview. Why would you ever want to be alone if you could be with others? She may treat you like a small child, but she will also make you chai ten times a day and generally spoil you rotten. Revel in it, mother love is a beautiful thing.</p>
<h2>About this post</h2>
<p>These are notes I took on my recent trip to India. I am nervous to publish them because they were written with great affection. I hope that comes through and they don&#8217;t seem sarcastic or mocking. I enjoyed participating in family discussions and getting to see ordinary local life both times I visited. I&#8217;ve been so lucky to have travelled with two different families who welcomed me, fed me, and showed me the joy (and occasional pain) of life in loving Indian families. Both are closer than American families (at least my own), and with this closeness comes a lovely complexity of interactions. </p>
<p>I enjoyed Delhi, Agra, Jaipur, Udaipur, Bangalore, Calicut, and Mysore, but Bombay remains my favorite place in India (perhaps on the planet). Crazy, vibrant, full of life, especially the normal places like Kandivli. This time I even took the local train!</p>
<p>kya soch rahi ho? </p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/07/22/a-loving-indian-family/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS Summit &#8211; test cases for browser bugs</title>
		<link>http://www.stubbornella.org/content/2009/07/18/css-summit-test-cases-for-browser-bugs/</link>
		<comments>http://www.stubbornella.org/content/2009/07/18/css-summit-test-cases-for-browser-bugs/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 17:40:05 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=349</guid>
		<description><![CDATA[Speaking the CSS Summit today, I listened as people voiced concerns about browser support and bugs. It might surprise my fellow CSS developers, but many of the seasoned, bearded (ok, I'm making this part up) engineers working on the innards of browsers and rendering engines may not actually write much CSS themselves. They need our help. 

We need to tell them what is broken, via good bug reports with <strong>steps to reproduce</strong>, version information, and relevant comments, screenshots and ideally test cases. Can you boil the bug down to the simplest possible version of itself? How little code do you need to trigger the rendering problem? That's the test case you want to submit. ]]></description>
			<content:encoded><![CDATA[<p>Speaking the CSS Summit today, I listened as people voiced concerns about browser support and bugs. It might surprise my fellow CSS developers, but many of the seasoned, bearded (ok, I&#8217;m making this part up) engineers working on the innards of browsers and rendering engines may not actually write much CSS themselves. They need our help. </p>
<p>We need to tell them what is broken, via good bug reports with <strong>steps to reproduce</strong>, version information, and relevant comments, screenshots and ideally test cases. Can you boil the bug down to the simplest possible version of itself? How little code do you need to trigger the rendering problem? That&#8217;s the test case you want to submit. </p>
<p>Also, what do we need and want out of our browsers (they are <em>our</em> browers!). What features should they be working on? I know they are all pretty focused on advanced selectors, working like mad to find ways to pattern match any attribute efficiently. That isn&#8217;t easy. They can&#8217;t afford to let the performance of their rendering engines suffer, so if they seem to go slowly. Keep in mind they are being cautious because users demand fast browsers.</p>
<p>What they should be focused on? What innovations do we want to see?</p>
<p>In honor of that, I&#8217;ve created a couple test pages to show <a href="http://www.stubbornella.org/test/mozilla_print_bug_overflow.html">overflow</a> and <a href="http://www.stubbornella.org/test/mozilla_print_bug_float.html">float print stylesheet</a> bugs in Firefox. These bugs have been around for years, irked me, but it is time I not only post to my blog about it, but also open a bug. <a href="http://ejohn.org/blog/a-web-developers-responsibility/">Don&#8217;t know how to file a bug</a>? John Resig wrote a great article about web developers responsibility to help browsers get better in which he gives detailed advice including links to Mozilla/Firefox, WebKit/Safari, Internet Explorer 8, Google Chrome / V8 JavaScript Engine, and the Opera bug tracking systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/07/18/css-summit-test-cases-for-browser-bugs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Year of Business Metrics &#8211; Don&#8217;t make your users run away!</title>
		<link>http://www.stubbornella.org/content/2009/06/26/the-year-of-business-metrics-dont-make-your-users-run-away/</link>
		<comments>http://www.stubbornella.org/content/2009/06/26/the-year-of-business-metrics-dont-make-your-users-run-away/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 01:42:22 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Latest Happenings]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[business metrics]]></category>
		<category><![CDATA[reflow]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=341</guid>
		<description><![CDATA[A marked change has occurred since the first Velocity Conference a year ago, and while the effects are not yet obvious, they will be. The web is still slow, but we have something now, that we didn’t a year ago: business metrics. This was the year we quantified the impact of performance choices on our businesses, and the results were astounding. 

For those of you who couldn't attend, this article summarizes results from AOL, Shopzilla, Google, Bing, Hotmail, and Chrome and gives pointers to highlights of Velocity Conference 2009. ]]></description>
			<content:encoded><![CDATA[<h3>Performance at Velocity Conference</h3>
<p>A marked change has occurred since the first Velocity Conference a year ago, and while the effects are not yet obvious, they will be. The web is still slow, but we have something now, that we didn’t a year ago: business metrics. This was the year we quantified the impact of performance choices on our businesses, and the results were astounding. </p>
<p>Those of us who worked in the field had a gut feeling that users want a fast web experience, but most of the studies done previously were lacking something, either in experiment design or reliability of the data. They were all strong indicators that more research needed to be done, but they weren’t damning enough to provide real certainty. This year we found a real correlation between websites speed and its ability to establish and keep relationships with visitors. Not everyone could attend, so I’d like to share with you some of the key moments of an amazing conference. Please feel free to add others in the comments.</p>
<h3>David Artz at AOL</h3>
<p>David Artz from AOL presented their <a href="http://assets.en.oreilly.com/1/event/29/The%20Secret%20Weapons%20of%20the%20AOL%20Optimization%20Team%20Presentation.pdf">findings from a study which measured page views per visit against performance</a>. They divided users into buckets based on response time and plotted it against PV. The results were startling. Across six AOL sites there was a clear inverse correlation. </p>
<h4>The take away: AOL</h4>
<p>Users who had a slower experience view far fewer pages.</p>
<p><a href="http://www.artzstudio.com/2009/06/web-performance-impact-on-revenue-velocity-09-highlights/"><img src="http://www.artzstudio.com/files/velocity-09/aol-pv-visit-speed-correlation.png" alt="AOL PV-speed correlation" /></a> </p>
<h3>Goog and Bing sitting in a tree, K-I-S&#8230;</h3>
<p>Goog and Bing got together (whoa!) to do a study looking at <a href="http://radar.oreilly.com/2009/06/bing-and-google-agree-slow-pag.html">search behavior when performance is worsened over very narrow increments</a>. This study was unique particularly because it followed the same users <em>over a period of time</em>. The data can be used to determine the threshold at which clicks, refined searches, revenue, satisfaction, and time to click are likely to be impacted by features which slow a website. Their methodologies were a bit different, but the conclusions were remarkably similar. A 50MS delay seemed to have no impact, but as little as 200-500MS changed user behavior across the board. Revenue, clicks, and time to first click were most profoundly impacted.</p>
<p><embed src="http://blip.tv/play/AYGL+QOLqzQ" type="application/x-shockwave-flash" width="390" height="390" allowscriptaccess="always" allowfullscreen="true"></embed> </p>
<h4>The Take Away: Bing</h4>
<p>One key point was that users seem to lose their focus if you make them wait too long. Progressive rendering and flushing the header (which are also recommended by Yahoo!) can help. Bing had this to say: </p>
<blockquote><p>Notice that as the delays get longer the Time To Click increases at a more extreme rate (1000ms increases by 1900ms). The theory is that the user gets distracted and unengaged in the page. In other words, they&#8217;ve lost the user&#8217;s full attention and have to get it back.</p>
<p>~ <a href="http://assets.en.oreilly.com/1/event/29/The%20User%20and%20Business%20Impact%20of%20Server%20Delays,%20Additional%20Bytes,%20and%20HTTP%20Chunking%20in%20Web%20Search%20Presentation.pptx">Google &#038; Bing</a></p>
</blockquote>
<p>We’ve all experienced that.  We open a new tab and run a search. Multitasking fools that we are, we flip to a new tab or open our email if the results take too long to load. </p>
<h4>The Take Away: Google</h4>
<p>The most interesting data to come out of the Google tests took place <em>long after the experiment had finished</em>. <strong>As much as five weeks later, some users, especially those who saw delays greater than 400MS, were still searching less than before</strong>. Performance is a feature users want. Fail them, and they may never come back.</p>
<p>The % change recorded was very small. For instance, a half a second delay caused a -1.2% loss of revenue per user. What does that mean? We need to think big, and simultaneously work on incremental and profound ways to make the web faster.</p>
<h3>Shopzilla &#8211; Profound improvements</h3>
<p><a href="http://en.oreilly.com/velocity2009/public/schedule/detail/7709">Shopzilla also presented their (profound) performance improvements</a>. They decreased their response time by around 3.5 seconds and the data showed their conversions increased by 7-9% and their page views skyrocketed 25%.  This is good stuff. This is how we go to business and make the case that performance is an important feature that deserves attention, not a band-aide that you stick on afterwards. <a href="http://www.artzstudio.com/files/velocity-09/shopzilla-performance-summary.png">Dave Artz has more details</a>.</p>
<h3>JavaScript versus CSS versus Network Latency: Which is killing our sites?</h3>
<p>In a separate session with Mike Belche from the Chrome team, he discussed his experiments which tested total time spend on executing JavaScript, rendering the page (CSS), and network latency. He said the vast majority of the time is being spent on network latency. There was a subtle flaw in his methodology, because his rendering time included only one full rendering and painting, because all resources were already in cache and no JavaScript was used, there would be no unnecessary reflows. </p>
<h4>The Take Away: Reflows</h4>
<p>This got me thinking about images and other fixed dimension media. We should always set height and width of images to avoid reflows being caused when the resource is finally downloaded and available. </p>
<p>I agree with him that, except in extreme cases (and a lot of selector/reflow experiments have been too extreme to really reflect reality), rendering will be much less important that network latency. It is much more important to keep page weight and HTTP requests as low as possible. <strong>Over-complicating our CSS selectors to reduce render time would be a mistake.</strong> Browsers are really good at parsing selectors, we need to be really good at writing the minimum number we actually need. This is clearly missing not handled correctly in the current suite of testing tools such as Page Speed. </p>
<p>My talk included (not yet released) suggestions for coding performant selectors. More on that later. <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Further Reading</h3>
<ul>
<li>Aladdin Nassir spoke about linking performance and business metrics via <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/8970">Performance-Based Design</a>.  </li>
<li>Lindsey Simon spoke about <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/9340">reflows</a> and an open source tool he is building to better measure these things. The methods for accurately measuring reflows are still a WIP, and the numbers are fuzzy, but that makes this a really interesting project to get involved in.  </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/06/26/the-year-of-business-metrics-dont-make-your-users-run-away/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Smush.it finds a home at Yahoo!</title>
		<link>http://www.stubbornella.org/content/2009/04/29/smushit-finds-a-home-at-yahoo/</link>
		<comments>http://www.stubbornella.org/content/2009/04/29/smushit-finds-a-home-at-yahoo/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 22:27:53 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=324</guid>
		<description><![CDATA[Today is a great day for Smush it because Yahoo! decided to accept it into their family of tools. This will allow the tool to run on fanatically maintained servers, with the Yahoo! style quality of service. It doesn’t get any better than that. I feel like my baby is all grown up and going off to college! :) 

<h3>Want to Optimize Images like a Pro?</h3>

<a style="float:right;" href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&#038;tag=nicolsulli-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596522304"><img border="0" src="https://images-na.ssl-images-amazon.com/images/I/51kJhRzSo1L._SL160_.jpg"/></a><img src="http://www.assoc-amazon.com/e/ir?t=nicolsulli-20&#038;l=as2&#038;o=1&#038;a=0596522304" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


Stoyan and I have contributed a chapter to <a href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&#038;tag=nicolsulli-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596522304">Even Faster Web Sites</a><img src="http://www.assoc-amazon.com/e/ir?t=nicolsulli-20&#038;l=as2&#038;o=1&#038;a=0596522304" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />, that outlines all the fantastic tricks you can use to make your sites smaller. We hope you find it useful, and of course we welcome feedback! It will show you how to make image optimization part of your own system, and give you all the information you need to make images as small as possible. 

]]></description>
			<content:encoded><![CDATA[<p>Things are changing around here. </p>
<p>When <a href="http://phpied.com">Stoyan</a> and I created <a href="http://smush.it">Smush.it</a> we were scratching our own itch. As web developers we had spent way too much time optimizing images by hand, and we thought there must be a better solution. Optimizing images was far more important to overall site performance than people were giving it credit for being. Stoyan found that on average 50% of page weight was comprised of images, and that often those images were 30-40% larger than they needed to be. That translated to a lot of image bloat dragging down the web.</p>
<p>When we released Smush it at The Ajax Experience last year we were really excited to see what people did with it; building on the APIs to create a WordPress extension and other cool tools. Since the release we’ve smushed millions of images and put the web on a much needed diet. </p>
<p>Today is a great day for Smush it because Yahoo! decided to accept it into their family of tools. This will allow the tool to run on fanatically maintained servers, with the Yahoo! style quality of service. It doesn’t get any better than that. I feel like my baby is all grown up and going off to college! <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<h3>Want to Optimize Images like a Pro?</h3>
<p><a style="float:right; margin-left: 10px;" href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&#038;tag=nicolsulli-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596522304"><img border="0" src="https://images-na.ssl-images-amazon.com/images/I/51kJhRzSo1L._SL160_.jpg"/></a><img src="http://www.assoc-amazon.com/e/ir?t=nicolsulli-20&#038;l=as2&#038;o=1&#038;a=0596522304" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>Stoyan and I have contributed a chapter to <a href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&#038;tag=nicolsulli-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596522304">Even Faster Web Sites</a><img src="http://www.assoc-amazon.com/e/ir?t=nicolsulli-20&#038;l=as2&#038;o=1&#038;a=0596522304" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />, that outlines all the fantastic tricks you can use to make your sites smaller. We hope you find it useful, and of course we welcome feedback! It will show you how to make image optimization part of your own system, and give you all the information you need to make images as small as possible. </p>
<h3>What’s changed?</h3>
<p>They&#8217;ve been doing all the quiet background work to get things set up at Yahoo!. In addition, Smush.it functionality has been included in <a href="http://developer.yahoo.com/yslow/smushit/">YSlow 2.0</a> (now in beta!), so you can get all of your performance information in one place. You’ll start seeing changes in look at feel, but Yahoo! assures us the APIs and functionality won’t change. We are proud that this tool has helped so many people improve their site performance. Thank you all for supporting us and using Smush.it.</p>
<p>You can help Yahoo! by <a href="http://tech.groups.yahoo.com/group/exceptional-performance/">providing feedback for Smush.it on their mailing list</a>.</p>
<h3>My favorite Smush it story</h3>
<p>Jaydee, a web developer in Singapore, came to my two-day boot camp. On day one, he heard about optimizing images, when he came back on day two he had already smushed all the images on his site and pushed the changes live. He showed a fantastic commitment to making the Yahoo user experience even faster.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/04/29/smushit-finds-a-home-at-yahoo/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Reflows &amp; Repaints: CSS Performance making your JavaScript slow?</title>
		<link>http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/</link>
		<comments>http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 19:15:50 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[rendering]]></category>
		<category><![CDATA[repaint]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=290</guid>
		<description><![CDATA[<p>I’ve been <a href="http://twitter.com/stubbornella/statuses/1131777322">tweeting</a> and <a href="http://delicious.com/stubbornella/reflow">posting to delicious about reflows and repaints</a>, and it seemed time for a blog post. <em>Opera lists <a href="http://dev.opera.com/articles/view/efficient-javascript/?page=3#reflow">repaint and reflow as one of the three main contributors to sluggish JavaScript</a>, so it definitely seems worth a look.</em></p>
<blockquote>
	<p>Reflows are very expensive in terms of performance, and is one of the main causes of slow DOM scripts, especially on devices with low processing power, such as phones. In many cases, they are equivalent to laying out the entire page again.</p>
</blockquote>
<h3>How to avoid reflows or at least minimize their impact on performance?</h3>
<ol style="list-style-type: decimal;padding-left: 20px;">
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#low">Change classes on the element you wish to	style (as low in the dom tree as possible)</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#inline">Avoid setting multiple inline styles</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#animations">Apply animations to elements that are position fixed or absolute</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#smooth">Trade smoothness for speed</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#tables">Avoid tables for layout</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#expressions">Avoid JavaScript expressions in the CSS</a> (IE only)</li>
</ol>
<h3>Tools</h3>
<p>A few tools have made waves lately. Stoyan Stefanov and I have been looking for decent ways to measure reflows and repaints and there are a few tools which show promise (despite being very early alpha).</p>
<ul style="list-style-type: square;padding-left: 20px;">
<li>UPDATE: Lindsey Simon at Google wrote a <a href="http://reflowr.appspot.com/">bookmarklet that tests reflow times on any browser</a>. Fantastic. (Note: all that shaking is normal!)</li>
	<li>John Resig wrote a <a href="http://ejohn.org/blog/browser-paint-events/">bookmarklet to visualize paint events</a>. </li>
	<li>Kyle Scholz created this tool to <a href="http://www.kylescholz.com/blog/2008/11/digging_into_paint_events_in_f_html">visualize paint events before onload</a>. </li>
	<li>Alex at Yoono has created the <a href="http://blog.yoono.com/blog/2008/12/download-yoono-xulprofiler/">XUL profiler</a>.</li>
</ul>
<p>Has anyone else seen any cool tools for evaluating reflows?</p>
]]></description>
			<content:encoded><![CDATA[<p>I’ve been <a href="http://twitter.com/stubbornella/statuses/1131777322">tweeting</a> and <a href="http://delicious.com/stubbornella/reflow">posting to delicious about reflows and repaints</a>, but hadn’t mentioned either in a talk or blog post yet.</p>
<p>I first started thinking about reflows and repaints after a <a href="http://www.flickr.com/photos/kiouv/3035720145/">firey exchange</a> with <a href="http://www.glazman.org/weblog/">Mr. Glazman</a> at <a href="http://www.paris-web.fr/2008/">ParisWeb</a>.  I may be stubborn, but I did actually listen to his arguments.  <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <a href="http://www.phpied.com/">Stoyan</a> and I began discussing ways to quantify the problem.  </p>
<p>Going forward the performance community needs to partner more with browser vendors in addition to our more typical black box experiments. Browser makers know what is costly or irrelevant in terms of performance. <em>Opera lists <a href="http://dev.opera.com/articles/view/efficient-javascript/?page=3#reflow">repaint and reflow as one of the three main contributors to sluggish JavaScript</a>, so it definitely seems worth a look.</em></p>
<p>Let&#8217;s start with a little background information. A <em>repaint</em> occurs when changes are made to an elements skin that changes visibility, but do not affect its layout. Examples of this include outline, visibility, or background color. According to Opera, repaint is expensive because the browser must verify the visibility of all other nodes in the DOM tree. A <em>reflow</em> is even more critical to performance because it involves changes that affect the layout of a portion of the page (or the whole page). Reflow of an element causes the subsequent reflow of all child and ancestor elements as well as any elements following it in the DOM. </p>
<p>For example:</p>
<pre>&lt;body&gt;
&lt;div class=”error”&gt;
	&lt;h4&gt;My Module&lt;/h4&gt;
	&lt;p&gt;&lt;strong&gt;Error:&lt;/strong&gt;Description of the error…&lt;/p&gt;
	&lt;h5&gt;Corrective action required:&lt;/h5&gt;
	&lt;ol&gt;
		&lt;li&gt;Step one&lt;/li&gt;
		&lt;li&gt;Step two&lt;/li&gt;
	&lt;/ol&gt;
&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>In the html snippet above, a reflow on the paragraph would trigger a reflow of the strong because it is a child node. It would also cause a reflow of the ancestors (div.error and body &#8211; depending on the browser). In addition, the h5 and ol would be reflowed simply because they follow that element in the DOM. According to Opera, most reflows essentially cause the page to be re-rendered:</p>
<blockquote>
<p>Reflows are very expensive in terms of performance, and is one of the main causes of slow DOM scripts, especially on devices with low processing power, such as phones. In many cases, they are equivalent to laying out the entire page again.</p>
</blockquote>
<h3>So, if they’re so awful for performance, what causes a reflow?</h3>
<p>Unfortunately, lots of things. Among them some which are particularly relevant when writing CSS:</p>
<ul style="list-style-type: square;padding-left: 20px;">
<li>Resizing the window </li>
<li>Changing the font </li>
<li>Adding or removing a stylesheet </li>
<li>Content changes, such as a user typing text in<br />
		an input box</li>
<li>Activation of CSS pseudo classes such as :hover (in IE the activation of the pseudo class of a sibling) </li>
<li>Manipulating the class attribute </li>
<li>A script manipulating the DOM </li>
<li>Calculating offsetWidth and offsetHeight </li>
<li>Setting a property of the style attribute </li>
</ul>
<p><a href="http://www.mozilla.org/newlayout/doc/reflow.html">Mozilla article about reflows</a> that outlines causes and when they could be reduced.</p>
<h3>How to avoid reflows or at least minimize their impact on performance?</h3>
<p>Note: I’m limiting myself to discussing the CSS impact of reflows, if you are a JavaScripter I’d definitely recommend reading my <a href="http://delicious.com/stubbornella/reflow">reflow links</a>, there is some really good stuff there that isn&#8217;t directly related to CSS.</p>
<ol style="list-style-type: decimal;padding-left: 20px;">
<li><a href="#low">Change classes on the element you wish to	style (as low in the dom tree as possible)</a> </li>
<li><a href="#inline">Avoid setting multiple inline styles</a> </li>
<li><a href="#animations">Apply animations to elements that are position fixed or absolute</a> </li>
<li><a href="#smooth">Trade smoothness for speed</a> </li>
<li><a href="#tables">Avoid tables for layout</a> </li>
<li><a href="#expressions">Avoid JavaScript expressions in the CSS</a> (IE only)</li>
</ol>
<h4 id="low"><strong>Change classes as low in the dom tree as possible </strong></h4>
<p>Reflows can be top-down or bottom-up as reflow information is passed to surrounding nodes. Reflows are unavoidable, but you can reduce their impact. <em>Change classes as low in the dom tree as possible</em> and thus limit the scope of the reflow to as few nodes as possible. For example, you should avoid changing a class on wrapper elements to affect the display of child nodes. Object oriented css always attempts to attach classes to  the object (DOM node or nodes) they affect, but in this case it has the added performance benefit of minimizing the impact of reflows.</p>
<h4 id="inline"><strong>Avoid setting multiple inline styles</strong></h4>
<p>We all know interacting with the DOM is slow. We try to group changes in an invisible DOM tree fragment and then cause only one reflow when the entire change is applied to the DOM. Similarly, setting styles via the style attribute cause reflows. <em>Avoid setting multiple inline styles</em> which would each cause a reflow, the styles should be combined in an external class which would cause only one reflow when the class attribute of the element is manipulated.</p>
<h4 id="animations"><strong>Apply animations with position fixed or absolute</strong></h4>
<p><em>Apply animations to elements that are position fixed or absolute</em>. They don’t affect other elements layout, so they will only cause a repaint rather than a full reflow. This is much less costly.</p>
<h4 id="smooth"><strong>Trade smoothness for speed</strong></h4>
<p>Opera also advises that we <em>trade smoothness for speed</em>. What they mean by this is that you may want to move an animation 1 pixel at a time, but if the animation and subsequent reflows use 100% of the CPU the animation will seem jumpy as the browser struggles to update the flow. Moving the animated element by 3 pixels at a time may seem slightly less smooth on very fast machines, but it won’t cause CPU thrashing on slower machines and mobile devices.</p>
<h4 id="table"><strong>Avoid tables for layout (or set table-layout fixed)</strong></h4>
<p><em>Avoid tables for layout</em>. As if you needed <em>another</em> reason to avoid them, tables often require multiple passes before the layout is completely established because they are one of the rare cases where elements can affect the display of other elements that came before them on the DOM. Imagine a cell at the end of the table with very wide content that causes the column to be completely resized. This is why tables are not rendered progressively in all browsers (thanks to Bill Scott for this tip) and <em>yet another</em> reason why they are a bad idea for layout. According to Mozilla, <a href="http://www.mozilla.org/newlayout/doc/reflow.html">even minor changes will cause reflows of all other nodes in the table</a>.</p>
<p>Jenny Donnelly, the owner of the YUI data table widget, recommends using a fixed layout for data tables to allow a more efficient layout algorithm. Any value for table-layout other than &quot;auto&quot; will trigger a fixed layout and allow the table to render row by row according to the CSS 2.1 specification. Quirksmode shows that <a href="http://www.quirksmode.org/css/tables.html#tablelayout">browser support for the table-layout property</a> is good across all major browsers.</p>
<blockquote>
<p>In this manner, the user agent can begin to lay out the table once the entire first row has been received. Cells in subsequent rows do not affect column widths. Any cell that has content that overflows uses the &#8216;overflow&#8217; property to determine whether to clip the overflow content.</p>
<p><cite><a href="http://www.w3.org/TR/CSS21/tables.html#fixed-table-layout">Fixed layout, CSS 2.1 Specification</a></cite></p>
</blockquote>
<blockquote>
<p>This algorithm may be inefficient since it requires the user agent to have access to all the content in the table before determining the final layout and may demand more than one pass.</p>
<p><cite><a href="http://www.w3.org/TR/CSS21/tables.html#auto-table-layout">Automatic layout, CSS 2.1 Specification</a></cite></p>
</blockquote>
<h4 id="expressions"><strong>Avoid JavaScript expressions in the CSS</strong></h4>
<p>This rule is an oldie but goodie. The main reason these<strong> expressions are so costly</strong> is because they are recalculated each time the document, or part of the document, reflows. As we have seen from all the <em>many</em> things that trigger a reflow, it can occur thousands and thousands of times per second. Beware!</p>
<h3>Further study</h3>
<p>The Yahoo! Exceptional Performance team ran an experiment to determine the optimal method to include an external stylesheet. We recommended putting a link tag in the head because, while it was one second slower (6.3 to 7.3 seconds) all the other methods blocked progressive rendering. While progressive rendering is non-negotiable (users <em>hate</em> staring at a blank screen), it does make me curious about the effects of rendering, repaints, reflows and resulting CPU thrashing on component download and overall response time. If we could reduce the number of reflows during loading could we maybe gain back a tenth of the lost time  (100ms)? What if it was as much as half? </p>
<p>At SXSW I was trying to convince <a href="http://stevesouders.com/">Steve</a> that reflows are important by telling him about an experiment I’ve been meaning to run for a long time, but just haven’t had time. I do hope someone can pick up where I left off (hint! hint!). While loading the page I’d like to intentionally trigger reflows at various rates. This could perhaps be accomplished by toggling a class name on the body (experiment) versus the last child of the body with no descendants (control). By comparing the two, and increasing in the number of reflows per second, we could correlate reflows to response time. Measuring the impact of reflows on JS responsiveness will be harder because anything we do to trigger the reflows will likely impact the experiment.</p>
<p>In the end, quantifying the impact is only mildly interesting, because browser vendors are telling us it matters. Perhaps more interesting is to focus on what causes reflows and how to avoid them. That will require better tools, so I challenge browser vendors and the performance community to work together to make it a reality! </p>
<h3>See it in action</h3>
<p>Perhaps you are a visual person? These videos are a really cool visualization of the reflow process.</p>
<ol>
<li><a href="http://www.youtube.com/watch?v=nJtBUHyNBxs">http://www.youtube.com/watch?v=nJtBUHyNBxs</a>&#8232;</li>
<li><a href="http://www.youtube.com/watch?v=ZTnIxIA5KGw">http://www.youtube.com/watch?v=ZTnIxIA5KGw</a>&#8232;</li>
<li><a href="http://www.youtube.com/watch?v=dndeRnzkJDU">http://www.youtube.com/watch?v=dndeRnzkJDU</a></li>
</ol>
<h3>Reflow gone amok</h3>
<p>In order to improve performance browser vendors may try to limit reflows from affecting adjacent nodes or combine several reflows into one larger change such as <a href="http://www.mozilla.org/newlayout/doc/reflow.html">Mozilla’s dirty reflows</a>. This can improve performance, but sometimes it can also cause display problems. You can use what we’ve learned about reflows and trigger them when necessary to correct related display problems.</p>
<p>For example, when toggling between tabs on our image optimization site, <a href="http://smush.it">http://smush.it</a>, the height of the content is variable from tab to tab. Occasionally the shadow gets left behind as it is several ancestor nodes above the content being toggled and its container may not be reflowed. This image is simulated because the bug is difficult to catch on camera as any attempts to shoot it cause the reflow that corrects it. If you find yourself with a similar bug, move the background images to DOM elements <em>below</em> the content being toggled. </p>
<div><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/smushit-reflow-problem/" rel="attachment wp-att-304"><img src="http://www.stubbornella.org/content/wp-content/uploads/2009/03/smushit-reflow-problem-300x252.png" alt="Smush.it! with un-reflowed shadows" title="smushit-reflow-problem" width="300" height="252" class="size-medium wp-image-304" /></a></div>
<p class="caption">Smush it on tab change in Firefox only.</p>
<p>Another example is dynamically adding items to an ordered list. As you increase from 9 to 10 items or 99 to 100 items the numbers in the list will no longer line up properly across all navigators. When the total number increases by an order of magnitude and the browser doesn’t  reflow siblings,  the alignment is broken. Quickly toggling the display of the entire list or adding a class, even if it has no associated styles, will cause a reflow and correct the alignment. </p>
<h3>Tools</h3>
<p>A few tools have made waves lately. Stoyan Stefanov and I have been looking for decent ways to measure reflows and repaints and there are a few tools which show promise (despite being very early alpha). Beware, some of these seriously destroyed my browser before I got them working correctly. In most cases you’ll need to have installed the latest nightly builds.</p>
<p>When <a href="https://developer.mozilla.org/web-tech/2008/10/13/mozafterpaint/">Mozilla announced the MozAfterPaint</a> Firefox API, the internets were abuzz. </p>
<ul style="list-style-type: square;padding-left: 20px;">
<li>UPDATE: Lindsey Simon at Google wrote a <a href="http://reflowr.appspot.com/">bookmarklet that tests reflow times on any browser</a>. Fantastic. (Note: all that shaking is normal!)</li>
<li>John Resig wrote a <a href="http://ejohn.org/blog/browser-paint-events/">bookmarklet to visualize paint events</a>. </li>
<li>Kyle Scholz created this tool to <a href="http://www.kylescholz.com/blog/2008/11/digging_into_paint_events_in_f_1.html">visualize paint events before onload</a>. </li>
<li>Alex at Yoono has created the <a href="http://blog.yoono.com/blog/2008/12/download-yoono-xulprofiler/">XUL profiler</a>.</li>
</ul>
<p>Has anyone else seen any cool tools for evaluating reflows? Please send them my way!</p>
<p>And a couple other tools not directly dealing with reflows.</p>
<ul style="list-style-type: square;padding-left: 20px;">
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=119f3477-dced-41e3-a0e7-d8b5cae893a3&amp;displaylang=en">IE Visual Roundtrip Analyzer (VRTA)</a>, because if Microsoft named it something fun we might actually want to use it. <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </li>
<li><a href="http://msdn.microsoft.com/en-us/library/aa969767.aspx">Performance Profiling Tools for WPF</a>.</li>
</ul>
<p>Ultimately, we need a cross browser tool to quantify and reduce reflows and repaints. I’m hoping that the performance community can partner with browser vendors to make this tool a reality. The browser vendors have been telling us for a while that this was where we needed to look next, the ball is in our court.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>Object Oriented CSS video on YDN</title>
		<link>http://www.stubbornella.org/content/2009/03/23/object-oriented-css-video-on-ydn/</link>
		<comments>http://www.stubbornella.org/content/2009/03/23/object-oriented-css-video-on-ydn/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 01:42:39 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Latest Happenings]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[XHTML / HTML]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[css architecture]]></category>
		<category><![CDATA[object oriented CSS]]></category>
		<category><![CDATA[oocss]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[Women In Technology]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=281</guid>
		<description><![CDATA[Yahoo! Developer Network has released a <a href="http://developer.yahoo.net/blogs/theater/archives/2009/03/website_and_webapp_performance.html">video of my Object Oriented CSS talk at Web Directions North</a> just in time for Ada Lovelace day.  I've also been included in a feature on <a href="http://www.wait-till-i.com/2009/03/24/ada-lovelace-day-women-in-technology-i-admire/">Women in Technology</a>. I'm absolutely flattered to be included among these fantastic technical women. Wow.

<h3>Object Oriented CSS: for high performance websites and web applications.</h3>
<embed src=http://d.yimg.com/cosmos.bcst.yahoo.com/up/fop/embedflv/swf/fop.swf?shareEnable=1&#038;id=12627863&#038;autoStart=0&#038;infoEnable=0&#038;shareEnable=0&#038;prepanelEnable=1&#038;carouselEnable=0&#038;postpanelEnable=1 width=300 height=225 type=application/x-shockwave-flash></embed>

Find out more about object oriented css 
<ol style="list-style-type: square; padding-left: 20px;">
	<li><a href="http://wiki.github.com/stubbornella/oocss">Open source project on github</a> (GIT is having some DNS issues, be patient)</li>
	<li><a href="http://www.slideshare.net/stubbornella/object-oriented-css">Follow along with the slides on slideshare</a></li>
	<li>Join the <a href="http://groups.google.com/group/object-oriented-css">OOCSS google group</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Yahoo! Developer Network has released a <a href="http://developer.yahoo.net/blogs/theater/archives/2009/03/website_and_webapp_performance.html">video of my Object Oriented CSS talk at Web Directions North</a> just in time for Ada Lovelace day.  I&#8217;ve also been included in a feature on <a href="http://www.wait-till-i.com/2009/03/24/ada-lovelace-day-women-in-technology-i-admire/">Women in Technology</a>. I&#8217;m absolutely flattered to be included among these fantastic technical women. Wow.</p>
<h3>Object Oriented CSS: for high performance websites and web applications.</h3>
<p><embed src=http://d.yimg.com/cosmos.bcst.yahoo.com/up/fop/embedflv/swf/fop.swf?shareEnable=1&#038;id=12627863&#038;autoStart=0&#038;infoEnable=0&#038;shareEnable=0&#038;prepanelEnable=1&#038;carouselEnable=0&#038;postpanelEnable=1 width=400 height=300 type=application/x-shockwave-flash></embed></p>
<p>Find out more about object oriented css </p>
<ol style="list-style-type: square; padding-left: 20px;">
<li><a href="http://wiki.github.com/stubbornella/oocss">Open source project on github</a> (GIT is having some DNS issues, be patient)</li>
<li><a href="http://www.slideshare.net/stubbornella/object-oriented-css">Follow along with the slides on slideshare</a></li>
<li>Join the <a href="http://groups.google.com/group/object-oriented-css">OOCSS google group</a></li>
</ol>
<p>Thanks to Havi, Julie, Ricky, Yahoo! Developer Network, and the whole <a href="http://north.webdirections.org/">Web Directions North</a> team for their hard work putting this together!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/03/23/object-oriented-css-video-on-ydn/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
	</channel>
</rss>
