 Earlier this year at our build event in the spring, we announced the newest member of our Visual Studio family, which is Visual Studio Code. VS Code is a code optimized editing experience. It's small, it's fast, provides both code and intelligence, as well as debugging support. It also is built in source control integration with things like Git. And the great thing about Visual Studio Code is that it works not just on Windows machines, but also on Mac and Linux machines as well. And it's available entirely for free. And we've had more than one million downloads of VS Code in just the last few months since we announced the preview of it. And what's cool is about half of those downloads are coming from non-Windows systems. And so the great thing about this is it's really enabling a much broader range of developers to take advantage of the Visual Studio family, regardless of what operating system their development machine runs. And what I'd like to do is invite Anders Halsberg on stage to show off some of the what you can do with Visual Studio Code, as well as highlight some of the cool features that we're announcing here this week. Here's Anders. Thank you. Thanks, Scott. I have to say I'm really, really excited about what Visual Studio Code is doing for .NET development on Mac and Linux. Here we have the same home controller app that Scott Hansen was showing a little bit earlier, but now opened up in Visual Studio Code on a Mac. And as you can see, we get a full fidelity experience in here with, you know, statement completion, colorization, highlighting, and so forth. Now, we already have a great debugging story in Visual Studio Code for Node.js and C-Sharp on Mono. And now we're adding debugging support for .NET Core as well on Mac and Linux. So let's take a look at what that looks like in action. What I'm going to do here is run the code. So I'm going to press F5 to start. And that's going to spin up the Kestrel web server that we're using. It's going to give me a debug console here. There we go. So as you can see here, we can do watches. We can look at local variables. We can look at watches. We can single step through our code. So let's try to single step a little bit. Let's step over the code that creates a user object. And we can even evaluate expressions over here and drill in and see that the values we put in the object are there already. So pretty cool .NET Core debugging on a Macintosh. All right. Now I'm going to switch gears and let me stop this. Close this window here. Let's switch gears and try to take a look at some TypeScript and Angular 2. I'm going to fire up Visual Studio Code on this folder here. And what we have here is a to-do MVC open source example. To-do MVC is available in a bunch of different languages using a bunch of different frameworks. This one is written in TypeScript and uses Angular 2. We've also added a Node.js backend to it so we can play with Node. Now TypeScript in a nutshell is a statically typed superset of JavaScript that compiles two plain JavaScript. And it delivers basically two important advantages. One is excellent tooling powered by static typing. The other is the ability to use modern ECMAScript 2015 and 2016 features in your apps and have the code compile to JavaScript that runs in older browsers. Now TypeScript is written in itself. It's entirely cross-platform. It is entirely open source and hosted on GitHub where the team and myself work on TypeScript every day these days. So in here you can see we have a modern ECMAScript app. We're using import statements and modules. We're using classes. We're even using features from the future decorators, which is a proposed feature for ECMAScript 2016. Now as I'm working in Visual Studio Code, we get static checking in the background constantly. So if I make a mistake, we immediately get red squigglys that tell us that I mistyped a property name. Let's fix that. I can do code navigation based on static typing. So for example, I can say go to definition on to-do store. That takes me to the import. I can go to the actual class definition of that. If I could get my keyboard to work, there we go. And over here we see the definition of the class. I could also ask to see all references and scroll through here. And for example, there are three references to this guy, and I could just navigate to all of those. Let me actually go full screen here. So whoops. Okay. All right. Let's try to run this app. There we go. So I'm going to fire up two commands here. One is to run the typescript compiler in watch mode in the background. And the other is to start the node server part of our app. And let's try to switch to the browser. There we go. We'll go to this time local host, 3,000. And here we see our little to-do app, and we can enter items here. One, two, three, et cetera. We can check them off. We can clear the completed ones. Now, this toggle here is supposed to toggle the state of all of the to-dos that we have in our list, but it's obviously not working currently. So let's try to go back to the code and see if we can fix that. I know that that's wired to the method in here. It's wired to the... No, sorry. It's in store. Here we go. To the set all to method where I've actually just commented out the line. But let's look at the experience that we get as we're entering code here. We say this dot, and you see that we get statement completion on all of the members in the class we can pick to-dos. And since that's an array, we get statement completion on all the members on array. If we pick for each, we here get told what all the parameters are and so forth. So this is all powered by static typing. So let's finish the code here. There. Now, we might also decide to, for example, rename the class. And I can just use the built-in rename command and call it, say, remote storage. Like so. And when we do that, again, this rename refactoring is powered by static typing. And it changes all of the places that I'm using this class, including over here in the other file. You'll see that these now changed. Okay, so because I am running with autosave on in Visual Studio Code, my code continuously is saved to disk. And because I started my command line compiler in watch mode, it is continuously rebuilding the project. So I don't actually have to even press save in order to get my code updated. I simply just switch to the browser, refresh. There we go. And now my button works. Thank you. Now, my app has a server side written in Node. Here you see a piece of that code. We actually wrote this part of the app using a new feature in TypeScript 1.7. Which is asynchronous functions and async await that you may know from C sharp already. We now support that on Node v4 and later. And we can take a look at what that looks in action. So let's try to go to the debug pane and then that's simply attached to the already running server there. Let's switch back to the browser and then let's add a new to do item. And as we do that, press enter. We hit the break point and in here again you see we can look at local variables. We can look at a call stack. We can set watches. We in fact have a watch here on the message that got sent to the server. And we can even see in here that here's the string that we just entered. So pretty cool experience here. As you can see we have very solid support for Node.js, Angular 2 development in visual studio code. But even better we also have an extensibility model that allows you to add new features to your app. Now you may know that I have a background in Pascal going back quite a long ways. Let's look at some Pascal code here. It's a little hello world. It's a pretty plain experience. There's no statement complete. There's no highlighting. There's no colorization. But in fact we now have available the ability to add extensions in visual studio code. So we can try to install an extension. And indeed there are already in the gallery multiple extensions available for Pascal. We'll just pick a simple little one here. Restart the IDE. And here we are. Now we can now we can reminisce in color. So great extensibility story that allows you to add new capabilities and even support for new languages. Now in fact all of this stuff I've been showing you here. Angular TypeScript. The Angular team at Google is actually using visual studio code and TypeScript to develop Angular 2. The teams actually spend a lot of time together just improving our technologies. And I think it truly speaks to the power of open source. In fact we actually have a team member from Angular in the audience today. I'd like to welcome Jules Kramer up to the stage. Hi Jules. Hi thanks Andrew. So Jules tell us a little bit about your experience using TypeScript on the Angular team. Great slide. So yeah the Angular team has been using TypeScript to write Angular 2. And we found it lets us find bugs and refactor our code faster which has given us a lot more time to actually make Angular 2 itself better. And we actually discovered not really alone. We recently surveyed about 2,000 Angular developers and found a good portion of them about 45% are also using TypeScript for their Angular development. So there's a lot to love about Google and Microsoft working together on an open source project. It's just awesome. Is there anything else great coming in Angular 2? There's lots of great things coming in Angular 2. It's going to be blazingly fast. We've made it a lot simpler so it's easier to learn. And one of the greatest things about it is it works not only on the desktop but also on mobile web and native mobile. So as a developer you can learn one framework and target multiple platforms. As well as a lot of other features and capabilities. And our collaboration with the VS Code team makes it so that VS Code already understands all of those capabilities. And it's a great choice of editor for Angular developers. Thanks Jules. I just want to say thank you for you guys for being such strong partners. It's really a pleasure to work with you guys. It's been awesome. All right. Thank you everyone. I think one of the things a lot of people talked about over the last 18 months is kind of the new Microsoft that we're trying to build. Which is much more open, much more collaborative. And it's kind of a flash forward to where we are today versus where we've been in the past. Having Anders demo an open source language on a Mac with a Google engineer on stage collaborating on a project together. That is sort of a very different world than we've been in the past. And it's really kind of indicative of the type of thing we're trying to do really across the company with all of our products. At the end of the day everyone wins in that situation. Most importantly all the developers out there taking advantage of all this great technology.