August 8, 2005
@ 01:47 PM

In response to my post Using XML on the Web is Evil, Since When? Tantek updated his post Avoiding Plain XML and Presentational Markup. Since I'm the kind of person who can't avoid a good debate even when I'm on vacation I've decided to post a response to Tantek's response. Tantek wrote

The sad thing is that while namespaces theoretically addressed one of the problems I pointed out (calling different things by the same name), it actually WORSENED the other problem: calling the same thing by different names. XML Namespaces encouraged document/data silos, with little or no reuse, probably because every person/political body defining their elements wanted "control" over the definition of any particular thing in their documents. The <svg:a> tag is the perfect example of needless duplication.

And if something was theoretically supposed to have solved something but effectively hasn't 6-7 years later, then in our internet-time-frame, it has failed.

This is a valid problem in the real world. For example, for all intents an purposes an <atom:entry> element in an Atom feed is semantically equivalent to an <item> element in an RSS feed to every feed reader that supports both. However we have two names for what is effectively the same thing as far as an aggregator developer or end user is concerned.

The XML solution to this problem has been that it is OK to have myriad formats as long as we have technologies for performing syntactic translations between XML vocabularies such as XSLT. The RDF solution is for us to agree on the semantics of the data in the format (i.e. a canonical data model for that problem space) in which case alternative syntaxes are fine and we performs translations using RDF-based mapping technologies like DAML+OIL or OWL. The microformat solution which Tantek espouses is that we all agree on a canonical data model and a canonical syntax (typically some subset of [X]HTML).

So far the approach that has gotten the most traction in the real world is XML. From my perspective, the reason for this is obvious; it doesn't require that everyone has to agree on a single data model or a single format for that problem space.  

Microformats don't solve the problem of different entities coming up with the different names for the same concept. Instead its proponents are ignoring the reasons why the problem exists in the first place and then offering microformats as a panacea when they are not.

I personally haven't seen a good explanation of why <strong> is better than <b>...

A statement like that begs some homework. The accessibility, media independence, alternative devices, and web design communities have all figured this out years ago. This is Semantic (X)HTML 101. Please read any modern web design book like those on my SXSW Required Reading List, and we'll continue the discussion afterwards.

I can see the reasons for a number of the semantic markup guidelines in the case of HTML. What I don't agree with is jumping to the conclusion that markup languages should never have presentational markup. This is basically arguing that every markup language that may be used as a presentation format should use CSS or invent a CSS equivalent. I think that is a stretch.

Finally, one has to seriously cast doubt on XML opinions on a page that is INVALID markup. I suppose following the XML-way, I should have simply stopped reading Dare's post as soon as I ran into the first well-formedness error. Only 1/2 ;)

The original permalink to Tantek's article was broken after he made teh edit. I guess since I couldn't find it, it doesn't exist. ;)


 

Categories: Web Development | XML

August 7, 2005
@ 05:16 PM

I've been doing a bit more travelling around the country this week. The travel high point was a trip by helicopter today to a number of places including a local chief's palace and the village my dad where my dad was born. I took a couple of pics from the helicopter as well as on the ground and hope at least a few of them come out OK.

Below are a couple more random thoughts that have crossed my mind during this trip since my previous post

  • The proliferation of mobile phones is even more significant than I thought. I had assumed it was a city thing since the phones I saw folks with were in Abuja (current capital) and Lagos (former capital). However visiting less developed areas also have shown a high proliferation of mobile technology. In my dad's village I saw both a pay-as-you-go booth for MTN, a local mobile service provider, as well as a kiosk where a enterprising local entrepeneurs were renting out uses of their phones at 20 naira a call (about $0.15)

  • When I was growing up it was common practice for local businessmen to sell products that had been unsafe for public use in developed countries. It seems we now have a new government body called NAFDAC whose job is to act as the Nigerian version of the FDA. NAFDAC has been so effective that there have been multiple attempts on the life of the head of the organization by pissed off business owners whose products she's taken off the market.

  • The only thing scarier than being in a speeding car in typical Lagos or Abuja traffic is being driven in a speeding car in Lagos or Abuja traffic with an in-dashboard DVD player which is showing hip hop videos with half naked chicks dancing seductively. I kept wondering if the driver could keep his eyes on the road. That's it. Next time I come here, I'm walking everywhere.  

  • As I expected the common questions from family and extended family were when I'm going to show up with a future spouse and when I'm going back to school. What I didn't expect was so many people asking when I became such a fat ass. In hindsight, I should have expected it given that I haven't seen some of these folks in almost a decade and I've put on dozens of pounds since then. I definitely need to get back in shape. 

 


 

