Chris Anderson has been learning Python via Jim Hugunin's excellent IronPython and came to the conclusion that Microsoft has been missing the boat in programming language trends. In his post The Hobbyist and the Script  he writes

Scripting is great for glue code - the same thing that VB1 and 2 used to be great at. VB3 started to get into the serious app development with rich data integration, and VB4 brought us into the 32-bit era, and in a way back to glue code. VB4's embracing ActiveX controls gave VB developers an entirely new place to play. I remember working on an application using a beta of VB5 and writing my "hard core code" in MFC ActiveX controls. After a while I started writing more and more of the code in VB, because it worked and wasn't the bottle neck in anyway for the application.

I think that scripting and many dynamic languages are in the same camp. They are great for small applications and writing glue code. Look at Google Maps, the real processing is on the server, and the client side AJAX is just the glue between the user, the browser, and the backend server. I would argue that something more beefy like Outlook Web Access (a Microsoft AJAX application, writen before AJAX was the name) demonstrates more of the limitations of writing the majority of your client interface in script.

Regardless of the limitations, our singular focus on strongly typed compiled languages has blinded us to the amazing productivity and approachability of dynamic scripting langauges like Python and Ruby. I'm super excited that we are changing this. Hiring Jim Hugunin is a great start. I hope we continue this, and really look to add a strong dynamic language and scripting story to our developer portfolio.

I've actually been quite upset by how many programming language camps Microsoft has neglected in its blind pursuit of competition with Java and the JVM. Besides the scripting language camps, there are significant customer camps we have neglected as well. We have neglected Visual Basic developers, we gave them a poor replacement in Visual Basic.NET which the market has rejected which can be gleaned by posts such as Chris Sells's pointing out that publishers don't want to VB.NET books and the Classic VB petition. We have neglected DHTML developers who have been building web sites and web applications against Internet Explorer, we don't even have a Javascript IDE let alone a story for people trying to build complex AJAX/DHTML applications like GMail or Google Maps.

The main problem is that Microsoft is good at competing but not good at caring for customers. The focus of the developer division at Microsoft is the .NET Framework and related technologies which is primarily a competitor to Java/JVM and related technologies. However when it comes to areas where there isn't a strong, single competitor that can be focused on (e.g. RAD development, scripting languages, web application development) we tend to flounder and stagnate. Eventually I'm sure customer pressure will get us of our butts, it's just unfortunate that we have to be forced to do these things instead of doing them right the first time around.

On a similar note, thank God for Firefox.


 

The Inside Microsoft blog has an entry where he describes the Syndicate Conference Keynote by Phil Holden of MSN. Phil talks about MSN Spaces and the various things we are doing on Start.com. Excerpts from the post are below

Next, Phil shows off MSN Spaces, which is very consumer oriented and easy to set up. He says, "The product is clearly not for everyone". It is very much targeted to the Friends/Friends market. The conducted a survey to see what people thought Spaces did well. Number one was sharing photos, while in last place was staying up to date on hot topics.

He shows how many people use MSN Spaces. In December, it was one million. In January, 2; February, 3.5; and March, 4. However, since Messenger 7 went live and Spaces left beta, Spaces exploded, going up to 10 million Spaces at the end of April. Wow. They are adding 100,000 Spaces a day.

Moving on, Phil gets into notifications. He mentions "gleaming", where Microsoft leverages Messenger to notify people that their friends have updated their Space. Clicking on a person reveals their contact card, and that can take you to the blog. This is the single-source personal notification system.

Phil shows how a less personal, single-source public contact notification occurs, through MSN Alerts. This is what they acquired MessageCast for last week. It will work to notify people of updated blogs.

The multiple-sourse public notification is through MSN's "What's Your Story" page, which highlights the most interesting Spaces.

Then he introduces Kyle Von Haden, program manger of Global Site & Develoment at MSN, who shows off Start.com/1/, which is to be the multiple-source personal notification system, or RSS reader. He explains how they have been silently releasing and updating stuff on Start.com, with no publicity for the time being. Start.com can be a superfast loading home page. The whole thing is built in Ajax, so they can change the page without refreshing. They plan to add sections that suggest feeds that a person's friends like. The focus is making it easy, simple, fast, and with no learning curve.

