Jim Allchin: Microsoft Professional Developers Conference 2005

Remarks by Jim Allchin, Group Vice President, Platforms, Microsoft Corporation
“The Next Step for the Windows Platform”
Microsoft Professional Developers Conference 2005
Los Angeles, California
September 13, 2005

ANNOUNCER: Ladies and gentlemen, please welcome Microsoft’s Group Vice President, Platforms, Jim Allchin. (Applause.)

JIM ALLCHIN: We’re going to have a lot of fun in the next two hours. First, we’re going to have a little trip down memory lane. How many of you remember Windows 1.0? How many of you? (Applause.) Well, it’s hard to keep it in perspective, it’s been so long ago. So I went to the company museum and had one shipped down here. Come on over here. I want to make sure you get a good look at this.

Here’s an IBM XT. Can you guys see this? So I have Windows 1.0 on it here. I’m just going to start it up. Look at this thing.

See this hourglass; they didn’t make hardware fast enough back then either.

Now I want to bring up one of the games to give you an idea of the graphics power we had.

So why do I bring this up? Because I want to drive home how far the industry has come, and the second is it’s because of you that Windows has been so successful, and I want to thank you for all the work that you’ve done to make the platform successful. (Applause.) It’s you!

So this is the beginning of the third decade, that’s right, this year is the 20th anniversary for Windows. It’s awe-inspiring growth. During the first six years of Windows 1 through Windows 3, the industry shipped give or take about 30 million PCs. Fast forward to 1995, that year we shipped give or take about 60 million. Think about this: During the first 90 to 120 days after [Windows] Vista ships, we’ll surpass that number of PCs shipped. It’s mind-blowing.

Think about this: Each year about 500 million people go and buy Windows-related devices. That’s massive opportunity for us.

In terms of growth, in terms of just raw numbers, Windows has expanded into all nooks and crannies, if you will. It’s in embedded devices, it’s in all types of laptops, all types of standard PCs, it’s in your living room with the Media Center Edition, it’s in portable media devices, it’s in the phone. It’s amazing the type of progress that we’ve had in that space.

The apps from you, incredible line of business apps, incredible games, incredible communications and incredible entertainment.

Now, whether it was back in the early days of 1985 or whether it’s today, the first movers are the ones who have had the biggest advantage. I want to show you a first mover for Windows Vista. There’s a company, an innovative game company called CryTek, that’s going to have a game that’s going to ship simultaneously with Windows Vista. Now, actually they won’t let me show you the game today, but they will let us show you a video showing some of the power of the platform.

You have to understand that the PC will always be a head of the game consoles in terms of the power just because it’s an extensible platform and can keep evolving.

So we’re going to roll the video in just a minute, and I want you to look at the realism that is possible. I want you to look at the shadows, the light, the way the leaves move in the wind. Can we roll that video?

(Video segment.)

(Applause.)

JIM ALLCHIN: Now, you could think of this as the culmination of the last 20 years or you could be like me that thinks about it as this is just the beginning of the next 20 years.

And that’s what we’re going to talk about today. You’ve seen flashy demos, but for the next two hours we’re going to get a little bit dirtier in bits and bytes. I’m going to talk about the Windows platform and give you an overview, I’m going to talk about the four pillars that I talked about at the last PDC, the same four pillars. We’re going to do a programming lab; that’s right, we’re bringing it back, popular demand by some of the architects to come out and show you code samples. We’re also going to show you real apps, both a sample app and one from an actual company that’s using the [Windows] Vista platform. Lastly, I’m going to talk about the opportunity for you and for Microsoft together.

Windows Vista Timeline

I stood here two years ago in this convention center as we were starting the journey for Windows Vista. Since then, we’ve released two versions of the Media Center, two versions of Tablet, we’ve released the 64-bit client, 64-bit servers, new versions of the server, a massive update of Windows XP SP 2 for our customers, and we’ve shipped Windows Vista Beta 1.

Now at that PDC, I talked about more transparency and we have been following through on that. We gave you the bits in the early alpha stages of “Longhorn” and that feedback was incredibly valuable to us. We’ve also been providing Community Technical Previews, we’ve provided four of them so far. We started back in November where we’re trying to get the bits out to you so you can give us the feedback.

We’re going to continue that today. We’re going to be giving you an intermediate build between beta 1 and beta 2, build number 5219. It’s a build that isn’t beta 2 and it’s got lots of issues in it. Nevertheless, it shows our progress that we’re making, and we’re very proud of the way we’re building the software today.

The PDC is an important milestone for us. We’ve got two more after this before we’re going to be shipping.

Beta 2 will be coming as soon as we feel like we’ve got it in the bag in terms of the basic set of features, and we will go broad with that to a wide variety of customers, and for all the audiences.

We feel very confident about broad availability by the end of 2006. Now, why do we feel that confidence? We feel the confidence because we re-did the way we were building Windows. During the last two years, we completely re-engineered engineering, and maybe in some of these talks around here, and birds of a feather, we can spend time explaining how we did that, because it’s given us more confidence to give out community test previews, and to know that the builds are going to be of quality. And every day we’re cranking out a new build. It gives us the confidence to know that we’re going to be able to hit the end of the year.

Now, everybody talks about the Internet. Most people don’t talk about the things happening around the Internet. Both the Internet and all these fighting around the edge of the network is the backdrop for Windows Vista. The Internet is the thing we all live in, float in, it’s both a destination, but it’s also a pipe, and I don’t think people understand how incredible that pipe is, and what that’s going to mean.

Now, I want to talk about why I think the edge is so exciting. The proof point, first hardware abundance, just think of the power of the CPU. Most smart phones have more power than that machine over there today. Think about this graphics processing unit, incredible power, massive storage, incredible communications bandwidth. How about all the form factors, everything from the living room, nice A/V rack level systems, to game players, and phones that are basically cosmetic accessories, these tablets where we’ve made handwriting the next step in the computing, amazing form factors.

Peer to peer is another change that’s happening in the industry. And I’m not talking about just music, I’m talking about what’s happening in terms of being able to share photos, or doing video calls, or even high performance computing, that’s all about peer-to-peer technology, and that’s happening because the Internet is just a pipe, and the happening area is on the edge.

The user model is also changing. It used to be on the Internet you would just browse around. Then search became the thing. And today, I think it’s more subscriptions, where you’re actually going and getting the information once that you need, and having the information come to you so that you can act on that information, and do the things that you want to do locally. And you will be acting on that information locally, because there’s so much power there. You’re not going to be editing some video, home video, across the Internet, for a very long time.

I also want to point out that even if you’re a destination on the Internet, if you look at what’s happening, those services are spending their time trying to differentiate on the edge, because they want that user interface differentiation. Finally, because there’s so much happening on the edge, it’s also a malicious attack point, and it’s something that we, as the operating system company, and the platform provider, along with you, have to be very knowledgeable of. Now, the Windows platform was designed specifically for this environment. This picture of the Windows platform, covering these four diagrams. Do you remember this? This is the same general picture I showed two years ago.

Now, why are we unique? We’re unique because we have an end-to-end approach to this. All the pillars work together. Other companies may have great solutions in one pillar, but you’re forced to glue together another pillar perhaps from another company. You might have a flashy presentation system from one company, but you have to get a data layer from another. In [Windows] Vista, we’ve got one model, one common architecture, with components to manage presentations, data, and communications all built on a safe and reliable foundation.

Architectural Principles

What I’m going to do is, I’m going to just go the next level down, and just talk about the architectural principles for each of these. First presentation, the goal of this pillar is that we want to provide every piece of technology you need for going from HTML to being smart. We include a deep compositing engine that handles vector 2-D graphics, 3-D images, text, media, all composited together in real time. And, if there’s hardware, we use the hardware assist. Another important thing that we’re doing in this pillar is that you will find the data is usually trapped in fairly ugly tables or grids. We’re trying to unleash that and let you be able to do rich visualizations to do the binding from data, and make apps like never before.

In the data space, the goal of this pillar is to store, manage, access and find data, whether it be local on the network, or on the Internet. Now, this particular pillar had major breakthroughs since the last PDC. And I’m going to talk about that a little bit later. But the gist of it is, we know that it’s important to be able to access HTML objects and relational data in a common way across multiple stores. And we think that we found an innovation to help you do that.

In the communications space, the goal is to allow apps to communicate securely, reliably, whether it’s to devices, or to other people. We’ve made this system, this pillar protocol agnostic, a big change from the last PDC, and based on Internet standards. Now, all the other layers wouldn’t be very interesting if it wasn’t for the base system, and this system we’re trying to do something very, very focused in Windows Vista. It’s probably got more energy in this pillar than any of the others. We’re trying to write better code, and have it better tested. I sort of mentioned that earlier. We’re also focused on isolation, isolation at all levels, whether it be at the network level, or whether it be in terms of the way processes actually operate on the system. Great device management, and with an incredible focus on deployment and servicing. So, that’s at the first level.

Windows Vista Architecture

Now, let’s go deep. You can read this, right? Good, because there’s going to be a test on it at the end of this conference. This slide is available on the MSDN site. It’s also going to be covered in lots of the sessions. I bring it up because I think this will be helpful as you look at this diagram, I also think it’s on comnet, for you to learn the different terms that we’re using here so that you can map them to the sessions. [Windows] Vista, as you can see from this diagram, is a very broad and deep system. We’ve got substantial innovation in each of the pillars and in making them work together. Hundreds of engineers, as Bill said, are here from Microsoft to go deep. And there’s something like 150 sessions on this. So, there’s one other thing I wanted to mention, when you look at this slide, you’ll see that I’ve highlighted the changes since the last PDC. So, we give an idea of the things that we’ve changed and learned from your feedback.

Now, I want to take the next step down again, and I want to talk about the base services. As I said, this is a prime focus area for Windows Vista, hundreds of features, and I have time to only cover a few. Let me talk about deployment and servicing for just a minute. Deployment is a big problem for corporate accounts. They get lots of images that are huge, and they have to have individual images for the different computer environments. What we’ve done is, we’ve created an imaging model so that we can pack images together, and we actually can see what you can see, so the size is much smaller. We also have offline servicing. Another aspect in the deployment is something we call NAPS, or Network Access Protection. That’s the idea that you can take the machine that’s been out in the wild, and bring it into an environment that’s protected, and the system goes into quarantine until it passes a certain set of deployment scripts. We’ve also worked on customer feedback. Customer feedback is the way we have to understand what’s going on. As systems would get in trouble with you, we get that information from Microsoft, and we also share that with you.

For example, some of the information that we have gotten back has shown that some of the problems aren’t our software, aren’t your software. In fact, they’re in the hardware. One of the things we’re doing in the reliability space is, we’re adding hardware diagnostics, along with hardware monitoring to the system. When we start to smell something going on in memory, which may not be ECC’d, we can do something without it. Or we start to smell that the disk is starting to have faults, we can do something about it.

We’re also reducing reboots, we believe, at least by 50 percent in terms of configuration, that’s also something that you should work on, and let me explain why. We’ve added something called a Restart Manager or Reboot Manager in [Windows] Vista, and if you call that, it can help you decide whether or not certain .DLLs  it will shut down certain parts of the system, and keep the rest of the system running, so you can replace certain .DLLs without the system having to reboot.

