Infrequently Noted

Alex Russell on browsers, standards, and the process of progress.

OSCON 2009 Call For Papers Is Open!

I'm a bit tardy on this, but the OSCON 2009 Call For Papers is now open.

In the past couple of years the shift from desktop-centric to a more web-centric OSCON has continued to make the conference useful and engaging, and great work on topics like JavaScript/Ajax performance, Dojo, Comet, and many of the emerging back-end bits of infrastructure that make it all go have made my yearly trip to Portland worthwhile.

Great talks have gotten lost from the JavaScript/web track in years past because they've missed the submission deadline, so if you're hacking on something fascinating, now's the time to get that proposal in. Make sure you flag it with the right track when you submit (javascript, ajax, web, or whatever they're calling it this year), and don't hesitate to ping me if you're unsure about whether or not your talk got slotted correctly for the review process.

Census 2: More Than Just A Pretty Graph

Benchmarks are hard, particularly for complex systems. As a result, the most hotly contested benchmarks tend not to be representative of what makes systems faster for real users. Does another 10% on TPC really matter to most web developers? And should we really pay any attention to how any JS VM does on synthetic language benchmarks?

Maybe.

These things matter only in regards to how well they represent end-user workloads and how trustworthy their findings are. The first is much harder than the second, and end-to-end benchmarking is pretty much the only way to get there. As a result, sites like Tom's Hardware focus on application-level benchmarks while still publishing "low level" numbers. Venerable test suites like SPECint have even moved toward running "full stack" style benchmarks which may emphasize a particular workload but are broad enough to capture the wider system effects which matter in the real world.

Marketing departments also like small, easily digestible, whole numbers. Saying something like "200% Faster!" sure sounds a lot better than "on a particular test which is part of a larger suite of tests, our system ran in X time vs. Y time for the competitor". Both may be true, but the second statement gives you some context. Preferably even that statement would occur above an actual table of numbers or graphs. Numbers without context are lies waiting to be repeated.

With all of this said, James Ward's Census benchmark makes a valiant stab at a full-stack test of data loading and rendering performance for RIA technologies. Last month Jared dug further into the numbers and found the methodology wanting, but given some IP issues couldn't patch the sources himself. Since I wasn't encumbered in the same way I thought I might as well try my hand at it, but after hours of attempting to get the sources to build, I finally gave up and decided to re-write the tests. The result is Census 2.

There are several goals of this re-write:

The results so far have been instructive. On smaller data sets HTML wins hands-down for time-to-render, even despite its disadvantage in over-the-wire size. For massive data sets, pagination saves even the most feature-packed of RIA Grids, allowing the Dojo Grid to best even XSLT and a more compact JSON syntax. Of similar interest is the delta between page cycle times on modern browsers vs their predecessors. Flex can have a relatively even performance curve over host browsers, but the difference between browsers today is simply stunning.

Given the lack of an out-of-the-box paginating data store for Flex, RIAs built on that stack seem beholden to either Adobe's LCDS licensing or are left to build ad-hoc pagination into apps by hand to get reasonable performance for data-rich business applications. James Ward has already exchanged some mail with me on this topic and it's my hope that we can show how to do pagination in Flex without needing LCDS in the near future.

The tests aren't complete. There's still work to do to get some of the SOAP and AMF tests working again. If you have ideas about how to get this done w/o introducing a gigantic harball of a Java toolchain, I'm all ears. Also on the TODO list is an AppEngine app for recording and analyzing test runs so that we can say something interesting about performance on various browsers.

Census 2 is very much an open source project and so if you'd like to get your library or technology tested, please don't hesitate to send me mail or, better yet, attach patches to the Bug Tracker.

Update: I failed to mention earlier that one of the largest changes in C2 vs. Census is that we report full page cycle times. Instead of reporting just the "internal" timings of an RIA which has been fully boostrapped, the full page times report the full time from page loading to when the output is responsive to user action. This keeps JavaScript frameworks (or even Flex) from omitting from the reports the price that users pay to download their (often sizable) infrastructure. There's more work to do in reporting overall sizes and times ("bandwidth" numbers don't report gzipped sizes, e.g.), but if you want the skinny on real performance, scroll down to the red bars. That's where the action is.

Notes To A Future Self: Getting Productive On WinXP

Windows XP is truly a horrid desktop OS, particularly if you're a programmer. The default install contains roughly nothing useful, and even getting a development environment going requires grabbing the likes of cygwin, Visual Studio, and a zillion patches from Microsoft.

The truly dispiriting thing, though, is how badly cmd.exe still sucks. I fully admit that my personal programming proclivities are not normal, but to be reasonably productive I need a Unix-like shell, a terminal that works (can be resized, has reasonable VT100 emulation, etc.), and the ability to fix the "Caps Lock" key to do the right thing – namely, have it fire the "Ctrl" key instead. This is all relatively straightforward to do on Linux and OS X. Here's how I got it done with Windows:

Do the MSFT Patch Dance

