I’ve run late all day long today for some unknown reason so I ended up coming in on the tail end of lunch and missing my last session because it was overbooked. Instead, I spent some time with the hands-on labs and got some experience working with Silverlight.

The labs they have are good and really do illustrate the concepts behind working with Silverlight. I ran into a couple of snags because it’s all running in Visual Studio “Orcas” so some of the debugging experience was a little flaky, but generally it’s a pretty decent platform. Writing the XAML is easy as it is, but working a product like Expression Blend into the mix makes it super-simple.

I believe they’re going to put these labs up on the web for folks to download and run through. I recommend doing the one where you build a Silverlight clock application and the one where you build a Silverlight image viewer.

Oh, and for some decent insight into Silverlight, check out Barak’s blog - he’s the PM for Silverlight and I have a feeling there’s going to be good stuff showing up there.

The afternoon keynote started out with Robbie Bach, President of the Microsoft Entertainment and Devices Division. So, basically, he’s over Xbox, Zune, Media Center, and that sort of thing.

The talk focused a lot on the marketing aspect of creating a good media experience. It felt a little like the same “how to get eyeballs on your product” sort of talk, and I know there’s no free lunch - someone’s got to pay for things, and advertising is huge revenue because you’ve got to sell product, but I felt sort of… well, dirty. I mean, I find things like in-game advertising annoying, but that was one of the big key things shown as a great way to go moving forward.

The overall notion is that a media experience should be personal (relevant to the user directly); interactive (let the user engage themselves in the experience); and social (let the user interact not only with the content but also with other users). To do that, new marketing efforts need to excite (make people excited to interact with it); attract (invite the user to gravitate toward the content); and engage (have a two-way interaction with the user).

Following Bach, Gayle Troberman, General Manger World Wide Branded Entertainment at Microsoft, came out and led a discussion with some marketing folks - Andrew Rashbass (Publisher and Managing Director, The Economist), Jonathan Hsia (Associate Marketing Director, Starcom MediaVest Group), Carol Kruse (Group Director, Interactive Marketing, Coca-Cola), and Winston Binch (Executive Integrated Producer, Crispin Porter and Bogusky).

By that time, I’d heard pretty much enough about how to interactively engage people to sell products in new ways in a digital fashion. I get it, it’s just not my bag.

Back to the lab.

There’s a lot of Silverlight content floating around at MIX07, so I thought I’d check out some different stuff.

The session on integrating web-oriented content into Office was lightly attended but very interesting. There are a lot of services out there and a lot of Microsoft Office users. The idea is that a user experience can be much richer if you don’t make the user leave Office to get to the data they need - instead, integrate the data right into Office.

I like the idea. While it does mean an additional download/install for a user, as an additional offering for ways to access data, this is good stuff.

Demos were done using Visual Studio “Orcas” (an as-yet-unreleased build

  • so you can’t do all the things quite as easily as the demos showed, but once it’s out, it looks like extending Office is a piece of cake) and Visual Studio Tools for Office.

Some of the things shown - creating custom ribbons; integrating a hosted web browser in a task pane; creating Windows Presentation Foundation controls and displaying/using them; custom form creation and integration in Outlook (very cool - based on message content, a specific set of controls becomes active).

Two specific demos caught my eye, both in Outlook. The first was a custom form that lets you get sales contact data mailed to you and when you open the message, you can select a contact to see a map pop up and show you the geographic location of the contact. Select multiple contacts and it builds you a route and shows you directions on how to go from one contact to another. The second was plugin that worked against RSS messages such that when you’re reading a post in Outlook you can click a button to show a panel that has the original blog post displayed in a browser so you can see it in its original context.

Anyway, very cool stuff. I can see that this would be more valuable to more internal IT-style development, but also opens up some nice value-added services. What if you could get an email notifying you of an incoming bill and click a button right in Outlook to pay it?

This session discussed how you can use ASP.NET AJAX controls and take advantage of Silverlight at the same time - creating a server control using the ASP.NET AJAX server control framework that uses Silverlight for its presentation.

There are several advantages to doing things like this - you can do this to slowly migrate a site to using Silverlight (one control at a time); you can separate the presentation of the control into code and XAML, giving more control to site designers; and it gives you new abilities using cross-platform vector graphics.

The meat of this presentation was code, so there’s not a lot of bullet-point style items to recount, but there were two controls shown using this technique. The first was a slideshow control that used Silverlight to show a nice transition when switching pictures in the slideshow; the second was a dynamic graph of stock prices that refreshed periodically.

The pattern for doing this is similar to that of creating other ASP.NET AJAX controls. To that end, both demos were done by deriving from the Xaml control that has a lot of base functionality and implements the proper AJAX script interface and saves you time when starting your own XAML based controls. The Xaml control is a part of ASP.NET Futures (so it’s not the base package yet but should be soon).