We’ve also added transacted storage, transacted storage across the registry, across the file system, in fact, we put basically a distributed transaction monitor in the system, and you can read your data store into it, so that you can get one transacted update across all of them.

Let me talk about security for just a minute. There’s a lot of information, and I’ve just got a few features on the slide. One I need to talk about here on the slide is called User Account Protection. I think about it as just running the standard user. That is going to be the default in Windows Vista. We corrected the Windows Vista system so that it can operate in a limited way running the standard user. (Applause.) We need to make sure that your applications also support that, it’s a very key ask that we have of you.

On the performance side, let me just give you a demo of some performance stuff. So, what I have here is a Windows Vista machine, and have you ever had a machine that just seems to get slower over time? (Applause.) Well, we’re trying to do something about it. The first thing is, we’re trying to automatically optimize this system so that you don’t have to. Why are users having to think about defraging the disk, and reoptimizing the way the blocks are on the disk? You don’t have to with Windows Vista. It’s just done automatically. That’s the first thing we’re doing.

The second thing we’re doing is, doing some great innovation, something that we call Superfetch. Now, what Superfetch does is, it enhances the virtual memory system, which typically looks over things like maybe seconds and minutes to decide the best usage of memory. What Superfetch does is look over minutes, days, hours, months, years, and it optimizes the system based on how that system has been used.

The best way to show this is I’m going to come here and I’m going to start a script and this is without Superfetch running. This is just going to go through a set of applications and start them up. This is a 512-megabyte system, it’s probably got half of the memory available for applications and data, and as you can see, this would be like a Windows XP machine that was cold booted, this is what you would expect. It takes a very long time for Outlook to start, because it’s also bringing in DLLs that are also used in some of the other Office applications, and it just sits and reads these in.

Now, if you were to immediately restart this in XP you’d get pretty rich performance, because the virtual memory system will immediately take advantage of the fact that those pages were there. But, what if you rebooted, and it doesn’t matter how long you waited, it would be the same cost of waiting through this whole event sequence again, or what if you went away for lunch and came back, what if you hibernated, in all those cases the system was actually slowing down.

So what I’m going to do now is I’m going to make the system cold again, it’s just going to clear memory, now I’m going to start Superfetch, and I’m going to bring up a monitor that I’ve got here and I want you to just look at the green line here. What’s happening is this system is now pre-fetching all the programs and data that over a long period of time has been used on this machine, and it’s just bringing it into memory. We’ll remember this coming back from hibernate, we’ll remember it on boot and the like. So if you don’t touch you’re machine it’s sitting there optimizing and getting it ready to do the things that you typically do, only do them faster.

So now if I run that same script, let’s just see how performance goes. I didn’t even let Superfetch complete, but you can get an idea. Is this cool or what? (Applause.)

So Superfetch works great if you have a reasonable amount of memory, and it works fantastic if you have boatloads of memory. But, what if you don’t have boatloads of memory? I wonder what you would do then? Well, we thought about that. We said, you know, a lot of people have these USB memory sticks. I wonder if we could take advantage of those, to make them part of the virtual memory system? I just plugged in this USB memory stick, any USB memory stick, and as soon as it recognized it, we just got another 500 megs of memory on this machine. (Applause.)

And as you can see, Superfetch is just taking advantage of all of it. Now you say, what if you pull it out, will we lose data? No, you won’t, because we do write-through. What if I pull it out, can I use it in some other machine and somebody could steal my data? No, you can’t, because we encrypt it. And we actually do 2x encryption, so even on fairly small keys we can take advantage of it. We think this is a great innovation that will make Windows Vista get faster over time, and make it more applicable even on a laptop where you may not be able to add the memory.

I want to move and talk about  (Applause.) I’m going to show you another demo. This time it’s about how we’ve taken applications and been able to run them in low integrity mode. I talked about standard user. And if you have standard user you know that you can’t hurt the operating system and you can’t hurt another user, but you sure could hurt yourself, you could wander around, get some bad information, and it could damage the data on your machine. What we really wanted to do is run certain processes in low integrity mode, so they’re actually sand boxed and protected from the rest of your data. And that’s exactly what we did on Windows Vista.

What I’ve got on this machine, it’s a Windows Vista machine running a VPC, and I’ve got IE here, and what I’m going to do is I’m going to just start IE. And what I just did is I visited an awful, evil Web site, and as you can see it just downloaded a batch file and put it in my start up group. Now, if, in fact, there was a vulnerability in IE, this is a possibility. How about [Windows] Vista? I’m going to bring up the startup group, so you can also see it. I’m just going to go to that same Web page, and if you notice down here it says, create file failed, and in fact, the folder for the startup group is empty. Very simple demo, this is incredibly powerful, because it’s not just IE.

You can create sandboxes around processes so that they can be protected from the rest of your data. We think this is an incredible innovation, it means that even if we don’t, as we all can’t write perfect code, even if we don’t capture all the vulnerabilities, IE is still protected. Your data is still protected. We think this is an incredible innovation. (Applause.)

I would love to spend time, in fact, we had all these other demos. But, because this talk is going to go so long, I’m not going to be able to show them to you. But, if you go to some of the sessions they will be able to show you many of the demos that I wish I had time to show you here. I want to move to the next pillar, which is the presentation pillar.

Presentation Challenges

There are many challenges at this layer of the system. Our goal is for you to be able to write faster applications, make it easier for you to write. We want to improve the usability for the user, through incredible new look and feel. We want you to be able to stand out in the way you do your applications. We want to help you target different form factor devices. We want to give you facilities to do rich, along with smartness, and we want to integrate designers into the process.

There are an amazing number of expectations that customers have today. Now, Microsoft pioneered some of the best techniques for doing some of the current, state-of-the-art Web systems today. You can look at Outlook Web Access and see how much better that is, and how Hotmail is. Hotmail is going to be changed to use the same technology. But, you can get a contrast here between doing incredible things in terms of DHTML and just doing the standard things.

The next level up, people have tried to create rich islands by flopping down Active X controls and within that island it’s pretty cool, but it doesn’t interface with the rest of your app, or the rest of your page. In the smartclient space we have lots of innovations that we’ve been working on through the years, whether they be in Win Forms, Direct X, Win 32, and all the great stuff in Office. That’s the world the way it is today. We know that we can do better, and we are going to do that in [Windows] Vista.

Introducing “Atlas”

One of the things that I wanted to talk to you today about is something called “Atlas.” Today most browsers support DHTML, JavaScript, and HML HTTP. And many cool Web sites are now using those. Generally people talk about this as “Ajax” technology, synchronous JavaScript and XML. What it shows to me is a demand for richer experiences. If you have done any of this code today you know it’s pretty hard. You have to be an expert in DHTML and JavaScript. You’d better understand all the differences in all the different browsers, and there are subtle differences. You’d better be good with some tools, because the tools aren’t as great as they could be, and debugging is, frankly, pretty hard.

So what we’re trying to do is create a framework, an extension of ASP.NET, that will let you build rich Web experiences without the pain that you’re currently going through doing this client-side scripting. So we’re providing this client framework that runs in any DHTML compatible browser, and it’s deeply integrated in with the familiar tools that you’re already used to. And you’ll see a demonstration of that in just a minute.

Now, the Windows presentation-layer foundation is a piece of software that’s composed of two pieces, an engine and a framework. Now, we think we are light years ahead of everybody in this space. In the engine, we have a single runtime that can be browser-based, forms-based, graphic, video, audio, documents, all composited together in real time as I said before. Now, what does this mean to you? And I’m not talking about just the desktop, I’m talking about your app. Have you ever tried your apps on a high DPI monitor? Does it look good? If you’ve written into the engine and using this technology, you don’t have to think about high DPI monitors anymore, because we do the work for you. It’s not special DPIs you have to use, it just happens automatically.

The other piece of the Windows Presentation Foundation, and as Bill said, this used to be called “Avalon,” this framework, it’s an extensible environment where you can sub-class the controls that we provide, or you can write brand new controls. You can use a declarative mark-up language called XAML, or you can use a procedural language, and we can do the rest for you.

Now, wouldn’t it be nice to have a subset of this on devices so you could target them, or how about other systems? Well, we’ve been asked, and we’re introducing something called WPF/E, the Windows Presentation Foundation/ Everywhere. Now, this is very early work, but the concept is that we’re going to create an interactive experience on devices and the PC. It’s a strict subset of the Windows Presentation Foundation. It’s a lightweight download. The programming model is XAML, but instead of procedures like C#, we’re going to use JavaScript. You have access to all the WPF tooling that you current have. And this is something that we’re going to be able to start providing your feedback to us, basically now, and I think the best thing to do, to just sort of wrap together all of this sort of pillar is to see a demo.

Before I show you the demo, I’m going to show you how this all looks when you bring pieces together. We think that we have taken each of the areas that we were a little bit weak in before and expanded beyond anything anyone else in the industry has done. Let’s look at all the pieces together with a demo. I’d like to invite out Darryn Dieken to walk through a demo.

Hey, Darren.

DARRYN DIEKEN: Thanks, Jim. (Applause.)

Jim, I know you love movies.

JIM ALLCHIN: I do.

DARRYN DIEKEN: And I know you use the Netflix online service to order them. It’s a great service that many of the people in the audience use. There are a couple of things. We’ve been working with them over the last few weeks, along with their Web site design partner Resonate, to build a [Windows Vista]-exploitive application using some of the technologies that you’ve just talked about. There were really three things we were trying to accomplish with the application. First we have to create a much more compelling user experience, that’s more usable and more interactive than what you could do today with the existing technologies on the Web. The second thing is to use software as a way to differentiate the software that they create and the experience they have from their competition. And the third thing is, being a media company, they want to run on a wide variety of devices.

So what we’ve done is we’ve created a Netflix application using Windows Presentation Foundation that runs on a PC, a Tablet, on a Media Center, as well as on a cell phone. So let’s take a look.

The first thing you’ll see here is this is a WPF application. Netflix exposes all of their data using RSS feeds. So what we’ve done is we’ve used WPF to create rich data visualization of the services, and to visualize that during this application. You’ll notice across the top here we have a list of recommended videos that they have, a Top-10 list  a Top 100. I can scroll through this list and see different information. There’s the recommended list, things like that.

Let’s take a look at one of these. As I hover over I can get more information on these, and you’ll see some nice little animations there. I have a synopsis that tells me a little bit about the movie. I can get more information on the cast. I can even go and see a review on that, using the community of Netflix users that are out there. Again, all this data is coming in over an RSS feed. So a highly rated movie, let’s add this to our queue.

Here’s another one, “Mad Hot Ballroom,” it looks sort of like a good one. What do you think?

JIM ALLCHIN: That sort of fits with the music you started off with.

DARRYN DIEKEN: That’s right. Let’s take a look, here’s a new menu item called preview. I click on that, directly within the application I’m able to view high quality video. You’ll notice here I can still navigate to the other menu items, see different information, go to the preview. I can control the video directly inline here. Let’s add that one to our queue, as well.

I’m a huge “Sopranos” fan, and this weekend I was thinking about adding some of these. So I’m just going to go here and add a couple of these videos. Here’s another one, I see, one more. I love those animations, don’t you? I could just keep adding them all day long.

JIM ALLCHIN: What’s this at the top?