Categories: Trip Report

Tim Bray has a blog post entitled Not 2.0 where he writes

I just wanted to say how much I’ve come to dislike this “Web 2.0” faux-meme. It’s not only vacuous marketing hype, it can’t possibly be right. In terms of qualitative changes of everyone’s experience of the Web, the first happened when Google hit its stride and suddenly search was useful for, and used by, everyone every day. The second—syndication and blogging turning the Web from a library into an event stream—is in the middle of happening. So a lot of us are already on 3.0. Anyhow, I think Usenet might have been the real 1.0. But most times, the whole thing still feels like a shaky early beta to me.

I also dislike the Web 2.0 meme but not for the reasons Tim Bray states. Like the buzzword "SOA" that came before it "Web 2.0" is ill-defined and means different things to different people. Like art, folks can tell you "I know it when I see it" but ask them to define it and you get a bunch of inconsistent answers. For a while even Wikipedia had a poor definition of the term Web 2.0. The meat of the description there is still crap but the introduction is now one that doesn't make me roll my eyes. The wikipedia entry currently begins

Web 2.0 is a term often applied to a perceived ongoing transition of the World Wide Web from a collection of websites to a full-fledged computing platform serving web applications to end users. Ultimately Web 2.0 services are expected to replace desktop computing applications for many purposes.

This is a definition that resonates with me and one that has gotten me jazzed enough to have written my first Bill Gates Thinkweek paper as well as give Powerpoint pitches to lots of folks across MSN from VPs & GMs to fellow rank and file PMs & devs.  

The problem with "Web 2.0" and other over hyped buzzwords like "SOA" is that 90% of the stuff you hear or read about it is crap. Or even worse are like Tim O'Reilly's Not 2.0? post which hype it as something that will change the world but don't give you a good idea why. Reading stuff like Tim O'Reilly's

There's a set of "Web 2.0 design patterns" -- architecting systems so that they get smarter the more people use them, monetizing the long tail via a combination of customer-self service and algorithmic management, lightweight business models made possible by cooperating internet services and data syndication, data as the "intel inside", and so on.

just leaves me scratching my head. On the other hand I completely grok the simple concept that folks like me at MSN are no longer just in the business of building web sites, we are building web platforms. Our users are no longer just people interacting with our web sites via Firefox or IE. They are folks reading our content from their favorite RSS reader which may be a desktop app, web-based or even integrated into their web browser. They are folks who want to create content on our sites without being limited to a web-based interface or at least not the one created by us. They are folks who want to integrate our services into their applications or use our services from their favorite applications or sites. To me, that is Web 2.0.

You folks should probably just ignore me though since I am quite the hypocrite. I may pan the writings of folks like Tim O'Reilly and call 90% of the stuff written about "Web 2.0" crap but I did give up being a speaker on two panels at PDC to sit in the audience at the Web 2.0 conference. Due to a variety of reasons I could only pick one and based on how much value I got out of ETech I decided to pick Web 2.0


 

Categories: Web Development

According to the RSS Bandit roadmap the time draws nigh for the next release of RSS Bandit codenamed Nightcrawler. As with the previous release we will have an alpha version which will be mostly feature complete, followed by a beta version which will be feature complete and then the final release. Last week, Torsten and I agreed on the following plan for the alpha version of Nightcrawler.

Release Date: August 31, 2005

New Features:

  • NNTP Newsgroups support
  • Downloading of Enclosures/Podcasts
  • Subscription Wizard replaces Add New Feed dialog
  • Fast Mode (shutting off comment threading which uses a lot of CPU)
  • Synchronization with Newsgator Online
  • Atom 1.0 Support
  • Extensibility Framework to Enable Richer Plugins
  • Item Manipulation from Newspaper Views (e.g. Mark As Read, Flagging)
  • Tip of the Day on Startup

There's also a persistent bug that has been bothering some of our users where posts from different feeds end up being mixed up. We haven't located the source of this bug but have added some tracing to the build which will be enabled in the alpha. Users who end up with mixed up feeds after the alpha can send us the trace files which should help us narrow down the source of the problem.

