Our official video and post for the Wind Mobile app is up. We’ve been so busy with project work that we’ve fallen behind with keeping our own site up to date, but we’ll make up for it soon with a whole new site launching shortly.
Endquote is Josh Santangelo, an interface developer and former man-about-town in Seattle. Lately, he talks a lot about Silverlight, Surface, and Stimulant.
email: josh[a]endquote[.]com
work: stimulant.io
Our official video and post for the Wind Mobile app is up. We’ve been so busy with project work that we’ve fallen behind with keeping our own site up to date, but we’ll make up for it soon with a whole new site launching shortly.
Another video of the Wind Mobile app, which really shows all of the features. At the front-end is the game-like attract mode, at the end is the super-secret admin console. Well, not so secret anymore. Wind’s press release on the topic is also up. Stimulant’s will come soon…
Stimulant’s official video and writeup for the Kodak application. We’re doing another, sort-of-similar app for their booth at CES. Should be fun.
A video of folks using the Surface app that Stimulant made for the Kodak booth at Print 09.

First you place an object down

Then you remove it

Then you see how it's made
Some images of the Surface app that Stimulant worked on for the Kodak booth at Print ‘09.
A couple of months ago we finished the Microsoft Local Impact Map, a Silverlight app highlighting all of the progressive and wonderful things Microsoft does around the world. Today we launched a new look at the same data, presented on Microsoft Surface.
Microsoft Local Impact Map: Surface Edition from Stimulant on Vimeo.
Aside from being a cool multi-touch, multi-user, 360-degree application, this one is technically interesting because it shares so much with the Silverlight app. It uses the same data classes and hits the same web services as the RIA, but presents the data in a completely different way.
Whereas the web app is pretty much a single-user experience, we hope that the Surface version allows people to literally sit around the table and share an experience and a discussion about the stories and data in front of them.
It will be installed at Microsoft facilities around the world shortly. Look for it next time you’re on campus!
Microsoft Research and Stimulant just launched the first version of Project Tuva, a platform for the delivery and study of classic lecture material. At launch, it features the legendary “Messenger Lectures on Physics” which were given by Prof. Richard Feynman at Cornell University in 1964, recorded by the BBC, and later purchased by Bill Gates.
The project was led by Curtis Wong at MSR who supplied the general vision, constant feedback, and amazing content. More about the MSR team is available on the contributors page. Design, development, and QA took over the whole team at Stimulant. I was the developer of the Silverlight client piece.
The launch has been covered in general in lots of places, including the New York Times science blog, The Register, and an interview with Bill Gates at cnet. I’m going to write a bit more about the technical side of the project and how it came to be.
The most obvious (and so far, most criticized) thing about Tuva is that it’s a Silverlight 2 application. This means that users will need to have the plugin installed, and if you’re using Google Chrome, Safari on Windows, or any Linux browser, you won’t be able to use the application. That said, I really don’t think it could have been built any other way. As a long-time Flash/Flex developer, I’m very aware of the capabilities of that platform, and can imagine the pain involved in building the app in Flex. After a few Silverlight and WPF projects, I’m a .NET convert.

Tuva is, basically, yet another Silverlight video player. However, this one is purpose-built to facilitate learning. Here are the features that make it different from other players.

