Yesterday while browsing comments on Slashdot I found a link to an article at LinuxToday on Tim O'Reilly's Open Letter: Rethinking the One-Click Patent which contains the following excerpt from a posting by Tim O'Reilly on the Amazon 1-Click patent controversy

People in many areas of commerce, not just on the Web but also TV and radio (as evidenced by some of our prior art submissions), have put a lot of thought into making the shopping experience quicker and easier. And yet none of these folks really managed to simplify it to the same degree that Amazon did with 1-Click. In the end, we did not have a winner, and it doesn't look as if the prior art submitted can "knock out" the 1-Click patent...So I want to offer Jeff something of an apology. At the same time, at the risk of appearing a "sore loser," I want to reiterate that my fundamental issue with Amazon was never the specific claims of the 1-Click patent. Even if Amazon did create a genuine e-commerce innovation, I maintain that it was still a mistake for them to patent it.

I remember the hubbub on Slashdot about Amazon's 1-Click patent and Tim O'Reilly's bounty for prior art but don't remember this ever getting posted. So it seems that despite all the claims of "obviousness" from the Slashdot crowd, no prior art could be found. I guess it is true that all innovations look obvious in hindsight.

Another interesting data point is this post on Slashdot about the various patent lawsuits Amazon is currently fighting. Lots of people like to polarize the debate about software patents but in truth the situation isn't as cut and dried as folks on either side of the debate like to make it seem.


 

It's been hard to escape coverage of the Live 8 concerts since that's all MTV showed over the weekend and the news channels have been covering it in the mornings while I work out. Events like Live 8 always make me end up feeling ambivalent. One the one hand it is great to see people trying to help with the problems people are facing in Africa and on the other it perpetuates the notion that Africa is the world's charity case. After some consideration, I definitely think my feelings about the concerts are mostly positive. 

I've seen some blog posts complain that not enough African artists were included in the concerts and others criticising the concerts by asking what good will a rock concert end up influencing the members of the G8.

My thoughts are similar to those David Weinberger expressed in his post Live 8: Cause or fashion statement? where he wrote

For me it comes down to this: I can't imagine that people going to a big rock concert will change the mind of any G8 leader, but if Live 8 makes debt relief trendy, I'm all for it. After all, trendiness seemed to have an effect on ending Apartheid in the 80s.

In a similar vein I echo the sentiment's from the post in Brian's Black Star Journal entitled Development issues and celebrities where he wrote  

I remember back when Princess Diana got involved in the landmine question. I wondered how those ordinary activists felt. They worked on the issue for years to little effect but then this fancy royal flies in and suddenly it's the cause célèbre du jour.

But on the other hand, at the end of the day, the Ottawa treaty banning landmines was signed. Most countries (not including the US) do not use landmines anymore. Is it really important who gets credit? As an activist, is it about you or the cause? Do you think any anti-landmine activist would say, "I think we should revoke the Ottawa treaty because it wouldn't have passed without star power"? I hope not. If so, they are not real activists.

Despite these sentiments I agree with the economists and aid groups cited in variousnews storiesabout Live 8 that at the end of the day what African nations need more than aid and debt cancellation is better governance and to participate more fully in international trade. Better governance simply cannot be overemphasized. In certain nations African governments have really, really screwed things up. For many nations, without regime change, giving more aid is just sending in good money after bad.

Unfortunately, there are no easy answers.


 

Categories: Ramblings

If you like World of Warcraft and cute asian girls, and cheesy commercials, you will love this World of Warcraft Coke commercial from China.

Via tokyo-genki.com.  


 

Over the weekend, while watching a Game video I started thinking of various beefs across Hip Hop history and came up with a mental list of my favorite diss tracks. Below is my top 5 list in no particular order.

  1. Wit Dre Day by Snoop Doggy Dogg & Dr. Dre - dissing Tim Dog, Luke & Eazy E
  2. Mama Said Knock You Out by LL Cool J - dissing Kool Moe Dee
  3. Backdown by 50 Cent - dissing Ja Rule (honorable mention to the entire Invasion part II mix tape)
  4. Ether by Nas - dissing Jay-Z
  5. Stomp by Young Buck, Ludacris & T.I. - T.I. and Ludacris dissing each other

The last entry isn't as good as the others but the fact that both rappers diss each other on the same track is what propelled it onto the list. What does your list look like?


 