There are a couple of features I'd like to see in the final version such as "Comment Watching" so I can tell when a post I am interested in gets new comments. However we need to start locking down for the next release so that feature isn't likely to make it in unless I can sneak it in before the beta.  If there are other small, nice to have features you'd like to see in Nightcrawler please file a feature request in SourceForge and we'll see what we can get to before the final release.

Any comments or other feedback would be greatly appreciated. 


 

Categories: RSS Bandit

Nick Bradbury has a post entitled AttentionTrust.org in which he talks about a new non-profit entity that has been formed by Steve Gillmor, Seth Goldstein and a few others. Nick writes

In a nutshell, the idea is that your attention data - that is, data that describes what you're paying attention to - has value, and because it has value, when you give someone your attention you should expect to be given something in return. And just because you give someone your attention, it doesn't mean that they own it. You should expect to get it back.

I know that sounds a little weird - it took me a while to grok it, too. So I'll use an example that's familiar to many of us: Netflix ratings and recommendations. By telling Netflix how you rate a specific movie you're telling them what you're paying attention to, and in return they can recommend additional DVDs to you based on how other people rated the same movie. In return for giving them your attention data - which is of great value to them - they provide you features such as recommendations that they hope will be valuable to you. In my mind, this is a fair trade.

But what if Netflix collected this information without your knowledge, and rather than using it to give you added value they sold it to another service instead? I imagine that many people wouldn't like that idea - chances are, you'd want to be given the opportunity to decide who this information can be shared with. This is one of the goals of AttentionTrust.org: to leave you in charge of what's done with your attention data.

But what about this whole idea of mobility, as mentioned on the AttentionTrust.org site? What's the benefit of making this stuff mobile? Dave Winer provides a nice example: suppose you could share your Netflix attention data with a dating site such as Match.com, so you could find possible partners who like the same movies as you? For that sort of thing to be possible, you'd need to be able to get your attention data back from any service which collects it. (As an aside, this also means you could share your Netflix queue with any new DVD rental service that comes down the pike - so my guess is that smaller, up-and-coming sites will be more willing to share attention data than the more entrenched sites will.).

The attention data is what separates the giants in the Web world like Amazon & Netflix from their competitors. It is in their best interests to collect as much data as possible about what users are interested in so they can target their users better. The fact that [for example] fans of G-Unit also like 50 Cent is data that makes Amazon a bunch of money since they can offer bundle deals and recommendations which lead to more sales. Additionally record labels and concert organizers are also interested customers in the aggregate data of where people's musical interests lie. It is arguable that this is also beneficial to customers since it makes it more likely that their favorite artists will appear in concert together (for example). Similar concepts exist in the physical world such as supermarket loyalty cards.

How much data websites can store about users can vary widely depending on what jurisdiction they are in. Working at MSN, I know first hand some of the legal and privacy hurdles we have to clear in various markets before we can collect data and how we must make users aware of the data we collect. All this is documented in the MSN Privacy policy. To better target user's we'd love to collect as much data as possible but instead adhere to strict policies informed by laws from various countries and guidelines from various privacy bureaus.

It currently isn't clear to me whether AttentionTrust.org plans to become another privacy body like TRUSTe or whether they plan to be a grassroots evangelization body like the WaSP. Either approach can be effective although they require different skill sets. I'll be interested in seeing how much impact they'll have on online retailers.

As to why I called this the "Return of Hailstorm" in the title of this blog post? It's all in the 2001 Microsoft press release entitled "Hailstorm" on the Horizon which among other things stated

"HailStorm" is designed to place individuals at the center of their computing experience and take control over the technology in their lives and better protect the privacy of their personal information. "HailStorm" services will allow unprecedented collaboration and integration between the users' devices, their software and their personal data. With "HailStorm", users will have even greater and more specific control over what people, businesses and technologies have access to their personal information.

Of course we all know how that turned out. The notion of mobile attention data basically requires Web companies like Netflix & Amazon to give up what for them is a key competitive advantage. It makes no business sense for them to want to that. I wish Steve Gillmor and company luck with their new endeavors but unless they plan to lobby lawmakers I don't see them getting much traction with some of their ideas.


 

Categories: Technology

August 3, 2005
@ 02:13 AM

