<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-6438140762543120230</atom:id><lastBuildDate>Thu, 02 Sep 2010 21:21:46 +0000</lastBuildDate><title>I Dream of Uni</title><description></description><link>http://www.idreamofuni.com/</link><managingEditor>noreply@blogger.com (elsigh)</managingEditor><generator>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-7696144056632184361</guid><pubDate>Tue, 31 Aug 2010 20:59:00 +0000</pubDate><atom:updated>2010-08-31T13:59:18.076-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>html css javascript</category><title>HTML, CSS, and JavaScript from the Ground Up</title><description>One of the efforts I've had the most fun working on at Google was a class that Greg Veen, Ryan Carver, Sean McBride, and &amp;nbsp;Dustin Diaz put together for Googlers to learn more about HTML, CSS, and JavaScript from the UX perspective. That class has, at long last, had its contents made public (at least the screencasts anyhow). I'll be having a Manhattan tonight in celebration of all our hard work paying off =)&lt;br /&gt;&lt;br /&gt;Check it out here:&amp;nbsp;&lt;a href="http://code.google.com/edu/submissions/html-css-javascript/"&gt;http://code.google.com/edu/submissions/html-css-javascript/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-7696144056632184361?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/08/html-css-and-javascript-from-ground-up.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-5242001742819155342</guid><pubDate>Mon, 09 Aug 2010 02:17:00 +0000</pubDate><atom:updated>2010-08-08T19:19:55.116-07:00</atom:updated><title>Detecting IE Platform Preview (and User Agent detection) on Browserscope</title><description>On Browserscope we've recently encountered the conundrum of wanting to detect the IE Platform Preview branches and the fact that that information is not in the UA string. Right now, just using the &lt;a href="http://blogs.msdn.com/b/ie/archive/2010/03/23/introducing-ie9-s-user-agent-string.aspx"&gt;new and improved IE 9 UA string&lt;/a&gt;&amp;nbsp;offers no way to detect that someone is using a Platform Preview and also no way to tell which of the 4 previews they are using. Fortunately one can detect this stuff using Javascript, but this forced a rewrite of how we handle UA parsing in Browserscope such that we now can send in overrides for each of the fields we care about for a browser at present - the family, v1, v2, and v3 bits. The code is &lt;a href="http://code.google.com/p/browserscope/source/browse/trunk/static/util.js#180"&gt;checked in here&lt;/a&gt; in case you have a better way of doing it to share. Thankfully, the IE team is doing such a great job documenting the improvements from release to release that it isn't too painful to get this detection right..&lt;br /&gt;&lt;br /&gt;You can also check out this code in action on our &lt;a href="http://www.browserscope.org/ua"&gt;UA parser test page&lt;/a&gt;&amp;nbsp;too and if for some reason your browser isn't being correctly detected, let us know and we should be able to figure out how to get that right.&lt;br /&gt;&lt;br /&gt;All of this though brings me back to the fact that there's really not a great, bleeding-edge accurate, user agent parsing library available today that I'm aware of. The best ones out there at present that I know of are &lt;a href="http://browsers.garykeith.com/index.asp"&gt;browscap.ini&lt;/a&gt;&amp;nbsp;and &lt;a href="http://useragentstring.com/"&gt;useragentstring.com&lt;/a&gt;, but neither of these offer the detection library itself nor are they community maintained and bleeding-edge up to date. There's also &lt;a href="http://wurfl.sourceforge.net/"&gt;WURFL&lt;/a&gt;, though it's more about offering a database of capabilities than a universal browser detection tool. Is there something else out there that you know of that's good?&lt;br /&gt;&lt;br /&gt;I still have this fantasy of a client library, written to use and cache an ordered list of regexes and patterns for detecting browsers - it would be so cool if this list could be distributed by &lt;a href="http://code.google.com/p/pubsubhubbub/"&gt;pubsubhubbub&lt;/a&gt;&amp;nbsp;and then any one could host their own, augment the format, or just contribute their changes back to an open source project. Do you know of anyone looking for a fun, meaningful 20% project?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-5242001742819155342?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/08/detecting-ie-platform-preview-and-user.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-7286769063798429039</guid><pubDate>Thu, 24 Jun 2010 17:10:00 +0000</pubDate><atom:updated>2010-06-24T10:10:31.434-07:00</atom:updated><title>Velocity 2010 Browserscope Talk Slides</title><description>It's a great time for web performance folks here at O'Reilly's Velocity conference in Santa Clara, CA. With talks that correlate performance to dollars and efficiency, it's easier that ever to value website performance.&lt;br /&gt;&lt;br /&gt;The slides I'll be presenting for Browserscope are here below.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/present/embed?id=d4c76s7_48ghw6k4d6" frameborder="0" width="410" height="342"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-7286769063798429039?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/06/velocity-2010-browserscope-talk-slides.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-2561408080290595323</guid><pubDate>Fri, 21 May 2010 06:04:00 +0000</pubDate><atom:updated>2010-05-20T23:05:04.062-07:00</atom:updated><title>XmlHttpRequest.getAllResponseHeaders and Content-Encoding in IE7 &amp; IE8</title><description>A couple of weeks ago we tried to change how our &lt;a href="http://www.browserscope.org/network/test?test_key=gzip"&gt;Browserscope Network test for GZIP&lt;/a&gt; works and the other night we ran into something peculiar and unexpected - IE7 and IE8 strip the Content-Encoding header for GZIP responses if/when the browser has decoded the response (which it should have). Reading &lt;a href="http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders-method"&gt;the spec&amp;nbsp;for getAllResponseHeaders&lt;/a&gt;,&amp;nbsp;it looks like the only headers which ought to potentially be stripped are Set-Cookie and Set-Cookie2.&lt;br /&gt;&lt;br /&gt;The reason this was interesting/annoying is that we were trying to do something other than simply test whether the browser &lt;i&gt;says&lt;/i&gt; it can handle GZIP responses (via the Accept-Encoding header) - &amp;nbsp;we wanted to see if Google App Engine was actually returning a GZIP compressed response, in this case for a static CSS file. Looking at the headers from a packet sniffer it was clear that the Content-Encoding header was coming down the wire, but then in JavaScript - it had disappeared. Amusingly, IE6 showed the Content-Encoding header as being present.&lt;br /&gt;&lt;br /&gt;When a user-agent decodes a GZIP response do you think it should strip Content-Encoding header from getAllResponseHeaders()?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-2561408080290595323?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/05/xmlhttprequestgetallresponseheaders-and.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-1733065113002241132</guid><pubDate>Wed, 19 May 2010 06:50:00 +0000</pubDate><atom:updated>2010-05-18T23:50:32.242-07:00</atom:updated><title>Ubuntu Lucid Lynx w/ Gnome on the Lenovo T410</title><description>Maybe it's happened. I've been using Gnome without dying to switch back to fluxbox for like 3 weeks now. The degree to which I can get Gnome out of my way, combined with the fact that some of its niceties no longer seem janky, unpredictable, or brittle... Dare I say I may be converted?&lt;br /&gt;Also, Lenovo's T410 - this may be by far and away the best laptop I've ever used. The peripherals are in good locations - they moved the stereo jack over to the side (where it belongs, it was very peculiarly in front on the T400), moved the phone jack to the back (what's a modem?!), added a powered USB jack, 4+ hours of full screen battery life, and most importantly - I can actually use this thing &lt;i&gt;on my lap&lt;/i&gt;!&lt;br /&gt;Ubuntu has made some serious strides with Lucid Lynx. My typical gripes about gnu/linux (audio, suspend, wireless, etc..) are all fading and the configuration and usability of the system seems recommendable to your average consumer - I never thought I'd see it. Wow. Ok, so let's see how I feel in three weeks ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-1733065113002241132?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/05/ubuntu-lucid-lynx-w-gnome-on-lenovo.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-8244050920179301186</guid><pubDate>Mon, 19 Apr 2010 04:06:00 +0000</pubDate><atom:updated>2010-04-18T21:42:03.082-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Browserscope</category><title>User Tests in Browserscope</title><description>It seems like nearly every week we read about an interesting new hosted test for people to visit and run their browsers through (recent examples include &lt;a href="http://html5test.com/"&gt;html5test.com&lt;/a&gt; and &lt;a href="http://findmebyip.com/"&gt;findmebyip.com&lt;/a&gt;). Developers really love to poke at the black boxes they code for - and the matrix of browsers, OS, and networks is enormous. One thing I, and I presume other developers, would love to see are the aggregated results for these tests by user agent. Considering this is exactly what we built&amp;nbsp;Browser&amp;nbsp;to accomplish for our test categories, and that a user-hosted test feature has been on our &lt;a href="http://code.google.com/p/browserscope/wiki/Roadmap"&gt;Roadmap&lt;/a&gt;,&amp;nbsp;the Browserscope team is happy to announce that we're opening up an alpha of our &lt;a href="http://www.browserscope.org/user/tests/howto"&gt;User Tests feature&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Conveniently, this past week a User Tests use case came up for me at work and so it's been a driver for building this feature. We began working on a UI component that we wanted to test for speed of task completion. After building up &lt;a href="http://groupmenuselect.appspot.com/"&gt;a test page with a timer and some deltas&lt;/a&gt; it dawned on me just how cool it would be to open up this test to the world, and aggregate the results. The test is kind of strange in that the the UI component is out of its context, and you can argue about the mechanics of the test itself, but I still feel like the results may be informative. Interestingly too, this test is exactly the kind of thing we would *not* want to feature on the homepage of Browserscope (it's more of a performance test than a spec/binary test). And yet, the backend system with its median aggregation, scalability, and user-agent parsing library is a perfect fit. So check it out - and see &lt;a href="http://groupmenuselect.appspot.com/results"&gt;how other people are doing on the test&lt;/a&gt;&amp;nbsp;(courtesy of Browserscope).&lt;br /&gt;&lt;br /&gt;This is definitely a release early/often feature, and we want to be explicit that things may change or break in the API while we're in alpha mode. We may have to take the service offline briefly to fix things. But if you write tests for browsers and want to aggregate your results, sign in to Browserscope,&amp;nbsp;&lt;a href="http://www.browserscope.org/user/settings"&gt;register your test page&lt;/a&gt;&amp;nbsp;and then read the &lt;a href="http://www.browserscope.org/user/tests/howto"&gt;HOWTO&lt;/a&gt;&amp;nbsp;to start saving your results in the system.&amp;nbsp;Please send any feedback to &lt;a href="mailto:elsigh@gmail.com"&gt;me&lt;/a&gt; or to our&amp;nbsp;&lt;a href="http://groups.google.com/group/browserscope"&gt;mailing list&lt;/a&gt;. We really hope to make this an easy system to use for the tests you're already hosting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-8244050920179301186?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/04/user-tests-in-browserscope.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-2833253417588943359</guid><pubDate>Sat, 17 Apr 2010 01:29:00 +0000</pubDate><atom:updated>2010-04-16T18:29:08.717-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>python appengine</category><title>Production versus local development w/ App Engine - pychecker to the rescue!</title><description>This has been a furious week of coding, staying up til 3am, and banging my head on the keyboard. I wish I could say that in the end I feel like I was extremely productive, but there is the voice of rationality in the back of my mind saying I could have done much better.&lt;br /&gt;&lt;br /&gt;I've been working on the&amp;nbsp;&lt;a href="http://www.browserscope.org/"&gt;Browserscope&lt;/a&gt;&amp;nbsp;code base to add a feature to make it possible for users to run browser tests on their own servers and then make use of the Browserscope to store their results, download their results, and display their results with ease. We've worked really hard to build a system that should scale and maintain runtime medians (thanks to slamm). It seems like every week I see two or three new browser tests online and yet I don't see people collecting and aggregating the results in meaningful ways. It's hard! Hopefully we'll have this live for people to bang on in the next couple of weeks.&lt;br /&gt;&lt;br /&gt;Meanwhile, I want to braindump a few lessons learned the hard way. After four days of intense development using dev_appserver.py I decided to deploy my code to a test app_id and see how it ran in production. I was rather miffed to see that my code was not working, and/or&amp;nbsp;intermittently failing. That is pain.&lt;br /&gt;&lt;br /&gt;My debugging experience led me to cut and paste Tracebacks (when I got them!) into Google to look for errors with django's urlresolvers.py file, and a seeming inability to load my custom_filters. But that didn't make much sense to me, and I could find nothing to fix in that regard. So then I started seeing errors about importing modules. And I couldn't reproduce them locally. Pain.&lt;br /&gt;&lt;br /&gt;My officemate slamm suggested that I try using the built-in django with App Engine instead of appengine_django. This led me to start rewriting our main.py file. Fortunately, Guido's &lt;a href="http://code.google.com/p/rietveld"&gt;rietveld&lt;/a&gt; app is online on Google Code and contains a, in his own words, battle-worn &lt;a href="http://code.google.com/p/rietveld/source/browse/trunk/main.py"&gt;main.py&lt;/a&gt; file which loads Django 1.1. After a fair amount of refactoring and generally feeling like I was making progress (I stopped seeing the errors about my custom_filters not loading after moving the add_to_builtins call into my main.py file), alas, I still kept getting errors loading some module that I could not explain.&lt;br /&gt;&lt;br /&gt;So then I found a post in the Google Group mentioning that it can be troublesome to name your modules the same as any of the python system modules. Sure enough, I'd just created a new directory module named "users" (a pretty common directory one might have in a webapp). I got into a python console, and bingo - import users - loaded! Wow, so I then tried to import every directory and filename in my application. What a headache, but in the end, the only one I had named the same as a system module was users. Ok, so refactor and search/replace, not too big a deal. But it didn't fix my problem. Incidentally, Guido explained to me that the reason it is bad to name your modules the same as python system modules is that the sys.path in production puts your application directory at the END of the sys.path, while on dev_appserver it is on the front of the path. So that at least would explain why code that works in dev_appserver would not work in production if indeed you make this mistake. Apparently the fix is non-trivial, but at least it's in the "known-issues" list.&lt;br /&gt;&lt;br /&gt;So I decided I had to have a circular import problem. I could come up with nothing else. And finding a circular import is pretty hard, following every import down a tree is very mind-challenging at 3 in the morning (as your app spews 500s). Searching for tools to help uncover recursive imports, I came across a mention of a tool called &lt;a href="http://pychecker.sourceforge.net/"&gt;pychecker&lt;/a&gt; online (although it sounds like it has generally been deprecated by most in favor of pylint). Anyhow, I added a bunch of directories to my PYTHONPATH environment variable and ran "pychecker main.py myhandler.py" and bingo! "Error importing module foo". I could reproduce a problem! And it only took about 5 seconds for pychecker to run.. which is significant since my prior debugging path included making guesslike changes to my code, and redeploying (which takes more like 25 seconds) and praying and then banging my head. I found my recursive import, fixed the issue, and wow - no more 500s (well, except for the dynamic request limit ones).&lt;br /&gt;&lt;br /&gt;Anyway, I just wanted to post this in case anyone starts searching and finds this post useful. Happy coding!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-2833253417588943359?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/04/production-versus-local-development-w.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-8061781361206548444</guid><pubDate>Wed, 10 Mar 2010 03:42:00 +0000</pubDate><atom:updated>2010-03-09T19:50:28.988-08:00</atom:updated><title>Browserscope in External Bugs</title><description>Annie Sullivan, of our colleagues who wrote the &lt;a href="http://www.browserscope.org/richtext/about"&gt;Browserscope Rich Text test suite&lt;/a&gt;, let us know today that there are now two issues filed in Webkit and Firefox to track progress in rich text editing by using her Browserscope tests. In webkit: &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=35904"&gt;https://bugs.webkit.org/show_bug.cgi?id=35904&lt;/a&gt;, and in Firefox:&amp;nbsp;&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=550569"&gt;https://bugzilla.mozilla.org/show_bug.cgi?id=550569&lt;/a&gt;. Steve Souders' &lt;a href="http://www.browserscope.org/network/about"&gt;Network test suite&lt;/a&gt; is also mentioned in a few different bugs for both Firefox and Webkit. This is *exactly* the kind of effect we'd hoped to have when building Browserscope and it is a testament to the depth and value of these two test categories that they are to be found in issue trackers for the browser vendors themselves.&lt;br /&gt;&lt;br /&gt;We'd love to see this trend continue, and we'd also love to see Browserscope integrated into the continuous builds and test systems employed by browser vendors. Conveniently, vendors can easily run their own private Browserscope instances just for this purpose, which speaks to the benefit of using App Engine for something like this. Recently I've been chatting with some folks on the W3C about porting some of their test suites over to Browserscope as well, and hope to have some interesting news in that department soon ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-8061781361206548444?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/03/browserscope-in-external-bugs.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-2272114762308506979</guid><pubDate>Thu, 18 Feb 2010 18:27:00 +0000</pubDate><atom:updated>2010-02-18T10:27:51.796-08:00</atom:updated><title>Updates to the Browserscope Security Tests</title><description>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Since the&amp;nbsp;&lt;a href="http://mayscript.com/blog/collinj/browserscope-security-test-suite"&gt;launch&lt;/a&gt;&amp;nbsp;of the security test suite on&amp;nbsp;&lt;a href="http://www.browserscope.org/"&gt;Browserscope&lt;/a&gt;, the team who owns those tests have been busy taking in feedback and deciding what to change and what their criteria should be for those changes. Security is a loaded term, and Browserscope aims to be a particular sort of resource - part benchmark, part feature-checker, and part-resource. Collin Jackson has written a great explanation, titled&amp;nbsp;&lt;a href="http://mayscript.com/blog/collinj/what-makes-good-browserscope-security-test"&gt;What Makes A Good Browserscope Security Test?&lt;/a&gt;&amp;nbsp;His post provides details about&amp;nbsp;all the new changes to the security tests that went live with today's Browserscope push as well as provide some context for how the team made choices about what to change.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;From his post:&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial; font-size: 12px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial; font-size: 12px;"&gt;&lt;div style="margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 10px;"&gt;Our goal for the Browserscope security suite is to encourage openness and innovation in browser security. Here are some of the essential elements of a good Browserscope security test:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;The test should check for a behavior that makes the web a safer platform for developing web applications.&lt;/li&gt;&lt;li&gt;The test needs to be able to run without user interaction.&lt;/li&gt;&lt;li&gt;The behavior should not yet have universal adoption among popular browsers at the time it's added to Browserscope.&lt;/li&gt;&lt;li&gt;The test should be applicable and realistically attainable for all major browser vendors.&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;With the exception of rule #1, the last three are right in line with the conversations that the Browserscope team has had about what sort of categories we want to have tests for. I think every category owner should be able to come up with their own rule #1 as the description and justification for their category.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Big congratulations go out to Collin Jackson, Adam Barth, Mustafa Acer, and David Lin-Shung Huang for translating their thoughtfulness into code which should help inform users and developers when making choices about which browsers to use and which browsers are more secure.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-2272114762308506979?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/02/updates-to-browserscope-security-tests.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-8329999366591885305</guid><pubDate>Fri, 05 Feb 2010 20:26:00 +0000</pubDate><atom:updated>2010-02-05T16:49:38.183-08:00</atom:updated><title>Re-Recreating the Button</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.commoner.com/lsimon/goog_button_test.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_fJAG3DJ_MAg/S2y8f3sTuLI/AAAAAAAADS4/cjrj106-PuU/s320/submit.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This post owes its inspiration to Doug Bowman's excellent post from about 1 year ago, titled &lt;a href="http://stopdesign.com/archive/2009/02/04/recreating-the-button.html"&gt;Recreating the Button&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What's changed since Doug's post?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://webkit.org/blog/175/introducing-css-gradients/"&gt;-webkit-gradient&lt;/a&gt; and &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=479220"&gt;-moz-gradient&lt;/a&gt;(&amp;gt;= FF3.6)&amp;nbsp;support for backgrounds. (IE has had the Gradient filter since 5.5)&lt;/li&gt;&lt;li&gt;-webkit-border-radius and -moz-border-radius work pretty much flawlessly, and degrading to square corners is currently in vogue.&lt;/li&gt;&lt;li&gt;I've seen several projects implement this div/span button implementation when a native control would be much more appropriate.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So using the spec that Doug and others came up with, I wanted to see how close I could get to it using un-nested anchors, spans, and divs, but much more notably - native inputs and buttons. JavaScript buttons are fine, but native buttons can degrade. There's few things as horrible as clicking a form submit button and having nothing happen due to a JavaScript error. The implementation has not been all that easy in the end. Many times I've thought I had it only to be thwarted seeing the result in some other browser and going back to the drawing board. For now I've got a &lt;a href="http://www.commoner.com/lsimon/goog_button.css"&gt;CSS file&lt;/a&gt; and a &lt;a href="http://www.commoner.com/lsimon/goog_button_test.html"&gt;unit test page&lt;/a&gt; which represents what I'd like to achieve and how close (and sometimes how far!) I am to getting there.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.commoner.com/lsimon/goog_button_test.html" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_fJAG3DJ_MAg/S2uwDB9RBAI/AAAAAAAADSw/LfFZKEPDYC4/s320/goog_button_test.png" /&gt;&lt;/a&gt;&lt;/div&gt;I'll continue to update the test page as I hear from folks about what is and isn't breaking, but in the meantime, I'm happy to report that the test is passing on all A-grade browsers (&lt;s&gt;with the exception of Safari on Mac - hopefully some nice Mac folks can clue me in on what to change to get it working&lt;/s&gt;&amp;nbsp;I am not sure about Mac, but Safari 4.04 on Windows passes all the tests now).&lt;br /&gt;&lt;br /&gt;The test page shows off something I've found really helpful as a UI developer: unit testing of computed styles in different browsers (in this case, making use of &lt;a href="http://code.google.com/p/closure-library"&gt;closure-library&lt;/a&gt;'s goog.testing.jsunit module). Having a page like this makes it much easier to discuss and document anomalies and provides a lot more assurance when making adjustments. We all tend to test our work in one browser and then go through the process of making tweaks for others, but it's crucial to be sure that a change for one doesn't botch something in another. Specifically, this page documents a few use cases that I didn't originally set out to solve, but which now seem like big wins - namely, the icon-buttons as well as the buttons in fixed width containers. Of course there's no way to unit test for everything. Many of the browser-specific tweaks to the padding are specifically for visual consistency inside the button, so testing the padding would be a joke. To that end, I have to plug the free&amp;nbsp;&lt;a href="http://browserlab.adobe.com/"&gt;Adobe BrowserLab&lt;/a&gt;, which I used constantly while developing this code.&lt;br /&gt;&lt;br /&gt;This is still something of a work-in-progress, but you can look forward to seeing these buttons, and some correspondingly styled select elements, in the next &lt;a href="http://appengine.google.com/"&gt;App Engine&lt;/a&gt; Admin Console release and ultimately the closure-library.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_fJAG3DJ_MAg/S2uvbu5vqsI/AAAAAAAADSo/0WxVfxtAKXs/s1600-h/icon_button.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_fJAG3DJ_MAg/S2uvbu5vqsI/AAAAAAAADSo/0WxVfxtAKXs/s320/icon_button.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-8329999366591885305?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2010/02/re-recreating-button.html</link><author>noreply@blogger.com (elsigh)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fJAG3DJ_MAg/S2y8f3sTuLI/AAAAAAAADS4/cjrj106-PuU/s72-c/submit.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-4320633948367291883</guid><pubDate>Tue, 29 Dec 2009 22:17:00 +0000</pubDate><atom:updated>2009-12-29T15:07:07.572-08:00</atom:updated><title>My Most Memorable Mushroom Hunt</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_fJAG3DJ_MAg/Szp_oGGrfMI/AAAAAAAAC_8/OrL6oQhfpBs/s1600-h/2009-12-27+19.24.51.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_fJAG3DJ_MAg/Szp_oGGrfMI/AAAAAAAAC_8/OrL6oQhfpBs/s320/2009-12-27+19.24.51.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;I had to turn back. The already-overgrown remnant of a road I had been climbing was becoming more impassable and I was getting this sketchy feeling deep in my bones. I was already nervous. Maybe some dealer/grower was going to emerge from the side woods, shotgun in hand, demanding to know what the hell I was doing on his land. So I started walking back down when I saw one - Dr. Snow had showed me a similar pine tree only hours ago, and told me that when hunting Matsutake, what you're really hunting is this tree. I lifted one of the green, low hanging branches up and there they were - three gorgeous, white-cinnamon mushrooms in a bulge of dirt and pine needles, about two feet from the trunk. My heart was racing. No way. Is this why I had come up here in the first place?! I pulled one of the white giants to my nose - it's unmistakable.&lt;br /&gt;&lt;br /&gt;I love hunting mushrooms, and I love the forest. I became interested in mushrooms for the same reason any curious college kid might. The dream of finding a raw, natural magic led me and my willing compadres on too many four am drives out east of Austin. We'd jump short fences off remote country roads and scamper around in the dew, staring into piles of cow manure as the sun came up. After around twenty minutes we'd start yawning with boredom and fatigue, and that was that. I never did find the famed psilocybin cubensis of Texas.&lt;br /&gt;&lt;br /&gt;Then I got into cooking. Cooks are like car-loving gearheads when it comes to ingredients. A cook who doesn't want to taste everything the world has to offer is merely a preparer of food. When I made my first wild mushroom dish, chicken with black trumpet mushrooms in veloute sauce, I jumped into the game. I started buying all sorts of dried mushrooms, and fortunately this was about the time that bulk bins started appearing in Texas grocery stores. My selections included porcini, black trumpets, and morels. I remember the time I got ahold of a fresh, black truffle while working in Lupin's kitchen. The chef was too busy doing blow to notice one little missing nugget, so when I got home that night I made up some soft-scrambled eggs and shaved the little gem on top. I was totally underwhelmed. I had come to love the deep, rich, dark earthy flavor of wild mushrooms, and truffles are something else entirely.&lt;br /&gt;&lt;br /&gt;Since we moved to California three years ago, I've been making frequent pit-stops down at the Ferry Building store to check on what's in season. I've purchased rare blue chantrelles, queen boletes, perfect morels, and many more thanks to Far West Fungi and Ian. Angela and I have even rented zipcars a time or two to drive out of town for some "hiking" in the forest. Honestly though, on some of our hikes I tend to become a single-minded human radar, scouring the ground for shrooms, and I'm lucky and grateful that Angela is tolerant, supportive, and now also a converted fungiphile.&lt;br /&gt;&lt;br /&gt;After meeting local legend Eric Schramm during &lt;a href="http://dishola.blogspot.com/2009/11/its-mushroom-season.html"&gt;our last visit&lt;/a&gt;, I decided to call him before this trip to see if I might get some info about what the mushroom forecast was, or maybe see about finding a guide or something. He very kindly called me back, and said he could only talk for 30 seconds because things were "fucking crazy up here", but managed to get me a phone number for Dr. Ryane Snow, who we'd read about. I called him up and voila, he had a slot open and we were set for a after-breakfast trip for 10am on Dec. 27th.&lt;br /&gt;&lt;br /&gt;Not only did I meet and get to walk with this living legend of American mushrooming, but Dr. Snow is a cool, humble, honest, and brazen hero. He exudes the kind of confidence that comes from knowledgable self-reliability - and he is excited and willing to share what he's discovered from information on medicinal plants, seaweed, trees, botany, to right-brain expansion and thinking visually. We hiked for about three and a half hours in gorgeous, lush, public forestland, picking loads of hedgehogs, candy caps, yellowfoot chantrelles, pig's ears, and a few others. Dr. Snow told me all their names in Latin, helped me learn how to distinguish one from another, and shared my excitement when we came into a particularly abundant patch. We even sampled a russula that was spicy. It would not no exagerration to say that I was completely in HOG HEAVEN =)&lt;br /&gt;&lt;br /&gt;We searched low and low for some end-of-the-season matsutakes but alas, had no luck. I had mentioned before our walk that I'd never eaten a matsutake but would like to, and Dr. Snow assured me that they were delicious and special (he affectionately calls them "Matsies"). Lucky for me, Snow was kind and generous enough to give me one to take home from his personal stash, so that I might experience this culinary oddity and magnificence. When he dropped me off at the Stanford Inn, I was grinning from ear to ear.&lt;br /&gt;&lt;br /&gt;The Stanford Inn serves an all vegetarian menu, but that does not include lunch - if it had, I would have sat down to eat in bliss. I knew Angela wouldn't be there to pick me up for at least two hours. At first I just wandered around the grounds to acquiesce my hunger - the place is amazing, with lush gardens, and beautiful buildings. But I am addicted - even Dr. Snow pointed this out to me on our walk in case I didn't know already - and within 30 minutes I was stalking the nearby hillside, but still within the cellphone coverage provided by the Stanford, in case Angela called. Initially I came across a lot of russulas and amanitas, but after twenty minutes I'd found two lovely, golden chantrelles. After an hour I had a few more chantrelles, plus a couple of huge hedgehogs. My ankles were starting to become loose and weak from clinging to the steep hillside. At the hour and a half mark I came across that pine tree and those three matsutakes on my own. I was truly fortunate to have that one in my bag from Dr. Snow, to aid in my identification, but the smell of a matsutake is truly telltale, and now I will never forget it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_fJAG3DJ_MAg/Szp_xuPbh_I/AAAAAAAADAE/ioY7P5zY5Jw/s1600-h/2009-12-27+19.02.44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_fJAG3DJ_MAg/Szp_xuPbh_I/AAAAAAAADAE/ioY7P5zY5Jw/s640/2009-12-27+19.02.44.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-4320633948367291883?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2009/12/my-most-memorable-mushroom-hunt.html</link><author>noreply@blogger.com (elsigh)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fJAG3DJ_MAg/Szp_oGGrfMI/AAAAAAAAC_8/OrL6oQhfpBs/s72-c/2009-12-27+19.24.51.jpg' height='72' width='72'/><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-583679713868217563</guid><pubDate>Wed, 11 Nov 2009 15:00:00 +0000</pubDate><atom:updated>2009-11-11T07:00:04.192-08:00</atom:updated><title>Security Tests on Browserscope</title><description>&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif;"&gt;[The text below is reprinted from &lt;a href="http://stevesouders.org/"&gt;stevesouders.org&lt;/a&gt;, since it's far better than what I would've written anyway. -Lindsey ;]&lt;br /&gt;&lt;br /&gt;Today, the first new test suite for Browserscope was launched:&amp;nbsp;&lt;a href="http://www.browserscope.org/security/about" style="color: #2a5db0;" target="_blank"&gt;Security&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.browserscope.org/" style="color: #2a5db0;" target="_blank"&gt;Browserscope&lt;/a&gt;&amp;nbsp;is an open source project for measuring browser capabilities. It’s a resource for users and developers to see which features are or are not supported by any particular browser. All of the data is crowdsourced, making the results more immediate, diverse, and representative. Browserscope launched in September (see&amp;nbsp;&lt;a href="http://www.stevesouders.com/blog/2009/09/13/browserscope-how-does-your-browser-compare/" style="color: #2a5db0;" target="_blank"&gt;my (Steve's) blog post&lt;/a&gt;) with tests for&amp;nbsp;&lt;a href="http://www.browserscope.org/network/about" style="color: #2a5db0;" target="_blank"&gt;network performance&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.browserscope.org/selectors/about" style="color: #2a5db0;" target="_blank"&gt;CSS selectors&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.browserscope.org/richtext/about" style="color: #2a5db0;" target="_blank"&gt;rich text edit controls&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://www.browserscope.org/acid3/about" style="color: #2a5db0;" target="_blank"&gt;Acid3&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The new&amp;nbsp;&lt;a href="http://www.browserscope.org/security/test" style="color: #2a5db0;" target="_blank"&gt;security tests in Browserscope&lt;/a&gt;&amp;nbsp;were developed by&amp;nbsp;&lt;a href="http://www.adambarth.com/" style="color: #2a5db0;" target="_blank"&gt;Adam Barth&lt;/a&gt;&amp;nbsp;from&amp;nbsp;&lt;a href="http://www.eecs.berkeley.edu/" style="color: #2a5db0;" target="_blank"&gt;UC Berkeley&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://www.collinjackson.com/" style="color: #2a5db0;" target="_blank"&gt;Collin Jackson&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.google.com/profiles/meacer" style="color: #2a5db0;" target="_blank"&gt;Mustafa Acer&lt;/a&gt;&amp;nbsp;from&amp;nbsp;&lt;a href="http://www.cmu.edu/" style="color: #2a5db0;" target="_blank"&gt;Carnegie Mellon University&lt;/a&gt;. It’s exciting to have these experts become Browserscope contributors. The tests cover such areas as&amp;nbsp;&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages" style="color: #2a5db0;" target="_blank"&gt;postMessage API&lt;/a&gt;,&amp;nbsp;&lt;a href="http://json.org/js.html" style="color: #2a5db0;" target="_blank"&gt;JSON.parse API&lt;/a&gt;,&amp;nbsp;&lt;a href="http://tools.ietf.org/html/draft-abarth-cookie-02#section-5.1.6" style="color: #2a5db0;" target="_blank"&gt;httpOnly cookie attribute&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://www.adambarth.com/papers/2009/barth-weinberger-song.pdf" style="color: #2a5db0;" target="_blank"&gt;cross-origin capability leaks&lt;/a&gt;. See the&amp;nbsp;&lt;a href="http://www.browserscope.org/security/about" style="color: #2a5db0;" target="_blank"&gt;Security about page&lt;/a&gt;&amp;nbsp;to read about all the tests.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;This is the point at which you can contribute.&lt;/em&gt;&amp;nbsp;We don’t want your money - all we want is a little bit of your time to&amp;nbsp;&lt;a href="http://www.browserscope.org/alltests" style="color: #2a5db0;" target="_blank"&gt;run the tests&lt;/a&gt;. Just click on the link and sit back. All that’s needed is a web client that supports JavaScript. We especially want people to connect using their mobile devices. If you have suggestions about the tests,&amp;nbsp;&lt;a href="mailto:browserscope@googlegroups.com" style="color: #2a5db0;" target="_blank"&gt;contact us&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="http://code.google.com/p/browserscope/issues/list" style="color: #2a5db0;" target="_blank"&gt;submit a bug&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So far we’ve collected over 30,000 test results from 580 different browsers. Want to see how your browser compares? Just click on this button to add your browser’s results to Browserscope.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.browserscope.org/alltests"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_fJAG3DJ_MAg/SvpcNsCp7XI/AAAAAAAACzo/pRBHIRvETdQ/s320/how_does_your_browser_compare.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-583679713868217563?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2009/11/security-tests-on-browserscope.html</link><author>noreply@blogger.com (elsigh)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fJAG3DJ_MAg/SvpcNsCp7XI/AAAAAAAACzo/pRBHIRvETdQ/s72-c/how_does_your_browser_compare.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-9027689389418444232</guid><pubDate>Sat, 24 Oct 2009 18:34:00 +0000</pubDate><atom:updated>2009-10-24T11:36:23.087-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>food</category><title>If you don't like omakase, I don't like you</title><description>Or at least, I'll have a really hard time taking your opinions about "good food" seriously. &lt;a href="http://en.wikipedia.org/wiki/Omakase"&gt;Omakase&lt;/a&gt;, or chef's choice, is often the best way to branch out and try new things that you never knew you'd like (or possibly dislike). Last night, me and 9 other folks visited San Francisco's &lt;a href="http://www.dishola.com/dishes/view/3599"&gt;Jai Yun Restaurant&lt;/a&gt;&amp;nbsp;for what was one of the greatest Chinese food feasts of my life. If you haven't been and you care about Chinese food and you're nearby, get a reservation ASAP. This morning I started thinking more about this style of dining/eating.&lt;br /&gt;&lt;br /&gt;You don't have to go out to a sushi restaurant to experience omakase, though that is context where this word comes from. But the idea that you'd go out to eat, pay some amount of money, and have limited say in what you get is what's important. As I'm not allergic to any foods, it's certainly easier to be voiceless, but again, that's just a detail and has nothing to do with the spirit of omakase.&lt;br /&gt;&lt;br /&gt;Do you loathe "prix fixe" meals? Don't take me out to eat. I'll admit that I'm not always in the mood for this, but more often than not, I'm game. It doesn't have to be fancy. It could be some authentic Americana chips and dip at your place, but the point is that it's exposure to something cherished.&lt;br /&gt;&lt;br /&gt;When I was in Korea, probably one of the greatest meals I ate was this crazy package-o-ramen soup mixed with spam and hot dogs and spicy as hell. If you told me about the ingredients weeks in advance and tried to get me excited you'd have a hard time, but in the moment, my friend Kihyun knew I'd be up for it, and I'm so grateful he let me experience this meal. He could've taken me out, trying to impress me or something, to eat more crazy sea urchin sashimi, but variety is indeed the spice of life. And Koreans love spicy, oh brother. This soup dish came about as South Koreans were trading with American soldiers during the Korean war, and has become a national pasttime these days - everyone at the restaurant &amp;nbsp;was eating this spicy, hearty soup for lunch.&lt;br /&gt;&lt;br /&gt;So if you haven't done it in awhile, tell the chef at one of your favorite places to surprise you - let him/her make something special for you that they love to cook. Don't think twice and don't waste a bite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-9027689389418444232?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2009/10/if-you-dont-like-omakase-i-dont-like.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-8789232892302836044</guid><pubDate>Sun, 27 Sep 2009 02:18:00 +0000</pubDate><atom:updated>2009-09-27T10:16:27.536-07:00</atom:updated><title>Browserscope &amp; Chrome Frame</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_fJAG3DJ_MAg/Sr7HQInr8WI/AAAAAAAACl0/yBjhs08z0Ak/s1600-h/chromeframe.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_fJAG3DJ_MAg/Sr7HQInr8WI/AAAAAAAACl0/yBjhs08z0Ak/s320/chromeframe.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;I imagine many front end developers out there&amp;nbsp;like me&amp;nbsp;are currently pretty thrilled about the announcement of&amp;nbsp;&lt;a href="http://code.google.com/chrome/chromeframe/"&gt;Google&amp;nbsp;Chrome Frame&lt;/a&gt; this week. I've always been an admirer of Alex Russell's &lt;a href="http://alex.dojotoolkit.org/"&gt;writing&lt;/a&gt; and &lt;a href="http://www.dojotoolkit.org/"&gt;work&lt;/a&gt;. To be fair though, I was once also a very excited Flash developer who thought I'd end up writing code for a single engine/consumer. I've felt that burn, but I'm still really just a kid at heart - so I'm psyched.&lt;br /&gt;&lt;br /&gt;Chrome Frame presented a pretty interesting challenge for &lt;a href="http://www.browserscope.org/"&gt;&lt;b&gt;Browserscope&lt;/b&gt;&lt;/a&gt;. I wish we'd solved it fully before this morning. The problem is in detecting the user agent. When it first came out, I thought Browserscope wouldn't need any quick changes due to Chrome Frame, because we wouldn't be serving the &amp;lt;meta http-equiv="X-UA-Compatible" content="chrome=1"&amp;gt; header. Fortunately &lt;a href="http://stevesouders.com/"&gt;Steve&lt;/a&gt; read about the &lt;a href="http://code.google.com/chrome/chromeframe/developers_guide.html#Testing_Your_Sites"&gt;"cf:" way to run Chrome Frame&lt;/a&gt; the next morning - though unfortunately, that meant we had a problem.&lt;br /&gt;&lt;br /&gt;Browserscope originally did its user agent classification based on the HTTP_USER_AGENT header sent from the browser when you share your test results. Chrome Frame adds a "chromeframe" string within the IE user agent string, so at first we thought we could detect Chrome Frame based on the presence of that string. But correctly, IE has the "chromeframe" string whether Chrome Frame has been invoked on the page or not (it's still an installed plug-in). And we wanted to be able to distinguish the IE/Chrome Frame results - which someone could submit by going to cf:http://www.browserscope.org/.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_fJAG3DJ_MAg/Sr7JjLupSRI/AAAAAAAACl8/ovugOiAAnyw/s1600-h/aboutcf.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_fJAG3DJ_MAg/Sr7JjLupSRI/AAAAAAAACl8/ovugOiAAnyw/s320/aboutcf.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;So then we thought we could just detect whether the client side render engine was Webkit, which is doable - and it turns out that if you ask the browser for window.navigator.userAgent you get a typical Chrome user agent string (type cf:about:version into IE with Chrome Frame installed). It's kind of a bummer that at the client level, you cannot tell that you're in Chrome Frame versus Chrome proper, but the Chrome Frame team may tweak the Chrome Frame user agent string if enough people also encounter this as an issue. Functionally, it should be a lot more like Chrome proper; Browserscope itself should be able to report if, and if/when that isn't the case.&lt;br /&gt;&lt;br /&gt;While we'd anticipated &lt;i&gt;new&lt;/i&gt; user agents on Browserscope, we hadn't imagined a hybrid sort of User Agent. We had to make some changes under the hood to support this in the back end (thanks slamm!). Now you should be able to go to Browserscope and compare your test results for IE and Chrome Frame (if you have it installed). Parsing-wise, we're grouping Chrome Frame along with the browser family(IE at this point) and major version bit(6|7|8) in the UI. We'd love your feedback on that decision.&lt;br /&gt;&lt;br /&gt;Now, not only can you run the tests on Browserscope in Chrome Frame, but once you do, you'll then experience Browserscope itself in Webkit (check out all the rounded corners and text-shadows). And, how awesome is Webkit?! Of course, you can always toggle the checkbox on the homepage to switch back and forth to IE proper.&lt;br /&gt;&lt;br /&gt;This experience reminded us on the Browserscope team how crucial it is to parse user agent "correctly" - and in this case that requires a combination of client and server information! - so I'll make a plea for folks to check out and add comments to a &lt;a href="http://code.google.com/p/browserscope/wiki/UserAgentParsing"&gt;design doc for a user agent string parsing project we'd love to see take shape&lt;/a&gt;. Want to build it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-8789232892302836044?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2009/09/browserscope-chrome-frame.html</link><author>noreply@blogger.com (elsigh)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fJAG3DJ_MAg/Sr7HQInr8WI/AAAAAAAACl0/yBjhs08z0Ak/s72-c/chromeframe.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-6450706051744485721</guid><pubDate>Mon, 14 Sep 2009 01:01:00 +0000</pubDate><atom:updated>2009-09-17T00:04:03.183-07:00</atom:updated><title>Announcing Browserscope</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.browserscope.org/" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_fJAG3DJ_MAg/SqyqTVpkFZI/AAAAAAAACgc/xGeDIFnWTho/s320/screenshot.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;I'm excited today to announce the release of Browserscope at &lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span id="goog_1252698361146"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span id="goog_1252698361147"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.browserscope.org/"&gt;&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;www.browserscope.org&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Browserscope is an open-source project for profiling web browsers and storing and aggregating crowd-sourced data about browser performance.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The goals are to foster innovation by tracking browser functionality and to be a resource for web developers.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Browserscope is based on Steve Souders' &lt;/span&gt;&lt;a href="http://stevesouders.com/ua"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;UA Profiler&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;, and his original tests have been preserved here as the Network test category. Other test categories include Ian Hickson's &lt;/span&gt;&lt;a href="http://www.browserscope.org/acid3/about"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Acid3 test&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; (ported by Jacob Moon into Browserscope), Annie Sullivan's &lt;/span&gt;&lt;a href="http://www.browserscope.org/richtext/about"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Rich Text Edit Mode&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; tests, and &lt;/span&gt;&lt;a href="http://www.browserscope.org/selectors/about"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;John Resig's Selectors API Test Suite&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; (ported by Lindsey Simon into Browserscope).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The Advantages of Crowdsourcing&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The ability for users to contribute results is the key for Browserscope's longevity, accuracy, and currency.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;No dedicated test resources are required; enabling the project to run in perpetuity&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Tests are run under a wide variety of real world test conditions&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Aggregating results reduces selection bias&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;New browsers show up immediately due to developer testing&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;And this is where you come in! Click the button below to run your browser through the tests on Browserscope.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.browserscope.org/alltests"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_fJAG3DJ_MAg/Sqq6pc3hU9I/AAAAAAAACgM/PZgesR6mmCY/s320/how_does_your_browser_compare.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Roadmap&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Below are some ideas culled from the project&amp;nbsp;&lt;/span&gt;&lt;a href="http://code.google.com/p/browserscope/issues/list"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;issue tracker&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; on Google Code. Do you have some ideas? Add them, or feel free to checkout and work on the code. We'd love to get your patches (as directory diffs) and review those for inclusion in Browserscope!&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Visualize test result trends over time&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Wall of fame, up-and-comers, Billboard top 50&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;More test categories - cookies, security, reflow&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;More contributors&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Tagged/personalized test results&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Normalize time-based results across platforms&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;User agent parsing library&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-size: medium;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: medium;"&gt;&lt;/span&gt;Links&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.browserscope.org/"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;http://www.browserscope.org/&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Code:&lt;/b&gt;&amp;nbsp;&lt;a href="http://code.google.com/p/browserscope/"&gt;http://code.google.com/p/browserscope/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Contact the team:&lt;/b&gt;&amp;nbsp;&lt;a href="http://groups.google.com/group/browserscope"&gt;http://groups.google.com/group/browserscope&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Thanks&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;I want to extend my sincere and deep gratitude to everyone who's offered feedback, worked on the codebase, or otherwise helped Browserscope along. Specifically I want to thank:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Steve Souders: you've been a great mentor to work with, and your ability to think BIG and beyond is something I hope continues to rub off on us all a little ;)&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Steve Lamm: I've never worked with anyone who writes code that is of such high quality and readability. Browserscope's backend would not be the same without you.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Annie Sullivan: You're quick, wise, and totally fun to work with - I also really hope that Rich Text Edit &amp;nbsp;mode development will get easier thanks to your dedication.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;John Skidgel: Design master, cohort, and all-around tolerater - you love problems, you has solutions.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Brett Slatkin and the App Engine team: Your insight into the overall system design was critical to our being able to deploy this on App Engine, and the Task Queue API rocks.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Jacob Moon: We sure got lucky that you provided the first outside-the-project developer experience! Thanks for bringing the Acid3 tests (and others) into Browserscope and for showing us how doable it is to port new tests into the system.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Christian Stockwell and the IE team: Your feedback was essential to uncovering issues regarding selection bias, hopefully the reflow tests will make their appearance again soon once we've done some more to address this issue.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Mike Belshe and the Chrome team: Your advice and feedback re: benchmarks versus compatibility testing was crucial. Yall run the tightest ship on the planet and it shows, i &amp;lt;3 Chrome.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;David Baron, Dion Almaer, Ben Galbraith, John Resig and the Mozilla team: Your ideas and suggestions are present in many parts of the codebase - and additionally I couldn't have made the site look nearly as decent without using Firefox.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Robert Bowdidge: Thanks for inspiring me to work on this.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Lastly a big thanks to Google for giving me 20% time to work on this project for the last year.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-6450706051744485721?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2009/09/announcing-browserscope.html</link><author>noreply@blogger.com (elsigh)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fJAG3DJ_MAg/SqyqTVpkFZI/AAAAAAAACgc/xGeDIFnWTho/s72-c/screenshot.png' height='72' width='72'/><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-602010170594840632</guid><pubDate>Wed, 24 Jun 2009 00:54:00 +0000</pubDate><atom:updated>2009-06-23T17:54:44.482-07:00</atom:updated><title>Go With the Reflow</title><description>Posted my slides to SlideShare: http://www.slideshare.net/lsimon/go-with-the-reflow&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-602010170594840632?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2009/06/go-with-reflow.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-1669777443461134134</guid><pubDate>Wed, 17 Jun 2009 20:01:00 +0000</pubDate><atom:updated>2009-06-17T13:02:38.797-07:00</atom:updated><title>Speaking at Velocity about reflow next week</title><description>&lt;a href="http://conferences.oreilly.com/velocity"&gt;&lt;br /&gt;&lt;img src="http://assets.en.oreilly.com/1/event/29/velocity2009_banner_speaking_210x60.gif" width="210" height="60"  border="0"  alt="Velocity 2009" title="Velocity 2009"  border="0"/&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Hey - if you want to talk reflow and render time, come to Velocity next week. I'll be giving a 15 minute presentation on the subject. See ya there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-1669777443461134134?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2009/06/speaking-at-velocity-about-reflow-next.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-6957776718939181417</guid><pubDate>Sat, 09 May 2009 00:58:00 +0000</pubDate><atom:updated>2009-05-10T23:28:00.425-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>css nightmare clearfix float float-drop</category><title>Clearing floats without overflow hidden</title><description>Clearing floats is a topic near and dear to web developers fighting with CSS to produce grid layouts. There are a number of methods to do this, but not all work well in all situations. I wanted to mention one I'm using at work at Google that's gotten pretty good mileage so far in ways that others have not.&lt;br /&gt;&lt;br /&gt;Our grid system is very similar to Yahoo's - it's designed to nest two units inside of a container and then further nesting takes place in one of the two units. Our system can scale to infinite nesting in browsers that support first-child selectors, and for those that don't we bake a nasty mix of descendent selectors to achieve a baseline of 4 levels of nesting (which seems pretty sufficient for most projects).&lt;br /&gt;&lt;br /&gt;A fixed layout of 180-px on the left and fluid on the right looks like this in HTML:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;div class="g-section g-tpl-180"&amp;gt;&lt;br /&gt;  &amp;lt;div class="g-unit g-first"&amp;gt;&lt;br /&gt;    &amp;lt;div class="box-1"&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div class="g-unit"&amp;gt;&lt;br /&gt;    &amp;lt;div class="box-2"&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This grid/horizontal column layout is done in CSS by making the g-first element float:left and then have a fixed width:180px then the second g-unit float:none and margin-left:180px. So, since something is floating here, we want our g-section to contain it.&lt;br /&gt;&lt;br /&gt;For containing floats, here's what I've found:&lt;br /&gt;  * &lt;a href="http://www.webtoolkit.info/css-clearfix.html"&gt;Clearfix&lt;/a&gt; is nice, but doesn't work when nesting sections within units, so for our framework it is useless.&lt;br /&gt;  * &lt;a href="http://www.alistapart.com/articles/fauxabsolutepositioning"&gt;Faux Absolute Positioning&lt;/a&gt; is pretty cool, but doesn't mix well on pages that don't adopt this approach whole hog (i.e. everything has to be inside of a div with class="line". So that's out.&lt;br /&gt;  * overflow:hidden - Overflow hidden for a CSS framework is like using crack - it's solves the immediate problem nicely, but as things build up and edge cases kick in, it's unsustainable and gross. Hiding parts of the UI and not providing users with a scroll bar is just plain wrong, even if it makes your design "look" good still. All sorts of things in Web Apps will get you into this situation - dynamic-width/column data tables, form input elements, images, etc.. Cutting them off and asking your user to get a bigger screen is wretched.&lt;br /&gt;&lt;br /&gt;I'm going to paste the code and comments I'm currently using for g-section below. Hopefully it will be of use to someone stumbling across this. I have unit tests that test against float-drops and sizing of the template is all the basic cases as well as cases where the sections are nested up to 4 in depth as well as nested inside of floats. &lt;strike&gt;This last case is one where I'm noticing some issues related to how width of the outer float container gets calculated - but that's a subject of a whole other post.&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;Update May 10: So it seems that the fix for a pure float-left container is to set width to be auto for the outer container and then display: inline for nested g-section's. If that makes sense then you'll be happy to hear it solves the problem of width aggregation for the inline-blocks!&lt;br /&gt;&lt;br /&gt;I welcome your suggestions - thanks!&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/**&lt;br /&gt; * g-section fundamentally has to clear floats. There are many ways to do this.&lt;br /&gt; * This technique is nice because it doesn't rely on overflow: hidden, which&lt;br /&gt; * has the potential to hide your content in situations where a fixed size&lt;br /&gt; * node takes up too much space (like a big table, or a text input or image.&lt;br /&gt; * Works in Webkit, IE8, and FF3.&lt;br /&gt; */&lt;br /&gt;.g-section {&lt;br /&gt;  width: 100%;&lt;br /&gt;  vertical-align: top;&lt;br /&gt;  display: inline-block;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * IE7-only hack. Nicely IE7 will clear floats with just block display&lt;br /&gt; * and hasLayout.&lt;br /&gt; */&lt;br /&gt;*:first-child+html .g-section {&lt;br /&gt;  display: block;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * IE6 cannot hang with overflow: visible. If we use the IE7 display block&lt;br /&gt; * trick in IE6 we get severe float drop in nested grids.&lt;br /&gt; */&lt;br /&gt;* html .g-section {&lt;br /&gt;  overflow: hidden;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* FF2 can't actually hang with overflow: visible. */&lt;br /&gt;@-moz-document url-prefix() {&lt;br /&gt;  .g-section {&lt;br /&gt;    overflow: hidden;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * FF3 now needs to be reset after the previous block which affects it as well.&lt;br /&gt; * We target the tt element in this hack because no one uses it.&lt;br /&gt; */&lt;br /&gt;@-moz-document url-prefix() {&lt;br /&gt;  .g-section,tt:default {&lt;br /&gt;    overflow: visible;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Forces "hasLayout" fixing a gamut of bugs in &lt;= IE7. */&lt;br /&gt;.g-section,&lt;br /&gt;.g-unit {&lt;br /&gt;  zoom: 1;&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-6957776718939181417?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2009/05/clearing-floats-without-overflow-hidden.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>5</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-2097943747368184874</guid><pubDate>Thu, 01 Jan 2009 00:10:00 +0000</pubDate><atom:updated>2008-12-31T16:11:22.832-08:00</atom:updated><title>How do you know it's NYE on your gnu/linux box?</title><description>4562.736000] Clock: inserting leap second 23:59:60 UTC&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-2097943747368184874?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2008/12/how-do-you-know-its-nye-on-your.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-4029387932275881542</guid><pubDate>Tue, 30 Dec 2008 18:20:00 +0000</pubDate><atom:updated>2008-12-31T16:19:21.019-08:00</atom:updated><title>X3: Reunion for Linux Unboxing!</title><description>There aren't many times that the words linux and game end up in the same sentence with the word wow, but &lt;a href="http://www.linuxgamepublishing.com/"&gt;LinuxGamePublishing&lt;/a&gt; has released a special edition of X3 for linux, and not years after the original release of the game. This is quite a feat of engineering, not to mention an expression of dedication and passion. I wonder how many GNU/Linux users out there played elite? My hunch is a bunch. How I never came across the X series in my many searches for "games like elite" I'll never know, but this year I got myself the box set for Christmas and I'm proud to present the unboxing pictures to all you nerds out there ;)&lt;br /&gt;&lt;br /&gt;So without further ado, the pics (I'll post something like a review at some point too).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_fJAG3DJ_MAg/SVpkvdMUXuI/AAAAAAAABUU/suFsY0FtkYk/s800/123020081132.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 800px; height: 600px;" src="http://lh4.ggpht.com/_fJAG3DJ_MAg/SVpkvdMUXuI/AAAAAAAABUU/suFsY0FtkYk/s800/123020081132.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_fJAG3DJ_MAg/SVpllasoWBI/AAAAAAAABUc/u0ruS_nAUGQ/s800/123020081133.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 800px; height: 600px;" src="http://lh4.ggpht.com/_fJAG3DJ_MAg/SVpllasoWBI/AAAAAAAABUc/u0ruS_nAUGQ/s800/123020081133.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_fJAG3DJ_MAg/SVpkExWgrXI/AAAAAAAABVE/D8WB7dBoRpc/s640/123020081129.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 480px; height: 640px;" src="http://lh6.ggpht.com/_fJAG3DJ_MAg/SVpkExWgrXI/AAAAAAAABVE/D8WB7dBoRpc/s640/123020081129.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_fJAG3DJ_MAg/SVpjyItjyWI/AAAAAAAABVA/EyhelXHHbx8/s640/123020081128.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 480px; height: 640px;" src="http://lh6.ggpht.com/_fJAG3DJ_MAg/SVpjyItjyWI/AAAAAAAABVA/EyhelXHHbx8/s640/123020081128.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-4029387932275881542?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2008/12/x3-reunion-for-linux-unboxing.html</link><author>noreply@blogger.com (elsigh)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_fJAG3DJ_MAg/SVpkvdMUXuI/AAAAAAAABUU/suFsY0FtkYk/s72-c/123020081132.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-7552141328633378484</guid><pubDate>Fri, 03 Oct 2008 21:56:00 +0000</pubDate><atom:updated>2008-10-03T14:57:47.572-07:00</atom:updated><title>Why I Hate Flash</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.onthafly.com/uploaded_images/flash-720243.png"&gt;&lt;img style="display:block; margin:0px; cursor:pointer; cursor:hand;" src="http://blog.onthafly.com/uploaded_images/flash-720242.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-7552141328633378484?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2008/10/why-i-hate-flash.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-7085442522287772745</guid><pubDate>Wed, 23 Apr 2008 02:04:00 +0000</pubDate><atom:updated>2008-04-22T19:13:08.543-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>browser</category><title>Opera Revisited</title><description>After having played with FF3-beta5 for the last couple of days I can't believe I tolerated FF2 for normal web browsing. Granted, I use the Firebug plugin, but I had come to accept 5-10 seconds waits for opening new windows and 2-4 seconds of latency in switching tabs. Unfortunately, Firebug for FF3, and FF3 in general, is buggy/crash-prone on linux. &lt;br /&gt;So here I am trying Opera again after a couple of years. I still have FF3 running with Firebug &lt;br /&gt;for web development purposes but I think I refuse to use FF2 anymore.&lt;br /&gt;So I'm about to try Konqueror too. All in all - not liking it. Speed dial is useless compared to the bookmark bar. The snapshot mini-page is not something I'm keen on at all - I can't actually read that stuff, and I don't need visual recognition&lt;br /&gt;in grand scale to know which one is my email. The default ui widgets just look lame now too compared to FF3's nice slight rounding.&lt;br /&gt;I probably would continue using Opera for awhile if it could have at least imported my bookmarks.html file from Firefox correctly. I ended up with an empty directory called "Netscape Bookmarks". =/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-7085442522287772745?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2008/04/opera-revisited.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-4692351340841186736</guid><pubDate>Mon, 07 Apr 2008 06:29:00 +0000</pubDate><atom:updated>2008-04-06T23:30:40.159-07:00</atom:updated><title>OTMFF - The Webapp is coming</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.onthafly.com/uploaded_images/otf-logo-large-793322.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://blog.onthafly.com/uploaded_images/otf-logo-large-793319.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-4692351340841186736?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2008/04/otmff-webapp-is-coming.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-9114444428164825139</guid><pubDate>Fri, 07 Mar 2008 19:40:00 +0000</pubDate><atom:updated>2008-03-07T20:55:48.835-08:00</atom:updated><title>SXSWi 2008 - Filching Design Panel</title><description>Luke Wrobleski, Skip Baney, and myself are hosting a panel at SXSW this year titled "Filching Design" - it's going to be lots of fun and hopefully contentious too. Here's the intro slides, still being edited, tweaked...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?docid=d4c76s7_3gg9tzkht" frameborder="0" height="342" width="410"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-9114444428164825139?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2008/03/sxswi-2008-filching-design-panel.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6438140762543120230.post-8000205343076888529</guid><pubDate>Wed, 14 Nov 2007 00:47:00 +0000</pubDate><atom:updated>2007-11-13T16:49:13.647-08:00</atom:updated><title>Windows Error</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://onthafly.com/uploaded_images/img_1151-702719.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://onthafly.com/uploaded_images/img_1151-702713.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I had used vncviewer to test things out on a shared windows box. I came back to my desk to find this beauty on the screen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6438140762543120230-8000205343076888529?l=www.idreamofuni.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.idreamofuni.com/2007/11/windows-error.html</link><author>noreply@blogger.com (elsigh)</author><thr:total>0</thr:total></item></channel></rss>