I was chatting with Mike Vernal at lunch today about the various reactions to Microsoft's Silverlight project and he mentioned that he hadn't seen much insightful analysis or critiques beyond general kudos and praise from the blogosphere. Since I'd seen quite a few posts that went beyond the kind of gushing you see in posts like Robert Scoble's Microsoft "rebooted the Web" yesterday or TechCrunch's Silverlight: The Web Just Got Richer, I thought Mike and my readers would appreciate some pointers to responses that contained a little more technical meat from seasoned Web developers. 

In his post Frustration with RIA platforms Julien Couvreur writes

There has been a recent flurry of announcements around rich internet applications (RIA) recently, from Adobe (Apollo, open-sourcing the Flex SDK and Tamarin), Microsoft (Silverlight v1.1) and Sun (JavaFX). They seem to battle plain AJAX on three main fronts: richer rendering capabilities, improved performance, and a comprehensive set of designer and developer tools.
But they do little to address the native problems of the web.
Here are some examples:

  • integrating web sites and services,
  • cross-domain mashups with private data,
  • access control, identity and charging for web services,
  • user-driven website customization and extension, safe client-side composition.

In other words, the recent wave of RIA platforms make things look nicer and run faster, but we are still left off with the non-semantic markup, the page model, and the same-domain policy.

Grant Skinner writes an interesting analysis from the perspective of a Flash developer entitled A Flash of Silverlight? My Analysis which is excerpted below

By now, everyone has heard of Silverlight (previously WPF/E), Microsoft's answer to the Flash player...From my perspective, the discussion can be broken into four categories: opportunity, runtime, tools, and intent.

Flash may not have the gold rush opportunities of Silverlight, but it is a very entrenched technology (98% installed base, 85%+ for Flash Player 9) that will continue to expand its reach, and offer stable growth in web interactive (and beyond) over a long period. There's money to be made in Silverlight development right now, but its future is less certain once MS stops throwing money at it. However, it is worth considering that the skills you acquire using Silverlight will be fully applicable to other Microsoft platforms.

Silverlight has a lot of potential in this area if Microsoft can innovate. Unfortunately, I have yet to see evidence that they can, and Adobe has a massive lead, both in terms of capabilities and adoption.

Microsoft can and will build a better developer toolset, and provide a better story for tool integration. However their unwillingness to support Macs, and their inability to truly understand creativity or designers will be their Achilles heel. Adobe has a deep cultural understanding of the creative process, and experience with cross-platform support that Microsoft can't match

Cross-platform support for Silverlight is not in Microsoft's best interests if they kill Flash. Neither is continued innovation. As a long time Mac user, I really don't trust Microsoft's intentions, but I do welcome the pressure Silverlight places on Adobe to continue innovating

And from Mike Shaver of Mozilla there is the high cost of some free tools which contains the following gem

If you choose a platform that needs tools, if you give up the viral soft collaboration of View Source and copy-and-paste mashups and being able to jam jQuery in the hole that used to have Prototype in it, you lose what gave the web its distributed evolution and incrementalism. You lose what made the web great, and what made the web win. If someone tells you that their platform is the web, only better, there is a very easy test that you can use:

Is this the web?

When the tool spits out some bundle of shining Deployment-Ready Code Artifact, do you get something that can be mashed up, styled, scripted, indexed by search engines, read aloud by screen readers, read by humans, customized with greasemonkey, reformatted for mobile devices, machine-translated, excerpted, transcluded, edited live with tools like Firebug? Or do you get a chunk of dead code with some scripted frills about the edges, frozen in time and space, until you need to update it later and have to figure out how to get the same tool setup you had before, and hope that the platform is still getting security and feature updates? (I’m talking to you, pre-VB.NET Visual Basic developers.)
The web can eat toolchain bait like this for breakfast. And, if Mozilla has anything to say about it, it will do just that. You won’t have to give up the web to work offline any more, or programmable 2D graphics, etc. Soon you’ll have the power of 3D and great desktop/application integration as well, via projects like canvas3d and registration of content handlers, and you’ll have it in a way that’s built on open specifications and a tool ecosystem that isn’t a monoculture. Why wouldn’t you choose the web, given its record and power and openness?