Then he shows off something new, what will be next: Start.com/3/, a much richer interface, with folders, logos, custom pages. You can add custom feeds, like weather feeds. It looks very, very impressive.
...
Phil says one good idea would be to build RSS readers into existing applications, making it easier for users to adopt and use. Challenges exist in making it easier for users to understand what's going on, so they don't just get confused by little orange boxes. Industry challenges exist from different formats and authentication for private content.

Kyle gets back up and shows off the next thing from MSN: a (currently alpha) screensaver that uses RSS to show recent news, much like Apple's Tiger has, but much cleaner looking. Its very easy to add any feed, especially easy for Spaces. You can subscribe to image feeds and have those feeds supply the photos on the screen, as well as showing blog entries and news articles. The product didn't work perfectly yet, but seeing the photos full-screen with other articles in the corner looked very useful.

Phil wraps thing off with some goals, including serving multiple segments of consumers, new ways of getting content (like the screensaver), and strategies to let the public know how useful syndication can be.

A great presentation. MSN clearly gets RSS better than most, and they've got some very interesting stuff coming down the pike.

A few weeks ago I was chatting with Steve Rider about a feature I'd like to see on http://www.start.com/2 which I thought would be rather cool. Yesterday I got a demo of the next version of the site from Scott Isaacs, and not only was my idea implemented but the implementation was a lot better than what I requested. Excellent!!

Now I can't wait for the next version to ship.  


 

Categories: MSN

 From the Business Week article, The World According to Ballmer

Clearly alluding to Microsoft's key Internet search rival, Ballmer said: "The hottest company right now -- the one nobody thinks can do any wrong -- may just be a one-hit wonder."

Actually Google is already at least a two hit wonder; AdSense/Adwords and the Google search engine. Given that revenues from AdSense are growing to match those from the Google website, it seems inevitable that in a few years it'll be more important to Google that they are the #1 ad provider on the Web not whether they are the #1 search engine.

 

 


 

A few years ago I used to participate in an online community called Kuro5hin which was founded by Rusty Foster. K5, as we affectionately called it, eventually became a haven for people trying to escape from the ills of Slashdot. There were several problems with Slashdot that folks like Rusty and Karsten Self planned to fix with K5. These included
  • Lack of democracy in selecting stories
  • Moderation system that encouraged group think and punished not toeing the party line
  • Visible karma score which encouraged treating participating in the community as a game

The solution was to allow all users to create stories, vote on the stories and to rate comments. There were a couple of other features that distinguished the K5 community such as diaries but the democratic aspect around choosing what was valuable content was key. K5 was a grand experiment to see if one could build a better Slashdot and for a while it worked.  For a while, it worked fairly well although the cracks had already begun to show within the first year. A lot of the spirit of the first year of the site can be gleaned from the post K5, A One Year Retrospective.

Now five years later, I still read Slashdot every day but only check K5 out every couple of months out of morbid curiosity. The democracy of K5 caused two things to happen that tended to drive away the original audience. The first was that the focus of the site ended up not being about technology mainly because it is harder for people to write technology articles than write about everyday topics that are nearer and dearer to their hearts. Another was that there was a steady influx of malicious users who eventually drove away a significant proportion of K5's original community, many of whom migrated to HuSi.  This issue is lamented all the time on K5 in comments such as an exercise for rusty and the editors. and You don't understand the nature of what happened.

Besides the malicious users one of the other interesting problems we had on K5 was that the number of people who actually did things like rate comments was very small relative to the number of users on the site. Anytime proposals came up for ways to fix these issues, there would often be someone who disregarded the idea by stating that we were "seeking a technical solution to a social problem". This interaction between technology and social behavior was the first time I really thought about social software.

Fast forward a few years to earlier this week. I wrote a blog post entitled When did Blogrolls Become Evil? which started an interesting dialog in the comments which I've been thinking about for a few days. Below are excerpts from my post and its comments which got me thinking

Dare Obasanjo:  I was going to write a lengthy counterargument to the various posts by Shelley Powers about blogrolls then wondered whether the reason I even cared about this was that her writing had convinced Uche Ogbuji to drop me from his blogroll? Wouldn't I then be justifying some of the arguments against blogrolls? It's all so confusing...

While I'm still trying to figure this out, you should read Shelley's original post, Steve Levy, Dave Sifry, and NZ Bear: You are Hurting Us and see whether you think the arguments against blogrolls are as wrong as I think they are.