I recently stumbled upon a blog post entitled Why MSN is lost again... from Guillaume Belfiore which claimed that MSN is lost because we copy features from competitors without having a roadmap for where we want to go. He uses a specific example of the recent announcement that MSN Spaces will have a social networking feature as proof and claims that we are simply copying Yahoo! 360.

I was going to write a response but then realized that Jeremy Zawodny of Yahoo! had written a post about this topic which is a generic answer to posts like Guillaume's. In his post Secrets of Product Development and What Journalists Write Jeremy wrote

Before I came out to California to work at Yahoo, I watched the business and culture of Silicon Valley from a distance. I read lots of the trade rags, tech web sites, and books about early Internet companies (the Netscape era).

One of the things that amazed me about Internet companies (usually the portals) was how quickly they built things and were able to react to each others moves with frightening speed. Company X would do something amazing and new only to be leapfrogged by Company Y just a few weeks later.

They were putting on one hell of a show and it was all amplified by the crazy bubble of the late 90s. I loved it.

The tech and business press would say things like "in response to Company X, Company Y has just..." or "in an effort to defend their business from Company Y, Company X today launched a new..."

I saw headlines like that all the time and still see them today.

Today there's one important difference: I'm on the inside now. For the last five and a half years, I have had a front row seat to the inner workings of what I used to imagine (with the help of a small army of journalists and reports).

Now I see it first hand and hear about it from coworkers and friends at other companies. And you know what? It's even more insane than it looked from the outside.

So I'm going to let you in on a little secret about how products are developed at large companies--even large Internet companies that some people think are fast on their feet.

Larger companies rarely can respond that quickly to each other. It almost never happens. Sure, they may talk a good game, but it's just talk. Building things on the scale that Microsoft, Google, AOL, or Yahoo do is a complex process. It takes time.

Journalists like to paint this as a rapidly moving chess game in which we're all waiting for the next move so that we can quickly respond. But the truth is that most product development goes on in parallel. Usually there are people at several companies who all have the same idea, or at least very similar ones. The real race is to see who can build it faster and better than the others.

Think about this the next time a news story makes it sound like Yahoo is trying to one-up Google. Or MSN is "responding" to last week's launch of a new AOL service.

It's easy to get caught up in the drama of it all. But reality is often quite different than what you read.

Just because the media likes to paint it as if web companies respond to each other's development efforts in the twinkling of an eye as part of an eternal game of one upmanship doesn't mean this is the case. Although folks like to paint Web development as simply tweaking HTML pages, as Jeremy points out it takes a lot longer than one would expect to build and deploy services that will be utilized by millions of people.

The social networking aspects of Spaces have always been part of the vision and in fact when I was hired at MSN my boss told me that I'd be working on three things; a blogging platform, a social networking platform and an RSS platform. At the time, it wasn't clear my team would own the RSS piece so my [future] boss was worried that I'd be upset if I started on the team and the RSS piece moved elsewhere. Of course, since I already work on RSS Bandit in my free time I didn't mind if I didn't get to work on RSS as part of my day job. It turned out he was right and the RSS pieces ended up being driven by the http://www.start.com/myw3b and http://my.msn.com folks.

Don't believe the hype.


 

Categories: MSN

August 1, 2005
@ 07:03 PM

I've been in Nigeria for almost a week and so far it's been great. I've spent a bunch of time with family and friends, eaten a bunch of stuff I haven't hafd in years and decided I like MTV in Africa better than what we get in the United States. I've also been taking pictures of everyday life which I'll post to the photo album on my Space once I get back.

