 Yeah, thanks everyone for running out of the talk. So yeah, that was some intro. Let's see if I can keep, let's see how far we go with this. So my name is Raj, I'm a technical evangelist for Microsoft. Microsoft, it's green, OK. So yeah, so this talk is, you know, I kind of had difficulty thinking about a title for this talk, so that's the best I could come up with. But basically what I wanted to do was spend some time talking about what are some of the things that are there in IE and generally on the Microsoft side of things, that enhanced developer productivity. That's kind of the focus of the talk. So to start off with, I kind of wanted to spend a little bit of time talking about experiences. So this is sort of the agenda. I don't have too many slides. I hope to keep it most of it, like I just want to show you stuff. So I just want to spend a little bit of time talking about experiences, some of the cool things that people have built. Some of them are out there in the Microsoft booth. You might have had a chance to play with the Atari game and things like that. The cool thing is all of that is completely standard HTML, W3HTML, it's Canvas, it's CSS 3, it's JavaScript. So just wanted to show you a few experiences like that. And then I want to spend a little bit of time talking about how you can build these kinds of experiences yourself, like lately what are some of the news specifications that have come out, like how you can do cryptography on the web today, how you can play professional quality video, things like that. So just wanted to show you a little bit of that. And then probably a major chunk of the talk would spend on some of the developer productivity features in IE and Visual Studio. So that's the outline of the talk. To start with, just wanted to show you a few experiences. All right, so let me just keep this on the side here. The first thing I wanted to show you was this experience called Glacier Works. This is something that Microsoft worked with, with this organization, this NGO, who are kind of focused on saving Glaciers, right? So basically they kind of analyze the impact that human activity has on the environment, and they kind of try to publicize it, right? So this is a site that kind of showcases that in the Himalayas. So there's lots of stuff going on here. And obviously there's a message here, but I kind of want to focus on the experience. So here is like a 3D map here that has been created with, I think this is WebGL. And it kind of takes you on a journey, right? Like from base camp all the way to the top of the mountain. We might or might not be able to see this right now, depending on the internet here. But if you guys have a chance to look at this, you totally should. This is explore.glacierworks.com. Let's see if this thing loads. So in this experience, essentially what happens is it loads up this absolutely gorgeous photograph from the Himalayas and it allows you to kind of pan and zoom through that. It's basically a panorama. So you can kind of get a 360 degree view of the place. Right now it looks very dark, I know that, but do you see that? I'm right now panning. Oh, there it is. Okay, it'll eventually load. So you guys should totally look at this, right? So this is just one part of it. So you can, we were just starting at this place called Lukla, and then you can sort of follow all the way up to the, so this is up to the average base camp, right? And then probably, let's off now. And then in the glaciers part of it, there are a few interesting videos that you can look at it. Here is another experience which kind of showcases the, you know, this is basically a contour map, if you want to think about it that way. So it kind of shows you, not a contour map. It's a model of that area, right? And then you can click on one particular spot and then it kind of goes there and gives you some information about it. There is the other thing here called as flight to Everest. This is basically a video that kind of takes you all the way from base camp to the peak and then goes on and on, right? So, you know, it really serves to have a nice internet connection when you're looking at this thing. But basically all of this is built completely with web standards, right? So HTML, JavaScript. The other experience I wanted to show you was this thing called as Explore Touch. I hope I have loaded it. I kind of knew I would have internet problems so I loaded a few of them up. Maybe I forgot to load this one. I just want to add it. Oh, there it is. So could we turn the audio on? So this is kind of an experience that kind of showcases touch. The idea here is you have this, you have all these little disks that you can drag in and music should be playing. Or if I unmute it, let's do that again. So if you drag these things in and then it starts. You can kind of pinch out and all of these guys go out. If I pinch in, you know. And you can kind of jam with this. Nice speakers. So again, you know, completely complete. So this uses pointer events, right? So that's a W3C spec that allows you to do multi-touch input on the web, right? So that's another experience, right? So there's another app that I put together called Instafuzz, which I'll be using for all of my debugging demos. Probably I'll quickly show you what that does. So, excuse me. So basically here the idea is, you know, it's kind of inspired from this app called Instagram that you might have heard of. You know, this is an app that basically takes perfectly good pictures, makes them really, really bad and then you share it with your friends. So this is what this app does. So, you know, I've just added up, added up, this is my nephew here. So I can sort of go and apply different filters. I just made it black and white or I can go all kinds of things, right? I can make it negative and all that. So there are a whole bunch of filter effects that I've added here, right? So I can add images like this. I can hit add and do that or I can just open my pictures folder and get an image here. All I have is my picture, which I know will rapidly switch out of it. So you can see that it can do drag drop as well, right? So, you know, probably if I had run this in full screen, it would have been difficult to tell that this is actually a web app, right? So we're able to do drag drop. There's a whole slew of web technology that are being used in this app here. You know, I use drag drop as a drag drop API. W3C API, there is canvas being used. In fact, all of these things that you see on the left and in the middle, they're all canvas tags. There is web workers being used. So when you apply a filter, the actual filter is applied in a web worker and then it is rendered back onto the screen. What is it? I know I'm forgetting a few. So there are quite a few web standards used here as well. So I'll kind of use this app to kind of, you know, look at the debugging capabilities as well, right? So that was like a very brief look at some of the, some of the things that you can do with, you know, some of the experiences are possible, right? So now with i11, you know, we've joined the bandwagon, we support WebGL now. So which is great news. So, and it is a secure implementation, right? So there were some concerns earlier about, about how secure is it to take a shader code from the web, you know, and just run it on your hardware, right? On your GPU. And God knows, you know, what GPU you have installed. Your code will actually run in, run directly by the GPU driver, right? So those kinds of issues have been kind of taken care of. There are a whole bunch of things that Microsoft working with GPU vendors to make sure that their drivers are audited and so on and so forth. For example, devices that are known to cause trouble or have security vulnerabilities, you know, when the browser detects that, it automatically disables hardware acceleration in that case, right? So they do things like that to make sure that the user security is kind of kind of taken care of. So one experience I want to kind of show here is, is this thing, there is this nice new library that I don't know if you guys have heard of it. It's called BabylonJS. So this is just kind of a showcase experience of, you know, the sort of things that you can do here. Again, this is just plain WebGL, right? So it's pretty impressive stuff. And if I keep doing this, I'm sure all of you will feel very pukey and then make a mess. So I'll stop there. So that's that. So if you're interested in the security piece of it, essentially what happens in IE is that it kind of takes all the GLSL language and does a translation to HLSL and then actually uses DirectX to run the thing. And then they do security audits of, it does the security verification of the shader language code as well. Cryptography, right? So that's something new. Now you can do pretty much everything like, you know, you can generate cryptographically secure random numbers. You can do hashing. You can encrypt the encrypted stuff. You can verify signatures. All of this completely on the client using just plain JavaScript. There's a W3C spec for this web crypto. There's a full screen API, pointer events. So again, pointer events is something that we just saw with the Explore IE experience. The same thing is available for pretty much everybody, right? So this is a multi-touch input API. So let's take a look at some of these. So this is just a, I don't know, there's not much point showing. This demo, but you'll have to take my word for it here that this thing actually encrypts things. So for example, I can go here, pick an image. You can say load and I can give it a password and I can, you know, click here and then the thing gets encrypted. You can go and save it, right? Now I can hit save. And then it gets saved to my folder here. Now the thing is this thing that got saved right now is encrypted. It's not the same PNG that I used earlier. It's not the source image basically, right? So let me just run zoom it here. So I recently made my machine. So, you know, that's the file that got created right now. So if I take off this bogus extension and try to open this file, you know, it'll basically throw an error saying that it doesn't know what that is. And then I can go ahead and decrypt it. I guess the demo itself probably isn't that exciting. I can reload the page, hit decrypt and then, you know, I'll get the image back. But the basic idea is, you know, pretty much a fully featured cryptography stack now exists on the web, right? And again, this is the spec, you know, adoption, you know, is there an I-11 and other browsers as well. So that's something that's pretty exciting. And in fact, that's kind of contributes to contributes to another spec that we've been looking at in the next slide, which is encrypted media extensions, right? So another interesting API, which I kind of find funny is the full screen API. Now you can do things like this. Now you can say, you know, for example, I can say some button equals document.querySelector of button and then I can say button.requestFullScreen. So you can pretty much take any HTML element and make this call requestFullScreen. Right now I'm using a vendor prefix version because the spec is still in draft, you know, but the web's W3C name of it would be requestFullScreen. And turns out the browser is required to show that particular element in full screen. You see that? That one button in full glory, full screen, right? That's probably not something that you would want to do. But turns out that, you know, this is now supported for scenarios where it makes sense. Right? So if you call that method on a video element, then obviously the video plays in full screen. And then you can customize that experience in various ways. Like for example, if you want to show a different background, you show the default black, you can go do things like that. So again, this does it in a secure way. So there's no flyby attacks and those sorts of things not possible because it always asks the user's permission before an app can switch any part of the app's client area into full screen. The other thing I wanted to show you was this, was, you know, multi-touch. So here again, I have I11 running here. And this is a sample that kind of shows how you can do multi-touch. So this particular device here supports 10 input touch points. So those points there, they're basically mapping those. So you can go do that. I know what some of you are thinking, don't think that. So here is a professional video, right? Now this is possible on the web today. Wait a minute, I have a clicker here somewhere, there it is. You can do professional video, right? So there's a specification called as media source extensions. This allows you to implement adaptive streaming, right? Again in a completely vendor-neutral, standards-compliant way, right? So you can, you know, like you can completely implement adaptive streaming protocol in JavaScript, right? So that's pretty awesome. Encrypted media extension kind of builds on top of that and allows you to play back DRM protected media, right? So this is again a WSPEC supported, you know, for example, Netflix backs this, you know, something, this backs this. So in fact, if you have a browser that supports this particular spec and you have a Netflix subscription, which none of us do. But if you happen to live in the West or if you have the software that allows you to pretend like you are in the US, then you can actually use this and it will be a plug-in-free experience, right? So it will, so right now I think Netflix uses silverlight plugins to implement DRM. Now there is absolutely no plugins required, right? So this just works and rich captioning, right? So now there is a specification that allows you to really use, you know, captioning that is very, very rich. So for example, you can format your caption, right? So here is a demo that kind of showcases that. This is all in IE test drive. Just wanted to show you the captioning piece here. Again, if internet works out, we'll be able to see that. So you can see that, you know, there's a, I mean, I think the internet is a little suffering here. But basically it allows you to do, you know, all kinds of fancy things with captioning, right? So you can specify where you want your captions positioned, how you want those captions formatted, what kind of background you want, what kind of font you want to use. You have complete flexibility as far as captioning is concerned. And it can be dynamic, right? It can respond to the content that's being rendered in the video. So, you know, for example, if you feel that, you know, at a particular point in the video, the captioning kind of clashes with the content that's being rendered, right? Then you can kind of move it around, move it away, right? So that's, so you can do things like that. So those were some of the new things, right? The new stuff that has come in the web recently. And stuff that are, all of these that I just spoke about are also put in iLevel. Just want to spend the reminder of the talk, talking about developer activities. What are some of the, some of the things that you can do to make your job as a web developer or, you know, as a JavaScript developer easier. The first thing that I want to kind of talk about is this tool called modern, modern.i. Has anybody here actually heard of or used this? Modern.i, probably about, about 30% of the, of the room. Not I had open as well, probably not. So the URL is modern.i. So the basic idea here is, you know, one of the things that we really wanted to address was the pain point of testing for older versions of i, right? So, in fact, we had a little trouble with setting up our card swiping thing this morning at the Microsoft booth. It turned out that, you know, one particular UI was not working in iE10 because I was having a chat with Nitesh. You know, the reason why, you know, he had never tested in iE10, right? Because he doesn't have a Windows machine accessible to him. So that's the problem we're trying to solve here, right? So, so if you, so this basically gives you a bunch of things. One of the, one of the things that it does is it gives you, gives you this automated scan. So for example, I can go type here, let's put Kiran on the spot. Let's scan jsfood.insight. So just go put the URL of his site and hit scan. And then basically it goes and checks for common compatibility, you know, issues that you typically find in different sites. So, and if you wanna run it, run it yourself, it's available on GitHub so you can go ahead and flow in it and take a look at it. Oh, not yet. I thought I removed it. It is, it's obvious. All right, so it seems to be scanning now. I already did it, he's fine. There you go. So all of those are okay. There's only one suggested enhancement here. It says that there is one particular CSS where you might want to use other vendor prefixes. I think right now you're using only WebKit, right? So in fact, it tells you which file it is. So you can hover on this link, it'll tell you what file that is and it tells you what selector it is and then it gives you the thing, right? So in this case, all he has to do is fix that up, provide the other vendor prefixes including the W3C name of linear gradient and then you're all set. I think, I don't think there are any other issues there. Since this is a Microsoft site, it'll tell you something about Windows 8 and all that, which you can do if you feel like doing. Basically, it allows you to, you know, you can take advantage of Windows 8, excuse me, Windows 8 tiles. So for example, you see this thing here, this Glacier Works Everest Rivers of Ice. That's not an app. That's actually a link to a website, right? And it is a live tile. So you can push content onto your tile. That's simply a link to a site. All you have to do is put a few meta tags in your HTML and then you can, and it can be an RSS feed and Windows will automatically go retrieve content from that feed and use that to populate this, right? Populate the live tile of your app. So that's the suggestion here. If you wanna do that, you can go ahead and do that. I ran this for my blog and the results were something that I'm not gonna show you right now. I have a lot of work to do. There's another thing that they offer here. This is a pretty nice thing. It's a free service. They use Browser Stack. How many of you use Browser Stack? Quite a lot of you. The folks who don't know Browser Stack is this service where you can go ahead and test your web application in all kinds of browsers and any permutation comments that you can think of, right? Like what does my site look like in a particular version of iOS, right? What does that look like? So you can go ahead and check that out or a particular version of IE or a Firefox or Chrome whatever the case is. They basically have this farm of virtual machines that you can remotely access login to and then check out your site. If you're using Modern Word IE, they offer three months free access for Browser Stack. So just go check it out. It's completely free and it's a pretty awesome service, right? So you get within the browser a remote view of the target environment, right? So you can see what your app looks like, what the app looks like. This thing though is a free service. You can just go ahead and hit begin scan and what it does is probably I should have done that before I started talking because it takes a little bit of time. What it does is it goes ahead and takes a screenshot of your web application in various clients, right? So on iPhone 4S, Google Nexus, Windows 8, iPad 3, Samsung, Galaxy S3 and so on and so forth and you can take the screenshots and see what that looks like, right? So this is something that you can do. Beyond that, you can of course use Browser Stack to do a full functional testing of your application. So it goes ahead and does that. Another thing that I wanted to show you is this tool called Compat Inspector. This is a little bit, you know, kind of what modern IU offers, but that is something that you can run on your servers, right? In fact, let me show you how that works. So I have a local copy of InstaFuzz running here. I'll go ahead and open that. So Compat Inspector is this tool that allows you to check for compatibility issues in your application and all you really need to do is include this little script that you see here, right? So put that in your page and then it goes and does a scan automatically of your application. So I go to my index.html here. Probably it increased my font size a little bit here. So make that a little bit. So I'll go paste that little bit of script snippet in my HTML and then as soon as I run it, you see this little thing that pops up at the top, right? So that has been inserted by that script. What it did is it basically scanned the page for common compatibility problems. Looks like there is one compatibility issue and that is that the page is using jQuery 1.9.1. Check, verify to substitute the latest portion. So it's recommending that I upgrade my jQuery library to a more recent version. So these are the tests that it ran. You can go review all those tests, you know, there are quite a lot of them and then it gives you that little suggestions, right? These are some of the compatibility issues that you're likely to run into when you're trying to use your app, your web application and you want that app to run on all browsers. So this is a pretty neat tool. So you can go check it out. It's called Compat Inspector, right? So cool and there's one other thing that ModernEye gives you. So you can get pre-built virtual machine images of various versions of the wrong link there. Where is this? Just across browsers. So you see this thing here, download a virtual machine for Mac, Linux or Windows. So basically you can get pre-built virtual machine images for all versions of IE, all the way from six to 11. And you get virtual machine images that run in virtual, various virtual environments, right? Certainly on Windows with Hacker V, on Mac, on Linux. So there are images that you can go ahead and download, which is a real, you know, it's basically a real pain point. And if you're using a Mac, you can get a free 14-day trial here by clicking on that link. So this gives you basically an environment, right? Of Windows XP or whatever is required for running that particular version that you are testing in. Hopefully you're not testing for IE 6, but if you are, there's a VM for it. So that's that. So the next thing I wanted to kind of show you was some of the debugging capabilities in IE 11, right? So have a little cheat sheet of demos here. So I'll just keep that open. Let me just get rid of all these Windows. Yes, I want all the tabs closed. All right, so with IE 11, let's get rid of the Compat Inspector script there. I don't need that anymore. With IE 11, we've kind of, you know, really worked hard on the F2L DevTools, right? So this is the new DevTools that is there and that ships with IE 11, Internet Explorer 11. So if you've seen the older ones, you know, there's a world of difference here. So many of things that are probably things that are used to seeing. So I can go docket to my window and then, you know, kind of hover over things and it kind of highlights that, oh, we have inspect element now, finally. You can right click on, for example, I can right click on this thing. So you can inspect that element. This is that painful, huh? Okay, so now you can do that. What else? You can, you know, this is kind of funky. You can like move stuff around. Before I do that, let me just load one image. I'll load my nephew here again. So, you know, I can, I can do things like, you know, I can track this div and drop it up there and then that thing moves up there as well. So you can do things like that. On the right, you see all the styles for that particular element, probably things that are already used to. I find the trace tab pretty useful. Typically, when I see particular style being applied, I have no clue where that style is coming from, right? I'm going and changing this style. The damn thing will not reflect on my element, right? And I don't know why. So trace style is something that's useful for that. It tells you what are the winning styles. It tells you where that style is coming from, right? So you can go and check that out. You can open that and it'll tell you that this is coming from this particular class. And then, you know, that's probably really small. And then it tells you where it is. It's just pretty useful. Computed styles shows you that here, the box layout, it tells you for that particular element, what is the width, height, margin, border, padding and everything. Yes. Okay, so you were showing me font family in the tracing styles. Does it show the actual font being rendered? Sorry, does it show what? Does it show the actual font that was rendered? Let's find out. Let's see. So I have used a warp font here for the title here that says insta-fuzz. Let's go to trace. It says, yeah, it says, I rendered it to keep it up. Okay. Would you know that? I don't know. I don't know if it'll do that. I know where you're asking that though. We had an issue with js-food.in, the site. All of a sudden, it started rendering everything in Times New Roman. And there was this font which was not getting downloaded. So I don't know. I don't know if it does that. Does it show in the computed style? It shows the same thing there because that's a winning style. One nice thing that it shows in the computed style is the losing styles, right? So that sometimes gives you an insight into why your style is not being applied because this thing is overriding that. Can we try disabling the teaser regular and seeing if it still shows here? Just remove it from the DOM wherever you're loading it. All right. Some live experimentation on stage. How many of you have done that? So I'll go to my explorer here. I'll probably just delete that folder. So that should fix that font. So there we go. So let's go to an inspect element there. Go to trace. Nope, it doesn't tell you that it's applying Cambria. Feature request. All right. So those are some things that you can do. So, you know what I really hate using this trackpad, but unfortunately I'm kind of constricted by space here. So I have to use that. So all right. So you can look at events as you might expect. So click on this. It tells you that this is a particular event and it tells you that, okay, the handler is in jQuery. That's probably not very useful. There you go. So that's a few things that I want to show you in the DOM Explorer. There are a whole bunch of enhancements that have come out in the console, which are pretty cool. So this is the console here. One nice thing is you can of course do document.querySelector and you can see that we get IntelliSense. So you can say querySelector and go pick an element. Let's say container, right? Now there is a shorthand for that. I'm so grateful for this. So I can do this now. I can just say dollar dollar container and then it goes and finds that container element for me. It's in the console. It's only in the console. Yeah. So don't do it in your JavaScript. I mean your source files. So it's just a shortcut for document.querySelector all and then it gives you all the nodes and then you can look at them. The objects that it returns themselves are inspectable. For example, let's say I want to take a look at this guy here. I have plenty of canvas tags here. So that should be a safe bet. So I'll just say dollar dollar canvas, right? So I get a list of canvas objects in my DOM and then you can expand that. It's basically, you know, it's not just text. You can kind of interact with that. It's a mini DOM explorer within the console window, right? It's an inspectable thing. You can run bits of JS here, as you would expect. If you want to do multi-line, just click this little thing here and then you can run multi-line or you can run single line code here. So I'm sure all of you are familiar with console.log. There are a whole bunch of other things that have been added. For example, if I want to look at an object, right? And I want that object to be rendered to my console and I want to, you know, using the inspector in the console. Now there is console.dir, just like how we have in node. So for instance, let me find a good place to do this. All right, all right. So schedule filter, I wrote this code and I'm not able to figure out what I've done here. All right, so on apply filter, that's that. So here's the drag drop event. Yeah, let's do that. So let's do a console.tir of key here, right? So now let me just, now I'll have to do a drag drop. So go back to our pictures folder here. Get one of these guys. I do that. And you see there as soon as the drag drop happened, I got an object here, I can expand it. I can go look at all of its properties. I can see pretty much everything. Hey, and hey, look, we have underscore underscore proto underscore underscore. So yeah, so you can do that. So that's console.tir. Yes, how long do we have? We have five minutes more. Okay, so then let me just skip to all the cool stuff. Okay, so this is something that I really, really love. There is this thing called as the, okay UI responsiveness is pretty neat. There is a memory profile that this thing shifts with now. So for instance, I'm doing fairly memory intensive operations in this particular app, right? I'm applying filters on every single pixel in the image. So I'll start a memory profile here. I'll probably apply a blur filter. And you can see that for a fraction of a second, memory use went up there, right? So let's say I apply a motion blur and then it goes ahead and it's kind of visually tells you that something memory intensive is going on there. So you wanna take a look at memory diffs. So you can do a, do a snapshot of memory. So at this point, I take one snapshot and then I'll probably give it a second for it to get the snapshot things have actually been pretty smooth so far. So let's see if this is the first demo failure we have. All right, let me do it differently. So, you know, probably we'll give it some time, but essentially what that does is it takes a snapshot of memory and then you can do something else, like, you know, something where you are doing something memory intensive and you want to do a diff, right? So in this case, probably what I would do is I would get a snapshot, I will apply a filter, let the filter complete and then take another snapshot. And hopefully if I've written my code correctly, both of them there shouldn't be too many, too much of difference, right? If I find that there is extra memory that's there even after the filter has been applied, that means that there is a leak in my app, most likely. But you know what the problem with this is, you have to be really, you have to be nimble, right? So for example, depending on your app, you might have to be really quick about what you're doing in the UI, right? Which might not be very practical. So it turns out the console API now supports, supports taking memory profiles. You can be very precise about it. You can actually go and instrument your code manually and then you can get that. So how you essentially do that is, so let me look at my cheat sheet here. So for example, what I'll do is, I have this method here, which is called schedule filter, essentially schedule filter sends a message to my worker and the worker does the actual filter. What I can do here is I can go and do something like this. I can say console.profile and I can give it a profile name. I can say filter running or something, right? And I think I have a filter ID parameter here. So I'll go ahead and give that. And then once the filter has been applied, I wanna see what happened. So once the filter is applied, this particular message will get posted back to my UI by the worker thread. So I can go here and say console.profile end, right? So this is a way of being very precise about how you wanna take memory snapshots, right? So let's go ahead and add a picture here. So I start this, then I go ahead and apply one. What should have happened there is, I've seen snapshots being displayed there. I guess generally having a bad luck with memory profiling. Let's see if the code actually came. Debugging is disabled when profiling, blah, blah, blah. Okay, so this message is coming because a profiler is a kind of a debugger. So you cannot have a debugger and a profiler running at the same time. So since I'm trying to look at, switch into my debugger tab, it's telling me that I must stop all active profile sessions too. So the profiling is actually happening for some reason is just not showing up here, I think. Oh, I did the wrong thing. I did a code profiling, sort of memory profiling. Sorry for that. So maybe I'll just talk about code profiling there. So here you have the profiler tab where basically every filter that I just applied, it shows that. And probably let me just pop it out. So you can go ahead and take a look at what was the most expensive call that you made in this particular run, right? So you can be very precise about it. So you can go to your code and exactly say where you want that code to be written. There is an equivalent, it's called take heaps snapshot. I use the wrong API. If you want to do memory profiling, you can go and call this console.takeheapsnapshot and that heaps snapshot gets taken and then you can go and do a take. If you get a chance, take a look at the memory, I mean the UI responsiveness profiler as well. It's really, really slick work here. It kind of tells you, you know, which part of the browser subsystem is really taking up time in a particular scenario. You can start the profiling, go do what you want to do, execute your use case and it tells you which browser subsystem is using the maximum amount of time. Sorry, what was the question? In the profiler, use the defined functions as well. So I've completely run out of time. So there's another cool thing that I wanted to show you, which I unfortunately will not be able to show you, which is Visual Studio debugging. Things have, you know, basically it's kind of a remote debugging experience. You can have the Visual Studio debugger running and then you can have your browser running your web app and there is an active connection between the two. So, you know, for example, you know, one of the common problems is how do you debug a web app that's running on a phone, right? So basically this opens up a WebSocket connection between your web app with the debugger and then you are able to debug your applications, pretty nifty stuff. So that's pretty much it. Complete all of the questions. We have time for one question. Take one question. All right, you get it too. So what are the versions of Windows which would get i11? So i11 will ship for Windows 7 and Windows 8.1. Okay, so when would be on Windows 7? Right now the preview is out. So, I don't know, you know, the product team typically does not announce dates and stuff, but I would imagine that, you know, in the next month or so, it should ship for Windows 7 as well. All right, so for Windows 8, Windows 8.1 is a free upgrade. So, you'll get i11 through Windows 8.1. Thank you very much. Everybody, big round of applause for Raj.