Categories: Music

Last week was the O'Reilly Where 2.0 Conference where a number of players in the online mapping space including Yahoo!, Google and MSN announced API plans for their various services.

The Yahoo! Maps Web Services provides a way display a map on the Yahoo! website populated with locations specified by the caller. To specify the locations on the map, one uses an RSS feed where each item in the feed corresponds to a location on the map and its geographical address is specified using a combination of geoRSS extensions and proprietary Yahoo! extensions. Instead of allowing one to POST the RSS feed to the service, the Yahoo! Maps API requires that a URL to the RSS feed is provided instead. This prevents the API from being used by desktop applications easily or by users who don't have access to a web server where they can place XML files online. Clicking on the following URL should show the API in action; http://api.maps.yahoo.com/Maps/V1/AnnotatedMaps?appid=YahooDemo&xmlsrc=http://developer.yahoo.net/maps/sample.xml 

The Google Maps API allows one to embed Google Maps on specific web pages. To include a map on one's web page, a Javascript file which exposes a complete object model for Google Maps should be included on the target webpage. The Javascript include is of the form

<script src="http://maps.google.com/maps?file=api&v=1&key=abcdefg" type="text/javascript"></script>

file=api indicates that the file being returned is the Google API file, v=1 indicates that version 1 of the API is being requested and key=abcdefg is used to specify the developer key being used to access the service.

Once the script is included, developers can write code such as