Below is a random grab bag of impressions I've had during my trip

  • The traffic scares me. A lot. When being driven in Lagos & Abuja I tend to clench my fists while expecting we'll be in an accident at any minute. I can't get over the fact that as a teenager I used to be able to drive in this chaos and never had an accident. :)

  • The proliferation of mobile phones is insane. There seem to be about half a dozen mobile phone carriers and almost everyone on the streets is carrying one. I was talking to my dad and he said the Nigerian mobile phone market is the second fastest growing in the world after to China. About two years ago when I was last here I saw more people downloading ringtones and texting than I'd seen in Seattle & Redmond, the trend has only continued. I have a bunch of pics of mobile phone ads on the sides of buildings and street hawkers selling pay-as-you-go recharge cards which I'll post once I get back.

  • There is now a large local movie & hip hop scene. The movie scene was blowing up just before I left for college but it now seems to have matured quite a bit. It seems we export movies all over Africa. Folks have started calling the Nigerian movie scene "Nollywood". There are also a ton of local hip hop acts including one of my high school friends is now a rapper called Big Lo. About a decade ago he and I were part of a rap group called R.I.G. and I still have some of our tracks on my iPod. It's great to see that at least one of us is living our teenage dream of being a famous rap star.

  • The newspaper headlines seem to focus exclusively on the goings on of the government & politicians or on tragedies involving loss of life. The contrast between that and the kind of stuff I usually see on the cover of USA Today is striking.

  • Inflation is crazy especially in Abuja. Everything seems to cost a couple of hundred or thousands of naira. I still remember when you could get a bottle of Coke or a newspaper for under one naira. Then again, that was about two decades ago.

  • There are a lot of billboards about HIV/AIDS prevention in the capital city in Abuja but almost none in Lagos (the former capital and commercial center). I'll try and get some pics of the billboards before I get back.

  • Almost every PC I've used so far has been infested with spyware. Except for the Powerbook...

  • The London bombings are on people's minds in my social circle. One of my mom's friends lost her only soon in the July 7th attacks. My sister and dad were in London during the first bombing and I was pretty rattled when it happened. It's good to see the British police have caught all the suspects from the second attack. 

  • The local airline business seems to be thriving as well. Here's another place where there seems to be at least half a dozen competitors driving down prices. It looks like the government airline, Nigeria Airways, is finally out of commission. Good riddance.

  • I miss Nigerian food.


 

Categories: Trip Report

July 29, 2005
@ 03:06 PM

Mike Torres has a blog post entitled  On "MSN: Social Networking Edition" where he points to news stories about a core piece of a future version of MSN Spaces he and I have been working on for the past few months. Mike writes

On "MSN: Social Networking Edition"

Wow, is this actually true?  If so, I wonder how this will change the way people find and communicate with others in the future.

Quote (emphasis mine)

Microsoft Monitor: MSN: Social Networking Edition
A forthcoming "friend of friends" feature will add personal networks of friends to a MSN Space. In someone's My Space [sic], there will appear pictures of the friends, which can include friends of other friends. Friends can be added from people known or associated with friends or from MSN Spaces searches. Blake used the example of searching for golf blogs. If friends are on MSN Messenger, an icon indicates so.

More on Blake, Yusuf, MSN Messenger file sharing, and "Microsoft's new Web-based mail system" as well.  It is an interesting read... 

Funniest part of the post: "small consumer adoption [of Spaces]".  Joe is usually quick to take a shot at Microsoft without actually learning the facts first.  Come on, Joe...  I think the most recent public number was 17 million spaces created worldwide.  Compare that to any of our competitors in their first 3 years of existence.  Yeah...  small consumer adoption.  Maybe 17 million Roombas created those spaces :)

Mary Jo Foley has a little bit more here: 
Microsoft Watch.  My favorite part:

"Our ability to enter, differentiate and compete has never been stronger," Mehdi told the Wall Street analysts and media representatives who attended the analyst meeting.

Couldn't agree more

Although I've primarily been talking about my work on getting a public API for MSN Spaces off the ground, I also work on our social software platform on the back end as well. Once we ship the next version I'll be able to talk a bit more about some of the design decisions we made and I'll get to see how users end up utilizing the features we've been working in.

I love my day job.


 

Categories: MSN

I've been reading some of the hype around microformats in certain blogs with some amusement. I have been ignoring microformats but now I see that some of its proponents have started claiming that using XML on the Web is bad and instead HTML is the only markup language we'll ever need.

In her post Why generic XML on the Web is a bad idea Anne van Kesteren writes

Of course, using XML or even RDF serialized as XML you can describe your content much better and in far more detail, but there is no search engine out there that will understand you. For RDF there is a chance one day they will. Generic XML on the other hand will always fail to work. (Semantics will not be extracted.)

An example that shows the difference more clearly:

<em>Look at me when I talk to you!</em>

… and:

<angry>Look at me when I talk to you!</angry>