Make coffee?

Install Cygwin

We've all done it a thousand times. This'll make 1001. It's kind of comforting that the Cygwin home page hasn't changed perceptibly in nearly a decade.

Get SharpKeys

Instead of fugly registry hacks, SharpKeys allows you to map the dreaded and useless "Caps Lock" key to something actually useful. If your key-mapping preferences swing some other way, SharpKeys can likely handle that too. Not sure why it's not built into Windows, frankly.

Set Up Puttycyg

Having cygwin is nice, but having a terrible shell with Cygwin? Not so nice. Enter Puttycyg, a small hack on the venerable Putty SSH client for windows that provides an option to launch a local Cygwin session in lieu of connecting to another system.

Once I extracted it and ensured the Puttycyg directory was in my windows PATH, I created a desktop shortcut to the putty.exe included in the distribution and configured the shortcut (right-click) to read:

"C:\Documents and Settings\slightlyoff\Desktop\puttycyg\putty.exe" -cygterm -

And then set the "Shortcut key:" to be:

Ctrl + Alt + T

Now, whenever I want a fully functional shell from my desktop, I just hit that key combination and it All Works (TM).

Joining Google

Starting next month, I'll be a Googler.

To my great surprise, I've been at SitePen two and a half years. It has been nothing short of wonderful which may explain why it doesn't feel like it has been that long. When I look back at what we've accomplished it's also surprising that we've been able to do all if it in such a short timeframe. Between the huge client projects and re-building Dojo from the ground up, it has been busy bordering on nutty.

It already makes me sad to leave behind working with the SitePen crew, many of whom I helped to hire in and who I count among my closest friends. But I won't be entirely gone. I'll still be contributing to Dojo in my new role, if less frequently. Not that it'll slow the project down any. Pete, Bill, Adam, and Tom have Dojo well in hand and have been driving things forward at a furious rate. Dojo has always been a team effort, and I'm excited about the improvements coming in 1.3. I've gotten a dis-proportionate amount of the credit over the years (and not enough of the blame), and as Dojo evolves from here it will continue to be because companies like SitePen, Uxebu, AOL, and IBM have all been able to contribute to make it happen and that leaders like Pete Higgins have stepped up to lead and teach and learn with the community. My deepest thanks go to Dylan and SitePen for having let me be a part of that process on a daily basis for the last couple of years.

So what could possibly pry me away from such a sweet, sweet gig at SitePen?

In a word, Chrome.

Three years after many of my friends joined Google, the appeal of getting to fix the "web as platform" problem from the inside has finally proven irresistible. There's much to do, and the WebKit platform seems like the best shot that we have (collectively) at forging a future that's not just open, but also markedly better. At SitePen I've had the chance to make the web a better place through Dojo. At Google I'll have a chance to do it from the browser itself.

To the friends I'm leaving, it was a privilege to work with you. To the friends I'm joining, thanks for your trust and faith.

Journey To The Center Of Prop 8

Contents after the jump due to the political (and highly contentious) nature of the content.

A couple of weeks ago I had the great honor to officiate the beautiful civil ceremony that saw my dear friends Caryl and Amy married. As Jennifer and I were married just a bit earlier in the year, we were well aware of the logistical nightmare that is a wedding. Given everything else that was going on in the lives of our friends at the same time, the timing of the wedding seemed likely to give one of them a heart attack...but there really wasn't much of a choice. It's now or potentially never.

The shortened timeframe that many of our friends and colleagues have planned their weddings on is due to the impending vote on California's Prop 8 ballot initiative which seeks to amend the California constitution to take away the right of same-sex couples to marry. For those who haven't been following along closely, earlier this year the California Supreme Court ruled (on a split vote) that Article 1 makes denying the rights of civil marriage to any set of consenting adult citizens illegal.

This makes some people crazy, irate, or both.

Not a week after our friends were married, Jennifer and I were folding laundry while listening to the radio. An episode of the call-in show Forum came on which had the "pro" and "con" sides both represented by articulate advocates. I can't recommend strongly enough that you listen to the broadcast, since it gets to the core arguments for and against Prop 8 in an incisive way.