DARRYN DIEKEN: So I add another one here just for fun. The thing across the top is called the accordion view. When I have movies in my queue I’ll generally have 80 to 100 items in there, which makes it hard to visualize all those on one page. So what we’ve done is we’ve created this accordion view, which allows me to expand and contract all these things using the 3-D capabilities of “Avalon,” and I can see everything within my queue. You’ll also notice I have an expand tab so that if I want to see a bigger picture of what my queue looks like and reorder some of those things I’m able to do that.

We all just saw “Napoleon Dynamite” in Vale, so why don’t we move that one to the back. So we can move that one back here and I’ll scroll through here a little bit. Those “Sopranos” movies that we just stuck into our queue, why don’t we click on those and move those to the front of the queue. So just by simply clicking a couple of buttons here, I’m able to simply manage the movies in my queue. And you’ll notice here up in the accordion view the view has been updated.

One last thing on this, on this application, you’ll notice here, based on the items in my queue, Netflix is making recommendations for me. So right here it’s using additional screen real estate to give me suggestions on other movies that are available. A pretty cool application.

JIM ALLCHIN: Super cool. (Applause.)

DARRYN DIEKEN: So why don’t we take a look at it now  thank you. Why don’t we go to a Tablet and take a look at what this application will look like on a Tablet. You’ll notice here that  is it on the screen? Not yet.

So what you’ll notice here is it’s the same application that we had before. This is running on a new Gateway Tablet using a widescreen display. And the nice thing about Windows Presentation Foundation is it’s able to use the screen real estate that’s available with very little developer coding. So in this case, WPF has automatically relaid out the images of the videos to take advantage of that screen real estate, and you’ll notice here I can use a stylus, a very simple stylus as my input mechanism.

So here I can click on some of these and get more information, just like I did in the other application. I can see the synopsis, I can see the rating, and I can even add that to my queue.

And you notice the other thing I want to be able to do is to use this stylus on this cool accordion view up here, and so as I hover over this thing I’m able to just with a simple stylus navigate that particular accordion view.

So it’s pretty cool, huh?

JIM ALLCHIN: That’s great. How about on devices?

DARRYN DIEKEN: Well, there’s one more thing.

JIM ALLCHIN: Oh, how about the Media Center?

DARRYN DIEKEN: Exactly. How do you like my new big-screen Media Center back here?

JIM ALLCHIN: Is this yours?

DARRYN DIEKEN: Why don’t we project this up here? What do you think?

JIM ALLCHIN: OK.

DARRYN DIEKEN: Yeah, how would you like to have one of these in your home? I would.

JIM ALLCHIN: That’s why the power went down yesterday.

DARRYN DIEKEN: That’s right. (Laughter.)

So what you’re going to see in here is we’re running that same application running on the Windows Media Center Edition. So let me navigate down to more programs and you’ll see the Netflix application on the menu there. So I’ll click on that and launch the application.

You’ll notice it’s a very similar user experience. Across the top I have my recommended list, I could scroll over to the top 100 again, I can scroll through all the list of videos down here. I’m going to go back to my recommended list.

There are a couple things that developers need to think about when they’re targeting the Media Center. First of all, they need to be able to use a remote control to navigate, which means all the menu functions need to be simply available using up, down, left, right, and the okay button. The input device is automatically handled by the Windows Presentation Foundation, so developers just need to write a little bit of code to make those menu items and functions easily accessible.

The second thing is everything needs to be very big and bold, because you’ll be sitting in your recliner watching a video, and you’re ten feet away or so, you want those icons and the menus and everything to be big and bold. With Windows Presentation Foundation you’re able to scale that user interface up very easily with just a small amount of code to optimize it for the Media Center.

And finally, you want the focus to be in the middle so the user can easily see what they need to do in order to work with that application.

So using Windows Presentation Foundation it’s very easy to create this. The other thing, Netflix is a media application, so obviously you want to watch a video on here. So let’s watch a trailer of this particular video here. You’ll see inline in the application I’m able to simply get that video, that live trailer within the context of my application and see it, so Netflix can control the branding and everything of their apps.

So let’s close this out and we have one last thing to show, Jim, and that is I talked about devices a little bit.

And so here we have a very cool new (IM8 Jastar ?) device. It’s a 500-megahertz processor, has two cameras, it has the integrated keyboard, the screen swivels around, I can use the stylus to navigate it, a very cool device.

And so we’ve created a version of Netflix, in this case using the .NET Compact Framework, which is available today. In the future you’ll be able to use the new WPFE technology to make it even richer to run on this particular device.

So let’s take a quick look here, let’s pull out the stylus. So in this case I have the same application, I’m able to navigate back and forth with it, and I can click on this details page and see the same details that were available in all these other experiences. And I’m even able to view a rich preview directly inline in that particular application, it’s being streamed down over the Internet.

JIM ALLCHIN: Is this cool or what? (Applause.)

DARRYN DIEKEN: Not bad, huh?

There is one last thing before I leave that I think is the most cool thing about this entire demo. The folks I talked about from Resonate, about a month ago we approached them and said, hey, we have this opportunity, we want to partner with Netflix, how would you like to help us out. With three developers and one graphic designer, they were able to create the Netflix application that runs on the PC, that runs on the Tablet, that runs on the Media Center, and that runs on this device; in one month with three developers. That’s pretty incredible. (Applause.)

So with that, I’ll turn it back to you.

JIM ALLCHIN: All right, thanks.

You know, when we were preparing for this conference, the team came to me and said, hey, we’ve got this really cool device. And they showed it to me and they said, I think a lot of people at the PDC might like this device. And they said, but it’s greater than a thousand dollars retail. And they said, can you help me out.

So together with partners we’re making this available for the people here at this conference in a limited supply for the low price of 149. And you can go to the comnet and get in line for the limited supply.

It’s hard to do this with a straight face: But wait, there’s more! (Laughter.) For the first 250 people, you can get a Plantronix 320 Bluetooth headset for this, for only — guess how much — 9.95. So we are trying to help you out and, of course, everything about this device is being covered in some of the sessions here, so you can go to the breakouts and learn how to program this device.

So don’t rush out right now and try to get this, just connect onto comnet and they’ll explain how you can go ahead and get this.

Data Challenges

I want to move to the data pillar. I said earlier this is the biggest area of innovation since the last PDC. I want to read the challenges here, because we’ve updated them some. How do I find and update information across different stores? How can I subscribe to the information I want? How can you use and expose the metadata scheme easily? And how can I share information with others?

Our conclusion with your feedback and some of the work that we’ve done is that a single store isn’t enough, and that many stores are going to be the reality. We know that WinFS has innovations that not other store has or will have, but we also know that you need both the access to and updating capability to multiple stores. We are approaching this by addressing the impedance mismatch between the programming languages and the data. We also conclude that subscriptions are fundamental, along with sharing.

So what are we doing about it? First, we’ve created a uniform programming model called LINQ, the Language Integrated Query, that we’re going to demonstrate in just a few minutes.

What we do is we’re integrating data operators directly into the language and these operators work across whether it be objects, XML or relational. You can get early drops of this at this conference.

The second thing we’re doing is we’re continuing to invest in search and organization technology. In Windows Vista you can search locally, you can search across your intranet or you can search on the Internet. We do this across multiple data types, whether it be mail or whether it be documents of another form. And we’ve made search such that you can produce the metadata or so that you can use the search functionality directly in your application.

As Chris demonstrated earlier, we’ve built a rich RSS platform for subscriptions directly in Windows Vista. It’s a single store for the applications, so it’s a real platform, its not some simple app, so you can do your own RSS work, and you get all the benefits of the indexing technology that’s built-in.

Now, WinFS is still under construction, you get bits on the DVDs that we’re going to give out today. We would like feedback on WinFS to know if we’re still on the right track. We think we are, we want that feedback.

Communications Challenges

So I want to move on to the communications pillar. How can I write one program that talks to everything? How can I manage identity and access between applications? How do I make it work across a peer-to-peer network? How do I create applications that cross trust boundaries, and how do I share reliable and secure connections? Net-net how can I write one app that’s going to talk to everything in a polymorphic way? And that’s what we have been doing in the Windows Communication Foundation. It’s a unified communications platform for writing distributed apps.

Now, we’ve made great innovation based on your feedback in this particular pillar. We’ve greatly simplified, we’ve unified the concepts of transport and channels, we’ve integrated port into the concept of channels, we’ve made the system protocol agnostic. Last PDC we were talking about WS-Star only, now we’ve integrated REST/POX, and MSMQ.

We’ve also integrated peer-to-peer directly in the system, and because identification if such a big problem, we’ve created a new federated ID model that we call InfoCard.

Now, what are InfoCards? Now, we’ve been this path before, but it’s done totally different this time, we’ve learned an awful lot. We’ve learned that you want open standards, you want anyone to be able to develop their own implementations so that there can be lots of different ID authorities.

So basically what we have is an abstraction layer that covers different ID providers with a common dialogue that hides those differences to users. So all you have to do is write a couple of APIs, write to a couple of APIs and you get identity independence easily.

Now, I’ve been talking about communications, so I want to show you a quick peer-to-peer app before we start the lab.

Now, if you’ve ever been in a coffee shop where you wanted to share with another person there, perhaps in a different company so there’s no common infrastructure between you, or been in a conference room where you have a vendor in and you want to share, say, a PowerPoint; well, we have a new technology called People Near Me that’s the basis for the communications of PeerNet that we have in Windows Vista.

So what I think I’d like to do is have Darryn Dieken come back out and help me demonstrate an experience, which we’re including in Windows Vista. The main reason to show this experience isn’t specifically about the experience, but to show you the type of apps that you could build yourself.

So I’m going to bring up this Windows collaboration experience, I’m going to start a new session here, I’ll call it PDC.

DARRYN DIEKEN: I’ve already logged on, on my machine here, Jim.

JIM ALLCHIN: OK, great.

And I’m going to type a password and I’m going to start this session.

So what’s happening now is it’s searching, it’s creating that session, and you should be getting a popup momentarily.

DARRYN DIEKEN: So what this is doing is over the peer-to-peer network sending an invitation to me, and allowing me to subscribe to that session that you just created, right?

JIM ALLCHIN: So I’ve got Darryl here, just found him.

DARRYN DIEKEN: Yeah, there I go.

JIM ALLCHIN: I’m going to send him an invitation.

DARRYN DIEKEN: I’m going to accept it here, I’m joining the session.

JIM ALLCHIN: So now he’s accepted, I can see it on my screen.

What I’m going to do is I want to project this PowerPoint presentation, so I’m just going to drop it into the session. And as you can see, he can see it on his screen. And if I go in to project mode, he can see it. And, in fact, any of the people that are created in this PeerNet environment could see that same presentation. And I could walk through the presentation here, and he could look at it.

Do you think this presentation is right?

DARRYN DIEKEN: I don’t think so. I think we need to make one quick change to this, based on some data.

JIM ALLCHIN: OK, let me send you over the PowerPoint.

DARRYN DIEKEN: OK, so peer-to-peer it’s just sending that file over. I see it over here in my handout section, so I’m going to double-click on that, and it’s going to open up PowerPoint in here.