The latter element describes the content probably more accurately, but on ‘the web’ it means close to nothing. Because on the web it’s not humans who come by and try to parse the text, they already know how to read something correctly. No, software comes along and tries to make something meaningful of the above. As the latter is in a namespace no software will know and the latter is also not specified somewhere in a specification it will be ignored. The former however has been here since the beginning of HTML — even before it’s often wrongly considered presentational equivalent I — and will be recognized by software.

This post in itself isn't that bad, if anything it is just somewhat misguided. However Tantek Celik followed it up with his post Avoiding plain XML and presentational markup which boggled my mind. Tantek wrote

The marketing message of XML has been for people to develop their own tags to express whatever they wanted, rather than being stuck with the limited predefined tag set in HTML. This approach has often been labeled "plain XML" or "generic XML" or "SGML, but easier, better, and designed just for the Web".

The problem with this approach is that while having the freedom to make up all your own tags and attributes sounds like a huge improvement over the (mostly perceived) limits of HTML, making up your own XML has numerous problems, both for the author, and for users / readers, especially when sharing with others (e.g. anything you publish on the Web) is important.

This post by no means contains a complete set of arguments against plain/generic XML and presentational markup, nor are the arguments presented as definitive proofs. Mostly I wanted to share a bunch of reinforcing resources in one place. Readers are encouraged to improve upon the arguments made here.

The original impetus for creating XML was to enable SGML on the Web. People had become frustrated with the limited tag set in HTML and the solution was to create a language that enabled content creators to create their own tags yet have them still readable in browsers via stylesheet technologies (e.g. CSS). Over time, XML has failed to take off as a generic document format used by content authors for creating human readable documents on the Web but has become popular as a data format used for machine to machine communications on the Web(RSS, XML-RPC, SOAP, etc) .

Thus any arguments against XML usage on the Web today are really arguing about using XML as a data format since it isn't really used as a document format except for XHTML [and even that is only by markup geeks like Tantek & Anne].

Anyway let's look at some of Tantek's arguments against using XML on the Web...

Tower of Babel Problem

If everyone invents their own tags and attributes, pretty soon you get people calling the same thing by different names and different things by the same name. While avoid both of those occurences completely is very difficult (many of the microformats principles are design to help avoid those problems), downright encouraging authors to make up their own tags and attributes makes it much worse and all you end up with are a bunch of documents that give you the illusion of self-description.

Didn't the XML world solve this with XML namespaces like six or seven years ago?

Temptation of Presentational Markup

What happens all too often when authors or developers make up their own tags is that they choose tags that are tightly tied to a specific presentation rather than abstracting them with semantics. Quite similar to the phenomenon of authors picking presentational class names.

As a casual user of HTML, I personally haven't seen a good explanation of why <strong> is better than <b> so arguments whose entire basis is "presentational markup is evil" don't carry much weight in my book. If I come up with a custom markup format and it has a <bold> element, is that really so evil? I'm pretty sure that the XML formats used by OpenOffice or Microsoft Office contain markup that is presentational in nature whether it is setting font sizes, text colors or paragraph alignemnt. Are they evil or does the fact that they aren't intended for the Web give them a pass?

Preferring Semantic Richness

Sometimes something is a bad idea not just in absolute terms, but also relative to other approaches and solutions.

A while ago I wrote about a semantic richness spectrum on the www-style mailing list which went into a bit more detail. Håkon Wium Lie wrote a paper that both predated my rough summary by a couple of years, and provided a much more thorough analysis.

 Languages with well-known semantics are preferred to proprietary/made-up XML. This is for many reasons, including accessibility, cross-device support, and future user agent support.

This seems to be arguing that instead of cooking up your own custom format you should pick an established format with the semantics you want if one exists. This is regularly practiced in the XML world especially when it comes to the Web so I don't see how this is an argument against using XML.

--

Seriously, I feel like I am in some bizarre alternate universe if having aggregators subscribe to HTML web pages is being advocated as being a better idea than using specialized XML formats like RSS & Atom.

That's it...I'm going back to my vacation. The world has gone too loopy for me.


 

Categories: XML

It looks like MSN Virtual Earth is live. In an attempt to beat everyone to the punch when it comes to building an application using the MSN Virtual Earth API, I present http://www.25hoursaday.com/moviefinder

It requires Javascript (duh) and only works in IE beecause I didn't have time to figure out the Firefox equivalent of innerHTML. Enjoy.

Pardon my brevity, I'm posting this from a kiosk at Heathrow Airport


 

Categories: MSN | Web Development