{End Bracket}

And Along Came 10...

Duncan Mackenzie

If you are a developer focused on Microsoft products, you've probably been to Channel 9, where you can chat with fellow developers and watch videos that take you behind the scenes at Microsoft. Well, not content to offer just one massive online video project, the team behind Channel 9 decided to build a similar site targeted at the technology enthusiast who isn't necessarily a programmer. The new site, on10.net, covers a wide variety of topics, from the latest in medical technology to the work that goes into developing an Xbox 360™ game, all with a focus on how things work.

When we started this project in January 2006, we had only three programmers and approximately five weeks to get the site up and running. Our first big architectural decision was that, instead of building on top of an existing code base such as Channel 9 or Community Server, we would build the site from scratch. We had a very clear idea of the look and functionality we wanted to have on the site, and one of the essential features was the ability to let users comment on videos while watching them. This meant that we couldn't require postbacks to log in, to comment, or to page through comments, all of which pointed us at an AJAX implementation.With an AJAX system, info is sent back and forth from the browser through Web requests initiated from a client-side script, allowing asynchronous updating of page content without necessitating a full page refresh. One of the key requirements of an AJAX system, though, is a fairly complete Web service layer, and that was something that none of our current systems offered. As a result, instead of retrofitting a service-style architecture on top of an existing code base, we built a simple blog/forum engine, implementing only those features that were critical to the site.

We had another reason for treating on10.net as a completely new system: we were after a minimalist design and didn't want anything in the code base that wasn't part of our intended feature set. We identified a handful of key elements: Entries, Comments, Tags, and Media files. Every type of posted information would be an Entry, thus putting comments, threads, forum posts, and blog posts all into a single table and object. Tags were added as a list of IDs and names, along with the concept of Tag Groups, allowing us to classify a tag as "Content" or "Location" or even "Appearance." Media files were handled through associating a set of links with each entry, with the link describing the type of file and a URL.

Another reason to start fresh was our desire to make the site as compliant as possible with the current crop of Web standards. Producing valid XHTML output was one goal, as was making sure the site and the videos worked in as many browsers (and on as many platforms) as possible. In order to reach the Apple iPod and Sony PSP audience, we output our content in both Windows Media® and MPEG4 formats, which may be a first for a Microsoft-run Web site. We use the Windows® Media player when running inside Internet Explorer®, playing back the WMV video file, but switch to the QuickTime embedded player and a MP4 file when running inside any other browser. Being a blog, we also needed to properly support RSS along with Pingbacks and Trackbacks and some features specific to a video blog such as special iTunes extensions.

We tried to build on top of existing technology wherever possible. For instance, we took advantage of ASP.NET 2.0 for all the required authentication plumbing, including the membership tracking of Users, Roles, and Profiles, allowing us to avoid writing much of that code. All of the underlying page generation is handled through the use of the Virtual Path Provider, another new feature in ASP.NET 2.0. We are also using the Microsoft® ASP.NET "Atlas" framework primarily to provide a way to call our Web services from client-side JavaScript and handle moving our data around as easy-to-use objects. We also utilized other services such as MapPoint® and Virtual Earth™ for mapping and plotting location coordinates.

All in all, there are quite a few requirements to put up a working blog, but we ended up with a great foundation on which to build new features as on10.net evolves and as we move Channel 9's massive body of content onto this new code base. In addition to on10.net and Channel 9, the team has also built a smaller single-person blog engine that we have currently deployed to our personal sites (see duncanmackenzie.net as an example). Once we have worked out the kinks in this code base, code-named "Oxite," we'll be shipping that code out (in C# and the .NET Framework 2.0). Check out Welcome to 10 for more information on our team and for links to two videos where we describe the system in juicy geeky detail.

Duncan Mackenzie is a developer for on10.net and Channel 9. He can be reached through his personal site.