Kingsley Idehen: Anyway, Shelley raises a really important issue which actually highlights what is more than likely a flaw in the concept of blogrolls. I certainly saw you vanish from Uche's blogroll, and I was really curious about the underlying algorithm that lead to this (I suspected that Uche wouldn't have done this by hand :-) ).

Blogrolls are static and to some degree completely ambiguous, what are they really? My published blogroll is at most .01% or lower of the total blogs that I subscribe to, and actualy read with varying degrees of frequency

Dare Obasanjo: There is a social and technological aspect to blogrolls. The fact that to some degree a blogroll is a way for people to indicate what community they belong to and/or share links to people they find interesting, it is social. Whether the blogroll is static or dynamically updated is an implementation detail that is wholly technological.

The fact that Technorati uses blogroll links as part of their mechanism for calculating 'authority' is quite broken from my perspective and too easily gamed. Just a few short months ago they had to scramble because they were counting the various links in the 'Updated Spaces' and 'Newly Created Spaces' modules that exist on millions of spaces. We've since used rel=nofollow on these links to prevent other simplistic link calculators from being similarly confused.

Going back to social aspect of blogrolls, I liked the fact that one could go to Uche's blog and find links to other Nigerians who were doing interesting things in the technology industry. I don't think the fact that Technorati would use that link to count one more point of 'authority' to our URLs is any reason to stop doing this. We shouldn't change social behavior due to design flaws in software.

As for blogrolls being static or dynamic, to me this is just an implementation detail and where there is a will there is a way.

Uche Ogbuji:Kingsley,

I've learned an important lesson from the fact that both you and Dare noticed that he went missing from the Copia blogroll. We hacked at the blogroll in a bit of a careless manner and that was wrong. We always planned to go back and fix things as we clarified what those links actually meant, but things got in the way, and the result looked worse than the intention.

Dare,

Good points.

"I liked the fact that one could go to Uche's blog and find links to other Nigerians who were doing interesting things in the technology industry."

Very important note. I think it's very fair for such a dispersed group as we are to have these sorts of mini-hubs.

"The fact that Technorati uses blogroll links as part of their mechanism for calculating 'authority' is quite broken from my perspective and too easily gamed."

Yikes! That is friggin' broken, and perhaps helps explain some of the sensitivity of this issue when Shelley took it on.

Blogrolls are definitely a social construct as are popularity lists. However how they are generated and calculated often boils down to a technology issue. This overlap between technology and social behavior is what I find so interesting about social software.

We face a lot of the issues surrounding the overlap between technology and social behavior everyday at work as we build software that millions of people use to communicate with each other. We regularly have to answer questions like how to deal with rejection in instant messenger invitation scenarios (Joe asks Jess to be his IM buddy but she declines), how to deal with people impersonating other users in blog comments, and whether it is a good idea to let people have access to the blogs of their IM buddies in two clicks.

I had assumed that the renewed interest in social software in recent years would create an environment where discourse about the overlap between technology and social behavior would become more commonplace. However I haven't found good communities or blogs where this discourse abounds. I recently unsubscribed from the Many-to-Many weblog because I got tired of reading Clay Shirky raving about how tagging/folksonomies are the second coming, David Weinberger and Ross Mayfield's verbose yet obvious observations on the state of the art in social software, and Danah Boyd's inane prattling. I also subscribed to the blogs of various members of the Social Computing Group at Microsoft Research but not only do they post infrequently there's also the fact that most of them just got re-orged into the Windows division to work on Longhorn.

Any pointers to other communities on social software or even just interesting research papers would be much appreciated. Holla back!


 

Categories: Social Software

I intended that we'd have newsgroup support in the last version of RSS Bandit but eventually we had to pull it out so we could get the release out earlier. I can definitely promise that you will be able to subscribe to whatever newsgroups tickle your fancy in the Nightcrawler release of your favorite RSS reader.

I've checked in support to finally enable this functionality into CVS. There are still some bugs to work out such as dealing with various funky headers and binary attachments as well as design questions such as whether to merge the UI for subscribing to feeds and newsgroups or keep them separate.

Below is a screenshot showing the microsoft.public.xml newsgroup (note that the dates might be wrong)


 

