It seems I'm slightly ahead of schedule and have added most of the support required for using a website's favicons as the icons used to represent the feed in the RSS Bandit feed subscriptions tree view. Below is a screenshot of what the list of subscriptions looks like when some of the feeds have favicons.

There are still a couple of fit & finish work items to complete such as adding an option to turn off favicons for the people who find the people's choices of icons too distracting. However for the most part this feature is done.

Over the next few days, I'll start taking a look at what it means to add support for podcasting to the application. Since stumbling upon the very hilarious yet quite accurate review of Pirates of the Carribean 2 by Ask A Ninja, I've been wanting to try out subscribing to podcasts. However I'm not sure what the expected user experience should be so I'm going to try out a couple of podcast clients over the next week. So far I have Doppler Radio and Juice (formerly iPodder) on my list. Is there any other client I should be trying out? Also are there any obvious features I should or should not add?


 

Categories: RSS Bandit

September 3, 2006
@ 05:13 PM

Today I was browsing Windows Live QnA and stumbled across one the user pages (shown below) and realized that we've finally shipped the Windows Live friends list to another web property besides Windows Live Spaces

This is one of the coolest things about working on platform technology, you ship it once and it gets used all over the place. When I first started working on the social networking for Windows Live along with Mike Torres and others, we strongly believed that Social Networking features should be an integrated part of all of our online experiences instead of just being part of a single "social networking" site. The friends list isn't just a feature of Windows Live Spaces or Windows Live Messenger, it's a feature of Windows Live. 

Another principle we've had is that anywhere you see a user in a Windows Live property, there should be multiple ways to interact with that user via the 'contact control' shown above. One of these ways is to add an entry point for viewing that user's friends list or adding that user to your IM or friends list [NOTE: you can opt out of having people spam you using this mechanism]. This is a part of our user experience platform which Jay and Neel have been working on for a while. Encouraging multiple ways for people to interact should be a key aspect of social software applications.

It's been almost two years since I started at MSN Windows Live and one of the best things about working here is that I've rarely had to argue with people about fundamental principles of what the user experience we provide should be. Our debates are more around when to ship the features and how to implement them than anything else.


 

Categories: Windows Live

Greg Linden has a blog post entitled Google Personalized Search and Bigtable where he writes

One tidbit I found curious in the Google Bigtable paper was this hint about the internals of Google Personalized Search:
Personalized Search generates user profiles using a MapReduce over Bigtable. These user profiles are used to personalize live search results.
This appears to confirm that Google Personalized Search works by building high-level profiles of user interests from their past behavior.

I would guess it works by determining subject interests (e.g. sports, computers) and biasing all search results toward those categories. That would be similar to the old personalized search in Google Labs (which was based on Kaltix technology) where you had to explicitly specify that profile, but now the profile is generated implicitly using your search history.

My concern with this approach is that it does not focus on what you are doing right now, what you are trying to find, your current mission. Instead, it is a coarse-grained bias of all results toward what you generally seem to enjoy.

This problem is worse if the profiles are not updated in real time.

I totally disagree with Greg here on almost every point. Building a profile of a user's interests to improve their search results is totally different from improving their search results in realtime. The former is personalized search while the latter is more akin to clustering of search results. For example, if I search for "football", a search engine can either use the fact that I've searched for soccer related terms in the past to bubble up the offical website of Fédération Internationale de Football Association (FIFA) instead of the National Football League (NFL) website in the search results or it could cluster the results of the search so I see all the options. Ideally, it should do both. However, expecting that my profile is built in realtime (e.g. learning from my search results from five minutes ago as opposed to those from five days ago) although ideal doesn't seem to me to be necessary to be beneficial to end users. This seems like one of those places where a good enough offline-processing based solution is better than a over better engineered real-time solution. Search is rarely about returning or reacting to realtime data anyway. :) 

PS: I do think it's quite interesting to see how many Google applications are built on BigTable and MapReduce. From the post Namespaced Extensions in Feeds it looks like Google Reader is another example.


 

Jeff Atwood has a blog post entitled Thread Priorities are Evil where he writes

Joe Duffy is something of an expert on the topic of threading and concurrency-- he works for Microsoft on CPU-based parallelism in the .NET Common Language Runtime-- and he has this to say:

Messing with [thread] priorities is actually a very dangerous practice, and this is only one illustration of what can go wrong. (Other illustrations are topics for another day.) In summary, plenty of people do it and so reusable libraries need to be somewhat resilient to it; otherwise, we get bugs from customers who have some valid scenario for swapping around priorities, and then we as library developers end up fixing them in service packs. It's less costly to write the right code in the first place.

