 Microsoft's been doing a ton of new cutting-edge things with technology these days and always trying to up the last feature in development. We just love that Microsoft is dedicating more resources to the open-source community. Developing Azure, I would say, was quick and easy to get our data stores out there and get things wired up together. Microsoft's always coming out with the latest and greatest solutions that helps me get my job done. I'm really in love with the fact that they engage at significant levels all across the board and they have everything out there in GitHub. Honestly, these days I'm a big fan. The company is really headed in the right direction just on all levels. We're like, bring it on. We want more. Please welcome to the stage Executive Vice President, Cloud and AI, Scott Guthrie. Well, good morning, everyone, and welcome to the Microsoft Connect event here in Las Vegas, which we're co-hosting together with the Dev Intersections Conference. We have some great content to share this morning, as well as some awesome announcements and some really fantastic demos. And in addition to our in-person audience, we are also streaming this event live to hundreds of thousands of developers around the world. And some of the developers watching, both here in the room and online, have probably been using Microsoft technologies for many years. And some have never used any Microsoft technology or development tool ever before. And we have some great demos and announcements today that we think, regardless of your experience with us, are really going to make you as developers even more productive. And I'd really like to thank everyone here for joining us. You know, we now live in a world that runs on software, a world where code drives the experiences we interact with on a day-to-day basis. Not just in our phones or on the web, but with everything. Our cars, our homes, and our work environments now run pretty much entirely using software. And this is what makes it such an exciting time to be a developer right now and to be able to build apps and solutions that can have an amazing impact on people's lives. And it really has never been a better time than now to be a developer. You know, our goal at Microsoft is to provide developers with a platform and tools that will make you incredibly successful. It's a mission we've had since the very beginning of the company. And in today's event, we're going to walk through and demo our latest development tools in cloud platform innovations that enable developer success. You know, the new Microsoft has everything you need for creating the next generation of software applications. Whether you're a .NET developer building a web app, or a Node.js, or a Python developer on a Mac doing the same. Whether you're a C-sharp developer targeting Android or iOS, or a Python developer using Vim to create a custom analytics solution running inside a Linux VM. And you're going to see demos of pretty much all of this throughout today's event. And throughout the demo today, you're going to see how we're working to enable developers to build these great apps. Again, regardless of which language they're written in, what operating system they're developed on, and what devices they target, all in a really powerful, open, and productive way. And just to kind of prove this is real and kick things off and start a little demo heavy. What I'd like to do is invite Chris Dias and Amanda Silver on stage to actually show building some of these capabilities end-to-end using a wide variety of different languages. And just to prove this openness is actually start demoing it on a Mac and using a non .NET language. And really kind of highlight how this great developer tooling and the flexibility that we have with both our Visual Studio Tools and Azure enable you to build fantastic, amazing solutions. Chris. Alright, thanks Scott. So before we get started, the first thing I want to do is introduce the Tailwind Traders application. You're going to see this in a number of demos this morning. Tailwind Traders is a fictitious home improvement site. It really showcases the future of connected app experiences. Now the reference apps you'll see this morning are all powered by the Azure Cloud, built with best in class tools, and made smarter through machine learning and AI. So let's get started. I'm going to start over here in Visual Studio Code. Visual Studio Code is our lightweight cross-platform editor. It's really focused on the core developer inner loops. Let's go write some code. Oh, actually, I should explain first what I'm going to go and build today. So as part of the Tailwind Traders application, I'm going to go and build an online storefront. And we're going to sell something fun here in relation to the upcoming holiday season. We're going to have an online store and we're going to sell garden gnomes. Alright, that'd be awesome. So we're going to start in VS Code. And like I said, it's our online cross-platform editor. And let's get started. The first thing we're going to do is we're going to make a little bit of space here. We'll close down the Explorer. We're going to zoom in so you can see everything that's going on. And in case we go to the workspace, I'm going to turn on a new feature in VS Code. It's called breadcrumbs. So I'll go up to the command pad. I'll say view toggle breadcrumbs. And now at the top, it might be a little bit difficult to see, but we can jump up there. We can go up to the top. If I press enter, now we can navigate through the workspace, through files in a particular folder. We can actually even navigate within a file itself. You can see we're navigating around this nice little outline. So let's jump into some code. So for out of the box, Visual Studio Code, we've got a great editing experience for plain JavaScript powered by the TypeScript compiler. And so if I come in here and I just say app. I get the standard IntelliSense list. IntelliSense was revolutionary. It came out almost, I looked it up almost 25 years ago with Visual Basic 4. And what it's great about it is it tells me what I can program against in my classes, but the problem with it is it doesn't tell me what I should program against. So it turns out with the power of the cloud and machine learning, we can make IntelliSense smarter. And we do that with something called IntelliCode. Let me show you what that looks like. I'm going to bring up the Explorer Viewlet. And the Explorer Viewlet gives me access to thousands of extensions in the marketplace. And I'm going to search for IntelliCode. And once that, well, IntelliCode. Oh, I got to spell it right. IntelliCode. There we go. And I've got it disabled so I can show the before and after. We'll just re-enable this extension and restart VS Code and we'll get back into our coding. And so let me zoom in again. So now when we come in here, if I type in app and I hit dot, what we're going to see at the top of the expression list or the completion list is a number of options that have a star next to them. And that's IntelliCode telling us what we should go and program against. And IntelliCode knows this because we used machine learning to analyze thousands of open source and public repositories from GitHub and train the IntelliCode engine to provide us completions based on what other people have done in the context that you're in. Now, this is kind of an easy example. App is a router object in Express. And you could say, hey, Chris, you know, you probably just went through and sorted them and said those are the most common ones to use. But IntelliCode is smarter than that. Let me show you what I mean. I'm going to create an array. So we'll say var x equals open brackets. If I come in here and I say x dot. At the top of the list, I get a set of completions with stars next to them that let me manipulate the array. So things I would commonly do when I have a fresh array and I push things into it or I might iterate over them. Now, if we go into something like an if statement, if I say x dot inside the if statement, you can see that our completion list is different. The top of the list has things that I can test, like the length of the array or the contents of the array with index of. So let's try index of and we'll see if, you know, there's a number one in there. Of course, it's empty and there won't be, but you get the idea and we'll go into our block. And now in here, if we say x dot, you can see, oops, x. Oh, I got the cap lock on x dot. There we go. Now you can see that I've got methods in the array that let me manipulate the array. So like splice, for example. So I did index of. I found something in the array. Now I want to splice and take it out. All right. So in telecode, it's very smart. I've shown it here in JavaScript. It also works for TypeScript, Python, Java and C sharp. And it's going to continue to get smarter over time as we continue to train the engine. And in fact, you can train in telecode engine with your own code. And that's something that you'll see a little bit later on this morning. Okay. So now we wrote a little bit of code. Let's run our application and see it in action. I'm going to press F5. And what's going to happen is, VS Code is going to start up the node runtime locally on my machine. So it's going to start one debugger. And it's also going to start the browser in another debugger so I can debug both the client and the server code at the same time. So here's our nodes. I mean our gnomes and our node, because we're doing node. I can add a couple of these to the cart. You can see up here in the cart, everything looks good. And I've got a couple of recommendations down the bottom. All right. I'm happy with this application that's running locally on my machine. So what I want to do now though is actually we'll stop the debugger. And now what I want to do is take this and I want to deploy it to the cloud. I want to test it out there before we push it to production. And to do that, I'm going to actually use something called, I'm going to use Azure App Service. Azure App Service is our platform service for hosting and scaling web applications. And to manipulate our application or talk to it, I'm going to actually use the Azure App Service extension. And the App Service extension that actually have a number of Azure extensions installed, all contribute over here in the left-hand side with something we call a viewlet. So I have the Azure icon and we have the Azure viewlet on the left-hand side. So I've got my app service node up here and I can drill in and see my app services. I've got Cosmos DB or access to Cosmos DB. Cosmos is our cloud scale, no SQL database. It has massive throughput and single-digit millisecond latency, so very, very responsive. I have access to my storage, I mean my Azure functions. So if I'm creating serverless functions that I want to only pay and run for the compute, I've access to that as well. And I actually have access to my storage accounts as well, which for if I have unstructured data or large data blobs and another cool fact of storage, you can actually persist your static websites and host them very rapidly and for very low cost in storage. But let's go and we'll deploy this application to the cloud using the app service extension. Here's my development website. It's a very simple site that I've got set up. Now to deploy it, all I have to do is right-click on the site and say deploy to web app. And what this will do is we'll package up the application or the folder locally and it'll ship it up to Azure and deploy it there. Now this will take about 20 seconds to deploy. So while we're doing that, a couple of cool things I want to point out in the app service extension. One is this application settings node. Settings for an application actually turn into environment variables that my app can access. I have access to my deployment slots so if I've deployed multiple versions, I can roll them back and I even have access to the log files for my application. So if I want to go in and review the log files if something went wrong, I can see those right here in VS Code. Okay, so we'll close that down. It looks like the website has been deployed to the cloud and there it is and it's running up in Azure. But you see we've got this spinning thing right here, right? And no gnomes are showing up because we're not accessing the data. When we ran locally, we were actually accessing a local MongoDB database which you can see down here in the Cosmos extension. And so since we're up in the cloud, we need something that is in the cloud. So we're going to use Cosmos for that. One of the cool things about Cosmos as a developer is that it supports multiple open APIs. So it supports Cassandra, Apache Cassandra SQL. And in this case, since we're a node application and Mongo is very popular in Node, it actually supports the Mongo API as well. And so using the extension, I can actually drill in here and see the documents that exist in my database. In fact, if I'm brave in this demo, I can edit them and persist them back up into the cloud. And so what this means is from a developer perspective, if I want to move to the cloud and take advantage of the massive scalability of Cosmos DB, I can continue to use the same tools and frameworks and just point at the Cosmos DB database. So to do that, we'll go back up to our app service extension and there's another node here called connections. And so if I come in here, this actually gives me access to Cosmos DB and we'll expand this as time goes on. And once we click on that, it's going to ask you what the subscription is, what the account is, what the database, which is what we just drilled into earlier. So we're connecting it up to the database. And the last thing it's going to ask me is what the environment variable is that my app is listening on. And so this is going to inject it as an app setting into the app. So when we do that, it's going to go ahead and update the application. So that's been done. If I look at our app settings, you can see now that I've got a Mongo URL in there. And that means if I come back over here to, oops, close that tab, that's okay. I can right click on it and say browse the website again. And now what we're going to see is that our website will come up and now we're connected to data in the cloud. All right. So now we've moved up to Cosmos. And again, I can come in here and I can add to the cart. If I look into the cart, I can see that I've got my list and I've also got a couple of recommendations based on the products that I've got in the cart. Now with the holiday season coming up, I've got a couple of gnomes that aren't selling very well. And I need to make some space in the warehouse. And so what I want to do is offer up some sale items. I really want to push some products. So in our recommendations down here at the bottom, I want to offer up some of these gnomes that aren't selling too well. Now this recommendation service is written as an Azure serverless function. And this makes perfect sense in this model because like if the holiday season is coming up, it's going to scale with me. And I'm only going to pay for the compute that I use in this service. So let's go see what that's going to look like. So we'll go back over to VS Code and I'm going to switch over to my function, the recommender function. And we'll close down that again. Now this function is actually written in Python. And that's cool because I can take advantage of libraries like NumPy or scikit-learn. Now I am not the best Python programmer. The lack of semicons drives me a little crazy. But I was looking through the code earlier and I feel like there's a couple of things that I can change in here to do what I want to do. So if I come in here and I change the items that we return to the recommender to be two, so I always want two recommendations. And I always want to force one sale item to happen in the list as well. I think this will do what I want it to do. Now to test this out, normally with a serverless function, you get to deploy it to the cloud to try it. But what we can do is set a break point right here and I'll press F5. And what's going to happen is we're actually going to spin up the Azure Function Runtime, which is installed locally on my machine. It's written on .NET Core. It supports Windows, Mac, and Linux. And this is the exact same runtime that we host functions up in the cloud. So now the fact that it's running locally on my machine means that I can debug it. So we get a nice little URL because that's the HTTP endpoint that we're going against. So if I click on that, what we'll do is we'll hit it and then we break in the debugger in VS Code. So now we have the nice lightweight debugging experience of VS Code. I can do things like see all my local variables and I can hover over items and there's my top three. And I can see at the top I've got two recommended ones and the last one is the GNOME sale. So I think my change is pretty good. But like I said, I am not the best Python programmer. And so I would like to get a couple of additional eyeballs to look at this before I make a pull request and submit it. Now I don't know if you can see it very well, but I've got an extension called GitLens. And GitLens provides me lots of cool information about Git and it shows here the blame on this line. It says Amanda Silva worked on this six days ago. So Amanda is probably somebody that... Hi, Amanda. Amanda is probably somebody that can help me out with this. So what I'm going to do now is I'm going to start a collaboration session with Amanda and we're going to use Visual Studio Live Share. And I can see over here that Amanda is actually online, which is good. And I can message her. I could send her an email. But because I know she's here, she's right online, I'm going to click on the invite link. So all I have to do once I get the invitation is to just accept it. And what you can see is no matter what I'm doing in Visual Studio, I'm actually going to get into Chris's instance of his workspace. Now his workspace is hosted in Visual Studio Code on the Mac. I'm on Windows in Visual Studio. And yet, even if I don't have all of the SDKs that he's using on my machine, I can actually go ahead and see what he's working on. Now, you can see this in the solution explorer. You can see all of the files that he's been working on. But even further, I also get the context of where his focus is. So I can actually see you, Chris. What's going on? So I've got a couple of changes that I wanted to make here. I'm trying to push some sale items into the recommendation system. So I've made a couple of changes here to say, hey, you know what? I just want to see two recommendations and then one sale item. I ran it, debugged it, looks pretty good, but I'm not confident in my changes. Okay. Well, before I make any changes, I always really like to build everything. So I'm just going to go ahead and build this. Now what you can see here is that this is actually launching a terminal that is actually being hosted on Chris's machine. So we're actually compiling the Azure Function written in Python against Chris's Azure Function SDK on his Mac right there. And you can actually see I have access to local host as well. So I'm going to now further launch a debugging session. So I can go ahead and attach to the Python functions and go ahead and launch into a debug session. So now that I've done that, I can go ahead and tab to the local host and I can actually hit his local host. Now this is going to bring me back and it's actually going to hit a break point right here in this context. Now that we're in a debug mode, I'm in debug in Visual Studio and he's also in a debug mode in his Visual Studio code instance. I get all of the experience that I've come to expect from my debug experience. So for example, I can add a watch and I can expand the list and I can see here all of your gnomes are listed, but the sales, it looks like are last and I thought you said you had to move those. I do want to get rid of some of these gnomes. So if you can move that up to be first, that would be awesome. Sure. Let me just make a change here. So let me just stop debugging. Now I'm just going to select this and move it back and we'll just put it right at the front right here and just hit a plus and we'll run it one more time and let me just remove this break point and just run it again. So again, this is running. Now we can actually go back to local host and I can refresh this and yep, it looks like we have 50% off, so it looks like everything's great. Awesome. So I only have a minute left in this demo. I want to make a quick pull request. Can you hang out and merge that in for me after I do it? You bet you, Chris. All right. So let's stop the debugging session. I'm going to come over here to my source code control viewlet and I can see here's the changes that we made. There's the changes that I made and here's the change that Amanda made, so they look good. One cool thing is that LiveShare actually pre-populated the commit message with the fact that Amanda and I collaborated on this. So I'm just going to add one more thing, add sales and commit that locally and now what I want to do is I want to create a pull request and to create that pull request, I'm going to use another extension that I have installed. It's called the GitHub pull request extension. And the GitHub pull request extension is a collaboration between the Visual Studio Code team and the GitHub team to bring the core interloop of working on pull requests into the environment. So I can come in here and I can see different pull requests that might be assigned to me, created by me, things like that. And if I want to create a new one, all I have to do is click on the plus. It's going to ask me what branches I want to use and once I do that, it's going to create the pull request locally on my machine and it's going to push the branch up to GitHub and it'll be done here in just one second. There we go. Now Amanda, should be there. Could you take a look? Sure. Let me just take a look here. Okay. I do see your pull request. So let me go ahead and look at this and in GitHub, I can go ahead and just merge the pull request. You can see that it already lists that it's co-authored by me and I'm going to confirm the merge and after this is done, you can see that it actually is going to kick off an Azure DevOps build and I think everything's going to be deployed to production. So you want to check it out, see if it's working. That was fast. All right. So we come back over to our site and if we refresh the page, hopefully here we're going to see our sales items. There we go. There's the node or the gnome. Looks like the Scott Guthrie gnome. There we go. 50% off. So please come to the site, buy some of these and let us know what you think. I think our work here is done. Thank you very much. So you just saw some amazing things in that demo. In Visual Studio, you saw IntelliCode, which is a new code editing capability that uses AI to improve IntelliSense recommendations for C-Sharp, Java, Python, and starting today also for JavaScript, C++, and XAML. LiveShare, which was the technology that enabled Chris and Amanda to share a live coding session in VS and to code and debug in real-time, even though one was on a Mac, one was on Windows, one was using VS Code, one was using Visual Studio. It really transforms how you can do remote pairing and collaboration. Our new GitHub integration, which brings pull request workflows directly into your code editing experience. And as part of that, you saw the new experience we're delivering today that enables you to work on pull requests directly from GitHub without having to clone inside your tool. And you also saw some of the Azure tooling extensions, which we've added now to both VS and VS Code, that make it really easy to deploy apps to the cloud and manage all your Azure resources directly within your development tool. You also saw in that demo a few of our new innovations inside Azure, including App Service, which is our fully managed Web App hosting service that can host any Web App, and now supports not just Windows-based Web Apps, but also Linux and Docker-container-based Web Apps as well. Azure Functions, which is our serverless event handling offering, which can scale to process billions of requests concurrently, and supports many languages, including C-sharp, Node.js, Java, which just went GA a few weeks ago, and now Python, which is new starting today, which you can now build your serverless functions in on Azure. And then you also saw Cosmos DB, our globally distributed multi-model NoSQL database service, which provides developer API support for MongoDB, Cassandra, and Graham and Graf. And then at the very end, you saw a little bit of our Azure DevOps Pipelines, which we'll go into more detail later today, which is our CI-CD build service that works for Mac, Linux, and Windows, and which can be easily used and integrated into any GitHub repository or project. And that is just a small sampling of a whole bunch more things that we're gonna be showing later today, but we thought that might be a fun way to just sort of get things started and show you some of the end-to-end experience that's now possible. And throughout this morning presentations, we're gonna go into and demo even more developer capabilities on the Azure side. So one of the things you probably notice both in that demo, but also hopefully over the last couple of years, is the change in how Microsoft approaches open source. We not only support OSS projects in a deep way, but we've also open sourced much of our own product development. Products like Visual Studio Code and SQL on Linux are now used by literally millions of developers around the world. The .NET platform is now open source and has accepted over 61,000 pull requests from the community. And Microsoft is now one of the top contributors for Kubernetes and is the maintainer of a number of open source projects like Helm, Draft, Brigade that make Kubernetes easier to use. And more than 5,000 Microsoft developers now commit to open source projects every single year. And in fact, over the last two years, Microsoft has had more contributors contributing to open source on GitHub than any other organization. Now, earlier this summer, we announced our intention to acquire GitHub and last month, we completed that acquisition. GitHub is the largest developer community in the world and we recognize the tremendous responsibility that comes with it and we're very committed to ensuring that GitHub continues to operate independently and remains an open platform that supports all developer communities. What I'd like to do now is invite Nat Friedman, the CEO of GitHub on stage to share more about GitHub and exciting things that his team is doing with it. Please welcome Nat. All right, good morning. Thank you, Scott. I'm really excited to be here today to talk to you about the work we're doing at GitHub. Now, as Scott said, GitHub is the largest developer community on the planet with over 33 million developers from nearly every country on Earth. And in the last year, developers made over one billion contributions to the open source projects and the private repos that developers built on GitHub. Additionally, more than half of the world's 50 largest companies depend on GitHub for their internal work every day. So GitHub is big, but GitHub is also growing faster than it ever has before. In fact, we just hit a major milestone last month reaching over 100 million repositories on GitHub. It's pretty amazing. This is an incredible testament to the creativity and energy of the GitHub community, but it also shows how much use of GitHub is actually accelerating. It took six years for GitHub to reach its first 3 million repositories, and today, developers create more than 3 million repositories on GitHub every month. That's nearly 100 every minute. It's amazing. So our vision for GitHub is to be the home for all developers. Whether you're writing your first line of code or your millionth line of code, if you're an open source maintainer or an enterprise developer, or if you're working at a startup or you're one of the million-plus students who live on GitHub, GitHub gives each of us the opportunity to join this global community of developers who are building the future together. And one of the reasons that developers love GitHub is because of the deep care and openness that goes into every facet of the developer experience on GitHub. And looking back over the last 12 months, the work we've done on GitHub reflects that approach. This year, the GitHub team has shipped over 150 UI experience and workflow improvements to GitHub. One example is suggested changes, which is a really innovative new feature. Suggested changes makes it much easier for reviewers to suggest a simple change directly in the pull request and for you to accept that change with a single click. So you can actually show the change, not just tell. Additionally, we have now integrated security alerts into GitHub. So basically every piece of software that you build today on the planet, whatever you're doing, it probably incorporates open source. And in 2018, we're all aware of the risk of including or depending on vulnerable open source packages in the software that we write. So with security alerts, if a vulnerability is discovered in an open source package that your project uses, GitHub will now detect it automatically and remind you to update. Our goal is to be not only the best place to create open source software, but the safest place to consume it. In addition, GitHub now features built-in token scanning to automatically detect API keys and passwords that you might accidentally check into your version control and we've even partnered with all the major cloud vendors to automatically ask them to revoke those API tokens if the token escapes into a public repo somehow like you publish it accidentally. Finally, there's GitHub actions. Developers and teams depend internally for their work on repeatable workflows to build and test and deploy their code, of course, but also to do things like onboard a new contributor or to change or to respond effectively to someone reporting a security vulnerability. Each team has its own workflows that are composed of custom scripts and third-party services and manual steps, and we rely on these workflows just as much as we rely on the libraries and platforms that we're building our software on. So with GitHub actions, we've created a way for you to script all of your development workflows directly in GitHub. You can write your actions in any language and they live as code writing your repo and they run on GitHub. You can use actions to integrate with or deploy to any third-party service and the community has already built hundreds of actions that you can learn from. So to show you how this works, please welcome GitHub infrastructure engineer Jesse Frizel. Jesse? Thank you, Nat. It's really awesome to be here today. This is one of the, like, most common open-source workflows. I've had, like, a lot of experience working on open-source projects and maintaining them from, like, Docker to Kubernetes and a bunch of others. And one thing every single open-source project needs to think about is licensing. So when a contributor makes a pull request to an open-source repo, they need to designate that the code that they are giving up can live under the license of that project. And one of the most common ways to do this is by signing off your commits. And this was actually built into the Git tool for the Linux kernel and that's how they verify that people, you know, give up their code. So this is super easy to actually add an action to verify that people have signed off their commits with GitHub actions. You just drop your scripts into the .github folder here and we're going to, like, do a deep dive into these scripts later. I'm going to show you exactly what this looks like if we make a contribution, so let's do that. Cool. So here I am in our repository and I've changed something in the index.js to, like, fix some bug. And I'm going to commit this. I'm going to push it up to our branch and then let's open a pull request with our changes. I'm going to merge these into the master branch. So if you see here, our action to verify the commit sign off is running and this is actually required by the protected branches feature so we can't merge this pull request unless this passes. So what's happening on the back end is GitHub is executing a Docker container which is running your scripts and you can write your scripts in any language. It's really cool because you have the power of Docker and it's, like, any sort of thing that you want. And oh no, it failed because we forgot to sign it so we have this gif pop up telling us nah, you're not going to be merged today. So let's go back over and fix it. And we're adding the dash s flag which, like I said, was added for the kernel. And then you can see here that now our commit message says signed off by and my name and my email. And then we're going to force push this back up to our branch if I can type. Sweet. We'll head back over to our pull request and then you see that our action is being executed again. So what's awesome is, like, this workflow is totally automated. At no point did a maintainer have to step in and be like, you need to sign your commit because that gets, like, super tedious when you have, like, 200 pull requests a day and things are moving super fast, which is, like, totally something that happened to us on Docker. And then we also hosted, like, a bunch of bots. Like, I personally host a bunch of bots on my own infrastructure in my apartment. So now that this is passed, we can merge it. And that was super simple. So let's, like, take a look again at these scripts. Here we are in the dot-get-hop builder again and you can see that we have our main dot workflow file. We'll pop that one open. Here we have the text editor for this file, but we also have this awesome visual editor, which is super cool. And you can see our workflow here for verify commits are signed off. And this gets triggered on the GitHub event for pull requests. But you can actually trigger them on, like, any GitHub event. And you can see that in a dropdown here. So what you could do, say, is have an action that triggers on every single new issue to a project. So if a maintainer goes out of town and they're the only maintainer on the project, say, and they can say, I'm not going to fix your bug until I'm back from vacation. And that's pretty cool. You can do all sorts of things, which is awesome. It's super extensible. So if we continue diving into our script, though, you can see that we have some scripts in the verify sign off folder and that's what is executed inside and then we're also adding our GitHub token. And that gets populated by GitHub itself. So if we look at that script, though, it's just 65 lines of bash. Super simple. And all we're doing is showing the commit and then making sure that it's signed off by and if not, we post the GIF. So what I love about actions is that, like, all of this is automated and previously before actions, I hosted so many bots, like I said, on my personal infrastructure, in the department and no longer do I have to do that. I get, like, all my compute back and that's awesome. So I'm really excited to see what you all build with this feature and be sure to send us feedback. And now back to our awesome CEO. Thanks, Jesse. So GitHub Actions makes it easier than ever for you to integrate third party services into your GitHub workflows. But GitHub has actually always been an open, extensible and neutral platform with a lot of API extension points and thousands of third party integrations have been built for GitHub, many of which are available in the GitHub Marketplace. One of the most popular tasks that people do with GitHub is continuous integration and today we're proud to show you the amazing work the Azure Pipelines team has done to integrate with GitHub. So if you don't know, Azure Pipelines is a cloud-hosted CICD service that's great for any kind of application on any platform written in any language. It includes hosted pools of Linux, Windows, and Mac VMs that are managed for you. And it's really easy to use from GitHub because you can just connect it to your repo with the GitHub Marketplace. Azure Pipelines is amazingly free for open source. So if you're working on an open-source project or you have a public repo on GitHub, you get unlimited build minutes and up to 10 free parallel jobs across Linux, Mac, and Windows. This is the single-most generous open-source CICD offering on Planet Earth. In fact, even though it was just released this fall, there are already hundreds of open-source projects on GitHub that are using Azure Pipelines today. And it's really cool to see projects like Python and Next.js and Yarn using Azure Pipelines, which is now doing more than 20 million builds every day. So to show you how GitHub and Azure Pipelines work together, along with the other GitHub services, please welcome Donovan Brown. Donovan? Thanks, Nat. Good morning, everyone. Let's try that again. Good morning, everyone. Perfect. Imagine you're a developer working in a GitHub repository. As the number of contributors increase, you realize you need continuous integration. With CI in place, upon every application, the code will be downloaded, compiled, tested, and packaged for deployment. When you visit the GitHub Marketplace, what you're going to quickly realize is that you have a lot of options. But our repository requires us to be able to build on macOS, Windows, and Linux. But we only want to maintain a single build script. This needs to be completely managed for us because we have no infrastructure to spare for build machines. We also need to be able to run multiple builds at once so that our contributors get instant feedback on their pull requests on if it's successful or not. With those requirements, there is literally only one choice, and that choice is Azure Pipelines. It gets even better because if you happen to be working on a public repo, you get everything that I just said for free. Access to macOS, Windows, and Linux. Completely managed for you so there is nothing for you to install, there are no VMs for you to provision. We have one YAML file that now rules them all. Gone are the days of having a YAML file for one CI to get to one platform and another YAML file for another one to get to another platform. One YAML file gets you everywhere. 10 concurrent Pipelines in unlimited build minutes. Once you have this wired up to your Azure DevOps application, you now have access to all of your actual repositories. When I click on one of these repositories, we're actually going to be able to go off and analyze that repository and determine some of the better options for you. What we're going to choose here is the Docker image. When I choose the Docker image, it actually writes the YAML for me, and this YAML will work on macOS, Windows, and Linux unmodified. What we're going to do now is we're just going to go ahead and save and run this. When I start running this, Azure Pipelines and GitHub are going to work together such that every time I commit to this repository, it's automatically going to go ahead and start a build for me. That build is actually going to go off and provision the required resources, spin up a VM of the platform that we need, start building our application for us, and when we're done, completely destroy it. You can actually monitor the build here in real time, or because we have such great integrations with the GitHub checks API, you can come back to your pool request and review the status right here inside of GitHub. Clicking on details, I can see if there is any warnings or errors in my build, and if I need even further details, clicking on that will bring me here, back to Azure Pipelines where I can see the results of my build. I need to drill in even deeper, I click on a task, and there is the real log of everything that happened so that I can go back in and troubleshoot if something went wrong. YAML is just one way that you can edit your pipelines. You can also use a graphical user interface, which I'm going to show you now when we start talking about release pipelines. Release pipelines takes the output of my build and allows me to now deploy it to all of my infrastructure. I can control when I fan out or fan back in. I can control all the tasks that need to be run. For example, if I click on this one here, you can see all the tasks necessary to deploy my application inside that particular environment. If I need more, I simply click on this plus. This is going to give me access to hundreds of tasks that we've given you out of the box, that you can now drag and drop to build your pipeline. It gets even better. These were developed in the open in a GitHub repository. So if you want to learn how we've actually developed these, clone the repo, and you can actually write your own and add your own value. But before you do that, I'd encourage you to go to our marketplace. Our marketplace is where our partners have created hundreds of extensions that add additional tasks to your build and your release so that you can do anything that you want for any language and any platform. Not only can I control everything that happens in my environment, I can even control how the code flows through my environments as well. Because I have CD enabled, every time I build a successful, it automatically deploys into dev, fans out and deploys into QA, and even automatically deploys into my pre-prod environment. But before I go to production, I kind of want to get a second pair of eyes on this. So what I've been able to do is set up an approver. So Sachin gets a notification saying we'd like to go into production. Is it okay? And he can give a thumbs up or a thumbs down. But the approvals that I need don't always come from human beings. Sometimes they come from third party systems. ServiceNow is a popular IT provided service management tool. And sometimes we need to get approvals from that tool before we can actually deploy our code. Instead of doing that manually, I can now use release gates. Release gates talk to external systems and allow them to let us know when it's time for us to deploy our code inside the device. Now, what I've shown you here is just Azure Pipelines. But that is just one piece of Azure DevOps. Azure DevOps is everything that you need to turn an idea into a working piece of software. There are services to help you with your repositories, help you with boards, help you with your artifacts. It's an amazing, I think more of it as a platform. And as Nat said, it's extensible. And we continue to help it integrate even better with GitHub. As a matter of fact, we've just released Azure Pipelines. You can take your boards, work items, and link them to the GitHub commits giving you unparalleled traceability. So please use the platform and go be great. Thank you so much, everyone. Thanks, Donovan. So our mission with Visual Studio is to provide best-in-class tools for every developer. We now have Visual Studio Code for developers who want a lightweight code-optimized editor, as well as Visual Studio and Visual Studio for Mac for IDE. And we now have over 12 million active developers using these tools on a monthly basis to write code and build fantastic solutions. And we're regularly improving all these tools with frequent updates and releases. Today, I'm really happy to announce that we're making available the first preview of Visual Studio 2019 and releasing it simultaneously on both Windows and the Mac. Visual Studio 2019 is our next major update of the Visual Studio team and includes a ton of great new capabilities. In Visual Studio 2019, we put a special focus on improving code editing with IntelliCode, which uses AI to make Intel sense even smarter and more contextually aware of your code and your architecture. Visual Studio 2019 also makes it even easier to collaborate both in real-time and asynchronously with Live Share and GitHub integrations. All the while keeping code quality high with Live Unit testing capabilities. We're really excited to have you download the preview today. Try it out and give us your feedback. We're also announcing today the first preview of .NET Core 3. It comes with significant updates for both server and cloud-based workloads, but also today for the first time, .NET Core 3 now also brings Windows desktop development to .NET Core and with support for both Windows forms as well as WPF. This enables even more flexible deployment of client apps with side-by-side and self-contained Xs, and this enables significant improvements to client app development. We also have new features on the server side, including composable UIs with our new ASP.NET Core razor components, which allow you to build sophisticated single-page applications using only C-Sharp. Now, we're proud of the innovation in .NET Core, the momentum it has now in the open-source community. There are a number of open-source projects that make up the .NET platform, and it's fantastic to see the engagement of developers contributing to all these different projects. More than 61,000 code contributions have been accepted back to the .NET platform, and these contributions are driving the continued advancement and refinement of the .NET platform and making it an even better platform. We're proud of the improvements that we're making the next big step with open-source in .NET, and that we're making available Windows Forms, WPF, and the Windows UI XAML open-source as well. These client development frameworks are used by millions of .NET developers, and open-sourcing them has been one of our top community asks. And the combination of making these frameworks open-source, in this way, we're excited to see what people do with it. Now, we already have a lot of innovation happening in .NET, and developers are building some amazing applications with it. What I thought I'd do is show one example of my tracking keyboard for people who are unable to type. Built using WPF, it's an open-source project. I'd like to invite Julius here to talk a little bit about the project and how he built it. Let's play the video. This is an on-screen keyboard that allows people to fully control their computer using iMovement. My Aunt Jill, she was diagnosed with motor neuron disease in 2009. It slowly takes away your ability to move and to speak. At the time, I saw some of the tools she was using to communicate. It showed me what people who have those sort of difficulties, what tools are available to them, also showed me that they're very important. It showed me what motivated me in the beginning. It was a sense of unfairness. Opti-key is free from day one, it'll be free forever. I knew about swipe keyboards where you swipe a whole word at a time instead of pecking away, and your eyes are actually much more precise than your fingers when they're swiping. So I started playing with this, and I built a prototype over the next year or so. The first time I got a sentence uses a UI framework called WPF which is a Microsoft product. I published it in September 2015 on a Reddit post. The open source community it started the next day. I had people issuing bugs that they wanted fixed, then putting their hands up to help fix them, and it sort of started from there. I've had people write whole features themselves. It's now in 19 languages. It's almost limitless the directions I've taken. Knowing that my project is out there and it's being used by people day to day to make their lives better, honestly it's the best feeling in the world. I like to think that this software has made it a little bit more bearable where they might have not had any other solutions and that's huge. I don't really see any limits. It's whatever people imagine, technology is right there with them enabling them to do it. I'm really excited to see how making these things work. I would like to say that we're making this a little bit more bearable with developers like Julia who are building these amazing solutions. I would like to invite Scott Hanselman on stage to show us some of the new capabilities we just announced with VS 2019 and dotnet core. Show off some of the cool capabilities you can take advantage of. Here is Scott. Hey friends, it's happening. stuff that we're doing with Windows and Visual Studio and WPF. I'm gonna go ahead and load up Visual Studio 2019 and I'm gonna get this new start experience here. This is a new experience you've got on the left there. I've recently opened WinForms and I was opening it and playing with it, doing some pull requests. I can go and clone or check out code from Git directly on that first screen. I'm gonna go ahead and click on that and I'll put in a repository for my Tailwind Traders. This is the WPF version of my application and I haven't looked at this code in 10 or 15 years. So you'll have to forgive me. I'm gonna hit clone and bring that up into Visual Studio. And you know how fast Visual Studio starts up? It's already starting to clone this and but at this point things are already available to me. It's brought it up into FolderView. I'm gonna look on the right hand side here. It says FolderView as if I've just opened it up and explore but it has also noticed that I've got my WPF application. I'm gonna switch from FolderView to Solutions and Folders. Gets me right to the code that I care about. Purfing all the things. Let's go ahead and see in the background there. It says background tasks are still running but I can still go and move around in my application. We'll go to the coupon service. I'm gonna check out some of this code because as I said, it's been a while. Now there were some questionable coding decisions that were made 10 years ago, 15 years ago, whenever this was written. I don't know, look at this, I mean, what is happening here? If someone put a curly brace randomly at the end here, this is not the way God intended curly braces to be. I don't know what Schmuck did this, but they're gonna be fired. Let's use code lens to figure out what the ridiculous loser who worked on this was. It was me, it was me many, many years ago. And of course I was confident in it yesterday. I'm gonna actually be able to click on code lens and I can see the chart of the time that I've spent in this application over the last 6,137 days. But my team is now looking at this legacy application inside of Visual Studio 2019, of course it still works, still runs. We've also as a team gotten together with an editor config file and decided what we want our code to look like. So I'm gonna hit Ctrl E C, a hot key you might use in refactoring tools. That brings up code cleanup fixes that we can all agree upon. And then I just went and fixed my code according to those styles that the team has agreed upon. So now our curly braces are where we can concentrate cuz it's clearly, this is a tabs versus spaces situation and now we're on the right side of history, which is important. And I'm looking here at fine coupon by code. Perhaps this code was written before link, I'm gonna select that and hit control dot, and I can bring up an option to convert this to link, which is nice, put that all on one line. But I'm actually paid by the line. So I'm gonna do that on three lines, get twice the money. Notice that I can go and undo that and redo that. Let me see, I can look at C check, actually it was done when link already existed. I can actually take the link and go backwards and turn that link into a for loop. Totally up to me, yeah. A single little smattering of applause for link, I respect that. It's an amazing refactoring and the fact that it's isomorphic. And you can go back and forth from one to the other is really cool. Up I can see here code 10, look like I've got some magic code, magic numbers that are in here. I'm gonna click on that and hit control dot, introduce constant for all occurrences. That's pretty cool, hit enter, and I can even look and look in comments and strings and preview all of those. I'm gonna go ahead and control Z that one. I'm not quite confident. Notice that I've been doing a lot of refactoring, but I've never actually built the thing. So my confidence level is waning. I'm also noticing that there's some code that I wanna change, my first big change in so many years. Here's where we check to see if the coupon is a valid coupon. Of course, if the expiration is less than now. But in fact, coupons are really just suggestions. The expiration date is just a deterrent. But we are the bold, we don't believe in expiration dates. I'm gonna go ahead and make this expire in a year, like when I go to popular bath places where coupons don't really matter, do they? Expiration, and I'm gonna use IntelliCode that we saw a little bit of before, I'm using this in C-sharp of course. Var expiration is a date time, so I'm gonna say expiration dot. And you'll notice here, it says two string. Cuz that's the kind of thing I would wanna do at this point, right? I'm just saying that date time dot. But if I said something like if, now it's in the context of an if. We've given it a container, and I'm gonna say expiration dot. Well, if expiration dot two string makes less sense at that point, that's the power of IntelliCode. The AI has gone and looked at all these base types, compared it against all the different open source projects that use the dot net BCL or that dot net standard library, and thought about how these things are used. So I'm gonna say add days, which is conveniently located. And I'll say 365, cuz rules don't apply to me. And then I'm gonna say date time, and now this is another type. What do you think we're gonna get when we say date time? Maybe two string, but we're inside of an if, but we're inside of a conditional dot now. Cool, it's right there, nice. Now I'm inside another container, another bit of context. This isn't just smart sorting. This is an AI assisted contextual intelligence. So now I can go and say return true. Of course, if I said expiration, which is a date time, I looked at it here, I'd get different ordering, which is really smart. So we'll go and do that, and then we'll say return false. Okay, it's really hard to code when everyone's looking at you. If you would all just look away, that would be great. And let's go ahead and build that because I have no idea what I'm doing. And it looks like it did in fact run, which is a good sign. Remember that this is WPF on top of dot net core. Typically you have WPF or WinForm sitting on top of the dot net framework, which sits on top of Windows rather. But now you've got your application running on WPF or WinForms now open source using the WinUI controls, now open source. And we've swapped out the dot net framework and put the dot net core framework underneath it. Now you get improved runtime, you get side by side execution. I can go and have a self-contained application. Let's see if this runs, we'll go ahead and bring this up. This is my coupon application, it's pretty sophisticated. Since I'm bringing back this legacy application and since we are bringing back one of our most beloved and popular applications frameworks, I thought it'd be nice to scan my coupon with one of the world's great technologies, 1998's worst product of the year, the QCAT, which only people my age will remember. But that's fine because I need to pay no attention to the part where I typed it right there. Turns out PS2 isn't a thing anymore, so scan code, I'm gonna take $20 off of my coupon here, 10%. All right, there is a bug which is comforting because it's a 6,000 day old bug. This is awkward. I do have some unit tests. Now I could go and I could say right click, run unit tests and do all that kind of stuff. But I'm gonna go up to the search bar here, which has been improved in 2019. And I'm gonna use new tech to test old tech. I'm gonna start my live unit testing. Cuz somewhere in here there's a bug, and I don't know where it is. I'm actually not even looking at the tests right here. I'm looking at the code. Live unit testing is gonna watch my code changes and it is gonna look, live unit testing is watching my tests, looking at the code changes. It is determined that this code could not work. It has two tests covering it, one that passes, one that doesn't. I will click on that, go to the test that's not working. Okay, we're gonna go and call find coupon by code. I'm gonna hold down the control key and look what happens. Everything turns into a link. I'm gonna then visit that hyperlink. My code is now hyperlinked. Find coupon by code. Looks like for the last 6,000 days, that should have been code. Now I'm gonna save it. I didn't have to save, I didn't have to bill, I didn't have to run the tests again. Live unit testing watch the code changes and automatically told me that that code is now fixed, and that's gonna work, which is pretty freaking amazing. That is live unit testing. I know that you're in shock, it's okay. So I'm gonna go ahead and run that again and make sure that that still works. We've been modifying this code and updating it to include a couple of other things. There you go, there's my $20 off. When I say show signature board, even though this code was written a long time ago, this control didn't actually exist. I'm gonna do my signature. This is my official signature on all my checks. That signature board is a Windows 10 user interface control that I am using inside of my WPF application with the power of XAML islands. Those Windows 10 platform controls are now available everywhere because a Windows control is a Windows control and you should be able to use it in every technology. That means maps and inking controls and all those great things. So in this case, it looks like it works pretty well. Before I check this in, I'm just gonna come down here and make sure there aren't any pull requests. You can see right directly from Visual Studio. I can check to see if a pull request has come in from GitHub and it looks like there is one here. Again, staying in that Visual Studio world that I feel productive in, I can go and see that there's actually unit tests. That would have been nice five minutes ago. There is some unit tests that have come in that I could have used. But fine, I will go ahead and give a code review. And then the other thing that I can do, actually speaking of pull requests, I'm gonna go up to the actual repository where we just open source WinForms and WPF and look, just in the minutes since we open sourced it, it's been dozens of pull requests. In fact, there's been a couple of days and we've had some partners go and do some pull requests. Here's one from Orin Novotny where he is actually taking the old Vista style dialogue and he's updated it. This has been approved, there's a whole discussion about it. But since I have all the power and GitHub, I'm gonna use the ship at Squirrel. I'm gonna merge that pull request live on stage. Merging pull request, ship at Squirrel. And since they can't pull me off stage once I've already got on stage, I'm just gonna randomly merge another pull request because it's open source, baby, we are open for business. We're using Visual Studio, GitHub, and I love you all. Thank you. So we've looked at some of the great new capabilities that we're adding to Visual Studio, GitHub, and .NET. Let's switch gears now and talk about how you can also use the cloud to scale your innovation even further. Now Azure is a powerful enterprise-grade cloud service that provides a broad range of services and capabilities. And with Azure, we're really focused on meeting your needs and delivering a cloud that enables you to be even more successful. This means having an end-to-end experience across the cloud services, the management tools, and the development tools that provides an incredibly productive cloud experience. When that's hybrid, it enables you to build solutions that run consistently, both within our public cloud and data centers, as well as within your own. It means having a cloud that enables you to use AI and data to infuse richness and richer intelligence into your solutions. And it means having a cloud that you can trust. Trust is a core value of Azure, and we lead the industry and our work on security, compliance, privacy, and responsibility. The focus we've had on delivering innovation trust results is really leading to tremendous adoption of Azure right now. Startups, governments, and over 95% of the Fortune 500 companies in the world are now running their businesses using the Microsoft Cloud and specifically Azure. These are just a handful of some of the customers running on Azure today. Azure now has 54 data center regions deployed all over the world. This enables you to run your apps closer to your employees and customers than ever before and scale your solutions globally. Now, Azure is a broad cloud platform. You can use Azure just for infrastructure and just take advantage of it for base compute storage and virtual machines. But one of the things that makes Azure really powerful is the coherent set of highly engineered services that enable you to develop, deploy, and scale your apps even faster. These services include built-in high availability and automatically handle things like security patching and updates. And these services also enable you to adopt containerized, serverless based computing architectures for both your new applications, as well as the ones that you might be modernizing if you have existing apps that you want to move to the cloud as well. And a serverless based approach can help guide you to design your applications to scale and respond even better. And the other big benefit of serverless computing is it helps you save money by enabling you to avoid having to pay for server resources that you might not be fully using. And what really matters is that you as developers can build amazing solutions with these services and have a huge impact on the world with these capabilities. And what I want to do is invite Troy Hunt, who runs a popular security website which helps people learn whether their passwords have been stolen. Talk a little bit about his experience and about his site. Let's play the video. My name is Troy Hunt. I develop security software and I build a little website called Have I Been Poned. So I wanted to write things targeted specifically at the people charged with building software and help them understand how to build it securely. A very public data breach happened in late 2013 with over 150 million different accounts in it. I went, OK, well maybe I can build something that people can actually use to assess their own exposure. And that was really what started Have I Been Poned. I was just curious and I wanted to build something. The objective was to build a data breach notification service and to play with Azure. I launched Have I Been Poned in December 2013. Within weeks it just took on a life of its own. It was in major news outlets. Suddenly there were masses of people like normal, everyday, non-technical, non-security people using the service. And I lost request. My challenge was how do I deal with these just sudden unexpected massive increases of scale? Ultimately, the solution came via functions. By running Azure, suddenly you have a scale which is not bound by any sort of logical infrastructure over the top of it. It's just like, here's my code. Just run it and send me the bill. So I've solved all of the scale problems for things like the API, which is here when people come to the site. And it's also massively reduced the cost because functions are just so, so cost-effective to run. So I was explaining the possibilities of coding to my son the other day. And I said, mate, you can sit here at home and you can write code that you can put out there in front of the world. And that code could fundamentally change the world. And you can do that because you have access to things like cloud services that allow you to do this for basically no money. And this really is a story I have been pwned as well. So choice uses services like Azure App Service and Azure Functions to run have I been pwned. And as you heard him talk about in that video, it's really enabled to build a service that is lightning fast, distributed around the world, and really doesn't cost pretty much any money to run. Now let's talk about another service in Azure that we're seeing tremendous growth with, which is our Azure Kubernetes service. Our Azure Kubernetes service, as we call it AKS for short, delivers a fully managed Kubernetes-based orchestration service. It provides auto-patching, auto-scaling, and update support, and enables you to use the full breadth of the Kubernetes ecosystem when doing development. It also supports our AKS Dev Spaces offering, which provides a really fast, inter-loop development experience that's integrated across both Azure and our Visual Studio development tools when building Kubernetes-based microservice applications. And today, we're really excited to announce support for a first-of-its-kind serverless computing option with AKS that enables you to provision and scale your Kubernetes-based apps more efficiently and save lots of money. Our new virtual node option enables you to elastically provision additional nodes inside your Kubernetes clusters in just seconds. This gives you the flexibility and the portability of containers, while also ensuring that you pay only for the compute resources that you actually need and use. And virtual nodes is powered by a technology called Virtual Kublets, which that we've developed, and that we're also today donating to the broader community through the CNCF Foundation, which hosts and promotes open-source, cloud-native software. And what I'd like to do is invite Jeff Holland on stage to show off Azure Kubernetes service, demonstrate how you'll be able to take advantage of the Dev Spaces capability to get a really great inner dev loop development experience with Kubernetes on Azure, and then save money using our new virtual node serverless option. Here's Jeff. Thanks, Scott. I'm really excited to show you these exciting features today. So I'm a developer for Tailwind Traders, and I've been tasked to fix a bug. And you can actually see the bug right away if you look at our website. When I look at a product, I see these circles here. Now, this should actually be showing me information on whether this product is in stock and where I can pick it up in the store, but obviously something's not working right now. I don't see that information. Now, for our business, we're powering our backend services entirely inside of the cloud, running as microservices as containers inside of Kubernetes, a lot of exciting stuff there. Now, what's great here is when we do this in Azure, we don't have to install or run anything on any VMs. We're actually just using the Azure Kubernetes service. So this gives us Kubernetes right out of the gate so we can get started and start publishing our code to it. Now, if I look at Tailwind Traders, here's our Azure Kubernetes cluster. And right here in Azure, I have everything that I need to get started. I can upgrade and choose the version of Kubernetes that we're using, control the scale very easily to add more cores, to add more memory. I really like this insights feature, though. What Azure Kubernetes service is doing here is actually looking at all of the logs and metrics in real time and giving me insights into the health of my cluster. Now, there's nothing here in these charts that makes me think that there's a problem here with CPU or memory. So let's keep drilling down to try to find this bug. Now, here I can drill down deeper and see the individual containers and services that are running within my Kubernetes cluster. And what's exciting here for our business is that we're actually running many different services here. In fact, we have over 60 different containers that are powering our service together. And here I get a real-time view of all those things. I see we've got 60 containers running in Kubernetes, and the service that I care about is actually this local inventory one. So let's drill into the logs and see if there's any clues here of what might be going on. And again, another huge value add that Azure's providing is I don't just get the logs straight from Kubernetes, it's indexed them all for me. These are all searchable, so I have this nice experience to easily find the problem. Now, right here, I can actually see, all right, there's an exception being thrown in Product Controller inside of this container. Let's take a look at the code now and try to find that bug. So I'm gonna come over here to Visual Studio 2019, and let's find that piece of code here, our Product Controller. And what I really wanna be able to do is just observe the code, what's happening here. I wanna do something like set a breakpoint and run this code and try to figure out why is the exception firing. But even something that simple can actually be a little bit complex when running in something like Kubernetes, because check out this URL right here. This is not a .com address. If I tried to call this right now on my machine, my computer's gonna say, I don't know the IP for this service, I don't know where this is, because this actually maps to another service, one of those other containers running inside of Kubernetes. Well now as a developer, when I'm using Kubernetes, does that mean that now I have to take all of those 60 containers, all of Kubernetes, and run them on my underpowered machine to debug this thing? And that's what's exciting here about Azure Kubernetes service, because Azure Kubernetes service actually comes with a great feature called Dev Spaces. Now what Dev Spaces allows me to do is debug and test and code locally, but power that development experience by the cloud using a personalized Dev Space. So here I've said, hey I wanna develop in my Dev Space called Jeff, it's gonna power the cloud to give me all the context of Kubernetes, so everything just works. So when I do wanna debug this, when I wanna set a breakpoint, all I have to do is push run. I just click the debug button. The same thing I do with all those other applications that I'm used to using. Visual Studio right now is syncing my code to the cloud, using the cloud to power this debugging experience so I can step through the code. Now just to show that again, if I actually come here to the website, I'm not setting a breakpoint on our production website, this is Jeff's own Dev Space. This is my own copy of the website powered by the cloud connected to Kubernetes. In fact, another great feature of Dev Spaces is if I wanna have a team Dev Space or a feature Dev Space, I can share these and collaborate with my team so that I get that rich and rapid interloop development. So let's see if we can hit this bug now. I'm gonna refresh this page and in that Visual Studio session in my other screen, we hit the breakpoint. That call to this service worked. I got the response back and I can actually come right in here and see what happened. And actually by doing this, I can eyeball the bug. I see here that there's this value property that's getting returned. I'm actually not expecting that in this object cast, so I just need to parse that value first before I get the in stock information. So let's go ahead and do that now. I'm just gonna stop the debugger, take off that breakpoint and let's do this simple code fix, the quickest code fix in the world and that's it. And again, to test this change, I don't have to fiddle with containers. I'm not gonna publish anything to a container registry or do a Kubernetes deploy. I just push run. All I had to do was push run just like I'm used to doing for every other application. And if I come over here now as this runs and syncs with the cloud, let's try to refresh this again. And now we see that that code change was in fact the fix to the bug and here now I can see the item is in stock, where I can pick it up in the store. I could go back into Visual Studio, check this in and let it roll out into our production cluster. So this is great. It's made me very productive as a developer but there's one more very exciting thing I wanna show you today. Now in Azure, I can easily control the scale of my Kubernetes cluster. How many cores is powering this? How much memory? But if you think of an event like Black Friday, this number can actually be extremely daunting. If I set this number too high, I'm gonna be paying for resources that I'm not using. But if I set it too low, my website's gonna get overwhelmed. We have thousands of customers every second hitting our website. They're gonna have a slow experience. The machines are gonna get overwhelmed and they're gonna lose sales. Now Scott announced just moments ago this one of a kind feature inside of Azure called virtual nodes. And when I enable this, what this is going to you is continue to burst out into serverless containers when my Kubernetes cluster needs more resources. This gives my Kubernetes cluster almost instant and unlimited scale in just a few seconds. So let's actually chest this out now. I'm here in Kubernetes again. I've got my cloud console and I'm gonna run this load test. This is gonna simulate a massive load test pushing a bunch of load on that website we were just looking at. And if I actually watch this now, you'll see I have a few replicas already running inside of the provision cluster. But as that traffic increases, as I start to need more resources so my website doesn't slow down so those services don't get overwhelmed, Azure automatically and very quickly is spinning up brand new containers. But I really wanna emphasize this. This is not spinning up within my cluster. These are serverless containers being created for me much lighter than a VM. These are already in just a few seconds and this has continued to scale out provision just the code that I need so those customers get a really rich and unlimited scale experience to complete their service. Now I can even check this out here if I come into my subscription. Again, what Kubernetes is doing here is it's creating all these serverless containers for me and when my traffic slows down these are gonna be deprovisioned for me so I only pay for that burst traffic when I need it. This is extremely exciting and honestly my favorite part of this feature is actually at the end of the day when you turn this on and your COO is gonna have your cloud spend in one hand and it's gonna have your website performance in the other and they're gonna call you up. They're gonna say, you know, Jeff, how did you do this? You got this number exactly right. How did you know to adjust the right number to set this so we only paid for what we use? You don't even have to tell them about this feature, okay? I won't say a word. This can be our secret. You can just smile and say, you know what? I'm that good. That's what you're paying me for. I could use a nice bonus. That's fine. I won't say a word, all right? This is just another example of how Azure makes every operations team's excellent when using powerful services in Azure and every development team excellent using things like Dev Spaces and Virtual Node. Thank you so much. So in Jeff's demo, you saw a microservice-based app running in AKS that was made up of many different container instances. And as you adopt microservices, you inevitably start to partition your application up into more and more containers. And when we talk to customers, we often hear it's difficult to kind of reliably package up and deploy and manage all of these apps without an easy way to bundle into a simple portable package. And we've been working with others in the Kubernetes ecosystem to help solve this challenge. And I'm really excited to announce today a new open source specification called the Cloud Native Application Bundles, which enables developers to package distributed apps into a single file that's easy to deploy on any runtime or cloud-based environment. And we work closely across a broad ecosystem of partners to support this project, including Docker, who are the first to support CNAB bundles across their Docker app tool and up on Docker Hub. Now, one of the most important decisions you'll take as you look to build large-scale cloud applications is how to store and represent your data. And let's spend some time talking about how you can do this with Azure. Now, Azure provides a flexible set of choices for operational data services. Our Azure SQL Database, Postgres, MySQL, Redis, MariaDB, and Cosmos DB services are databases that we provide as a service, which means we provide and manage all the infrastructure for you. And it also means that we provide the database service with an SLA that you can depend on. This means you don't have to manually configure your databases for high availability or have to manually patch and upgrade them. These are just capabilities built into the service that we provide for you. This enables you to be even more productive and build applications faster while still preserving the flexibility to use your favorite database of choice. Now, let's talk about one particular database that we're very excited about, which is Cosmos DB. Azure Cosmos DB is the first globally distributed multi-model NoSQL database service that delivers horizontal scale-out with guaranteed single-digit millisecond response time. And we've seen just incredible adoption of Cosmos DB over the last year since we released it. And it's today one of the fastest growing services across all of Azure. And the reason for that incredible adoption is really because it enables you to build just amazing cloud solutions that weren't possible in many cases to do before. With Cosmos DB, you have a horizontally scalable database that puts data everywhere that your users are. Cosmos DB enables you to automatically replicate that data to any Azure region around the world to give your users lightning-fast performance, regardless of wherever they're accessing your application. Cosmos DB allows you to elastically scale your storage and performance throughput across one or multiple Azure regions with zero application downtime. You can start with just a few gigabytes of data and then scale to manage petabytes of it. And you can start by processing, say, just 100 operations per second, but then ultimately scale to millions of operations per second if you need it. And best of all, with Cosmos DB, you pay only for the storage and performance throughput that you provision. And Cosmos DB is unique, and it allows you to program against it using a wide variety of different data APIs and data models. We support MongoDB, Gremlin Graph, Table, SQL Spark, and now Cassandra APIs against the service. And this, again, gives you maximum programming model flexibility and enables you to easily reuse code libraries and code that you already have. Cosmos DB also now has support for multi-master write scenarios, which brings literally unlimited read and write scalability by virtue of its decentralized masterless replication protocol. And this guarantees single-digit millisecond response time for both reads and now writes at the 99th percentile anywhere in the world. You can literally have apps running all over the world reading and writing concurrently across all your different Cosmos DB instances. And this is something no other database service in the world delivers with the type of SLA and performance guarantees that we provide. And these are sort of some of the incredible innovations that enable you to build these sort of planet-scale applications. And one company that's taking advantage of Cosmos DB in a big way to drive its growth is ASOS, which is an online fashion retailer that serves 18 million customers around the world today. Let's hear from them about how Azure helped them scale to over a billion requests over Black Friday and really transform their retail operations. Let's play the video. ASOS wants to be the number one fashion destination for 20-somethings around the world. We don't have shops. People know about ASOS from the internet. We have one minute where that digital platform is out. We're not serving our customers. Because ASOS offers such a wide variety of products, 87,000 at any one time with 5,000 new ones added each week, we've invested heavily in their recommendations platform and we need to help our 18 million active customers discover the things they love. We really like Cosmos DB as a fully managed database service. Cosmos DB is used as their model store. The gateway from offline to the online data science worlds, it allows us to distribute the data models to be near the services wherever in the world they're deployed. We like the immediate elasticity so we can store data models of any size. We like the very low latency for random reads. During peak sales periods, we need extra compute power to cope with customer demand and manage our large data sets. On Black Friday, 2017, ASOS services backed by SQL Azure and Azure Cosmos DB processed 750,000 orders. The product API served more than a billion requests over Black Friday through Cyber Monday, bursting up to 5,500 requests a second with an average response time of 39 milliseconds. We had literally no problem for our entire weekend. Azure has delivered as a rock-solid platform to create an ever more compelling consumer experience. Now I'd like to invite Rema, who's one of the core architects on the Cosmos DB team, on stage to show off a cool scenario in action. Here's Rema. Thank you, Scott. Good morning, everyone. Super exciting to be here. Now Tailwind Traders is a global e-commerce site that wants to fundamentally transform the way people shop around the world. You've seen the pretty amazing capabilities in the computer. What about the data? In this demo, I will show you how easy it is to build a globally distributed application powered by Azure Cosmos DB. So how do you create a globally distributed database? Very simple. You come to Azure portal, you click new databases, then you click Cosmos DB, and then you will specify all the typical parameters that you would for any other Azure service, such as subscription, resource group, your account name. The most interesting thing here to pay attention to is the set of APIs that you could pick from. If you're coming from relational background and you're familiar with the SQL, you can pick a SQL API. If you have an existing app in Mongo or Cassandra, you can choose MongoDB or Cassandra API. Or if you're working with Graph, you can pick a Gremlin API. You choose the API of your choice, then the location where you want to start out, the Geo Redundancy capabilities, and then the multi-master. If you want to enable the rights all over the world. Another thing I want to show you is how easy it is to set up virtual networks with Cosmos DB. This enables you to further isolate the connectivity to your Cosmos database, to a subnet or a set of subnets to have further control. Then you click on create and that's it. You have just created a globally distributed database with very powerful capabilities. Now, my Tailwind Traders database is already stored inside Cosmos database and I can come in here and see all of the tables, all of the databases. I can see that it's distributed across two regions worldwide. What if I want to work with the data? All I need to do is come to the Data Explorer blade inside Cosmos database. I can explore my shopping cart database. I can see all of the products stored inside Cosmos DB, all of the parameters and the values of it. The other thing that I can do is I can actually directly query it from within the Azure portal. So for instance, if I want to find out all of the items inside my shopping basket that cost more than $100 and get the results back in near real time. Now, remember this is not just a regular database. This is a globally distributed database. And if my application becomes super popular, let's assume now I get shoppers in Europe or in Asia. Now I also get users in Australia. All I need to do is select the regions where I want my data to be and then click a save button. And that's it. The data gets seamlessly replicated into those regions and becomes available for querying locally for the users inside those Geos. And I can support both reads, writes and queries. And as I'm adding and removing any number of regions at any time, my application continues to be highly available and continues to serve the data at all of the time. This is enabled through multi-homing API capabilities of Azure Cosmos DB. So let's see this in action. Here I have two front ends running side by side. One is running in West US and it's communicating with the Cosmos DB region in West US. And next to it is the tailwind front end running in East US, right here. So what I'm going to do is I'm going to add an item to my shopping cart and see in action how Cosmos database performs a replication and serves the data in the front end in the web US. So let me add it to the cart. I added it here and then it instantaneously becomes available in Cosmos DB in the West US region. And all of this is built in. You don't have to add that extra code into your application. Another feature that is super popular with developers in Cosmos DB is called change feed. Change feed is a change log that we expose to developers to build event driven serverless applications. Basically you can react to all of the changes that are happening to your data across the world in near real time and integrated with services like AKS or Azure Functions. So here's an example of the code running inside Visual Studio 2019 that performs a recommendation for all of the items that I'm putting inside my shopping basket. So it's an Azure function that will react to all of the items I put into my shopping basket and tries to recommend what are the other items I would be interested in. So let's see this in action. It's running right now in the console window right here. Let's assume I want to add a coffee maker red into my shopping basket and see how the Azure function reacts in near real time. I'll add it to the cart. And right here we can see that the recommendation trigger got triggered. Again, super powerful to build event driven serverless applications at planet scale. Now one of the fundamental challenges that any application, in particular popular application, really has to deal with is the scale. And not just the scale, but performance at scale. For a global scale application like Tailwind Traders, events like Black Friday, Cyber Monday, a few weeks before Christmas, this is when the shoppers go into the panic mode, start doing a lot of shopping for their loved ones. In this case, what we've done is we've simulated the traffic, simulating one of those big events and distributed the data across 26 regions worldwide. I want to point out this number right here, the average throughput per second, 203 millions of transactions per second. Just think about this scale. This is roughly a billion of transactions per hour and trillions of transactions per day and per month. This is unprecedented scale. And at all of this time, if I come to my metrics, I can see that I'm serving the requests to my application roughly between one to two milliseconds for reads and four to six milliseconds for writes with 99th percentile for all of these requests guaranteed to be in less than 10 milliseconds. And if I look at my availability, my application and my data continues to be highly available serving these millions of requests per second worldwide. So there you have it. Azure Cosmos DB, the industry's first globally distributed database service designed to enable any application developer to build an app of your dream. If you haven't tried it yet, you absolutely owe it to yourself. It's awesome. Thank you so much. Have a great connect and with that, back to you, Scott. All right, thank you. Well, as we just showed, the power of Cosmos DB is pretty awesome and just the number of customers that are now taking advantage of it and really driving incredibly high throughput scenarios is pretty amazing. And what's cool about Cosmos DB now is it's easy to get started and try out. Our pricing for Cosmos DB now starts as low as $24 a month and we have a free 30-day trial version. You can also go ahead and get started if you just wanna kick the tires with no obligation and not having to pay anything. And I definitely encourage you to give it a try. It really starts to enable you to build applications that just weren't possible before and we're super excited to see what you do with it. Now, our goal with Azure is not only enable you to save data, but also add AI to get even more intelligence from that data and to make your applications even richer and smarter. And with our Azure Cognitive Services, you can easily tick all pre-built AI models using REST APIs or using our .NET, Java, Python, and Node SDKs. And the great thing about our Azure Cognitive Services is that you don't have to be an AI expert in order to take advantage and add AI inside your applications. We provide great AI models to do things like speech-to-text translation, image detection, video transcription, language services, and more. And you can run these models in the cloud. And now, in fact, Azure is the first cloud provider that also enables you to take these models and push them down to the edge or run on-premises with our new container support. Now, earlier this year, we also introduced native integration between our Azure Cognitive Services and our Azure Search Service to enable you to unlock even more power. And Azure Search enables you to index any type of content and build rich text experiences, search experiences from it. And with this new Cognitive Services support, you can now index images, videos, and PDFs and have built-in AI richness, like face and object detection, sentiment analysis, video transcription that make your experiences even more intelligent. And we've worked with some pretty amazing customers that have built some fantastic experiences using our Azure Cognitive Services. And what I'd like to do now is invite Seth on stage to show us some of the ways you can take advantage of AI in your applications as well. Here's Seth. Awesome, thanks so much, Scott. Okay, so let me show you how easy it is to build a search solution that's intelligent with just three easy concepts. Three easy concepts. Ingest, Enrich, and Explore. So I'm gonna go over here to this demo right here. The pre-step is to, you have to make the resource. And to do that, you click on Create Resource, and if you go down to AI and Machine Learning, it's this thing right here. I've already created one myself, and since I like magic, I called it Merlin. And this is just Azure Search. Now let me show you the process. Again, the first step is to bring some data in. And what I have here is I have hundreds of thousands of images, well just a little less than 100,000 images that I've uploaded from a well-known dataset called the Coco dataset, and I just wanted to see if it worked. Okay, so the first thing we need to do is we need to ingest this data. And to do that, we go to Import Data, and you can connect to your data source, and there's a number of data sources. So if you already have your data already in the cloud, easy to just pull this in. I've already gone through this step, and now for the Enrich part. Okay, so I'm gonna call this my cognitive skill set. Cognitive skill set. It knows how to spell better than I do actually. And let me show you the hard part. This is the Enrichment part where we add all of the AI. Get your science hats on. I'm gonna do this, and then I'm gonna do this, and that's it, right? Because when we're searching, if you click those, we know you wanna use cognitive services, and what we're gonna do is we're gonna augment your pictures with metadata from what it finds. Imagine being able to search pictures that you've just dumped in the blob storage. Okay, so again, ingest, we've done that. Here's the Enrichment part, and finally, Explore. So we're gonna Explore this data source. I'm gonna go back to Merlin, and this index that I've already built, you notice there's almost 100,000 images. I'm gonna click on it, and you can build a pretty front-end app on top of this, but I'm just gonna use the Search Explorer, and I'm pretty excited because my demo is almost done. I'm gonna treat myself to a fancy dinner. So I'm gonna see what the computer thinks of fancy dinner is. Again, I just uploaded 100,000 images, and now I'm gonna search on it. So I click Search, and looks like it found something, CH Dinner. Looks like there's some text in there that it found. Here's what it sees. It sees a plate, it sees an awesome design, book and art, clearly a fancy dinner. So I'm gonna go ahead and click on the picture and see what the computer thinks is a fancy dinner. I feel like it's trolling me just a little bit. But again, I've showed you with three easy concepts, ingest and rich and explore how you too can build an intelligent search application in minutes. Thank you so much. Back to you, Scott. Thanks, Scott. So the great thing about Azure Cognitive Services is that you don't have to be an AI expert in order to take advantage of AI within your applications. But we also know that a lot of you wanna be able to build your own AI models and tailor them for your precise business needs. And you typically need to do three things when you wanna build your own AI models. Step one is where you prepare the data. Step two is where you build and train an AI model from it. And then step three is where you deploy the model and start using it within an application. Let's walk through how we streamline all three of these on Azure with custom models. I'm gonna basically use a simple example in this case, which is building an AI model that allows me to answer the question of how much a particular car is worse. And step one of this process is gonna be to repair my data. Now data scientists building AI algorithms often spend on average 80% of their time doing data preparation steps. Working to take data from multiple sources and merge it together, finding and fixing anomalies in standardizing formats. It's a fairly arduous task that a lot of people often refer to as data wrangling. Our Azure Databricks service is an Apache Spark-based analytic service that's optimized for Azure. It enables you to quickly launch and scale up Spark clusters on demand. It includes a rich interactive workspace that makes it really easy to build Spark-based analytic data flows and includes built-in adapters that allow you to work with all of the data that you can store within Azure. And it makes it really easy to prepare data for any custom AI-based data workflow, whether the sizes in gigabytes, terabytes, or even hundreds of petabytes in size. Now once we've built and assembled and prepared the data, the next step is building and training an AI model from it. You know, for example, with our car scenario, we might wanna create and train a model that predicts the value of the car using a data set of historical car prices. And this process of building, training, and testing the model is gonna be iterative. And as I evaluate different attributes and as I try different hyper-parameters, I wanna be able to kind of evaluate which fits best for the model to more accurately predict the outcome. And our Azure Machine Learning service helps dramatically with this process. It enables you to train and evaluate models on any number of servers running inside Azure. You can literally scale from just one server in Azure to using hundreds of thousands of servers within just a single parameter change. And Azure Machine Learning enables you to use every popular data science and AI framework out there, including PyTorch, TensorFlow, Scikit Learn, Onyx, and more. And in addition to supporting every popular AI framework out there, we're also introducing new capabilities such as automated machine learning to help you identify and use the best algorithms faster and to be able to do hyper-parameter tuning to find the best model more efficiently. And with our new Python-based SDK, we're also enabling customers to integrate with their favorite Python-based development environment, whether it's VS Code or a different tool of their choice. And all of these things really enable you to dramatically improve both the performance of the models you create and do so in an incredibly productive way. Now one thing I'm very excited to announce is our machine learning service has been in preview the last year. And today we are announcing that it is now available in general availability all over the world and ready for you to start taking advantage of it and to build great custom AI models with it. Now with our Azure Machine Learning model service, you can build and deploy AI models that you create and cause them to run anywhere, including in our Azure Kubernetes service for online API scenarios or using Azure Batch, which enables you to do batch processing scenarios. And of course, Azure IoT Edge, which enables edge-based computing scenarios as well as Azure Stack. This, because the models are all container-based, you also can even run them anywhere else that supports containers in your existing on-premises environments. This gives you maximum flexibility to really use AI everywhere and inside every one of your applications going forward. And the great thing about this is that you can use this AI flexibility with any data service inside Azure. And so any amount of data that you store inside Azure, you can now start to add AI to it and basically start to make your apps even more intelligent. Now we've talked about a lot of stuff here this morning in this keynote, but the opportunity to build applications that change the world has never been greater. And as you see in this keynote, we're working hard at Microsoft to deliver the developer tools and the platforms you need to do this. And the combination of the Visual Studio family of tools and Azure really deliver an amazingly rich set of capabilities that enable you to build apps that can be written in any programming language, use any operating system, target any device in scale to run literally all over the world. And to close this session, I want to share with you sort of an inspirational story from a team of developers at Cincinnati Children's Hospital. They're using software to help patients and families navigate through what is one of the most stressful experiences in their lives and stay informed and focus on what matters for their family and for their children. And I want to say before we roll the video, thanks so much for attending this morning's keynote. Stay tuned also because Scott Hanselman will be up next and have a great rest of the event. Let's watch the video. Calvin was born with a very rare genetic condition. When we first started coming to Children's for his appointments, I actually got lost quite a few times. Everyone understands that need for technology to help families navigate this really large medical center as well as the care of their child. That's our mission, you know, and that's what we're always looking for and how do we enable better patient care at sustaining children's. So Karen is that digital concierge that our patients and families interact with through a mobile app. We knew we were going to need a platform that provided agility and allowed us to move fast. And so Azure was a logical choice in that. We didn't have experience with mobile apps before, so this was kind of our real step into Azure. We got to be able to stay in a language space that we were familiar with, which was C-Sharp and writing on the .NET stack. By going with the Xamarin.Forms route, we were able to leverage code reuse as much as possible. One of the things we got to try new was the Azure function. And this was our first serverless project. So this shifted our mindset of how we wanted to approach Karen as a platform. So we looked at how do we decompose Karen into the respective pieces. We knew we needed a fast database, Cosmos TV roast at the top. With Karen, one of the features that we wanted to include was a chatbot. By leveraging the Microsoft Bot code samples and also Lewis, we didn't have to worry about building out a language model, maintaining it, training and that sort. So when our work with our Karen app we're really proud of the fact that it's working. Patients are already seeing value from it. That's what Matters does. Cincinnati Children's has been amazing in our lives. Having that app definitely gave me a new perspective on the hospital. I can know what's going on with my child because I have the Karen app. And I think that it's helped me be a better mother to my child.