 We have our Streamline, your dream dev team with Allison and John. How are you my friends? We're great. Fantastic. So why don't you introduce yourselves and then we'll get into your content. Cool. So I am Allison Bucheltau. I am the Program Manager on Visual Studio in Telecode and we'll show you how to create your own custom model very shortly. I'm John Chu, a Program Manager on the Visual Studio LiveShare team. You can also refer to us as hashtag share pair because we've decided that is our duo name for all the talks we do now. Yeah. So are we ready to get going? Let's do it. All right. Cool. So hot off that question from Kendra, we are going to talk about Visual Studio in Telecode. So I hope all of you tuned in to our keynote this morning and got a preview of what Visual Studio in Telecode is. But for those of you who might have missed it, Visual Studio in Telecode uses machine learning and artificial intelligence in order to superpower your developer productivity. So we heard for years that intelligence is great but isn't there a better way than alphabetical? Right. There has to be. So what we did is we scanned over 2,000 open source repositories and we took that wisdom of the community and put that all together into in Telecode to give you better suggestions. So let me give you a quick example right now off my machine. So if I have some test variable here and I'm just going to make it a string, and if I do test dot, you'll see that I get these starred recommendations and it says, hey, given this context, this is probably what you want right now. Now, if I give it a little bit more information and make this a string array versus just a var and activate intelligence again, you'll notice I get slightly different things. There's length, there's clone, there's get length, it's slightly different. If I do an if statement, that was unexpected but you know, live demo, it happens. By do test dot, you'll notice I get yet a different set of recommendations, which is pretty cool. So this is just classic IntelliCode right out of the box. I do want to let everyone know that IntelliCode is an extension still you need to download it from the marketplace to get it to work in Visual Studio 2019, but we're just so excited that we had to share it with you guys and make sure you knew it was out there. But do install it. It is fully supported within Visual Studio 2019 and also the latest update of Visual Studio 2017. Cool. So that's our base case. That works great. But we had that question about how do I train it on my code. So I'm using the same sentiment analysis solution that Kendra was using and I'm writing this extreme love method here. What I want to do is go through our list of tweets and figure out, do people really love Visual Studio 2019? The way I'm doing that is seeing if there are at least five heart emojis. So if you want to show your love for Visual Studio, I need to see at least five hearts. Okay guys? So what I want to do is do ES, which is my custom class here, and you'll see this emoji search class doesn't have any star recommendations. That's- It's a custom class. It's a custom class. Right. That's not in the open source. It's really sad. So what I'm going to do is do Control Q and I'm just going to type IntelliCode. This is the easiest way to find the IntelliCode model management window. I'm going to hit Enter and it's going to bring this up. You'll see here it's got some information about custom models and I'm just going to click Train on my code and it's going to go away. It's learning my code patterns right now, and then when my model is done being created, it will give me those star suggestions which we're so excited for. So obviously, there's a lot of really interesting machine learning going on right now. So we have to be patient, but it will all be worth it. So what about if I'm working with a team and they want to get the star recommendations from the custom model? Right. So once we have our model here, you'll actually be able to share that model. So you'll see here if we move back to my screen, our model is done. You can actually hit Share Model right here. We've got a link copied to the clipboard, very similar to Live Share. We took some inspiration from you, John. I can just send that link out to my team and I can go ahead and click Add Model here and paste that link in and get that model. Look at the split. Yes. So now that we've got our model, I'm going to go back to my best tweets and I'm going to activate IntelliCode again. You'll see that in fact, I get the starred recommendation which is awesome. So I'm going to count the emojis and another great feature that we just released for IntelliCode is argument completion. So if I am here within my count emoji method and I do control space, which activates the argument completion window, you'll see that it gives me starred recommendations for my argument. So I can do heart comma, activate it again. There's my test tweet. It's pretty much just activate IntelliCode Enter. Like it's magic. It's typing it for you. So as I said, I want at least five hearts in here. Then if that tweet does have five hearts, I want to go ahead and add it to my list of best tweets. So best tweets.add. See, there it is. Don't even have to do anything. Test tweet is exactly what I want and our method is done. I didn't have to do anything. It's pretty great in my opinion. So that's IntelliCode. Now that we've got that already, this test has been a little finicky. I want to go ahead and debug it, run it again, see what's going on. It's a demo. Just make sure before you commit it. Yeah. I know you and I have been running into some weird issues this morning, right, John? Funny how that keeps happening during these demos. You know, it gets better, hopefully. Maybe we just need to ask the demo gods a little bit more to be kind to us. So in fact, when we debug this test, it does not seem to be passing, unfortunately. But you're our exception expert, right? I got you. Okay, cool. So I'm going to start a live share session with you. I can see in the top corner here that it says cool. I am now shared and I am going to send this over to you. Hope you're ready on Teams, John. Perfect. So I can actually go onto my side and I see that I got your message on Teams. You can see that we actually use Live Share a lot. I can click on that. Clicking on that will actually open my browser and it will see that I have the Live Share extension installed on my IDE. And I can actually launch Visual Studio 2019. And one of the really cool things about Live Share is now that it comes inbox with Visual Studio. So like if you install it with supported workloads, you get it inboxed and you can start sharing with your teammates. So with Live Share, you're able to get real-time collaboration with your teammates from the comfort of your own tools. So you don't have to configure it. You don't have to clone repos, recreate the environment to be able to work together with your teammates. That's awesome. So do you have any workloads downloaded on your machine right now or is this just like the core editor right now? Yeah, so this is the core editor and the beauty of Live Share is that it's all forwarded over from your machine to my machine. So I don't have to set up any of those workloads to be able to collaborate. Additionally, so let's go into a split screen. Is that you'll see on my side that I'm in the blue theme and Alson is in the dark theme. And you're able to work in the editors or your IDE and tools, whether it's Visual Studio or Visual Studio Code. And you can have them configured however you want and you're able to collaborate without having to change it to be able to do that. So it's font sizes, themes, high contrast, anything that you need for your editors. And as you can see, once I joined in, I actually saw the solution explorer for the solution explorer for my project. And yeah, so you can actually see the solution explorer from Alson's project and as I can do that, I can expand the projects. I can see the files and folders that are going on inside of the project to be able to explore around. Additionally, as I saw with Alson moving around in the project, I saw her cursor as I highlight, you actually see on her screen my highlights going on. And additionally, as well, she sees it on hers as well. Cool, so do you get solution view and VS Code as well or is that a VS specific feature? So that's a VS specific feature and that's something that we heard a lot of feedback from like during our preview for LiveShare was that a lot of Visual Studio users wanted to see a solution explorer's view to be able to collaborate with their teammates properly and that's something that we built based off feedback. Cool, so yeah, so now that we're in, I saw that you were typing just to show, I can type as well and we're able to work in that way. So tell me, what's going on with this bug? So before I get to that, I just got this notification here in the bottom that someone tried to join as read only. Someone's trying to crash our session, it looks like. But read only sounds really cool. Is that a standard feature of LiveShare now? Yeah, so read only is actually another piece of feedback that we've received from the community wanting to have read only for guests to be able to join in. So this is the case where you want to start up a session and maybe you don't want people to make edits and you just want to show something off. Maybe you're giving a lecture or you're giving a brown bag to your team and you just want to show off the code, you're able to start a read only session and have people join in as well. That would have been really useful for me in college. I really wish you had built this like six years ago. It would have been super helpful and then I wouldn't have needed to trek across campus to help all my students. Yeah, it's so helpful now, especially since we collaborate so much on these demos and we're able to just work in our own editors wherever we are, across the team room, on different floors of the building, from home, wherever it is you're working. That's true. It was really great at our last conference where we could be in our own hotel rooms and not have to find some weird middle ground. I love LiveShare. Okay, cool. So this test here, it looks like the specific emoji null test was failing. I don't know if you want to take a look at it here. I think something might be going on with specific emoji. That would make sense because of how the test is named, but you're the expert here, John. So I'm going to let you figure out what's going on. Yeah, so what I can do is I can actually explore around in the project to be able to get that context. So you said it's something with specific emoji. So if I right-click on that, I can actually get language service navigation to be able to go to definition and that's actually forwarded over from your machine to mine. Like I said, I don't have any to workload set up. I don't need to have .NET Core or ASP set up on my machine to be able to do these navigations. And I move over to Emoji search. I'm going to follow you, just so I can keep track of where you're going. So yeah, so as you saw, Allison clicked on my avatar in the top right corner and it followed me to where I'm at. Additionally, if I were to scroll, it would scroll on Allison's IDE and we're able to move to different files and be able to guide someone as you're talking through a problem. Cool. So yeah, so looking at this, we navigated to specific emoji and one of the things that I can do is that before I try to fix this, one of the things that I think is really cool that I wanted to show off was if I start typing match, oops, dot, I actually get start in IntelliCode and it's suggestions based off your language service with IntelliCode. I don't have IntelliCode installed on my machine and this is being forwarded over from your machine. Thank you for supporting that, John. The Visual Studio IntelliCode team really thinks these are bad. We appreciate your support of IntelliCode. Yeah. Cool. So on this side, what I can do is I think I actually know the problem that's causing this test to fail. So I can right click, I can click on here and see that I get refactorings as well. And I can add a null check as well to be able to add that in and it should actually help fix the test. Awesome. So let me set down a breakpoint to be able to debug this. So when I set down that breakpoint, you'll actually see on Allison's machine that the breakpoint is synced over as well. I can see that. That is pretty awesome. All right, are we ready to debug this test again? Yep. All right, let's debug that test. Cool, I'm getting the output here, which I also believe you're getting on your side. Yeah, and I've actually seen the build output and my debugger has started because both our machines are starting debugging and it's actually attaching to the running app on your side. That's crazy cool. And yeah, we actually stopped at that breakpoint. Amazing. So since it's hitting that, I think it's probably working. And additionally, as you can see, I have the locals, I have the call stack. I can independently inspect to be able to debug an issue. So I can expand them, figure out what's going on there. And additionally, we can negotiate control between the two of us to be able to, let's say, step over or what not to be able to control the flow of debugging. So let me step over. I can find the button, step over, and it actually steps. And we can actually see that it hits the, it hits the, it throws the exception as expected. Is we expected? Yeah, and then you can hit continue as well. Let me find my continue button, you know. It's always hard when we're on smush screen sometimes. Yeah, so if you open up your side, let's see if the test actually passed. All right. Indeed, we've got that shiny green check mark. So thank you, exception expert, John. Perfect. So one last thing before we do this is that this is a test, but sometimes you're working on web apps. And you want to be able to see the front end to be able to figure out whether or not a bug you're working on or some of your pair programming on is actually working. And for that, LiveShirt enables you to share your servers. Okay, so should I, should I start this up? Yeah, so how about we try debugging as well. Okay. Just debugging the floor. Classic debugging. Yeah, we see that the debuggers are started and that on your side the, your browser has launched and actually on my side as well, the browser has launched as well to be able to, it's loading the app. With this, your local host is, my local host is mapped to your local host. So whether you're working with- What's mine is yours. Yeah, exactly. So whether you're working with web apps, you're working with DBs or some REST API, you're able to share the server for the port for that, the port for that server that you're working with and you're able to share that with your guests. That's so cool. I mean, this is obviously, you know, it's a pretty simple demo app here but the fact that you can see it and interact with it is pretty darn awesome. Yeah, and it's showing up on both of our screens. Yeah. Although you're still, apparently one still seems to be loading. Oh, oh yeah, it's still- Let's see. Is it over here? No? Well, apparently something has frozen, but you know, I can guarantee y'all on my screen, it shows that it is there. But really it's more important that John has it because he's the one seeing it. Yeah, so as a guest, I'm able to get the context of the app and being able to work from the comfort of my own tools. So cool. And the applicability of LiveShare is that it's not just one to one, it works in many different ways as you're able to independently navigate, you're able to be synced with each other. However you want to be able to collaborate, LiveShare supports that. So maybe you're a classroom and with LiveShare we support up to 30 guests joining in. It could be all read-only or you could do some mob programming to have 30 people coming in and typing all together to create a project as well. That sounds a little overwhelming. Is there any way to like selectively promote someone from read-only to read-write and back? Like I could see that being really useful in a sort of mob programming sort of style. Yeah, yes you can. So if you start a read-only session, when you have guests join in, you have the ability to promote them to read-write and you can turn them back into read-only as well to be able to have that control. So maybe you're giving a lecture and you want to be able to have a student make some changes so you promote that student to be able to have read-write and then after that you turn them back into read-only. Oh wow, that's, you know, I really wish I had had this in college. I feel like I would have been such a better programmer if I had this then and a better teacher. Yeah. So yes. Cool. So I think we actually fixed all the issues that were going on with your tests. I'm feeling good about the solution now. Let's get you ready for that pull request. And one of the last things with LiveShare is that in addition to co-editing and navigation and servers, you also can share terminals. So what Allison can do is she can go in and she can share a terminal. Cool, so again, if I don't trust you, I could do read-only and have you check it. Okay, let me show your screen, let me show you go in full screen. Cool. All right. I think I know what the issue was. It was on my machine. Oh well, okay. So yeah, so on Allison's machine, what she can do is she can actually pull up a terminal and she can share it with me. Cool, so I'm gonna do read-write because I trust you. Yeah. I trust you not to mess up my hard drive. So yeah, and you'll actually see on my side that a terminal pops up as well. And what I can do is I can type commands and that's how they would execute on Allison's machine as well. So you can type dir, I can see how that executes. And so you're able to run commands as you would as a guest to be able to help figure out like maybe some command line issues. So I can help you with setting this up and pushing this. So I can do git add dot. Very cool. Oops. Ah, I know it's hard to type when people are watching you. Awesome. Cool. Oh man, you just pushed that, just didn't even wait, just went for it. I got you. I'm very confident in the changes that we made. All right, sounds good. I know there's a lot of people who are hoping for this repository, so I hope we didn't mess it up at all. So yeah, so after this, what you can actually do on your side is you can actually go and create a pull request with this using the GitHub extension for Visual Studio. And for more info about that, for creating pull requests and working with them, tune in later for Stanley and Steven's session on the GitHub extension. Yeah, so they're gonna go really in depth on how you can be more productive with pull requests and we just wouldn't do it justice in the time we've got left. So on that cliffhanger, we'll leave you guys to wait for how you do pull requests in VF a little later on. It's a cliffhanger. Cliffhanger. We ready for questions? Yes we are. Let's see, oh I see lots of hearts and I'm very excited right now. My goodness, I'm excited. So it looks like this inception thing kind of took off here. I'm a little concerned about that myself. So let's go through some questions. I have 47 new posts. Here's some good questions and we'll go through all of them as fast as we can because I wanna make sure we get to everyone's questions. We'll talk fast. What is the limit of concurrent users for live shares? Not too fast. 30. Concurrent. 30, so we support up to 30 guests joining into a session. Okay, 30. Yes. What happens on the 31st? Do we do like a sad panda trombone? You get a notification that you're not allowing any more guests and the support for up to 30 is actually a setting that you can set in the tools options to be able to have increased guest limit. Okay cool. So you can have, it's just 30 is the max for all of it. Okay. Yes. Unless you tweak something, right? That's the max. By default it's five but we have a setting to go up to 30. Got it, got it. And that's really cool like you were saying for classroom type settings where it's like, because you know sometimes I have a hard time paying attention. I was gonna say in class but I took that off, right? It'd be cool like if I'm in there with the professor like because I used to teach and having like the little bar that says student foo is on this line and then they highlight like well what part don't you understand and everyone highlights the same thing, that's pretty amazing. Yeah, it's also great like I remember, you know maybe I wasn't the best student and I was sitting a little far back from the screen, you know sitting in the back rows. It's really hard to see code being projected that far away and I can only imagine if someone needs high contrast or larger fonts being able to have that on your screen with the way you like seeing something is invaluable. Like it would have been great. But it would be much easier to pay attention. I feel like I wished I could have had this. You all do. From Eric Blanc, how do region handling work with LiveShare, region handling? So in terms of if you have like a cursor on the same line, so I'm gonna guess that might be the case. So since this is all real time, if you have both users typing, you would be able to see both of them mixed in together on that same line. If you're on different lines, it works just out of the box. Awesome, so this is an interesting question that speaks to what machine learning actually is. Which is super nice, right? Why would string.length be the first suggested item when it is a getter and we are not assigning a value nor doing a comparison. Now I think we need to clarify that it's not like, well why don't you tell us? Yeah, so I think it's important to realize that IntelliCode learns from what we call the wisdom of the community. So there might have been cases where someone is using string.length in this sort of weird way. It also picks up, when we did our custom model, it picks up on things in the solution. So maybe I had a few not so popular ways of using strings that are very prevalent in my solution that aren't in the open source one. So machine learning is ambiguous sometimes, right? It's still learning and we are trying to figure out the best heuristics to give you the best suggestions possible. But it's still in preview, it's still learning and if you find that usage really strange, like give us feedback so we can help tune our model. Yeah, and I like how you said that. We are not explicitly programming this. No. It's not like we would. It's a suggestion, it's a recommendation. We're not always gonna be right and we don't expect to be right all the time. What we do hope is that one of those top five suggestions is what you want most of the time. Got it. Is it possible to use LiveShare LAN only? LiveShare use LAN only. So in the case with LiveShare, if you're on the same network, it actually forms a direct peer-to-peer connection. If you're on different networks, it uses an Azure Relay to communicate. So if you're on a LAN, it's able to communicate directly. You might need to configure that, right? Yeah. You wanna make sure you're not using cloud environments? So there's a setting that you can go into to ensure that you're using direct connections rather than, or instead of like an automatic. But by default, we try to find the, we try to do a direct connection by default. Awesome. Next question, how will LiveShare handle sessions between VS 2019 and VS 2017? It works perfectly. You're able to work between these different editors. You can work between Visual Studio and Visual Studio Code. Any mix of that, if you're on Windows, Mac, or Linux, any combination of that, you can collaborate for any number of collaborators as well. Man, we have like yes people today, I love it. From Dijon, can you have LiveShare work on multiple VS 2019 instances and thus different projects at the same time? Is it server port dynamic? So which firewall ports need to be open? It's like- There's a lot of that down there. Yeah, I feel like they're getting into like, oh, I gotta write this down, because they wanna use it. Yeah. So for this one, yeah, you can have multiple instances of LiveShare up on a machine. I've actually done this a couple of times where I'm testing with LiveShare or where I can have multiple people joining into a session, but you can have multiple instances going as well. All right, next question. Can all concurrent users at a LiveShare write on the code at the same time, or is it limited to one user having writing rights? I think they're asking, can there be multiple writing people? Yeah, so by default, so in the case where like it's one person writing, that's if you had like a read-only session where you elevated someone to read-write. But by default, everyone can come in and type. So we've seen some interesting use cases where it's like hackathons or mob programming where a bunch of people come into a session to be able to build up all the bootstrap code or integrate everything and they can all type together. That's pretty crazy. Yeah, it is. Like in it, and it knows, like let's just say, okay, you write this function, you write that function, and it knows to move the lines properly. I mean. It's co-editing, right? It's taking all of that and putting it together. They're all looking at me like, man, how old are you? Gosh, this is 2019. The future. From Valklav, how does LiveShare work between different resolutions on both sides? Yeah, so this isn't screen sharing. So you're working from your own editor, so you can use whatever resolutions that you're working with so you can have very big font or on a small screen to be able to work with someone who's maybe on a bigger screen with really small font and it works because it's configured to the way that you like. So it's an important distinction, right? You're not sharing your screen, you're sharing the code experience. Yeah, it's the context of the code, not the screen. And so when you're loading it up, you're loading up your Visual Studio in your favorite way. Because I always see, and now I understand why you do this on purpose, there's one like a dark theme one and there's another light, because you wanna show it's, this is my Visual Studio, but in your context. Exactly. Yeah, if we could and we had some more time, we would show you one that's high contrast with the font way blown up, but that's really hard to give you nice context when we're projecting like this. Yeah. Next question from Amir, do you have to be online to train on your local code? Yes, so for training right now, you do have to be online because we use a service in order to actually train your code. I think it's really important to note, and we hear this a lot, that your raw source code stays on your machine. So we do this local extraction piece where we sort of understand the important bits about your code, but all your local code really stays on your machine. It's the summary file that ends up getting sent to our service that you do have to be online for, and then your model is sent back down. It's private to you. It's private to whoever you share it with. And then after that point, you can go offline because we keep a cash copy, and we will use that cash copy if you're not online. Awesome. If you have any concerns or questions, tweet at me. I'm happy to hear what you guys need. I already know some people want full local experience and we're evaluating that. Cool. What versions of VS 2019 Professional Enterprise support Live Share and IntelliCo? All of them! What? It's like, I almost feel like that was rehearsed. Wow. The share pair just does this so many times that we just know each other like this now. Fantastic. How do undoes work on Live Share from Joplin? So currently we support a, it's a global undo right now. So between the edits that you and your guests or participants are making, if you were to control Z, you're undoing your changes and their changes in a stack. Oh, I see. So like if someone, like if I control Z, Z, Z, I might like move someone else's stuff out, right? Yeah. That's cool. Yeah. Because then I could like get into like a fight with someone and control Z them while we're, okay, I went too far. And then that's when they turn you to read only. It's, yeah. Oh, that's right. It's one of those things, yeah. You are cut off of VS 2019. In what way is Live Share better than working in Skype with a shared desktop? So yeah, so with one of the things, there's always a case where you're wanting to do screen sharing. So in the case where maybe you want to have more individual control or if you're, if you're screen sharing, you're in lock steps. So you're having to have someone who's always driving at one point. But with Live Share, like, so like you would have to hand off, say like you want one person to drive and move the mouse, you have to hand that off. But with Live Share, you're able to be independent while within the same code base. So you can be in different files, different regions of the code. So you're able to work at the, at your own pace and the way that you think within the code as well. This is cool because I, like for some reason I thought of it as like, we're screen sharing, it's not. You're basically your project sharing in Visual Studio. Exactly. Okay, cool. All right, now I understand. Thank goodness, it only took a half hour. From Hugo with VS Live Share, when I run the format code feature, whose rules will it follow? Holy cow! They're like, oh, what, what will it do? Is format code a command that's available to the guest? We can check this right now. It would be, let me here, let me introduce an error. Hold on, we're gonna do this live. Oh, there we go. Here we go, here we go. All right, I'm just taking away a semicolon. Okay. And I see this error. It does not look like format code is being ported over. So a guest cannot run the format code. My expectation is when John eventually supports this ideally, it would run the host machines, right? Because remember, the host machine is what's powering everything. And so you can think of any guest Visual Studio as sort of a window into the host machine. And so the host, I imagine the host machine's rules should be run, but if any of you have strong opinions on whether that's right or wrong, that's definitely something you should weigh in on. Yeah, that's definitely something that we've had a lot of conversations with and we wanna continue hearing that is about getting that right with which settings from who wins out in during a session is definitely an interesting thing that we'd love to hear more feedback about. Well, we are almost out of time. And so the last minute from Maximilian, what are the limits of LiveShare VS 2.19? What are the limits? What are the limits? The sky is the limit. Yeah, exactly. What are the limits? Whatever you wanna do with your code, with your teammates, you can do with LiveShare. I feel like, like seriously, I feel like I just like lobbed it up to you all. This is it. And then you spiked it. Good job.