All three posts contains some ideas I agree with and many I disagree with. I agree with Julien Couvreur that at the end of the day we still don't have a good solutions to many of the problems facing the Web as a platform. RIA platforms concentrating on how to make things shinier and prettier while writing less code are distracting us from many of the problems that still need to be solved to lead the Web to its true potential. Grant Skinner's post reads to me as if he's in denial. Everywhere he grudgingly gives Microsoft Silverlight a compliment he follows up with an insult that questions the company's competence and assumes that the platform will not fulfill its initial promise. Mike Shaver has a lot of good points in his post especially with regards to RIA platforms ensuring that they play nicely with everything that makes the Web so great in the first place. However I can't help but smile at the final comments in his post that end up sounding like he is pitching Mozilla's proprietary approaches to building Rich Internet Applications as alternatives to the proprietary approaches coming from Adobe, Microsoft and Sun.  :) 


Categories: Web Development

I saw Spider-Man 3 this weekend and it probably counts as the worst movie in what has been a pretty good series. The action scenes were good especially the climactic battle but the plot and story in-between the fight scenes was almost non-existent. There were a number of scenes that were so cheesy I felt embarrassed for the actors. The most accurate review of the movie I saw was Richard Roeper's review in the Chicago Sun Times where he wrote

If you walked out of the exhilarating triumph that was “Spider-Man 2” and immediately started counting the days until the release of Spidey Trois, there’s probably nothing I can say that will dissuade you from racing to the multiplex for the eagerly anticipated third installment — but I gotta try, anyway, so here goes.

Kirsten Dunst sings in this movie, more than once.

At one point Peter Parker undergoes a personality and style makeover that makes him look and act like he’s the unknown third brother from “A Night at the Roxbury.”
and a slimy creepy crawler has emerged from the space rock and is now residing in Peter’s apartment. The creepy crawler affixes itself to Peter’s face one night and enters his being, turning him into a darker, more aggressive personality who favors an all-black costume as Spidey — and a whole new ’tude as Peter.

This leads to one of the most bizarre montages in superhero movie history, with Peter changing his hair, buying a European suit and strutting down Manhattan like some clueless, low-rent gigolo, pointing and winking at women who look at him with disgust. On the outs with Mary Jane because he’s been insensitive to her career setbacks, Peter goes on a date with Gwen (Bryce Dallas Howard), one of Spider-Man’s many rescue cases. They show up at the jazz club where Mary Jane works as a singing waitress, and within seconds, Peter is banging away at the piano and dancing all over the joint like Jim Carrey in “The Mask.” It’s very goofy.

The Night at the Roxbury inspired scenes were so bad that a couple of folks walked out of the movie. Unfortunately, for them the final battle made up for the cheesiness we were forced to sit through earlier in the movie.


Categories: Movie Review

A few years ago Joel Spolsky wrote a widely quoted blog post which stated

A very senior Microsoft developer who moved to Google told me that Google works and thinks at a higher level of abstraction than Microsoft. "Google uses Bayesian filtering the way Microsoft uses the if statement," he said. That's true. Google also uses full-text-search-of-the-entire-Internet the way Microsoft uses little tables that list what error IDs correspond to which help text. Look at how Google does spell checking: it's not based on dictionaries; it's based on word usage statistics of the entire Internet, which is why Google knows how to correct my name, misspelled, and Microsoft Word doesn't.

This morning I fired up my favorite RSS reader and saw the danah boyd's entry entitled quality of Google searches? where she pointed out

It's also annoying that they've stopped correcting my atrocious spelling. I mean, it's all fine and well that lots of people in the blogosphere can't spell in exactly the same way that i can't spell, but the #1 type of search i do everyday is spell check. I throw something god-awful like Cziskentmihalyi into the engine knowing that it'll return Csikszentmihalyi. This still works quite well for names but it's stopped working for lots of regular words that i just can't spell to save my life. How pathetic is it that i've started opening up Word for the little red squigglies instead of relying on search? Or maybe both practices are weird...