var map = new GMap(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.centerAndZoom(new GPoint(-122.141944, 37.441944), 4);

which results in an effect similar to those at controls.html being created on the Web page.

It's interesting to see how radically different the approaches taken by Yahoo! and Google to  provide what is basically the same functionality. The Yahoo! approach seems to me to be more declarative and straightforward than Google's approach. However, Google's approach is definitely a lot more flexible.

As for MSN, we announced that Virtual Earth will provide an API that will be free for non-commercial use that utilizes both URLs and a JScript Map control. Some of the highlights of the conference presentation are in Chandu Thota's post Where 2.0 and Virtual Earth.


 

Categories: MSN | XML Web Services

The MSN Search team recently silently released http://addins.msn.com which among other things provides the API documentation for Windows Desktop Search that ships with the MSN Search Toolbar. The lowdown on what the API is good for is right at the beginning and is excerpted below

Which Extension Technology to Use?

There are two basic methods for creating add-ins for Desktop Search.

1.     Adding new file types by creating IFilters

  • Extend Desktop Search with an IFilter add-in that knows how to “crack” the contents of a new file type in order to index its text and metadata.
  • To do this, you need to build and register an object supporting the IFilter interface.
  • You can add file-specific icons or context-menu handlers by following this documentation on extending the Windows Explorer file types by creating IContextMenu and IExtractIcon interfaces.
2.     Adding a new store by creating protocol handlers

  • Extend Desktop Search so that it can index a new data store, such as the database of an e-mail application.
  • To do this, you need to build a protocol handler object supporting the ISearchProtocol interface, along with an IUrlAccessor to pull the items. If the contents of the data store are file types not already indexed by Desktop Search, you may also need to implement one or more IFilters..
  • To add icons or context-menu handlers, you need to implement portions of an IShellFolder.

You can also find custom IFilters at http://addins.msn.com including ones for PDF, ZIP, CHM and Mozilla Thunderbird mail formats. If only there were C# wrappers for all the gnarly COM interfaces I'd provide one for indexing and searching the cache file format used by RSS Bandit. Then people would be able to search their feeds directly from desktop search. That would be kinda hot. 


 

Categories: MSN

It seems both Google and Yahoo! provided interesting news on the personalized search front recently.

Yahoo! MyWeb 2.0 seems to merge the functionality of del.icio.us with the power of Yahoo! search. I can now add tags to my Yahoo! bookmarks, view cached versions of my bookmarked pages and perform searches restricted to the sites in my bookmark list. Even cooler is that I can share my bookmarks with members of my contact list or just make them public. The search feature also allows one to search sites restricted to those shared by others. All they need to do is provide an API and add RSS feeds for this to be a del.icio.us killer.

Google Personalized Search takes a different tack in personalizing search results. Google's approach involves tracking your search history and tracking what search results you cliked on. Then when next you perform searches, Google Personalized Search brings certain results closer to the top based on your search history or previous click behavior.

As for this week's news about MSN Search? Well you can catch what our CEO had to say about us in the ZDNet article Ballmer confident, but admits failings. We definitely have a lot of catching up to do but I don't think the race is over yet.


 

Categories: Social Software | Technology

Just when you think we've missed the boat on software development trends on the Web, Microsoft surprises folks. First it was announcing that we will be baking RSS support into the next version of Windows. Now we've announced that we will be shipping a toolkit for building AJAX-style Web applications. In his post about the Atlas Project, Scott Guthrie writes

All of the pieces of AJAX – DHTML, JScript, and XMLHTTP – have been available in Internet Explorer for some time, and Outlook Web Access has used these techniques to deliver a great browser experience since 1998. In ASP.NET 2.0, we have also made it easier to write AJAX-style applications for any browser using asynchronous callbacks, and we use them in several of our built-in controls.

 

Recently, however, the technologies used by AJAX have become broadly available in all browsers, and use of this model for rich web applications has really taken flight. There are a number of high-profile new AJAX-style websites out there today, including a number by Google, as well as sites like A9 and Flickr. Microsoft will also have more sites that use this technology out there soon – check out Start.com and the MSN Virtual Earth project for examples.

 

The popularity of AJAX shows the growing demand for richer user experiences over the web. However, developing and debugging AJAX-style web applications is a very difficult task today. To write a rich web UI, you have to know a great deal of DHTML and JavaScript, and have a strong understanding of all the differences and design details of various browsers. There are very few tools to help your design or build these applications easily. Finally, debugging and testing these applications can be very tricky.

...

For this work, we’ve been working on a new project on our team, codenamed “Atlas”. Our goal is to produce a developer preview release on top of ASP.NET 2.0 for the PDC this September, and then have a website where we can keep updating the core bits, publishing samples, and building an active community around it.

 

Here are some of the pieces of Atlas that we are going to be delivering over time:

 

 

Atlas Client Script Framework

 

The Atlas Client Script Framework is an extensible, object-oriented 100% JavaScript client framework that allows you to easily build AJAX-style browser applications with rich UI and connectivity to web services. With Atlas, you can write web applications that use a lot of DHTML, Javascript, and XMLHTTP, without having to be an expert in any of these technologies.

 

The Atlas Client Script Framework will work on all modern browsers, and with any web server. It also won’t require any client installation at all – to use it, you can simply include references to the right script files in your page.

 

The Atlas Client Script Framework will include the following components:

  • An extensible core framework that adds features to JavaScript such as lifetime management, inheritance, multicast event handlers, and interfaces
  • A base class library for common features such as rich string manipulation, timers, and running tasks
  • A UI framework for attaching dynamic behaviors to HTML in a cross-browser way
  • A network stack to simplify server connectivity and access to web services
  • A set of controls for rich UI, such as auto-complete textboxes, popup panels, animation, and drag and drop
  • A browser compatibility layer to address scripting behavior differences between browsers.
This is excellent news which I know a lot of our UX developers at MSN will be glad to hear. Already Scott Isaacs who's been a key part of the AJAX development we've been doing at MSN has posted his opinions about Atlas in his blog entry entitled My personal thoughts on an AJAX (DHTML) framework..... His post highlights some of the history of AJAX as well as the issues a toolkit like Atlas could solve.

First RSS, now AJAX. All that's left is to see some announcement that we will be shipping a REST toolkit to make this a trifecta of utmost excellence. More nagging I must do...

 

Today I learned that Apple brings podcasts into iTunes which is excellent news. This will definitely push subscribing to music and videos via RSS feeds into the mainstream. I wonder how long it'll take MTV to start providing podcast feeds.

One interesting aspect of the announcement which I didn't see in any of the mainstream media coverage was pointed out to me in Danny Ayers's post Apple - iTunes - Podcasting where he wrote

Apple - iTunes - Podcasting and another RSS 2.0 extension (PDF). There are about a dozen new elements (or “tags” as they quaintly describe them) but they don’t seem to add anything new. I think virtually everything here is either already covered by RSS 2.0 itself, except maybe tweaked to apply to the podcast rather than the item.
They’ve got their own little category taxonomy and this delightful thing:

<itunes :explicit>
This tag should be used to note whether or not your Podcast contains explicit material.
There are 2 possible values for this tag: Yes or No

I wondered at first glance whether this was so you could tell when you were dealing with good data or pure tag soup. However, the word has developed a new meaning:

If you populate this tag with “Yes”, a parental advisory tag will appear next to your Podcast cover art on the iTunes Music Store
This tag is applicable to both Channel & Item elements.

So, in summary it’s a bit of a proprietary thing, released as a fait accompli. Ok if you’re targetting for iTunes, for anything else use Yahoo! Media RSS . I wonder where interop went.

This sounds interesting. So now developers of RSS readers that want to consume podcasts have to know how to consume the RSS 2.0 <enclosure> element, Yahoo!'s extensions to RSS and Apple's extensions to RSS to make sure they cover all the bases. Similarly publishers of podcasts also have to figure out which ones they want to publish as well.

I guess all that's left is for Real Networks and Microsoft to publish their own extensions to RSS for dealing with providing audio and video metadata in RSS feeds to make it all complete. This definitely complicates my plans for adding podcasting support to RSS Bandit. And I thought the RSS 1.0 vs. RSS 2.0 vs. Atom discussions were exciting. Welcome to the world of syndication.

PS: The title of this post is somewhat tongue in cheek. It was inspired by Slashdot's headline over the weekend titled Microsoft To Extend RSS about Microsoft's creation of an RSS module for making syndicating lists work better in RSS. Similar headlines haven't been run about Yahoo! or Apple's extensions to RSS but that's to be expected since we're Microsoft. ;)


 