Fundamentally, the prop-Prop 8 argument (i.e., anti gay marriage) is that it's always been done this way, that gay marriage in some way undermines straight couples and the family structure, and that change would make those who are against gay marriage feel like they are being discriminatory. The first argument I have some sympathy with, particularly as it relates to the appropriateness and timing court decisions. When courts are significantly ahead of public opinion regarding grants of negative rights, the potential to exacerbate existing social frictions is very real. This can harm lots of people on both sides of an issue. That, on balance, however hasn't been sufficient grounds to continue to deny major groups of Americans rights before (think women's suffrage and equal pay). Arguments based on the idea that something has always been done a particular way therefore run counter to the subversive and radical nature of the American system. We base interpretation of the law on argumentation (informed, of course, by common morality). Courts are not allowed to re-enforce the status quo simply to preserve a group's sense of comfort. Groups looking for a particular remedy must provide an argument that squares with the Constitution. It's worth remembering that documents which suggest that everyone is entitled to equal rights under the law aren't common in human history. There is nothing so American, then, as to suggest that what makes us different is that we explicitly recognize the rights of groups not like ourselves. After all, it's the only way to guarantee that those groups respect and preserve the rights of others as well.

That, then, leaves the arguments that gay marriage (or, more broadly, an understanding that being gay is not criminal) will cause the decay of straight relationships and marriages. As a married straight person, I find this argument ridiculous. Let me be very clear on one point: when we as a society recognize the rights of our minorities, we do not create those minorities from whole legal cloth. The people who that Prop 8's supporters want to take rights away from have always existed. It's not as though the recognition that they have been oppressed for centuries somehow makes that continued oppression right. Nor does it suddenly cause more people to "become gay". I've had gay and lesbian friends since high school, and never once has it caused me to question my own sexual orientation. Given the deep conversations I've had with my friends over the years, it's clear to me that being gay is as much of a choice as being black is. Those who oppose civil gay marriage seem to believe that they aren't doing any harm to anyone by denying others rights. What this means to me as someone who grew up in a very conservative part of the country but nevertheless has nearly always had gay and lesbian friends is that Prop 8's supporters are simply denying the harm they have caused to their own communities, families, and co-workers. It is simply willful ignorance to wish away ten percent of the population. Likewise, their argument assumes that some among us don't deserve equal protection because somehow granting them standing in court will diminish the standing of straight couples. I have yet to see any compelling evidence of this.

Lastly, the argument that children will somehow see their parents as bigoted and that parents have a right not to be viewed as prejudicial by their families strikes me as particularly foolish. Progress requires that we change, and change requires that we acknowledge that what came before was not optimal. This is true no matter how you define "progress". To effect real change, abolitionists required an understanding in the populace that slavery was wrong. Similarly, prohibitionists had to build a large constituency against alcohol consumption in order to get the eighteenth amendment passed. In both cases the question of moral right and wrong needed to be settled independently of the question of legal and illegal, but settling that issue was a pre-requisite for social change and legal action. In each case, large sections of the people fundamentally disagreed with the majority well past when the issue appeared "settled" in the law. That is a question of private morality and the fact of the disagreement is what animates our political and legal processes. Without recognized disagreements, how can there ever be progress in any direction?

So the question for those concerned parents comes sharply into focus: do those parents agree with every single other thing taught in public schools? If they don't (and I'm guessing parents who are "Yes on 8" voters aren't big on, say, biology, astronomy, and the scientific method), how do they handle the the other disagreements? What makes this one so much different? Have those parents abdicated the teaching of morality to the public schools on every other front? And why do they assume that they won't be able to exercise their rights to have their kids exempted from teachings they don't agree with on religious grounds?

Lets get to the real center of this: religious groups have a right to be prejudiced against whomever they please. It's a fundamental part of being an American that you are allowed to believe whatever you want. It's not, however, a recognized right that you will never be presented with evidence of your disagreement with others. Hiding behind a cloak of forced ignorance and denial is intellectually and morally dishonest. If the church to which I belong wants to argue that gay marriage is sinful, wrong, or in some other way morally bankrupt, then it needs to have the courage of its convictions to make that case forcefully in the world as a moral and ethical case. Isn't it the church's job to convert those who disagree with it to the church's way of viewing the world and in so doing change their behavior? If religious organizations think that it's wrong for gays and lesbians to practice their rights under the law, it's incumbent of the church to convince gays and lesbians of that, not the rest of us.

When the church over-reaches and instead attempts to legislate from the pulpit, both the genius of the constitution and the authority of the church are jeopardized. Arguing the civil implications on the moral grounds is simply inconsistent with how our law operates, and the church knows it. Worse, what if the church were to win such a fight on that basis? Who then interprets where to go from there? Lots of faiths with many differing views all reject religious gay marriage...which of those faiths should be consulted next time? All of them? What if they don't agree? It's a far better thing that the Church understand the distinction between church and state in order to preserve the independence of its message from the corrupting influence of power. History is crystal clear on this point.

More to the point, though, if you wish to be prejudiced why should it somehow cause distress that others disagree? Isn't the mere fact of the disagreement an opportunity to make a case? And if the argument doesn't hold up for the majority of the population, doesn't it deserve to loose? For churches and communities of faith to attempt to argue that the institution of holy matrimony (as distinct from civil marriage) is in any way affected by the equal protection provisions of the law is dishonest and misrepresents their interest in the political process. To argue that it would be best if society simply didn't recognize the difference between the law and what the church teaches is also disingenuous, dishonest, and dangerous to the church.

I cannot support Prop 8, and I urge you not to either. Please vote "no". The proponents have not fielded good arguments that show harm and have resorted to incredulous arguments which bear no resemblance to the truth. The opponents have sought and won the protection of the law. Taking that away – which is what is on the ballot – is unconscionable.