We’ve gotten a little over budget here, so I think we need to change the title of this presentation real quick to the lab over budget plan. I’m going to save this and using the file replication services in Windows Vista it will take that file and replicate those changes back to you, so you should be able to open it back on your desktop now.

JIM ALLCHIN: And there’s the over budget.

CHARLES FITZGERALD: You’ll be able to see it.

JIM ALLCHIN: That’s cool. Thank you very much. (Applause.)

The important thing on this particular demonstration is not the particular experience, which we haven’t completed yet for Windows Vista, but it’s to think about how you and your application could take advantage of it. This is very, very cool underpinnings. It uses IPV6, so it makes it through lots of NAPS and firewalls. It uses the file replication capability and it creates a PeerNet. Even if you don’t have an infrastructure node in wireless, it will automatically put the system in an ad hoc mode, and you can just use it through some simple APIs.

OK, how about some code? I’ve asked four architects to come out, and during the next 40 minutes walk through each of the pillars. So I’ve got Don, Anders, Scott and Chris. They’re going to touch on all these different areas that I’ve been talking about in Vista.

Don? (Applause.)

DON BOX: Thank you, Jim! Thank you, Jim. I’ve got an itch, I’ve got to write some code, I’ve got ants in my pants and I need to code.

So just to tell you quickly what we’re going to do, on the data front we’re going to look at having a single programming model for query and transformation over any kind of information source; we call that LINQ. On the communications front we’re going to see that we’ve got a single programming model for hooking software and applications, be they Web applications, enterprise applications, any kind of application; we call that Indigo. And on the presentation side we’re going to see a programming model that spans all kinds of devices and embraces, in fact celebrates the distinction between the programmer and the designer/artiste.

So without further ado, I’d like to bring out my good friend Anders Hejlsberg to tell you about LINQ. (Cheers, applause.)

ANDERS HEJLSBERG: Thank you, Don. Thank you.

OK, before I get started, I want to ask you one question. In your application, how many of you access data? (Laughter.) I know, it’s sort of a stupid question, but what I take away from that, seeing your hands and that laughter is that when you’re writing your data applications in C# or VB, you’re not just having to master C# and VB, you’re having to also probably master SQL and master the APIs that bind these two world together.

And this isn’t always the easiest of programming experiences. In fact, I often have, all too often have programmers tell me that they feel more like plumbers than programmers when writing data intensive apps.

Now, what we’re doing here with Project LINQ is that we are taking the concepts of query, step operations, and transformation, and we’re making them first class in the .NET platform and in the .NET programming languages. Rich query that you could previously only write in SQL or in XQuery, you can now write in C# or VB, going against any kind of data source, be it objects, relational or XML. (Applause.)

Thank you.

Don has on his box here installed a tech preview of the LINQ project that we are handing out on DVDs after this keynote session, so you can go install and experiment with it yourself, and we’re going to start some code here and write a little project.

We’re going to try first to query some in-memory data. The ground rule with LINQ really is that you can query any .NET array or collection. If it implements I numerable of T, you can query it. In fact, if you can “for each” it, you can query it.

So we’re going to try and just query some in-memory array. So we’re going to include system.diagnostic, and then we’re going to call process.getprocesses to get ourselves an array of processes. And then we’re going to write a query, so we’re going to say “from P in process.getprocesses”, and let’s say we were only interested in those processes that have a working set of more than 4 megabytes, so we’re going to say “where P.workingset is greater than 4 megabytes” and from that — well, Don is not very good with hex here. And from that we’re going to select out the process name and the working set.

DON BOX: So we don’t have to get all of that information, we just pull out the piece we want.

ANDERS HEJLSBERG: Just the pieces that we’re interested in.

Now, in this query you’re seeing a whole host of new language features that I’m not going to get into right now, but that we will cover in the talks that come later.

Now, the result of this query is itself something that can be enumerated, so let’s write a “For Each” loop and see what the result of the query is. So for each item in the query, let’s console.writeline, and Don will do a bit of formatting code here.

DON BOX: Would you like to help me with this, since you are the only person on the planet who knows all the formatting codes?

ANDERS HEJLSBERG: I’ll do it. Zero, minus 30.

DON BOX: Yes, very intuitive.

ANDERS HEJLSBERG: It’s very intuitive. (Laughter.)

DON BOX: Do you put this on your resume, Anders?

ANDERS HEJLSBERG: And then one comma 10.

DON BOX: But not minus 10.

ANDERS HEJLSBERG: Colon.

DON BOX: Colon? NN0?

ANDERS HEJLSBERG: N0, let’s do N0. How many of you know what that is?

DON BOX: It will be on the test, please remember it.

ANDERS HEJLSBERG: And then we’re going to print out then process name and the working set.

So let’s try and run, and here we see the result of our query. (Applause.) Thank you. Processes, working set.

Now, one thing we notice here is that this stuff isn’t ordered by anything, so why don’t we add an order by clause to our query. There we go. No, no, order by. And let’s order it by P.workingset descending, so let’s get all of the memory hogs first, and let’s try and run the query now.

DON BOX: And, you know, I’m curious, Anders, what if I scroll to the top of the list will I find here? (Laughter.) Emacs would have been even higher. (Laughter.)

ANDERS HEJLSBERG: Moving right along, LINQ isn’t just about querying in-memory data, it is also about querying relational and XML data. In fact, as part of LINQ, we’re introducing a new API called (DLINQ ?) that gives you Language Integrated Query for relational data and allows you to map tables and databases onto classes and objects in C# and VB.

The first thing we’re going to do is just go to SQL analyzer and look at a little table that we have in a database here. We have a table called process description that contains two columns, process name and description. So basically we have a bunch of descriptions, keyed by their process name.

Now, in order to access this data in our program, we’re going to declare two classes that map the data into the object world. The first class we’re going to write is a process description class that has two fields, process name and description. These could have been properties. And then we have some CLR metadata that maps these fields onto columns in the database and finally we have a piece of metadata that maps the class itself onto a table name in the database.

Now, the second class we write is a class that represents the database itself. It’s a strongly typed representation of the database, and in here we simply declare one instance variable representing the process descriptions table and then an attribute that maps it onto the database.

And that’s all we need to do. Now we can access the database as objects. So we’re going to create a new instance of the process description database, and this really think of it as a strongly typed connection to the database.

And let’s just see that we actually have the data, so let’s write a “For Each” loop where we just say “for each item in DB.processdescription” and you see we get statement completion on our database here, everything, and now we can just “console.writeline” the contents of the table, and “item.description”, so write out process name and description.

And let’s try and run that. Let’s scroll back. So at the top here — well, why don’t you put a read line in there just so we can see what’s what here? There we go, just pause right there.

So here we see this very same table, but now we’re accessing it directly in C#.

Now, the next thing we’re going to do now is we’re going to actually join these two pieces of information, the in-memory array, and the data from the database. So we’re going to modify our original query, and we’re going to select out one additional column called description, and the value of that column or that field rather we want to be a nested query. So we’re going to say “from D in process descriptions”, our database table, “where D.processname = P.processname,” so join on the process name, “select out the description”. And then finally, we’re going to call first our default on the result of this query to just get the first that we get back or null if there wasn’t any entry.

And let’s run it and see what happens. Oops, one thing, of course, we need to do is we need to go modify our “console.writeline” and also get rid of the read line. I got you a little worried there.

DON BOX: My heart rate was up a little bit, thank you, Anders, yes.

ANDERS HEJLSBERG: There we go. Let’s try and run it. And here we now see a join of these two, of in-memory data with data in the database. (Applause.) Thank you.

DON BOX: So to paraphrase our group vice president, now what would you pay? (Laughter.)

ANDERS HEJLSBERG: Well, actually let’s just pause a little bit and think about what you would have had to write here previously. You would have had to open a connection to the database, new up a SQL command, new up parameter objects, put all of that stuff together, right, and SQL query and strings without IntelliSense or statement completion, pray that it works, do I have it shipped over, get a data reader back, sit and iterate in a loop and manually cast all the data to the appropriate data type. So there is a lot of stuff that just is plumbing work that we’re now doing for you automatically.

Now, the last thing I want to show here is how we can turn the result of this query into XML.

Part of the LINQ project is an API called XLINQ that effectively is a Language Integrated Query enabled object model for XML. Think of it as a modernized DOM.

Now, a key cool feature of XLINQ is the ability to do functional construction of XML, that’s what we’ll do here. So we’re going to new up an XML element, and actually what better format to put this XML into than RSS form. So we’re going to new an element with the tag name RSS. And one of the things we can do with XLINQ is that we can specify the contents of the XML element as part of its construction. So here we’re adding an attribute to the element and then we’re adding a nested element called title with the text process description. And then actually we need channel in here.

DON BOX: Yes, we do. Thank you.

ANDERS HEJLSBERG: Don will add a channel up there.

DON BOX: Good to know I’ve got schema cop in the room.

ANDERS HEJLSBERG: Channel and then open. There we go.

And then inside channel we want title and process description.

And now what we want now in our document is a list of all of the items in the query, so we’re going to write a nested query here from P in query, the query we have just above, select new X element. So for each item in the query create a new X element called item containing sub element title containing the process name and description containing the description.

Now let’s close off some parens.

DON BOX: I want that to look beautiful.

ANDERS HEJLSBERG: There you go, one more.

Okay, and now the final thing we’re just going to do is console.writeline the XML, why shouldn’t we just be able to in the two string method get XML out of an XML object. There we go.

Let’s run it and let’s see what happens. Boom, now we have the result of our query as XML. (Applause.) Let’s go to the top and you can see that we basically get RSS version 2.0 channel, title, and then a bunch of items that were converted into XML.

So that’s a very, very quick look at the LINQ project. If this sort of got your curiosity up, go to our track lounge, get a whitepaper on the LINQ project, and also come see my in depth talk on this tomorrow at 1:45.

Thank you very much. (Applause.)

DON BOX: Thank you, Anders.

What do you think? It’s OK? (Applause.) Keep going? All right.

So we’ve seen LINQ. Next I’m going to do a talk about how we’re going to take this program, which just runs inside of a single little app domain, and make it span the Internet, make it span the enterprise, make it accessible to all kinds of other programs.

To help me out on this, I’d like to bring back my partner in crime, Mr. Chris Anderson. Please give it up for Chris. (Applause.) Thank you, Chris.

So “Indigo” at its heart is a messaging system, and so what we’re going to do is take the code that we just wrote, and instead of spewing the XML to the console, what we’re going to do is take that XML and turn it into a message.

So to prepare for doing this, what I’d like you to do is go up and define a new class for the top level of the name space, call it public class lab service, and simply have one method, have it return and have it be public, have it return a message, message is a type that’s built into Indigo, and call it handle message, and have it take one parameter, which is a message.

Now, for this to compile, we’re going to need to bring in the DLLs that we use in “Indigo.” So could you go to add reference and bring in system.servicemodel, system.runtime.serialization, which are the two DLLs that we use to build “Indigo,” and we’re also going to bring in a couple of glue DLLs, because we’re going to show how this stuff integrates with both LINQ and with “Atlas.” That stuff obviously isn’t in the bits that you’ve got, it’s some experimental stuff that maybe we’ll see crash on the screen again.

So let’s go ahead and just add ref those things. This should now if you add system.servicemodel to the name space, which I’m sure you’ve already done.

