ANNOUNCER: Ladies and gentlemen, please welcome President, Server and Tools Business, Satya Nadella. (Cheers, applause.)
SATYA NADELLA: Good morning and welcome to day two of Build. I hope all of you had a fantastic time last night and yesterday in the sessions. It's a pretty amazing setting, I must say, this tent. I mean, some facts for you on the tent. I believe the size of this thing is equal to 12 NBA courts. For those of you who are Canadians and into hockey, it's four NHL rinks. We've had, what, two and a half inches of rain, and so far, touch wood, nothing has leaked in. It's taller than anything at least on this campus. I believe it's three and a half stories. And most of all, I guess we have something like 5,000 devices -- clearly, there are not 5,000 people in the tent, but obviously we have a device proliferation all on the Wi-Fi network. So we'll see. We have lots of demos, a lot of code on screen. Hopefully you're not all active on the Wi-Fi at the same time.
It's fantastic to be here at Build talking to developers. And we're well and truly into this new era of devices and services. And yesterday you heard us talk about what we're doing on the devices front. I mean, overall with Windows, our goal has been singular, which is to build platforms to really enable you to build the world-changing applications that you do. And we do that both on the client as well as on the server.
On the client side, we've talked about how we've reimagined Windows from the developer platform to the user experience. Again, in support of the kind of applications that you're building for the devices today. These fluid, touch-first applications that also take advantage of capabilities in Windows RT to be able to truly bring to life all the new application capabilities.
Very similarly on the back end, we're reimagining Windows for cloud services. It's a pretty concrete thing for us. We refer to this as the Cloud OS. At the hardware level, for example, the core of any operating system is to think about the hardware abstraction. And the hardware abstraction is going through a pretty radical change. At the atomic level, we're bringing compute, storage and network together, and then scaling it to a datacenter on a multidatacenter scale. So this is no longer about a single server operating system, but it's about building distributed, virtualized infrastructure that includes storage, compute, and network and spans, if you will, across the datacenters.
We want to be able to have the richness at the data tier that supports the richness in your application. You have SQL data, you have NoSQL data, you want to have all kinds of different types of processing capabilities, you want to have a rich data platform, and that's something that we're building right into the operating system.
Beyond that, of course, the thing that developers interface with is the app platform, and this is perhaps the place where we're having the most radical changes. We want to create a very new way for you to interact with data. Your applications are going to reason over large amounts of data, you're going to build these data-parallel applications that are driving new features in your applications. You're going to have very rich semantics around identity, social, sharing, that you want to be able to get onto the platform.
And then your middle tiers are much more sophisticated. You're really going to be able to build middle tiers that scale with the proliferation of devices, can manage the complexities of variety of different applications and the requests you get from your clients. Because that's the sophistication we want to build into our platform.
Lastly, of course, when you build these applications, you also want to make sure that you can deliver these applications to the devices you're targeting with personalization and security so that, again, you want to really reimagine things like identity so that both the end user is very happy with the application you produced, but as well as the operators and IT professionals are happy and feel secure in terms of how you're projecting your applications and the data contained inside the applications to these devices.
So that's what we refer to as the Cloud OS. It manifests both in Windows Server and Windows Azure for us. And, in fact, it's not either/or. In fact, many of the application developers will take advantage of both because when you're building a distributed application, it's not going to be in one datacenter, it's not going to be on one cluster. You do need to be able to span the globe on the Web.
One of the inspirations for us, or the central inspiration for us, is not something very abstract, but it's very concrete on this campus. If you walk around this campus today, what you will find is many people, obviously, building client operating systems, applications that are exploitive over devices. But you also find 200-plus Web-scale services.
Some of these are very, very popular. Xbox Live, for example, has more users than any cable channel out there, 40-million-plus users. They have a very, very engaged user base. They have users who use it for more than 80 hours a month. That means two weeks in a month people are interacting with Xbox Live.
You have SkyDrive going through amazing growth. We have two petabytes of data that's being added to SkyDrive each month. There are over 200 million users of SkyDrive. Office 365, which is our online service -- just the Web apps of Office have almost 50 million users. Bing, obviously, has 300-plus petabytes of data over which you reason to be able to drive things like relevance.
So the list goes on. The point here is not just the scale of these things, it's the diversity of these applications. And more importantly, what that diversity teaches us in terms of building those back-end platforms and servers in Azure.
For example, just Azure itself runs on the Windows Server hypervisor, right? The host OS of Windows Server is what sort of powers Windows Azure. That teaches us a lot about what does it mean to build a host OS that can support millions of virtual machines in a distributed way.
When it comes to the data tier, we take a lot of inspiration from scale-out SQL applications. There's adCenter, supporting millions of auctions per second. There's Dynamics, there's Office 365 and SharePoint Online, thinking about charting, thinking about SQL federation, all of that comes from learning from even our own first-party applications.
And then you go up the stack to something like machine learning and we want to really build the tooling around machine learning so that each one of you as a developer can be able to sort of exploit applied machine learning as part of your application. We look at these data-parallel applications in Bing, which is all about applied machine learning and say, how do we take that and make it available as a set of services?
So that's that feedback cycle that is significant for us, it's a virtuous cycle, and you can count on us to be learning, building our own first-party applications on our platform, and then making it available to third parties. That's at the core of what we do on this campus.
So today, as I said, most of our time will be on screen. We want to show you some of these applications, what we see as the dominant applications. None of this will be new because this is all based on what we observe you doing, and we want to talk about our services and the back-end platform, and more specifically, a lot of the focus in this talk will be on Windows Azure around these application patterns.
The first pattern I want to talk about is device-centric apps. This is perhaps the thing that's most top of mind for folks in the room because of everything that's happening with Windows 8 and Windows Phone 8. And you're all, obviously, building applications for these platforms. So let's say you build this very compelling application, which has got this very immersive, fluid, touch-first experience, you're exploiting WinRT. But then you want to span, let's say, Windows 8 and Windows Phone.
So the first thing you want to, perhaps, do is take some of the application state you have and assist it. And the best way to do that is to put that into the cloud. You want to be able to manage multiple identities. You want to be able to support multiple cloud identities, and even perhaps corporate identities, so you want to integrate into your application identities in a very simple way.
You want to be able to do notifications. You want to be able to inform all of your devices about changes in your application state.
You also want to be able to compose over all those services. You want to be able to script your application on the back end so that you can add things like text messaging, email, and other things that make your application even more powerful.
So to make all this possible, we've built a new service called the Windows Azure Mobile Services, and this service really enables you to cloud-enable your device application with very little code. And it provides services like storage, notification, scripting, and these are all things that you can do on top of what you've done on the device.
To show you some of this work live, I wanted to invite up on stage Josh Twist from our Windows Mobile Services. (Applause.)
JOSH TWIST: Good morning. The best Windows 8 apps are connected to the cloud. Here's an application I wanted to share with you. It's called Event Buddy. It's the sort of application you might use if you run local community events or code camps or conferences.
So I can create an event here. Let's call it Redmond Code Camp. Let me save that and then I can drill into that event and add sessions. So maybe we'll have a session on Windows Azure, sounds good. Let's save that. And this will be a really useful application if you run such events. However, it's inherently limited in its potential right now because this is not connected, doesn't use cloud services, the data is all local and just in memory.
With Windows Azure Mobile Services, any developer can have add the cloud services they need to their application. And what I really love about mobile services is how quickly you can go from idea to execution.
I'm going to prove that to you now by doing a demonstration and connecting this application in just a few minutes.
So let's switch over to the Windows Azure portal. And you'll see here we're on the mobile services tab. And creating a new mobile service is incredibly easy. I click new, compute, mobile service, create. I enter the name of my mobile service, and this guide will take me through the steps, just two steps necessary. Only takes about 15 seconds.
Now, we created a service earlier that we're going to use today. And here it is, it's called the Event Buddy service.
If I click on its name, I'm greeted by our quick start, which is a short tutorial to help developers get their apps connected. Notice here you can choose platform, and I'm really excited today to announce that we support Windows Phone 8. So it's easy for Windows Phone 8 developers to get their apps connected this way too. (Applause.)
So we're building a Windows Store app right now. So let's have a look here. You see we support two flows, connecting a new Windows Store app, and connecting an existing app. Now, since I already have an app, I'm going to choose that latter flow.
Let's copy this code to the clipboard because I'm going to use that in a little while. And I'm going to go up to the data tab. And you'll see here that this lists all of the tables in SQL Server that stores data for our mobile service. We have a channel table that we created earlier that's going to help us with push notification.
So let's create a table now to store our event data. So I'm going to create that. I'm going to switch over to Visual Studio, and we're going to connect this project.
So I'm going to paste in the code that we took from the quick start, and that's going to bootstrap the application and point it at the mobile service. And then over in the events page, I'm going to add the code necessary to insert data into Windows Azure. And I'm going to type this out for you. So it's await app.mobile service to get me an instance of the mobile service client. And then I want to get a table that I'm going to work with. And in this case, I'm going to work with the event table.
And now I'm going to insert data. So I say insert asynch, and that's all it takes to insert data into Windows Azure. I'm also going to query. So I'm going to use Visual Studio snippets now so you guys don’t have to watch me clumsily type, but you'll notice querying data is a single line of code.
So let's run this application and see what's different about it. There we go. I'm going to add an event, and what should we call this? We'll call it Build because that's how we do code camps here in Redmond. Save that. And now that data is in Azure.
And to prove that to you, I'm going to switch back to the portal, I'm going to drill into the event table, and right here in the browser we can see the data's stored in Windows Azure. (Applause.) Thanks.
We now need to round this scenario out. So I'm going to add another table. Going to add a session table to store our session data. But now I'm starting to think about the security of my application. I only want authenticated users to be able to work with the data inside this table, and I can do that by simply setting policy right here in the browser. So I'm going to save that, and this authentication mechanism works in harmony with our support for multiple identity providers.
So I'm going to switch over to the identity tab. And you'll see that we've preconfigured this service to work with Microsoft accounts, to work with Facebook, Twitter and Google. And, actually, logging in on the client is equally simple.
So I'm going to switch over to Visual Studio and go to our login page. Let me just stop the app from running. Go to our login page and I'm going to enter the line of code it takes to log in via Twitter. So I call login asynch, I pass in Twitter, and that's going to log the user in.
Now, before I show you that, let's just finish doing our data code for the session table. So I need to insert the session, line of code. I need to load sessions, line of code. And even to update a session, line of code, it's really that easy. So let's run the application again. But this time, when I go in, I'm going to log in. So when I click this Twitter button here, that's going to sign me in by Twitter. It's going to execute that line of code we run. I want you to notice that automatically it pops the UI, it logs me into Twitter, and the service is now aware of my identity, I'm logged into my mobile service and it's that easy. (Applause.)
Now let's add some sessions to our events. I'm going to drill into Build. Let's add a session. Let's call it Mobile Services. And I can add a Twitter handle here. I can enter any Twitter handle. I'm going to enter my own, and then I'm going to save the session. But before I do, I want to show you my favorite feature of Mobile Services, which is the ability to execute code securely on the server.
Now, I already prepared a script earlier, so let me just copy that to the clipboard and paste this in. Let me explain what this is going to do. So there's a function that's going to be invoked whenever someone performs an insert. And it gets past the item that's being inserted. It also gets past the user, and that object has been verified and authenticated on the server so we can trust the data inside that object.
And then we have the request parameter, which allows me to control the flow of execution. And the first thing we do inside this script is tag the session that's being inserted with the idea that the user is doing it. And the second thing we do is from the server, we make a call to the Twitter API to get the image for that Twitter handle that's being inserted, and we're going to save that into the database as well.
So let me save this script. And in the few seconds it should take to save this, that change is now live in Windows Azure. So let me switch back to the app, hit save session, and you'll see when this logs in now we get the picture. And that came in via Twitter from the server. (Applause.)
The next thing I want to share with you is how we've integrated SkyDrive in this scenario. So I'm going to click on the mobile service, I'm going to edit the session, and I'm going to upload a file. And this is using the live SDK on my machine here, and I'm going to upload the presentation from my slide -- excuse me, the slide for my presentation later.
So I'm going to upload that. You can see that's uploading now, and Windows SkyDrive will return me a URL, and we're going to save that URL to the Mobile Services database. And that means that other people who are browsing the session will be able to see my deck.
Now, I mentioned before that we've just launched support for Windows Phone 8. So here I have a Windows Phone 8 and we have already installed a version of this application that's pointing to the same service. So let me just fire this up. It's logging me in now, it remembers the credentials from the person who's logged in. And you can see, here's the actual event that we created earlier.
So I'm going to drill into that, and there's my mobile services session. And notice that down here we have this new document. So I can actually open the slide deck that I just uploaded, and we can view that right on the phone. So here's my presentation from Building 33 today. Anyone think I'd accidentally squeezed that in? So you can actually see the slides, which is pretty awesome.
Okay, so the next thing I want to show you is if we go back to the application, you can see here we have some rating buttons. So I can actually submit ratings for sessions. Now, wouldn't it be cool if when somebody inserts a rating I get a Live Tile notification on my desktop as the presenter? And that's easy to do with Windows Azure Mobile Services.
So I'm going to switch over to the portal again, and I'm going to add a new table now to store those ratings. And I'm going to make it secure, so let's set this to be authenticated users only. Let's save that. And we're going to have a script that executes whenever data is inserted. So here's the script. I'm going to paste this in now, and I'll explain what this is doing to you. It's actually going to run some T-SQL on the server that finds the presenter of the session that's been rated, loads in all of this channel URL so that we can send out a push notification, and sending a push is very easy in Mobile Services. So with this statement here, that's all it takes.
We send a push to Windows Notification Services and we support all of the templates that Windows Notification Services offer. And here we're sending a small image in text 04, and that's all it takes, a single statement.
So I'm going to save that. And that's now live again in Windows Azure. So I'm now going to switch to my desktop, and I'm going to zoom in on this Live Tile. And over on the phone, I'm actually logged in as my colleague Nick, and he loves Mobile Services. So he's going to rate the session a five. And if we watch that start screen, we should see instantly we get a notification from Windows Notification services in no time at all. (Applause.)
So, hopefully, you've been convinced just how easy it is to add the cloud services you need to your applications and everybody can get ten mobile services for free by signing up at WindowsAzure.com. Thank you. (Applause.)
SATYA NADELLA: Thanks, Josh. This is my favorite Azure service. It also sort of successfully destroys my weekends. All you need is Visual Studio Express and Mobile Services and you can be occupied 24/7 building apps for our devices.
The thing that we're excited about is the Windows Phone support that Josh talked about, and it supports Windows 8, obviously, and other devices. So we think that this is a great way for anybody who is building a device-centric application to start experimenting with how to add cloud functionality and make that application that much more richer.
We already see many of you taking advantage of both device capabilities and device platforms as well as Azure. And two examples: USA Today, which has a fantastic application for Windows 8, uses Azure on the back end. They use a variety of services, storage services, notification services. In fact, they use this common back end across all of the devices that they support.
Quest Software, which is more on the enterprise space, you would sort of think it's in enterprise software, but they're building a consumer application, an application that's really on the trend of consumerization of IT because you want to be able to monitor your servers that may be sitting inside of your private cloud from your Windows 8 slate, and Quest enables you to do that.
So these are some of the examples of ISVs or third parties that are able to exploit the advances both on the client as well as on the cloud to build new experiences.
The next application pattern we want to talk about is the Web. Many of you today will have Web teams in addition to your mobile teams or the Windows 8 teams from a development perspective. And so the Web team really is all about speed, especially if you want to get started on a Web project, it's all about how do we make it very easy for you to get started, to build, and to deploy and have a continuous cycle there that's very rapid.
You want to be able to have a rich framework, something like ASP.NET and MVC for you to be able to build out your application. You want to have rich storage capabilities, rich SQL capabilities that the framework supports. You want to, again, have identity support. That's multiple identities that can be incorporated into your application.
And more interestingly, you want to take that Web asset that you created and expose it to your devices so that you can build a device experience that can talk back to your Web through Web APIs. And that's what we're really doing with Windows Azure websites. And to show you some of the work that we've done with Windows Azure websites and functionality in ASP.NET and MVC, I wanted to invite up on stage Scott Hanselman. Scott? (Cheers, applause.)
SCOTT HANSELMAN: Hello, friends. Today I'm going to take an existing ASP.NET 4.5 application, I'm going to add some ASP.NET Web API services to it, I'm going to expose those services out, I'm going to log in with Facebook and some identity providers, and I'm going to consume those services using a Windows 8 application.
I've got my app right here. Let's go and launch this app. And you can see at the top there not only do I have the ability to log in via regular ASP.NET membership, but I've got a number of additional social identity providers like a Microsoft account, Twitter or Facebook.
I'm going to log in via Facebook, and this is all built into the ASP.NET 4.5 API. Feel free to friend me on Facebook and I will click "not now" because I don't know you. (Laughter.)
Now, I'm going to log into my application here, and you'll notice it says "associate your Facebook account." I didn't actually have to create a local membership account. I hit "register" and it notices that it is, in fact, me. And it knows my name, it knows my information. I can associate multiple external accounts.
Now, this application lets me upload clips of all my favorite kind of Build memories. So I can go and say upload here, and then pull in some of the videos that I shot of the hackathon, some of the hard work that the guys were doing at the hackathon.
And there we go. I'm going to upload this video. There we go. (Laughter.) That was all planned. So that's being uploaded into Azure Blob Storage. I can click on that and then view some of the exciting work that we were doing at the hackathon recently. (Laughter.) The three guys who did that clapped. (Laughter.) (Applause.)
Now, the login page, though, was what was really interesting to me because I didn't actually write the code for that particular page, but I want to understand more what's going on there. It seems like it might be an interesting page.
So I'm going to take a look at login. I'm going to rick click and say "view in Page Inspector." And this is a feature in Visual Studio 2012 that lets me dig in a little bit more to my code and answer that age-old question: What line of code did that?
So I'm going to click "inspect" and then hover. And if I hover over, for example, that section, I'm getting a live update on the right-hand side that's showing me exactly which code in which file. So I can see that this came from the login layout, but I can get a little bit closer, I can see that those social buttons came from a partial view. When you start having a complicated application, you have layouts that have partial views that depend on other partial views, and finding your way around can be a little difficult.
Using a tool like Page Inspector, I can know exactly what's going on right down to the line of code that generated some HTML, and even update the CSS and markup in real time and see the updates within Page Inspector. So a really great feature for managing your websites.
Now, that lets me understand how that button got rendered, but I want to see what's happening in the authentication aspect of things. I've got this auth config, and this is all also built into ASP.NET 4.5. We have the ability to have a number of social identity providers, not just Microsoft, Twitter and Facebook, but LinkedIn and Yahoo and the ability to write our own. And this is all using the open source .NET OpenAuth library.
New in the ASP.NET fall update is going to be not just the ability to log in via Facebook and social identity providers like this, but also create Facebook applications from a default template. So you'll be able to file new and make Facebook apps with the fall updates.
After I logged in, I uploaded the video, but the metadata for the video was stored in a SQL database. So that metadata we're using Entity Framework 6 Code First, and I'm going to take a look at the video context here.
We are using asynch and await to store this. This is really important because I know this application is going to be really popular. I'm going to make sure that I do all of my database IO in a non-blocking way. I make my new video, I add it and then I use asynch in a way to save those changes asynchronously. That releases that ASP.NET thread and back into the pool and then lets that IO happen in a non-blocking way.
Then after that, we can even upload the video to Azure Blob Storage, also using asynch and await. Now, rather than running another application or going to the Azure portal, I can go into Server Explorer now and with the new Azure tools, I can see my blobs, tables, queries, all from inside Visual Studio, including my development blob and the blob in the cloud. I can even right-click on those, view the blob container. And I can see the videos that I've uploaded before.
Now, I want to be able to access these videos from an API, from a Web API. I'm going to take those videos and expose them out to a Windows 8 application. This is an existing ASP.NET app, but I can still add a Web API to it. I can use Web API inside of Web forms or MVC, it's all one ASP.NET. In this example I've got a get and a post, and you'll notice on this post that I'm not taking the video as a parameter, I'm not using model binding in this instance because I could be uploading potentially many gigabytes of videos. I want to read that in using an asynchronous model as well. I can bring in many, many gigabytes of video without tying up that thread, again, allowing me to scale.
So here I'm calling read as multipart asynch on the post. I've currently got a get that lets me get one video, but I want to be able to get multiple videos. So here is a simple get method for my ASP.NET Web API controller. This is going to return those videos as an IQueryable, so if someone visits slash API slash videos, it's going to let me get those, but I might want to be able to query them a little bit more from the query string.
So I'm going to actually add this new feature here, Queryable, that's going to now allow this RESTful service, this RESTful service that I have full control of to have the flexibility of an OData query structure. So now I can go like that. (Applause.) So I get a RESTful service that I have full control of, but I also get the friendly query structure of OData, so it's really the best of both worlds.
So I've got this application set up. And now I'm going to go into the Azure portal and I can make a new website. I'll say create with database, and I can type in a name of a website like let's say Azure Conf. It looks like Azure Conf is actually already taken because the Azure Conference is going to happen soon, you can check it out at AzureConf.net. Very subtle plug there.
But I'll say super awesome better Azure Conf. Then I can make a different server, I can pick in my SQL Server, put in a super-complicated password. But since I've already been deploying this all day, I'm going to use this application right here. (Laughter.) And what I'm going to do is I'm going to download the publish profile. And the publish profile is going to give me all the information that I could potentially need to publish this.
This is using websites in Azure and this week websites are available in all regions. So you can create a website anywhere now. Not just the western U.S.
So I've just done that, downloaded the profile, and that's sitting in my download folder. From over in my Visual Studio, I'm going to say build, publish, and I'm going to go and import that publish setting. So when I hit import, it's going to update this dialog with all the information that I need, all the passwords, all the user names, every technical detail that's required. I made that really, really long so you guys couldn't type it in really fast. Including that entity framework connection string.
So I'm going to hit publish on that. It's going to build and start publishing. And while that's happening, again, because I know this is going to be popular I'm going to go over to scale. And in scale -- looks like it's already published, that was pretty fast. In scale here, I can go and select not just that I want a free website, even though I get ten free websites, but I could say shared and have multiple instances or reserved and have even four cores and three instances of that. So I've got a lot of flexibility in my elasticity in Azure.
Now, here's the actual application. So this is running in production on Azure right now. And just like SOAP applications had WSDL to help you understand those Web services, Web APIs and RESTful APIs have online documentation that I don't want to have to write myself.
So I'm going to type in "slash help" in the URL there, and we're going to auto-generate documentation for the Web API, including the new API that I just added. If I click on that, I can even see in a sample response format that shows me whatever the JSON would look like when that gets returned. (Applause.)
And I've uploaded some videos earlier. And you'll notice when I run this, because I logged into Facebook, it knows that it's me and my Facebook authentication flowed through that. Here's my application. You can see all the different videos that I've uploaded of my friends, including a very controversial video of Scott Guthrie preparing for the keynote showing his process including some of the work that he does to get his hair ready and also some inappropriate moonlighting that he does. (Laughter.)
So I've taken an existing ASP.NET 4.5 application, I've added Web API to it, we've consumed that through Azure, we published it to Azure, we consumed it in a Windows 8 application, all just in a few minutes, and I hope that you have as much fun doing this as we did. Thank you. (Applause.)
SATYA NADELLA: So hopefully you got a good feel for some of the advances in Windows Azure websites. We're very thrilled to have .NET 4.5 support with all of the asynch capabilities, ASP.NET fall preview, some of the multi-identity support, the MVC update, the ability to build out these Facebook apps very easily, as well as the Entity Framework. So all of this is now available for you to be able to go try out on Azure, build these websites with this very rich set of frameworks.
We have lots of developers taking advantage of Azure websites, in fact, lots of people even building on ASP.NET on our Windows Server. One specific third party I wanted to call out was Murali, the murals development tool, basically you can take content from all over the Web and build these Web murals, and you see that screen shot where they have a very intuitive, immersive, fluid touch experience with all the touch gestures on IE that you can go play on your Windows 8 devices. They're also building a Windows 8 app.
When they launched in September, they got Tech Crunched. So they won -- they had over a million hits, they needed to scale up, they were able to take advantage of the elasticity of Azure and be able to sort of spin up more roles on the Web front end to be able to scale to their demand.
They're also a startup, so that means they're continuously developing and deploying. They've done over 1,500 deployments. They do something like 20 deployments a day, and Windows Azure websites makes all that very trivial, and so therefore it's a fantastic tool for anyone who's getting started and wants to be able to build rapidly, deploy rapidly and iterate. And these are all the capabilities that you can get from Azure.
So now let's make it a little more fun. Let's take even Scott Hanselman's app and make it richer. So first, let's say we take those videos that he was uploading and we want to start encoding it in multiple formats so that you can stream it to a variety of different devices.
You want to be able to do things like add subtitling automatically to those videos. You want to also, obviously, if you want to scale to lots and lots of devices, you want to start separating out your tiers. So you want to separate out your middle tier from your Web tier. Of course every tier communicates asynchronously so that you don’t get locks. You want to then really also have the capability to do signaling between what is happening on the back end in the data tier or in the middle tier to your devices through notifications and real-time signaling.
You want to be able to improve the performance of your application by developing a cache in front of your middle tier. So these are the kinds of capabilities that could take lots and lots of code from a developer. But what we've done is designed into Azure a set of platform services that makes building these cloud-scale applications very easy. It still requires architectural pop on your part, but we've really take the drudgery out of building these cloud-scale applications.
So to show you what Azure and its depth and breadth can do to help build a cloud-scale application very much like any Microsoft cloud-scale service, I wanted to invite up on stage Scott Guthrie. Scott? (Applause.)
SCOTT GUTHRIE: So a few minutes ago, Scott Hanselman walked through how you can build a modern app using ASP.NET that's capable of targeting both Web browsers as well as Windows 8 clients.
He then published that application up to Windows Azure with the cloud and took advantage of our SQL Server database as well as storage functionality.
What I'm going to do now is scale that app even further. The first way we're going to do that is by integrating another service that we're going to be shipping with Windows Azure this fall that we call Windows Azure Media Services. And what Media Services allows you to do is very easily ingest, encode or transcode video, and then set up a streaming end point that you can use in order to stream your video to the cloud.
What we're going to do here is modify Scott's application so that when he uploads video now, instead of storing it directly to storage, we're instead going to fire it off to Media Services, which will then encode it for us automatically, and then we're going to stand up a media streaming end point, which is going to allow our clients to be able to go ahead and stream it from a scalable back end.
And the beauty about Windows Azure Media Services is that it exposes a REST API that makes it really easy for you as developers to integrate within your applications, and it takes care of all the infrastructure necessary for us. So we don’t have to spin up VMs, we don’t have to manage our own encoders or streaming servers. Instead, Windows Azure Media Services does all that for us.
So let's go ahead and look at some code and see how we do it. So you can see on the screen here this is the Windows Azure portal. This is the same portal you saw Josh and Scott Hanselman use a little bit earlier. Earlier, you saw how Josh could create a mobile service, you saw how Scott could create a website. The cool thing here is I'm going to now just take advantage and click on this app services category, and I can easily create a media service. So this is a service I can use from within my application.
And I can give it a name. I can choose where in the world I want to run it, and I just go ahead and create. And in about 45 seconds, I'll then have a media service of my own that I can then program against and use for all my media scenarios. Now, I happen to have one already created with some content that we uploaded earlier called Build clips media.
So I'm going to click on it here, and you can see us drill in here. And one of the things you're hopefully noticing through all of these demos is we have a very consistent portal experience regardless of the services that we're using.
So, for example, I have a dashboard view here because I can program it with REST, I can download our SDK and then I just use our little manage keys button down here in order to get my developer key, and then I can just start coding against the service.
One of the things that we've introduced this week as well, though, is a way that you can actually try out Media Services without even having to write any code. In fact, I can just go ahead and click this content link at the top. What this will do is actually give me a nice browser portal experience that lets me try out all the different scenarios within Windows Azure Media Services, again, without having to write any code. So it's a good way to kind of learn about it.
So you can see I have a couple of jobs and videos already uploaded here. If I want to upload a new one, I can just go ahead and click upload, select the video, give it a name and click okay. And this is now going to upload the video directly from my dev machine up in terms of the Windows Azure Media Service account. And once it's uploaded, then, I can go ahead and do various jobs on it.
So you can see here I think we're done, great. And in a second here, it'll show up, there we go. So that's that video that we just uploaded.
So once it's uploaded there, I can choose to encode it in a different format if I want to. So if I'm ingesting video in lots of different formats, this is a really cool way that I can make sure that I can encode it in a consistent format that I know that all my clients can play.
And we have a bunch of preset encode formats you can use. You can target Silverlight and Flash, you can target HTML5, you can even target iOS. And you just go ahead and okay, and by doing this, we just kicked off an encoding job in the cloud. So Windows Azure Media Services will automatically take that job, put it on dedicated machines that we run, and spin up and do that encoding job for you, and you can see the output is already starting to show up here. And as our job gets encoded, it'll go ahead and be updated there.
Once something is encoded, I can then choose to publish it. So again, I can go ahead and hit publish. This is going to create a unique streaming end-point URL that I can use for this particular asset. And then I can go ahead and embed that within my application and start playing it directly. And then there's a media server that we're managing with Media Services that's doing all the back-end streaming for you.
And then the cool thing is when you actually want to play something, you can just go ahead, click on a video, click play, and even directly within the browser here, you can go ahead and test out your video, including with adaptive streaming. So very easy way you can test out and kind of learn how to use the product and quickly see the status of different jobs that you're working on.
But the cool thing about Media Services, again, isn't that you can do this all manually, it's the fact that you can actually code against it and just send REST calls and do all this from within your apps.
So, again, all you need to do is take the developer key, flip into your tool of choice, and you can go ahead and integrate this into your solution.
Let's go ahead and do that. So I'm going to flip into Visual Studio. And what you're seeing here is that same project that Scott was working on just a few minutes ago. So that same ASP.NET project.
Now, I'm going to go ahead and click on manage NuGet and I'm just going to use the NuGet package manager in .NET in order to install a little SDK library that is going to provide a nice .NET-managed object model on top of those REST end points. And so this is just installing it within my solution, makes it a little bit easier for me to code against.
There we go. And then I'm just going to update some of the code that Scott showed you earlier so that instead of storing that media inside a storage account, we're instead going to pass it off to Media Services to both store and code and publish. And doing that is really easy.
So what I'm going to do here is just replace these two lines of code. This code right here. And all this code is doing is connecting to my Windows Azure Media Services account. It's going to create a new asset in Media Services from the steam that was uploaded, get back a URL for it, and then kick off an encoding job to convert it to smooth streaming. Just a couple lines of code I can do that.
And then when I want to publish it so that people can stream it, I can just go ahead and call video services publisher, and this is then going to just call and publish that video on the job object that was encoded and get me back a URL that I can now pass off to my clients to play.
Now, that was basically all the code we needed to do. Just build it, good, complied. I can then right-click and publish this back to the cloud.
One of the things that we support with Windows Azure websites is a very nice incremental publishing story. And so you can see here, instead of having to redeploy the entire app, it's just showing me the differences between what's on my local dev machine and then what's in the cloud, so it makes deployment a lot faster. Those changes are now already live.
I can also, then, hit this with a Windows 8 client. So remember we have those Web APIs that we exposed earlier. So let's go ahead and see this app here. I'm just going to launch a Windows 8 app here. I can pick, I can choose upload video. And to make this fun instead of just picking a static file, we're going to turn up the house lights a little bit and let's see if we can get a picture of you guys. Smile. (Applause.) Okay. That looks good. We're going to hit open, and this is now uploading this off to Windows Azure.
We're going to use the exact same REST URL that Scott published earlier with his Web APIs in the middle tier. This is going over Wi-Fi, so it's very exciting. And this is going to talk to that Web service on the back end, it's going to then fire off a REST call to Windows Azure Media Services and it's going to kick off an encoding job, which is then going to start encoding it. And then once it's done, and you can see it just completed, it will be able to be played through our streaming server in the cloud.
Just to sort of prove this is real and emphasize how dangerous that Wi-Fi demo was (laughter) -- my heart is now beating again. I'm going to go back into the portal, click the content tab, and you can see here that wildlife thing we did earlier, and hey, we've got two new files that have just shown up. One is the file we uploaded, and one is an adaptive streaming job that we just kicked off.
And if I go ahead and hit play, what I should be able to do inside the portal is see all of you. (Applause.)
So very easily there, you can see in just a few lines of code we could stand up a media service, we could go ahead and start calling it from within our application and without having to change any of our client code because our Web APIs are the same, they just work.
So let's go ahead now and make this even richer. And, you know, one thing to call out was that was a nice seven-second clip of video, which is good for some scenarios. But for a lot of media scenarios, you might be uploading, you know, hundreds of megabytes of video content. And it's going to take minutes or hours even to encode all of that in all the formats within the cloud.
And what we're going to want to be able to do for our client experience to make it a lot richer is be able to provide real-time feedback to the users as to the status of their different jobs. So that's where we're going to kind of go next is kind of update our application so that we can provide a continuous real-time push from the server to the client letting them know what's going on.
And to do that, we're going to take advantage of a really cool new library that we're adding to ASP.NET this week as part of our fall preview called SignalR. And what SignalR does is it makes it incredibly easy for you to maintain a continuous connection with your clients. It supports Web sockets, so for devices that support Web sockets and if you're running on Windows Server 2012 and .NET 4.5, which are now fully supported inside Windows Azure, you can use a nice Web socket connection and push messages out to your clients over them.
What's nice about it is it also will fall back to HTTP long polling, so if you're connected to an older device that doesn't support Web sockets, it will still work with the exact same programming model.
And we can use this now to be able to provide continuous feedback from the server to the client in a very efficient, scalable way. And SignalR will scale even to hundreds of thousands or millions of client connections. We'll have some great talks later on this week that we're talking about it more.
Now, to make this thing even more scalable, I'm going to also, then, introduce another tier into my application. This is going to be a background service. It's going to be a non-UI service. And what it's going to do is it's going to monitor our Media Services accounts. It's going to look at all the encoding jobs that are going on within it, and it's then just going to feed messages to my Web app with SignalR, which will then broadcast it to the client. And then my UI on the client can just provide a nice, continuous update UI feedback to my users.
So let's go ahead and walk through how we do this. So we're going to go back here to our dev machine and go back to our website that we have right here.
Now, the first step we're going to do is we're going to convert this from being a single-tier website to, instead, being a multitier what we call cloud service inside Windows Azure. So a cloud service can have multiple tiers that run on multiple machines and kind of provide a nice way to compose them together. And converting a website to be a cloud service is really easy. All I need to do is just right-click on the website and say add Windows Azure cloud service project. This is now going to add into my Visual Studio project a Windows Azure cloud service that kind of defines the overall shape and structure of my cloud service app.
And you'll notice it's automatically added a role, think of it like a tier, that points to my website that we built earlier. And I don’t have to change any code within the website in this particular scenario.
I'm then going to go ahead and add one more tier. I'm going to create what's called a worker role, and I'm going to call this background worker. And this is going to add another project into my Visual Studio solution, and this worker role is a non-UI kind of role. And you'll notice the default template just has a run method and just spins forever, sleeping and writing out trace lines.
So what we're going to do, though, is we want this background worker to talk to our media service. And so to do that, we're going to add a reference to our class library that contains all of our media service references. And then I'm also -- because we're going to be firing messages with SignalR, I'm going to add in a reference to the ASP.NET SignalR client library to this project as well.
There we go. And then all I'm going to do is just replace this run method here with the following code. And what this is doing is it is connecting first to SignalR and getting what's called a proxy to a hub, which I'll explain more in a little bit. And then it's just also going to do a loop repetitively, sleeping for five seconds, and then every five seconds it will wake up. It's going to connect to my video service, and when the job is done, it's then going to publish it and then continuously it's going to be sending updates to my SignalR hub by just invoking the video updated method. That's basically all I need to do in that project.
In my middle tier, then, inside my ASP.NET app, this is what my SignalR hub looks like. It's just a few lines of code. All I need to do is define it as a hub, called notifier, and then I basically have a helper method. And when this method gets called by the background service, so it's going to be firing messages to it, it's just broadcasting that message to any client that's listening on the hub, and this, again, works with both browsers as well as devices like Windows 8.
And then let's just go ahead and run it. Now, we've converted it from a website to be a multitier service. We have both a Web front-end and a back-end worker role. One of the things that's nice about the Windows Azure tools is that we kind of provide a nice way that you can actually test this out without having to have multiple machines on your desktop.
So, for example, if I pull up the emulator here, you can see we're kind of simulating two roles running on my dev machine. And you can notice we're updating this trace statement, getting Media Services active jobs. It's looping through there, again, every five seconds it will go ahead, get new status, check to see what's done, and then push the notifications out to SignalR.
So to connect to this, then, let's go to our Windows 8 app and run this as well. Let me show you real quick what the code looks like before I even do that.
And now when I go ahead and run this application, what I will see is sort of a view of my app here. I can go ahead now and upload a new video. This is running on my dev machine so I don’t have a camera. So I can select a video. Going to upload it now to my local emulated environment that's running, again, on my local development machine. It's then calling out to Windows Azure Media Services in the cloud, and so it's going to be, again, making another REST call out to Windows Azure Media Services, which is then going to store it, kick off the encoding tasks on it.
And now when I go back here, you'll notice that our UI is showing a placeholder for that video. And if you look closely at this time stamp here, what you should see about every five seconds or so, notice it's changing. And that's basically because our background service is waking up, checking on the status, firing messages to our ASP.NET app, which is then broadcasting it to all the listening clients that are connected.
And the beauty about this architecture is it will work not just with one machine on my local desktop, but if I have thousands or hundreds of thousands of clients connected, they'll all get those real-time updates, and I can kind of provide a nice user experience for them to use.
So we've built our app now. Let's go ahead and deploy it into Windows Azure. Doing that is pretty easy. You saw how Scott could right-click and publish a website. I can now do the same thing using Windows Azure Cloud Services. All you do is just right-click on the cloud service and I can then pick what part of the world I want to deploy it into. Go ahead and hit publish, and that's going to go ahead and kick off a publishing workflow and upload my app to the cloud.
So let's take a look at what's going to happen there under the covers. So we now have a multitier application inside Visual Studio. So it's got both a front end and a back end. When I go ahead and hit publish, Visual Studio packages that up into what's called a service package file. It's going to be like a zip file, and upload it into Windows Azure. And then what Windows Azure's going to do is it's going to find appropriate servers to run within the datacenter, automatically select them for me, image them with whatever operating system or dependencies I need, and then install my application on them.
And once that application is deployed on it, it will automatically wire up a network load balancer and start sending traffic to the application. And the beauty about cloud services is it's fully automated for me. I don't have to manually set up the machines. All that is handled for me by the core platform.
What's nice about the platform as well is once this app is deployed, if at any point I run into a hardware failure on the machine, one of the machines or nodes that I'm using, Windows Azure will automatically detect it, pull that machine out of network rotation, spin up a new copy for me to use, and then add it back into rotation all automatically. And the beauty here is I'm not getting a page at 3:00 in the morning where I have to go and manually do this, the system, again, takes care of it for me automatically. That's kind of one of the nice benefits that you get with this model.
So we've walked through what happens when you deploy the app. Let's go back now into the portal and see how we manage it. So I can go back into the portal here. I can click on my cloud service and, again, just like you saw with websites, with Mobile Services and with Media Services, you can see a very consistent experience that we provide for Cloud Services as well.
So it's giving me a nice dashboard view where I can see the overall health of my application and I can actually see both individual machines, CPU and network and memory access, as well as the aggregate view of it as well. And I can go ahead and click on individual instances, so these are VM roles that are running for me inside Azure that I defined with my cloud service. So I had, again, both my front-end roles as well as my back-end roles. And if I wanted to, I could reboot them or I could connect into them in order to sort of debug anything specifically.
And then the cool thing is I have a scale tab as well. And one of the nice things that we provide with Windows Azure is the ability to take that package that we uploaded -- and if I go really big, you know, I could say, hey, let's run this on, say, 380 front ends, and then let's scale up 12 back ends in order to handle it. And all I need to do is hit "save" and Scott Hanselman's credit card is going to get really hammered. (Laughter.) Do we do it?
Yeah, and the beauty here is, again, the system will take care of it all for you. It will automatically handle provisioning that. I don’t have to write any custom scripts. The core platform takes care of all that for me. We're going to be gentle to Scott and hit decline there.
So it's just one kind of the nice benefits that you get. And, again, all in a very consistent way throughout our management experience.
So you've seen a lot of great services that we're providing demoed here this morning. One of the things I want to talk about also is how we're working on enabling the broader partner ecosystem of companies that are delivering other great services and bringing them into Windows Azure as well. And one way we're doing that is by releasing our Windows Azure Store that's directly integrated into our management portal this week, and it makes it incredibly easy in the same way that I could go ahead and say create a new website, create a new virtual machine, mobile service, et cetera, I can just go inside the portal and say new store, and this will go ahead and bring up a list of services provided from our partners.
So I can see services ranging from address checking, so if you want to make sure a customer's address is real, IP address checking, Dun and Bradstreet insights, MySQL Database, MongoDB database or monitoring tools like New Relic all directly within this portal. And the beauty is I can click on any of these and go ahead and purchase them and automatically add them to my Windows Azure subscription without having to enter a new credit card, I can use the existing payment mechanisms I already have set up and just have them automatically added to my service.
So with Windows Azure, we've got lots of built-in monitoring support. With System Center we've got our own monitoring solutions. The cool thing with New Relic here we'll just try out as one example. They provide other rich monitoring and outside-in monitoring support that you can take advantage now easily within Windows Azure. They're actually offering a free edition of their standard package that's available to all Windows Azure customers, and you can run it, actually, on any number of servers. And if you want, you can actually take advantage of their professional edition, which provides more features.
Again, you just go ahead and click next twice and it'll go ahead and provision it for you. And once you do that, it'll actually show up now directly inside the Windows Azure management portal as well. And so I just click on this add-on link on the bottom, I can click there and drill into details about this New Relic service that I set up earlier.
What's cool here is I can see kind of what's going on at a high-level dashboard view of it. I can get my connection info. So if I need my developer key in order to install, say, a NuGet package in order to start logging data that sends to New Relic, I could do that. I could also upgrade it to the professional account later if I wanted to.
And another cool thing is then we have this "manage" button that you can click. And what this does is this will now do a single sign-on for me into the New Relic management portal for the service that they provide. What's cool here is now in a single view, I can actually now drill in through the New Relic portal into my Windows Azure apps and services that are running in my cloud. So I can see how my app server is doing from a health perspective. They have some pretty cool features that allow you to see how your browsers are doing, so you can actually see a browser view of responsiveness of the app in real time as well as how it's performing from various geographic locations around the country, around the world.
They even have a pretty cool transaction link where you can go ahead and set up KPIs for key metrics within your application. You can then drill in to see how they're performing, again, both on the browser view as well as the server view. And if you're seeing any errors or anything that's taking a little while, just click on one of the transactions that you've logged, and you can go ahead and directly within their portal view how that system is doing and see both where you're spending your time in your .NET code as well as drill into trace details and actually see exactly where in the application you're spending your time on which methods. It's all live, it's all in real time. It's not a debugger profile. This is actually going live against your Windows Azure service.
Now, the cool thing about all these things is they're all available to use today. So everything I've demoed here today, you can go ahead now and sign up to a Windows Azure free trial and actually do on your own machine. It offers a whole bunch of power, a lot of capabilities, and we're really looking forward to seeing what you build with them. So thanks a bunch.
SATYA NADELLA: So that gives you a great flavor for all the capabilities across Azure. So we're very pleased to have a new SDK update, which has .NET profile as well as the port for Windows Server 2012 in Azure. That means all of the capabilities that Scott was demoing are all now things that you can use in your worker and the other roles on Azure. We also are very pleased to take and make advances on our past services.
In fact, one of the things that many of the customers who have been scaling on Azure have been asking for is a dedicated cache service that we can imagine as you scale on Azure that's one of the things that you want to be able to do improve performance. In fact, the Bing apps that are all on your Windows 8 slates use Azure on the back end.
This is one of the features that they've been pushing us for, and we have that GA now. So any of you who are really scaling and seeing a lot of traffic on Azure, we would sort of say that you can go use the cache service and in a dedicated mode.
We also added some capabilities to our media platform, which is still in preview, that's another PaaS service that Scott showed, and that's going to come out later this year in a GA form.
So, the thing that I think is very exciting from a developer perspective is Windows Azure Store. We're at the very beginning of this journey. We're just getting started, but we think that this represents a huge opportunity for any of you who are building finished services that are targeting both IT professionals and other developers, because we think that coming into Azure to be able to use some of the services that we provide, but seamlessly to be able to provision and integrate services, both data and application services, is something that I think is going to hold a lot of promise and especially improve the productivity of anyone building an application. So data services that allow you to do things like address check, credit check, as well as monitoring services from New Relic and AppDynamics that Scott showed, as well as our first-party services that have more choices around your data tiers. So for example, if you are interested in having a Mango Store, you can go to the Mango Labs PaaS services provided through Azure, or even the MySQL Store, and then you can get that as well using Windows Azure Store.
So, we think that this is the beginning of what can be a huge productivity boost for anyone building applications on Azure, but more importantly also another huge opportunity for those of you who are building applications and want to reach IT and developers, we think that this can be a fantastic channel.
Now, any software cloud scale application is going to be incomplete if we don't talk about the new life cycle of dev ops. We have done a lot in Visual Studio 2012 and System Center 2012 to really bring forth this new life cycle. And we think that this is going to be the thing that really drives the fundamental transformation of how we approach both developing applications as well as really monitoring and continuously improving your applications.
The thing that we want to talk about today is team development. In fact, at last year's Build we launched the preview of our Team Foundation Service, which is an application service that's built on Windows Azure, and we are very pleased to announce the general availability of the Team Foundation Service today. And to show you some of the new capabilities I want to invite up Jason Zander.
JASON ZANDER: Thank you, Satya.
So, you saw some really cool demos today from Scott, and Scott, and Josh, but we're working together as a team. And one of the things we need to be able to do is do a really good job coordinating with that. So to get our project up and running I've got Visual Studio right here, and we're going to be able to do what you expect. I have source control. We're bound to Team Foundation Service, our own cloud service, running Team Foundation up there. I could do all sorts of things with that that you'd expect, request code reviews, look for my work items, basically everything I need to do to get our team functioning together.
Now, more likely one of the things I'm going to do is come right in and look at our Team Portal. And one of the things we want to do is capture the key artifacts that are really important to me on an ongoing basis to understand where is our team at. You see that our home page here, it is using a tile format. You can update the thing so we can get more information on how we're doing on our burn down, our backlog, builds, all those sorts of things, in one nice place totally customizable. It makes it really super simple for me.
Now, as we go back and plan as a team, the other thing we want to do is, we're using Agile and we're using Scrum. So I want to be able to plan what my product backlog looks like.
We've tried to make this also super simple. You just go right into the browser. We're sitting here in Redmond today, maybe we could use less rain, but we're going to make it really super simple to put these things in. And can now groom my product backlog and understand what I want. Again, I can move these things around, figure out what the priority looks like. Everything happens right here. Now, the other cool feature here for our team is I can turn on forecasting, and what that does is it uses the momentum we've had so far based on efforts and what we've retired so we can get factually an estimate of where would these things land. So as I'm going through and planning this out, I can pick the right combination of things, and get a feeling for what's going on.
Now, the other thing we've added into this, if I go over to Board right here, we've added a Kanban supporter Kanban, just depends on how you want to pronounce it but many of you are using that. You asked for this feature. And it really gives me great control over the flow of things coming through the system. So I can prevent myself from getting too over-subscribed.
So I've got, for example, a set of approved items. If I were to drag one of these over to committed you'll notice that I've got a red right here, and my number with the value that I've set is actually key to this. So we've said to our team, look, let's not get more than maybe four items that are in committed and being worked on, otherwise we might get ahead of ourselves and get a little bit too much at once. So I could set that value myself, and I could pull this back over into the approved position in which I'd be able to control that flow.
So, this is all based right on top of Team Foundation Service in Inline Repositories. It's in there. Now, of course, we are executing against the current sprint. So Sprint 3 is underway, it's got a set of features. Now, this view is really cool because I can once again look at how my team is doing, and I've got this capacity view over here. So I could figure out based on how much work does everybody have. If I happen to be falling behind, how am I going to go catch people up and move things around, and just kind of see how are we progressing overall. So that's pretty straightforward.
Now, the next thing I'm probably going to do is go over to our task boards. We're going to be doing our stand-ups, and making sure that we can every day figure out what our status looks like. So we have the view here, of course, that we would expect with what's in progress.
Now, I think there's two things for Build that we really want to land. I'm using a touchscreen here. So I think the first thing we want to do is make good on what Satya said, let's drag this over. TFS is now free for teams up to five. You've got small teams, knock it out. (Applause.) Super easy to get going.
And then, of course, for you that are MSDN subscribers, of course we want to make sure that you have a free access to this as well, so you're going to be able to get out there and get going right on top of it, super simple.
And I can get this site set up in basically under one minute by the time I click and go. There's not any extra provisioning of machines and that sort of stuff to do. All right. So we've made this progress on all of our content, our work has a backlog but we're making progress on that. But it's kind of necessary but not sufficient, we have to get the code into the hands of our customers.
So, the last thing let's go ahead and take a look at, let's go over to the Build Tab. Now, one of the things we have here is because my source code is there, we're all collaborating, then when I do check-ins, it's going to get queued up. So if I retire a task and put it through, I do a check-in in Visual Studio. I can come over here and just queue up a build and click okay. I'm now asking Team Foundation Service to go out to go through that build. So the build is happening in the cloud. We've enabled it up there, no more build machines to configure for this. And once I get this thing going, I'm going to execute the build. Yes, you can clap for that, that's pretty cool, a set of build controllers, yes. (Applause.) It's nice. It's just a click and a go. I see my normal build template.
Now, once I get this up in the list and I get this thing up here and running, it's going to go ahead and run everything. It's going to build it. Obviously it's going to run all the test features I have against it. And I have the choice, and you will see going through here, I can also hook it up for deployment. So that cool website and the back-end components that Scott and Scott wrote, I can actually have those things automatically deployed to Azure once I'm successful. If I pop over here to the Azure site you can actually see the active deployment, the list of things we've got through.
So, everything is nice and integrated. Now, that way when this build finishes, if it's successful, I can use continuous deployment. It's going to pop it right out there. If I do have a reason for moving back to the previous version, I can simply go in here and tag it backwards to the last one that we had, and we're all set up and ready to go.
Now, this is a really simple thing to get signed up for. So if you haven't tried it out yet, I'd definitely encourage you to do it. You'd be amazed how fast you can get your team up and running. Just go up to TFS.VisualStudio.com get all the background data, everything is there. It's all set for you.
Thank you very much. (Cheers, applause.)
SATYA NADELLA: And, as Jason said, it's very easy to sign up, and one of the things that we have is a perpetual free offer for any team that's less than five people. So therefore I would encourage all of you to go sign up and play with TFS, especially the cloud build service. It's such a boon in terms of developer productivity that I think you'll have a lot of fun with it as you use it inside of your projects.
Now, we've talked a lot about our Azure capability, our framework capabilities, in the context of consumer apps, but everything that you saw there is very relevant if you're building applications for organizations or enterprises. I wanted to talk about in fact, I would say, when it comes to the enterprise adoption of Windows Azure we're having a tremendous amount of traction. As you can imagine enterprise customers are looking to have the flexibility to support their realistic needs today. So the combination of Windows Server and Windows Azure, and the consistency across these, from a development perspective, an identity perspective and a management perspective really supports their capabilities today and then takes them into the future.
So, we are seeing lots and lots of enterprise customers adopting Azure, and we think that that represents a huge opportunity for all of you developers who are building applications that target the same enterprise customers.
I wanted to highlight three specific things that I think are great opportunities as you look to build apps targeted at organizations. The first one is extending Office. Office 365 is going through unprecedented growth and you all built in the past many, many applications for platforms like SharePoint. You have integrations with Office, now. Office comes with a very modern developer interface to it. We think that that's a great opportunity. We have done some fantastic tooling. There are sessions here. There will be sessions even at the SharePoint conference later.
We think that that's a great opportunity for you to integrate Office to be an integral part of your apps. But, the one specific thing is Windows Azure is a back end for SharePoint. So if you have a document workflow that you want to make much richer, you can access the list data from within SharePoint and then have all the logic on document workflows contained in a Web container on Windows Azure. We think that that loosely coupled style of integration is a way for you to be able to scale out your application and really take the benefits of both integration, as well as to have the flexibility to move your application forward.
Another service, which I think is very key when you approach enterprise scenarios, is service bus. If you think about most enterprise applications, many of them, for example have both their business logic and data inside the enterprise, but they want to project new experiences on consumer devices. And once you do that you may even use the cloud service to do the relay. But, you want to be able to have a secure connection back to the business logic, as well as data. And that's where service bus, which is a first-class message passing system, which also has a synchronous way to call into business functions and business logic functions and end points within the private cloud. We think that this class of hybrid application development is what we see time and again in the enterprise customer space. Many ISVs are building applications that are natural extensions for even their on-premise application to have a cloud peer, which then connects back to their application logic, using service bus. There's a session later in the conference I would encourage you to go to learn more about hybrid application development and service bus functionality.
The third one I want to talk about is identity. You heard us talk a lot about how we made it simple, both with Azure Mobile Services, as well as ASP.NET, to have all these consumer identities just be naturally part of your experience. The same goes with organizational identity. The most widely deployed organizational identity system is Active Directory. And now with Windows Azure Active Directory you have that same organizational identity system in the cloud. So if you want to have single sign-on capability with Office 365, it's one API away. You want to get additional functionality, where you want to intersect the groups within Office 365, all tenants; you can now call it through an API. If you want to add additional high-level functions for things like multifactor authentication, or rights management, again, there are additional APIs.
We think that this really gives you a huge boost, because many of you as application developers are trying to target organization, but you have to do the dir sync federation, which all of that you don't have to, because basically with Office 365 we have done that with one SaaS service, and we can amortize that across all of the other SaaS applications through a set of APIs in Azure AD. We think that that's a very, very rich capability. Again, there will be sessions later in this conference that I would encourage you to go learn. I think the combination of these three specific services, with everything else that you saw from Scott and team, can make it very attractive for any developer building for the enterprise, especially when coupled with the traction we see in the marketplace, where Azure is one of the preferred clouds for enterprise customers.
And to sort of give you a flavor for one of the ISVs that's taking advantage of Windows Azure and Office 365 in this fashion, I wanted to have a video clip of Workday, Aneel and team, which is a fast company that is hot today. They're building financial services and HR services using an SaaS approach and targeting enterprise customers. So I wanted you to hear directly from them as to how they're approaching our platform. So please roll the video clip.
So, that sort of gives you a very good example. If you already have a SaaS application and you wanted to sort of really exploit Windows Azure capabilities, you can get started by just thinking about Azure AD as a service that gives you single sign-on with Office 365. Of course, building a client for Windows 8, or Windows Phone 8, which in this case Workday is building a fantastic touch-first client for this platform. Those are the ways you can approach the platform. It's not an all or nothing. In fact, you can incrementally build into some of these capabilities, based on your needs.
The last pattern I want to talk about is data-centric. At some level we talked about data throughout. There was data in the first demo we did and Scott Hanselman's demo, as well as Scott Guthrie had a lot to do with data. But, we can do more. And we are building the data platform to do more. So you first of all want to build a platform that's fully capable of being able to store any data, any size, so all of the different data types that you may have, blobs, tables, SQL. We also want to make sure that we have all of the different types of processing capability on top of that data. You may want to do scale-out OLTP. So this is when you think about SQL federation-style ability to do transactional applications on the back end. You want to be able to do real-time processing of streams. So stream insight service on Azure helps you be able to take stream data and reason over it.
You want to also be able to really take MapReduce and reason over lots of your data. So this is an offline process that you may want to run, and we have HDInsight, which is a new service on Azure that you can use to be able to do Map/Reduce jobs using Hadoop. Now, it's not just the fact that you are able to do all of this processing. You may then want to do one of two things. One is, you may want to take all of that data and add machine-learning models that drive features in your application, like a recommendation list, like even auto complete in the search box. Those are all things that you want to build and you want to be able to use all of the data to be able to drive those features.
You may want to take the output of your big data job and then load it up into an in-memory distributed database, like SQL Analysis Services, and then enable Excel users to be able to do queries, and do exploration around that data. Those are some of the rich capabilities across the entire seamless data platform that we want to be able to enable you to incorporate into your applications. To show you some of the capabilities, again, in the context of even a client app that you may be building, and how this richness can be part of that client app, I want to bring right up on stage Dave Campbell from our SQL team.
Dave. (Cheers, applause.)
DAVE CAMPBELL: So, you've seen a lot this morning. I want to take you all the way back to the beginning. As Satya mentioned, we have a number of large-scale services running at Microsoft. And we are using data and the ability to reason over and derive insights out of the data that we're getting from the services to enhance the services, to improve them. So the portal that you see, the portal team is actually doing A/B testing, showing different version of pages to people, real-time collecting the data, and going on. One of the things that Satya just mentioned was, doing recommendations.
And what we're going to do here in the next few minutes is I'm going to basically run you through how you can become, if you will, sort of a service whisperer and learn how to listen to the services talk to you, to be able to refine data and to create your own insights at scale.
I'm going to start with the application we've been using all morning, the Build Clips application. And I want to call your attention to just where the recommendations are. The version of the application you're seeing right now is just listing the videos recommending them based upon the number of likes. So one of the things we've done was collected all sorts of information, because people have been filtering videos, they've been tagging them and such. We're going to come back to this in a few minutes. And what we've done is we've actually stored a lot of log and trace data from the application. And I'm sure many of you are already capturing trace data from your apps. So we've placed it off into Azure Blob Storage, cheap, extremely elastic, I can just continue to throw data into it. We've got a container that holds our application logs.
If I take a look at that, we've got at this point tens of gigabytes that could go hundreds of terabytes or whatnot. We'll come back to that in a second. But, all we've done I wanted to share this snippet of the log file. And you can see that we have a time stamp, we have a session ID, we have sort of a rough geo-coding here. There are a lot of ways you could get that. And what we've encoded here is just some of the actions, some of the navigation through the application.
So, the things you might want to capture here is how many times did people play a video all the way through. When do they pause, when do they stop, when do they bail? And you don't have to build a complete schema. You don't know what sorts of questions you're going to ask out of this.
If you look at it, it's simply a comma-separated file and some of the attributes we've placed in here we have other markers that make it fairly easy to parse. So we know which videos were displayed, which were selected. And to process these log files what most people are using today is something called Hadoop, which I'm sure everyone here has heard of. What we announced last week was HDInsight, Hadoop for Windows Azure, Windows Server, and there's also a Web platform installer version that puts a one-box version of Hadoop on your laptop. So you can go get that right now.
If you've heard of Hive, Hive is very much a structured query language, looks an awful lot like SQL. And you can do that right here in the interactive portal, but for me and a lot of my friends one of the third-party tools that we've fallen in love with is a thing called LyncPad. I see a couple of heads nodding out there. It's a great tool and what I'm going to show here is just executing a Hive query, which is basically binding a table to that comma-separated file that I showed you the snippet of earlier. So I'm going to go ahead and run that. And this will run very quickly, because while we've got tens of gigabytes of file, all it is doing is actually defining the metadata and binding over it.
So, now if I refresh that what I'll see is the video app logs under here. So now here is the first surprise maybe for you. Now, I'm showing you a query that I'm going to run over those files. And for those of you who have used Lync Query Comprehension Syntax, this looks familiar to it. In fact, it is. So what we've done is built a Lync provider over Hive HQL. So we'll actually map this into HQL and then run it in the back end.
So, I'm going to start that off, and this is the thing that I refer to as information production, where we're going through that file and we're going to transform that information into different forms. And typically the next phase in the workflow is where you're trying to figure out what's going on and how to reason all of it. And we're going to go ahead and use Excel for that.
And we've actually integrated Hive ODBC into Excel. So the results of that last query we can deposit into a table. That can be an HDFS file, or we can put it into Azure Blob Storage right now. So what I'm going to do here is go back and here's some data that we've just loaded from that last job that we produced, and as I found of late one of the most fascinating charts for the first look at all this large data is just basically a scatter chart. So with this true of form on Halloween we have something that looks like a broom, but what this is showing on the X axis is the number of views, and here's the link of the video. So we can see that those videos that have gone viral are the 30-second clips. Most people are just watching a very short one.
Another thing that I could have done very easily, if you recall that file, was just basically do a group via sum of all of the video counts by countries. And then what I can do over here is go into PowerView, and this is really cool. You have to understand, I've been a database guy all my career. I usually show demos of transactions with two console windows and such. But now, with the tools we have, just like that we can geo-code those country names and show you where the videos are coming from, so you can start to reason over where things come from, where they're happening.
The final thing I'm going to show in Excel is just a very quick graphic that shows the distribution of views of videos. And we have a head, which is a tremendous amount of people watching a small number of videos. So based upon looking around, developing and validating some hypotheses, what we decided we want to go do is build a user specific recommendations engine, and in order to do that we have to do information production at scale.
So, I'm going to go back over. This is the Web service that is serving the recommendations right now. And if I go into the controller, I move the recommendation controller and go show you that very quickly. So what it is doing right now is just basically showing the top videos based upon likes. And I'm going to show you how you can go over and then create a Map/Reduce job that will do something a little bit differently.
So, in this project I have several Map/Reduce jobs. So here's a mapper. One thing you'll notice is, maybe if you've Hadoop you'd say it's a Java-centric thing, we have a .NET SDK that we've developed. The source code is available on CodePlex, it's available as a NuGet package. So if you're a .NET developer, it's really, really easy to develop Map/Reduce jobs on HDN sides.So what this is doing as a mapper, it's taking those input lines that we saw on that snippet earlier, and the infrastructure of HDInsight is distributing them across the cluster. And so each of this is inherently scaled out. So all you do in the map job is basically take in the strings, parse it, do some processing and then you emit a key value pair. That's the map phase. And then if you go to the reduce phase, what you wind up with is being called, again, HD Insight does the shuffle to align all of the keys together, and then gives you a key with all of the mapped values with it. So then you just write a simple reduce function, override that. You can do whatever you want.
So, you can basically concatenate a number of strings together. Here we're doing it in the comma-separated way, processing that, and then at the end you can emit either another key value or another line that will go back out.
Now, the results of that we can write anywhere. And in this particular case, we're going to place the results of our recommendation in a SQL Azure DB table I'm going to show you in a second. So what I added here is a number of mappers and a number of reducers. In the SDK you can actually define and execute Hadoop jobs as well. So I collect them all up, and then if I just press F5 I can run them.
Let me just describe real quickly how this algorithm works. So we have basically what's sometimes called a bipartite graph of users and then videos, and we want to associate them through some weighted associations. And the way we're going to do that is, we're going to look at the tag profiles of what those users have searched for, and then based up on similar tag profiles, we're going to show them and make recommendations for similar videos.
So, while this is off and running, I'm going to go back over to the controller that we used before, and I'm just going to real quickly show you in the server explorer, when this is all done, we're going to deposit the results in a table that just contains the user ID, a ranking, a ranked set of videos for recommendation to that particular user. So get rid of that. And then in get recommendations, I'm simply going to change the code here to call, serve, if you will, from that particular table. Once I do that, then I actually run this. As soon as this comes up, I'm going to go back over to the application we started with, the Build Click application. So this is the previous version. I give it a second to come up, and then hit refresh. If all goes well, I'll wind up with a new set of recommendations it defaulted in the first time and there we go.
So, now based upon this, I see Anders Hejlsberg; it looks like Don Syme of F# I should mention we've got great F# support, the F# team has done great things there and then Mark Russinovich, so all of my geek buddies, so clearly the recommendation system is working.
So in just a few minutes I've showed you how you can basically take data that you're probably collecting already from the service using the data platform, using Azure Blob Storage to store those logs, process them in a variety of ways with tools that you already have, and skills that you have as well to produce insights, and then turn around and continuously improve your back-end services without changing the application at all.
So, there you go. Thank you very much.
SATYA NADELLA: Okay. So we are very excited about HDInsight as a single box deployment that you can install and play with, and then also Data Sync Service, there's been an update to that. This is very, very critical for anyone who is building these hybrid applications where you want to take data from SQL Server and project it up to the cloud. Again, lots of rapid progress on the data side.
“Halo 4” now, what was that slide transition about, like how did he go from data to “Halo 4.” First of all, it's an exciting release coming up on November 6th. And the story behind “Halo 4” is very, very pertinent to this conversation. The “Halo 4” team has looked to sort of really adapt to the new platform. So the cloud is going to be very central to how they've approached the entire development cycle. So come November 6th, first of all, since they will have peak loads, they do want to take advantage of the elasticity of Windows Azure. They are also going to take advantage of compute cycles and the rendering of bit from the cloud.
But perhaps the most revolutionary thing that the “Halo 4” team did was to change the entire way they approached their code base, they refactored it so that now it's got both a console part and a cloud part. And also how they do their development. In fact, they use Azure for their dev tests. So every developer on the “Halo 4” team is that much more productive because the cloud helps them to be more efficient with the infrastructure around dev tests.
The other thing that they're also doing is insights. In fact, they are going to be one of the first customers to be using a lot of the HDInsight infrastructure, where they log a lot of data, this could be quality-of-service data that they want to be able to reason over, for example, what's the quality that they were able to deliver across a variety of different bandwidths. They also want to add features into “Halo 4” that are driven by some of these machine-learning models driven on top of the data that they collect.
And, of course, they also want to take all of this data back into SQL Analysis Services and enable their product managers and others to gain insight in terms of the usage patterns that they see. So that's a real here-and-now for a game developer on the console to be able to the use the cloud to not only take advantage of delivering the product, but also change the way they approach their code base as well as their development cycle.
We've been hard at work, and hopefully you got a chance to see all of the things that we have built into Windows Azure, into Windows Server, into our frameworks over the course of the last year. We've had a major Server refresh on top of it, continuous updates to Windows Azure from last Build to here. And this pace will continue.
You can count on us to learn from your feedback and to be able to sort of really make sure we deliver the capabilities that you want of us on our back-end cloud services as well as some of these features we've shipped on Windows Server. So the entire consistency between Windows Azure and Windows Server is a promise that enables each of you to know that there is no lock-in with our platforms.
So if there is anything in this conference which is what I wanted to conclude with, I think that this BUILD is distinct and different in the sense that we're not just evangelizing a new platform, we are really handing over the keys to you to be able to let your imagination and innovation drive the next generation of applications that are going to change the world. We believe we have the platforms for you to be able to do that. We believe there is a huge opportunity for you to exploit the platform capabilities and even the marketplace of opportunity in front of us.
So, therefore have a fantastic rest of the BUILD and please give us the feedback, during the session, as well as after, and then we will continuously keep working on improving our stuff.