This seems like a predictable problem. There are lots of commonly misspelled words and in many online communities people have simply given up on correct spelling (heck, I've now grown used to the fact that computer geeks have decided that the correct spelling of ridiculous is rediculous). Thus it is quite likely that a frequently misspelled word eventually occurs so much in the wild that it is considered a valid word. Maybe Google needs some if statements in their code after all, instead of blindly trusting the popularity contest that is Bayesian analysis. :)

The interesting thing is that one could argue that if a particular spelling of a word becomes popular then it automatically is "correct" since that is how the English language has evolved over time anyway.


If like me your head is spinning from all the announcements of proprietary "AJAX killers" out there then you probably were still too busy trying to digest Silverlight to even have heard that Sun's announced it's own "AJAX killer" and Flash competitor named Java FX.

Don Park has a good post which serves as a good starting point to grok the meat of this announcement titled Inside JavaFX where he writes

So what is JavaFX? This is what it looks like:

import javafx.ui.*;

Frame {
  title: "Hello World JavaFX"
  width: 20
  height: 50
  content: Label {
    text: "Hello World"
  visible: true

As you can see, JavaFX script (*.fx) is basically JSON-like version of XAML which can be either compiled into Java bytecode or run as is using a java-based JavaFX player. Since JavaFX is just java, it can run as applets in browsers, midlets on mobiles, and applications on WebStart.

Sam Ruby has a good follow up to Don's post titled JavaFX Script where he describes some of the innovations and shortcomings of the platform he has noticed in his initial observations.

It looks like Web developers are getting spoiled for choice this summer; Sun vs. Microsoft vs. Adobe vs. Web Standards.


From the announcement on the Gamerscore blog entitled Windows Live Messenger Comes to Xbox LIVE, Uniting Friends and Families on the TV, PC and Mobile Phone we learn

Beginning May 9th, Xbox LIVE, the most interactive gaming and social network available, is once again expanding with the arrival of Windows Live Messenger on Xbox 360. This new feature, available as part of the Xbox 360 Spring Update, will connect people across Xbox 360 consoles, Windows PCs and Windows Mobile devices. Xbox LIVE members will be able to socialize with people on their unified friends list, including their contacts from the more than 260 million Windows Live Messengers across the world. With Instant Messenger, Xbox LIVE members will have the ability to:
  • Chat via instant messenger with up to 20 contacts in a single conversation, and have up to six different conversations at the same time with people on PCs, mobile phones and other Xbox 360 consoles.
  • Instant message while playing games, listening to music or watching movies or TV shows downloaded from Xbox LIVE Marketplace.
  • View at a glance if friends on Windows Live Messenger have gamertags and add them to a unified friends list.

Folks on my team have been working on this integration for a while and I was even roped in a couple of times. I'm glad to see it finally in the hands of our users. This is a nice bit of synergy from Windows Live and XBox Live.

After I blogged about this announcement the first time around, Andrew who is both an XBox Live and Windows Live messenger user voiced some privacy concerns in his post One of my Many Irrational fears... where he wrote

My problem with the new Spring update for the XBox 360 lies in the Windows Live Messenger integration. It's been commented elsewhere that your contacts will be able to see what games you're playing, your gamertag, etc.

Well I have people, parent, family, whatever that I do not want seeing what I am playing at any one point in the day - this is why I didn't enable the ability to show what I was listening to on my Windows Media Player when that became available.

In fact, I quite like the thought that I can do whatever the hell I want in my leisure time without everyone being notified of it.
In fact you will find a comment from me regarding my displeasure on this on Dare's blog (no response), I did post it to Ozymandias' blog (disappeared), and Gamerscoreblog (no response).

These are three of the more accessible blogs from people who are involved in this decision and none of them has decided it was worth responding to my questions. Specifically I do ask if there will be an opt out - something that the Live Messenger team gave people in regards to Windows Spaces - as Dare mentioned.

Andrew has raised a valid concern and immediately after I saw his post I talked to the PM who worked on the feature to see if there was a way to opt out of the feature. I got the answer and I've been waiting until the Spring XBox Live update was out before talking about it in detail. Now that it is out, I can address how to opt out of this feature if you have privacy concerns about it: 

The feature is enabled by default once you opt-in to link your .NET Passport account/Windows Live ID with your XBox Live account. To disable the feature after you have linked your IDs, you need to turn off the option to automatically sign-in to Messenger when logged into XBox Live. The steps to do this from XBox Live are

  1. click on profile
  2. click on 'auto sign in'
  3. there is an xbox and a messenger section. Click disable on the messenger option

Voila, and that's it. Your leisure time privacy is preserved.


Categories: Windows Live

In recent months it has become clear to me that the largest Web companies have become quite serious about providing "web platforms"that Web developers can integrate with or build upon. Amazon (http://aws.amazon.com), Google (http://code.google.com), Yahoo (http://developer.yahoo.com) and Microsoft (http://dev.live.com) all provide online destinations where Web developers can learn how to use their Web services or integrate with their AJAX widget platforms. The problem with building a platform is that providing Web services and writing APIs is the easy part. The hard part is hard work of supporting developers who have built on your platform with proper documentation, prompt tech support, and ensuring backwards compatibility when new revisions of the platform are delivered. Today I feel like riffing on that last point; versioning and backwards compatibility.

Maintaining backwards compatibility and being mindful of forwards compatibility is one of the biggest design problems that faces platform vendors. So far, there have been numerous examples of Web companies that provide APIs failing to realize how important stability and backwards compatibility when providing a platform. I've seen numerous examples of breaking changes in APIs providing by Web companies including the Google Adwords API (shutting down old endpoints with new version), TypePad Atom feeds (switching the feed format to a new incompatible version thus breaking feed readers), del.icio.us API (changing the Web service URL and the security protocol) and Amazon Web Services (changing what is added to a shopping cart when an item is added via its Amazon specific ID) among many others. Some of these changes were necessary due to security concerns while others could have been prevented with better up front design and decision making by the platform vendor. However in all of these cases, developers that had taken a bet on the platform had to scramble to check that their applications still worked and patch/redistribute them if they didn't. That is bad. One of the primary goals of a platform vendor is to ensure that the lives of developers on their platform is as easy and smooth as possible. This means releasing a new version of the platform should not cause developers who have taken a bet on the platform to have to rewrite their code.  

In the past I've written lengthy, and fairly complex articles about versioning and XML data formats. These days, I've boiled down my guidance on Web service versioning to one phrase; Cool URIs Don't Change. This simple philosophy is actually all you need to consider when designing your RESTful Web service. You apply it in the following way

  1. The Web service end point (i.e. URL) should not change. Changing the actual service end point is bad (e.g. http://del.icio.us/api/posts/get to https://api.del.icio.us/v1/posts/get) instead you should design your URI space with the knowledge that there will be multiple versions of the protocol.
  2. The types of messages returned by the end point should not change. Thus changing the data format of the service (e.g. changing from RSS to Atom or Atom 0.3 to Atom 1.0) is a bad idea. Thus you should have a strategy for supporting multiple formats and partition your URI space accordingly.
  3. The behavior of the end point should not change. This is the trickiest one to follow but the one that your developers will appreciate the most. New versions of the API should not change the behavior of operations previously defined at that end point. One way to reach this ideal is to partition your URI space in a versioned manner (e.g. http://www.example.com/api/v1/get-stuff in version 1 and  http://www.example.com/api/v2/get-stuff in version 2) and then never change the behavior of the old bits or at the very least keep that behavior around as long as possible.

That's it. That's all you really need to know about versioning and REST Web services. The rest is mainly finicky details that are primarily dependent on the specifics of the platform  and the ease with which the developers on the platform can respond to breaking changes. The harder it is for them to change, the higher the bar should be for breaking changes. For example, for Windows Live Messenger we have a high bar for breaking changes in the protocol that the server uses to talk to the desktop client because we know for a fact that not only does it take a surprisingly long time for the majority of users to switch to a new version of the client, there are users who actually cannot upgrade for a variety of reasons (e.g. new versions of desktop client doesn't work on their OS, corporate users or students who can't install software on the PC without permission, etc). On the other hand, when it comes to the internal SOAP APIs that are used to communicate between the Contacts platform and Windows Live properties such as Windows Live Spaces, Windows Live Hotmail and so on the bar for breaking changes is slightly lower because (i) they are Web applications and the (ii) set of consumers of the API is limited.

Ensuring that a Web platform has a strategy for handling backwards compatibility issues is just as important in the Web 2.0 world as it is on the desktop. Platform vendors who think otherwise are in for a rude awakening if they want adoption of their Web platform by serious developers.


May 8, 2007
@ 04:49 PM

It's been a while since I've written about RSS Bandit. In fact, I haven't written anything since we released v1.5.0.10 formerly codenamed Jubilee about two months ago. Between getting my work affairs in order to so I could travel to Nigeria, spending a few weeks there and then coming back to catch up on work, I haven't had much time for RSS Bandit. However I can now see the light at the end of the tunnel and will be able to start writing code again by this weekend.

Since we shipped the release, there have been two major issues reported which Torsten has been working on. In his post RSS Bandit and the 100% CPU issue the issue of the application using 100% CPU is addressed thusly 

Today I could track down an annoying issue: on some installations of the newer version of RSS Bandit (starting with the first betas of 1.5.0.x) it starts using 100%CPU time on a thread. As we started also to use lucene.NET with this new release I guessed it was a related issue, I was right. But as we run into multiple issues with lucene it was not obvious as a separate problem. So here it is:

We used a slightly modified version of lucene.NET to include the available language dependent analyzers and stopword filters. Before we released, I already fixed some obvious issues I got with e.g. french stemmer. Now we got more with the CJK (Japanese/Korean, bug report) and possibly Chinese analyzers. It looks like it get into a state it never returns. The attached debug callstack was very helpful to got the direction to search for! I found this: TextReader.Read(char[], int, int) was called and the return value checked against -1 only, not against 0 (zero). So I run over all analyzers to find all the places I have to change that code and here it is: the modified lucene.net.dll (zipped, 142K).

A number of users have grabbed the linked DLL and followed Torsten's instructions and fixed the problem. The second issue and solution can be found in the RSS Bandit forum post Beta Bugfix debugging version where Torsten writes

All of you reporting/considering the lucene related indexing errors, please download and try the Beta Bugfix debugging version from http://rssbandit.sourceforge.net/builds/RssBandit.

Report any further issues related to lucene only as responses here (with the usual infos as OS and version etc.).


PS: you should delete the whole folder named "index" in the RSS Bandit user data folder before starting the application, the old index is possibly corrupted because of the errors before.

A number of users have reported getting exception messages related to the Lucene search index and this is due to threading issues we are facing while manipulating the search index. I thought I had handled all the issues in the final release but it seems I was mistaken. If you are an RSS Bandit user who has faced some of these issues, try out the version of the application fix linked above and let us know if the problem goes away.

Both of these fixes will be in an upcoming release of RSS Bandit that will ship at the end of the month. I may add a tiny feature with this bug fix release; adding pagination to newspaper views which is something I've wanted to do for at least a year now.


Categories: RSS Bandit

From the Microsoft press release Microsoft Launches Windows Live Hotmail Worldwide we learn

REDMOND, Wash. — May 6, 2007 — Microsoft Corp. today announced that Windows Live™ Hotmail®, the successor to MSN®
As Windows Live Hotmail begins rolling out on May 7 and continues over the coming days, consumers will be able to visit http://www.hotmail.com to sign up for a new Windows Live Hotmail account. Current MSN Hotmail customers can also update their existing account to Windows Live Hotmail by logging into their account and clicking on the green Join Windows Live Hotmail button.
Hotmail, is launching globally in 36 languages. The most significant upgrade for Hotmail since it pioneered the webmail industry in 1996,
  • Outlook Connector. Available later this month in 11 languages worldwide, the new Microsoft Office Outlook Connector beta will enable people to view and manage their Windows Live Hotmail account from Outlook for free, with full contact, e-mail and e-mail folder synchronization.

Congrats to Omar Shahine, Reeves Little and the rest of the Hotmail crew for getting this release out the door. This has represented man-years of work from the team and lots of us across Windows Live. Also, free access to Hotmail for Outlook users has been long overdue. I'm glad we've finally given this feature to our users. Kudos all around.

You can read more about the release from Omar in his post And We've Shipped and from the Windows Live Hotmail team's blog post It's Here and the Fun Has Only Just Begun

PS: Liveside has some news about the other Windows Live mail product in their post Windows Live Hotmail launches; "Windows Live Mail" to succeed Outlook Express and Windows Mail


Categories: Windows Live

By now most people interested in technology news have heard the story initially reported by the New York Post in the article Bill's Hard Drive which claimed that Microsoft was planning to purchase Yahoo! and the subsequent rebuttal of this news in the Wall Street Journal's article Microsoft, Yahoo Discussed Deal. Since I work at Microsoft I'm not supposed to comment on rumors like this so I'll just point to a couple of opinions.

Charlene Li, an analyst at Forrester Research, wrote in her blog post entitled Why Microsoft + Yahoo! makes sense – and why it won’t work that

But there is one major reason why I don’t think Microsoft executives have the stomach for any sort of brand rationalization -- the continued dual branding of Windows Live and MSN. Each time I have a conversation with Microsoft about Windows Live, I get a different explanation of what it is and how it fits with MSN. If the company can’t event figure out its branding strategy with existing properties, I don’t hold out much faith that they could do so with a premium brand like Yahoo!

Robert Scoble writes in his post No “Microhoo”

I’ll tell ya one thing, though. It sure made for interesting conversation with a Yahoo employee I met tonight. We were starting to draw up where value would be built and where it’d be destroyed. There were a lot of places it would be destroyed and if two guys drinking beer can figure that out in half an hour, I’m sure that caused smarter people than us to put on the brakes. For instance one of Yahoo’s biggest properties is its email service. But that’s one of Microsoft’s biggest properties too (aka Hotmail). Then you look at finance sites. Microsoft is doing pretty well there with Microsoft Money (I met an employee who works there too and he said both Microsoft and Yahoo are way ahead of Google in finance traffic). Then you look at mapping. Again, they are pretty strong competitors there. Search? Who’s search technology would be thrown away? Advertising technology? Both Microsoft and Yahoo are pretty close there. Flickr? Clear value creation in an acquisition cause Microsoft doesn’t have anything like it. Same with Del.icio.us, Upcoming.org, Yahoo Answers, MyBlogLog. Portal? Yahoo is clear winner in brand name, but that’s just cause Microsoft has done an awful job in rebranding everything as “Live.”

As for me, two phrases popped into my head when I heard the rumor; hail mary play and post merger layoffs. I guess word association is mother...

In related news, Mike Arrington reported yesterday that Yahoo To Shut Down Yahoo Photos In Favor Of Flickr. This is a shockingly disruptive move that will definitely piss off users given how different the features and target audience of both sites are. Why would a Web savvy, user-centric company like Yahoo! do something that will so obviously cause bad blood between them and their users? How about all the employees working on Yahoo! Photos who busted their butts to make it one of the Web's most popular photo sites? The answer is simple. Yahoo! has redundant and competing products which they could no longer rationalize.

Now go back and reread Robert Scoble's post linked above then consider what a YHOO-MSFT merger would look like again.  


Have you been trying to distill the recent Microsoft Silverlight announcement into actual concrete bits and pieces? Look no further than this poster which not only lists the various supported browsers and operating systems but also highlights which class libraries from the .NET Framework will make up Silverlight

PS: Found this via Mark Pilgrim's Silly Season post. As usual, excellent and insightful writing by Mark.


Categories: Programming | Web Development