CHRIS ANDERSON: Using the great refactoring support in Visual Studio 2005.

DON BOX: Good product pitch, good for you, Chris. You’ve got a career in marketing coming, I can feel it, baby.

CHRIS ANDERSON: I’m working on it.

DON BOX: So what I’d like you to do, Chris, is go grab main, take main, remove the entire contents of main from main and keep it in some place — here’s your creative window, paste it wherever you would like, Chris.

CHRIS ANDERSON: Okay.

DON BOX:  Good choice.  Now, that console.writeline, that’s so 1980s.  We’ve got to get rid of that thing.

CHRIS ANDERSON:  Gone.

DON BOX:  What we’re going to do now is we’ve got some glue code to integrate the XLINQ stuff with Indigo.  I’d like you to go grab those glue files out of the snippets directory.  We will be shipping these on our blogs, whatever, you can see the code, there’s not much there, we just haven’t done all the integration in the products yet.

 So what I’d like you to do now is cause up a new message.  So to do that, I’d like you to say “return xmessage.newmessage”. Messages have two things, they have an action, which is just the S identifier, pick a URI, please go nuts. That’s a wonderful one.

CHRIS ANDERSON: I’m creative today.

DON BOX: Secondly, put the XML in the message. Lovely. We now have an Indigo service. We’re done writing the service code.

CHRIS ANDERSON: Not very exciting yet. It’s very dull.

DON BOX: What we need to do is, “Indigo,” at its heart, is all about making two pieces of software work together. And the way we reason about how software work together is using these things called contracts. So, we need to write a contract really quickly to describe that thing we just did. So, if we can define what we call on the “Indigo” team the universal contract, this would be  you’re a very fast typist, Chris. You’ve got all kinds of skills. So, this contract basically says, I take any kind of message, and I’ll give you any kind of message. So, this describes the universe of all possible applications. Why don’t you go ahead and implement that sucker, and now we’re done. Our code is complete. We’ve got a piece of CLR code that now can talk any kind of protocol, integrate with any kind of program.

To make it exposed to the world, we need some end points. The way get end points is by creating a server, go down into main.

CHRIS ANDERSON: In main.

DON BOX: What I would like to do is bring in the hosting code that allow us to take a CLR class that implements a service contract, and spew it out to the world. In this case, what we’re going to do is say, make a service host, have it assigned to a CLR pipe, and we’re going to have an end point with a basic HTTP binding, this is 1.1 HTTP, very vanilla, put an address that you feel comfortable with, and we’re going to bind it to the contract. In Indigo, end points are addresses, which are the names of the end points; bindings, which are details of how the protocol works; and contracts which describe the interaction. If you’ve got an end point, why don’t you put a little writeline.readline action at the bottom. And start your engines, so to speak.

Now, at the last PDC, we showed you an Indigo that embraced XML, it embraced SOAP, and it used HTTP. And one thing we heard from the community since the last time we were here is, I need more access to the HTTPness of my applications. So, to get the HTTP integrated into my program, we’ve done some work in the basic HTTP transport channel to allow full access to the richness of HTTP. So, if you’re writing HTTP GAD, and you want to have URLs, that works. If you want to write a full RESTifarian app, you’re in there.

So, what we’re going to do now is surf to our page using the browser, and then a little bit of a problem. A little bit of a problem, if something happens, what if you do a view source. Ah, so we supported HTTP GAD out of the box, that worked great. The problem is, the basic assumption of SOAP is, we don’t know what you’re going to do, so we have this accessibility model with headers. If all you’re doing is simple data transfer over HTTP, and you don’t want the SOAP, we have the ability to rinse it off prior to leaving the app domain.

So, Chris, would you go back to the program, and where it says “basic HTTP binding” will you change it to “pox binding”. Pox binding is a little piece of code written by my good friend Doug Purdy that basically rinses the SOAP as the messages go out, and lathers them up as they come back in. So, a reality test, open the program model.

Let’s go ahead and run that thing now, and now if you hit refresh. Good job, it’s beautiful. Can you do that well in “Avalon”?

CHRIS ANDERSON: We’re working on it.

DON BOX: I thought so. That’s great, I love that. Cool.

So, we saw that writing an “Indigo” service is pretty simple. You write a piece of CLR code, you write a contract, you wire it up, and you’re done.

Now, I know that we’re going to do some integration with my code and this code that we’ve been writing later on with both you and Mr. Guthrie.

CHRIS ANDERSON: Yes.

DON BOX: That’s because we’re architects. We did very contract first development, so we sat around and wrote a WSDL file, and got all  

CHRIS ANDERSON: Have a few drinks, you write WSDL.

DON BOX: So, why don’t you bring in, we took the WSDL file we wrote and ran the service user tool on it, to bring in the contract definition into a way we can program with. And there’s a contract called LAP contract. What I’d like you to do is go up to our service and implement it.

So, we’ve got that contract in the list. There’s a couple of methods which are variations on the ones we’ve written already. The difference is, instead of producing unbounded XML, these adhere to a stricter schema, and we actually use the data contract system to make the schema integrate with our programming language. Let’s go ahead and inject. We have get processes, which just does a query, exceedingly similar to the one Anderson and I just worked on. And then we have a second function called match processes, which does the same thing, except it takes a regular expression as an argument, and narrows the scope of the processes I’m getting to only the ones whose names match the pattern.

So, we’ve got our contract. Now, I know Scott is just itching to come out here, and show us how to write a client program. But, here’s the issue, Scott’s program, his programs run in the browser. Scott works on ASP.NET, he works on “Atlas.” A Web browser is a great thin, but we want to be able to integrate them with this service-oriented world that we live in with “Indigo.” We have a little problem, you know that term you hear “Ajax,” Asynchronous JavaScript XML. Well, it’s a little bit of a misnomer. One of the problems we’ve got is not every Web browser has XML support. Internet Explorer does, other browsers do, other browsers don’t. The HTML JavaScript community that were so inspired at PDC ’97 when we showed then IE 4 and IE 5, and now have embraced that lifestyle, have coined this new protocol called JSON, which is the JavaScript Object Notation, it’s an alternative representation that many of the AJAX apps use to communicate between the relatively impoverished environments of the browser and JavaScript, and the backend which might be anything.

So, it turns out that my good friend Steve Maine wrote this lovely binding for us, which is part of our machine here, which allows us to serve up end points using the JSON protocol. What I would like to do is go to the app.config file. Most of the time, by the way, let me be clear, we programmatically added the end point just to get ourselves bootstrapped. Indigo assumes that you can do whatever you want, but we assume the default usage is the contract and the code are in the .DLL. The end-point addressing and protocol information is in the configuration system. We have to demonstrate that principle here by bringing in a service configuration element.

What Chris is going to do is bring in a service configuration element, that’s not it, Chris.

CHRIS ANDERSON: Uh-oh.

DON BOX: That’s the one thing I hate hearing in these, much better. Would you like to change that to the last service.

CHRIS ANDERSON: It’s much better.

DON BOX: We’ve got LAP Service, we’ve got the LAP Contract, this is that WSDL-based contract that we talked about before, the binding is the JSON binding that Steve Main wrote for us. We’ve got an address, which is demo.JSON. That’s it. So, we’ve now got a fully enabled DHTML JavaScript extravaganza. I can’t think of anyone more qualified to write the client for this thing than our good friend Scott Guthrie. Come on out. (applause.)

SCOTT GUTHRIE: What we’ve shown here is how you can go ahead and query for process information using LINQ, and expose it to the Web using the richness of “Indigo” services. What Chris and I are going to go ahead and do over the next two segments is show how you can build a rich UI presentation on top of it. First, using a broad-reach Web client, using new “Atlas” technology, and then, targeting rich Windows clients using Avalon.

So, as Jim mentioned earlier, Atlas is a new framework that we’re releasing that enables developers to more easily build richer “Ajax”-enabled Web apps, specifically Atlas delivers two kind of core components. One is a rich client side library of JavaScripts that you can take advantage of, and provides kind of a rich object-oriented environment to do Comm and “Ajax” and rich UI browser tasks. The second piece then is a set of server side technologies that are integrated within ASP.NET, and kind of basically encapsulates and integrates it in a way that you feels familiar for an ASP.NET developer today.

What we’re going to go ahead and do in this project is just go ahead and import an existing Web project into the solution we’ve been working on, which is a Web project. It’s going to be taking advantage of the new “Atlas” project types that we actually just released on the Web an hour and- a half ago. You can download and use on top of the S 2005 Beta 2 today. Specifically, you’ll see within this project, we have a number of script libraries, which are the Atlas script libraries. And then we also have a page called default asp.x, which we will be working on as we build up our UI.

Right now, this default ASP.x has no server side code at all, and it actually also has no client side code. It’s a pure HTML page.

DON BOX: So, it has no code.

SCOTT GUTHRIE: It has no code. Code free. Basically, you can see here we have a couple of UI elements. We have our text box for searching processes, a button, and then a SAN. So, what we’re going to go ahead and do is call Don’s Web service, we’ll retrieve data and dynamically populate the page. So, to do that, the first thing we’re going to do is actually add the applet core library into our page, and we’re just going to do that using a standard script reference to Atlas Core. This allows us to have our core base class library, if you will, in JavaScript for “Atlas.” And we’re going to go ahead and point at the Web service that Don just built using “Indigo.” And, again, we’re also just going to go ahead and point at it using a script reference. This is logically like an add Web reference today, except in this case here the process is going to be in JavaScript.

Once we have that imported, we’re going to write some client-side script today. Specifically we’re going to write a button click handler, that will fire whenever someone on the client hits the button. Then what we want go to ahead and do inside this button event handler is just get access to the text box value, using the standard document element by ID JavaScript API, and then call into the “Indigo” service proxy that we just imported at the top of our page. The way we’ll do that is by calling “LAPservice.matchprocess, the same method that’s on the server. Passing the parameter and then we’ll pass in one extra thing, which is a pointer to a function to call back to when the data populates on the page. This way we’re not synchronously blocking the browser thread.

Within this completion method then we’re just going to very simply get access to the span element that we have a little bit lower on our page, where we’re going to put the output. Then we’re just going to go ahead and use the results that returned from the server, loop over them, and manually build out the process list that we’ll go ahead and slide into our page.

One of the things you’ll notice as Chris is typing is he’ll be able to actually use a kind of a nice JavaScript object model that mirrors what Don was using on the server to describe process info. I don’t need to manually parse anything or pull anything out. Instead he can just go ahead and say, result set get length, and then results of index name.

DON BOX: Someone says we have an error.

CHRIS ANDERSON: I think we have a test position open for you, sir.

SCOTT GUTHRIE: So do the job and tell us what we did.

DON BOX: No. This is direct code, if you use a Web-service proxy today and you hit it you get back this big document full of WSDL with all these angle brackets and wackiness. And here we passed an argument, we said slash J S and it’s going to return the JavaScript proxy automatically. It is the JavaScript equivalent of question mark WSDL. It is exactly that.

SCOTT GUTHRIE: Thank you for noticing and scaring us.

DON BOX: This is an interactive session.