This was my third major Silverlight project, and the first where I really felt like I knew what I was doing. We wanted to build the project in Silverlight 3, but since we had a hard launch date and we weren’t sure if Silverlight 3 would slip, we had to stick with the shipping version. In the end, Silverlight 3 shipped about a week before Tuva. We’re already planning some changes to take advantage of some of the features in the new version.
The overall architecture of the project used the MVC and command patterns as implemented in the Silverlight Cairngorm project. I got hooked on the Cairngorm style of development while working on Flex project and have carried those habits with me to Silverlight. We evaluated Prism but found it to be overkill on a single-developer project, but we may use it in the future.
All UI controls were implemented as custom Controls, not UserControls. This decision was made both because custom controls require a little more structure and rigor to develop, and also because we had a project requirement to support reskinning in the future, and this is much easier to do with custom controls. Because Silverlight 2 doesn’t support merged resource dictionaries, this meant for one 7,500 line Page.xaml file. This worked pretty well, but performance problems with Blend made visual edits very tedious. We’ll work on addressing this in future versions by reorganizing resources.
The process of getting from design to final product was fairly smooth. The interaction design was implemented by Nathan Moody in the form of a 60pg PDF which was used to create consensus among all the team members. Jules König, our visual designer, translated that into detailed comps in Illustrator. Once those were approved, they were converted to Expression Design files. I took those files and implemented the project in Visual Studio and Expression Blend. As components were completed, Jules would edit the project in Blend to refine design elements (and fix the things I didn’t quite finesse properly). The fact that my designer could edit the project himself really freed me to work on real features and issues without burning time on small visual tweaks.
The application has no backend, which presented some challenges. Content is managed through a standalone WPF app (developed by Darren David) which shares the data model classes from the Silverlight app. These classes implement IXmlSerializable, which allows the WPF app to save and load the data in XML form. When the Silverlight app starts, it loads a zip file containing the XML for all the videos (currently 1.2MB compressed) and deserializes them into data objects on a BackgroundWorker thread using lots and lots of LINQ. With all of the data for the app in memory, features like search were easier to implement. This approach clearly wouldn’t scale for hundreds or thousands of videos, but it’s good enough for seven.
During the project there were frequent code reviews, mainly between Darren and I. We worked together on much of the data model code, since he was writing data with the WPF app and I was reading it from Silverlight. Later on the project there was a formal code review by a developer at Microsoft Research. This was a little nerve-wracking because technical folks at MSR are extremely talented, experienced, and educated compared to a lowly art-school RIA-developer. In the end I survived, learned a few new best practices, and got hooked on Visual Studio’s “Code Analysis” feature for keeping things clean.
At Stimulant we care a lot about QA. Put simply, bugs make us a look bad, and we hate that. However, since we don’t have large development or QA teams, nor do we have long timelines, we don’t practice test-driven development. My process is to develop a feature and test it as thoroughly as I can myself before passing it off to QA, who tests it ten times more thoroughly and finds all the issues. QA and development run in parallel until final delivery, not just for a week at the end of the project.
In the end it was an exciting and extremely gratifying project, but it was not without its long nights (and weeks), dev challenges, and arguments. All the effort paid off though — the project has been well-received and is not one of those that I’m left wanting to totally rewrite when I’m done. A port to Silverlight 3 with additional features is coming, stay tuned.
Aside from MSR and Stimulant, some additional credit is due:

I worked on an image viewer for MSN that displays an arbitrary set of photos and lets you filter them based on attributes of each. LINQ is used heavily for the filtering logic. You can also drag, flip, and throw images with an experience that borrows heavily from Surface’s ScatterView component. When you select an image, Deep Zoom lets you get up close to the details. The first app to use it displays a set of celebrity tattoo photos.
The viewer has been reskinned six times with six different sets of photos:
We were asked to make an cool image viewer for a bunch of celebrity photos, and it sounded really uninteresting at first, but we went pretty next-level on it and made it fun. That’s Stimulant’s style.
A project that’s been in the works since late last year at Stimulant has just launched on Microsoft.com. The Local Impact Map presents over 500 stories about the positive impact of local programs supported by Microsoft around the world.
Some marketing will be following the launch soon, but I’m more interested in the technical side. Some cool features:
This has definitely been the most complex Silverlight project I’ve done to date, maybe even the most complex RIA so far. That is if you don’t count the one I’m working on now for MSR, of course.
This is the Stimulant Surface demo reel that Nathan put together for MIX09 (and was a third-place winner in the show-off contest). It covers all of our Surface projects to date. I’m actually working on a new Surface project right now, which is a reimagining of a Silverlight app that we’re just finishing up. No rest for the wicked.