Transcript of Keynote Remarks by Ray Ozzie, Chief Software Architect, Microsoft Corporation, and Scott Guthrie, General Manager, Developer Division, Microsoft
Las Vegas, Nev.
April 30, 2007
ANNOUNCER: Ladies and gentlemen, please welcome Chief Software Architect, Microsoft Corporation, Ray Ozzie.
RAY OZZIE: Thanks a lot. Good morning. Welcome to MIX, welcome to Las Vegas. Today is a first for me. The first time I’ve spoken to a large developer audience since starting at Microsoft a little bit more than two years ago. Before that time, for many, many, many years, I would be sitting in that seat right beside you as a developer myself, a Microsoft partner, a Microsoft competitor. As a longtime Windows ISV, I attended PDTs and systems design reviews, and many other Microsoft conferences and events, always as somebody who had a huge investment in Microsoft tools, in the Windows platform, and very specifically in the Win 32 API. Win 32 is incredibly rich, it’s as close to the metal as you can get. The most widely used Internet applications that we take for granted today, browsers, IM clients, voice clients, document and media apps, multiplayer games, they’re all written to Win 32. And if you’re writing an app where performance, and interactivity are just paramount, then Win 32 is where you want to be, and we just keep investing at that level of the stack.
If you want to see the benefits of these investments, just check out Direct X, it’s just simply amazing. But some years ago, this thing called the World Wide Web emerged, and almost immediately it began to be argued that the same simple models used for Web content distribution would be broadly Web apps, and from this would ultimately come the benefits of using local code, and local APIs such as Win 32. And it looked as though this model would make life so much simpler for developers causing some to argue that this was the end of local software, and that every app would be delivered through a browser. It was an appealing promise, write it once, immediately use it everywhere, and of course it was thought-provoking, it is thought-provoking to listen to the extreme viewpoints, no more software.
I’ve been fortunate enough to have survived five major platform shifts over the course of my career, and in each case at the beginning of an era, somebody took that extreme position. And in each case, when all was said and done, it just never quite seemed to work out that way. The pendulum certainly did swing, and disruption certainly did occur for those who had their heads in the sand about the capabilities of a new technology, but in each case, as things ultimately settled out, the best solutions were integrated solutions that would bring together the best of one world with the best of the other.
And so where we are again, and the pendulum swings once more. The Web versus the PC, or is it the PC versus the phone, software versus service, consumers versus IT, on premises versus hosted, centralized storage and monitoring, and auditing, and creepy behavioral analytics versus local storage, privacy, empowerment, anonymity and freedom. And where will you and I end up at the end of the game? Well, we’ll end up with a mixture of some of this and some of that, a mix that will give individuals a vast array of choices for software and service consumption. A mix that will give businesses a vast array of choices for software and service deployment.
Even software-as-a-service vendors have found the need to expand their offerings to include an offline edition. Software as a service v.1 meant the Web, it meant inside a browser. The software as a service v.2 has grown to fully embrace the uniquely valuable role of the client in those scenarios, because that’s what customers want, and that’s what customers need in many situations. The term SAAS has for all practical purposes been expanded at this point, and now it means software and a service.
And then there’s mobility. In the U.S. we’re laggards with regard to the use of mobile services. But even here developers increasingly want to build sites that extend their function to the devices in your pocket, or in your purse, some with keyboards, some with number pads, some with just a touch screen. Sometimes the services integrate with the devices just though texting, sometimes through a mobile browser, sometimes through software, through a rich client app designed for the best possible user experience on that tiny device.
The Web is an amazing thing, it’s transformed the world that we live in, both on and off the screen. But the Web apps of today, and the Web apps of tomorrow are by necessity complicated, and fragmented across many technologies, and that fragmentation affects you, the designer and developer. The glass half-full viewpoint is one of amazing choice and opportunity because of all these different scenarios, building apps and solutions that were never before possible. The glass half-empty viewpoint is one of complexity, reflecting the daunting number of skills required to pursue each of these opportunities before us spanning the rich Web, the rich PC, and the rich device. Developers have to make some very tough choices in terms of architecture and technology bets these days because of the richness of all the possible delivery platforms in this era. Every developer knows that in a rapidly evolving technology environment, picking the key technologies is one of the most important decisions that you need to make, especially at the front end of a project.
It’s tough to make these fundamental technology bets, languages, runtimes, tools, because all technologies bring with them a range of architectural constraints and benefits. So in order to frame these technology decisions, I found that it helps to map out up front very explicitly what’s trying to be accomplished, in terms of the richness of the user experience, and the nature of the target audience.
Sometimes a developer needs to deliver an experience to the broadest audience possible, maybe, for example, because of an ad-supported business model. They need to make their services universally accessible across the Web, even if it means sometimes having to make some user experience tradeoffs when run on a device that’s capable of much more interactivity or function. Today these experiences are typically delivered in browsers, and in HTML, or AJAX, or Flash. I call these universal Web applications.
At other times, knowing that the user will be spending a huge amount of time in their applications, as a tool, or knowing that it’s highly interactive, or that it needs to work offline, or knowing that the user will use that app in conjunction with other desktop applications, they’ll want to deliver the best possible experience that a PC or device has to offer. They’ll want to go hardcore with the capabilities of that target device. I refer to these as experience-first applications.
Now, in some cases it’s challenging to answer these questions, trying to identify the high order bit, universality or experience. And to compound the challenge in picking technologies, as I said before, we are now in the world in which the most successful solutions have an element each of universal Web, and experience first, all in the same solution.
Within that solution the balance between the two might vary. Some solutions might be viewed as a service with a client-side companion. Others might be viewed as client software, with a service companion. As a matter of fact, we’ve seen a common software–plus-service design pattern emerge for a broad range of media and productivity solutions. Within that design pattern the solution might use a PC-based client app for the creation, editing and management of a working set of digital apps. The solution might then use a Web-based service for organizing, tagging, finding, and sharing. Then the solution might use a mobile client app for location and spontaneous actions, such as capture, notification, or triage.
This software plus service pattern is very powerful, and it’s great for the user. It gives the user tremendous flexibility. We see this pattern in many of our own apps in-house, and I expect that we’ll see it in many of yours. It brings together the best of the Web, the best of the desktop, and the best of the device always using the service as a hub.
Now this conference is called MIX because we understand that individuals and businesses want these kinds of solutions now, and moving forward, and building them requires a mix of skills, design skills, development skills, targeting many platforms, some ours, some not ours, with characteristics that vary quite considerably.
It’s our aspiration to create tools and platforms that will make your lives as developers easier, more productive, and profitable, in developing a software plus services solution. We understand that you have in this era an unprecedented number of technology choices. So you’ll have to be the judge as to whether we’ve succeeded in these aspirations.
So enough into the background, let’s get into the specifics today. What’s the news here at MIX? Two weeks ago at the National Association of Broadcasters conference you may have heard that we announced something called Silverlight. In the context of what I discussed earlier, we now said, Silverlight is something targeted purely at the universal Web, that ubiquitous deployment, a cross-platform, cross-browser runtime that we believe can change the game for media and video on the Web, both for personally and professionally produced videos, much higher quality, easier in coding, seamless to display back, standards-based, very, very low cost.
So with that you saw, to me, being in this industry as long as I have, they’re simply amazing. Back in the ’80s, at the dawn of the PC revolution, the explosion in PC demand was fueled by the ability to create documents, words, numbers, charts, presentations. Today, the explosion of PCs, devices, and services is being fueled by the democratization of media. Media capture, editing, uploading, tagging, publishing, downloading, caching, aggregation. You see media all over the Web, and we’re all consuming it, and creating it, and it’s being fueled in large part by the explosion in cheap digital cameras, and digital camcorders, and the higher penetration of broadband. And this explosion in the creation and use of media elements has catalyzed the demand for rich Internet applications, not just video being displayed in a Web pages, but entire Web sites, or Web applications written incorporating media in ways that we previously never even conceived of. And since almost all media begins somewhere on the desktop, this explosion has also catalyzed a resurgence in demand for service connected desktop tools for photo, audio, and video. And so to seamlessly meet those needs, we’re delivering a complete family of tools and framework for the design, development, and deployment of media rich applications from Silverlight on the Web to the full .NET Framework in Windows, from Visual Studio for developers, to Expression Studio for designers.
And, by the way, I would like to announce that Expression Studio is officially shipping as of today, and that all of you will be receiving a special commemorative edition here at the show. (Applause.)
So that’s the second part of our Silverlight story. The first part was Silverlight as a cross-platform run time that we feel will change the game for video on the Web. The second part is Silverlight as a rich Internet application deployment platform that’s a full-fledged member of our .NET family.
The third part I would like to discuss today relates to the area of services innovation at Microsoft. As some of you may be aware, over the past couple of years, there’s been a progressive sea change going on within Microsoft, a transformation towards services, and towards software plus services. Some of these changes have been readily apparent on the Web. For example, we fundamentally refactored some of our MSN services into Windows Live Services: identity, contact, Spaces, mail and messaging. Services that are now in active use by more than a quarter of a billion people. These services are now composable and syndicatable, and they’re now woven into a number of other Microsoft properties, such as Office Live, which offers its users Windows Live Mail, and Xbox Live which supports instant messaging across the Xbox 360 game console and the PC.
Here at MIX, we’re announcing a number of new APIs and HTML-based controls that expose the power of even more of our services, including Live Contact, Virtual Earth, photos within Spaces, and Search. And to go along with these new APIs, we’re also announcing some innovative new commercial terms under which you can reliably consume these services within your apps and solutions. And you’ll hear more about this tomorrow from Brian Arbogast who runs our Windows Live Platform Group.
In terms of other software and services projects that we’ve been working on that you may have seen on the Web, there’s Photosynth from the Live Labs team. Photosynth is an amazing combination of software and service that adds a new dimension in how we think about the world of online photo collection. And as a result of the incredible response specifically to the zooming technology in Photosynth, the Silverlight and Live Labs teams worked together to put zoom-ability into an updated Silverlight, transforming the user experience for super high resolution photos, or maybe a new form of high resolution ads, even over very low bandwidth pipe. (Applause.)
In other areas that we really haven’t talked about in great detail yet, people are cranking out some very significant things that are more infrastructure in nature, things that in some cases need substantial time to gestate before opening them up for broad consumption. Microsoft is a platform company at its core, and what we’re building is a services platform, an open, interoperable foundation for software plus services that will enable you to take advantage of our economics, a platform that will make it possible for you to build, deploy, and manage service-centric universal Web and Experience First solutions, solutions that span the Web, the PC, the phone, and ultimately many other kinds of device.
The staging of these more foundational platform investments is highly intentional, but as we bring them to the Web before we release them at scale, each one of them will be iteratively refined with your participation. Silverlight itself has been just one of those foundational investments that we’ve been working on for quite a while in the area of software and services, and today begins the conversation and refinement of that technology as you begin to walk away and play with the beta.
Another foundational technology that we’re bringing to light for the first time today, and the third part of the Silverlight story, is something called Silverlight Streaming. Silverlight Streaming is a companion service to Silverlight, a service for developers that takes advantage of our huge investments in services infrastructure, and in Microsoft’s global content delivery network. The service will allow you to post Silverlight applications, including their associated photos and video clips, to Microsoft storage service in the cloud for delivery into your Web pages and your Web sites. With some reasonable limitations, of course, this highly distributed, low latency, high scale delivery of Silverlight apps and media is on us. I think you’ll find the service to be useful, and I think you should consider it as a sign of things to come in terms of our software and services platform.
So those are the three parts of the Silverlight story – video, .NET and services – and you’re about to see it in action demoed by the guys who built it. In case it’s not clear to you, I’m having a blast. I’m enjoying having the opportunity to participate in shaping Microsoft’s role in this next shift as the pendulum has swung from pure software to pure service, and now to software and service. The wonderful thing about our field is that if we can imagine it, we can create it, we can build it. And I hope that as you watch our demos, and as you attend the sessions over the next couple days, you imagine some amazing things that you wouldn’t have considered before having these tools and technologies available to you. And if you do like what you see, I very much look forward to seeing what you come up with. Maybe we’ll be able to demo it at the MIX.
So now, in the spirit of less talk, more action, it’s time to pass it over to Scott Guthrie. Scott’s got a ton of great things to demo, he’s got a few surprises up his sleeve, and I’ll be back after his presentation. So let me introduce – (applause) – thank you. Developer, blogger extraordinaire, Scott Guthrie. (Applause.)
SCOTT GUTHRIE: Well, thanks, Ray. And good morning to everyone.
Two weeks ago at the National Association of [Broadcasters] Conference here in Las Vegas, we announced our Silverlight run time, and spoke about some of the new media capabilities it provides. Today, we’re going to go much deeper, and really show off some of the great capabilities, and the really rich support it delivers for complete end-to-end developer and designer experience.
So, what is Silverlight? Silverlight is a couple of different things. Silverlight provides a rich is a cross-platform, cross-browser plug-in designed to work on the Mac as well as Windows, and the preview build we are shipping today supports Firefox, IE and Safari.
Silverlight is designed to enable rich media experiences, as well as RIA for the Web. It includes a really rich graphics run time, and media support. It also, I’m pleased to announce today, now includes a cross-platform version of the .NET Framework. (Applause.)
Silverlight’s design, it’s a very small download, and can be installed on end-user machines in under 20 seconds. And best of all, I’m pleased to announce today that as of about 20 minutes ago, there is a preview build of Silverlight on the Web, including .NET support, and with both developer and designer tools that target it. You can go ahead, and everything you’re going to see here today, you can go ahead and download and start using this afternoon. (Applause.)
Last week we also shipped IS 7 Beta 3, which we’ll be talking about as well in this conference, and it provides a massive upgrade of our Web-server platform, and it really allows you to deliver Web applications with much lower TCO, and much better operation support.
A few months ago, we also shipped our first release of WPF, and as you saw in Ray’s video, it really delivers kind of an amazing amount of capability and power for building rich interactive desktop applications, and you’ll be able to learn a lot more about it as well later on in this conference.
Now, into this segment we’re seeing sort of a new emerging segment kind of develop in the media and the RIA space, and this segment incorporates elements of both the Web as well as the desktop, and enables the developers to build much more interactive Web experiences in the browser. Silverlight is clearly aimed at this segment. Silverlight is designed so you can work with any backend technology, so you don’t need to have .NET on the backend if you don’t want to, you can go ahead and use Silverlight as it is, and integrate it within a PHP site, within a Rail site, within a Java site, or any other backend implementation you want to take advantage of.
What makes the Silverlight, I think, and the overall Microsoft .NET offering compelling, though, is you can actually use .NET now everywhere into those three segments, on the server, in the browser, or on the rich desktop client. And this gives you a single consistent programming model, allows you to use a common set of languages, common set of tools, and really maximize the skills and what you can take advantage of.
With that, let’s go ahead and dig into Silverlight and learn more about what it does. The first thing I want to talk a little bit about is some of the media experiences that Silverlight enables. So, specifically, Silverlight enables kind of stunning media allows you to incorporate stunning media elements into your application, specifically we allow you to go ahead and download as well as stream high quality video, both DVD as well as HD video up to 720p-quality within any browser. You can go ahead and take this video and overlay rich DVD-like controls on top of it, you can go ahead and integrate ads, you can go ahead and integrate menus, you can go ahead and integrate navigation controls, and really build kind of an immersive experience within any browser.
Silverlight’s media support uses standards-based codex, so specifically we use the same VP1 codec that’s integrated inside of HD-DVD as well as Blu-Ray disk, and it’s the same video codec that you can use from other devices that support, for example, Windows Media, so for example if you build a video you can now stream it to your Mac using Silverlight, you can also stream it to an Xbox system and watch it live there as well. Makes it much easier for you also to go ahead and take advantage o the existing Windows Media tools or editors that exist, whether it’s Avid software or other third party technology, and allows you to go ahead and build great media streams and experiences within Silverlight.
Silverlight also then supports from a downloading perspective, allows you to very easily go ahead and deploy media files and media assets onto any Web server. You can just point, it will download and play inside the Silverlight run time. We also then within Silverlight, with the build releasing today, are supporting broad streaming support, which allows you to go ahead and much more effectively and cheaply stream content into your browser, and dramatically save cost in terms of TCO, and in terms of bandwidth. Specifically with Silverlight, and with Windows Media on the backend, we believe that we actually have a solution that’s about three to four times more cost effective than any other streaming solution on the market.
So enough of actually talking, what I would actually like to do is invite the folks from Netflix, specifically Neil Hunt and Darin Brown [from Avenue A/Razorfish] to actually show off the rich media solution that they’ve built using Silverlight, and really changes the experience of watching video on the Web.
So, Neil and Darin, come on out. (Applause.)
DARIN BROWN [Avenue A/Razorfish]: Thanks, Scott, and good morning everyone. Avenue A/Razorfish is a global digital agency. We have about 1,800 people. We have 19 offices around the world, and we’re in seven countries. We’ve been working with Silverlight for quite a while now, and we’ve found it to be an incredibly strong platform to create immersive experiences. With Microsoft’s .NET Framework, the Expression Studio, as well as Visual Studio, we now have all the tools in our hands for creative and technical control. What that means is, we now have unprecedented collaboration between our designers and our developers. Our guys are sitting side-by-side working and iterating in real time.
So when the guys at Netflix asked us to talk to them about their instant-watching feature, we saw that Silverlight was an excellent fit.
NEIL HUNT [Netflix}: Thank you. So, at Netflix, our mission is connecting people with great movies that they’ll love. Today we have about 6.8 million subscribers watching DVDs from a range of about 75,000 titles. And then this last January we launched instant watching for Internet-delivered movies. And since then we’ve delivered about 2 million viewers and growing.
At Netflix our watchword is easy. Easy to find great movies, easy to get the DVD, and with this launch easy to see the DVD delivered across the Internet, as well.
And we see Silverlight as a key way to understand that ease of use. Silverlight allows us to deliver a movie playback experience that eliminates some tricky install and set up steps that we have with today’s solution. So Silverlight also, the VC1 codec allows us to deliver Internet video in real-time. We use bit rates from 500 to 2,200 kilobits per second today, and that delivers sort of a base-level video quality on a DSL connection, up through DVD quality. And in the future we expect to be delivering high def quality at 720P, at higher bit rates for people who have advanced broadband connections.
So the key is, the real-time delivery allows the movies to start fast, and the rapid start enables what I call title surfing. It allows users to watch a little bit of this movie, and a little bit of that movie, and surf from one to the next until they find something that grabs them. And that’s really important to encouraging lots of use of this feature, which is good for our business.
Silverlight’s content protection scheme is the same scheme that’s already been tried and trusted, and endorsed by our studio content partners. That allows us to deliver robust protection against piracy, while offering a solution that’s completely invisible to our users. Today we have about 2 thousand titles available for instant watching, and over the next few years we expect to be adding thousands more.
We use a variety of third-party tools, including hardware accelerators to perform the encoding of all these assets. And clearly, the ability to have high performance encoding and a scripted and automated environment is critical to keeping our encoding costs under control.
From an IT perspective, it’s very easy for us to extend and offer a Silverlight-based movie player, because it uses all of the same servers and infrastructure that we’ve already put in place. So with that, I’m going to ask Darin to show us the Netflix movie player that he’s built for us with the Silverlight technology.
DARIN BROWN: So here I am on the Netflix site. We’re looking at “The Untouchables,” and we see that there’s a button here that says play. So by clicking on play I’ve spawned a new window, and the experience loads right in the browser. What you’ll see is a pre-roll of the Netflix brand and logo that sets the stage. As the movie starts to cache, and then starts to play you’ll see that unlike your local theater we start the movie right away.
If I double click it goes full screen. You’ll also see at the bottom the standard player controls appear. So I can do things like skip forward to the movie, get over those credits. We had a little fun, we created a volume control that pops up, and we can slide it back and forth. Better leave it up so that we can all hear it, and get rid of it.
Like a DVD we’ve created a chapter control, so that I can move back and forth through the movie, jumping ahead or jumping back. But, unlike a DVD we’ve added functionality from the Netflix site. So I could actually add this movie to my queue, or I could select a rating and vote on how good how many stars I think this movie would be.
In addition, we’ve added an extra feature, and brought in more of the features and functionality I know you guys love on the Netflix site. You can learn more about this movie, you could look at movies that are similar, and actually play clips of those movies, as well. You also see that there’s this thing called Shared Viewing. I’ll get to that in a minute.
NEIL HUNT: So, Darin, why don’t you tell us a little bit what it took to build this application.
DARIN BROWN: Well, thank you, Neil.
I designed it was actually quite easy. Neil talks about how for Netflix it’s about creating an easy experience to connect the viewers to movies. For us this was easy. Our designers used the Expression Suite. They passed XAML to the developers who integrated it into the project. All of the interactivity was programmed with AJAX, so our guys got up to speed really fast. I actually received the first phone call about this project three weeks ago, and we just built that demo in three weeks. So you can see how fast this thing can be done. (Applause.)
So right now what you see is that Silverlight can actually help us to transform the movie experience beyond a DVD. But, as Ray said, this is about the universal Web. So what about this experience on a Mac?
NEIL HUNT: Did you say on a Mac?
DARIN BROWN: I said on a Mac. So here we are on a Mac running Firefox, and we’re just going to let this movie launch up. In this case we’re watching The Hunt for Red October. Let’s see if I can actually skip ahead a little bit. So what we’ll see is down, and remember that extras section, if I bring that up and go to shared viewing, I’d say, oh Neil, you’re here on my buddy list, want to watch a movie with me?
NEIL HUNT: Hey, I’ve been invited to join “The Hunt for Red October.” Well, hey, I agree, click.
DARIN BROWN: So while we let the movie synchronize, so Sean Connery, he’s in both movies, “The Untouchables,” “Hunt for Red October,” which performance do you like?
NEIL HUNT: Well, “The Untouchables” was a classic, but I have to say I enjoyed “Red October” more.
DARIN BROWN: Excellent.
NEIL HUNT: And I guess here it is playing.
DARIN BROWN: Of course, for me it’s “Highlander,” and I can tell there’s some “Highlander” fans out there.
So look, we can actually start to instant message each other.
NEIL HUNT: Do you have a cold beer, question mark.
DARIN BROWN: That would be nice.
NEIL HUNT: Well, why don’t you pop one for me, too.
DARIN BROWN: Excellent. (Applause.)
Thanks. So in summary, for us Silverlight is just an incredible platform for creating rich, immersive experiences. It’s easy to use, but more importantly, it allows us to create unprecedented collaboration. And it really has helped our designers and developers work through issues in real-time, and just create things on the fly that we dream up any moment of the day.
NEIL HUNT: Thank you. So for Netflix Silverlight allows us to introduce support for the Mac platform, as well as the PC platform, and it’s really important to get wide coverage for our user base. Of course, it allows us to offer an enhanced experience with features like adding the chapter marks, and adding the collaborative viewing stuff that you just saw. But, also it’s really about continuing to deliver the simple, easy experience and getting movies to our customers faster and easier than ever before.
So thank you, Darin, for putting that demo together, very nice work.
DARIN BROWN: And thank you, Neil, for hiring us. (Applause.)
SCOTT GUTHRIE: So one of the things that Neil touched on as part of that demo that I thought was kind of interesting was the whole designer-developer workflow. And I know there’s both a lot of designers and developers in the audience, and I don’t know if your experience is sort of like what usually happens on my team, but typically when we start off on our project a designer comes up with a really great design, comes up with a concept and something that’s going to really emotionally attach our users, we spec it all out, we put together nice comps inside design tools, great images, and then we pass it off to the developers to go ahead and actually add the interaction logic, and (applause.)
It’s funny, because it’s true. This is the challenge that I think a lot of technologies have today, which is how do you have designers and developers work together on the same project. And as you start trying to build experiences that have more emotional attachment from the customer, it’s really important that you have to best possible process to enable that, and anything you can do to kind of improve that workflow really makes a huge difference.
One of the things that we’re trying to do with Silverlight is to spend a lot of time focusing on that, in particular on two dimensions. At one level what we’re trying to do is make sure from a core platform perspective we make it very easy for designers and developers to collaborate. Silverlight uses the same XAML format that we introduced as part of WPF, and specifically at part of the format we’re trying to really enable designers to work on UI aspects of the project, and have developers work on the code completely separate, in a separate file, with separate, different tools. So we basically enable you to very easily kind of work together on the same kind of runtime technology.
The other thing that we’re trying to do is provide great tool support that really facilitates this workflow. With Visual Studio obviously we have a great development tool. As Ray announced in his keynote, we’re also shipping today Expression Studio 1.0. And Expression Studio basically allows you to go ahead and work with Visual Studio on projects and to really facilitate sort of this great designer-developer workflow. Both tools share the same project file format. And you can use those tools to target Web applications, desktop applications, as well as Silverlight RIA applications.
And to kind of show off some of those capabilities I’d like to invite Wayne Smith in stage to give you a sneak peek at Expression Studio. (Applause.)
WAYNE SMITH: Thank you very much, Scott. Thank you.
So my name is Wayne, I’m a designer at Microsoft. Are there more designers out there? Fantastic. You are there, great. So let’s have a little look, now we’ve shipped [Expression] Studio, and big up to the tools developers who made that possible. Thank the tool guys back in Redmond, a fantastic job. But, they haven’t stopped, they didn’t even take a day off, they kept on working, and let’s have a look at what we’re going to be doing to help designers do design work for Silverlight.
So I’m going to start off with just a little example. That first video you saw, running the Silverlight video, here it is deployed to the Web, video, nice looking video, of course, but a lovely, rich, branded experience, as well, with all the sort of MIX stuff around the edges. So what I’m going to show you how in Expression Studio we can actually do the design work behind what you’re seeing on screen there.
Now, for any kind of work involving designers with this kind of thing it’s all about the assets. They love to sort of keep control of the assets, the graphics, the videos, and all the things that go to make up the project. And in Expression Studio we’ve got a fantastic tool to help you manage the assets, which is called Expression Media. It really keeps track of that. Now, the asset I’m going to start off with to begin with is the video running in the middle, because the video has to be prepared for the Web.
So alongside Expression Media we’ve got a tool called Expression Media Encoder. So let me show you how we use that to prepare this video for the Web. So here’s the Expression Media Encoder running now, and I’ve already imported in my source video, it’s an AVI video, any sort of video excerpt, Quick Times or AVIs, whatever you want to use we can bring into Media Encoder. And here it is running again, and I can sort of skip about, and playback in different parts of it like so.
This isn’t an editing tool. This isn’t an Avid or a Final Cut Pro, this is a preparation tool that goes alongside those sorts of tools. So what kind of things are we going to do here to help me prep it? Well, maybe I could trim the in point and out point, do a few little things like that, I can maybe sort of add some markers in that I can programmatically pick up later on, show some advertising on screen when a particular bit of the video hits, et cetera. But, we’re really talking here about the encoding, preparing it for the Web.
So let’s go across to my settings here, and there fantastic. (Applause.) Let me show you our new fast reboot feature for Expression Media Encoder. (Applause.) Thank you very much. And you could actually save this job stock in an XML file, so I can very quickly open it up and read that back in and get back to where I was to start with.
OK. So all I’ve done so far was to put that marker in. So let’s put the marker in, and we’ll come across to the settings here, and basically I’ve got a large range of things I can chose from, a large range of settings, from very high quality down to very low quality. But, when you’ve chosen these quality settings, how do you know what that’s going to do to your precious source video? You’ve got no idea, really.
So let’s choose a really low quality one for low scale deployment, and work out what’s it going to do. I don’t really want encode the whole thing just to see what it’s going to look like. So around my insertion point here, where I’ve got the playback head, I’m going to go into A/B compare mode, and I’m going to ask it to build a preview, that preview is building pretty quickly. You can see the green status bar. If you’re running something like a Tarari card in this machine it will go like 15 times faster than this. So it really is very performant.
Now, for each frame I can slide backwards and forwards, let’s see if we can zoom in a little bit closer so you can see that a bit clearer, and as you can see now you really can see the degradation in quality. I can go to any of the frames in the middle there and see how they work. In fact, let’s even just play the thing. Like so, just encoding it again, and we’re going to run it. And now I can even play the video, and slide backwards and forward, and really see the difference. Yes, absolutely. Isn’t that cool? (Applause.) Nice stuff. I can even play them side-by-side, so I really can see exactly what those settings are going to do.
So I could just simply now encode this, press the encode button and get it ready for the Web. But, of course, I like the idea of having my playback stuff around it, my play button, my pause button, all those kinds of things. So I’ve got some help within the tool to allow me to deploy that. Let me just pop back to my output settings here, and I’m going to choose on the outside here a template. So I’ve got a range of Silverlight templates built into Media Encoder, and I’ve chosen a clean looking one here, with just some simple buttons, and basically I could now encode this and run it up on the Web straight away. And I won’t actually do the encoding, because it will take a couple of minutes to do that. I’m actually paid by the minute. So let’s just slip forward and show you the final output, so this is what that video would actually look like running in that simple skin. There is it now, and down on the bottom here I’ve got my playback things, and I can skip forward to that marker I put in like so. (Applause.)
OK. Thank you. It’s going to get better, so keep cheering. Right. So that dealt with my video. What about the graphic assets around the outside? I want to work on the graphic assets in a tool called Design. So this is my tool I can use to prepare the stuff, I can draw all the necessarily assets, what I’ve actually done in this instance here I I’ve stolen some stuff from our branding site, so this is some bits and pieces we put together. There are some vector graphics, as you can see, some bitmaps, et cetera. And the reason I’ve assembled this inside of design is because I want to take advantage of one particular feature in Design. That feature, of course, is output to XAML.
Scott mentioned it earlier, this idea of taking all this design work and putting it together inside, using XAML, so I’m really confident as a designer that the cool stuff I’m designing makes it through to the final cut and production.
So what I want to do here is just simply take what I’ve created and export it to XAML like so. I’ve got a range of different settings I can use, and the one I’m key on today is called in Silverlight format, because that’s what we’re talking about, designing for Silverlight here, and that’s ready to go. So now I’ve prepared, basically, my video, in Media Encoder, and I’ve prepared my design assets in Design, I just need to assemble it now, to get it into one final project, and my assembly tool for all this interactive design is Blend.
So there’s the existing design, here is the XAML file that I exported from Expression Design in Blend, and I’m just going to take some of those layers that I’ve got there and copy them onto this slate here. I’ve already copied them to save time. So let’s just pick them up now there. So there are all the graphic assets in layers for me to use, and that’s obviously now obliterated my video screen. Just take a couple of those there, and send those to the back, like so, so I can now see the video intermixed in with the different graphics. And I think that video is probably a little bit large for there, so let’s take the video window, and we’ll just scale that down a little bit to something like that kind of size, and use our little keys to nudge that around into place, into the frame I’ve created.
So I’m starting here to sort of work assembling the final look and feel. The video that I had actually in the original had a sort of a nice mask around it to get rid of the square corners. So let’s just tidy that up, as well. Let’s hide the foreground shapes, like so, and I want to actually sort of do a little mask over there. Although my drawing is mainly done in Expression Design, you can draw in Blend, as well. All the tools are there. So let’s just take a simple rectangle tool for speed, and we’ll just draw a rectangle on top of the video like so, and we’ll just maybe what should we do, just round those corners off a little bit. In fact, let’s convert it to a path, as well.
So we’ll convert it to a path, take my tool here, and we’ll just drop a couple of points on and just do a little bit of a design on the fly here. Isn’t it good. There we go. So now I’ve got my sort of little wavy path, I’m just going to take the video window there, and clip the two together, bang, and I’ve now got my sort of masked video in the middle there. (Applause.)
Thank you. Lovely. OK. So the last bit I want to do, remember all the sort of graphic assets popped out, they zipped up on screen here. That’s all about animation, okay. So let’s just do a little tiny bit of animation to finish this off. So to do that I’m going to change my work space over, and flip into animation mode, as you can see here. Now, animations happen on timelines. Timelines only exist in Blend where we actually need them. So let’s create myself a new timeline here, by pressing the plus button, let’s call it intro, because we’re going to introduce the assets, and here is now my timeline.
So what I can do is I can take let’s take the background shapes, let’s take the foreground shapes, and the MIX logo, and I just want to make them zoom up. So I’m going to go from zero scale to 100 percent really, really quickly. So let’s nip over to like one second in time, drop in a key frame, and come back to zero, and then my properties here into transform, and into scale, and let’s just change that scale to zero and zero like so, to make them small. And now as I run the playback here, there those assets zip up like so.
Let’s just do one more little one. Let’s make the video fade in. So we’ll choose that element there that has the video in it. We’ll go to two seconds, add in another key frame, come back to zero, and I want to make the video sort of fade in, that’s opacity. You often get lots of properties and a property inspector, it’s a very rich environment to work with for a designer like me. It’s really nice when you want to do something like that to just type in OPA, and it pops up opacity. That’s a big help for me. That really is a big help for me. (Applause.) So let’s take the opacity and put it down to zero, like so, and now as that runs forward like that the opacity builds up. You get the general idea of doing the animation how it works.
Here’s one I prepared earlier. So this is basically the final thing running. So let’s choose my intro timeline down the bottom here. There it is, and play it, and that’s what sort of the final thing looks like.
OK. So that’s my design work done inside blend. My sort of interactive animation design work. What do I need to do now? Well, I can just simply deploy this to the Web. That’s it. My job is done to create the piece I first showed you. But, it would be a shame having done all that work not to reuse it again, wouldn’t it? So what I can do is I can take this project from Blend and put it into the configuration folder of Media Encoder. So if we come back to Media Encoder, here, I can take this video now and instead of using the clean one, I can use the MIX ’07 one that I just created it, and encode that, and now anyone on my team can use this little project I’ve created and deploy Web video if they want to do so.
So it really is a full circle, back now to Media Encoder, and using the stuff I’ve been working with. But, we don’t always want to do these full screen things. Sometimes you just want to drop a little bit of richness onto an existing Web page somewhere. So let me also show you he said I can. Let’s also show you a little bit of Web 2. A little bit of Web 2 here what I did was a couple of days ago I just took a little drop of the MIX site, as it was there, and it’s as you can see, MIX sold out, we know it’s sold out. That’s why you’re all standing at the back.
So using this existing site here, what if I wanted to drop that video onto this MIX page. All I’d need to do there, as it’s coming to the sort of page here, and let’s get rid of that background image that’s there, let’s just delete that. What I’m going to do here is come across to my AJAX extension, pick up my Silverlight Media ASP.NET control, drag it onto the page, and again, I can choose the URL for the video. And hey, presto, there’s my MIX ’07 skin again. So I can re-purpose it now onto the Web, and basically let’s just go back to the browser quickly. There it is now. That same video asset deployed into the middle of my Web page using the ASP.NET control and Expression Web.
So just to recap there, what we’ve actually shown you is video prepared in a Media Encoder, design work in Expression Design, assembly in Blend, and then reusing that skin back in Media Encoder and deploying it to the Web using Expression Web Search. That is what we’ve shown you. This has all been running on Windows. (Applause.) I think we also might have mentioned one or two times before that this runs on the Mac. First, just check if that project that I did in Blend actually runs on the Mac, and there’s exactly the same project that was done working on Blend. So, hopefully, this little sort of section here has shown you how Expression Studio gives you all the pieces in the puzzle for designing with Silverlight. It’s a great all-round experience. And talking of Silverlight puzzles, let me just finish, here’s my Silverlight puzzle now coming up on the screen. My same video running as my Silverlight puzzle. What you think I’ve just drawn the pieces on top of the video running. No, no, let’s hit the scramble button. So, there we are, there’s my Silverlight video. (Applause.) I’ll just put it all back together again. I’ll leave you to clear that up, Scott.
SCOTT GUTHRIE: Thanks, Wayne. (Applause.)
What we’ve seen with both Netflix, and with Wayne’s demo is just sort of the power in terms of the richness of the media capabilities that Silverlight provides, as well as kind of the richness of the tool set with Expression that allows you to go ahead and take advantage of it. Wayne didn’t mention, but I’ll give you a sneak peek today, which is that Expression Blend 2.0 does have all the features that he demoed, it’s also now available for download on the Web as of this morning. So you’re going to be able to go ahead and leave with this, and start doing exactly what he did on stage. (Applause.)
To show off kind of how you can integrate this even further within an existing workflow, or an existing environment that you have, I would like to invite CBS Television Stations Visual Media General Manager Jonathan Leess onstage. He’s going to go ahead and show how they’re incorporating the concepts of user-generated content using the Silverlight video feature to get a really enhanced online experience. So I would like to invite Jonathan. (Applause.)
JONATHAN LEESS: Thank you, Scott.
It’s a pleasure to be here at MIX 2007 and share in the excitement around Microsoft’s delivery of Silverlight. On behalf o the CBS Television Stations Group, covering 22 markets with 36 stations nationwide, I’m excited to demonstrate a new technology application designed to streamline the ultimate convergence of traditional broadcast content with user-generated content. In the traditional world of local television, our primary focus is on producing compelling content for our audiences, whether it’s special effects graphics, high definition broadcast, or on-demand content across our broadband and wireless devices, we are proven innovators who rely on the integration of many technologies to seamlessly deliver this content to our audiences.
With the rapid evolution of video sharing portals, and the proliferation of new media distribution channels, and the explosion now of user-generated content, broadcasters are facing epic challenges of connecting with these fragmented audiences. In some cases, the lines between professional and amateur content are blurring. The soccer moms use HD quality video, the student journalist records and can edit breaking news, and there’s a massive long tail of untapped local media waiting to converge with broadband and the broadcast mediums.
At CBS, we’ve taken a very proactive approach to addressing this crossroads. Part of our always on strategy is to provide an interactive environment where our audiences can participate in local broadcast and the local broadcast process. What I’m about to show you is a view of how we plan to leverage the Silverlight technology to help bridge this gap. What you see here is a mock-up of the home page of our flagship television, WCBS-TV in New York. Today, the content for this site, as well as all of our own TV station sites, is produced directly from each station’s newsroom. Our Web sites are visited by millions of unique visitors seeking relevant, timely, local news, traffic, weather, sports, and many other categories of interactive content. When we launch our new user-generated content platform, it will be highlighted right on the home page.
Here, for this demo, the content focus is on the International Auto Show which was recently held in New York City. Upon entering, the user is presented with an editorial overview, while a targeted dynamic ad is served. The product is designed with prominent use of overlays, while integrating our existing ad serving technology. Now, as Scott showed you earlier, Silverlight makes it easy to build these interactive, richly animated viewing experiences.
Now, let’s look at the content, here the user can view a gallery of all the user-generated content tied to the International Auto Show. This is a horizontal navigation experience, or a grid view. Users can control the content displayed to meet their visual preference by zooming, changing the layout to a cloud view, a list view, or back to the grid view. The user can also sort by popularity, highest rated, and most recent. Note that each image includes an icon identifying it as a photo, audio, or video.
Now, once you click on a frame of media, the view exposes ratings, metadata, and comments, and presented here as single click experiences commenting and rating are important community aspects enabling users to express themselves about the content that is relevant to them. Here one can also browse additional content in a filmstrip view for quick, rollover navigation. All these interactive features are designed to increase engagement while creating a seamless viewing experience.
Now let’s take a look at a video clip. In a video mode, the user is presented with a transparent control bar designed to keep the layout clean, and action-oriented. At any point, we can insert branding and advertising components directly through our ad servers. Here for this demo, we’ve inserted a lower third sponsor. Now, as we enter full screen mode, notice how the sponsor’s logo scales to fit the aspect ratio. We use overlays to subtly conceptualize the advertising, and our ads can be target-based with behavior and with content tags.
And now let’s see how the users can submit their content. This is the coolest part. The user would simply click upload, choose a file, fill in their info, and hit submit. As you can see, while uploading a video, we can simultaneously continue to browse and watch content. This is one of the coolest parts of the application.
Now let’s take a look behind the scenes at how this technology supports our workflow. Today, each of our TV reporters, producers, and Web editors upload content using our content publishing system. Streamlining the process we’ve got the wrong screen up here forgive me. Screening, editing and advertising integration and publishing workflow is a vital aspect of this system. The most unique aspect of this new tool is how we plan to seamlessly integrate user submitted content with our existing broadband and broadcast medium production workflow.
Now, as you can see by this diagram, this infrastructure is designed to enable us to efficiently integrate different content sources without disrupting our existing system. You’ll see here that’s user-submitted video sent in of a tornado on the broadband channel, and on the broadcast channel we have an anchor breaking the story on television. And seamlessly, they can take this video and broadcast it at their choice through their workflow. Now Silverlight provides that puzzle piece to help us manage the content flow from user upload to on air. We can create an online community rich with interactivity, and a wide range of voices. Then we can deliver it to another audience through our broadcast channels. Here’s a sneak peek at what the newscast of tomorrow might look like.
(Video segment and applause.)
JONATHAN LEESS: Thank you, Scott. Thank you very much.
SCOTT GUTHRIE: Thank you. Thanks, Jonathan.
So you might be wondering, you’ve clearly seen a lot of media scenarios being enabled this morning. You might be wondering, well, this sounds great, but downloading large content costs money, and how can you do it as cost-effectively as you possibly can. As I mentioned earlier, we have rich streaming support built into Windows Server that allows you to kind of install a streaming server inside your own data center, and easily stream video. For other scenarios, we’re also then proud to announce today that we’re releasing a new service that we call the Silverlight Streaming Service. And what this is, it gives you a way, you can go ahead and upload up to four gigabytes of video content into the Microsoft Data Center. We’ll then go ahead and provide free storage and hosting of it for you. And basically the way it works is, you can have any number of 10-minute video segments that you want to go ahead and host. They can be up to DVD quality video streaming. And we’ll give you back a URL which you can go ahead and include within your application. You can completely control the branding of the video completely integrate it into your site however you want. And the great thing is, it’s backed up by the Microsoft content delivery network. So if you get Digged, or Slashdotted, our servers are there to go ahead and handle the load, and push out the content all around the world in order to distribute it effectively. (Applause.) And it provides a really great way for you to go ahead and cost-effectively, for free, integrate Silverlight and video support into your site.
So, we’ve talked about a number of thing so far this morning, there’s a lot of announcements that we’re making here. Just to briefly recap kind of what you’ve seen, and what we’re announcing, you saw a whole bunch of demos of media, all of these scenarios that we’ve shown work with what we’re calling Silverlight 1.0, and this morning we shipped a Silverlight 1.0 beta that you can go ahead and download from our site immediately, and start taking advantage of. Silverlight 1.0 beta includes the Go Live License, so you can also go ahead now and integrating it into your Live sites.
We are also, as I talked about, launching the Silverlight Streaming Service. It’s a preview service right now, so it will get richer over time, but you can go ahead and start taking advantage of that to do cost-effective video. And the tools that Wayne showed in terms of integrating video with Expression Studio are also now available for download for you to use. Our plan is to ship Silverlight 1.0 this summer, and so you’ll be able to take advantage of all these features live with a release that’s very shortly.
Now, I mentioned earlier in the opening that we are shipping a cross-platform version of the .NET Framework with Silverlight. If you’re wondering, how does that work? (Applause.) A few people are excited already. Those of you that are using .NET today, you might wonder, what would a .NET Framework running in the browser actually give you, and so I thought I would spend a few minutes just talking briefly about what are some of the capabilities that this really opens up for Web developers.
We’re shipping as part of the Silverlight run time a WPF UI Framework Library. This is a subset of the full WPF UI Framework Library that Ray showed some videos on, and gives you a really rich way you can build interactive UI, rich controls, take advantage of things like layout managers and data binding, and really build killer user experiences.
We’re also as part of Silverlight shipping an HTML library that allows you to also go ahead and from within any .NET language reach into the DOM or the page, as well as the status bar, and the overall window frame, and you can now also go ahead and build AJAX applications using the .NET language.
We’re including a built-in networking stack that makes it very easy for you to go ahead and call back to the server, and exchange data back and forth between your client and your server. We have built in support for REFs, for standard plain-old XML APIs calling just any old end point, as well as Web services, and we’ll show some demos of that in a little bit.
We’re also including inside Silverlight flexible data support. We’re shipping as part of Silverlight our new link query API, which allows you to now go ahead retrieve data using network stacks, and then do local querying and processing directly within the browser. We also then have an offline cache that you can go ahead and store that and efficiently use data.
So a lot of cool features, a lot of capability, you can use Visual Studio and Expression to go ahead and program against all of this. So, anyone want to see a demo? (Applause.) OK.
So, let’s go ahead and we’ll switch actually to this install machine here. And one of the things I think that you typically see in a keynote demo is let’s install the product that we’re going to demo, typically because installing a product can sometimes take a while. And I think one of the questions a lot of people ask as part of our Silverlight integration is, so, what is the first time user experience when you go ahead and hit a site that’s built with it? How much is this .NET Framework thing going to cost me?
And so one of the things that we spent a lot of time on is really focusing on that end user install experience. And so what I thought I’d do is actually just show off the simple app right here, Scott’s chess app. This actually shipped in the SDK, available for download now, so if you wanted to, you can go ahead and check it out.
And you’ll notice I’m running this on an XP machine, so there’s no version of the .NET Framework installed. I don’t have any special Windows Media Player installed either. This is just sort of a clean, standard XP machine straight out of the box.
To do that, I’m just going to go ahead and click. It’s going to download a small version of Silverlight. Let’s go ahead and hit run. This is going to go ahead and download, and then it’s going to go ahead and install all the media codecs, as well as the .NET runtime on the client, and then it’s going to go ahead and run the app. (Cheers, applause.)
And so what you’re seeing here now is .NET runtime for Silverlight is installed. I’ve got a simple little chess app running inside my browser, just point at the URL, and the app is deployed.
So, this little particular app allows me to go ahead and play chess. And there’s actually a built-in kind of AI intelligence system inside the app that allows me to play against the computer.
Let’s actually switch gears now and watch building an app with this. So, we’re going to go ahead and I’m going to switch over here, and walk through kind of running some code.
How many people use Visual Studio today? A number of people, OK, cool. (Cheers, applause.)
Well, Silverlight doesn’t require Visual Studio, and a little bit later on we’ll use some other development tools to go ahead and build a Silverlight app.
But what I’m going to go ahead here and use is actually Visual Studio Orcas Beta 1, which is in your bag, so you can go ahead and install. It supplies lots of great features, lots of great WPF and ASP.NET features that you can take advantage of.
One of the things we’re also shipping — shipped this morning is an add-on to Visual Studio Orcas Beta 1 that adds Silverlight development tool support. And so we’re going to go ahead and take advantage of that here.
And to start off, I’m just going to build sort of a simple “Hello, world” application for Silverlight. So, I’m just going to say File, New Project. You notice when I have this add-in installed I now have a Silverlight project node so that I can go ahead and create. And this is going to go ahead and open up and create the Silverlight project for me inside VS.
And so you can see here I have a XAML file, which is where I’m going to define my UI. And to start off, since this is “Hello, world”, we’re just going to add a little text block, and I’m just going to call this My Message. And I’m going to go ahead and say, “Hello, world.” And we’ll just make it big for people to see, like so. And then if I want to go ahead and run it, just go ahead and hit F5 or ctrl-F5. This is going to build the .NET version of this app, and go ahead and launch it in the browser for me to go ahead and see. So, we can see “Hello, world.”
And you might be thinking, okay, this is kind of boring. Let’s add a little bit of dynamic code. And you’ll see actually if I go into my solution explorer, because I create — this is a C# project, I now have C# code class for my XAML file. And within this class I can go ahead and add any kind of behavior I want or any kind of interaction logic I want in order to program against it.
Now, Silverlight ships with a subset of the full .NET Framework library. So, if you can say using system doc, you can see some of the libraries that we include built-in with Silverlight. So, if you program against these libraries, they’ll go ahead and work on any operating system or any browser that Silverlight is installed in.
So, to start off with, let’s just write a little bit of code. So, I can say my message doc. Obviously we provide full IntelliSense against all your Silverlight objects and controls. So, I could program the text property, or in this case here let’s just actually wire up the mouse left button down event handler. So, VS will create a little event handler for me. And this method is going to run every time someone clicks on that text. And I’m just going to say mymessage.text is equal to “I was pushed”. Let’s go ahead and run that, click it, and away I go.
So, fairly simple, but it’s sort of an example of how you can go ahead and use Visual Studio now, use any .NET language, create a project, code against it, and you’re good to go.
You want to see this running on a Mac? (Applause.) OK.
So, we’ll go ahead and switch here. And let’s go ahead and hit “Hello, world.” And there we go. So, this is running inside Safari on a Mac. (Applause.) It’s “Hello, world”, so, don’t worry, we’ll make it richer.
Now, not only do we support running applications on the Mac, we also support debugging the applications on the Mac. So, for example, we’ll go here in Visual Studio now, and one of the things you can see that’s kind of cool is we have a feature called Attach to Process. And you’ll notice we now have a new option here called CLR Remote Cross Platform Debugging. You can tell that dev actually named that feature. (Laughter.)
But you can see here you can go ahead and point at a machine, and in this case here I’m pointing at my Mac. We’ll show you all the processes that are running on the Mac. Let’s go ahead and let’s attach to that Safari process, set a break point. Now let’s go back to my Mac and push this again. So, you can go, you can see the debugger just broke. (Cheers, applause.) In case this wasn’t obvious, this was really hard to do. (Laughter.)
You can see I can hover over any of the variables, like I could using a native Windows app inside Visual Studio. I can go ahead and change values. So, let’s go ahead and actually use the immediate window. This is my favorite feature. So, the immediate window lets me program against objects running in that Safari browser in the Mac. So, you can actually see IntelliSense against the live objects running inside a remote browser. So, I can go ahead and change any of the properties. So, let’s just say, “Isn’t this cool?” Hit F5 to continue, updates on the Mac. (Cheers, applause.)
Don’t worry; it gets better. (Laughter.)
So, let’s go actually head and actually go a little bit further with this application. Now, right now I’m just basically using kind of the XML IntelliSense engine inside VS to program against this. Eventually we’ll have full designer support inside VS, so you can also drag and drop UI elements and controls directly.
One of the things I want to show off though in the meantime is some of the integration support we have with Expression Blend, that same version of Expression Blend that Wayne showed earlier, and that you can download on the Web today.
So, now you can go ahead and say open an Expression Blend on any XAML file. This will go ahead and launch Expression Blend and pull up that exact same XAML file and that exact same project inside the designer here.
And so you can see I’m now using Expression Blend. I can have the same project file assets that I had before. Let’s go ahead and we can move things around. I can change the background color of the page. I can even set a gradient. I realized last night as I was doing this that I truly am a developer, because the hardest thing in this entire demo is figuring out the gradient that looks cool. (Laughter.) And I failed. (Laughter.) You get the idea.
I could also go ahead, and as Wayne showed, add timeline animation. So, I’m just going to create a new timeline inside Blend, and I’m going to configure this “Hello, world” so that after let’s say half a second, I’m going to configure this text to scroll to the right-hand side, and we’ll have this thing will rotate, and then after a second is completed, hey, we’ll go ahead and do that. And so now I can test this out. My feeble attempt to do something cool. (Laughter.) But I can save this and then let’s go ahead and actually program against this.
And so basically you can see Expression Blend saves the XAML file that we defined in my Visual Studio.XAML file. (Applause.)
What’s cool though is you can see I now have a timeline one element in the XAML file, and I can now go back to my C# file, and rather than just say I will push, I can obviously get IntelliSense against the timeline. So, let’s go ahead and call the begin method on it. Run the project again, click it, and there we go.
So, a very easy way for you to go have — (applause) — so, a very easy way for designers to go ahead and work on the UI. You can have developers code against it. Obviously the could be the same person, or the nice thing is the workflow also facilitates if you have two separate teams working on the project together.
So, this is sort of “Hello, world.” Let’s make it a little bit richer.
So, typically when you’re building an application or a RIA or a media experience, it’s very rare that you’re only going to run the code only on the client. There’s usually going to be a heck of a lot of code that you’re going to want to write on the server. And Silverlight is designed so that you can have it work with any back-end server technology. As I mentioned earlier, you can make it work with PHP, you can make it work with Java, make it work with Rail, anything you want. And obviously we’re making it work great with ASP.NET and our .NET technologies.
So, for example, just to show that off, one of the things you can do in Visual Studio is add an existing project or existing Web project that you have into the solution. So, now I have both my client side Silverlight project, as well as my server side project inside Visual Studio.
And Visual Studio now supports the ability to add a Silverlight link from a Web project, and so I’m going to wire up my ASP.NET project so that every time it builds, it’s going to go ahead and deploy that Silverlight control into it.
And so now if I just do ctrl-shift-build, we’ve built our Silverlight client, we’ve built our ASP.NET project, and we’ve integrated the two into a single deployment package.
Wayne showed earlier how you can go ahead and drag a XAML file onto any ASPX page or any HTML page. This week we’re shipping as part of our ASP.NET future release built-in server side controls inside ASP.NET to easily integrate Silverlight. And so there’s a built-in ASP XAML control that now automates everything necessary to go ahead and host Silverlight control on the server.
And so, for example, to take advantage of this, I can go ahead and let’s just set this as our startup project. And Flight Picker is a page that I built earlier that hosts this control. Let’s go ahead and hit Ctrl-F5. And you can see now I have this little Silverlight airline Web site that’s been built with ASP.NET. We’ll come back to that and add some more functionality. And right now it’s hosting this “Hello, world” Silverlight control directly within the browser.
So, now we’ve got a server side component, we’ve got a client side component, we can use the same language on both the client side and the server side; we can also then go ahead and use the networking features inside Silverlight to enable the client to easily talk back and forth between the server.
So, to do that with ASP.NET it’s actually fairly easy. You can go ahead and expose either WCF Indigo Web service or you can expose the standard ASMX Web service within ASP.NET. Just like you can call this with AJAX using ASP.NET AJAX, you can also now call this from within Silverlight.
So, to do that, it’s fairly easy for me to do, and with C# I can just go ahead and say Add Web Reference inside the Silverlight project. This allows me to type in the URL of the end point I want to directly program against, or I can use VS to browse all the Web Services currently in the solution.
We’re going to connect to that Flight Service. Here’s a couple of methods on it I can call, call this the Airline Web Service. We just added a Web reference into this Silverlight project, which means it’s going to automatically create a strongly typed proxy object that I can then program against.
And so, for example here, I can now say Airline.flightservice equals new Flight Service, and if I say (SVC-dot ?), you’ll notice I now get method for each of the Web service end points that are exposed on the server that I can program against.
So, I want to look up flight information, I can just say service.getflight, pass in the arguments I want, Silverlight will automatically serialize and send them back to the server and retrieve the results, and you can do that both synchronously and asynchronously.
And any time you change the back-end server, we’ll automatically update your proxy objects, which makes it super easy as a developer to go ahead and keep the two client and server in synch and program against them.
And what’s nice about Visual Studio is because I have both projects actually loaded in the solution, I can actually set breakpoints now both on the server side, as well as either on the Mac or on the Windows slide on the client, and I can now actually step back and forth between the client and server in a single debug session. It makes it much easier to go ahead and figure out what’s going wrong or to step through your code.
So, we now have sort of a simple “Hello, world.” I’ve shown wiring it up into a ASP.NET project. We’ve shown how you can go ahead and talk using Web Services. Let’s go ahead and actually finish up this UI and make it a little bit more attractive.
And I could obviously go ahead and add lots more elements onto this page, and do that directly. The only thing I can take advantage of now with Silverlight is what we call our control model. And so specifically we’re providing the same control model that’s available in the full-blown WPF. And what this allows developers to do is to go ahead and encapsulate functionality into reusable controls that you can then program against.
And so to do that, I’m just actually going to go ahead and import an existing control library of controls that we’re going to go ahead and use into my project. And then in the interest of time, rather than me typing this in, I’m going to go ahead and just update my XAML file to use these controls.
These controls are implemented in a separate compiled assembly, and right now inside my XAML file here I have basically a couple of canvas elements that are going to position the control on the page wherever I want them to. And I’m basically then using a map control, a calendar control, and what we call an itinerary picker control that are custom to this particular application.
And if I go ahead and run this project now, oh, I’ve got build errors. The cool thing is we give you complete compilation support so that when someone forgets a step, it will actually tell you. And so you’ll notice here I actually no longer have a text block called My Message, so I’m getting some nice compilation checking for me.
Now, I’ll go ahead and rerun the page, having deleted that code. And what you’ll see here is I have my airline site built in ASP.NET, and I now have a map control, and now have a nice calendar control built with Silverlight. Let’s go ahead and actually select some date ranges on the screen. I can go ahead and use the map control to kind of wire up point-to-point locations for where I want to fly. And all that’s missing now is for me to write some code that actually wires all these controls up and actually provides some functionality with that Web Service.
Let’s go back and actually provide that.
So, specifically what I want to do is every time someone selects a flight on the map, I want to go ahead and pull the date range out of the calendar control, and update this itinerary picker control showing me the available flights for that particular time and location.
And so to do that, it’s fairly easy to do, I’m just going to go ahead and wire up a destination selected event on the map control, and I’m just going to go ahead and set on this itinerary picker control, call the show itineraries method, and I’m just going to pull out from the map the origin location, as well as the destination location we want to go, and I’m just going to retrieve from the calendar here. I’m going to go ahead and pull out the start date that we want to use.
Go ahead and compile and run this application again, and now if I go ahead and select some dates, go from Seattle to Atlanta, you can see here I now have inside my itinerary picker the available flights for how to go there. (Cheers, applause.)
The cool thing about a graphics engine is you can really do some cool text though. So, let’s actually go a little bit further here, which is let’s have it so that when you actually select or highlight, hover over one of these particular flights, we actually map out all the different segments on here on the map, and show off a little bit of this.
So, to do that, let’s go ahead and wire up on your itinerary picker control an event so that every time an itinerary is selected, we’re going to go ahead and write this other method here.
And so specifically on the map, I’m going to call a method called Show Itinerary, and we’re going to pass in the itinerary details of the currently highlighted row on the map. And so now we go ahead and let’s select a couple dates. Let’s go from Seattle to Atlanta. And hover over there, you can see the different flights — (applause) — and get a little bit of animation in action.
So, let’s go back to the Mac. Can we switch back and show the Mac on the screen? Let’s go ahead and switch over to the Mac? (Laughter.) Please? (Laughter.) It’s station six, in case you’re wondering backstage. Or you can punch the guy sitting next to you. Ah, there we go. (Laughter.)
And so what you can go ahead and see here now is the exact same app that we just built. I can go ahead and select the range. I can go ahead and select the — Colombia. Let’s see if we can really get one that’s going to maximize our frequent flyer mileage. (Laughter.) And you can go ahead and see here now it’s running on the Mac as well as on Windows, same app, same built with .NET, you can debug in both places, and get a full Visual Studio and Expression Design support for. (Cheers, applause.)
So, this is kind of a simple example, and I’m not very good.
So, what I thought we’d want to do is actually show off a much richer and cooler example that someone outside Microsoft has actually been working on the last couple of weeks, and I think really shows off some of the power both in terms of what the .NET runtime provides you on the client, and really how far you can push the browser.
And so specifically I’d like to invite Beau Amber, who’s the CEO and founder of Metaliq, to walk through an application that he’s built that we call Top Banana. (Applause.)
BEAU AMBER: Thanks, Scott.
So, I’ve been a developer for quite a while now, coding on all kinds of different projects, from concept cars to Internet portals. And I tend to gravitate toward anything that’s new, cool, and pushing the limits. So, to help me do that I created a company a few years ago called Metaliq, and I really wanted to innovate on a larger scale. And I found by pulling together a group of exceptional designers and developers, we could really create great apps. And that was all based on the idea of really strong code and gutsy design blended together.
So, all of that put us on an interesting path. And with everything, we find ourselves being among the first to work with new bits, especially alpha and beta bits, like Silverlight. And it’s pretty exciting, but I don’t know about all of you, but it’s also how I feel right now. There’s this little thing called Halo 3, the beta sometime soon maybe. You just want to get it and play with it. And for me that was Silverlight until I get my beta of Halo, hint, hint.
But what do you do? It’s too new. There is no manual, there is no cheat code. You’ve got to get into it and figure out for yourself. You’ve really got to push the app and also your own skills. And it’s not just what they say you can do with it, it’s what you can figure out and all the cool tricks you can find. And we spent a good time doing that.
And so why I’m here to talk to you though today is I was up at Microsoft just about a month ago, and they had some cool new demos for the desktop, prototypes with WPF. One of them in particular was a video light table application had some really cool concepts, really fun and intuitive, and really easy to arrange video content, make edits, and preview them, especially the short type of clips you might get from your cell phone or maybe vacation movies.
So, I thought, well, that was cool, this would make a nice desktop app, but it would be a really cool Web app.
Silverlight is obviously a great idea, but at that moment there was just basic scripting. We really wanted something like the power of C#. And at that moment, I found out Microsoft was right there with us, that a new version of Silverlight, still under wraps, not just XAML but the power of C# and Visual Studio together. Better yet, they challenged us to take this desktop concept and build it for the Web, all in Silverlight, pre-release alpha bits, and of all things, do it in less than a month, so I could demo it to you today.
So, now I’d like you to see what we’re calling Top Banana. This is one of the first managed code applications developed with C#, Visual Studio, and Expression Studio.
And I’ll show you some of the features. Here I’ve got a clip-in which is showing me all the video content available. And I can do some cool things like roll over to get video previews of the content.
If I want to find something in particular, I can just type in a search, and it filters down my content. Now, all I have to do is drag it out and drop it on the workspace; super simple.
But this isn’t meant to be just a video player; the whole point is do editing. To do that, all I have to do is click and drag. Now I can seek through the video just to the interesting parts. I can trim the in, and I can trim out. Now when I play it, I’m just seeing the edits that I’ve made. If I want to go one step further, I can just add more content.
I’ll grab another clip, hover, and now I can snap these two together. I can trim this one right in place. Now if I hit preview, I’m playing back two different clips as one. And in just a couple of minutes I’m able to do really simple edits. This whole thing is just Windows Media Video files and an XML dataset to store all of my cuts.
Some of the other light table features let me zoom in and out, let me work with different amounts of content. I can get in up close or pull a lot of things into view. And I can also pan around the interface. Here I’ve got some other content already set up to take a look at. Let me just pull it into view, and now I’ve got nine different clips. And I can play these back individually, but let’s go ahead and save ourselves some time, and just play it all. (Applause.) So, really easily I can play nine pieces of content and just see if anything pops up.
And in terms of performance, let me just reload the whole app. This whole thing is delivered over the Web in 50k; pretty tight code in XAML. (Cheers, applause.)
So, now that I’ve got a clean slate, let me show you an actually cool feature. It’s a little something that we call Film Strip. I’ll grab a few pieces of content out, and just drop them into my project. And I can also minimize the UI, give myself some more room.
Now, if I click and drag the video player, it transforms into a film strip. Stretch it out, I can give myself some more room, stretch it out even more. And now what I’m seeing is both the preview but also snapshots all the way through. So, I can see not only everything in the video, but where it is. And this makes it really easy to jump to specific edit points if you want to do different cuts.
So, I’ll pull open a couple other ones here, and take a look at what I have. And I have one here of the one that I want to cut in, but I can see right here in the middle there’s something blocking the video. I can jump right past that by just clicking and dragging, and you’ll see it grays out the content that I don’t want. And I can see there’s an over-pass number in the middle of my shot.
I’ve got one more thing to tweak the editor. I can quick and drag in the preview, and step through frame by frame, if I want to, to get an exact edit point. And then I can just snap and now I’ve trimmed that together. And even with either of the film strips, I can still drag, drop, and hit preview, and play my edits all together.
So, again, a whole bunch of different ways to have a really fun and interactive experience, which I think is pretty fun, and we had a lot of fun making this. But the whole thing was done, like I said, with Visual Studio and Expression Studio, and we used that end-to-end in our workflow. So, let me show you exactly part of how we did that.
We started off in Expression Design working out all the look and feel and the graphics. We then took that and exported it to XAML. The great thing about all of that is it let us go from concepts to production assets in one tool and in one workflow, which was really nice.
From there, we moved into Blend. Here we just imported the XAML, and started organizing it into different sections. We also started working with the solution files, which made it really easy to organize everything. I’ve got the clips in, the navigator and the video pod. And the nice thing about Blend is I can still go in and tweak all these elements, do little nudges, color adjustments, whatever I want. I can also start to play with interactions. The really cool thing is I can compile right from Blend, which means I can test and see how everything is going to come out right on the spot, until it’s just the way that I want it.
After that, we can use Visual Studio. In Visual Studio we’re working with the same project file. And here the same navigation team, and this is what let us do all the C# development. And Visual Studio is familiar to a lot of developers, and it’s got a lot of great features, and made it really easy to develop a few thousand lines of C# code that we did to create all the detailed interactions in this.
Along with that we ended up integrating a couple thousand lines of XAML, and again the whole thing delivered online in 50k.
I’m going to pull up one more little example of this, and what we found in doing all this is that we were able to create not only a rich, interactive application and a cool video editing application, but that we were able to do it in a really short timeline, and with pre-alpha bits, with a remarkable small amount of problems along the way.
So, what’s next with all of this is that this was just our first Silverlight project. And we’re certainly excited to see what else we can do with all of this, and looking forward to the beta and the full release of all of this.
So, Scott, thanks for the opportunity to show this.
SCOTT GUTHRIE: Thanks, Beau. (Cheers, applause.)
In case you’re wondering, gosh, I wish I knew how to build a cool app like that, one of the things that we are doing is patching up the Top Banana app, and we’ll be releasing it as a sample. And so if you want to go ahead and incorporate video editing into your site or any kind of user-generated content, it’s very easy for you to go ahead and take that code and go ahead and do it.
The other thing you can go ahead and obviously integrate that with is that Silverlight streaming service that once you finish building that video or once your user finishes building that video, you can upload it, and we’ll go ahead and stream it out with Microsoft.
And again, as Beau mentioned a couple times, so far everyone who has seen the app doesn’t quite grok it the first time, because it seems somewhat unbelievable is that the entire app that he ran in the browser, just by typing in the URL, all of the code, all of the XAML, everything except for the videos combined, the entire download experience when you type in that URL is less than 50k. And so it’s very fast deployment experience across the Web, works cross-platform, and I think it’s a taste of some of the experiences that we hope to enable using Silverlight in the browser.
And one of the things that we’ve done over the last year is try to take some of the core dynamic language plumbing that we were putting into each of the compilers, and actually pull it out into a common library that we call the Dynamic Language Runtime, which any language vendor can then go ahead and easily use to go ahead and implement their own dynamic language on top of .NET.
A question people often ask, so, you know, poll the audience, is there any other dynamic languages you’d like us to add? Which one? Ruby. Good question. (Laughter.) You get your $5 later. (Laughter.) So, how many people are using Ruby today? A few people, OK.
Well, I’m pleased to announce that Microsoft is providing a Ruby implementation for .NET that we’re calling Iron Ruby, and that we’ll be making freely available for anyone to use. Like Iron Python, we will also be shipping the source code to Iron Ruby, so it will allow anyone to go ahead and modify the source, look at it, and adapt it however they want.
And you might be wondering, okay, well, Silverlight has the same CLR engine that the .NET Framework has, and you’re releasing this sort of cool Ruby support for .NET; does that mean that you can run Ruby or Python or any other dynamic language in a browser in a cross-platform way in order to build your client Web applications? The answer is yes. So, let’s go ahead and see the demo.
So, we’re going to go ahead here and switch over to station seven. And what I have here is actually I’m running on a Mac here, so I have no Visual Studio in the picture. And I’m running, basically using the TextMate text editor. It’s a popular text editor on the Mac. And I’m using (Lighty ?) as my Web server. And there’s no .NET code anywhere on the server.
But what I can basically do here is you can see is use TextMate to define my XAML, just like we did before, and then you’ll notice I have an RV file which contains some Ruby code that we’re going to be running using Iron Ruby.
And so you can see here I’ve defined basically an init method that’s going to run at the beginning, and I’m basically using some Ruby language constructs here to go ahead and wire up an event handler.
A couple of things you’ll notice is that I’m actually doing it inline using the Ruby block feature in order to go ahead and define that. And then I’m just programming against the timeline to go ahead and kick off the timeline when a button is clicked.
And I can wire it up from within this source using an x code attribute, and I just point at the RV file. I don’t need to compile it, I don’t need to package it. I can basically just point the text from my XAML, text from my dynamic language, and Silverlight will go ahead and download both, and run them on the client.
So, a simple example here, just go and hit refresh and load the app we just built, and you can see as I push the picture, it’s going ahead and running that Ruby code and causing the image to flicker.
Now, one of the cool things though about dynamic languages is the ability for you to not just actually type code in to a text editor, but the ability to go ahead and actually use sort of like a console-based app, and have a much more iterative kind of approach as you’re actually writing code and working with it.
And so there’s lots of popular console-based apps, command line console apps that you can run today. There’s also kind of a cool — you know, try Ruby or try Python Web site, which uses a server to go ahead and process code and simulate the ability to do a console on a Web app.
One of the samples that we’re shipping later this week that we think is kind of cool is a version of that that we built with Silverlight. Now, the trick and the cool thing about this though is that we’re not actually using a server at all in this picture. We’re actually building a console app entirely as a Silverlight client application — again running on the Mac, but it also runs in Windows — and allows you to go ahead and iteratively type code and basically try out and build the Silverlight application yourself.
So, for example here you can say canvas — we’re Microsoft, so we had to add IntelliSense. And so we can go ahead here, and you can see it’s listing all the properties in the canvas. Go ahead and hit the background, and if I want to, I can go ahead and say, WPF.green, green brush. And you’ll notice on the right-hand side, as soon as I run that code, it’s gone ahead and updated my canvas. So, I can again write code on the left-hand side, immediately see the reaction on the right-hand side. And so if I wanted to, I could go say XAML equals WPF.loadXAML.
One other thing you’ll notice, if you’re a language expert or a Ruby guy is you might notice it says load_XAML. One of the things that we’re doing with our Ruby implementation to make sure it feels natural to any existing Ruby developer today is actually use the Ruby naming scheme when you actually program against the .NET libraries. And so we can automatically canonicalize the methods and properties and events to feel natural to the language that you’re coding in. So, I can just say load XAML, I can say photo.XAML, and I can then go ahead and say canvas.children.add, and I can just say XAML, and run it in the browser.
We’re also then available for download starting immediately, shipping what we call our Silverlight 1.1 alpha. And this is the version that has .NET support built-in, it has the framework library, it has preview tools for both Expression and Visual Studio that allows you to code just like I did earlier, and you can go ahead and build apps like Top Banana starting today.
Beau actually had to code all that before we had documentation. The good news is we actually do have some documentation now, and that is also available for download, so you don’t have to quite start from scratch. But hopefully it provides great support for you to go ahead and start experimenting with the platform.
And one of the questions that people often ask me, both internally as well as externally, is, well, how far can Silverlight go? And the reality is I think we’re not really sure. What we’ve sort of seen with a whole bunch of people that have been playing with Silverlight is they’ve actually built apps that really kind of astounded us in terms of the ability and the richness that they’re able to provide.
And one of the things that we’re really looking forward to as part of this conference and over the next year is working with you to see kind of what kind of experiences you can build, and how you can sort of push the capabilities of the system to really kind of build just fantastic user experiences.
One of the things I wanted to show and show off though is one other partner that’s gone ahead and been using Silverlight for the last couple of weeks, who’s really demonstrated how to build a really immersive, rich experience using it. And so specifically I’d like to invite Bob Bowman, the President and CEO of MLB.com, to kind of show off the app and talk about their experiences. (Applause.)
BOB BOWMAN: Nice to see you. How are you doing today?
SCOTT GUTHRIE: I’m doing great.
BOB BOWMAN: Greetings, everybody. Good morning. Everybody here having a good time?
We at MLB.com have been running our site, which consists of the league site and the 30 club sites, for we’re on our sixth year now, started in 2001. This year our site, 31 sites, the portal will enjoy about 3 billion visitors. And we go from a steady state to where we microwave up and can get massive data coming in at one time.
Every second, because of the nature of baseball, 15 live games every day, a pitcher moves his arm, creates all sort of data. Every second we create in my world what’s getting back to what I understand, 8 to 10 DVDs worth of data every second on our site.
And so the partners we choose are pretty gosh darn important. We’d much rather buy than build. We can buy a site, not only software but a company and all the resources it has, plus everyone else who might be working with the software.
And while our site has to appeal to people as old as I am, it has this nice little steady state, steady screen, here’s the score, not too fancy. It has to appeal to the 16- to 17-year old who wants 65 moving parts.
And while we have all the things that you might expect on a baseball site, and while we make money from selling merchandise and tickets and all the other things that hopefully you all go to, the most important thing we have is our live games, and what we do with our live games, and how we utilize it to get people to enjoy the great game of baseball.
And so we started streaming live video, live games back in 2002 in September. There were in 2002 some doubters, many of whom were on our board, as a matter of fact. But we started streaming, at least I think it was streaming; it may have been rapid snapshots. (Laughter.) But our player looked something like — let me try and call it up there. That’s what our player looked like. And I’m sure you all are subscribers, and we actually have run the names of everybody here, and those of you who aren’t, we’ve signed you up while you’re here. (Laughter.) It’s a relatively inexpensive product, just $14.95 a month. You can afford it and you’ll enjoy it. (Laughter.) And if you don’t, just try and cancel. (Laughter, applause.) Just kidding. That’s a different conference in Virginia; just kidding.
Anyway, this is what our player looked like in 2002. And since it was live video, in theory, it was okay. Looked pretty nice, and people liked it, and we had a couple hundred thousand subscribers.
But then we advanced it a little bit a couple of years later to something that looked like this, a little bigger screen, better quality, a context window that would let you see other things that are going on, and a little highlight clip in the upper right-hand corner. So, that’s a nice little player. And a little ad on the bottom to try and make some money for the owners of baseball so they can do what they do.
Then we advanced it in the end of 2006, in September 2006, and now this year to what we call Mosaic, six games at once, the lower left-hand is actually our 24×7 baseball channel, the other five are the games that you can watch at once. There’s no buffering required, because we’re actually streaming all the games in the background, so you click another game, it instantly goes there. You can see the steady state of those games across it. This product has been downloaded by hundreds and hundreds of thousands of people.
We will end this year with multimedia subscribers north of a million people. So, because of the greatness of this game, this is what we can do, we can attract people to buy this.
And then the one screen example is this. If you happen to watch, it would be a Yankee fan, and you’re watching, you want to go to one game, there’s your box score, there’s everything you’d ever want to know about the Yankees right there with obviously the captain swinging there and trying to hopefully break the slump that they’re in.
And this is great quality streaming. We actually wired every part so we can bring it back live from the park with or without ads, however we want to do it, but the quality is superb, you can go to full screen. We’re working to make it better and better.
But having said all that, this is great, and I enjoy that, but there are a lot of high school kids out there, college kids out there who want more things that move, and want more statistics and more things embedded in the video, if you can.
And along comes Silverlight for us, and Microsoft generally.
To explain what we’re doing with this great new product and how we’re going to try and make our games more exciting, we have our young superstar as well, whose name is Justin Shaffer, who’s going to join us and walk you through Silverlight. He’s actually in charge of new media. In baseball they think we’re a new media company. We know that already it’s not new anymore, so we have a new media person, Justin Shaffer, who’s going to be joined by Michael Coates of Microsoft to walk us through Silverlight and live video. Justin? (Applause.)
JUSTIN SHAFFER: Thank you very much.
So, when the team at MLB.com first took a look at Silverlight, we were really excited about all the features and functionality that were made available that we didn’t have access to in the past, from consistent support on PC and Mac to what we can do with compositing over our live video. We’ve created a really interesting experience here, which we’ll be launching this summer on Silverlight on our MLB TV player.
Mike, why don’t we go ahead and launch the player?
So, what we have here is the featured game and sight and sound view. This is an opportunity for our editorial staff to feature what’s going on today, storylines around series that are being played. It looks like we have a Mets and St. Louis game featured, so why don’t we go into the game view?
And here we have this live baseball game. The video you see here is actually 1.5 megabits, VC1 streaming video. Today, we’re streaming at 400k and 700k for MLB.tv products. That 700k stream looks great on a standard desk television.
In parallel with our Silverlight development, we’re working hard to develop new technology that will allow us to actually stream this 1.5 megabit stream, originally premiered in the Mosaic, and now with our Web-based player as well.
One feature here I’d like to point out is actually the overlay. What you see here across the top of the screen is actually dynamically driven data, and we’re putting live markets in the Windows media stream on every pitch, and we’re using that to allow for a user customizable view here where you can actually put in, say you want pitch count, you click here, you can add pitch count and update this overlay based on your preferences, whether it’s team or stats-based.
From here why don’t we go on to the full screen view? Wow, I wish I had a projector like that in my house. (Laughter.) What do you guys think? (Applause.)
So, the full screen full, you know, this really represents two opportunities for our fans to view both in sort of a lean-in and lean-back environment. You’ll notice the overlay is now actually really nicely composited over the video and transparent. One of the things we haven’t been able to do in the past with our live video is actually this kind of feature and functionality. We’re watching a clean video feed of the game as well, made possible by our infrastructure in the ballparks.
For the fans that are interested in a little more information, we have tons of live data down to every single pitch, and we’ve introduced some widgets into the Media Player that will let you more proactively view what’s going on in the game.
Let’s first start with the Diamond Vision widget. This widget lets you see what’s going on in the game, who’s on base, who’s in the field. It’s a different perspective on our game day stats, done nicely in 3d, and again overlaid over the video.
Next up we have Player Tracker widget. Player Tracker is a feature we launched this year within the Mosaic, which is really compelling. If you’re a fantasy player, you have some favorite players, you can put them into your Player Tracker roster, and what we’ll do is we update you proactively on, say, Alex Rodriguez is on your roster, we’ll tell you he’s in the hole, we’ll tell you he’s on deck, and then we’ll actually be able to send the highlight of the clip, if there’s a significant event, you’ll that after the fact as well.
And we’ll finish it up with a Chat widget. Baseball is an extremely social medium. We thought that this is a great opportunity to allow people watching a live game to interact with their friends or with the fans of the opposing team, and have a great dialogue. (Laughter.)
So, let’s go back to the game view then. So, from here now we see our customized view with the widgets we’ve added already. Say we want to watch another game; we can drop down today’s game. And this takes advantage of a feature that I think is one of the most compelling pieces of all this. We have this live experience where you’re watching baseball, and we really want to keep you on the live game as much as we can. What Silverlight lets us do is actually dynamically resize the video you see there. Why don’t we do that one more time? And that’s great. So, whether you’re looking at today’s games or maybe you’re in an enhanced chat window, or you’re looking up stats from your favorite player, we can keep that live game going all the time. (Applause.)
It looks like we’ve actually also just gotten an alert from a friend of ours. BigDog1 has sent us a video clip. One of the neat features is the ability to do picture-in-picture video playback. So, again with our infrastructure we can do near real time transcoding of basically every live event, and pull up that homerun literally just minutes after it’s happened. So, let’s take a look at this clip from BigDog1. We’ve got picture-in-picture playback over the live stream of this highlight clip here. (Applause.)
And while many of us would like to be watching baseball all the time, some of us have day jobs, and to that end we created a consolidated view, which is not unlike a full screen view, but gives it to you in a window with the really nice composited overlay. Let’s take this down to the window view now. So, you’ll be able to resize this window, make it as big or as small as you want, and get on with your everyday life, and work while watching the game.
One other feature here that’s of note, as Michael has shown us, we can actually via mouse inactivity or a hot button hide the UI, for those of you who just want to enjoy the baseball without all the extra information as well.
So, that’s all I have for you today with the Media Player. (Applause.)
SCOTT GUTHRIE: Pretty eye-popping experiences, and I hear you’ve got a couple other sneak previews of something else you might be able to show.
JUSTIN SHAFFER: We have one other forward-looking demo that we’re pretty excited about. What I have here is actually Silverlight running on a next generation Windows Mobile phone. Excuse me while I launch this. And this is a representation of our game day application that you’ve seen on the site. Let’s see if we can see that there.
What we have here is look around the league, American League, National League. Let’s go take a look at the Houston-Chicago game. And we can come in, and now we’re into what will be a live feed of the game, 2-2 count, and coming soon we have what looks like a single to right field, with the runner advancing to third base. You can see the player moving there. I don’t know how well you guys can see that from out there.
The other thing we’ve added here, which is really neat, and a great differentiator for Silverlight, is we put our Player Tracker functionality here with that same video highlight playback. So, I’m going to click on Rodriguez, and we see the clip coming up there, and we’re watching that same highlight now on the mobile platform as well. (Cheers, applause.)
Thank you all very much.
SCOTT GUTHRIE: Good stuff. (Applause.)
Hopefully you’ve seen today Silverlight is really going to open up a lot of opportunities to kind of allow you to connect to your customers in a much richer way, and really build the next generation Web in terms of richer user experiences, and really take advantage of the browser.
Silverlight is cross-platform and cross-browser, and our goal is to be able to support those types of experiences seamlessly on top of any system that Silverlight is installed on.
You have the .NET Framework to take advantage of now, so you can provide kind of the richest possible programming environment you can. You can incorporate media, you can incorporate graphics, you can incorporate animation, and really build differentiated experiences.
And obviously you can use either a text editor in order to develop it, and we’ll also then be providing at Microsoft great development tools, as well as great design tools within Visual Studio and Expression in order for you to leverage.
In terms of the roadmap of where we’re at and what we have for you to go ahead and use, starting today you can go ahead and now download the same runtime bits and the same tools and the same design tools that we showed in all these demos this morning. They’re all free downloads, so you can all go ahead and take advantage of them. We’re going to have great sessions here at MIX during this week, so you can go ahead and learn more about how to maximize them and really put them to full use.
This summer we’ll be shipping the first version of Silverlight we’re calling Silverlight v.1.0, specifically focused on media scenarios as well as AJAX programming. And we’ll also be updating our Expression suite to have media encoding support for it.
Going forward, we’re going to go ahead and ship Silverlight 1.1, which we’ll be adding the .NET runtime support, and provide even further support within our Expression and Visual Studio development tools to allow you to really build the best possible experiences.
We’re very excited about what Silverlight provides. We’re really looking forward to working more closely with you in order to take advantage of it.
To learn more and to get started, you can now go — hopefully they got it up in the last hour — to www.silverlight.net, which is our community site for Silverlight, as well as the download site that you can go ahead and get started with the bits.
We’ll have online samples, we have online forums, we have online blogs, and you can go ahead and get help there, learn more, and then if you have a cool sample, you can also go ahead and post it into the gallery in order to share it with others. We’re really looking forward to seeing what you build with this. Thanks a bunch for coming. (Applause.)
SCOTT GUTHRIE: And with that, I’d like to invite Ray Ozzie and Michael Arrington back on stage, and we’ll go ahead and do a Q&A, questions. So, Michael and Ray?
MICHAEL ARRINGTON: So, I have a chance to ask you guys a couple of questions. Actually, I’m a little upset though. I was back there watching the demos, and as a blogger, I want to be writing about this, and I just didn’t have the time. And so I think there are people in the audience probably live blogging this or live recording it, and so I’m not going to be first. I’ll make up for it later.
So, we have time for 25 minutes for a few questions. And some of these questions are addressed to both of you, and just feel free to speak up, and hopefully we’ll have a good discussion about this.
To start, as the editor of the TechCrunch site, I sort of have my finger on the pulse of what’ going on in the Web today, and we’re seeing a lot of new startups, we’re seeing a ton of venture capital flowing into the system, sort of like ’98 and ’99, and I think that’s great. But for you guys you have to look at that and say, you know, Windows has obviously been and continues to be an incredible success as a platform. So, what about thinking about the Internet as the new operating system? And how does that affect your thinking going forward?
RAY OZZIE: Well, it definitely causes a change in perspective. I mean, I said earlier that from my vantage point the Internet really did change everything, and it changed it in a number of very material ways. I mean, we have technologists that keep taking what we know, and in some cases putting it in new forms. But the Internet is a network of networks, and it really connected a lot of things that were potentially previously viewed as an A or B choice. The Internet brings together a number of different things that we would regard as platforms. Every Web site that has an API surface area on it, whether it’s a Web services API, a REST API, whether it’s a big site like eBay that has a bigger surface area, or a smaller site like Twitter that has a very well focused and really useful small set of APIs, those are platforms into themselves. There are platforms like the .NET Framework that offer another kind of surface area. And then there are operating systems, device-specific platforms, whether it be Windows Mobile, Windows, Mac OS, and so on.
The Internet more or less brings these platforms together as kind of like a platform of platforms, and in doing so enables solution developers to take the best things that they would like to use and build composite applications and solutions in ways that they never would have imagined before. And from that standpoint, it’s extremely positive from my standpoint.
As a vendor of some things that have a lot of surface area, I view it as a big opportunity, because there are — even though the bringing of these platforms together feels more like a platform mesh, there is still an advantage to having service aggregation under one umbrella, because there are issues of — well, the simple issues are common API semantics across these APIs, but probably more importantly to developers it gives us the opportunity to put together common monetization models for those APIs, common SLAs and terms, business terms that would cover more of those APIs. And if you look at something like Amazon, between S3 and EC2, there are advantages to be gained through the physical collocation of various services, because they might have higher bandwidth amongst those things.
So, I just see it as an era that we’re entering that has tremendous opportunities for solution development like we’ve never seen before.
MICHAEL ARRINGTON: I want to talk about Silverlight, because that stuff is incredibly exciting. We saw the demos from CBS, Major League Baseball, and Netflix, and I’m sort of desperately trying to get my hands on screenshots of the Netflix demo, and I want to post that.
I haven’t actually heard anybody at Microsoft say this, and I don’t think I would, but some people out there are starting to get their sort of hands around exactly what Silverlight is, and they’re calling it a Flash killer. So, I want to ask you what you think about that.
I’m going to assume you’re not going to answer that question as directly as I might want you to, so I’ll ask a follow-up question right now, which is, Adobe has historically dominated sort of the designer crowd. Can Microsoft really be successful with designers, and is Silverlight the way to get in there?
SCOTT GUTHRIE: Well, I think one way to think about it in terms of this overall space is one of choice, which is I think both developers and designers want to be able to use a variety of different tools, and they want to be able to use whatever works best for a particular scenario. So, I don’t think it’s a zero-sum game or one wins and one loses, and I don’t think it’s ever going to be a case where everyone always uses one set of tools or another set of tools.
And what we’re trying to do with Silverlight, and specifically design tools for Silverlight is focus very much on interactive experience, and thinking of where we do differentiate and have some good value is specifically how the developer and the designer work together on a project, and in building applications or Web site solutions.
So, I think there are some good features that we’re providing. I don’t think it’s ever going to be the case where someone is going to say, oh, you should switch wholesale. I think hopefully there’s enough value there that you can add it, if you’re a designer, into your toolset of products that you use.
And obviously one of the things from a runtime perspective, we are definitely — we think of ourselves as a platform company first and foremost. We’ve really made sure with Silverlight that our file formats are text-based, they’re XML, they’re easy for any tool to go ahead and target. And I’m looking forward to being able to enable designers to use other tools to be able to target Silverlight.
MICHAEL ARRINGTON: Do you have anything to add?
RAY OZZIE: No.
MICHAEL ARRINGTON: OK. That was a somewhat direct answer.
So, there seems to be a lot of excitement in the industry about dynamic languages, Ruby, Python. Why are you a credible provider of these languages? What do you think the impact of Microsoft helping drive broader adoption of this will be?
SCOTT GUTHRIE: Yeah, I think in the developer space, especially with dynamic languages, I think there are a couple different elements of what we’re trying to do to make that just A) be credible, and B) more importantly deliver a good offering.
You know, one of the things that we’ve really spent a lot of time on in the last year is trying to figure out from just a platform perspective how can we make it much easier to build dynamic languages that run on top of .NET. And the demos I showed today really kind of were taking full advantage of kind of that infrastructure.
You know, ultimately our goal is to kind of remove the need to do a lot of the plumbing, the dispatching code, the code generation code, a lot of the things that compiler vendors have to write today to componentize that up into a reusable library that any language can go ahead and take advantage of.
And one of our goals eventually is to be able to do a talk where you an do ahead and start the talk by creating a new language from scratch, and have at least a basic version of it up and running by the end of the talk. And that’s how kind of the ease of which that we’re trying to enable dynamic languages.
In terms of specifically Ruby and Python, one of the things that we did early on was to hire in some really great developers, (Jim Hugenon ?) on the Python side, (John Lamb ?) on the Ruby side, who are very credible in those communities, and who deeply believe in the language, and make sure that they’re driving our implementations to make sure that they are not just sort of compliant but really embrace the flavor of the language.
And I think one of the demos I showed in the dynamic console app was showing how we can canonicalize .NET names into naming patterns that are familiar to, say, a Ruby or a Python developer. And that’s an example where we’re trying to not just make it work but really make it work well and fit well.
And the last thing I’ll say in terms of Ruby and Python that I think is important is we shipped this morning the dynamic language runtime source code, the library itself, as well as released the source code for Iron Python, and we’ll release Iron Ruby once it’s a little bit further along.
And that’s available now to download on the Code Flex project, permissive license, so you can go ahead and take this code, and if you don’t think we’re doing a good job, snap it, and you can go ahead and modify it and release it as your own. But obviously we’re committed to making sure that we have really good implementations that we’re proud of, that we build ourselves.
MICHAEL ARRINGTON: So, an area I’m particularly interested in is online office applications. We’re seeing a number of companies launch versions of various office applications online. You guys haven’t made a lot of announcements in this area. I think it was late 2005, Office Live was first announced, and not much has been said about it since then. What are your plans with Office Online, and how does Office Live fit in with that, if at all? I’d just love to hear that.
RAY OZZIE: Sure. Well, Office Live is a service for small businesses that have no IT. Previously most of our offerings involved bringing a server into the small business and hiring a consultant to come in and build the apps and run the apps on that server. This gives small businesses a new choice.
Generally, I mean, we have about 300,000 customers I believe it is at this point in time, each one within the range of, say, two to 25 employees, commonly with no IT. And it’s a great example, a leading example of a composite app using — that takes advantage of Windows Live services, and some of our SharePoint technologies on the back-end.
But I think what you’re really getting at is the Office suite in general. And Office Live will progressively broaden. We have other Office related online services. Office Online specifically has about 70 million customers today who use it for various things related to Office.
I don’t have any specific announcements today, but if you go back to my opening remarks, I kind of laid out a design pattern that I believe you can safely assume you’re going to see replicated through a number of offerings that we do, a design pattern that use the PC for what the PC is really, really good for. You know, step back and look at an overall scenario, and if somebody is trying to accomplish something in a productivity scenario, how best should we use the PC, what good things should we be putting on the service that either work very well standalone on the service, or work very, very well in conjunction with the PC.
And the same with the mobile device. I don’t think that you’ll see a situation — I’m personally not a believer that you take the same app, that this world — I don’t think the world means that you take the same app and just port it to the Web or port it to the mobile device. You should step back and look at the scenario and say, in our daily lives as we go around and we have these mobile devices, they have cameras, they have GPS capability, they have audio recording devices; what role would those devices play in higher level productivity scenarios? The Web has universal access, and the device, the PC has tremendous interactivity. If you spend all day in these products using those capabilities is really very useful.
So, again without announcing something specific, I just think in all of our products you can kind of use that pattern to extrapolate.
MICHAEL ARRINGTON: So, you’re not announcing anything. Are you saying that announcements will be coming possibly some day?
RAY OZZIE: Announcements will come some day when the teams believe the announcements of whatever it is, is the right thing. (Laughter.) Is that concrete enough for you? (Laughter, applause.) We just shipped a great product, Office 2007. It’s a tremendous product. It’s got some really, really good user experience improvements. Each module in Office, you know, Outlook, they all have very specific, really good improvements, and that’s what we’re selling right now.
MICHAEL ARRINGTON: Right. That’s a desktop application, right?
RAY OZZIE: It is indeed a desktop application.
MICHAEL ARRINGTON: I don’t write about those, so I’ll finish up.
RAY OZZIE: You will. (Laughter.)
MICHAEL ARRINGTON: So, we get the device question. So, I wish you were announcing a Zune phone today. I know you’re not, and I know you’ve talked about this, and that’s not the question I’m going to ask, but I sure did want that to happen.
So, you are personally a champion of hardware, services, and software coming together in a sort of seamless ecosystem, or user experience.
RAY OZZIE: Right.
MICHAEL ARRINGTON: I think you’ve even mentioned the iPod in the past as like a great example of that, and you’re starting to do some things on your own that are awesome.
How do you think Microsoft has executed to date looking at the Xbox, Zune, Windows Mobile, and the PC, and what does the future look like here?
RAY OZZIE: I think if you look at the Xbox, I don’t know how many of you really are deep users of the Xbox 360 or Xbox Live, but I think if you look at the pattern and the implementation of that, it’s really a great example of something that was intentionally designed from day one to be a seamless device, software, and service experience. The way that it auto updates itself, the kinds of things that you do appropriately on the service that enables increased use and better use of the devices, it was designed in an extensible way so that it might have started with games, and it’s kind of transforming into media, which is really great, because a lot of people just have that box connected to their TV and stacking up boxes is not necessarily something that they’d like to do. So, from an extensibility perspective, using the service as a hub is a really great thing.
I think that Zune is the second intentionally designed from the outset product. It’s nascent, but you will see the same kinds of things emerge in that space, and probably associations between those two worlds.
You know, in terms of Windows, historically it’s been a service disconnected environment. It’s had to run in completely disconnected environments. I think, as I said before, in all of our products we’re looking forward to ways to look at the scenarios that people use Windows for, Office for, and things like that, and say how can we best build a service, whether it’s a companion service to that desktop product, or whatever, to make those experiences better. Windows Live wave two, for example, will have some of those improved experiences.
MICHAEL ARRINGTON: When Google first launched in, I think it was 1998, I think people saw it pretty quickly as a quantum leap forward in search technology. Do you think there’s room for another quantum leap forward in search technology? And the sort of follow-up question is, how do you see Microsoft participating in that and competing with Google more broadly?
RAY OZZIE: Well, when you say search technology, I’m not sure if you’re referring to the specific engines underlying the search, the things that do crawling, the things that use behavioral analytics, and figure out how to rank. I think there’s plenty of room, and the team working on search specifically has plenty of ideas, from a scenario perspective, as to alternative ways of approaching search.
Today, we spend — most searchers use more than one search engine for roughly half their searches every week, and so I think that in and of itself is saying that there is opportunity for improvement.
And, of course, the nature of the DNA of Microsoft is that you’re not going to go into a space unless you really believe you want to change the game, and you want to win in some form.
But what I actually think is more interesting from a competitive standpoint related to Google, and related to competitors, large, incumbent competitors in general, is kind of how Microsoft approaches it, and what are the secondary and tertiary effects of entering into that competition.
You know, when I was at a competitor to Microsoft, and arguably in one domain, a fairly strong competitor, I always wondered how did Microsoft approach it, and we lived with looking at the results and competing on a daily basis.
I think the fascinating thing is if you go all the way back, some of Microsoft’s best moments from a business perspective and from an ecosystem perspective revolve around the secondary effects around the competition. So, if you go back to Linux and Open Source and Java, those competitive situations, when those teams were focused on specific incumbents, and were very confused about how to actually approach it, because it had so much momentum, those things yielded cultural changes and other changes within the environment. The company’s entire viewpoint toward interoperability was just radically reshaped as a side effect of that competitive battle, and the entire Server & Tools division, which is a fairly material piece of Microsoft now, emerged with many, many products and offerings as a side effect of that competition.
If you go back to Sony, years ago, PlayStation 2 just looked unassailable, absolutely it was just a tremendously strong competitor. And as a side effect of that competition, yes, you can look at Xbox 360 and how it’s succeeded in that dimension, but ignoring that, just going beyond that, the secondary impact of that competition was the creation of the entire entertainment and devices division within Microsoft, and now there’s a broad range of media opportunities and other things that span devices, phones, and so on, and has many ecosystem impacts.
So, from a Google perspective, the secondary impacts have already begun to happen. We have product groups inside of Microsoft thinking about offerings, bringing offerings to market that they never would have considered before, because now there is this ad-based economic engine that we probably wouldn’t have taken as seriously in certain areas or in certain markets like small business that we might have before.
And this thing that I talked about earlier, this services platform, once we decided to make the investment to scale the back-end for search, to scale the backend for ads and so on, I think we began to discover, wow, there is a lot of reusability here, wow, all of our products are going to end up with a back-end services component, so how should we platformize it so that developers throughout Microsoft and on the outside can take greater advantage of that. So, I think it’s a fascinating thing moving forward, and it’s not just focused on the one thing.
MICHAEL ARRINGTON: I love the sound bite of — and I’m not sure if this is an exact quote, but that Google is like the PS2, and that looked unassailable and look at it now. And not that they’re falling apart, but the Xbox looks very strong versus the PlayStation. And I think there was a good post there on TechCrunch.
OK, we have time for one more question, and I want to fit this one in. You’ve been the chief software architect for almost a year now. How have you done? (Laughter.)
RAY OZZIE: I don’t know; how have I done?
It’s a fairly — a little bit when the concept was first suggested, it was a bit intimidating to conceptualize. Bill’s been with the company a little while, he has a little bit of experience in terms of the breadth of offerings internally.
Since before taking over as chief software architect, my platform, if you will, has been services, around services transformation within the company. And if you look inside the company, there are really kind of four dimensions to those initiatives that help me to touch very concretely people within groups across the company. One is connected entertainment that is scenarios around entertainment that bring people together; connected productivity we talked about, things related to productivity; and connected business, what business scenarios are enabled by the fact that all companies and things like that are online now; the fourth being the platform underlying all of those connected businesses.
You know, I’ve had a tremendous opportunity to work with folks. Early on I would work with people related to scenarios. If you think back to that timeframe, there was a good deal of the company working on trying to get [Windows] Vista out the door, trying to get Office 2007 out the door, but they were beginning their planning cycles, and trying to figure out what people would be doing beyond that.
So, we began some incubations. Those incubations gave me an opportunity to meet more people, to have reviews about how certain things worked architecturally, where we should be going, and I’m very happy to say that now that those products are out the door, people are milling out the code.
And so from my standpoint internally, I’m actually quite pleased with where we are. I realize that there’s a tempo that people grow to expect on the outside, but when you look at the number, the breadth of offerings, and the number of offerings, and the depth, and the potential scenarios, the opportunity is great, and I’m really pleased.
MICHAEL ARRINGTON: So, you feel as though the organization is responding to you, that you’re not living in the shadow of your predecessor?
RAY OZZIE: Of course I’m living in the shadow of my predecessor. There will never be —
MICHAEL ARRINGTON: That’s a good sound bite right there. (Laughter.)
RAY OZZIE: Clearly within Microsoft there will never be another Bill Gates, just like a founder leaves their imprint on a company forever. I am not Bill Gates, but I am who I am. And I think developers in the company — you know, when I first came, because I’d known Steve and Bill since probably ’81, and I’d worked very closely, there were — I think people gave me the benefit of the doubt in many cases. Rather than just kind of hammering on me and pressing me and testing me, they more or less gave me the benefit of the doubt.
But that’s a while ago. We’re productive now, we’re going. And my approach to things is different than Bill’s, but it’s working.
MICHAEL ARRINGTON: Great. Well, guys, I really want to thank you for the opportunity to do this, and it’s been wonderful. Ray, thank you. (Applause.)