SCOTT GUTHRIE: We’re doing it on the fly. So the last thing we’re going to do is let’s wire up our event handler to the button, and fingers crossed and we’ll go ahead and run this now. Hit it with the browser, we’re going to go ahead and  again, we’re not doing any post backs, we’re not refreshing the entire page, instead what we basically have is a simple process explorer, type in a little filter query, say all processes that start, have an A in it. Hit search and we get back a list of processes from John’s “Indigo” service on the client. (Applause.)

Pretty easy stuff, let’s go ahead and make this UI a little bit richer. Specifically what I want to go ahead and do is manipulate the UI slightly, so that instead of having just kind of a boring list that we’re going to manually populate with processes on the left we’re going to make it a little bit prettier and templatize it. And I specifically want to implement it to have a master details relationship, so I can go ahead and drag and drop processes on the left hand side, use drag and drop as a metaphor to pull in details on the right hand side about those things. Do it entirely on the client, do all the data binding on the client, not do any post backs to the server.

If you’re doing that today, chances are that’s going to take you a long time to get right, and specifically test and make sure it works in all browsers. The nice thing with “Atlas” is we make it really easy. So what we’re going to go ahead and do to actually help with that is we’re going to go ahead and import our new control here that is built on top of ASMS 2.0. Then encapsulate kind of the “Atlas” runtime. Specifically, we’re going to add the script manager and all this does is, it’s going to keep track of which JavaScripts to pull in, and page in on the fly, that way you’re not downloading all the client libraries that you need to, you only download the ones you need for your particular page. We’re going to go ahead and replace this whole span and the basic span at the bottom of the page with two new controls that we’re going to go ahead and add right now.

Specifically these controls are the “Atlas” list view control, and the “Atlas” item view control. What the list view control does, there’s a template, just right here, though, we can figure out the basic functionality. It provides kind of a core way that we can go ahead and provide kind of a data binding on the client list, that’s templated, and the item view lets me pull up details about an individual item. We use CSS for styling all styles, so we’re deeply embracing CSS as kind of the core way that we customize UI and then integrate nicely with designers.

You can see right here we’ve also then added a behavior, which is going to be a drag/drop behavior. So we’re saying the list view is exposing a data source called process, and the item supports the drag/drop of process data into it. That’s all we need to do.

Last, but not least, we’ll then just go ahead and write some code to populate this. We’re going to do this code on this client. So we’re going to write all these server controls now, expose client side object models you can take advantage of. This results control here, we’re just going to access this .control property and then set the data on it, and pass in the results that we pulled in earlier.

With that, we go ahead and run our page, search again. You’ll notice have a slightly nicer presentation, drag and drop, pull up the details. (Applause.) So obviously this is a very basic UI we’re trying to show, typing everything in front of you. Again, because it’s based on CSS, it’s really easy to go ahead and customize it and make it much richer.

There’s one thing missing, I think, from this app, which is any true, obviously, “Ajax” app has to have a map integrated into it. When Don and Chris’ original idea was, hey, we’re going to show a working set and thread counts, frankly, I couldn’t come up with any realistic scenario how you’d integrate a map on first thought. On second thought I couldn’t come up with a better on either.

So instead, what we decided was, let’s be a little creative. We’re going to go ahead and add into this item view one extra control that’s built into “Atlas” called the Virtual Earth control. So for this scenario we’re just going to map the longitude and latitude of the running processes on our server. It’s a common thing, why not. So now we go ahead, search for processes, where is that last server running, at the PDC. It’s not terribly useful, but it’s pretty darned cool.

So we’ve shown everything so far now with IE 7. So obviously, as Chris covered in Bill’s talk, we’ve had a lot of investments in IE 7, it’s a much, much richer browser, I think a really great browser experience. Obviously, if you’re building a Web app you want it to be available to any type of browser client.

DON BOX: Including IE 6?

SCOTT GUTHRIE: IE 6 included.

DON BOX: IE 5.5?

SCOTT GUTHRIE: We often say that’s cross browser at Microsoft, and it turns out most people don’t really believe that. So we’re going to show it with a different machine. We’re actually going to pull up a Macintosh. This is going to be running using Safari, the built-in browser within the Mac. You’ll notice it has the home page that’s on the HMS site today, where you can actually download the Atlas project library and run it on top of ES 2005 and ES 2.0. What we’re going to do is actually just browse through the page that we built just a little bit earlier. Notice it looks basically the same. Let’s search for processes of type A. It looks kind of the same. Let’s drag/drop, there’s the Virtual Earth, let’s move the Virtual Earth around just to show it’s real. So basically you’re seeing the exact same app, the exact same code, running against our server, it works the same. (Applause.)

So “Atlas” enables you to build cross-browser apps very easily, as you’ve just seen. “Atlas” is also going to go ahead and enable you as a developer to take further advantage of some of the features that are in Windows and the new versions of IE. So specifically you can build new Windows sidebar components using “Atlas,” you’ll also be able to drag and drop “Atlas” controls from within the browser onto the sidebar and dock it persistently within the shell. Last but not least we’re looking at exposing some of the built-in Windows data services, things like a local store for offline data, as well as things like My Photos, and My Calendar, contacts, and provide them in a secure way that browser clients can take advantage of using “Atlas,” nicely integrate your overall experience and give a really great developer story.

So I hope you enjoy “Atlas.”

CHRIS ANDERSON: Excellent, all right. (Applause.) So I love the Web, but I also love “Avalon.” I think that is its real name, whatever the slide may show you. “Avalon.” So I’d like to build a smart client, built on top of “Avalon.” What we need to do first is unlike the simple Web platform that we’re able to target now, we understand in the client a richer set of protocols. So what we can do is, in our server side if you would, using that great config system, add in a couple more end points, and we’re just going to have some bindings so that we can talk natively with the WS-* protocols, which will let us do better security and let us do some other features like that.

So we’ve got those plugged in, that looks great. Let’s build and run that, and we’re done with the server now. So you get to write no more server code, Don. The rest of this stuff is going to be UI and glitzy.

DON BOX: Which is where I excel.

CHRIS ANDERSON: Excellent. So it will be good. A new instance of Visual Studio, we’re going to create a project. One of the template types in the link preview is a Win FX application, which defaults all these “Avalon”-“Indigo” bits in, so if you could call that last client, and let’s create the new project.

Wonderful, it looks beautiful. So what we want to do is play around with various UI apps, and open some windows. What we want to do is take that same contract we define on the server and use it on the client. So I’m going to drag in contract.vs, which is the exact same contract we had in the initial, on the server side, and an app config. So just like on the server, how we can separate out the protocol and everything else about the binding to an Indigo service, on the client we can do the exact same thing.

So if you would please import that, excellent. It’s a new word. It’s OK. Now we want to use this function. Right. So let’s create a connection to the server. So connections to the server, you start by creating a channel, that channel is defined by the contract, so you’re going to create a LAP (?) contract, we’re going to say “channel.create,” give it the type of the contract. Then we’re going to give it the name we specify in the app config. This is a level of indirection, so that we can do the change under the covers about protocols or security models, or anything else. So we’ve got that, we can do a result, we can do a simple query against the channel and call the get processes method.

We’ve got data.

DON BOX: How do we show it, Chris?

CHRIS ANDERSON: I think we should create some XAML. So if you would, please, open the Window1.xaml, and we’ll start by creating a simple list box. Excellent. And set the name equal to something. So what we want to do here is now in the code behind simply set the item store of the processes to be the data we got back from the query. So Avalon natively supports data binding, all of the controls have either item stores or content properties, so you can easily inject data from anything.

One of the things we got feedback on was the “Avalon”-“Indigo” connection wasn’t as good as it should have been. So this is an example where the default processes are natively bindable now.

So if you would please, run our beautiful application. Rich visualization, I see it. We have process data. Not very differentiated, but before we move on, I’m a little concerned. We’re now exposing our process information to anybody out in the world who knows our IP address, and what I’d like to do is have a better security model on here.

DON BOX: This is actually secure already.

CHRIS ANDERSON: That’s true, it’s the WS HTTP binding, so it’s actually doing Curb Off process. NTLM and Curb Off aren’t always the most Internet friendly protocols, so what we want to do is use the new info card system that Jim talked about, and actually just change that to be the binding we’re going to use. So without changing any client code, we’re going to rewire that end point to point to the info card. And this is going to give us one click security with federated name space identity. It works over the Internet, it works over different companies Intranet, goes through firewalls, does all this stuff. You can choose to trust whoever you want.

So we get the UI that pops up, we choose the info card we want, we hit submit. Now this has send the query back with the additional credentials that were specified in the info card, and that could have come from any provider.

So it’s still  we still haven’t solved the visualization problem. And for now let’s go back to the NTLM so we don’t have to deal with the UI popping up, we can switch those back. What I’d like to do is create a template, create some UI definitions for processes. So if you would, please, create a listbox.item template. And inside there we’re going to create a data template which allows us to specify how we want to visualize something. We’re going to put a simple text block in it, bind it to the name attributes and then run this.

So again, still not quite exciting enough. We’re not quite there, we’ll get there. You have to appreciate what this is doing, right. We know on the server it’s taking CLR objects, metadata from a database, remoting it over Indigo, visualizing here, and doing data binding natively in Avalon, that’s a pretty good experience so far. But, we need that rich visualization, the developer-designer split that we talked about earlier.

So if you would, please, go to myapp.xaml, and we’re going to replace this empty file with a pre-canned one, a graphic designer, a PM on a team spent a good amount of time creating a nice look for this app. And what we want to do is  the last thing we do is change the item template, it could be bound to the resource that he gave us, and he said it’s going to be called Process View. So this really allows  you could have a designer continually work on that file without affecting your application, at all, so if we run we’re going to see a very different look for the app.

DON BOX: You didn’t need to change the code?

CHRIS ANDERSON: Correct, no code changes at all. (Applause.) So we can see a couple of things here. First off, we have dials and toolbars, we’re able to do nice effects like blurs, images, gradients, all the stuff you’d expect out of a nice 2-D graphics platform. But, this is really all kind of UI based. It looks like a list box still, all these things. What we want to do is we want to go to next level, we want to do something that actually integrates some documents in. Before we do that, however, we need a little space on our screen.

One of the pieces of feedback we got last PDC, very loudly, very repeatedly by many people, was that we didn’t have enough of the basic controls in the box. So I’m happy to say that in the PDC build that you’re getting there is going to be list view control, tree view control, month-calendar control, all those high value controls are in the box.

In addition, we’ve added a grid clear which will allow us to dynamically resize the UI, which is another feature that people really requested a lot. So if you would please put a content control in here, this is going to host our documents that we’re going to create. Give it a name and set the grid column. Cool.

DON BOX: Now, what do I do, Chris?

CHRIS ANDERSON: So instead of creating the data binding in markup what we want to do is actually dynamically generate the code. So it’s a little bit of code, so if you would please paste the snippet, if you look really all this is doing is it takes the result of that query, that process data list, and it does some link queries against it, creating a set of paragraphs and runs, and bolds, it’s programmatic manipulation of a document tree. It’s fairly straightforward.

What we want to do, though, is take that document we just created and make it be the contents of the view. So if you would, call up create content, give it the result, it looks very nice. So now if you would run.

DON BOX: It’s thinking, and working.