Here's the problem. If somebody begins the work that will make 'cond' true on a lower priority thread (the producer), and then the timing of the program is such that the higher priority thread that issues this spinning (the consumer) gets scheduled, the consumer will starve the producer completely. This is a classic race. And even though there's an explicit Sleep in there, issuing it doesn't allow the producer to be scheduled because it's at a lower priority. The consumer will just spin forever and unless a free CPU opens up, the producer will never produce. Oops!

The moral of the story? [Thread] priorities are evil, don't mess with them.

Although there are some edge conditions where micromanaging thread priorities can make sense, it's generally a bad idea. Set up your threads at normal priority and let the operating system deal with scheduling them. No matter how brilliant a programmer you may be, I can practically guarantee you won't be able to outsmart the programmers who wrote the scheduler in your operating system.

On reviewing the RSS Bandit code it seems that we use ThreadPriority.BelowNormal and ThreadPriority.Lowest in a bunch of places which may cause the kind of deadlocks Joe Duffy describes. This is yet another example of why multithreaded programming is the spawn of Satan.


 

Categories: Programming

September 1, 2006
@ 06:02 PM

Mike Torres has a blog post entitled Web 2.0 Revelation #3: I dig Firefox Extensions where he writes

But having returned to Firefox (on my Mac and casually on my PC), I'm seriously impressed by just how much Firefox Extensions have enabled me to do.  And as much as I really love using IE7 on my PC, having things like the SessionSaver, Answers, LiveLines, and del.iciou.us extensions are going a long way towards swaying me over to Firefox again (note: I haven't used Firefox exclusively on my PC since it was called Firebird a few years ago!)

The list of extensions I'm exploring on the PC:

  • Browster to make searching and browsing just a little bit faster - slick!  (works in IE too)
  • de.icio.us to make sure I update my linkblog regularly
  • Answers just because it's cool
  • Tab X because I need close buttons on tabs
  • Livelines to map the RSS feed icon to "Subscribe in Bloglines"
  • SessionSaver to keep me from losing my place
  • Luna (theme) to make it look like it belongs on Windows again - although I want a better looking theme

One of the things that's immediately clear to me after a little experimentation this week: IE7 just doesn't have enough to sway power users just yet.

I've been preaching the Firefox religion to Mike and others at work primarily by praising the virtues of inline search and SessionSaver. The more I use Firefox with SessionSaver the more it irritates me that every Windows application doesn't have this functionality. I've definitely been inspired to add similar functionality to RSS Bandit.

Anyway, it looks like Mike didn't just tiptoe into the water but instead jumped in deeper than I have. On his recommendation I have installed Tab X and Luna which have quickly made my browsing experience even better. I may try out the de.icio.us extension if I can ever remember my password for the service. I probably should give a shout out to the Yahoo! Toolbar for Firefox as well. Firefox extensions totally r0x0r.


 

Categories: Web Development

September 1, 2006
@ 05:42 PM

From the Bloomberg news article Microsoft Gives Bonuses Totaling Almost $1 Billion (Update3) we learn

Aug. 31 (Bloomberg) -- Microsoft Corp. paid out performance bonuses totaling almost $1 billion in restricted stock to 900 of its top executives.

One-third of the 37 million shares vest immediately, Redmond, Washington-based Microsoft, the world's biggest software company, said in a regulatory filing today. Chairman Bill Gates and Chief Executive Officer Steve Ballmer were excluded.

The company revamped its compensation plan in 2003 to hold onto key executives because many of the stock options granted previously were worthless. Doing so gave the company a way to reward executives and remain competitive with rival employers such as Google Inc. after the stock fell 56 percent in 2001 and 2002.

It's September which means our yearly bonuses and raises are around the corner. It looks like I need to think up another excuse for why my girlfriend and I can't go furniture shopping at IKEA. :)


 

Categories: Life in the B0rg Cube

One of our most common requests for improving the user interface of RSS Bandit has been to add an option so that all links clicked in the newspaper view result in tabs that are opened in the background instead of the new browser tabs stealing focus. This allows you to breeze through a newspaper view with a lot of items and click the links of the items you are interested without without having to go back and forth between the newspaper view and open browser tabs. Below is a screenshot of the new option

I've realized that it's been a long time since we shipped an RSS Bandit release and have started spending more evenings getting the code in ship shape. This evening I'll start work on the often requested feature that we utilize favicons in the tree view instead of the generic folder icon. My only question is whethere I should bother adding a flag to disable that behavior. Will mind having Dare's favicon.ico show up beside my feed instead of the boring folder icon enough to want to turn the feature off? Let me know what you think.


 

Categories: RSS Bandit

August 31, 2006
@ 07:25 PM

"Social Search" is like "Web 2.0" in that if you ask five people what it means you'll get back seven different definitions. To me, the user experience for 'Social Search' is pretty straightforward. I'd like to ask questions and get back answers that take advantage of the knowledge the application has about my social circle (e.g. friends, family, trusted experts, etc).

