Proud for (a) Change
November 5th, 2008It seems a bit unnecessary to blog about how I feel about Barack Obama getting elected. The momentous nature of this election is glaringly obvious and is surely amplifying the particular sense of elation or disappointment that we each feel. Thus, while my feelings may be individually unique, they are by no means extraordinary. Nonetheless …
The one overwhelming emotion I have is one of pride. I am unspeakably proud to have helped elect our nation’s first African-American president. All the more so because my vote, like so many others, was not cast because of his race or in spite of it, but with no regard given to it at all. Obama’s presidential legacy is not yet started, but his ability to ascend to the most powerful office in world, based solely on his character, charisma, and qualifications, has already broken a barrier that has existed for over two centuries. Americans have lived with the implicit hypocrisy in our “all men created equal” credo as a course and gritty thread running through the fabric of our society for too long. Now, perhaps, it can finally start to be unraveled. Long after we bring our wars to a close, stabilize our economy, and repair the damage done to our foreign relations, the reverberations of this moment, this choice, will continue to be felt.
This election also leaves me, against my better judgement, foolishly hopeful. In the 20+ years I’ve been eligible to vote, I have never before really believed that we had elected the right person for the job. This time it’s different. My only regret is that Obama will be stepping into a situation where the most that can be hoped for is to undo the damage done by the previous administration. It is sobering to think of what could have been had Obama been elected eight years ago, and a sad testament to George W. Bush’s presidency that his most important legacy will be the distrust and disappointment he instilled that led Americans to finally make a bold and courageous choice for their next leader.
Which leads me to the last emotion - uncertainty. Hope and optimism are essential ingredients for greatness. But they are are equally necessary for crushing disappointment. Will Obama live up to the hype and expectations? Or will he will bog down due to lack of inexperience and inability to follow through on the promise shown in his election campaign? Only time will tell. I certainly hope he excels. Our country needs it more desperately than any of us is truly aware. For now however, I am content to enjoy this first, bold, step in the right direction.
Removing Google’s Search Box On Your iGoogle Homepage
October 17th, 2008
The “iGoogle Search Toggle” GreaseMonkey script solves a problem that’s annoyed me for a long time.
Google’s custom home page feature, iGoogle, is great, except that the top 1/3rd of the page is occupied by a giant logo and search box. This is redundant with the search box that your browser already provides, and takes up a lot of screen real estate that is better spent showing you your actual content. So the above script simply hides that whole area of the page and replaces it with an unobtrusive little toggle button that will open it on the rare occasion you might need it. Click the thumbnail on the right for a screenshot of what it looks like.
Enjoy.
Correction: Web 2.0 Sucks For Reviews
September 24th, 2008There’s an interesting phenomenon taking place lately that I find a bit disturbing. It has to do with how consumers are leveraging their newly discovered online powers of opinion. In principle, I think empowering people by given them tools to communicate with one another is a good thing - people should be able to be heard, and share ideas and comments on everything, including the products they chose to buy or not. But when it comes to software applications and services, reviewers are all to ignorant of how permanent their actions are compared to how rapidly what they’re reviewing can change.
Take for example the smackdown currently being handed to EA’s “Spore” on Amazon.com. As of this writing it has 3,000 ratings, 2,500 of which are one-star reviews filed by users upset by the copy protection software it uses. The majority of these reviews come from users who likely haven’t played the game, mind you, they are merely protesting the copy-protection system they’ve heard about. I’m not saying DRM protection is a good thing, but it does seem like the punishment here is a bit excessive. Spore is doomed to never rise much higher than “two-something star” rating no matter what EA does to improve it or address their users concerns. This would require receiving nearly 2,000 more 5-star reviews, which is over double the total number of reviews that the most popular video game ever made (World of Warcraft) has received in the four years it’s been listed on Amazon.
The first Spore review, alone, has been marked as “helpful” by over 6,500 people, most of whom are presumably deciding not to purchase the game. This in spite of the fact that the review is no longer accurate (EA revised the Spore DRM less than two weeks after the game’s release.) That’s $325,000 in lost revenue. From a single review. Ouch.
Amazon’s review system, like nearly all such systems on the web, is designed to let people review immutable things like books, CDs, or even Tuscan Milk - products that don’t change over time. But software is dynamic - it can be updated and improved, even after you bought it. And this is something that simply isn’t taken into account; not by sites that let you comment on products, or forums, or any other myriad channels we users pay attention to. What’s needed is a way to temper the relevence of reviews and comments based on how a product evolves over time. In the meantime, it would behoove people to be a little more circumspect in what they review and how they review it.
Javascript UUID Function
September 5th, 2008[Update 2008-11-16: randomUUID.js and the randomUUID() method have been renamed to Math.uuid.js and Math.uuid(), respectively.]
Here’s a little JavaScript treat: Math.uuid.js is a function for generating different flavors of UUIDs in JavaScript. The function supports RFC 4122-compliant UUIDs (or GUIDS), like this:
AFF147E4-5BB1-448E-B55D-0A834ADE3124
… as well as non-standard random IDs of arbitrary length and radix. For examples of the types of IDs it can generate, or to see performance data, check out the Math.uuid.js Test page.
I put this together after discovering that nobody had published a really thin javascript implementation for generating UUIDs. Googling around turns up several decent scripts, but all of these suffered from one drawback or another (IMHO). One common problem results from trying to produce “version 1″ ids, which the RFC defines in a way that is supposed to guarantee the uniqueness of the ID. But javascript doesn’t have an API for getting a guaranteed-unique anything - the best you can do is use Math.random() as a hack workaround which, strictly speaking, shouldn’t be used when uniqueness must be guaranteed. Using JavaScript to generate a version 1 UUID could be construed as misleading.
The more correct solution is to do what Math.uuid.js does - create “version 4″ ids, which are defined as randomly generated (see RFC 4142, section 4.4). This avoids making an unfulfilled promise of universal uniqueness, while allowing for much simpler code. Also, in javascript where Math.random() has to be used for UUID generation, the theoretical uniqueness of these ids is better than version 1 implementations since all 122 bits of field data are randomly generated. That makes for a staggering 5.3 x 1036 possible ids. If every person on the planet filled up a terabyte hard drive with nothing but random UUIDs, there would only be a one in 7 trillion chance that two of the UUIDs would be the same. That’s the theory.
The practice is probably a little different. The uniqueness depends on how random the numbers generated by Math.random() are. Generating truly random numbers is a notoriously tricky problem, solved in different (imperfect) ways across browser platforms and OSes. It’s difficult to say for sure what the real-world uniqueness of these numbers ends up being, but I suspect it’s more than sufficient for most purposes. Regardless, this is a weakness that all javascript UUID generators will be subject to, unless they rely on an externally-provided unique value. For example, one could use AJAX to fetch UUIDs generated by a site like http://www.uuidgenerator.com/, but that has it’s own set of issues.