CHRIS ANDERSON: So what we see is a nice document view, and if you would, Don, why don’t you  it’s selectable, can you page around in it, you can scroll, you can see that Avalon automatically figures out the right number of columns to display for the document, provides a paginated view. All this gives you a rich document platform that’s directly integrated with the same programming model you had for all the UI elements, bound to the same data, right?

DON BOX: Love it.

CHRIS ANDERSON: It’s great. (Applause.) Thank you.

You know, there’s a saying, right, all of the “Ajax” apps must have a map and all “Avalon” apps must some how incorporate 3-D. So again, we have a task of how do we integrate 3-D into a great app about mapping your processes. And so we have a little version here, which if you’d launch that please, Don.

We see on the right hand side, we have a third pane, if you could maximize the window to give us real estate. We can see that we can fly around the 3-D view on the right. It’s not looking very interesting yet. That’s better. If you would please, resize the window on the left you can see that’s all live data, you can select it, you can scrub it. You know, that’s actually a full 3-D object, so if you would right click on the sign on the right there’s actually something under there. So if you’d fly down a little bit closer you can see there’s something there. What is it? I don’t know. Would you please right click and let it get out of the way. They have Virtual Earth in “Atlas,” we have real Earth on “Avalon.”

DON BOX: Love it.

CHRIS ANDERSON: Excellent. And it’s wonderful to see all those Win 32 processes enveloping the globe.

DON BOX: Win 32 does encompass the world.

CHRIS ANDERSON: So really what we’ve seen is on the presentation side a program model that spans all the different areas of execution you need, with “Atlas” and “Avalon.” We have a unified programming model for dealing with communication, that lets the software talk with “Indigo.” And in the data side we have a great new integrated query model with LINQ.

Two years ago we were on the stage and we announced a bunch of new technologies, “Avalon” and “Indigo “included, and you guys talked to us. You told us what you didn’t like, what you liked, and we really listened. We hope that the stuff you see here, the pods, the control sets, show that we have been listening to what you guys have been saying. We’ve announced some new technologies today with LINQ and with “Atlas,” and if you keep talking, we’ll keep listening.

Thank you very much.

JIM ALLCHIN: What do you think about the breadth? Incredible, huh? (Applause.)

Well, for the last 40 minutes you’ve been seeing these guys write some code. How about looking at a real app, a sample app? You know, in order to test out a platform with this much breadth, I really wasn’t sure. I asked you guys to dogfood but it’s better if we dogfood. So a few months ago, I asked a team inside of Microsoft to take this platform and to write a sample app, and that’s what they’ve been doing, create a sample app, test the platform so you wouldn’t have to.

I’d like to bring Hillel Cooperman out, so he can talk to you about the work that they’ve done in that team with the sample app. Hillel? (Applause.)

HILLEL COOPERMAN: Thanks, Jim.

So when you gave us this job, which we appreciated, we looked at the platform, we said, wow, “Avalon,” a lot of cool UI, and we said “Indigo” or Windows Communication Foundation, we can share data between PCs, and we said, well, what would be a great scenario to actually try and make happen in a real application, a real sample app using that platform, and we thought we would let you create visualizations of your photos and share them with other people over the Internet.

JIM ALLCHIN: A good sample app.

HILLEL COOPERMAN: All right, so let’s take a look.

So we came up with a little codename for it, we call it “Max.” Here it is. So this is again 100-percent managed, all the UI you’re seeing is built in WPF, and, in fact, you’ll notice since the app is relatively simple, all it does is let you make lists of photos, visualize them and share them over the Internet. We wanted to put something else on our homepage, and so we had a little extra time, and because of the productivity we get from the platform we’re able to put a whole kind of newsreader hardwired to our blog, our team blog right there on the homepage. So that’s kind of cool and a good way to communicate with people who are trying out this app.

So let’s create a share a list of photos. So from the user perspective you’re getting access to the last seven folders that got updated or created in My Pictures. But what’s cool about what’s happening under the covers is we’re using Avalon’s composition features to actually nest views. So you see one, two, three, four, five, six, seven thumbnail views, all embedded in one big thumbnail view, and you can see they’re even rendering the images at different sizes, and again that’s thanks to “Avalon.”

So let’s click here on these images, and just so we can see them all, let’s make it a little bit smaller, and now let’s add some from other folders. And again you’ll notice this is two instances of our thumbnail view, one here on the left and then one here on the right, which shows the actual list we’re making.

And again the nice thing is we’re able to really reuse the controls that we created here, because this is kind of a single purpose view where you’re just adding and removing from the list, so we wanted to put those little hints on the cursor about whether when you click you’ll get an add or a remove. And again that was super easy to do with the platform.

Let’s add just a few more, and we’ll add one more. All right.

So now we have a good 65 items in our list, and that’s fine, but one of the other things that we get is it’s all well and good to have all this data, and it’s nice that you can make a nice thumbnail view using Avalon, but you really want to be able to make multiple views and have it be distinct from your data, you don’t want to have any mixing there.

So let’s actually take another view that’s maybe more optimized around photos, and we call this the album view. And let’s zoom it up a little bit.

So, in fact, what we’ve done now is laid out all the same images, we haven’t touched any of the original data, but laid them out in these templates that make it kind of a nice presentation for slides. You know, it’s maybe this picture doesn’t really look good in that layout, so let’s move it and swap it over here with this one and now you actually get the whole image. We can rearrange slides, et cetera.

And again, all this functionality is super, super easy for us to do using this great platform.

JIM ALLCHIN: Come on, don’t you think this is cool? (Applause.) And it comes from the platform, so you didn’t have to do all the work.

HILLEL COOPERMAN: Yeah, well, the funny thing is some people sometimes say, hey, that Whidbey stuff, that seems all well and good, but, hey, was it hard to do, and the answer, like Jim said, is no, but hey, is that something that really you want to have. And you’ve got to be careful to balance it, and you don’t want it to be gratuitous but, in fact, a lot of this stuff really helps you with usability where you’re going and dragging exactly where the thing is going to end up, and that’s actually something that helps in an app, whether it’s for consumers or in the enterprise, and that’s a lot of feedback we’ve been getting from folks.

All right, so let’s get a preview of what that’s going to look like on the other end of the wire. So when we go to share these images over the Internet, this is what the other person is going to see.

So let’s actually go back and let’s name this “PDC Pictures.”

So we’ll hit share, and one kind of interesting thing about this screen is we want to actually give people a live view of what they were about to share so you know it’s again in the upper left hand corner a mini view of what we just saw. And again it’s super easy for us to reuse all those components and lay them out in multiple pieces of the UI, and just exactly the way we want.

So I’m going to type in your e-mail address right here, “Hey, check out these pictures,” and I’m going to hit share. Now, this is when we move on from sort of the “Avalon” portion of our demo and give you a sense of how we’re using the Windows Communication Foundation.

So if you’ll step over to that machine, what’s happening is we really benefit from “Indigo” in that it lets us in a really low cost way create a secure connection, a secure channel between two PCs to replicate these images over to the other PC over the Internet.

And let’s make sure, Jim, you’re up on this screen. I think you are.

JIM ALLCHIN: No, not yet.

HILLEL COOPERMAN: Let’s see what you’ve got here. I think you’re over on this machine. There we go.

JIM ALLCHIN: Great.

HILLEL COOPERMAN: Great. So we’ve gone and created that channel using Indigo with a custom data contract and a custom service contract. And, in fact, you go ahead and accept the album, there it is. I was told that if you’re standing all the way over there, it will make it more realistic that the bits are traveling from one machine to another.

And, in fact, you’ll notice what’s happening right now is they’re handshaking and making sure everything is all okay, and here come all the images replicating over.

And again this kind of communication is relatively standard today and going to become more and more standard where clients want to be able to talk to each other in a secure, authenticated way, and in a relatively lightweight way, and Indigo did a huge amount of the work for us so that we didn’t have to do it.

JIM ALLCHIN: So it’s almost done?

HILLEL COOPERMAN: Yeah, almost done. Nine more, eight, seven; well, you can see.

There you go. So play it back and let’s verify that it was exactly what I shared with you. (Applause.)

All right, so one more aspect of the app that we made that I want to share with you. So the “Avalon” guys did a great job adding a set of 3-D APIs for us, and like ChrisAn said, you can’t have an app without using 3-D, we wanted to show it in a way that hopefully you’d find super useful, so we added one more view using the 3-D APIs. And the nice thing about this is Avalon makes it so that we address our 3-D objects with the same programming model as the 2-D objects. (Applause.) And that makes it really easy to use.

So you can actually see the pictures are not only caught on 3-D, but the reflections under them are live 3-D reflections, all plotted on a 2-D background, and those little transport controls that you saw are another 2-D object composited over the 3-D objects that are composited over the 2-D objects, so again all made super easy using “Avalon.”

JIM ALLCHIN: Great, thanks. (Applause.)

HILLEL COOPERMAN: So I know I’m getting the hook; two quick things. One is we’re going to actually have two sessions this week, one at 1:00 today over in Room 150 on a casestudy in how we did the UI, and then on Thursday at 1:00 where we delve into the details and show you a bunch of the code. And the litmus test for this was not just to show it to you, but if it was going to be real you should be able to use it, so you can actually go download it right now at www.microsoft.com/max.

Thanks very much.

JIM ALLCHIN: Great. Thanks again. (Applause.)

How about a real app? This is a good sample; how about a real app?

Joe Flannery, the vice president of marketing from The North Face is here, along with Mark Belanger, CTO and co-founder of Fluid. And they’re going to come out and talk about the problems that they wanted to solve and how they solved them with Windows Vista. Hey, guys?

JOE FLANNERY: Hey, how are you doing?

JIM ALLCHIN: I’m doing good.

MARK BELANGER: Hi, Jim. (Applause.) Good to see you.

JOE FLANNERY: Hi, everybody. This is new for a guy from The North Face to be at the PDC, and I’m very excited to be here to tell you a little bit about The North Face. We’re the world’s premier supplier of authentic and innovative outdoor products. We have products that inspire and enable our customers to never stop exploring.

The North Face was founded as an expedition brand, and to date we sponsor more expeditions than all of our competitors combined.

We’ve got amazing athletes like Pete Athens, the American who’s summited Everest more than anyone else. Pete is an amazing guy, but when he’s up on Mt. Everest, our customers can’t experience what he’s experiencing.

We’ve got athletes like Dean Karnazes, the ultra-marathon man, who’s running 270 miles at a time, but he’s by himself.

We also have thousands of products each season, 2,000 this season alone. Sometimes our customers have a hard time understanding the difference between a $100 tent and a $5,000 expedition tent.

So we’ve looked at what’s been successful for marketing for us, and the Internet has been an astounding tool for us to use.

So we briefed our friends and our Web design agency Fluid to find opportunities for us to figure out how we can bring our customer and our content and bring them closer together and bring it to life. So Mark is going to show you something that’s answered our prayers. Mark?

MARK BELANGER: Thanks, Joe.

So we’ve had the good fortune of being The North Face’s agency for the past three years. In that time we’ve been able to use rich Internet application technologies to double the overall sales volume of The North Face’s Web site. We were able to do that by showcasing all that wonderful content that Joe was just talking about via rich interaction technologies.

A little bit about Fluid: We design and engineer rich user experiences. Accordingly, we’ve partnered with Microsoft to take advantage of the next generation technologies within Windows Vista to realize this project. With Windows Vista we’re making the media happen.