The incident that got me interested in social search happened two years ago. The apartment complex I lived in [Avalon Belltown -- don't stay here, my car got broken into in their "secure" parking deck and they acted like it was my fault] raised my rent by $300 when my lease was up. I thought that was fairly obnoxious but didn't have the time to do an exhaustive survey of apartment complexes in the Seattle area to find one that met my desires. I knew that one or more of my co-workers or friends would be able to give me a suggestion for a cheaper apartment complex that would meet my requirements but short of spamming a bunch of people at work, I didn't have a good way to get this information out of my social circle. So I stayed there after renegotiating the lease [which they later reneged on but that is another story].

Since then I've been interested in the notion of 'social search' and other ways to make the user experience on the Web better by taking advantage of the knowledge applications have about our relationships to other people. This is why I ended up working on the team that I work on today and have been involved in building features such as Social Networking for Windows Live. I believe that we are now about halfway to what I'd like to see in the 'social search' arena at Windows Live. We have Windows Live QnA, Windows Live Expo, and Windows Live Spaces which I see as different pieces of the puzzle.

The next step for me has been thinking about how to extend this notion of applications being smarter because they know about our relationships outside Windows Live by exposing APIs to the different kind of relationship information we have today. This is one of the reasons I find the Facebook API quite fascinating. However I'm not sure what the right forum is to get feedback on what kinds of APIs people would like to see from us. Maybe asking here in my blog will get some bites. :)


 

Categories: Social Software | Windows Live

August 31, 2006
@ 07:08 PM

In another episode of the "Google is the new Microsoft" meme, I've been amused to see some VCs brag about how they plan to not invest in any company that potentially competes with Google in any space. Below are two examples I've noticed so far, I'm sure there are more that I've missed

In his blog post entitled The Kiko Affair, Paul Graham writes

Google may be even more dangerous than Microsoft, because unlike Microsoft it's the favorite of technically minded users. When Microsoft launched an application to compete with yours, the first users they'd get would alway be the least sophisticated-- the ones who just used whatever happened to be already installed on their computer. But a startup that tries to compete with Google will have to fight for the early adopters that startups can ordinarily treat as their birthright.
...
The best solution for most startup founders would probably be to stay out of Google's way. The good news is, Google's way is narrower than most people realize. So far Google only seems to be good at building things for which Google employees are the canonical users. That's because they develop software by using their own employees as their beta users
...
They tried hard; they made something good; they just happened to get hit by a stray bullet. Ok, so try again. Y Combinator funded their new idea yesterday. And this one is not the sort of thing Google employees would be using at work. In fact, it's probably the most outrageous startup idea I've ever heard. It's good to see those two haven't lost their appetite for risk.

In his blog post entitled Thoughts on Google Apps, Paul Kedrosky writes

Finally, and this is mostly directed at people sending "Enterprise 2.0" business plans my way: If you're thinking of doing something squarely in Google's enterprise-lusting aim you need to ask yourself one question only: Why? What makes you think that you can do it so much better than Google can that the inevitable free Google Apps product doesn't kick your ass out of the office market? I'm not saying it's impossible, and there are plenty of things outside Google's aim -- including apps that are much more social by design than what Google builds -- but the gate is 99% closed for bringing vanilla,mass-market office apps to the web.

I guess these VCs are planning to stop investing in software companies since Google seems to be increasingly involved in almost every category of software products. I thought the entire point of being a VC was accepting the element of risk involved?


 

August 31, 2006
@ 06:48 PM

I've slowly begun to accept the fact that the term Web 2.0 is here to stay. This means I've had to come up with a definition of the term that works for me. Contextually, the term still is meant to capture the allure of geek-loved sites like Flickr and http://del.icio.us. Being "Web 2.0" means having the same characteristics features of these sites like open APIs, tagging and AJAX.

One of the things I've realized while reading TechCrunch and sitting in meetings at work is that there is a big difference between folks like Caterina Fake or Joshua Schachter and the thousands of wannabes walking the halls in Redmond and Silicon Valley. The difference is the difference between building features because you want to improve your user's experience and building features you've been told those features are how to improve your user's experience.

Everytime I see some website that provides APIs that aren't useful enough to build anything interesting I think "There's somebody who heard or was told that building APIs was important without why it was important". Everytime I see some website implement tagging systems that are not folksonomies I think "There's somebody who doesn't get why tagging is useful". And every single time I see some site add AJAX or Flash based features that makes it harder to use the site than when it was more HTML-based I wonder "What the fuck was the point?".

I guess the truth is that TechCrunch depresses me. There is such lack of original thinking, failure to empathize with end users and just general unawareness of the trends that led to the features we describe as being Web 2.0 in our industry today. Sad.


 

Categories: Ramblings