Basically there are three parts - write your XAML to handle the UI, set the XamlUrl property on the Xaml control so it knows how to display, and write the client script to work against the XAML tree. Obviously that’s pretty simplified, but it seems to me that the hard part really is working out the proper JavaScript to manipulate the XAML and intercept the events. ASP.NET AJAX seems to have a lot of helpers and convenience methods to make this easier, but if you’re not writing this in Orcas I can see where it’ll be a little slow to ramp up on.

I like the approach of writing controls using Silverlight. The ability to slowly migrate a site or individual functionality over to use Silverlight one control at a time is appealing. I can envision several charting or graphing applications I could use this sort of thing in.

This session was a more general “patterns” type of session where there were several UI patterns demonstrated to help you make a better user experience when working in AJAX.

The patterns and principles discussed can be found in the Yahoo! Design Patterns Library.

The idea is that a common vocabulary needs to be arrived at so designers and developers can have meaningful discussion about user interaction.

Principle - Keep a Light Footprint The idea here is that in a rich Internet application you can reduce the number of steps in a workflow or process and ensure simple interactions are simple. Identify pain points in the process and shorten the path. Design for engagement - keep the user’s attention. An interesting side note - it’s good to make things easier, but in some cases a design can have a very real economic impact on the application - for example, providing a lot of pre-action-lookup (like if Google Suggest returned search results, not just search terms) might make your application less scalable and require a lot more hardware to support.

Patterns: Inline Editing, In-Context Tools, Drag and Drop.

Principle - Cross Borders Reluctantly If you don’t have to take the user to a whole new page, don’t. Rethink flows - base the flow on the user model, not a page model. Rethink paging - could you use scrolling or a carousel instead?

Patterns: Hover Details, On-Demand Scrolling, In-Context Expand, Inline Assistance, Lightweight Popups, Lightbox.

Principle - Give Live Feedback Let the user preview the result of their action where possible. Provide things like field validation, inline previews (like a clothing store that lets you see what a piece of clothing might look like on you prior to you purchasing it), and so on. Try to prevent errors before they happen. If you refresh data on the page, be careful it’s not distracting or annoying. When an action takes place, let the user know what happened.

Patterns: Live Suggest, Auto Complete, Periodic Refresh, Busy Indicators.

Principle - Offer an Invitation Let the interface be discoverable by inviting the user to take relevant actions. Bridge the new with the old - use hyperlinks (a commonly understood indicator of action) provide a route to discovery, for example. Keep actions out of it - if you take actions as the user explores the interface, it makes them reluctant to search out new functionality. Unfortunately, there’s no easy/single solution to this.

Patterns: Hover Invitation, Tour Invitation, Drop Invitation, Tooltip

Principle - Show Transitions Show a user what happened (like when an item is deleted) by using transitions. For example, if an item is removed from a list, fade the deleted item out and shrink the list in an animated fashion to show the item being visually removed.

Patterns: Self-Healing Transition, Slide Transition, Active Spotlight.

Anyway, some great pointers. Definitely gives me some ideas for ways to solve some of the UI problems we face every day at work.

I just emerged from a standing-room-only demonstration of how to work with Silverlight and JavaScript. It seems that the managed code way of working with Silverlight is a 1.1 thing that’s coming soon (before Summer 07? I’d have to see the slides again); if you want to write a Silverlight application today, you’ll be using JavaScript.

It looks like working in Silverlight with XAML with JavaScript is a lot like working with the HTML DOM in JavaScript. You get elements, you manipulate properties, you respond to events… and it’s just as hard to debug as your standard client-side JavaScript app. The demos were interesting, showing how you do different things like start animations, intercept mouse events… but they were far from bug-free. I guess that’s just one of the pain points for early adoption.

Beyond that pain point, though, it looks pretty good. No harder than doing stuff you’re probably already doing, but with a much richer end result.

Two of the key things shown were the Downloader and the CreateFromXAML call.

The Downloader is a component that allows you to synchronously or asynchronously download content. It will also report on the status of the progress as it goes, so you can have an actual progress bar. This looks useful if you’ve got some large content like a lot of video where you want to download some to cache before starting the video playing. The Downloader supports ZIP, too, so if you have some compressed content to download, you’re set to go.

The CreateFromXAML method is sort of like an “eval” call - it takes some XAML that you’ve built up in code and parses it into native XAML nodes that can be inserted into your application. This is handy for building XAML content programmatically - say, adding rows to a table.

I like what I’ve seen so far from Silverlight, but I’ve yet to get some hands-on. I think my next stop is the lab area where you can get some first-hand experience with it by going through some walkthroughs and such.