So what is this thing? It’s a proof of concept C# app that’s written with also XAML, that’s completely data driven. Nothing you’re about to see is canned.

So in my earlier demo you saw a pretty cool thing with some video playing in 2-D. How about some video in 3-D? How about three videos in 3-D? (Video segment.) So you can see this is totally dynamic. We find this pretty amazing. This kind of 3-D in video is something that’s really not very easy for us to develop, especially in Web context.

And before we jump in further, first a confession. Prior to this project we were Web, not Windows, app developers, and what we found was an incredibly powerful platform, we’re really pleased with the results, and we think you will be, too.

So as you can see, rich media is really deeply integrated into the Windows Presentation Foundation. You’ve got ClearType overlayed on video playing full screen in the background. Integrating imagery, sound, video often involves just a single line of markup. We’re able to introduce these great 3D elements to showcase The North Face’s products.

And diving into this other product, the Red Point Jacket, you can see that the original videos rotate into the background onto that plane, and we’ve overlaid yet another video, a testimonial from one of the North Face’s athletes, expounding on why he likes the product so much. That was all written in XAML and those are very simple to do.

So during the course of development, we found that Windows Vista platform to be a very flexible platform development. These user interface components right there, features, expedition, technology that I’m surfing with the mouse, these are all just list box controls that have been styled, they’re the same control. That’s incredibly important to us, because we’re able to rapidly change the look and feel of our applications without a lot of work. And, yes, these are two video feeds playing within a list box control.

JOE FLANNERY: And if you think about the challenge that I just mentioned at the beginning, this is going to allow us to have that interaction with the customer, so they get the validation from an athlete, see amazing product detail, but also see a 3-D animation on how the fabric technology works.

MARK BELANGER: So in accordance with what Joe was talking about, this is product rotation. (Applause.) Pretty cool. It’s really important for online people to be able to see products at that level detail. And this is simply an image montage control we wrote. It’s the same control that you saw at the very beginning of the demo that showed the images skating around, and if you look really carefully in the background, that same control is still running, subtly reinforcing The North Face’s aspirational brand.

So we’re going to have to go soon, but there’s one last point I want to leave you with, and it’s one of the most important for us, and I think it will be for you, too, and that’s no developer productivity.

Tools that make us highly productive are critical to our success, and doing things like this, this kind of 3-D and video, it was not practical in our previous projects. So for this project, remember I told you that we were Web developers, the primary developer went from zero Windows applications development experience, and zero 3-D experience to this in fully functioning prototype form in a mere six weeks. That’s simply astounding. (Applause.)

And the productivity gains are only going to increase, because of the new workflow development where you have XAML separate for handling layout and then logic on the other side. So what you’re going to get is that engineers can concentrate on code and let the designers worry about pixel twiddling.

These kinds of deeply immersive customer experiences or what customers demand are critical to success for online retail. Courtesy of Windows Vista, because of the deep media integration, the flexible platform we were able to develop from, and the resulting developer productivity gains that we were able to eke out, we’re only going to be moving faster in this space.

JOE FLANNERY: We see a tremendous opportunity at The North Face, not only online with our Web site design, but also at the point of sale. With this content and this interaction, we’re going to blow away our competition.

MARK BELANGER: So we’re sure you guys have some questions, we’ll be in the exhibit hall if anyone wants to come by and understand how we built this thing. Before we go, we want to thank The North Face and Joe’s team, the inspiration, and Jim and the Microsoft team for providing us with the tools to visualize it.

Thank you. (Applause.)

JOE FLANNERY: Thanks.

JIM ALLCHIN: Once people get a view of this, that’s what they’re going to demand. We’re going to post on MSDN a whitepaper explaining how this app was written later on today.

So given this, users are going to expect a certain minimum set of capabilities when they have a Windows app. I can’t possibly cover all the details; in fact, that’s why we’re having this conference. You’re going to get specific information, very precise about what you should do in order to enable and take full advantage.

Now, there are a few things that I did want to highlight to just make sure that you did hear me earlier. It’s going to be critical that you make your app run in standard user. We are committed to security, and we’re going to make that the default.

But there are so many other things like taking advantage of the (i-filter ?) interface so that you can pull out the metadata, or taking advantage of the search controls in your apps, or configuring your app when you happen to be on battery, or taking advantage of the ability for the system to be in portrait or landscape; all those things are covered in the different sessions here.

Windows Vista Opportunity

OK, this is going to be an amazing release. It hasn’t been since 1995 and Windows 95 that we’ve produced an operating system that had features for every audience. In the IT pro space think about all the work that we’re doing in servicing and deployment and security. For the information worker think of all the search and organization and visualization, or even the simple meeting app experience that we’re going to put in the system; consumers, all the games that are going to be there, the photos, the music, the video, all that. And it hasn’t been since Windows 95 that we’ve had this rich an API for you.

The opportunities listed on this slide are mind-blowing. Analysts forecast that within the first 24 months of Windows Vista shipping, there will be greater than 475 million new PCs shipped. That’s almost half a billion; a half a billion PCs! We anticipate 200 million bottom line case that are going to be upgradeable. That’s opportunity for us together.

In addition, it’s been a long time since enterprise has really gone through an upgrade cycle, really since Y2K, and they’re ripe to go through that transition. In addition, the fact that we’re having Vista and Office 12 coming out about the same time will, in fact, incent enterprises to consider the upgrade now.

You saw these demos in terms of the apps. Customers are going to expect that. We’re trying to provide the platform for you, but it really is up to you. We think we’ve got the right platform; now you need to take it and build on it.

Windows Vista Partner Showcase Program

We’re going to invest like never before. This is going to be the largest demand generation that we’ve ever done. We’re going to do innovative things that we haven’t done before. We’ve created a $100 million dedicated partner co-marketing program, and the goal is to drive the development of breakthrough apps using features available only on [Windows] Vista. We’re going to be gathering feedback at this conference and then we’re going to finalize how we’re going to run this program before the end of the year.

If you want to participate, send [us] mail; you’ll also hear about it more at this conference.

We want to be able to have apps showcased in all the different audiences, whether it be in consumer or enterprise.

Another way we can help is to connect you with customers in a friction-free way. Today, how many people really buy software and download it over the Internet? Some, but not as many as if we really had the infrastructure in place to do it. We released Windows Marketplace last October and it was a good start, but it really didn’t have any download capabilities. And how many of you have downloaded a piece of software and purchased it? Wow, aren’t you worried about the key, what if you lose it, you don’t have the media, ooh. That is actually preventing some of the acceptance of that particular approach to purchasing software.

Today, we’re going to preview something that we call the next generation of the Windows Marketplace called “Digital Locker,” and the concept is that you can, in fact, try, download and purchase software online, and we will keep the information so that you feel safe that if you’re moving from machine to machine or something happens to your machine, that you can get the keys back. We’re doing that through partners today, and you can start using those partners as part of the preview by engaging with Digital River and eSellerate. There’s more information on this at WindowsMarketplaceLabs.com.

Now, I think the best way to really explain what I’m talking about here is to show it, so I’d like to invite Dee Dee Walsh out to have a demo of the Digital Locker.

DEE DEE WALSH: Hey, Jim.

JIM ALLCHIN: Hi. (Applause.)

DEE DEE WALSH: Thank you. Hi there. I understand I’m the only thing between you and lunch, so I’m going to show you how fast it is to purchase software through the Digital Locker.

So I’m going to go ahead and purchase a piece of software called ACDC and, of course, we have Passport authentication. ACDC by ACD software, and this is a piece of software that will hopefully come up quickly, that is a graphics package. And I am going to go to a different machine actually.

All right, let’s try that again. So I’m going to again search for this product called ACDC, and it’s a cool graphics package, and there I go again.

This always happens when you’re in front of a crowd of thousands of people.

And here it is. And it’s a cool graphics package, I know I want to buy it, so I’m going to click Buy. And I already have a product called Rad Combo Box, which is a developer tool, and I’m going to go ahead and keep this going quickly so I’m going to check out. And notice that again this is just trying to make it very simple and easy for customers to feel like this is a trustworthy service. So I’m going to go ahead and keep moving with this purchase and authorize my stores and complete the purchase.

And now what you’re seeing happen is the transaction being passed to Digital River and eSellerate, and what’s great about this is that it’s one transaction for multiple merchants. And the other thing is while we’re launching today with Digital River and eSellerate, ultimately we will have many merchants that will be available; in fact, hopefully the merchants that your customers are most comfortable with. And in this case, again what’s happening here is we’re passing encrypted information to both of these vendors.

Now here is the thing that we’ve all been waiting for, which is just a one-click download. So all I have to do, this was per Jim, he said one click, that’s all we want, and there we go, one click and now I’m in my Digital Locker.

And I just want to point out a few things in my Digital Locker that are key. The first is that it’s integrated in with the Windows Vista shell, and what that means is that we have a very reliable download through Windows Update Services.

The other thing is that I’m going to show you a few things. Notice that I can look at all of my products in the Digital Locker. In fact, if you’ll see here, it shows the status of each, for example, Synchro Magic Pro from GeloSoft, it says verified. What that means is that we verify that the bits as ISVs that you give us actually are what the customer will get.

The final thing I want to show you is what a customer can do in a Digital Locker. The first obviously at the bottom is to download the software, and the second is to create a backup CD, which our customers have said got to have the bits in hand. And, of course, the third thing is to be able to install from within the Digital Locker. And the final thing, which is the most important, as Jim mentioned, is getting my license information. So never again do I lose my license information and have to repurchase software; it’s all available from here, rather than stuck in some desk drawer or hidden in e-mail somewhere, and, in fact, if I buy a new PC, all I have to do is sign in to the Digital Locker and boom, there’s all my software and I can download it to my machine.

So that’s the Digital Locker. Again, as Jim pointed out, please go to WindowsMarketplaceLabs.com to get more information to test this service out. And also our team is here at Ask the Experts on Thursday at 6:30, so we’d love to see you, we’re here all week, thanks.

JIM ALLCHIN: Great, thank you. (Applause.)

Basically I’m not going to cover all the things on this slide. The bottom line, we’re listening, keep talking to us. We’re also trying to have fun, as you can see with the Channel 9 guy. If you have better ideas for having fun, just let us know. We’re listening, these are the places to go to, to give us feedback.

So today you’re going to get more bits than you ever have from us. As you leave, you’ll get the goods. I feel like I’m pulling out a wallet here. (Applause.) You’re getting everything from Beta 1 Vista to SQL Server to the tools, the WinFS beta. You’ll also get that Build 5219, which is the pre-Beta 2 build of Windows Vista. Again, I want to caution you, put it on test machines only. You’ll also get some other bits at the end of day three.

So during the last two hours, which is about what it’s been, it’s a whirlwind tour through the magic of what we think of as Windows Vista and all the associated tools around it. We’re going to make it the most successful launch ever.

But there’s one thing that we can’t do, and that’s you. We need your apps. We’ve created the platform, but we need the apps that are immersive the way customers expect. I want to thank you for your past support of the Windows platform, sincerely thank you, and I’m excited to see the kind of apps like you just saw here that you create.

Have a great PDC and have a great lunch. Thank you very much. (Applause.)