Categories: RSS Bandit

It seems Jonathan Marsh has joined the blogosphere with his new blog Design By Committee. If you don't know Jonathan Marsh, he's been one of Microsoft's representatives at the W3C for several years and has been an editor of a variety of W3C specifications including XML:Base, XPointer Framework, and XInclude.

In his post XML Base and open content models Jonathan writes

There is a current controversy about XInclude adding xml:base attributes  whenever an inclusion is done.  If your schema doesn't allow those attributes to appear, you're document won't validate.  This surprises some people, since the invalid attributes were added by a previous step in the processing chain (in this case XInclude), rather than by hand.  As if that makes a difference to the validator!

Norm Walsh , after a false start, correctly points out this behavior was intentional.  But he doesn't go the next step to say that this behavior is vital!  The reason xml:base attributes are inserted is to keep references and links from breaking.  If the included content has a relative URI, and the xml:base attribute is omitted, the link will no longer resolve - or worse, it will resolve to the wrong thing.  Can you say "security hole"?

Sure it's inconvenient to fail validation when xml:base attributes are added, especially when there are no relative URIs in the included content (and thus the xml:base attributes are unnecessary.)  But hey, if you wanted people or processes to add attributes to your content model, you should have allowed them in the schema! 

I agree that the working group tried to address a valid concern. But this seems to me to be a case of the solution being worse than the problem. To handle a situation for which workarounds will exist in practice (i.e. document authors should use absolute URIs instead of relative URIs in documents) the XInclude working group handicapped using XInclude as part of the processing chain for documents that will be validated by XML Schema.

Since the problem they were trying to solve exists in instance documents, even if the document author don't follow a general guideline of favoring absolute URIs over relative URIs, these URIs can be expanded in a single pass using XSLT before being processed up the chain by XInclude. On the other hand if a schema doesn't allow xml:base elements everywhere (basically every XML format in existence) then one cannot use XInclude as part of the pipeline that creates the document if the final document will undergo schema validation.

I think the working group optimized for an edge case but ended up breaking a major scenario. Unfortunately this happens a lot more than it should in W3C specifications.


 

Categories: XML

From Greg Reinacker we find out that Newsgator Acquires FeedDemon and Nick Bradbury confirms this in his post NewsGator Acquires FeedDemon, TopStyle...and Me!. I think this is a great acquisition for Newsgator. Acquisitions are usually about getting great people, key technology or lots of users. With this acquisition Newsgator gets all three although it'll be interesting seeing how they manage to deal with rationalizing the existence of two desktop clients even if one of them is a Microsoft Office Outlook plugin.

I think this will have an interesting ripple effect on the aggregator market. Both Nick & Greg have already raised the bar for RSS readers to include synchronization with a web-based aggregator. Desktop aggregators that don't do this will eventually be left in the dust. So far Newsgator Online and Bloglines have been the premiere web-based aggregators but its been difficult building applications that synchronize with them. Newsgator Online doesn't seem to have any public documentation about their API while the Bloglines API is not terribly useful for synchronization.

This definitely puts pressure on Bloglines to provide a richer API since two of the most popular desktop aggregators on the Windows platform will now have a richer synchronization story with its most notable competitor. It also puts pressure on other desktop aggregators to figure out a strategy for their own synchronization stories. For example, I had planned to add support for synchronizing with both services in the Nightcrawler release of RSS Bandit but now it is unclear whether there is any incentive for Newsgator to provide an API for other RSS readers. Combining this with the fact that the Bloglines API isn't terribly rich means I'm between a rock and a hard place when it comes to providing synchronization with a web-based aggregator in the next version of RSS Bandit.

Sometimes I wonder whether my energies wouldn't be better spent convincing Steve Rider to let me hack an API for http://www.start.com/1. :)


 

It was announced at E3 this week that XBox 360 will be backwards compatible with the original XBox. My good friend, Michael Brundage, was the dev for this feature. Read about XBox Backwards Compatibility from the horses mouth. My favorite quote from his article is

The first impression you should get is that these numbers are fantastic for high-definition Xbox 360 games. Wow! But on further reflection, they're not so good for emulating Xbox games at 30 fps. On my 1.25GHz G4 PowerBook, VPC 7 emulates a 295MHz x86 processor -- so the emulator is more than 4 times faster than the machine it's emulating. So most people look at these numbers and conclude that Xbox backwards compatibility can't be done.