Categories: Syndication Technology | XML

As the developer of an RSS aggregator I'm glad to see Microsoft's Simple List Extensions for RSS. Many of the aggregator developers I spoke to at Gnomedex this weekend felt the same way. The reason for being happy about these extensions is that they provide a way to fix a number of key feeds that are broken in RSS aggregators today. This includes feeds such as the MSN Music Top 100 Songs feed, iTunes Top 25 Songs feed and Netflix Top 100 Movies feed.

The reasons these feeds appear broken in every aggregator in which I have tried them is covered in a previous post of mine entitled The Netflix Problem: Syndicating Ordered Lists in RSS. For those who don't have time to go back and read the post, the following list summarizes the problems with the feeds

  1. When the list changes some items change position, new ones enter the list and old one's leave. An RSS reader doesn't know to remove items that have left the list from the display and in some cases may not know to eliminate duplicates. Eventually you have a garbled list with last week's #25 song and this weeks #25 song and last month's #25 song all in the same view.

  2. There is no way to know how to sort the list. Traditionally RSS ggregators sort entries by date which doesn't make sense for an ordered list.  

The RSS extensions provided by Microsoft are meant to solve these problems and improve the current negative user experience of people who subscribe to ordered lists using RSS today.  

To solve the first problem Microsoft has provided the cf:treatAs element with the value "list" to be used as a signal to aggregators that whenever the feed is updated that the previous contents should be dumped or archived and replaced by the new contents of the list. That way we no longer have last week's Top 25 song list comingled with this week's list. The interesting question for me is whether RSS Bandit should always refresh the contents of the list view when a list feed is updated (i.e. the feed always contains the current list) or whether to keep the old version of the list perhaps grouped by date. My instinct is to go with the first option. I know Nick Bradbury also had some concerns about what the right behavior should be for treating lists in FeedDemon.

To solve the second problem Microsoft has provided the cf:sort element which can be used to specify what elements on an item should be used for sorting, whether the field is numeric or textual so we know how to sort it and what the human readable name of the field should be when displayed to the user. I'm not really sure how to support this in RSS Bandit. Having every feed be able to specify what columns to show in the list view complicates the user interface somewhat and requires a degree of flexibility in the code. Changing the code to handle this should be straightforward although it may add some complexity.

On the other hand there are some user interface problems. For one, I'm not sure what should be the default sort field for lists. My gut instinct is to add a "Rank" column to the list of columns RSS Bandit supports by default and have it be a numeric field that is numbered using the document order of the feed. So the first item has rank 1, the second has rank 2, etc. This handles the case where a feed has a cf:treatAs element but has no cf:sort values. This will be needed for feeds such as the Netflix Top 100 feed which doesn't have a field that can be used for sorting. The second problem is how to show the user what columns can be added to a feed. Luckily we already have a column chooser that is configurable per feed in RSS Bandit. However we now have to make the list of columns in that list configurable per feed. This might be confusing to users but I'm not sure what other options we can try.