 Hello everyone, and thanks for tuning in to my talk for the Pure Virtual C++ Conference. My name is Nicollin Hoot, and I'm a program manager on the Visual Studio, C++ team, and my focus is on making developers like yourselves more productive. You can follow my Twitter, which I've pasted on the slide, to stay up to date with some of the latest features that we're working on, but for this talk, I'll be focusing on what you can do to optimize your work-from-home productivity. Especially with the quarantine and COVID-19 situation, a lot of you are probably working remotely and realizing that there's a lot of things that we took for granted that are now becoming challenges. Specifically, I'll focus on three areas of challenges that we hear a lot, and I'll refer to those as the three Cs. There's compute, collaboration, and communication. I'll dive deeper into each of these, but for now, compute is likely a new challenge for some of you since you may not have the luxury of working on a high horsepower desktop that you had at work. And now that you're at home, you might be working on an underpowered laptop. Next is collaboration. If you've been used to peer programming or joint debugging, then this remote work situation has probably greatly affected your ability to do this. And then the last of the three Cs is communication. Apparently the icon that I have for this is something called a landline phone, but I'll be giving you some pointers of some tools that Microsoft offers to make your communication easier during these times. Now I know what some of you are probably thinking. Nick, there's another big challenge that we're facing now that we're working from home, and that's kids. Unfortunately, kids does not start with the letter C, so I can't give you any advice there, and I'm going to go ahead and move to the next slide before someone tells me that children does start with C. So the first area is compute. If you're using a less powerful machine at home, you might be struggling with longer build times. And even if your build times aren't too bad, you might not have enough RAM on your machine, and so you're finding that your limited local resources are preventing you from doing a lot of work in parallel on your machine. Luckily, I'll be showing you a demo of ways that you can alleviate these problems. We'll take a look at how Visual Studio's incredible integration can improve your build experience, and we'll also cover ways that Visual Studio Online can greatly enhance your work from home experience with its managed online development environments and by offloading your development compute to the cloud. With that, let's go ahead and dive into the first demo. All right, so I've opened up Visual Studio 2019, and I've opened up a project VC Package. VC Package is Microsoft's C++ package manager, but what I'm using it for right now is just as a demo code base because it's an open source project on GitHub, and I created a fork of it, and I'm going to be using it to show you ways that you can improve your build times. First, let's go ahead and just open up VC Package.CPP. In this file, because I've forked this project, I can actually see some of the edit history here, and I can see, for example, four different changes that were made from four different authors in the last few months. But what I really want to show is the incredible extension because, again, I want to show you ways we can address the compute challenge now that you're working from home. So the incredible extension can be acquired through the Visual Studio installer, and I'm going to actually run an entire rebuild of the whole solution to demonstrate some of the power of Incredibild. Incredibild offers a free tier license in this extension, which allows you to get advantage of this build monitor and parallelize your build on up to eight cores. So you can see I have these eight different Incredibild agents that are all working to build my project and accelerate my build. What's great about the build monitor is that it allows me to see bottlenecks in my build processes and see how parallelizable my build is and see which tasks are taking longer than others. You can actually take Incredibild to the next level if you upgrade your license and install the Incredibild agent on even more machines. So for example, you can install the Incredibild agent on other machines on your local network, and so then you can actually distribute your build among all those different machines or even take it to an even further level and put the Incredibild agent in Azure machines and use unlimited cores and distribute your build as much as possible. But again, I'm just showing you the free tier in this demo, and so everything's just happening on my local computer. So you can see my CPU is at 100% right now. I'm running a build right now. I have the recording software and a few other programs running on my machine. And so I'm actually using quite a bit of RAM as well. And what I want to show you next is Visual Studio Online because it'll show you how we can actually offload a lot of that development inner loop compute to the cloud in order to free up my local resources. So it looks like this Incredibild build has finished. I have the done indicator here. So now let's go ahead and switch over to see how Visual Studio Online can help free up some of these local resources. I just showed you how I connected to a fork that I made of the VC package open source project with Visual Studio on my local machine. But now I want to show you how I can connect to that same fork of the project but in Visual Studio Online. So what I have here is Visual Studio 2019. And you're probably used to this menu by now. But there's actually a new tab I want to call out. And that's Connect to Environments. And this allows me to connect to Visual Studio Online. So I'm going to go ahead and do that. And it's loading up my plan right now. And this plan is the billable entity that I'll be working with. And associated with this plan, I already have three different environments. So I'm going to be connecting to the VC package environment that I've created. But before I do that, I just want to quickly show you how I made it. All you have to do is click New, give it a name. I'll call it VC package 2. And then paste in whatever repo you want to work out of. So this happens to be the fork of VC package that I created. And then you can specify a SKU. So this is how much power you want your online environment to have. In this case, I've chosen an 8-core 16 gigabyte RAM machine. But if you don't think you need that much power, you could always scale down. And later, if you decide that you want more power, you can always adjust that. And I'll show you how to do that later. The last setting and the only other thing you need before you can create is to just specify what sort of timeout period you want. So you can say, after two hours of being idle, I want my environment to suspend. And this allows you to follow a pay-for-what-you-use model. So by saying two hours, my environment will be up and running for a long amount of time. And I can reconnect quickly. But if I choose something like five minutes, that means after five minutes, my environment will suspend. And then when I go to reconnect, I will have to pay the price of having to wait a little bit longer for that environment to start all the way back up. But with that, I could just click Create Here. But again, I've already created that environment. So I'll go ahead and just connect to my existing one. So this starts up Visual Studio 2019 as you would typically see it. And you've probably already very used to this UI. But one thing I want to call out is it's connecting to my Visual Studio online environment. And my local machine is only responsible for rendering this UI. All of the other tasks, all these other compute tasks, like populating my solution explorer, the language services. And when I go ahead and build later, all of those tasks are being done in my online environment. So my local resources are really freed up. And so that allows me to take advantage of offloading that work in order to do other things while I'm in my development inner loop. So one thing to call out is this terminal. And this is my terminal view into my online environment. You can see it has the F drive right now. And that's associated with my online environment, not my local machine. So I can go ahead and type dir, and maybe I'll cd into my actual project here. And in here, we can see that I actually have the same structure that I see over in my solution explorer. So the same stuff here is actually populated over in the tool source folder here. So this is my view into my online environment. But again, I obviously also have the solution explorer populated here. And I can click these projects and they get rendered immediately in my view pane here in my Visual Studio client. But I am connected to that online environment. So what I want to show now is building this project. And to sort of demonstrate the power of this, I'll go ahead and rebuild actually the entire project. And while that's happening, I'll open up this same CPU monitor that I showed before. You'll remember when I built this locally on my eight cores, my CPU was all the way at 100%. But this build is happening right now and I'm hovering around 30, 40%. So I have a lot of extra space, memory at 55. I've got a whole lot of CPU power to do any other task while I'm running this build. So that allows me to use these limited local resources a lot more efficiently. And the build actually already succeeded and it went by very quickly. So that's awesome. Now I could start a debug session connected to Visual Studio online with this project. But I want to briefly switch to another project to show you how to debug. I've jumped on over into this project called 2048, which is a console based implementation of the game 2048, which is super fun. But I just want to show you the debugging because it's got some interesting debug output. So I'll go ahead and start the session. And again, I'm connected to Visual Studio online as you can see up in the top here. So what's super cool is that in this debug session, let me go ahead and click continue. It renders my console UI from my online environment into my local machine through LiveShare app casting. So this LiveShare title up here lets me know that this is being app casted. And I can actually interact with this. I can go ahead and start playing the game with my WASD keys. And that starts moving these numbers all around. And I can start playing the game. But I can play that game for way too long. So I don't want to bore you with that. But I also just quickly want to show you still have access to these auto local watch windows and a lot of your debugging tooling while connected to the Visual Studio online environment. So I'll stop the debug session. And now I'll switch over to the browser. So in this browser, I'm on online.visualstudio.com. And we can see the same three environments from my Visual Studio online plan that we saw when I had connected from the Visual Studio client. So now we're basically just using the browser as a client to interface with Visual Studio online. And this obviously opens up a whole lot of doors because now I can access my online environment anywhere I want as long as I have a browser. And this is also where I can change my instance type to a different amount of cores or RAM and where I can change my suspension timeout just by clicking on Change Settings. But what I want to show is actually connecting to one of these environments. So I'll connect to this VC package environment that we've been connecting to throughout. So in the browser, everything's being rendered here. I don't have any of the source code locally or anything like that. It's all coming from my online environment. And we can see my source tree has been populated here. And I can go ahead and click on one of these files. And I open it up right in my browser. It has all the semantic colorization that I would want. And I can even right click on something and go to Definition. And that all works just fine. But again, this is all in the browser and I'm connected to Visual Studio online. So it's super powerful. If you're used to VS Code, then this UI and this layout is probably very familiar to you. And one thing I want to show is down at the bottom, I have this CMake Tools extension. So I can actually go ahead and run a build from my browser. Now I already have, so that's why it's telling me that there's no work to do. But we can also go ahead and debug here. And now we're getting the same debug output that we would get as if we were debugging on Visual Studio, except now we see this output in our debug console here in the browser for VC package. So this is a super powerful tool, an easy way to connect to your environment. So if you even share your online environment with someone else, they can connect to it with their browser and it opens up a lot of flexibility there. Okay, so let's take a second to recap the two demos that we just saw. First we looked at incredible integration in Visual Studio via the extension. You can get the extension in the Visual Studio installer and it gives you build acceleration on up to eight cores and access to their build monitor which lets you diagnose bottlenecks and which build tasks are taking the longest. We also saw Visual Studio online and saw the power of these online development environments. We're able to offload a lot of our interloop dev tasks to the cloud. And because Visual Studio environments are online, we can access them from anywhere, whether it's from the web, Visual Studio code, or Visual Studio. Lastly, these online environments allow for easy onboarding. So once you've created this online environment, you can share it with a new hire for example so they can get off and running quickly and start contributing to your code base even if they're working remotely. The last thing I wanted to bring up is Azure Credits. Probably with your Visual Studio subscription, you get access to monthly Azure Credits that you can use for individual usage. And I wanted to point out that you can use these to test out Visual Studio online. So I encourage you to do so and let us know what you think. So that covers the compute challenge area. The next up is collaboration. What Microsoft offers there is live share and that allows you to tackle things like pair programming and joint debugging among other things that you might find to be challenging during this remote work era that we're in right now. So let's go ahead and dive into a demo of live share and see how we can use it to improve our collaboration now that everyone's working from home. Once again, I'm in Visual Studio 2019. For those of you who don't know what live share is, essentially it's a way to allow multiple people to work on the same code base at the same time. To enable this, there's a host who has the source code and the language services. And then there's at least one guest who doesn't need to have any source code or any language services locally. They get all of that from the host. And the host and the guest can be any combination of Visual Studio, VS Code, Vice versa. And so it gives you a lot of flexibility on how you can set up these collaboration sessions. For the purposes of this demo, I'm going to be using a Visual Studio host and I'll also be using a Visual Studio guest. To start a live share session, all you need to do as the host is click on the live share button in Visual Studio. And what this is doing now is generating a shareable invitation link for guests to join my session. So now over on the guest side, you can just save file, join live share session, paste in that link, and click join. Now the guest has joined the collaboration session. And on the host side, I can see who has joined the session. As the guest, I'm able to do any sort of edits to this file and the host can see them happening on their side as well. But now let's say I scroll maybe a bit further down in this file and I start highlighting some things to show the host. Well over on the host side, I have no clue where you are. And so I want to show you that if I just click on this button, I can follow this guest. And now anywhere that that guest goes, I'll be following so I can see where they are editing my file as we pair program. Even if they jumped to another file, for example, game input, the host also jumped into that file as well. So we've seen a little taste of the power of live share for pair programming and how you can make edits and navigate through the file completely independently of what the host and the guest are doing, or you can follow them around. But another really cool feature of live share is the joint debugging capabilities. So when I start this debugging session, here you can see it spawned up this console app game. And my guest is in a debug session with me. And now what has popped up is a live share app casted version of the app onto the guest machine. So the guest can now see everything that the host is seeing as they debug their app. It gets casted over to the guest device, as we can see indicated here with live share at the top. And this is a live debug session, but I can debug or I can play that game for a long time. So I'm going to go ahead and end the debugging session and it ends it on both the host and the guest. All right, so we saw how we could connect with a Visual Studio guest to this Visual Studio host. But now I want to show you one last new feature of live share. This allows you to just paste that shareable live share link into a browser. And then that person can either join with Visual Studio code or Visual Studio if they have it on their machine. But if they don't, they can actually join the live share session from the browser. So this is a super handy tool if, for example, you're doing remote candidate interviews for your company. So I'll go ahead and sign in so that I have the ability to edit. And I don't need a Visual Studio account. I can just use my GitHub account or a Microsoft account. And so now I should be good to go and I can actually edit this workspace that the host has shared. And again, the host gets notified once I've joined even from the browser. And so now in this browser, I have full access to this source tree. And I can open up files and I can go ahead and make any sort of edits that I want to this file as I do, for example, a coding interview for your company. So it's a super powerful tool. I'm now able to actually connect from the browser to a live share session. And again, I can follow around as the host wherever the guest goes. So this can be really handy for you, not only for candidate interviews, but even if you're maybe on the go and one of your coworkers needs help. As long as you have a browser, you should be able to join their live share session and help them out. Okay, so we saw a lot of the power of live share and how it can be used for pair programming, joint debugging, or even conducting remote coding interviews. It's on by default in Visual Studio, but you can also get it as an extension for VS Code if you prefer to use VS Code. And then lastly, I also showed you how to connect from the web. So you can share that live share invitation link with anyone. And as long as they have a browser, they should be able to connect to your session. Lastly, app casting is a great way to do these joint debugging sessions. So the guests can see exactly what you're seeing on your app as you're debugging. And the final part I wanted to bring up about live share is the insider's capability. So in Visual Studio and VS Code, I have a screenshot for both on the right. You can actually choose to be a part of the insider feature set. So you can be exposed to the latest and greatest improvements in live share. And that takes me to the next slide because one of the insider features is audio calling. And so if you want to do that within live share, definitely sign up for insiders. But speaking of audio calls and communication, that's the last challenge area that I want to cover. And it's hard to talk about communication without bringing up Microsoft Teams, which allows you to do video conferencing on the web or the desktop app. And it's part of Office 365. So if you already have an Office 365 subscription, you should be able to have access to Microsoft Teams. But what I really wanted to bring up here is that because of this COVID-19 situation, Microsoft actually has decided to make Microsoft Teams free right now. And so you can go to aka.ms slash customer commitment. To learn more about our COVID-19 customer commitment. And how you can get Teams for free during this time. All right, speaking of updates, here's my final slide. Just some links so you can stay up to date with the latest and greatest that our team is working on. I encourage you to download the latest Visual Studio preview, which you can do at the link here. And again, you can probably just do a screenshot of this page and save these links. But you can also visit our blog. And we blog all the time about new features that we're rolling out. And you can leave comments on the blog, give us suggestions, things like that. I also encourage you to join us for the Microsoft Build Conference, which is also going to be an online virtual conference. So the good news about that is that there is a much lower barrier to entry. You don't have to travel. So definitely encourage you to go there. We have our C++ team has quite a few talks. And lastly, follow our team at Visual C on Twitter. And you can follow me as well to stay up to date with our productivity features. Thank you so much. And I hope you all have a great rest of the conference.