Then there are a few people who understand emulators at a very technical level, or understand both Xbox systems inside and out to an expert level of detail that I'm not about to go into here. They perform more sophisticated calculations using the Art of Software Engineering, but ultimately reach the same conclusions as those not skilled in the Art: Backwards compatibility can't be done. [One such skeptic interviewed me for my current job, and pointedly asked during the interview how I planned to handle the project's certain future cancellation.]

And yet, here it is. It's magic!

Last year I got to meet J Allard and one of the questions I asked was about backwards compatibility in the next version of the XBox. He gave the impression that they wanted to do it but it would be a very difficult task. I would never have guessed that Mr. XQuery would be the one to get the job done.

Great job, Michael.


 

Categories: Technology

James Snell posted IBM's blogging guidelines today in his post Blogging@IBM. Some have heralded this as another triumph for corporate blogging, I'm, not so sure this is the case. The particular sticking points for me are the following

2. Blogs, wikis and other forms of online discourse are individual interactions, not corporate communications. IBMers are personally responsible for their posts. Be mindful that what you write will be public for a long time -- protect your privacy.

3. Identify yourself -- name and, when relevant, role at IBM -- when you blog about IBM or IBM-related matters. And write in the first person. You must make it clear that you are speaking for yourself and not on behalf of IBM.

Basically IBM states in these two bullet points that blogging isn't a way for IBM as a corporate entity to engage in conversation with its customers, partners and competitors. Instead its a way for regular people to talk about their lives including their work. What IBM seems to have done is give its employees permission to state that they work for IBM, and recommended that its employees post a disclaimer. For people like Sam Ruby of IBM, this is actually a step back since he now has to post a disclaimer on his personal weblog.

As I mentioned in a comment on Sam Ruby's blog I guess I must be tainted by Microsoft where product teams use blogs to announce features (e.g. the IE team) or engage in conversations with customers about product pricing (e.g. a conversation and its results). Simply giving your employees permission to mention their employer in their personal blogs doesn't a corporate blogging initiative make. In addition, the position that one has to give employees permission to state where they work if communicating in public is also rather startling.

Why I like blogging as a Microsoft employee is that it allows me to have conversations with our customers, partners and competitors. It isn't just me spouting off about my likes and dislikes, it is a way to communicate to our customers and partners. I've lost count of the amount of times I've referred people to posts like What Blog Posting APIs are supported by MSN Spaces? or Why You Won't See XSLT 2.0 or XPath 2.0 in the Next Version of the .NET Framework. Posts like these led to interesting conversations both internally and externally to Microsoft and informed our decision making processes. Additionally, our customers also appreciated the fact that we are up front with them about our plans and kept them in the loop.

I think communications via "official channels" and "company spokesmen" pales in comparison to the various conversations I've mentioned above. IBM has taken the first step towards accepting corporate blogging. Hopefully, they'll eventually go all the way.


 

Categories: Life in the B0rg Cube

Stan Kitsis, who replaced me as the XML Schema program manager on the XML team, has a blog post about XInclude and schema validation where he writes

A lot of people are excited about XInclude and want to start using it in their projects.  However, there is an issue with using both XInclude and xsd validation at the same time.  The issue is that XInclude adds xml:* attributes to the instance documents while xsd spec forces you to explicitly declare these attributes in your schema.  Daniel Cazzulino, an XML MVP, blogged about this a few months ago: "W3C XML Schema and XInclude: impossible to use together???"

To solve this problem, we are introducing a new system.xml validation flag AllowXmlAttributes in VS2005.  This flag instructs the engine to allow xml:* attributes in the instance documents even if they are not defined in the schema.  The attributes will be validated based on their data type.

This design flaw in the aforementioned XML specifications is a showstopper that prevents one from performing schema validation using XSD on documents that were pre-processed with XInclude unless the schema designer decided up front that they want their format to be used with XInclude. This is fundamentally broken. The sad fact is that as Norm Walsh pointed out in his post XInclude, xml:base and validation this was a problem the various standards groups were aware of but decided to dump on implementers and users anyway. I'm glad the Microsoft XML team decided to take this change and fix a problem that was ignored by the W3C standards groups involved. 


 

Categories: XML