Remarks by Scott Guthrie, Corporate Vice President, .NET Developer Platform
December 2, 2010
ANNOUNCER: Ladies and gentlemen, please welcome Corporate Vice President, Developer Division for the Microsoft Corporation, Scott Guthrie. (Applause.)
SCOTT GUTHRIE: Well, good morning and welcome to the Silverlight Firestarter. We’re excited to have over 20,000 people joining us live this morning, many here in the room, and the rest streamed live around the world.
Today, we’re going to provide a pretty packed day of content. We’ve got a lot of great training material around Silverlight and how you can build great Silverlight-based solutions. Today’s event, though, is also going to provide a first look at some of our future plans that will be coming out in the future.
One of the things that makes Silverlight great is the amazing developer community that’s been built up around it. We’ve got more than a million developers that are building using Silverlight today. We have hundreds of user groups around the world focused on Silverlight, many of which are holding viewing parties right now to watch this event live. And I want to say, let me start off by saying a huge thank you to everyone who participated within the community, for the amazing work that you do, and the real energy you bring to it. We on the team really, really appreciate it, and I just want to say a big thank you.
Also, I’d like to say a special thank you to someone in the audience who’s come here from Phoenix. Dave Campbell, who just blogged his 1,000 Silverlight Cream blog post. (Applause.) And he provides regular updates with lots of links to great articles and tutorials written by many of you around the Web, we want to say a big thank you to Dave.
So, we shipped Silverlight 4 a little over seven months ago, and we’ve seen some amazing uses of it since then. What I thought I’d do is just spend a little bit of time talking about a few of them. We continue to see a great adoption of Silverlight for premium media solutions. In the last few weeks alone, we’ve seen great companies like Canalplus, TV2, MaximumTV go live with both live and on-demand-based solutions with Silverlight. And seeing more and more companies and sites use Silverlight to deliver great Web applications.
Here’s just a small sampling of a few both enterprise and consumer applications that have been built recently with Silverlight 4. And what I thought I’d do is actually just spend a few moments highlighting two applications that I think illustrate some of the power of what you can do with the current shipping version.
The first one here is from our friends at SAP who this summer launched a Silverlight 4 enterprise-based solution that really provides a bunch of great customer value. So, if we could roll the video.
(Break for SAP video segment.)
SCOTT GUTHRIE: It was great to see SAP, as I mentioned, they shipped this great solution in July and really seeing some great enterprise adoption of Silverlight over the last year, really.
We’re also seeing a bunch of consumer experiences being built with Silverlight 4, and I’d like to show another video here that highlights some of the capabilities that it provides for circumstance scenarios.
A year ago at the PDC, we demonstrated a Facebook application that provides a great experience, which might come up on the screen shortly, that enables you to kind of experience Facebook in a much richer way, you can see it here. And it takes advantage of the out-of-browser capabilities of Silverlight 4. One of the things that we heard from people that saw it at the PDC was, “I want this app.” It was kind of a concept app to begin with, but our friends at Telerik have actually taken the application and turned it into a real production application. They’ve added things like Facebook chat support, you can see the smooth scrolling, the notification integrated within Facebook, and it really provides an awesome way to experience Facebook. What’s great is it’s now available and shipping. So, you can go to FaceDeck.Telerik.com and download and install it today.
A few weeks ago, we also shipped Windows Phone 7. Silverlight is the application platform for Windows Phone 7 and enables developers to build amazing user experiences for it. You can see here just one example from IMBD, an Identity Mine, and kind of the slick user experience and the way that you can fully take advantage of the panorama-style UI that Windows Phone 7 provides.
We’ve had more than 3,000 applications already been uploaded into the Windows Phone marketplace and here’s just a small smattering of them. What’s great is every user of a Windows Phone application can now browse, download, and optionally pay for any of the applications you build with it. And we’ve seen some great feedback already on the Windows Phone experience, some great reviews, and we’re really excited to see as more and more applications go live with it.
Most of today’s content is going to be focused on providing you with training and material that enables you to build great Silverlight solutions with today’s shipping technology. But I’m going to spend the rest of my time in this keynote this morning talking about where we’re going with Silverlight in the future.
We’ll pause briefly and recognize that there’s been a lot of ink on this topic in the last few weeks. Let me say up front that there is a Silverlight future, and we think it’s going to be a very bright one. Over the course of the next hour — (applause.) Over the course of the next hour, rather than just talk about it, we’re going to show it, and we’re going to show it with real code and a bunch of exciting new capabilities that we’re pretty happy and looking forward to getting your feedback on.
Yeah, we do live in a very connected world now, and there are a lot of devices out there, and users demand and expect the richest possible experiences on them. And it’s important to recognize, there’s not going to be one technology that’s going to be used to do all of it. At Microsoft, our goal is to kind of provide a technology portfolio that enables developers to build the best possible user experiences. We’re going to be investing heavily in HTML5, and we want to make sure we have the best browser out there that supports it.
We’re also going to invest very heavily in Silverlight, and we’re going to make sure that you can build the richest possible media and applications with it. And we’re investing in WPF and enabling you to build great desktop applications with it.
You know, these are all great technologies. Each one has its own strengths and weaknesses, but we think ultimately the flexibility of having each of these choices is a real strength of our developer platform and our overall tools offering. Ultimately, it’s going to enable you to build the richest possible experiences for your customers.
Today, though, we’re going to focus on the future of Silverlight. With that, I’m excited to introduce for the first time Silverlight 5. (Applause.)
Silverlight 5 is a major new release that brings with it a ton of enhancements for delivering great media experiences and for application development. With each version of Silverlight, we try to remain super focused on delivering the right features and the right set of capabilities. And like we’ve done with previous releases of Silverlight, a few months ago we created a website where anyone can go ahead and suggest new features as well as vote on ones that others have already suggested.
We’ve had more than 21,000 votes for a wide, wide range of features to be included in the next release of Silverlight, and I’m pleased to announce this morning that we have about 70 percent of all those votes now implemented in the product.
For the next hour, we’re going to talk about just a few of them and show off real code and some of the great experiences and capabilities that you can now take advantage of. Let’s start by talking about some of the work we’re doing to enable even richer premium media experiences.
So, with Silverlight today, we’ve got what we think is the richest media platform for delivering great HD content on the Web. Silverlight 5, we’re going to take that even richer, even more. We’re adding hardware video decode support. What this means now is instead of using your CPU to decode video, we can actually offload it onto the GPU of a system.
We can now stream 1080P HD video, smooth streaming, live and on demand on a netbook. Basically, gives you the richest possible experience when watching your video, and also means that your CPU and battery power are even better as well.
We’re adding a new capability we call Trick Play with Silverlight 5. What this means is it allows you to do what’s called variable speed playback of video as well as audio, and importantly for the audio, we do something that’s called pitch correction. Which means that if you speed up the training video, instead of the trainer sounding like a chipmunk, they’ll actually sound normal, and you can actually hear it and watch it and experience the video a little faster. It’s great for video training, it’s great for internal company videos that people sometimes make you watch, and it basically buys you some time. (Laughter.)
We’ve added a bunch of power management features. Basically means that we use less battery power when playing video. It also means that we’re integrating with things like the screen saver. So, if you’re watching a video on screen, the screen saver will no longer kick in. If you pause that video and go away from your computer, the screen saver will kick in. So, basically much richer power management, much better user experience.
We’re also integrating remote control support into Silverlight 5. What this means is you can now get a 10-foot experience against your PC and take advantage of any remote control device you already have to pause, fast forward, rewind your video. Again, we’ll have a much richer user experience just built into the box.
In addition to making big media investments on the client side with Silverlight 5, we’re also making big investments on the server side. To enable this, we ship a product today called IIS Media Services, it’s a free product, and it basically provides everything you need to deliver premium media experiences. So, if you want to put on something like the World Cup or the Olympics or some of the other great events that have been broadcast using Silverlight, you can actually just take this product and it has pretty much everything you need from a base perspective to deliver that type of experience.
We recently shipped IIS Media Services 4 a few weeks ago, and this added a bunch of additional capabilities for both live and on-demand-based streaming. In addition to supporting Silverlight desktop clients, it added support for smooth streaming to Windows Phone 7 devices and we’ve also introduced a feature called transmuxing which allows you to actually encode for smooth streaming, and on devices where Silverlight’s not installed, like the iPad and the iPhone, we can actually target the native iPhone/iPad streaming format. And so without having to install any application, you can actually stream video to a browser on those devices, and you can also consume video from any native application within that app store.
We’ve also added what’s called low-latency live streaming, this is important for things like financial updates or other types of key streaming events, so that the latency from when the event happens to the point it reaches someone who’s watching it can be as low as two or three seconds. And we’ve also added a bunch of performance delivery and management and operations infrastructure into the product.
The end result, we think is a really powerful product that’s both easy to use and allows you to build and host the most demanding of media experiences.
To kind of try to show off just the power and also hopefully the ease with which you can do this, I’d like to invite Chris Knowlton on stage to give us a demo that’s actually going to walk through end to end how to set up a video event that’s live and stream it to a bunch of different devices. Thanks, Chris. (Applause.)
CHRIS KNOWLTON: Thanks, Scott. Well, good morning. What I’d like to do is just talk really quickly about what I’m going to show you. I’m going to do an end-to-end live smooth streaming demo. And what you really need to do to do this is you have three major things: You need to take the raw video and compress it, you need to scale it out intelligently with the server, and then you need to play it back on the device, as Scott was just talking. So, really, the key point here is I’m going to do an easy setup. I’m going to get live video fast, and we’re going to go to multiple devices.
First, let me bring up Expression Encoder. This is Expression Encoder 4 Pro, and I’ll tell you right now, I’m going to choose the live broadcasting project. What I’m going to do here is actually show you a sneak peek of an Expression Encode 4 Pro Service Pack One, which has a few extra items in it, and I’ll show you those as we go through.
First, let me just set up. I have a Microsoft live cam here on the desk. I’m going to go ahead and select that. And then what I have it pointed at is a little toy here, I figured you’d rather look at that than at me. And I’ll go set this. Let me just set a few things real fast here.
And pick on other device, I’ll pick the same device. And then for encoding, there are actually a whole bunch of standard presets and things here you can choose. I’ve actually preconfigured one that works across these devices. So, I’ll just go ahead and choose that. And then on my output, this is where now I will go and switch over to IIS Media Services because what we’re really talking about on the output is basically what am I going to do with this stream? How am I going to push this out somewhere where somebody can actually take advantage of it? So I’m going to push it out to the IIS server, which is going to then scale it out in a broad and distributed, scalable method.
So, I’ll switch over to that real quick. And I have a live publishing play here that I already created on my demo website, and I’ll show you real quick, I just called it live. You can archive the media so you can play it back later on demand, you can also enable DVR, so digital video recording, so when you want that kind of TiVo or cable box experience where you pause the live stream, go get a beverage, come back, and then pick it up where you left off or go back to the live point, you can do that.
And then the new part, one of the things that Scott just mentioned is this ability to add mobile devices. And so where what you see is that with a single box, checkbox, I can enable output to Apple devices like the iPad that I have sitting here.
So, that’s set up. And I’m going to go ahead and — just a second here, let me start that publishing point. There we go. And flip back to Expression Encoder. Now what I want to do is actually now that I’ve set that up is go ahead and point the encoder. And if I click the button and I get a green light, now we’ve got the encoder talking to the server, so I know that the connection’s there.
And then on the templates tab, this is one of the new features in Expression Encoder coming out in the service pack. Now we have the able to do live Silverlight templates right in the UI. So, without having to write any code or write any URLs or anything now I can just say I’d like a Silverlight template, please, and you actually see that Silverlight preview up there on the screen.
And so I’m going to generate the file and push that out to the server so that it actually is there for people to hit. Go into my demo directory, say that’s where I want to push the files, and I generate the files. And finish. And we should be pretty good to go. So, I hit start. Now I have a live stream going out and just to show you that that’s working, I’ll refresh this page. I’ll actually hit the details. And what you see now is another new feature in live, smooth streaming. This is one of the management features that Scott referred to. It’s that ability to actually see in real time that streams are going out and exactly which streams are going out.
So, now I’m going to move over to the client, and it is already set here. So, I hit play on this. This is the Silverlight client that I just pushed up to the server. Let me just refresh because it may be from an earlier test we did here. There we go. OK. So, now we have it going to the desktop. Now, let’s do one other thing, before we go to iPad, I’ll also show you on Windows Phone 7. So, I’m going to just put this up here real quick. And so what I have here is a Silverlight media framework app written for the Windows Phone 7, which you can get now, it’s available for free up on CodePlex, and you can get it up there as a free download and use it for building applications on your client.
OK, so now we’ve got that working. You can see our stream back on Windows Phone 7 or on the desktop, now I’m going to pull up our iPad and this is the other feature we’re talking about, the ability to actually take that smooth stream and without re-encoding at all, go ahead and send that signal down to something that the iPad and iPhone understand natively.
So, here’s my home page on that server. I’ll just go into my bookmarks and pick a page that I built, so you don’t just have to look at a plain page. And I’ll load that up, it takes a little longer on the iPad. (Laughter.) And there we have that signal. And of course I could also go full screen and everything on that too. (Applause.)
Great. So, basically what we’ve done here is I’ve shown you in like three minutes, set up everything, took a live stream that could be publishing on the Web right now, put it across desktop, put it across Windows Phone, put it across non-Windows devices like the iPad, and got a great high-quality video experience in just minutes.
If you’re interested in learning more about any of the technologies I just showed, we’ll actually have a media session this afternoon, maybe you have not seen that on the agenda, but it will be right across the hall for those of you who are here in Redmond. Feel free to come into that, or we’ll post it online afterwards for folks who would like to see that.
With that, I think we’re good to go. Thanks very much. (Applause.)
SCOTT GUTHRIE: Chris showed you how easy it is to set up an HD media event, in this case live streamed to a variety of different devices, and obviously we also support on-demand and provide some of the richest experiences with that as well.
What’s great about IIS Media Services 4 is that it’s a free product. You can install it locally on any server you have within your own organization. You can also install it in a server that’s managed by a Windows hosting provider. We’re also pleased to announce that we’re going to be adding IIS Media Services support to Windows Azure, which is our cloud offering, and that’s going to enable you to scale up you delivery of smooth-streaming content even better than before and really take advantage of that cloud capacity.
So, that’s a little bit about media. Let’s talk about applications now. So, Silverlight provides a really rich application development platform. This enables you to build applications that are fast and responsive, can be delivered through a browser with very easy deployment, and can be built with great productivity.
And kind of set up some context for some of the new features we’re going to be showing today. I want to pause briefly and actually invite Dave Ossip on stage who is going to highlight some of the solutions they’ve already built as part of their SaaS-based offering for workforce management and really highlight some of the great capabilities that Silverlight provides. So, I’d like to invite Dave to show it off.
DAVE OSSIP: (Applause.) Thanks, Scott. Hi, everyone. Before I begin, let me just talk a bit about what we do. We go into organizations and we allow the companies to plan their labor, which is how much they have to spend. We then help the companies determine when in the day they should actually have the people working. We track when they come, when they go, calculate their pay. And for all of the employees working for those companies, we allow them to view their schedules, view their time cards, manage their availability.
So, today, what I’m going to do is I’m going to show you a real live app. It’s an app we’ve been selling for about 18 months now, it’s growing fantastically in the market. We’ve got retailers, got manufacturers, financial services companies using the actual product. Some companies have as few as a few hundred employees, other companies have as many as 40,000 people.
So, over here, if you can imagine, I’m an employee named Apton Short and I’m working at a retailer. And when I log on, you can see I’m shown my calendar for the upcoming month. It shows me where I’m on vacation, and it allows me to manage my availability, which is I can actually specify when in the day I’m actually prepared to actually work.
Obviously, I can also request time away from work. So, over here I’ve got a kid’s birthday that’s coming up, and over here, I’m going off to see Mickey Mouse at Disney, one’s been approved, one is pending.
I’m now going to just switch over tabs here and I’m now going to become a manager. So, I’m a manager of the store where Apton works. And when I log on, you can see I’m shown my dashboard. And it shows me what my forecasts of sales are for the actual week, it shows me what my scheduled hours, my budget, my variance. I can very simply go and I can zoom down into a particular department and the graph over there just panes are live.
And what the manager would do each week is they will start off with the plan, and they would go off and actually plan out their labor. What Silverlight allows us to do, it allows us to create a very complicated labor model that we can present simply to the actual users. We can allow them to make adjustments to the actual sales forecasts. We can allow them to drill down by department or drill down by day of week. So, I’d like to see some of the actual graphing, they can actually graph additional KPIs on the actual screen, or just wipe them out if they don’t want to see them.
Once the manager is happy with the actual plan, they would move over to the actual schedule. And what you see on the screen here is my labor coverage requirement throughout the day. Red is where I’m over-scheduled, and yellow is where I’m under-scheduled. And as I take the actual bars and move them around the actual screen, you see how the chart at the bottom updates in real time.
Also, if I actually violate a constraint, say I make the shift too long, I’ll just take one here as a constraint, make the shift too long, you see immediately I get an exception over here that tells me that I’ve exceeded the actual maximum amount. Likewise, if I were to actually take the shift and move it into a period when an employee’s unavailable, again, I get a different type of warning telling me that I’ve actually made an availability constraint.
So, this is the actual power of Silverlight over here. What you’re seeing is zero latency time on the actual screen, we’re actually running a full labor compliance engine and a pay engine inside the actual browser, making use of the CPU that resides inside the client. And this is massive because from a scalability perspective, we can have 40,000 people using the application at the same time without any resource load on the back end server.
So, when I look at this particular application versus previous applications that I built in, say, Java or other types of Web deployment platforms, we scale at about 1/30th of the cost of those other applications. Again, because we’re using the CPU inside the actual client.
Another quick benefit you see is as I actually make these changes, zero latency time, everything is instantaneous. And what that means, it means a couple things. The first thing, it means from a user perspective, they like the experience. And because they like the experience, they’re more apt to use it. And so we actually solve one of the biggest problems that’s always been around in our industry: user adoption.
The other benefit is actually for the organizations buying the system. And the big benefit is because it takes so much less time to use the application, about 50 percent of the time relative to traditional Web apps, it save them a lot of money.
Say, for instance, I take this 1,000-location retailer and instead of taking four hours each week to build a schedule, it now only takes me two hours. Well, if I happen to have 1,000 locations, I’m going to be saving something like 2,000 hours each week, and if each manager gets paid, say, $20 an hour, that’s $40,000 of savings per week, or $2 million on an annual basis. So, there are massive benefits.
So, there are benefits for us because we actually host the application, so it costs us much less because we don’t need as much back-end servers. The users like using the application, the companies actually save a tremendous amount of money because it’s quicker to use, and the final benefit we actually get from Silverlight is that from a development perspective, we’re able to produce code at about 25 percent of the cost as when we were a Java shop. So, massive efficiency benefits in using the actual platform on the actual tools.
So, our experience is actually fantastic as you can see with the Silverlight, great usability with the application, we can do very nice calculations, get user adoption, and obviously very happy with the product. So, I’d like to actually thank everyone and hope you’ve enjoyed the presentation. (Applause.)
SCOTT GUTHRIE: So everything you saw Dave present there is possible with Silverlight 4 today. With Silverlight 5, we’re going to make application development ever better.
We’re going to add some brand new capabilities we’re going to be talking about for the rest of this morning and some exciting new surprises that will be coming shortly.
One of the things we’re also really focusing on, though, is just how do we make the existing features and the existing feature areas a lot better? And so you’re also going to see in Silverlight 5 just a lot of those requests that you’ve asked for over the years of this feature or that feature. We just completed a lot of investment there in terms of just sort of rounding out the developer experience, making more productive, and allowing you to kind of deliver value even faster.
So, talking about some of the Silverlight 5 application features, want to talk about one of those areas that we significantly improved, which is the data binding space. We’ve made a lot of improvements to data binding with Silverlight 5 and I think one of the biggest improvements that I think a lot of developers are going to be looking forward to, especially once you see this feature in action, is data binding debugging. What this means now is that you can set break points on your data binding expressions within Silverlight and you can use them to actually easily step through your code. (Applause.) Yeah. I’m guessing maybe one or two people have had to debug or try to debug a data binding expression failure before, well now the debugger will make it easy.
We’re also adding markup extension support for Model view ViewModel. What this means is that you can now — actually one of the things we’re doing across most of these features here is converging a lot of the WPF and Silverlight data binding features and bringing into Silverlight a lot of the features that people have asked for from WPF that are really powerful and allow you to kind of build great applications.
Model view ViewModel support is one of them. We added a bunch of feature support in Silverlight 4 to support things like commanding. Well, one of the features that people have asked for that we’re adding now in Silverlight 5 is markup extension support. That means that you can actually very cleanly author a Model view ViewModel-based solution and do it in the same way that you do both in Silverlight and in WPF.
We’re also adding implicit data template support, which allows you to kind of have a common set of styles for a type by default across an application. We’re adding features like ancestor RelativeSource binding, binding and style setters, as well as adding a DataContextChanged event. Hopefully all of these things just sort of improve the productivity, save you a couple hours or a week in terms of developer time, and make the development experience even better.
Another area that’s kind of a core area that people work with a lot that we’ve made a lot of improvements with in Silverlight 5 has to do with WCF and RIA Services and our overall networking stack.
We now support WS-Trust support for security. That’s one of the top “asks” that people have asked for over the years.
We’ve also added some new features to enable what we call low-latency networking with Silverlight 5. This means if you want to use Silverlight for like a trading application or something that needs to be near real time in terms of communication, a lot faster responsiveness on the network stack and a lot of things you can do with that.
Continuing in the Model view ViewModel theme, we’re adding Model view ViewModel-friendly data sources with RIA Services. We’re also adding support for what we call end-to-end complex type support that you can actually take a model of just on the server, transform it back and forth between the client and the server, even if it’s a very complex type, and we’re also adding RIA Services support for Windows Azure so you can use things like the Windows Azure table storage provider on the back end in order to provide your data access.
Lots of other improvements here, but what I want to do right now is just actually invite John Papa on stage to actually just showcase a few of these and highlight some of the developer productivity wins you get out of it. So, with that, here’s John.
JOHN PAPA: Thanks, Scott. (Applause.) Thank you. So, Scott mentioned, you’re going to see a lot of really sexy features in Silverlight 5 today, but a lot of developers know that there are a lot of everyday programming tasks that can keep you up past midnight coding. So, Silverlight 5 has a lot of features that help simplify that, and I’m going to talk about some of those.
Some of them are about Model view ViewModel, help enabling situations with MVVM patterns to make things easier for you. And with that, I’m going to show you in Silverlight 5 my five favorite features to help developers do things better and more productivity.
So, looking at our application here, we’re going to go through a book club. And with this book club, first you’re going to notice some features called layout transitions. As I click on the books, you’re going to notice that the items are flying in from different areas. Let me show you that again really quick. These layout transitions, as I toggle through the pages, aren’t using any storyboards, there’s no vast animations here, we’ve simplified the process of creating animations to literally three to four lines of XAML that you can write, pull into your code as a developer, and actually pull in items from the left, the right, you can make opacity change, a very, very simple process.
So, let’s take a look at how that works. Coming into our code, we fly down to the book panel that we just looked at. Let’s look at the animation that’s used in here. So, down at the bottom, we’ve got a load transition. All you have to do is add this load transition and it’s got some simple properties in Silverlight 5 called startXOffset where is it going to start in that position? We’ve got a generate iteration of a second. You can set this to anything you’d like there, and then the opacity is going to start at 20 percent. So, it’s going to start at those coordinates, it’s going to pull in over a second. And I’ve also got a little extra added feature here for an easing to make it actually ease into place. By putting this little bit of XAML in your code, you get a nice little application pop, and so the application doesn’t just stand there and look pretty.
So, feature No. 2 I want to talk about. We talked about Model view ViewModel and how patterns are helping build Silverlight 5 applications. In Silverlight 5, we’ve added the RelativeSource FindAncestor feature, which is also in WPF. How does this help you? Well, there’s a common problem developers can have with Model view ViewModel and generally with data templates. As you’ll notice here, I’ve got a list of books in the center screen. Each book is inside of a data template, so I can show the title and the image.
Well, inside of there, I also want to show a list of deals for the book. How much do you get off? Ten percent? Twenty percent? Or is there any kind of a deal at all? The problem here that developers can face is that inside the data template, the context of the data is a book. So, I have no way of knowing what the deals are because I don’t have access to that information, which is actually out in my page.
So, with RelativeSource FindAncestor, I can now say, OK, I want to load this list of items from someplace else, go ahead and find the ancestor called UserControl and go find the list of deals. So, now I can load those list of deals with a single line of XAML, very, very easy to do, and enable buttons as well to run commands that are outside of the purview of this book.
So, how does all that work? Very simple XAML, and that’s the best part of these demos is all the XAML is really, really easy. Inside of my combo box, you can see down here I’ve got an item source. And instead of buying it straight to deals, which wouldn’t work because it doesn’t know what the deals are, it only knows about a book, I can say RelativeSource mode FindAncestor, which is optional, go find the nearest ancestor up the visual tree called a UserControl and bind to it. And at that point, I can then bind to the data context, which in this case is my View Model, using Model view ViewModel, and I find the deals, and I’m bound and everything loads properly. This wasn’t possible before, it’s something that was in WPF, and we’re getting closer parity to it.
So, my third feature I want to show is custom markup extensions. Custom markup extensions is a very popular feature, it’s very high on the list from user requests. What it allows you to basically do is change your XAML to do any code you want, in layman’s terms. So, what the custom markup extension will do for me in this case, I’ve taken a very popular request, which is I have a list of categories over here. When I select a category, I want to load the books. So, you can see it’s loading different books in the right-hand pane.
To do that, I don’t have any commanding support to do that inside of a list box out of the box. I can do something like triggers and behaviors, which take a lot of XAML to do and other knowledge, but what I really want to do is just click on this and load my code.
So, what I’ve done to do this right now, and I’ll stop my code, is inside of the event handler for the selection changed item from our list box, I’ve got a handler that’s going to go and run a code-behind. So, what I’m going to look for is my selection box right here. And when I select the list, it’s going to go out and it’s going to run selection change, here’s my selection change event in my code-behind. It’s not hard code, but the problem is I’ve got this code in my code-behind, which is not loosely coupled, it’s harder to test, and it doesn’t separate my presentation logic from my UI.
So, I’d like to get rid of all this code. And I’m glad to say with custom markup extensions in Silverlight 5, I can get rid of that code, and I can run any event and bind it to any view model very easily. With a single line of code, I’ll switch that line with this one, and you’ll see all I have to do is I set the selection change equal to my method binding, that’s my class, invoke, and then a method name. And I can bind directly from that list box to the category. And just to prove that his works, let’s open that up, let’s run the application. Thank you. (Laughter.) You are all sleepy.
And we’ll run the application and now we’ll go back to the books and we go through here and I click on it, my code still works. So, here we’ve got the custom markup extensions that work very easily so I can now have my loosely coupled MVVM features, again, another WPF parity feature that we’ve brought in.
So, we talked about three of my favorite features. My fourth favorite feature is a request I get a lot from customers. They might have an application, and maybe you want to change things on the fly across the entire application. So, for example, maybe the customers you have has blue as their company color or red or green or purple. So, what I would like to do is I would like to be able to change the theme of my entire application on the fly.
In Silverlight 4, this was a lot harder to do. In Silverlight 5, it’s very, very simple. It’s dead simple. So, what I’m going to show you here is if you click on one of these buttons up here, all the accent colors in my application are going to change immediately. And that’s application wide. I can click on different pages, I can flick it as I go. Now it’s purple, whatever your favorite colors, the application, you can save that in a database for the user or a cookie, whatever you need to do, very simple to do.
What this is enabled through for feature 4 is binding and style setters. So, now in style setters with Silverlight 5, we have binding features and I’ll show you how simple this is. It’s really great. So, I’ve got this style called accent blocks. In my accent blocks, normally I would set, in Silverlight 4, my property for fill equal to some color like red, green, blue, et cetera.
In Silverlight 5, I can instead say, hey, let’s bind this to some object. And the object, in this case, is my color setting where I store whatever the user chose, and I bind it to the property called My Brush. And then all throughout my styles, anywhere I need to use that color, I can bind right to it, it updates immediately, really, really nice.
So, those are the first four features I wanted to mentioned. My fifth favorite feature is actually my No. 1 feature, and I get really excited talking about this.
How many times a week do developers sit there, look at their XAML, and they don’t know what’s wrong with it? You want to be able to debug it and set break points in there. And I’m very, very excited to say that now you can actually set break points inside your XAML.
So, to prove this, I notice that in my application, I didn’t have the author name showing up in the list box. So, if I run this real quick, we can see that there’s an author name missing. How do I know what’s happening? What’s going on with my application? Because this is all happening through binding in Silverlight 4, I couldn’t tell unless I hunted and pecked. Right here, the author name is supposed to show up, and also I noticed the book of the day is blank, and I’m pretty darn sure there’s supposed to be a book of the day up here by somebody.
Let’s go back to our code and we’re going to set a break point right where I know I’m doing the author binding. So, here I’ve got the author binding, it looks right, it says binding to author full name, I’ve got a string format in here. So, what’s going to happen when I run this? And let’s look for that image while I’m at it — while I’m looking for it, too.
So, if I look for my image source for the book of the day, that binding looks right too. I’ve got a binding that says image source and binding of title. I didn’t even realize the title is supposed to show up. So, let’s go ahead and press “run” see what happens.
So, now when I run the application, it’s going to run, I go over to my books, and as soon as I hit the binding, it stops in the XAML. Very, very cool. (Applause.) The best part is not only does it stop there, once you get in the locals window, and I’ll zoom in here for you, it’s really, really astounding, it gets me excited. So, we look at this here, and I zoom in, and you can see immediately saying there’s an error. Not only is there an error, but right away I can see author full name property is not found on the book. So, I’ve got the wrong property name. So, not only is it telling me the wrong property name is being used, but if I dive into here, I can also see the final source is of type book, so I know I’m binding to the right object, which is pretty good. I kind of figured that since the image was showing up.
But then I can look in here and look at other information. Inside the binding I can see that, hey, there’s the string format. So, my string format’s set to buy zero, that looks right, I think I set that before. Let’s scroll down here. There’s the error information. I’ve got inner exception error, which we saw earlier.
Now, let’s look at the final source. What’s the problem here? So I’m going to go look for my author full name property. Ah, I see the problem. Author full name doesn’t exist, the name of the property is author, and the value is John Papa. So, I know now that I’ve mis-typed the name, I can type the correct name, author, in there.
So, let’s get out of there. We’ll keep running because I know I’ve got another binding that I have to deal with. And we’ll remove the break point for now.
So, my second binding gets hit in the same time. This was the image for the book of the day. And for the book of the day, I know that there’s no — I know that there’s supposed to be a book of the day on here. In this case, I’ve got a binding expression path error again. It says image source property is not found on book of the day.
Well, what’s the problem? I know there’s an image source property. So, I dive in here, and I use those same properties once again. In this case, I’m going to use the final source, and I’m going to look down, and here’s the problem. Final source is a book of the day, it only has properties for book, book ID, and day. There is no image in here. The real issue is inside of the book I’ve got a property called image source. I do this all the time in programming, you forget how deep your objects are and your properties, what I was supposed to be typing is Book.ImageSource.
So, very quickly, very easily, I can tell everybody why my demo didn’t work. How many demos do you see in keynotes that don’t work on purpose? I can change it to Book.ImageSource, that’s all good. I come back up here, I search for the author full name so you know it’s not author full name, silly, it’s just author. And then I can go back, run my application, and I should see the author full name in every book template, and then the book of the day should also show up with the appropriate book for whatever that day happens to be.
So, we click over. Forgot to remove my binding, of course. And now as you can see, John Papa shows up, and the book of the day is The Legend of the Red Polo, which is a very popular read, I expect everyone to read tonight.
So, with all that, I want to just reiterate the five features or my favorite features, these are low-level programming type things that get developers excited, I’m a developer at heart. Layout transitions, really easy to do now, RelativeSource FindAncestor, custom markup extensions, binding and style setters, all help you do binding features, all those everyday tasks. And my favorite of all, DataBinding debugging.
Thank you all very much. (Applause.)
SCOTT GUTHRIE: So John’s highlighted some of the improvements we’re making to the existing data binding set of features.
Let’s now talk a little bit about some of the text and printing improvements we’re adding as well. We’re spending a lot of time with this release focusing on text clarity, providing a way you can deliver even crisper and cleaner text when it’s rendered on the screen, something people have asked for for a while. We’re adding multi-column text flow features so you can actually flow text across multiple linked containers within your site.
We’re adding character tracking and wedding support, and full open-type font support for additional character capabilities. And we’re also introducing now a new Vector PostScript printing API, which allows you to programmatically construct a print document. It’s great for both documents and reports. It means that you can now print whatever you want instead of just what’s on the screen within your applications, gives you a lot more capability and a lot more power.
So, that’s a little bit about text and printing. Obviously for looking at information, visualizing information, that’s pretty important.
Another kind of capability that we’ve introduced with Silverlight 4 is the capability we call Pivot. Now, Pivot originally shipped as a separate control that you can use in Silverlight 4 today. We’ve recently moved the Pivot team into the Silverlight organization, and Pivot will be a built-in feature of the Silverlight 5 SDK, which means that you can just use it out of the box when you’re building your applications.
To kind of demo Pivot a little bit, as well as to talk about — give us a sneak peek at a few things that we’re looking at for the future, I’d like to invite Angela Wise on stage. (Applause.)
ANGELA WISE: Thanks. Hi there. I’m really, really excited to demo PivotViewer for you guys, it’s a cool new data virtualization technology built on top of Silverlight. And as Scott said, you can actually download it now in Silverlight.net, so I’m going to show you what makes PivotViewer so special, and I’m also going to talk a little bit about what the future of PivotViewer is going to look like.
So, PivotViewer is a special kind of data virtualization that has both a set of metadata associated with the items, so you can zoom in and zoom out on items. You can also look at a set of metadata associated with those items. So, in this particular case, we’re looking at a chain of coffee shops and each coffee shop has a set of information about it like their revenue in FY10 and their average dollar of sales.
And so let’s pretend like I own this particular chain of coffee shops, and I’m looking at this set of data, and I want to extract insights from my data, right? I have this set of data, but I want to learn things about it. Ten of you are sort of uniquely positioned to do that.
So, let’s say I think that average profit margin is a really good way to see how my stores are doing. Now, immediately, I notice that the vast majority of my stores have pretty good profit margins. But let’s take a look at the stores that aren’t doing so well. So, maybe the stores that have less than 10 percent profit margin.
So, immediately I’m drilling down into the set of results, and now I can hypothesize about why these stores are not doing so well, and test my hypothesis very quickly with Pivot.
So, let’s say, you know, maybe I think that the profit margin is correlated to store type, and immediately, I see it is correlated to store type. But what’s really interesting in Pivot is that you can see trends that would otherwise be invisible, or be difficult to see with other methods of viewing your data.
So, this is really great. It’s a really compelling way to look at data. But one of the things we hear from customers is that they have really dynamic data sets that they want to visualize in PivotViewer. So, I sort of created a little app that plays around with the concept of dynamic pivot collection.
So, in this particular case, I’m going to be pinging the eBay API with Windows Phone 7, and obviously nothing is much more dynamic than eBay, right? These auctions are constantly starting, they’re constantly stopping. This is constantly updating information. And so what I did here is I pinged the eBay APIs. Got back results for Windows Phone 7, and dynamically created this pivot collection on the fly, including zoomable visuals. And as you can see, the performance is really fantastic. And just like my other PivotViewer app, I can easily narrow in on my results and find what I’m looking for.
So, let’s say that maybe these are not the phones I’m looking for. Another really cool thing I can do is add items to this particular pivot collection. So, without reloading the collection at all, I am pinging the eBay API again. I’m getting back the set of metadata, and I’m dynamically generating the XAML-based visuals that are, again, zoomable and very performant. So, this is all dynamic, it’s all happening client side, and it’s all zoomable and compelling.
So, again, I’m searching for a Windows Phone. Let’s say I want to narrow it by price. I just want a more expensive phone because I’m a high roller. I want really great seller feedback, because I want to buy from a reputable seller, and immediately, in two seconds, I’ve found the potential phones that are right for me.
So, other things that we’re thinking about in the future of Pivot are developer customization beyond what you can do in v.1. So, I think one of the most compelling things here is that I actually took the eBay shopping cart experience and put it right here in what used to be the metadata pane. So, this will just take any XAML you want.
I can also customize the colors and the styles, and we’re looking at customization options beyond what you can see in this demo.
So, because we’re literally creating these collections on the fly, we can search for any term and get back a set of pivotized results. And you could literally do this with any data you had on hand. So, what’s happening here is, again, I’m pinging the eBay APIs with Silverlight, I’m dynamically constructing both the collection, which is the set of metadata and the visual, which is XAML-based. Again, it’s zoomable, and it’s filterable.
So, you know, one of the interesting things about books is that it has a condition tag on it. So, we can quickly sort by condition, look at only the new books, scroll in, scroll out, and find exactly what I’m looking for. So, while dynamic data in a flat list can be really, really overwhelming because it’s constantly changing and maybe you have a ton of results like eBay, when you put it in Pivot, you see that it’s really easy to get to exactly what you want. And I think for this audience, what’s most compelling is the fact that this could be written in literally a few lines of code with a XAML template representing the visual.
So, thank you so much. Please check out PivotViewer on Silverlight.net. (Applause.)
SCOTT GUTHRIE: So I think Angela shows some of the powerful data and information virtualization capabilities that you can do both Silverlight today and then where we’re going with Silverlight 5 in the future.
I want to talk now a little bit about graphics in general. You saw some of the great 2D graphics performance that Angela just demo’d. With Silverlight 5, we’re taking graphics even further. We’re providing a new immediate mode graphics API that gives you the ability to draw directly to the GPU of your system. It enables much richer visuals, much better data virtualization kind of capabilities built in. It also provides GPU-accelerated 3D support. And you’re going to see hopefully in a little bit some pretty eye-popping experiences that you can build with it.
To help show off just a few of those, I’d like to invite two of our friends from Archetype on stage, Luigi and Guido Rosso, who are going to show off a pretty amazing experience that’s been built with it. (Applause.)
LUIGI ROSSO: Thanks, Scott. (Applause.)
Hello! My name is Luigi Rosso. I’m the CTO and one of the founders of Archetype. This is my twin brother Guido Ross. He’s the CCO, and he’s also one of the founders of Archetype.
We got invited out here by Microsoft to show you guys some really cool 3D demos that showcase some of these new low level 3D APIs.
We’ve been waiting for 3D for a really long time in a development platform like this, so we’re really excited about what we’re going to show you. Why don’t we get started?
The first demo is going to be a demo that’s running inside of the browser. It’s a Silverlight 5 application. It’s a really compelling data visualization app. What you first saw was a wireframe version of the world spinning around, and what you can do is you can turn on all these different layers to showcase a bunch of different layers of the world. So, for example, we’ve got the earth spinning, you’ve got a cloud layer spinning at a different speed on top of it. We can turn on a magnetic field. You can see that it’s all spinning in 3D. This is real 3D running inside of a browser with really, really good performance.
Why don’t we move onto something a little more real world? So, the demo that we’re going to show you is a doctor’s portal. And what’s happening now is that it’s downloading a bunch of textures and 3D models progressively. Because it’s Silverlight, it plays really well with the Web, stuff that it’s already been doing.
So, when it comes up, we’ve got a portal that shows a list of patients, we’ve got a bunch of records, we’ve got a calendar and a dashboard. We can click on one of these patients. Why don’t we click on Scott? And you can see that a 3D model and all of his vital statistics flew in from the right-hand side.
What’s really cool to note here is that that 3D model is layered on top of a 2D image. It’s just inside of a canvas really. The image is in a grid that’s in the background, and it’s stretched to fill.
And we’ve got another image, which is scan lines layered on top of that. And you saw those grids animate with render transform, and those moved perfectly, there was no weird stuff at all, everything was super smooth, really good performance.
Why don’t we zoom in on the head, and you can get a really good sense of just the quality that we’re getting here. This is a really high quality model. The performance again is astounding. You can zoom in and see every single pore. (Laughter.) We’re doing this with normal bitmapping.
So, why don’t we move over to the heart area with the next button. So, what you can see here is that — well, all you can see is typical red polo. Why don’t we fade it out a little bit, and you can see Scott’s anatomically correct body here. (Laughter.) It took a lot of work to make this right. (Laughter, applause.)
So, one of the cool features that we added into this demo is the ability to peel away all these layers, so we can fade out the body a little bit as well. So, now as that fades out, you can reveal the musculature. We can fade that out, and you’re going to see the skeleton. And now under the skeleton you can see Scott’s beating heart. And if we go in, you can get a little bit of a sense of the animation that’s going on there, too.
The way that we’re doing that is with it’s just a custom Vertix Shader that’s doing some magic. There’s some flow control, there’s a little bit of moving around of the vertices and stuff based on a timer, and it’s running really, really well.
You can spin it around from the inside. Actually this is pretty cool. You can see his ribcage from the inside. This is a shot that most people would not be able to see traditionally. So, it’s actually kind of cool that you can show this kind of stuff.
You know, Scott’s on the computer a lot. A doctor may want to check out his hand and make sure things look good there. So, we’re going to just show you what’s possible, what we were showing here.
So, as you noted, by the way, the camera is animating from position to position. The way we’re doing that is in managed code. We’re simply animating a couple properties like the target lookout position, the position of the camera, orbit rotations and that kind of stuff. And we manage that, we animate that in managed code, and then we bind it to the Vertix Shader, which then simply shows the right camera angle, and we transform everything to the right position.
So, you can really get a good sense for the layers here. We can turn on the musculature like we’ve gotten now, and you can see that you can see all the details in his hand. You can move in close.
Why don’t we do one more beauty shot, and you can really see how hard Scott’s been hitting the gym. Put it in the body. And if there ever was any doubt as to Scott’s commitment to Silverlight, well, let’s just leave it at this. (Laughter.) (Applause.) Thank you.
So, just to reel it back in, this demo was built in a week. These demos were both built in a week. We were invited up here by Microsoft about a week ago. We got a call in right before Thanksgiving break. They showed us this really cool 3D APIs that were going into Silverlight 5. We’re super excited about how fast this has moved, how quickly we were able to do this, how quickly the API has implemented, how good it is, and we’re really excited to be playing with it in the future as well.
Thank you so much. (Applause.)
SCOTT GUTHRIE: If there’s two things that you leave this event with remembering — (laughter) — the first one is I’m really ripped — (laughter) — and the second one is Silverlight 5 is, too.
And I think just seeing what you can do in a week of work is pretty amazing, as you saw last night for the first time, and it kind of blew us away that you could actually do all that, and do it so quickly. So, I think it’s going to enable a bunch of really amazing experiences with Silverlight, and really take information and data visualizing to the next level.
So, let’s talk about some other new capabilities we’re enabling from an end user experience perspective.
With Silverlight 4 we added much richer support to enable out-of-browser applications with Silverlight. This means you can download an app, run it in the browser, or take it out, and integrate it as part of the desktop.
And with Silverlight 5 we’re making this even richer. We’re specifically adding support for what we call multiple windows. And that means that you can actually within your application now create child windows that you can manage as part of the out-of-browser experience, one of the most top requested features we have.
We’re also adding what we call P/Invoke support. So, with Silverlight 4 we added the ability to call COM APIs. With Silverlight 5 you can now called unmanaged DLL libraries. You can also call Win 32 APIs. And again opens up a lot of device possibilities, a lot of integration with the operating system.
We’re also adding what we call enterprise group policy support. This is useful for a lot of intranet-based scenarios where an enterprise might want to either lock down what an application either on Web or internally can do from a security perspective, or open up the sandbox. And that means that you can actually have in-browser applications with Silverlight 5 if the enterprise allows it and makes it trusted, have that trusted application running inside the browser, and take further advantage of the sandbox and things. You can talk to Office, you can host HTML inside a Silverlight app inside the browser, and more.
And to show off just a couple of those kind of capabilities and what this enables, I’d like to invite Dave Wolf from Cynergy Systems to show off the great application they’ve built for Village Health.
DAVE WOLF: Thanks, Scott. (Applause.)
Good morning. So, at Cynergy our passion is helping companies to imagine new software products, to design those products, both to help people who are going to experience them, but also how they’ll interact with them. But probably most importantly, it’s to help them ship incredible software.
And over the last, what now, three and a half years since Microsoft announced Silverlight, we’ve helped companies ship over a hundred products built on top of the Silverlight platform. It’s been an incredible three years. And we’ve done that across nearly every vertical imaginable.
But over the last couple of years, the health care vertical has really, really started booming, and we’ve been working with progressive organizations like DaVita Village Health to design, concept, and build out these incredible software products.
Over the last year, we’ve worked with DaVita Village Health to create Capella. Capella is a case management application that integrated into their integrated care model for their over 6,000 patients in the United States that are suffering with kidney disease. This is a Silverlight 4 out-of-browser application that clinicians and caregivers and nurses work with as they’re working with the patients every day.
Now, over the last two weeks, we’ve worked hand-in-hand with folks from DaVita Village Health, as well as Microsoft, to do some research and development around what this application might look like in Silverlight 5. So, let’s go take a look.
Now, what you guys are seeing here is Capella. This is a Silverlight 4 out-of-browser application. We wanted it to look for everybody working on it like a rich, engaging, immersive desktop application like they’d be used to working with all day long, and we wanted it to be really the heart of this integrated care model that Village Health does.
So, you see here I’m on the dashboard. I’ve got rich graphing and charting, a lot of intelligent charting options, so I can very quickly switch between patients and switch back and forth so I could see all the patients that I’m working with. I can actually see alerts, so we’ll see some alerts popping up at the bottom. And in an instant I can jump in and see all the alerts and see how people have been tracking throughout the whole care process, and see if there’s anything I need to deal with, as well.
Now, what we wanted to do was also take a lot of advantage in the initial design in landscape, right? You guys know when you’re working with these enterprise desktop apps, landscape is precious, every pixel is absolutely priceless.
So, to be able to do and go from patient to patient, and see not only master information but drill into the details, do that from patient to patient, jump back and forth, is really important.
Now, with Silverlight 5, as Scott had said, they added the option of multiple window support. And we wanted to see the kinds of things that we could do as an R&D project around increasing its landscape.
So, we said, what if we took things like the quick notes, I’m taking notes all day long, what if I could take notes and actually tear them off the screen and bake them into their own window. You’d see I could tear window page to page to page off of those quick notes.
We wanted to take it a step further, though, because throughout the day these clinicians are working with lots of patients throughout the day, and DaVita Village Health has a whole integrated care model about how they work with those folks, and how they move them through this difficult process.
And we wanted to come and say, well, how might we use these multiple windows to help out with working with multiple patients. So, what if I could take all my patients and tear them off the screen? What if I could then drill into a particular patient, and look at how they’ve been faring on their chart? Do a little bit of an Aero snap here, snap that on, snap that on, and I actually am able to build my own screens and my own layouts.
Now, these are true operating system screens. So, if I go down and do an Aero view, we’ll see all those windows. They’re true windows. I can interact with them like I would any other window. So, really great feature I think that clinicians are going to love as they’re working with that.
Now, I said at the beginning we did this as a desktop application, rich, engaging, immersive, the kinds of things people were used to working with. And one of the reasons that you go to the desktop is that you want to interact with the operating system and with devices and applications that are running on it.
Now, Scott had mentioned that in Silverlight 5 they came up with the additional feature of P/Invoke or the ability to fire a process off, to do things like interact with devices.
So, we wanted to do some R&D around what that might be like. What we did was we realized as you’re going through this challenge and struggle through kidney disease, you’re monitoring your body constantly and all kinds of diagnostic information. And so one of the items that people would monitor would be blood sugar.
So, what we did is we’ve taken this device, this is a Contour from Bayer. It’s a glucose meter that’s built into a USB device. And so what you can do is monitor your glucose. You’ll see here we’ve taken a reading of glucose a little bit earlier today, after I’d had about four coffees and a Danish backstage, in order to get our blood sugar.
And so what we can do is take this device, we’re going to actually plug it into the USB here — and if I can get it to go in the right direction, there we go — and now the operating system is going to recognize that device.
And what I can do now is directly from this Silverlight 5 application running on the desktop is choose to retrieve the reading. This is going to fire off a local Win 32 application. That application is going to connect out over USB to the glucose meter, extract the data of the readings that we’ve had. We’ll see here it’s now importing it in. We see the 93 milligram reading. I can simply choose to accept that, import that in, custom vector drawing, be able to draw the call-outs, draw the charts in real time. We’re going to see real time information off of clinical lab equipment directly onto the desktop in an application you wrote in Silverlight.
Scott had also mentioned rich vector printing. So, we’re actually able to take these sorts of custom vector drawings and print them out exactly as is, so we can do paper charting when necessary as well.
Now, one of the things we talk about a lot at Cynergy is the idea of building the right experience for the right person and on the right device.
And although the desktop is great, we know there are clinical environments where being able to run applications in a browser-hosted environment would be a better fit. However, we also know the importance about the data that we’re talking about in health care. And we need to be able to do that and still honor the enterprise security, group permissions, and governance models that are running in the enterprise. And Silverlight 5 helped us address that as well.
So, what we have here is the Capella application running inside of a browser — still Silverlight 5, same application, hosted inside of IE.
But what I can do now is do the same kind of rich integration with the local operating system like we saw on the desktop.
So, what if, for instance, I wanted to take the key metrics that are being tracked here for this particular patient, and very rapidly export them right out to Excel, firing a local operating system process from within Silverlight running in a browser, taking advantage of all the existing group permissions as well.
So, we’re pretty excited about what Silverlight 5 is bringing to bear for us, the work and the research and development we’ve done only over the last two weeks. It’s been a great partnership with everyone at Microsoft, and Scott’s team, the folks at DaVita Village Health, Rajiv Kagani there. So, it’s been really incredible. We’re really excited about what we’re going to do over the next year as well, and look forward to seeing you guys with some more exciting stuff next time. Thanks a lot. (Applause.)
SCOTT GUTHRIE: Well, building great apps is easier when you have great tools, and we think with Visual Studio and with Expression Blend we have the richest design and development tools out there for building these types of application solutions.
Two of the areas we’re investing heavily in going forward with these tools are with automated UI testing to make it easier for you, once you build your solution or as you’re building your solution, to unit test it and to automate and make sure that the functionality is correct, as well as in improving profiling support so that you can profile your Silverlight-based applications, and quickly identify performance hotspots and issues within them.
And what I’d like to do is actually just invite John Papa back onstage to show off some of the new testing capabilities that we’re adding to VS 2010 for Silverlight.
JOHN PAPA: Thanks, Scott. (Applause.)
Couldn’t get rid of me.
So, Scott mentioned we’ve some really cool new testing features built into the tooling. So, I want to show you one today, but to set this up, in this application that I have, which may look familiar, I’ve got a book application, and I’ve got regular unit test in my program, everything works great, I can test the application, but what I want to do is I want to have user automated testing. So, I want to simulate what the user is going to do in the application, and then run tests against that.
With a few features we have called the Coded UI, which you can download for free, it’s in a feature pack two up on our MSDN site, you can use the Coded UI to generate tests, to record tests, and to replay the tests; very, very simple to do.
So, what I want to do first is I want to say when I select a technology, and I type in the technology of data, to filter out the titles, then I can see that this great book written by a guy named John Papa appears. That’s the test I want to simulate.
So, I’ll reset that. Now let’s go generate our test.
Over in Visual Studio the first thing I had to do is take my exact project, without changing any code, and I can open up my Silverlight project, and here I have a new reference I have to add, this big, long guy here. That is my automation helper from the Coded UI. Once I add this to my project, now I’m ready to generate my Coded UI tests.
So, the second thing I did is I created a test project, and I created a Coded UI test file. I do new file, created a Coded UI test, and here I get this method generated for me. I’ll get rid of the magnifier for us. And inside that method all I have to do is hit ctrl-slash-C, and now my recording is appearing in that bottom right-hand corner.
So, it’s telling me when I press this red button, it’s going to record all the actions the user does.
So, I’m going to press the red button, wait for it to start up. It’s ready to go. Now any action I do on this computer is going to be recorded.
So, I’m going to hit technology, it’s going to filter them out to the right technology books. Now I’m going to type in the book by John Papa, and I’m going to search for it. Oh, wait a minute, I made a mistake here. There’s no books — supposed to update, I didn’t click the button — there’s no books by John Papa in the title. That’s the author name. I’m supposed to filter by the title. So, I made a mistake. I’m going to hit the X. Now I’m going to type in data like I meant to, and I’m going to click the button, and the book appears as John Papa.
So, let’s make sure I did this right. In the Coded UI I’ve got this screen down here from my recorded actions. Let’s zoom in on that. So, here’s my recorded actions I have for categories, tabs, and I’ve got a bunch of other things like hitting my Windows button; very easy to do, to delete them. I can select the actions, delete them, say I didn’t mean to do that. And I can even go in now and say, all right, I’m done with this, let’s generate the code.
Now it tells me what method do you want to create for your test UI. I’ll let it call up recorded method two. I’ve now recorded a test that’s going to go out and do exactly what the UI just did.
But that’s not enough. I want to know when it’s done that the value here for the title is Data Driven Services, and the author is John Papa.
So, I’m going to take these crosshairs — and this is cool — highlight over the bars, and you can see that different elements are being highlighted.
So, I want to drag and take the author name, it’s going to pull up all the properties for that particular field. At the conclusion of my test, I want to say text equals John Papa, I’m going to add an assertion. I can say it’s equal or greater than, contains. And that looks right to me. And at the end don’t forget to click “generate code” again. This is going to create an assert method. I click that, generates code in Visual Studio, and I’m all done in my Coded UI. We’ll flip back here, going to reset my test.
Now, in my Coded UI you’ll see the recorded method. That’s going to go out and run the UI to simulate what I did when I typed everything in. The assert method is going to make sure the value is John Papa when I’m done.
So, what do you do with all this? Well, the first thing you do is you right-click, you run your test, and then the test results are going to go out and run the test for me. So, you can see in progress at the bottom. It’s going to flip back over to Internet Explorer. It’s now going to simulate selecting technology. It’s going to type in the search box. Oops, there’s my mistake, John Papa. It’s then going to go search, it’s then going to correct itself, and type in the word “data.” And at the end, it should bring up the book that says John Papa. Let’s see if it works.
Brought up John Papa, the test results are passed, everything looks good.
I’ve got two problems, though. One, I had all those extra actions in my test. So, I click on this UI map file, which gets generated for you, and you can see in my assert method I’ve got my test for John Papa the text, that’s what it’s equal to, and in my recorded method there’s all my actions.
So, what I can do is I can say get rid of the John Papa typing, the tab for the filter, and all those other actions, right-click, let’s delete them, let’s clean up my test. Much, much smaller now. Go in, select a category — I even forgot that guy — select a category, type data, hit tab, pretty go. That’s all I really wanted.
The second thing is we know my test works when it says John Papa. Let’s make sure my failure works as well.
So, here I want to change the expected value to Scott Guthrie. So, here we go. We’re going to do that. We’re going to go back to our test now. I could rerun it by clicking the button for run. It should now pop up my UI, follow through the same steps. So, I’ll select the technology. After I select technology, I type data in the search box, I press search. The result comes back, the name is John Papa. It should be Scott Guthrie according to my test. And I see that it had a failure.
So, you can see with the Coded UI very, very easy to do, simple to set up. You can record events, you can replay events, and then you can generate code pretty easily.
Thank you all very much. (Applause.)
SCOTT GUTHRIE: Well, we’ve always focused on the performance of the Silverlight runtime, and with Silverlight 5 we’re looking to make it even better.
Specifically we’re focusing a lot with Silverlight 5 on making applications start up faster, so the very first time you load a Silverlight application, have the paint on the screen show up a lot faster, and have the app be more responsive immediately.
We’re also working to integrate some of the hardware acceleration capabilities of Silverlight with the new hardware acceleration capabilities of IE9.
What this means now is if you’re running in windowless mode in Silverlight, inside IE9, it will just run faster and integrate those hardware capabilities.
We’re also for the first time introducing a full 64-bit version of the Silverlight runtime, which means that you can now use it both in 32-bit browsers, as well as when people switch into 64-bit mode on their browser devices.
So, we’ve looked at a bunch of Silverlight applications that have been built a variety of people here this morning. What I want to do is show one last demo here this morning of an application that we’re building here at Microsoft that’s built using Silverlight. It’s a great application coming from the SQL Server team that really enables business analysis and business reporting in a radically improved way.
And I’d like to invite Thierry from that team to give you a first look at it.
THIERRY D’HERS: Thank you, Scott. (Applause.)
All right, so I’m very excited to be with you here today to give you some of the new developments in the area of business intelligence at Microsoft.
When we talk to customers, they tell us they want more ease of use, they want more interactivity, they want a more visual experience with the data.
We didn’t want to just stop there. We actually really wanted to build a very fun experience, a very rewarding experience, something that they really want to engage with.
So, when we looked at the platform available to us to build that experience, Silverlight was the obvious choice. And so without any further ado, let me introduce you to Crescent.
So, it’s an in-browser here. So, we’re in the browser. You can see that we wanted to build a very familiar experience as well. So, you have the Ribbon at the top, so it very much looks like an Office experience, and people already know how to navigate there.
We also have a task pane to the right that allows me to navigate my data. So, I have a whole bunch of tables here, and access to my data there.
We actually here are working with a fairly small dataset by our standards, about 10 million rows. It’s actually the stats of the downloads in Netflix for Xbox Live for all the movies for last year.
So, the first thing I want to do is actually select my movie table. And as you can see here, I’m just getting a somewhat boring table — slightly nicer because we’ve put the posters in it. But it is just a table of transactions at some point.
What we want to do here is actually we want to allow users to actually change the type of visualization to find interesting things about that data.
So, the first thing we want to let them do is, for example, change that look and feel to more of a callout form. And obviously we want to resize that so that we can do some more interesting things in that page. So, as you can see as I resize, everything just automatically gets in place in the proper place.
Now, I also want to add some more aggregated stats into my report. So, here I’m going to select, for example, ratings, and I say I want to break down ratings and find out the number of downloads by ratings. So, that’s somewhat interesting. Still it’s just a table. What if I change that let’s say to a column chart, and resize that so that we can have something a bit bigger here. That’s kind of OK.
Now let me do it again. Let me do it now for genre. And let’s say that time I actually want to track revenue year to date. And the same thing here, I will just resize that and make it this time let’s say a bar chart.
So, in about 30, 40 seconds I built a fairly nice looking report. Now, it is not a static object, it’s fully interactive. So, the first thing I might want to do is ask some questions. So, what’s going on with PG-13, for example? So, as you can see, as soon as I click, my list on the left, my list of transactions gets filtered, as well as my other charts.
Now, what’s interesting here, if you look at what actually has been displayed, it shows me the proportion, really the contribution of each of the PG-13 movies through the total for each of the genres. So, that’s kind of somewhat interesting to learn some interesting things here. Apparently a set of the communities are PG-13, OK. What about R movies? R-rated movies are very interesting. One thing I find out here is there’s no sci-fi being R-rated movie. That’s kind of odd that R-rated movie will be in the sci-fi. And as you can see on the list on the left got filtered again, you know, 28 Weeks Later, it has brought that back, clearly an R-rated movie here. So, that’s kind of interesting.
I want to see more information about those stats here. So, let’ me actually change that visualization here to more of a scatter chart this time. So, I can use multiple axes and multiple measures to show information.
So, here we have revenue in the X axis. Why don’t I use number of downloads year to date in the Y axis, and then what I’m going to do is I’m going to use number of titles as the size of those bubbles.
That’s kind of cool, but really when people want to do BI, they really want to understand trends over time, so that they can sort of predict or figure out what’s happening, so that I can make better things and better decision in the future.
So, we’re going to add here another dimension, which is the month. That’s going to create a play axis for us, and I’m going to be able to play that play axis. So, things start to move, that’s going to be too small, and, you know, every data region here has the ability to take full advantage of the full real estate here, and we can see everything moving.
So, what’s interesting about that is I can go back and play back in time to see what happened in that months or in that month.
I can do better than that. I can start, for example, tracking specific objects, for example, a specific genre, and try to see what happens in the beginning of time, or actually here for data.
And what we can see here is actually coming right out of the gate is coming out, nobody is actually pursuing it, nobody will be able to challenge it, but what’s happening here, sci-fi, sci-fi the last minute is beating, is beating comedy. What happened in sci-fi? What happened in sci-fi last year?
THIERRY D’HERS: Avatar, exactly, you’ve got it, that’s exactly what did it for sci-fi here. You can see a very fun experience. That’s what we want, because then people really want to stay with it, and really find more insight and information in their data.
So, that’s kind of nice, but obviously when we’re in a group we want to be able to collaborate with that data. So, we want to take even more advantage of the real estate of our screen here.
So, one thing I want to do is go full screen. Full screen, still fully interactive here, and that’s kind of nice.
What we wanted to do here is really make it very easy for people to collaborate with the data. It’s not enough to just say I’ve found something interesting, I’m going to send you my report. Yes, that’s pretty usual, people do that today. What we wanted to do is give the ability for people to record specific time samples, specific position or finding or insight that they had in the data, and build a story, I found this, then I want to look for that, and I found more information, and I found more insight, and I keep actually recording what’s happening and building a storyboard. So, I come here, for example, I found something interesting, I can save it, and it adds it into my storyboard. It’s not a screenshot, it is really a time stamp of that report in that state, and I’m recording for the same report in multiple states or multiple reports, and I can build a story, I can go back in time, look at other reports that were in my storyboard, and I can share that storyboard with other people. And I can see here, for example, I had one when we had a way to navigate through the movie through kind of like that kind of flying experience.
But then we got people telling us, you know, what would be really, really nice is when we are in a boardroom, kind of like a scenario that we are today, kind of a small setting boardroom style-like, they say, what I really want here, what the tool I really want to use here is Office, it’s PowerPoint. Why can’t I just have that kind of experience inside of PowerPoint?
So, we say, yeah, OK, that’s a good idea. Why don’t we actually allow you to take actually each of those snapshots in the storyboard in those frames, and literally put them each in a slide, and generate the slide deck for your PowerPoint slide deck.
And so what happened here is we generate the PowerPoint. Now, just to prove to you it’s really live, I’m not just faking it here, I can just change, let’s say, for example, I very appropriately put a ’50 styles movie, and then just go F5, and here we go. So, I’ve got my frontage here, and then I can go to my first, and what you can see here is just an frame loading inside of PowerPoint that’s loading my Crescent experience. Inside of it it’s not a screenshot, it’s fully interactive. I can start asking questions. I can say, hey, what’s going on here, and really interact in a kind of meeting setup.
This is Crescent, and thanks to Silverlight this is really how we’re going to bring the next generation of business intelligence to our business users.
Thank you. (Applause.)
SCOTT GUTHRIE: So, it’s been a pretty busy year for us. In April we shipped Silverlight 4. A few weeks ago, we shipped Silverlight for Windows Phone 7. And hopefully as you saw this morning, we’ve been very hard at work on Silverlight 5. What I want to do is just talk a little bit about kind of the timeline for when it’s going to be coming out.
We’re working hard, as you can see, at finishing up the Silverlight 5 feature set, and we plan to ship the first public beta of Silverlight 5 in the first half of next year.
We’re then going to go ahead and ship final release of Silverlight 5 by the end of next year, and it will have the great capabilities you saw here today, hopefully a few more that we’re going to save for a little bit later, and we think hopefully really enable you to build kind of the next generation of great experiences, and really wow your customers.
You know, we on the team continue to be inspired by all the great work that you’re doing using Silverlight. It’s a real treat to be able to have everyone come here this week, show us some of the great applications and solutions they’re building. It gets us excited, and really motivates us.
And I hope you’ve seen some things this morning that in turn inspire you, and are going to let you with these new features really build the next generation of solutions that are going to amaze both your customers and all of us as well.
I want to say a huge thank you to everyone for coming to this event or watching it online. We really appreciate the opportunity to talk with you. We’re really looking forward to getting your feedback, and I hope you enjoy the rest of the Firestarter.
Thanks again and have a great day. (Applause.)