 We have over here, Michaela, how are you, my friend? Pretty good, thanks. Fantastic. We're doing a tour of Visual Studio for Mac for .NET development. Why don't you take it away? Great. So, hi, my name is Michaela. I am an engineer working on Visual Studio for Mac and the Xamarin platform based out of Cambridge, Massachusetts. So today, I'm going to start off by giving you a quick introduction to what VS for Mac is. I know a lot of you out there are using it, but some of you aren't, so I'll make sure we're all on the same page there. I'll give you a quick retrospective of how we got here, and then I'll show it in action, so you can see all of the shiny new features and a little peek at what's coming up in the future. So Visual Studio for Mac is a .NET IDE for the Mac. It aims to provide a native experience, so if you're a Mac user, you expect your Mac apps to feel like Mac apps, and that's our goal. It enables you to develop apps and games for iOS, for Android, and for web, and it's built on the same foundations as Visual Studio for Windows. So it's built on Ruslan, that's where it gets the IntelliSense and code analyzers and fixes, all the same ones you have access to on Windows. It uses MS Build as the build system, NuGet for package management, and various other pieces of the Visual Studio platform, and it's all built on .NET. On top of that, it provides support for mobile via Xamarin Android, Xamarin iOS, and Xamarin Forms with .NET Core. You can do ASP.NET Core for web. You can containerize those with Docker, and you can also do a serverless with Azure Functions. If you're doing games with Unity, it also has intricate support for debugging those and all of the Unity-specific code completion and that kind of thing. But I'm not going to be talking so much about the individual scenarios today. I know you've heard about a lot of those earlier. If you missed those, those are recorded, you can go back and see them. I will be focusing on VS for Mac itself. So we launched it almost two years ago in June of 2017, and that initial release had support for all of these core scenarios that I described, including all of the C-Sharp, IntelliSense, and refactoring, and debugging that you would expect for those. A couple months later, we added support for .NET Core 2 when that released. In October, we added Docker support, so you could containerize your apps and deploy them to Azure. We then overhauled the iOS signing experience, making that much smoother, so you no longer had to manually provision your devices and so on. In 7.4, we made some upgrades to C-Sharp IntelliSense, full support for C-Sharp 7.1, and we made the iOS deployment and debugging experience much easier because you can now do that wirelessly over Wi-Fi. So if you wanted to have a headset or an accessory plugged in, for example, you can now do that while you were debugging. 7.5 in May of last year was a very big release in that we added editor config support, so you could share your settings about how things should be formatted and so on across your team and also across Mac and Windows, so your whole team could have consistent style settings. We also ported the Razer and TypeScript and JavaScript, and those IntelliSense experiences from Windows, the exact same code. In 7.6, we added support for publishing Azure functions for serverless support. In 7.7, we made it much easier to discover the availability of quick fixes and refactorings via the light bulb, and that brings us to 7.8, the last of the 7 series, which was mostly focused on performance and reliability. Though over the whole 7.x lifecycle, we have made major performance and reliability improvements in every release because we've heard that those are very important to everyone. So that brings us to today. We are releasing version 80, which is Visual Studio 2019 for Mac, and so I'm just going to go straight into a demo. So here I have the smart hotel sample that some of you may have seen from GitHub, and if we go over to, so the way this is structured is that we have a client app which is written in JavaScript, and then the back-end app of the web app is all written in the.NET Core 2 C-Shop, and if we go into the client app, you can actually see down here in the source files, you can see we have JavaScript files, and you have all of the IntelliSense that you would expect there, and we have some SaaS styles here, and again there's full IntelliSense for those two, and if we run this app, it's going to open up the website it built, and it's going to open up in the browser here. So it takes a second to load, and once it's loaded you can see the website here. Now this little area here is actually pulling these testimonial tweets from a back-end service that's written in C-Shop. So I'm just going to go and take a look at that, and so I open the global search with command period, that is the quickest way to get to any file, you just have to type a part of the class name or a part of the file name, you can use camelCaseCasing, I definitely recommend using that for jumping around between files and classes. So I'm going to open the positive tweet service, and this is where that tweet comes from. So if I place a breakpoint in here, and go back to the web browser and refresh it, you will see that it hits the breakpoint as expected. But this currently just has one single hard-coded tweet in there. So what I want to do is make it a little, is have a little more variety, so it's not always showing the same thing. But first I'd actually like to show you the editor config support, because this is super neat, it makes it really easy to keep your code consistent. So as you can see here, this is being assigned to a var, but some people don't like var, they think it makes the code harder to read. I disagree with them, but if I have someone on that team and if the person on that team is setting the style, for example, they might go into editor config, and we can see here that it has a setting to use var for built-in types, and when the type is apparent, and elsewhere, this is set that var should be used in all those cases. But I'm gonna change this so that instead it's gonna use, it says that var should not be used, and this is going to be a warning. And when I save this and go back to that file, and just make a slight just touch the file so it re-analyses, you can see here that there's now a squiggle on this that tells you that we should be using an explicit type instead of var. So I'm gonna just, and you can also see the light bulb here makes it easy to see when these things are available. And I'm gonna just, or you can access that via alt enter, which is my favorite keyboard shortcut. It makes a lot of things very easy, and just hit enter, and it changes that to the explicit type. So there's a whole load of these analyzers and fixes, and you can find them very easily through this light bulb. I'm just gonna go and change that back because I think var is great, and I want people to use it everywhere. So we go back here, touch the file again, and you can see that now it's suggesting that the name can be simplified and we have the reverse transformation there. And as you could see in the edge to config file, there's a huge number of settings that control all of the analyzers, and these are supported across both Windows and Mac. But yeah, so I'm going to go and randomize our tweets a little more. So here's a snippet I created earlier, and I'm also going to add some sample tweets here. Because it's not a real hotel, I asked our PM team to give me some tweets, and so these are their real Twitter handles. You can follow them all and tell them how much you like. Fias for Mac or things you don't like, things you'd like us to add. So check out their Twitters. So here we have our tweets, and so we're just gonna get random, and we're gonna return testimonials of get random. Okay, and also this is a local function here. Okay, so var testimonial, and then I'm gonna use the quick fix to deconstruct that. And you can see that because these aren't actually being used yet, they're grayed out, but I'll be using them in just a second. So now I'm gonna just return a new customer testimonial where the customer name is handle and text, text is the tweet. There we go, and I use a local function here, but you can actually see one of the new Roslin 3 fixes to convert that to a method, and we could also save that to a file. Okay, so we have this here. Gonna go and build that with command K and run it, and it's running, and here we can see we actually don't have any tweets at all. So something must have gone wrong. It's trying to asynchronously load that. We have a little animation there. So let's go back and see what happened. So I'm gonna go ahead and run it. So I'm gonna go ahead and run it. What happened? So I'm gonna set a break point in there, and run this again, and when I step over, it doesn't go anywhere. So let me just add a quick exception catch point that'll break on every exception and repeat that. There we go. It's an argument out of range exception on get item. So I didn't actually limit the range of my random numbers. So let's go in here. I'm gonna just stop this and get random. Next is actually going to limit that to the length of the list. Oh, but that was static. So let's just make this, let's make this not static. So it can access that now. And you can see also here, we're getting some hints that we could make this read only. Make sure we don't accidentally remove it or something. I'm gonna run this with a break point. So we don't hit that again. Reload this. Oh, one second. Oh, I had my catch point still in place. So let's just delete that and continue. And it's loading. Just takes a second while it starts up the server. There we go. And so now we have a random tweet here. And if we refresh it, we'll get a different one, hopefully, unless the random number generator decides to return the same value. Yep, so now we've got something a little more believable. It's not just the same tweet over and over again. So that's an example of editing and debugging, a .NET Core app with a JavaScript and JavaScript and CSS front end. But there's, and so this is largely stuff that you've been able to do for a while with the exception of the Roslin 30 fixes. As I said, we've been focused a lot on performance and reliability, but there is one very exciting new feature that I want to show you. Actually, there's a few of them. So one of them here is you can right click on the app and do new instance. And this is something that we've heard people have been asking for quite a while because they want to open multiple solutions at once. So that is new in 2019. And now you can see our new welcome window. So this makes it much easier to get straight to your code. You have your recent solutions, your open and new. And this is very similar to the experience on Windows now. I'm going to just open up this clients app, which is part of this whole smart hotel thing. So this is the iOS and Android front ends for the smart hotel sample. And you can see here, we have the Android and iOS projects here and these are all, these have all of the pieces you'd expect, the platform specific renderers, but I'm not going to go into details of those things now. The thing that I would like to show you is our new C shop editing experience, which I'm really excited about. This is currently in preview. So if you want to use it, you're going to have to go into the preferences and you can find it here in preferences, text editor, general. And you can go and turn on support for opening C shop files in the new editor. And you can see here one of the new features, we have word wrap now. I'm going to just go and open a file. So I can show you a few things. Open this file here. So here we have a file and you can see here, it is the new editor preview. So just a reminder there that you're using the preview and you can always go and turn it back off if it causes issues. So it looks very similar, but let me show you a few things that are new in this. So if I open it in tell sense, you can see that that, it looks a bit different. And this is, it looks different because this is now fully native using the native macOS API. So it behaves more natively. So here it's actually using the pink color that I have set as my highlight color in macOS. So it's a more consistent part of the platform. You can see the tooltips here have that little soft, semi-transparent blood background you see on Mac a lot. And this also means that performance is much improved because we're not going through abstraction layers. So this enables us to take advantage of some of the GPU accelerated hardware compositing and so on. Another one of my favorite features here is that we now have integrated support for the all of the macOS input methods. So I can do control command period to open up the macOS emoji and then I can search for an emoji and I can enter that. So full support for emojis. I know a lot of people will be excited by this. I certainly am. We also now have support for right to left text. And full bidirectional. So you can combine text with different directions. I'm not personally familiar with the input methods for inputting these. So I'm just gonna copy the name of a poet here. So you can see this now as it this behaves as right to left text would behave. So this new editor is built on the same core as the Windows Visual Studio Editor. So this means that a lot of the little nuances of behavior will now be the same as Windows rather than slightly different. This will also enable us to bring more features from Windows to Mac more quickly. Like you can see here the, I always get this shortcut but there is, yes. So we have support for the multiple carrots that is control option click. And you can see that you can type into a bunch of places at the same time, which is really useful in a lot of scenarios. You can also see here our wrapping. So as I bring this in, you'll see these lines begin to wrap around and this little hint here that it wrapped. So this is just a taste of the things that you'll see with the new editor. It's not complete yet. So we would love to hear your feedback but you can always revert to the old editor if you want the more polished experience right now. This also, the new editor is also going to be much more accessible. Accessibility is very important to us. So if I open search here, for example, this is now all native widgets. So you get all of the built in macOS accessibility support. So to summarize, Visual Studio for Mac is a very capable tool for your web and mobile.net development. You have in TelSense for C sharp, F sharp, TypeScript, Razer, CSS, Sass, HTML5. You have full analyzers and refactorings and code fixes for C sharp to help you write code faster and to help find problems. A rich debugger across all those scenarios. I didn't cover it but we also have X unit and MS test and N unit support. We also have Git source control built in and in 2019 we've also added a new backend for that so it'll be more reliable. So new in 2019, we have the streamlined start window that you saw that helps you get your code much more quickly. We have more analyzers and fixes from Rosalind, performance, lots of performance and reliability improvements. That new Git backend and we also have integrated authentication for Azure DevOps Git repositories now. Major accessibility improvements since seven, eight and that new editor preview that you saw. I'd just like to take a moment aside to talk about performance and reliability a little more. This is something that we've heard a lot and it's been an ongoing focus for the team ever since our initial 7.0 release and there have been a lot of improvements across all our releases and it'll continue to be a focus going forwards. As part of that we've built infrastructure to help us track and identify releases automatically. We've also made major accessibility improvements across the life cycle of 7.x and into 8.0 and we aim to be compliant with the Microsoft accessibility standards by the end of year. And we've also integrated support for reporting issues through developer community and I'd like to thank all of you who've reported issues to tell us what is most important to you and what you'd like us to fix or add first because your feedback really does help us to identify which things are most important to work on first. And this is available to download right now. You can update via the updater if you have VS for Mac installed already. So I just open up the updater and hit install. If you don't have it yet, you can install it from aka.ms forward slash VS Mac and we would definitely like to hear your feedback on the new editor, just be aware it's in preview when you can always switch back to the old one. But we definitely look forward to hearing your feedback through developer community and that brings us to the end of my talk. So it's time for questions. This has been amazing. Thank you so much. There's four questions and we're gonna go through them rapid fire because you covered all of your time, which is awesome. Will Visual Studio for Mac support LiveShare? We do not have a timeframe for that right now. It's definitely feedback we've heard a lot. If you could go and upvote that on developer community that would help us to prioritize that. Fantastic, next question. Where can I get the code samples from the event? So there's some code samples that you likely had or are you putting them? So this, so the code samples I used are the smart hotel 360 samples that you can get from the Microsoft org on GitHub. Fantastic, from Elizabeth, does VS for Mac 2019 support have support for dark mode? Yes, it does. Fantastic, everyone loves the dark. Are you a dark mode coder? It depends on the time of day. I use dark mode at night and light mode during the day. See, that's actually smart. I was sitting there thinking I need to make a choice. Apparently I did not. From Jamie, what is your favorite new feature of VS for Mac 2019? It's definitely the new editor. It brings so many things to the table. Emoji support in particular. I know it's still in preview, but I'm really looking forward to that. I've been using it a lot myself. I'm looking forward to that being the default in upcoming releases. Fantastic, well this has been amazing. Thank you so much for your time.