 Stage partner program manager dot net team Scott Hanselman. Hey, friends. I thought it would be cool to do a wardrobe change because it's Vegas. There should be as many wardrobe changes as possible. I am very thrilled to be hanging out with you and to share some of these cool things. And I'm shocked that they've actually given me any time at all, much less a keynote, but we have put together this wonderful parade of talented individuals to go and share with you. Some of the cool stuff that we're doing that will make you happy and productive. We're calling it happy and productive development. And as always, I want to iterate. What a wonderful thing it is that we are all welcome. We can all be developers as we move into the future, no matter who you are, no matter what you're building. Every developer has the potential to make that app or that new website or that new something that's going to change the world. The modern world is running on code and it's all powered by applications that we're making and these simple little things, whether it be an open source artificial pancreas that I use and I'm using right now, or a website or an app, all of these things can completely change our lives. Now, these apps that are changing lives can be business apps, they can be IoT solutions, they can be games, AR, VR. The platforms and tools that we're trying to share with you that we want you to use, we want you to experience, provide everything that you need to build that next generation of apps with the language of your choice. It's all about choice, it's all about you and it's all about your choices. Now, let's take a moment, we'll recap what's new and then we're gonna show you some amazing demos with some amazing friends. Some of the things that we announced in, Scott got through his keynote, some of the new innovations in Azure around Azure App Service. This is the fully managed platform. The functions, this is the serverless offering. This lets you scale infinitely and it supports C sharp, no JS, Java, which recently went GA, general availability and now Python, which is new in functions today. And of course, Cosmos DB, the global global scale, world scale, multimodal, no SQL database, supports MongoDB, Graph, Cassandra and now has reserved instances. And then DevOps Pipeline, free for open source projects. I'm already using it, enjoying it very, very much. We saw Visual Studio 2019 with IntelliCode. I'm gonna show you a little bit deeper demo a little bit later. Live share, developers share the development session, that coding session, their editing experience in real time without pushing pixels around. Got deep GitHub integration inside of Visual Studio, bringing those pull request workflows directly to the editor where the developers are spending their time. And then we're also seeing Azure tool integration, making it really easy to deploy your apps directly from the editor. And then of course my favorite thing is ASP.NET Core 3, bringing really big updates, significant updates to the desktop. So you've got Windows desktop development with.NET Core supporting both WinForms and WPF. And it's gonna give you a really flexible deployment experience with side by side and self-contained executables. It's gonna be great, that preview is out. And then we also have new functionality on the server side with composable UIs in ASP.NET Core with razor components. It's gonna give you full stack development with.NET for the first time. And we're gonna see the future is even brighter as Blazer and moves into the product. So what does it take to be happy? What does that mean? What is a happiness focused environment? For me, it's all about being in the flow. I've talked about productivity in the past in my talks, that zone where you are the most productive and you don't want little things to slow you down whether they be little things in your editor or little things in your intelligence. I'm gonna spend some time right now and I'm gonna show you some Visual Studio products. The Visual Studio family has all of the tools for any developer anywhere. So you've got Visual Studio Code on Linux, on Mac, on Windows, great code optimized editor. You've got a full development IDE with Visual Studio or Visual Studio for Mac with those best in class tools for developer productivity. And we try to get Visual Studio to be working the way you do. We want Visual Studio frankly to get out of the way and let you do your job as best as possible. So I'm gonna spend a little time here showing you some happy and productive development in Visual Studio 2019. I've got an app up here. Now what we did here just to be interesting and mix it up a little bit is I've got the coupon reader again, except rather than the WPF coupon reader, which I showed earlier in Scott Guthrie's keynote, this one's written in WinForms and has been upgraded to .NET Core 3.0. So it's basically the same thing again but we did it in WinForms. I thought it'd be cool. Now you'll notice a couple of things. These are subtle but they are surprisingly impactful. If you look at the title bar, notice that there isn't one. You've got a compact toolbar in the menu has basically moved up, giving you an additional line of code or a line and a half, trying to get out of the way. It's almost like full screen mode is slowly becoming the default inside of Visual Studio. So there's been reduction of space to give more time and more space for your code. Also a subtle thing down here, this is the document health indicator and this is telling me that maybe my document isn't as good as it could be. If I click on it, I'm gonna go directly to a squiggly. Now I think this is a little bit of an oppressive squiggly. I'm a fan of this but the team has gotten together and they've made an editor config and that editor config is a standard that lots of editors support. Visual Studio, Visual Studio Code. And you can say, well this is what we've decided upon. We are bad people, we use spaces and not tabs as a team and you can then oppressively force your team to use spaces. In this case, my team is saying that I should probably not use this so I can remove that qualification and then the document health indicator moves back to green. What's exciting about that is that the team decides on it, we can check that artifact into our code and it works everywhere. Then editor config can be basic things like white space which I joke about but then it can also be rules and specific things about the language that you're using with extensions to editor config and that's all built in to the experience. And then when you do your control, when you do your code cleanup that also respects editor config as well which is nice. We saw code lens and what a joy that is and being able to see who's working on what, what check-ins are coming in, what are new, what are deltas. And then within telecode I wanna spend a little bit to do a demo. I wanna spend a little more time talking about that because we saw with things like date time, how IntelliCode works. I try to give you IntelliSense, I'll come up with like IntelliSense plus plus, it's that AI assisted IntelliSense. If I go and say something like default coupons, default coupons if we zoom in on that is a list of coupons, okay. So this is a base type list of coupons. So I hit dot and I get listy things. I get things like add, right. And then if I say if default coupons inside of the if I get a different experience because count would be an appropriate thing to check on in a list. If I go and say something like coupon, coupon list A equals default coupons dot, I can get other list based things that will pop up. But these are base types. This is actually a model that has been pre-trained and shipped and you'll notice that there are base models C plus plus C sharp, et cetera. But you can go and train on your own code because I'm less interested frankly in my date time and my list stuff that comes by default. I want it to understand what coupons do and how coupons should work. I wanted to think about how my team uses it and I wanna get a model that is trained and by the way I'm training that and I can still go and do my code and do my things, everything is cool. When I said coupon A default coupons to array A dot length, look, okay, those are my default IntelliSense things, right? But when IntelliCode goes and trains this model I can then share it with the rest of the team. It copies that link to the clipboard and then the rest of the team can go and bring that in and here is a custom model and you can see here it says this model covers 35 classes. It's actually looked at my code, done AI on it, seen how that code is used and then now my custom types are all available with smarts throughout my application, which is really cool. So now when I go coupon, look it automatically pops up coupon text and external ID and ID because it has identified that those are the ways and those are the things that I might be using coupon for elsewhere in my code. If I were using it differently on a different team they might have a different model and they're gonna get a different experience. That experience is gonna be optimized for how their code works. It's such a much, much smarter way of doing IntelliSense and the fun part about it is that I find myself scrolling down with an IntelliSense less and less and I find myself going C dot tab dot tab dot as it goes and anticipates my next move which is really a joy. So I hope that you enjoy that and have some fun with it as much fun as we are having. So I can share that with the team and then the team can pick up that model a little bit later. Now I wanna do something a little bit unusual here and I wanna shift gears outside of Windows. I'm gonna go ahead and close Visual Studio. I'm gonna switch over to something you don't see every day. I'm gonna switch over to Ubuntu, Ubuntu, hang on. My phone is buzzing, it might be a blood sugar, oh crap, it's a phone call. Hello, yeah, what do you want? Yeah, hey Scott, it's Jonathan. I was hoping you had a minute. Do you think you can help me with a quick bug real quick? I am on stage, I'm doing something and I don't wanna talk to you because I am on stage live. Yeah, it's just, I was trying to add a promotional coupon to the Tailwind Traders app and it doesn't seem like the scanner works anymore and I figured since you just open source when forms like, I don't know, an hour ago and you're wearing that shameless open source shirt, you'd maybe feel obligated to help me. Okay, yeah, I would be happy to help you but I'm in Ubuntu, I don't have .NET installed, I don't even have Visual Studio, I'm in a VM, I don't wanna leave my VM. Yeah, that's all right. Actually, I sent you a message over Skype so if you check that out, what I sent you is a Visual Studio LiveShare link. All you need to do is click that and you can jump right into my session and start working with me. Okay, joining LiveShare session, it has got me in my Visual Studio code, joining collaboration workspace and hey, oh, ooh. You shouldn't see my cursor in any text highlights I'm making. Is that you moving frantically around the code? It is, yeah, just for you, Scott. Thank you, sir. Okay, this is pretty cool, so I don't have C sharp installed, I'm looking at the remote, this is my style, I'm inside of Ubuntu, it's my theme, which I like. Okay, I see your mouse there, your cursor and what is the problem, what do you want me to fix? Yeah, so if you check out the scan button, click event handler, that's where we handle the actual input of the coupon code. For some reason it isn't working for me, which is really stressing me out because I added this new promotional coupon that I'm excited to show you. Is anything stand out about this code that you think would like to fix? No, well, I don't want to fix your bug because I can't concentrate because it's just so bad. You're doing this if not, you know, reverse inverted if thing and I don't like that, I'm gonna click on the little light bulb and hit invert if and then there we go, now I can concentrate because that was just bad. But wait a second, though, I don't have .NET, I don't have C sharp, I don't have even refactoring, who's light bulb is that? Well, it's mine. With LiveShare, because we're remoting all of my developer environment to you, you're not only able to see my cursor and files, but you're also able to leverage all of the language extensions and SDKs that I have installed even though I'm in Visual Studio on Windows and you're on Visual Studio Code in Ubuntu. So the presentation of that dropdown, the clicking and the doing of it, I didn't do it, I just told you to do it, you didn't do it though, the computer did it. That's exactly right. What we're doing right now is sharing context, not screen. So your view of the world is very different than mine, but you're benefiting from all the productivity enhancements that Visual Studio 2019 provides. So if I select text, you see it, and if you select text, I see it. Yep. And then, ooh, okay. And then if we select it together, we clash in a very beautiful way. That's very exciting, yellow and blue make green. On the left-hand side though, I see Git, and then I see the change that I just made, but that's not my Git, that's your Git. Yeah, unfortunately, LiveShare also remotes all of my Git metadata, so there's no way for me to hide the local changes from you, no matter how bad they are. Unfortunately, but that's amazing though, because then I can go in here, on my side, you're, I can see the diff of what just changed. I'm actually looking at the diffs from your side on my side, presented in the way that I think, in Ubuntu, in Visual Studio Code, and you're running Windows and Visual Studio 2019. Yep, exactly. And I can even go and comment on this? Yeah, one of the great things about LiveShare is because it's real time, and it allows you to view diffs as well as add comments, and it effectively serves as a real time lightweight pool request. Very cool, okay, that's cool. So back over to, you're back, you're with me over in main forms, I'm over in coupon service, where do you want me to be now, because we need to fix this bug, because I have a kind of a thing I'm doing. Yeah, let's take a look back in mainforms.cs in that scan button handler. Okay. And I think there's something wrong, maybe with the coupon service code where we're calling finding the coupon, or there's something just not working right there. All right, so you say, scan, find coupon async. I'm gonna right click go to definition, which I assume is happening on your side, but I get to navigate the code naturally. I'm moving around, even though you might not even be in the same file as me. First to default async. I'm getting, wow, I'm getting like popups, and it's giving me help and everything. Your computer must be working hard. Dot external ID is wrong, because this is fine by ID, not by external ID. So we're gonna go in, hey, I'm getting little stars too. Wait a second, this is a coupon. The X is a coupon. Yeah, you know that custom model you just trained like two minutes ago? Yeah, I got that already. And LiveShare is automatically sharing all of my IntelliSense with you, including IntelliCode augmentation. Remoted LiveShare and Telecode over Visual Studio LiveShare. Wow, very cool. All right, so I fixed that. Now, can you like, what do you do, like run it on your side and tell me what you see? You know, Scout, with LiveShare you also can even run and debug applications on your end, even though they're running on my machine. So if you wanna set a break point on line 46 where you're at, you can go ahead and switch to the Debug tab and select the WinForms application and just start that up. Okay, so I'm, is it gonna happen here or it's telling you, I'm putting you on a puppet strings, right? We're sharing this, like we're in a debug session together. Yeah, well we're about to be. Okay, so I just hit go. Can we, we're at a break point. So do me a favor, people in the back, can we see his machine maybe and like do a split screeny thing? Okay, cool, so I'm, I'm on the right and I am in the much cooler theme and Jonathan is in Windows on 2019. We're at the same break point. Okay, cool. So then if we, if I hover, I can see the same stuff. I can see all of my different, I got watch windows, I got locals, I got all that stuff. Now you're, this is a WinForms application. So I'm going to need you to run it and then maybe send me, email me a screenshot of what you see to make sure that it works. You know what, Scott? You can actually do that yourself. If you want to go ahead and continue the app, we can take a look at it and see whether we fix this bug. All right, so I hit continue. For those of you who missed that, on the right hand side, I'm running Ubuntu. What we're doing is promoting the window of the desktop windows application that Jonathan is running. I'm moving my mouse over here. Who is the little head that's chasing my mouse? You're controlling my cursor right now. From Ubuntu. From Ubuntu. And I hit scan. And I hit the break point. I'm working the way I want to work from my world, running Ubuntu, running VS code, helping a windows developer using open source WinForms and dotnet core three. And I'm having a lovely, lovely time. If you thought we were not serious about open source and your tools anywhere, we are serious. And I don't want to squeeze you for applause, but I'm worried that you may be dead inside. I am starting to suspect you did not need my help, JC. Yeah, honestly, I was just a bit jealous that you had this Scott Hanselman in friends talking. You didn't invite me so I just wanted to call you up and interrupt you. All right, well, thank you for calling me that was totally inappropriate use of your power. All right, man. Thanks as always, Scott. Let's get to talk to the third. Thank you, sir. That was live share, seeing something that you haven't seen before, which is the actual remoted UI. And of course, this doesn't mean WinForms run on Linux, but it does allow me to collaborate in ways that were never possible before. And with Windows Live, with Visual Studio Live Share, we're just getting started. Now, Visual Studio 2019 preview is available today for Windows and Mac. Trying to make everybody more productive with features like IntelliCode. We're trying to make it so people can collaborate, whether it be on GitHub, work asynchronously, work on Live Share. I'm not pushing pixels around, I'm pushing out context. Things like historical debugging, live unit testing. I want everyone to go and download the preview, check it out, give us your feedback. And I also want to point out that you can safely install the preview side by side with your existing VS setup. It won't mess things up. And if you're using Visual Studio 2017, you can download Live Share and try that out as well. Live Share is available everywhere. It's a fantastic tool and such a joy to use. It's gonna be integrated and built into Visual Studio 2019. Now, one of the things that is the heart of Visual Studio is the extensions. When we put out Visual Studio 2017, we had 500 extensions at launch. At launch. With preview one of Visual Studio 2019, we have over 400 extensions on the first preview. That is a staggering amount of extensions with languages that you haven't seen before, new technologies, we're just getting started. It's such a wonderful ecosystem. A lot of these are open source and on GitHub and they enable great new scenarios inside of Visual Studio. So I'm pretty excited that we have almost exceeded the number of extensions on preview one that we had with launch of 2017, which is pretty hot. Now, one of the things that we want to do is talk about the cloud and trying to figure out that getting to the cloud is easier than you think, but we don't want to necessarily tell people how to do it. We don't want to insist that you must go to the cloud this way. There's so many benefits to move to the cloud. Now, in the old days, you had to go and get a container loaded on your horse-drawn carriage and bring your new compute power into the data center. But now, if you want to scale, you can just move that slider to the right. The entire second page of my resume is pulled out completely. It all said how to scale a website and now Azure does it for me because we are sitting on top of the shoulders of giants and things like scale are not the problem anymore. Now, every developer can get their apps into the cloud. They can run at global scale by just moving that slider to the right. So how can we do that, right? There's one destination, which is a more manageable, more fun, more enjoyable cloud-based system, but there's different paths to the cloud. We need to acknowledge that and what I think makes Azure special and why I enjoy working on it is that we meet you where you are on your cloud journey without telling you that you have to do it this way or that way. We have options like IaaS, which is kind of like owning your own home. You bring up a virtual machine, you're responsible for it, you have to run Windows Update or App to Get Update and it's yours, you own it. You have maintenance and upkeep. Then there's platform as a service. This is like a bed and breakfast. You're in someone else's home, they're managing the house, they're taking care of it for you. You just have to go and spend time in the room that you rented. And then there's things like serverless, like a luxury hotel, like the one that I'm staying in because I'm a freaking rock star and I thrashed my room and I'm gonna come back and it's gonna be put right back the way I found it because it's serverless. I don't even think about it. There might be a virtual machine underneath my room, not my problem, that's that experience, but here's the thing. Is the goal to live and stay in a hotel 24-7? No, we as people sometimes we're at home, sometimes we're at an Airbnb, sometimes we're at hotels and we move between these environments. Why shouldn't our software be the same? Sometimes a virtual machine is the right thing. Sometimes compute is the place to go. Sometimes you add serverless. There are different paths to the clouds and hybrid applications often have components that take up a different part of that experience. It's not a continuum as it is multiple places on the path there. So I'm gonna bring my friend Cecil Phillip to come out and talk to me about how you can bring your applications to the cloud. Hey Scott. How's it going, sir? Thank you. Morning, everybody. So that's some really cool stuff I wanna show you today. All right. Now, our good friends and tailoring traders have built this web application and they've been using it for their customer support specialists. So they can track some of the orders that's been placed inside of their system. So for instance, I can come in here and I can search for a customer. Let's say we search for Michael. And I can pull up his contact information but I can also see his order history that's here. Now, this application's been pretty rock solid for them. So they haven't needed to make any changes to it as of late. And actually when they've built this application, they use a combination of ASP.NET web forms. They use jQuery. And they also use a SQL server database to store some of this information. Okay. Now, where is this running right now? So right now, this is running on their internal infrastructure. Okay. So IIS under someone's desk. Right, exactly. Okay. Now, the thing is business has been going really great for tailoring traders. So they're starting to outgrow their infrastructure that their application is running on. So now they're looking to the cloud to make use of some of the platforms and service offerings that are available inside of Azure today. Cool. Now, the thing is these developers haven't been keeping up with the latest and greatest when it comes to web technology. So they're a little bit concerned now. They're concerned that their application might not be able to run in the cloud without making significant changes. So what I want to do in the next few minutes to show you how we're going to take this application, we're going to publish it into Azure App Service and we're not going to make any code changes at all. So let's head over to Visual Studio. And what we're looking at is this web forms application in Visual Studio 2019. Now, I'm going to go over to the published dialogue. Now, remember, this is the same published dialogue that they use whenever they publish the IAS6 that's running on their infrastructure. But this same published dialogue can help us get our application into the cloud. All I need to do is make sure I select App Service. And then what I'm going to do is create a new profile. And then I'll have to enter some information about my subscription and, you know, what's the name of my application and some of these types of things. Now, I've already done this. So I'm going to go ahead and open Configure so you can see what my published profile looks like. Now, one of the interesting things here that I want you to see is that I have my database connection string in here. So what's going to happen is on publish, my web config is going to get updated. And so now this is going to point to my SQL Azure database that's in the cloud. I'm not the one that's running on-premise today. I see, so when I hit F5 and I debug locally, it's my local IAS and my local SQL Server Express or my data centers one swaps it out when I publish. Exactly, exactly. So now, in the essence of time, I've gone ahead and published this application. So I'm just going to click on the URL. And as you can see, it's still running the same way as it was before. The difference is now it's running on my Azure App Service instance. It's the same 10-year-old web forms app that's running what.NET 4? Right, same web forms application is running .NET 4.6.1. Okay, cool. Now, what I'm going to do is I'm going to head over to the Azure portal. So here what we're looking at is the App Service instance that the application is running on today. So if you follow me on the left-hand side, you can see that I have a various set of options that I can configure. So, for instance, I might want to set up something like deployment slots. What that will do is allow me to set up different environments for my application. So I could do something like have dev tests and production environments. So I could do things like A-B testing or, you know, maybe I want to verify a build before I swap it into production. And simply by virtue of the fact that you moved into Azure, now you have that capability before you would have had to make another IAS application and move on. Right, I would have to make another instance or something, but now I just kind of have that capability there for me. Okay, now as I continue to scroll down on the left, you can notice I have things like, I can set up SSL, I can set up custom domains. But one of the things that I think is really cool is that we have the ability to set up our scale up and scale out options. So if I click on scale out, you can see that I have the ability to enable auto scale out. What this will do is allow me to define some rules that will let App Service know how I want to add additional instances to my application based on, you know, as my load increases or decreases. So what I can do here is I can just call this, I'll call this rewards scale. I'll get this on there really quickly. Oops, sorry about that. It's hard in front of a lot of people. I know, right? Keyboard just doesn't work the same way. Now what I'm gonna do is I'm gonna add a rule. Now this rule is good to say, every time my CPU percentage hits about 70%, I want you to start adding additional instances to my App Service instance. But I have all the things I could do too, like I could look at the memory usage or even the disusage as well. I see every application is different, they have to scale for different reasons. Exactly. So I'm gonna go ahead and hit add. And all I have to do is hit save, right? And so now I'm gonna have those auto scale out rules available for me. So that's just one less thing I have to do for myself now. All right, that's that slider bar that slides to the right based on your application. Now you don't have to go and rack new servers. Right, exactly. Now, stepping forward a little bit, another thing that might be really important after you've published your application is I might need the ability to get really rich logs and telemetry information. So we have a service called Azure Application Insights that does exactly that. So if you look at my dashboard here really quickly, you can see that I have the option to look at the server response time. I can see the server requests. But I can also see the failures for the exceptions that might have been thrown in my application. So on the left-hand side, I'm gonna click on failures. And now I can dig down into the operations and exceptions that have happened in this app. So I'll select one of the exceptions I've fired here. And here on the right side, I'm gonna click on drill into, because I wanna get some more details about what's happening here. Now I'm gonna click an instance of this exception. And now in no time but all at the right-hand side, you can see we have the exception details. We have information about the call stack. This is that yellow screen of death that you might have seen occasionally in production where you shouldn't. And you tell the user to send me that information. Everything that goes wrong and the application's automatically being logged and you didn't have to do anything. Right, but just a little bit less scary over here. Yeah, it is less scary. Now, under related items, I'm gonna click on user flows. Now I really like this view because what it does is it allows me to see the path that the user took to get to that exception. So what are the things that this user did before that exception actually fired? And I could take a look at it here and see exactly what went on. I see, it's put in the error and context. Pretty much, yeah. Another cool option we have is the ability to look at the debug snapshot. Now what this is is app insights has gone ahead and taken a snapshot of that exception. So we can get an understanding of, well, what are the state of the variables? What would a state of the world essentially as we hit this? Now, here on the right side, I have the ability to download the snapshot as well. So if I wanted to, I can download the snapshot and I can load it into Visual Studio and now it'll just engage my debugger so I could use my local debugging tools to kind of see what happened in the service that was running inside of Azure. So it's almost like you're debugging in production except you're not. You're bringing the production dump down and then you see that experience, all the locals, all the watches right there. Exactly, exactly. All right, so we've seen how we could deploy this application and now we're getting some rich debug information. Now, how about we spice this up a little bit? I'm gonna head back over to the application and here on the left side, you see we have this option that says enroll in loyalty program. Now, what was supposed to happen is that every time we hit this checkbox, the Tailor and Traders folks want to go ahead and kick off a workflow and this workflow is gonna go ahead and verify the user and enroll them in that loyalty program. Now, we actually haven't implemented this workflow yet inside of the application. So we're gonna go ahead and do it now. I'm gonna use it with some features that are inside of Azure today. So I'm gonna go back to my Azure portal. So you're not modifying the code of the app though? No, I'm not modifying the code of the app at all. Because the app works, it's cool. Right, okay. So we don't wanna change it but what we're gonna do is we're gonna extend the app using some features that are inside of the portal. Now what we're looking at here is my Azure Logic App and now this is a way for me to create serverless workflows but we're gonna do it in a very, we're gonna do it in a very designer focused way. Okay. So I'm gonna click on my Logic App Designer and now what's gonna happen is that you can see that designer pop-up and it's gonna show me that workflow that we just defined. Okay. Now what happens when we hit that check box is that we're going to update a record in the database and that's gonna essentially like flip a flag and it's gonna say, I want you to enroll this particular customer. So the first thing that happens here in my workflow is that I'm monitoring this customer table. Now anytime there's a change in this customer table my workflow is gonna kick off. The next thing it's gonna do is gonna get the actual rule of information. Right, like what customer did we just change just now? And then the last thing that we're gonna do is send a text message to that particular customer using the phone number and also their name. Now remember we got all that information from the database. So those things first name and mobile numbers flowed through because you picked them up from the customer table earlier. Right. And then we can get some other fields from the database too. So if we take a look over here I can see different things like the city, country, email address. Again like whatever was in that role like we can pull that in or we could work with it with interesting ways inside of Logic Apps. Now if I wanted to extend this workflow I could hit this plus button. And if I go to action you can see that we have a large number of connectors that we could use. So for instance if I wanted to I could connect to something like Azure Service Plus or I could make an ACTP request. We also have a lot of enterprise connectors. So if I wanted to connect to something like SAP I could do that right inside of here as well. The whole marketplace of connectors that are serverless things that run inside that run inside of Logic Apps in the context of Logic Apps not as part of your web app. Right, not as part of my web app. So as you can see now what we've done is that we've used Logic Apps to essentially create an extension to our already existing website. And all it's doing is just monitoring that SQL Server database and I was gonna kick off this workflow that we've defined here in the design. Fantastic, thank you so much. Great, thank you. Thank you everybody. What I like about scenarios like that is there are things that you can imagine how you could apply that right now. You could leave this talk and you could think about how I could go and extend my application in that way. Adding functionality without completely rewriting or porting. That way it's not a big thing to move to the cloud. It's a natural thing to move to the cloud. There's a couple of resources here you might want to take a look at. Maybe take a picture of those. You've got an opportunity to get help. Actual human beings will talk to you and help you potentially move your .NET applications into Azure. And then if you already have Visual Studio subscriber benefits, there's a number of new migration tools that are automatically a part of your benefit. You've got Cast Highlight that will go and rapidly scan your code and basically give it a health check to tell you whether or not it's ready for the cloud. And then Cloud Pilot that will help you move your apps to the cloud, make the required changes to migrate to containers or VMs to change your connection strings to go to Azure SQL. It's totally up to you. Those are automatically built into your subscriber benefits, both Cast Highlight and Cloud Pilot. So check those out. Now this idea of serverless, once your application's in the cloud, you take it at that next level. You don't necessarily have to build your application entirely with serverless. You can evolve it using serverless. You've got a whole series of great managed services that are building blocks so that serverless is less of a buzzword and more of an empowerment. Azure App Service allowed Cecil to go and move his application up there. He can then augment it with functions and do consumption billing, logic apps as we saw there. He could use AKS with a new virtual node technology that just got announced in Guthrie's talk or use service fabric and scale to completely new heights. Now when you do all of these things, you might want to front it with API management so that you have a friendly front end that your consumers can then use your APIs. In the past, the billing for that was fairly fixed, but now we're announcing consumption tier for Azure API management. So just like that really consumption-based billing that you expect on serverless that is now applying to Azure API management as well, kind of creating API gateways for those traditional backends in case your API shows large spikes. Now I think it's cool that you can build your favorite apps with .NET. I've built lots of great apps from Baby Smash and WPF, which is open source now, which is awesome. My baby is now 13. So I've been using .NET for a very long time. I love imagining apps and building them with .NET. And the growth that happens in the .NET community right now is just continuing. We are seeing a million plus new active developers using .NET this last year. We've got over three quarters of a million .NET Core 2.0 developers. There are so many people using .NET Core. It's such a now a vibrant community. It just makes me happy that I picked .NET for my place. This is my people and I appreciate you all. You can build anything. You can build WPF apps, you can build WinForms apps. You may have been doing that for the last decade. You may have just jumped in with an Xamarin application. But the fun thing about .NET is it's your platform for building any kind of app. All of the people who are watching, who are WinForms devs or ASP.NET MVC devs or who are doing IoT work, know that your skills translate. I can become a dev on a Raspberry Pi or I can do IoT. I can use my editor. I can use Emacs and I don't know how to exit it, but I can use them Visual Studio. I can do any platform, anywhere, any language. And it just, it makes me happy that I have that flexibility of movement. I can imagine stuff that shouldn't be possible. You know how they always joke about the PowerPoint compiler? Yeah, it'll be great. We'll just make a PowerPoint compiler and that'll be a thing. Well, I want to bring out my buddy, Christos, because he's built a really interesting idea with .NET that is just too crazy not to show. So let's have him join. And he's bringing props, so that's exciting. How are you, sir? I'm good, thank you. So I wanted a PowerPoint compiler, but you do most of your architecture work on the whiteboard. So you had an idea and you, I told you it was crazy and stupid and you shouldn't do it. So of course, as any good engineer does, you did it anyway. We did, yeah. We started starting at Ignite. We had this idea of doing something with. With magnets. He made these magnets. These are really cool. I thought this was like a marketing gimmick. I said to myself, okay, these are magnets. They are magnets that show Azure services. I'm like, okay, that'll be fun. I can put those on the whiteboard and those will be cool. Now of course for the demo that we're gonna show you here, these are a little small. It's Las Vegas. So we did the only thing we could. We made giant magnets. Yes. So show me what you're gonna do with these giant magnets. Okay, right. So first of all, we're going to design an architecture for our web app. So it'll be a web app and we'll start with the app service. It's gonna hold our web application. We're gonna have a SQL database to store our data. We're going to have a storage account for some website assets and finally some serverless goodness with functions. Okay, you probably should draw some boxes. Here, let me add some value. Right. In fact, we want the Key Vault as well to store some sensitive information. We shouldn't be having them on web configs and stuff like that. So I'm gonna write Key Vault. Okay, right. If you don't have an icon, I guess for Key Vault. So Key Vault of course is gonna store your connection strings, your certificates. It's a component of this and then you could, I guess draw lines and do the kind of boxes and lines diagram that one does when they're making an architecture. It looks very official. I do this all the time. You know that you've reached a certain level you can just stop here and still get paid. But at some point, I gotta go to the portal now and I gotta type all this up, right? No. Let's not do that. Okay. Let me give you what we did actually was giving people the ability to take that and do something amazing. So I'm gonna take my application here. It's a sample app that we're all together. We have the subscription selected. So next I'm going to press continue and this will allow us to take a picture. So let me take a picture of the architecture like this. Now check this out. This is really good, right? I'm gonna use this one. Okay. And what this one is doing right now is actually sending that image all the way to Azure Cognitive Services. Analyzing the picture and coming back with the services. So see what happened there? So you can put this directly into production. Yes. So you go from the board to the phone in a few seconds. I love that you actually made me a whiteboard compiler. It's a whiteboard compiler. In fact, you don't need the magnets. That's very important to highlight. You don't need the magnets. You can write the whole architecture by enumerating the services like Key Vault and Web... Well, I just realized that you wrote Key Vault because you didn't have the magnet for it. It recognized that. It knew that that was an Azure service and it made that. Yeah. Okay. And if you don't have the magnets, now imagine that you're in a team using Surface Hub and you're collaborating on Visio. Okay. You can take a picture of that as well. Well, you didn't actually do anything though because you just showed me a list of stuff. Oh, no. Excuse me. Next step. Pardon me. Right now we're gonna select this region in Azure. So, US East and then we're gonna select the user screw. Listen, Tacos. Tacos. I'm hungry already. All right. All right. Tacos. Sorry, let's do that. We don't want to use an existing one already. So, Tacos and Prestiply. Did you see what happened? We're kicking off the deployment. So do you have like some web service in the back end and that thing's talking to Azure now? No. Everything's running on the phone. You're running what, like Azure SDK and you're calling the Azure... So we have the Azure SDK, the .NET standard SDK that we have available and what we're doing is we're using the phone to actually deploy everything to Azure. So everything is self-contained and in fact, we're running all the tasks in parallel as you can see over there and the idea is that we want to be very efficient. So you can go from whiteboarding your session with your team to being on Azure in a few minutes. I don't believe it. Lies. Lies. It's all lies. Let me show you how the code works, right? Okay. And you might ask, are you a guru in ML? I assume that you have a PhD in data science. I was totally new. When we started this project, I was like, I want to see if we can do it, right? We had the idea, we decided about it. So two services that we decided to use was the Azure calling the service, the Custom Vision AI. And in fact, as we were developing the application, the feature recognition, the feature log recognition came available for us or were the first ones to try it out. So if you go to the service today, you'll find it there. It makes that prediction much more efficient. And in the code here, we have two classes that do most of the heavy lifting and you'll see that we only have probably what? Eight lines of code there that take the text that we typed there or we wrote and it translates that to something that we can understand in the system. So seeing a picture of text and turning it into text, I get that. You send that up to Azure, but the image part, you made those images custom. How did you teach Azure to know what that meant? So we took a couple of pictures of the, you know, architecture, different examples. And then we uploaded to the Azure Custom Vision and we trained the model for that. And then we moved into the code. So what we're doing here is we actually call out to the service, the model that we trained and then it brings us back the enumeration of the services that we have on the whiteboard. Fantastic. Now, you mentioned .NET standard. The .NET standard allows you to write a library and then the standard is then implemented and runable anywhere. This is running on the phone to be clear. This one's running on the phone. It's a Xamarin application that has a cert code written in net standard, and in the phone over here, as you can see, this is a deployment manager, which kicks off the tasks. And it's interesting because you're using taskfactory.starting. This is quite compact, but also sophisticated parallelism that's happening on the Android, on the iPhone. Or if you chose at some point in the future to move it to another place, you could do that, like WinForms or WPF, because the .NET standard is everywhere. Exactly. So you can lift it and sift it and take it anywhere you want. Our app setting is here to configure your services. And in fact, we should go back into the portal to check whether that's done. So if we go into our resource groups, we can see tacos there. All right. And check that out. And there you go. Five services. Fantastic. So you created those, and then, of course, there's more than five because of the supporting, underlying things like an app service plan. And then you deployed it with app service. App service to support the logging, the build, the distribution, and everything else. And in fact, as of today, this is open source. So you guys can go out there and download it and test it and see how and where you can take this because it's amazing. Fantastic. What a great sample. And I love that we argued about this at Ignite. And I told you it was totally impossible. And you did it anyway. We did. And that makes me very happy. Thank you. Thanks for hanging out. Thanks for having me. All right. Fantastic. Literally, I was just walking by the booth. And I was like, yeah, I got this idea with the magnets. And I was like, come on, it's just dumb. You can't do that. And he did it anyway. It's just such a joy. When people go and do stuff like that, and we can showcase it, and we can think about that. Whatever idea that you've got, you can probably make it happen as well. He pulled that off in a couple weeks since Ignite. He used the Visual Studio tools for Xamarin to build the application on the phone. Again, no back end to go and do that. There's no supporting web service because he found that the phone had the power to do what he wanted to do. And then he went to Visual Studio App Center. And that does his deployment and his management. And he ended up putting it on both Android and on iOS. Now, .NET Core 2.2 is now generally available. And we're happy to announce that huge improvements on performance, especially when you put things in iOS. You don't have to put things in the cloud. You can go and do this in iOS. And you're going to get great performance just by upgrading up to .NET Core 2.2. And then we're ready for you when you do move into the cloud. We've also added HTTP2 support as a preview in ASP.NET Core. And so much more. There is a huge list of improvements for web APIs, for security, API security. We've updated all the templates to Bootstrap. We've got new Angular support. We are moving so fast. And then on the database side, on Entity Framework Core, we've added support for spatial extensions for both SQL Server and SQL Lite. Your database, your platforms, your locations, such great fun that's happening right now in the .NET Core space. Now, this one's interesting. The .NET Foundation. It's an open source foundation. And it's there to guide and to shape .NET. There's a new governance model. And you might think, oh, that's not really an exciting thing at all. A new governance model is actually hugely exciting, because what's happened here is something that you would not expect from Microsoft. The Foundation board is expanding from three seats to seven, with just a single seat appointed by Microsoft. And the remaining six seats will be elected by the community. Board elections are going to start in January. Anyone at all, any person who has committed to a .NET Foundation open source project, can run for the .NET Foundation board. And you can vote. And this new structure is going to really help the Foundation scale with this growing ecosystem that we've seen. This is based on the way that you see the GNOME Foundation do things. And it's going to allow the community to really take a strong leadership role. And what we do with the newly open source WinForms and WPF, we've got this amazing platform in .NET and this amazing thing to run it on in Azure. And it's great to have the .NET Foundation supporting us in all of those things. And I'd like to see the community jump in, start running for those board seats, and make it happen. We've even gone out and we've got some new expansion on our technical steering group with new corporate sponsors. We've just added Pivotal, Progress, Telerik, and Insight. And they are adding to the already illustrious group of people like Red Hat, and JetBrains, and Google, Unity, of course, Microsoft, and Samsung, all there as corporate sponsors to help move this technical steering group and the .NET Foundation forward. So I appreciate all of them and the fact that they are joining us in this journey. Now, you've heard me say, you're apps in any language. You know that I like .NET, but Azure's not just a .NET shop. Everyone is welcome. You can do anything that you want. With any language, it makes you happy. Your tools, your language is your apps. We saw a cool example just then that was using .NET but was also doing some cool stuff with machine learning and a model that was custom trained. I want to invite Dr. Francesca Lazzieri to come out and talk to me about building intelligent apps with Python and Azure Machine Learning so I can learn more about this. Hi Scott, how are you? So over the next few minutes, we are going to learn how to create a pet detector together. We will be using Azure Notebooks, Visual Studio Code, and Azure Machine Learning Service to train, optimize, and deploy a deep learning model that can recognize the different breeds of dogs and cats. So in this repo, as you can see, there are many different files that we're going to use for this demo. You need to import this file in Azure Notebooks that is our free Jupyter Notebooks service hosted on Azure. And a new feature that is in Azure Notebooks is that I can connect to a data science virtual machine to run the computer in my notebook. So as you can see here, I'm using a GPU, the SVM. It says GPU though. That's graphics processing. What does that mean? Is that special? Yes, it's special because as I said, the model that we are going to build together is a deep learning model and the deep learning models need a large data set that usually is like training data. And the GPU can really help with the training process. So let's connect to it. And as you can see, we are going to open a notebook. A notebook is similar to a blog post. The only difference is that there are so many different cells. They need cells. There is some code that I wrote. To run it, you can click on Run or you can just click on Shift, Enter, as you can see. And this specific notebook use TensorFlow that is a library for deep learning and also Oxford Pets data set for the data. So let's look at the data. Here we have pictures of 37 different species of dogs and cats and all the data lives in the images the director of this project. So as you can see, let me show you. So as you're moving from cell to cell, you're hitting Shift, Enter, and it is actually executing that. So like you said, it's like a blog post, but it's code and you as a data scientist, you live in notebooks. I live in notebooks. Now that I show you the data, the next step is to train my model. Here, this cell is going to take just about 20 seconds for two main reasons. As I said, we are using a GPU data science virtual machine. And the second reason is because we are using transfer learning, which is a very powerful technique that allows me to just retrain the final part of a layer, what we call layer in machine learning. So this, again, it's very, very fast. So let's look at the results of this training. So as you can see, we got an accuracy of about 79%. This is the test accuracy, which is pretty good, because the first model that was published in 2012 was able to get all the inaccuracy of 59%. But as a data scientist, we always want to do better. So let's try to do something more. Azure Machine Learning Service has a feature that is called Hyperdrive that can help me with the hyperparameter optimization. So hyperparameter optimization is a way for data scientists to change values at the parameter levels to improve the results that you can get. So let's run this part. Also, as you can see, I need to get the reference to the workspace, which is a container that I can use to manage data and computer resources. So let me run also the training script. And now I'm ready to create and submit a hyperdrive job. And that is this part. As you can see, I'm doing a random sample of the learning rate. And I'm also trying 20 different values here and let it run up to four jobs at the same time. So you're trying to optimize it, getting us beyond 79%. Yes. You're trying different things. You're plugging in different variables. Yes, exactly. And I'm using hyperdrive, that is a feature in Azure Machine Learning Service. So another cool thing that we can do here is that we can look at the progress of the hyperdrive run using the Azure Machine Learning Jupyter widget. So let me show you how it works. You can just look at the different results. Here I have a completed hyperdrive run for us. And as you can see, in real time, you can look at all the results of your different runs. And like for example, the run ID, the duration, when it started, and you can look also at the different metrics. You can see that now we got a much better metric. So this is actually the validation accuracy. The test accuracy is 90%. So as you can see, just in a few minutes, I was able to improve my model accuracy from 80%, more or less to 90%, which is pretty amazing in my opinion. So data scientists love to use Azure notebooks for their experimental code because it's both, I think, very interactive and maintain a rich history of their experimentation. But how, I would say, data scientists and developers can collaborate together. So this is a problem that we have to fix somehow. So I think the developers can use a Visual Studio Code to take the experimental code from data scientists and turn it into a Python module. So this is a Visual Studio Code that is running on a Python extension. So the file we are interested in is the demo file that is exactly the file that I was showing you before in Azure Notebooks. As you can see, immediately Visual Studio Code asks me, do you want to import it in the Jupyter Notebook into a Python code? Of course I want. And here, what I need to do immediately is to save it. Let's call it demo. I noticed right when you did that, it lit up. Yeah. With new stuff, run cell. Are those the same cells? Yes. So now here, the code cells are transforming Python file and we are leaving the markdown cells just as a comment. So let me show you. The most beautiful part is that you can, just let's say, click on this cell and then I can click on this other cell and you can see that the output from these two cells are visualizing this Python interactive window. So I'm really having the same interactive execution experience that I was having earlier in Azure Notebooks. So this is very, really amazing. Now I'm ready to start refactoring my code. I can just select a part of my code. I can click and for example, I can use extract a method to write a new function. Let's call it highscot function. And here is the new function. I can keep doing this for the whole file but now I have already finished version of the file. As you can see at the top, I sorted all the imports and here I have split the code into different functions just to clarify the training steps. So are you saying that you've turned the Python notebook now into an application that then can be shared and be reused? Exactly. And do you get in telecode for all the same kind of experience? Yeah, let me show you exactly. So after that you have a trained model, the next step is to create a score file. Azure Machine Learning Service made this very easy because the only thing that you need to do is to create this score file that define how the data coming to the service needs to be processed and how the model needs to be used to make predictions. And let me show. The only thing that I think I need to add to this script to resize the image is a little piece of code. And here I can type it, for example, image. And as you can see, there is Intel code that is really suggesting me what to do next, what to type in next. So as you can see, it's less, for example, here. So as you can see, it's really, we are using AI to write AI. And this is done by Intel code, which is really amazing as far as data science is. And all the tools work together. All the tools are working together. Yes, yes. So now that we have a trained model and a script file and a score script file, the next step is really to deploy this model as a web service on Azure. As you can see, we can click on the Azure icon. And here we have our Azure Machine Learning extension. And what you just needed to do, you can see all the models that you have deployed, sorry, all the models that you have created here, and you can deploy them as a service to, for example, Dockend container that is running on Azure container instances. So this is a trained, this is the 99% model, the 98% model. Yes, exactly. And here I have the model that I already deployed. So now let's test this model. Let's see if really this model can, for example, recognize the breed of my dog. Here I have a test app. As you can see, the only thing that here I can do is to type at the top these, just to turn it again into a Python file to get the same experience, the same interactive experience that I was getting in Azure notebooks. I can try to run on cells. And I want to use again these Python interactive window to look at my prediction results. So again, this is the model that we deployed. And as you can see here, you can see the same results. You can look at the prediction results, and this is actually the image, the photo of my cute little dog. His name is Leonardo. And the model is saying that is an English Cocker Spaniel. And she's... That's true. It's true. Yes. So, yeah. That's fantastic. Thank you so much for sharing. Thank you. So we have seen, we just watched Dr. Francesca go and create, optimize, deploy, using Visual Studio Code and Azure Notebooks, a deep learning model. And then she put that into the Azure Machine Learning Service and then called it from code. I, as a .NET developer, could then maybe consume that model, make that available to me in any way that makes me happy. I could use ML.NET to consume that. Whatever I want to build, it's available to me. Whatever language, whatever framework, whatever platform that you're committed to, we're committed to it too. We're going to support your languages with all the different tools. Whatever makes you happy, whatever makes you feel productive, we're going to try to make those tools to turn your great ideas, whether it's a whiteboard compiler or it's moving an application that is 10 years old to the future, or if it's a machine learning model for your dog. We got you. Everyone is welcome. We want you to be happy. We want you to be productive. I hope this session helps you a little bit to understand the broad set of options that we've got available on the platform for developers. We explored happy and productive development. We saw how the cloud can be made easy. We saw how you can deliver intelligent applications using .NET, using your favorite languages and frameworks. And I want you to go out and learn about application development on Azure. You can go check out aka.ms slash azureappdev and take a look at that new place that we've launched for cloud developers launched today. If you haven't figured it out yet, we're not joking. Microsoft loves you. You like developers. That's why I work here. I got a whole day of awesome sessions. If you're watching this live, continue to watch. Tell your friends, twitch.tv slash visual studio. We've got content for next several hours. Take a picture of that slide, because there's a lot of great stuff and a lot of great people that's gonna happen. Stay with us for amazing live coding sessions. Those are gonna be on Twitch, on Mixer. Follow us at msftconnect on the Twitter. Thank you very much.