 Okay. So my name is Tulika. I work as an escalation engineer in Microsoft India. I know I was standing outside and everybody seemed a little surprised to see Microsoft in this conference because this is a Java conference, and we have traditionally been the.NET and the Windows world. So I'm here to talk about something called Microsoft and openness. I'm not here to talk about.NET. So there's nothing about.NET. In fact, very little about Windows itself. I worked with Microsoft for the last 10 years, and when I joined Microsoft, I came from a PHP lamp background. So when I joined Microsoft, I had a steep learning curve in trying to learn.NET and trying to learn Windows. But in the last few years, I've seen this company change from what it was to what it's trying to be now. As a company, we have, or at least we are trying to be more open. In my opinion, that old debate of open source versus commercial software, of we versus them, of the whole thing of hoarding money, is no longer relevant in today's world. In today's world, when we talk to our customers, we realize that they want to manage mixed IT environments. They want to manage IT investments where they can maximize their gains, but they also want the freedom to choose new solutions that can help in their investments. We've been listening to our customers, and since we've listened to them, we have decided to change. These are the three ways in which we are changing. So one, we are trying to play well with others. In basic terms, it means interoperability with other solutions, with other companies, with other services. We're listening to our customers. We're trying to understand the requirements of running mixed environments, of running Microsoft and non-Microsoft products together. And finally, we are open in the cloud. Open in the cloud means that as a developer, you come to us with whatever software, whatever technology you're using, and we will host it for you. So it doesn't matter if you are an Oracle developer, you're using Hadoop, you're coding on Ubuntu. It doesn't matter. If you come to Microsoft platform, we'll host it for you, just like a first class citizen. So how exactly are we doing it? The first way that we are doing it is investing in standards. I know it comes as a surprise for quite a lot of people. It came as a surprise when I knew, heard about it myself. Microsoft is part of 150, more than 150 standards organizations. You would recognize some of the names out here, starting from the Worldwide Consortium to IEEE. And the reason we are part of these huge number of standard organizations and working groups is we actually understand what our customer wants. Our customer does not care whether we are Microsoft or we are any other platform. Our customer wants to use a device, wants to use a computer and expects it to just work. It doesn't matter what software he's using. It's no longer relevant. So therefore, for us to be able to get into that platform, for us to have the Windows Phone developer or the Windows Azure developer make apps for us, we have to give back to the community. We have to have open source linkages. And that's what we are trying to do. That's one of the reasons we are here today. You would recognize some of these icons out here. Actually, most of these other than maybe Java and MySQL has been running on Microsoft platforms for a pretty long time. What has changed now is all of these are first class citizens. Which means that you no longer have to worry about doing weird things in your code to make sure that it works on the Microsoft platform. In fact, you would see that we've changed our branding. We are no longer Windows. So Windows is not anymore our core thing. We, of course, will treat Windows. We will, of course, keep on selling Windows as a commercial software. But we are talking about Microsoft and Microsoft is no longer about Windows. Microsoft is about all these partners that we work with. And some of these names I just played out here. That, in total, together with Windows makes Microsoft as of today. And finally, you have the Azure. Again, it is no longer Windows Azure. It's the Microsoft Azure. Because we give you the freedom of running whatever you want on the platform. It basically means that, as a developer, you don't have to worry about that it's the same tools that you've been using going to work for Azure. It is. We've worked really hard and worked with all these companies to make sure that every tool, every framework that you're using currently, will host and work with Microsoft platforms. And we'll be seeing some examples of that. So we have, we even have worked with open source CMS applications like WordPress, Drupal, and you can go to our gallery, install it. It should work just fine. And this is not for Windows Azure only. Because Windows Azure is what we are going to talk about today. But it will also run natively on Windows itself. In fact, most versions of Linux will run as a first class citizen on Microsoft Hyper-V. So over here, I'm here to talk about Node. Now, I'm not here to tell you how to code in Node. You guys have been coding in Node. Is there anybody who does not know Node? Nobody, right? So everybody knows what is Node. Can somebody give me a good definition of Node? Okay. So what is so great about it? Why do we even care? We've had run times, we've had engines for a very long time. So why do we care? I'm sorry, what? Okay. So the beauty of Node is that Node loves asynchronous. Now, again, asynchronous is nothing new. We've always had asynchronous. But Node has it by default. So the default coding of Node is you implement asynchronous, and the way it does it, it acts really beautiful. It does it through JavaScript callbacks. So that's the beauty of Node. And that's why we want to talk about it out here. Now, that is Node. I'm going to talk about something called IS Node. Have any of you heard about IS Node out here? So if you look at Node, if you go out to the Node website and try to download Node, you will notice that there is an executable which works on Windows as well. You can download it on Windows, run it as Node.dxc, set up your endpoint, and everything works. So that's fine. Then the question arises, why do we need something? Why do we need to post Node on IS? IS stands for Internet Information Services. This is basically our web platform. And Node itself, if you think about it, is a lightweight server, right? The functionality of Node is it is for network applications, it is for listening in on receiving HTTP connections. So it's a lightweight server. Then why do we want to host it on IS? Or what benefit can it possibly provide by hosting it on IS? So first of all, before we go and look at the benefits, you can download IS Node. It is an open-source project. So you can download it from GitHub and you can set it up. It's a small batch file. There's nothing much which is needed out there. The advantage of having the batch file is it also sets up some samples for you in case you need it. Two reasons on why I want to run Node on IS. The first reason, in fact, let's not go by the list that is over there. For me, the most important reason is that Node.exe by itself is a single-threaded application. Which means that if you have, and these days we have hardware which is really powerful, we have servers which have multiple cores. If Node.exe is a single-threaded application, it means that by default, it can only take advantage of a single code on your server. Now, you as a developer can actually code it and make sure that you put the plumbing in place so that you utilize multiple codes as well. And that's possible, and people have been doing it. But the question is, why should you as a developer be worried about that? You are supposed to write the code which does the functionality that you're supposed to do and not really worry about what happens internally, whether you can take advantage of the multiple codes. You don't even know how many codes you're going to have when you want to deploy your application. When you host it on IS, IS is, since it is a production-level web server, it automatically gives you scale for multiple codes. So therefore, if you host Node on IS, you automatically scale just like IS would scale. For me, that's the biggest advantage. Another advantage is process management. So IS, by default, takes care of things like recycling the process when it's unhealthy, make sure that it recycles it once every day, and now you have the availability, and now you have that feature available for Node as well. In fact, if you look at IS Node, and if you read the source code for it, the source code is nothing but it's the native module which sits on IS. So all it does is it sits in the IS pipeline, hooks on to the events which are there in the pipeline, and tries to do something on it. In the background, it simply launches Node.exe. So it's not anything major. It just, the only thing that it really, really provides is integration with the IS pipeline. And then of course, everything is done by Node as it would do. It also provides auto update, which means that if you change a JS file, you don't have to make sure that you restart the process. IS is capable of picking up the change and making sure that the process is recycled and the most recent changes are picked up. Another advantage for which for me is really big is side by side with other content types. When we talk to customers, we realize that most of our customers don't actually make a pure MVC application or a pure PHP application. They want to mix and match. If you look at Node, Node is more or less suited for network kind of an application. So you probably want something else in your application as well other than just listening to the network. So you can have side by side content types, which means that you could have a PHP application working with Node. You could have a MVC application together with web forms, together with Node, all together in the same application. So for me, that's a big advantage. Anything which runs on IS, and this includes even Java, will run together with Node. You don't have to do anything much in your application itself. The good thing about it is from a development standard, from a development point of view, there's not much changes that you have to make to your application to run in Node. All that you have to do is change the environment variable for specifying the port. So you're just specifying the IS port, that's all you need to do. And finally, I'm sorry, the last thing is, it provides integrated management experience, which means all the features that a web service typically provides, like compression, like logging, like caching is available to Node. You as a developer don't need to worry about it, you just integrate it into IS. In fact, it's just one line that you have to run, and it's automatically integrated in IS, and you automatically get all the benefits that a production level web server will give you. So enough of talking, let's look at it and how it works. So firstly, if you want to download Node, this is the GitHub site, I'm sorry, this is the GitHub site from where you can download Node, you can fork it, you can report issues, or you can contribute to the project, it's an open-source project. Once you download it, the site itself gives you instructions on how to run it. The simplest way that it tells you is there is a batch file that you need to run, which is called setup samples.batch. Not only does it install Node, but it also gives you some samples that you can use in your application. I've already run this batch file on my system, so this is IS in case you have not seen this, so this is how IS looks like, Internet Information Service, and this is your Node application which has been created for you. Within that, it has put in some samples, we can browse this directly, so it's got some samples out here, you can run the samples, nothing fancy, that's just a hello world, which is a typical starting point. We can run our hello world, that's the hello world that you have, you can run your hello world.js, and that's your Node application working. In fact, if you look in your task manager and go to your details, you should see Node.exe working out there. So it's running Node as before. The only thing IS has really done out here is within IS, if you go to modules, you will see a module called ISnode. Are you able to see at the back? No, that better. So it installs it as a native module, simply it's a C++ file compiled into a DLL, it installs it, and it invokes Node.exe, which does all the work it needs to do. So now you would think, okay, so what's the big deal? You can run a hello world anywhere. You could have run it right from Node.exe, so you could have had Node.exe written the code, run it directly. So let's do something a little bit more. Let's say that we want to find out what is the real performance of this Node which is running on the platform. Now I'm not here to talk about benchmarks. I'm not here to talk about, I don't know how Node actually works on any other machine. I've just used it on Windows. So I'm not here to do a comparison between various operating systems, but what I want to really check is does Node integrate well with Windows or not? So that's the basic criteria I have. So I want to run a low test and see how long does it take to run this application. I'm going to use a free tool that we provide. It's called TinyGet. You can download it from the ISResourceKit on the internet. So that's, again, if you can see, I'm sorry. So that's the syntax for it. If you install TinyGet, it's a small exe. It's about two MB in size or maybe even less than that. And you specify the server name that you want to do the stress test against. In this case, my server name is localhost and my URL is node hello.js. And I'm saying I want to loop it through 200 times. So I want to run this 200 times and see what is the performance I get. And I'm just running this. It seemed to have run pretty fast, but of course, we don't know if it is really fast or not. Let's go ahead and verify that. I'm going to just flush the buffers and we'll go and look at the log files. IS, by default, has logging enabled. So in this case, it's a node application. It takes advantage of things which are available there. So you go to your IonetPuff folder, your logs folder, and we create something called log files. You go into that folder. This is how IS typically writes its log files. In fact, you can change it if you want to. But what I wanted to show out here was that you have a column called time taken. So that's the column which tells you how much time did IS take to process that particular request. In this case, notice that my time taken is almost zero for most requests. Of course, I mean, my page was doing nothing much. It's a hello world page. But even then, there's one, this time taken is actually in milliseconds. There was one request which took about 15 milliseconds, but rest of the request seems to be really fast. 15 milliseconds is 1,000 milliseconds makes a second. So it was really, really fast. Again, you might say, okay, that doesn't really prove anything much. It's a hello world application. You're running it locally against the server. What's the big deal? Yes, you're right. There's nothing great about it. But what I wanted to show about it is that it does work with the Microsoft platform. Now, let's go ahead and do something more. Let's say that we want to host it on Azure. So we were running it local. Now let's run it in the cloud. So firstly, you can, Azure provides three kinds of hosting solutions. It allows you Azure websites, which is more of a past implementation. If you want to do a quick deployment, that's the way to go. The second option is Azure Cloud Services, where it allows you to choose various cloud services that integrate with your application. And the third option is Azure Virtual Machines. So I'm going to choose the easiest option, since this is only for demo purposes, and I'm going to host it on Azure websites. Azure websites is the place where you have least amount of control. So you don't control the VM. You don't control anything. You can deploy to the website. You can give the name to the website. That's all you can do. So we're going to host it on Azure websites. And I'm going to use a tool called Web Matrix to do the hosting. This is a tool, it's a free tool. You can download it from the web. I think it's about 17 MB in size. It's extremely lightweight tools. And you will notice right at the top that I'm already signed in. I'm signed in using my Azure account in this case. You can change it out here, you can go and sign out and add whatever account you want to, which is your organizational account. Over here we have something called the template gallery. Now you can create a node application any way you want to. You can open a notepad and write your node application. And that's just fine. In this case we're using Web Matrix because it makes the deployment a little faster, a little easier. You can also use Visual Studio and it should work just the same way. So in this case we are using Web Matrix and we will use something called the template gallery. There are certain node templates that we provide default and out of the box. So I'm going to use a node template out here and I'm going to choose let's say express site. Give it a name and say next. It's just downloading the file making sure that node modules are installed. In this case the module it needs is basically jade and express for node. So it's got it installed and it has created a template with site. Nothing much, it's a small template with site. And you can run it directly from here. So this is working node on your local Windows box. But now my main purpose is deploying it onto Azure. So let's see how we can do that. You have a publish button out here as soon as you click the button it will tell you what you want to do. You want to create a new site, you want to choose from an existing site. It just allows you to publish over there. There's nothing else you need to do. Earlier with Azure we had to download profiles. We had to set up linkages. In this case we have to do nothing. You just hit the publish button. You specify which site you want to publish to and it will automatically publish it for you. I'm not going to publish it at the moment. I'm just going to show you a published site. I'm going to my Azure portal. It seems that the internet is not working. I'm sorry about that. I am just using my dongles. I'm sorry I should have checked the connection. So this is the Windows Azure portal. And it's going to take, oh wow, it's gone to the et al page, sorry. So that's your Windows Azure portal. It shows you the website that I have created. That's the default portal. This is actually the old portal. I'll show you the new portal as well. So I already have a Node starter site out here. So this has already been deployed. I can just browse it. And this is going to browse your Node site. Again, this is a starter template. I'm just using a web matrix template out here. It has a chat application. So that's the typical application we use to demonstrate Node. You can type in something and you can have multiple browser windows and you can chat. So again, nothing great. This is what Node typically does. It is doing a socket IO in the background. And now let's do a load test on this chat application. This chat application is hosted on Azure at the moment. So let's do a load test on this. And I'm just going to say, so what I'm going to say over here is, I want 10 threads and each thread should run the request 20 times. So which means 200 times I want to run the request. Now this is going on Azure, just the output for the load test. It seems to be okay. It has almost finished by now. It has finished now. So it seems to be pretty quick, even when the application is hosted on Azure. And this is a little more complex application. It's doing a chat. So it's a little better than the hello world that we were testing with. But again, we don't want to believe what it has been shown out here. So let's go ahead and look at the logs on Azure. The simplest way to look at the logs is just take the URL of the website and we provide something called a Kudu console, which is actually one of our best kept secrets because nobody knows about it. So we'll open the Kudu console. The Kudu console lets you see what is happening in the website. So I'm just going to open the Kudu console. I'm sorry, I just have a wifi dongle, so it's a little slow. Okay, so I can go and check, look at partial. So this just allows me to browse the website, the contents of the website. I can change the content from here. I can look at log files. I can upload new content from here. So I don't want to do anything like that. I would just want to look at my log files. So I can go into my Kudu and I know that this is the place my log files are stored. This is my log file. And again, this is quite unreadable. So I'm just going to copy it and put it in a notepad. So now this is our load test running against Azure. This is still hosted on IS, so it is still using IS node. If you look at the columns, it's exactly the same that you would expect for IS to have. The last column over here is the time taken. So you can scroll right to the end and you can see time taken. And now again, if you look at the request that we have, the time taken is pretty low. That's the time taken for my request. These are my requests for my Azure website, my chat application. And if you look at the time taken, it's almost zero all the time. Sometimes it took 12 milliseconds, sometimes it took 15 milliseconds, but that's milliseconds. That's one portion of a second. It didn't even take a second. So again, as I said, I don't want to do benchmarks, but what I want to show out here is node integrates well with Azure and Windows. So that's the basic purpose of this demo. However, it's possible that in spite of everything that I've talked about, you don't want to use Node on Windows. You don't find it a convincing enough reason and you've been used to using Node in your local platforms, which is not running Windows. If that's the case, you can still go to Azure and this time we'll go to our new portal, which is much prettier to look at. That's the Azure new portal. We've been working really hard on that particular portal. And let's just say, click on new out here, and it tells you what you want to create. Let's say that I'm just going to go with everything. Notice out here is these are the options that you have on Windows Azure. So if you don't like to use a Windows machine, by default we provide you Windows 2012 R2 machines. So those are the default options, but maybe you don't like it, you're not used to in your environments. You also have these other options. You can use an Ubuntu server and hold your Node site on Ubuntu. You can also use CentOS and if you want database connectivity, you are not limited to SQL Server any longer. You can use Oracle, you can use MySQL, you can also use big data like Hadoop. All of these are now available out of the box for you. And not just that, you have an option called VM Depot, which means that if you don't like the options that we have provided you in the default gallery, you can just go ahead and create your own VM and upload it to the VM Depot and just use that. So if you have a VHD, which you think that is available, you should put it on VM Depot. It's a community Depot, which means whatever the community puts over there, we'll just host it for you. You can have your own stuff over there. If you notice and I can click on see all out here and these are all the VMs which has been uploaded by the community. This is not VMs which Microsoft has provided. Microsoft has provided the default installs of Ubuntu, CentOS and Windows. In this case, these are VMs provided by the community. One of the VMs that I like a lot is one with MongoDB. So if you want to use MongoDB on Ubuntu server and put a node application on there, you can just go ahead and create it, host it on Azure. It's all free. You can have a free account, which is a trial period. You can host it on Azure and you can do your development out there. So what I basically want to say is that it is your choice. We are no longer trying to force you that if you are coming onto Azure, you have to have to work on Windows. You no longer do. You can use whatever you want to and it is not a not all or nothing kind of choice that you have. Maybe you don't want to use host anything on Azure. Maybe you just want to take advantage of Hadoop which is there on Azure. So you can just use a service and connect to the Hadoop and sit right there on your local machine or even host it on Amazon. Just have an endpoint which maps on to Hadoop. So it is not like we are forcing you that you have to use a VM over there. You have to have a connectivity out there. So that was the new Azure interface. I'm pretty much done from what I had to present. Do you have any questions? Can you tell me what's the cost on Azure? The cost in Azure? Cost is always a difficult thing. The trial period is free. So if you go and sign up for a trial period, that's free. And then it depends on what you want. If you try to host an Azure website, it starts from $10 a month. I had a question here, slightly unrelated. It's about IIS node. So when you're using IIS, it also gives you access to a lot of other Windows-based services like LDAP or Kerberos and so on and so forth. Does that also happen when we're using IIS node? Yes, it does. So since it's right in the IIS pipeline, everything else that you've been using with IIS would work as it is. In fact, you can also use something like, which is typically ASP.NET, things like form authentication. Let's say you don't want to write the code for it. You want to use the default ASP.NET form authentication. It's built right in the pipeline. You can use it directly with your node application. Thank you. What kind of a license does IIS node come with? The reason I asked that is because I was checking out docx.js and xls.js. They are also hosted on GitHub, but they are not with GNU, GPL, or MIT. They come with some funny Microsoft license. So. So. So. In Microsoft, we have this whole huge team, which whose job is to create the wording for those licenses and make sure we don't understand some of it ourselves. But basically, IIS node, you don't have to worry about the IIS node license. It's just whatever license we provide for the operating system. IIS in itself does not have a license. It is the Windows license, which is working for it. So if you have the Windows license, you don't have to worry about the IIS node license. And of course, and the thing is that if you're hosting it on another operating system, you're not using IIS node anyways. So you don't have to worry about the licensing there as well. Hello. So what all support Microsoft provides if I want to use Azure, but not Microsoft Windows. Macbook or anything else. So if you have looked at over there, we provide complete integration with Android and iOS. If you don't want to use the Microsoft platforms, we provide it as a service. You can just provide endpoints and just use it over there. The only thing which might not, you know, would be that we don't understand that as well as we understand Windows. So if you come for support in terms of if you're stuck with a problem, you might have some problems out there because we would have to go and talk to the iOS guys or we would have to go and talk. But we do have mechanisms for that in place. We are their partners. So we do have mechanisms. Sorry to get you support for that as well. But I'm talking specifically about the web metrics because I just saw that deployment was very easy and things are very comfortable with web metrics. So is there any compliant, just like web metrics for other platforms, other operating systems? Oh, I see what you're saying. No, unfortunately, web metrics is right now tied down to Windows. Are there any future plans? I can take that as a feedback. Web metrics is something that we have found that customers like a lot and it has ongoing development work going on it. And I can take that as a feedback, definitely. Thank you. Hi, you talked about auto update feature. Here. Right, right. You were left. Sorry. We're talking about an auto update feature for node applications. So how does that work? Do I just sync my local files from remote and will it just... So what happens is, syncing your local files from remote is extremely easy. In web metrics, once you have published your website, you get an option for republish. You can also say republish files or republish the entire website. So if you've changed a single file, you probably just want to republish that particular website. So when I want to deploy, I have to do it via web metrics or are there other... You don't need to. You don't need to. So with Azure, we provide various options. I showed web metrics just because it's very easy. But you could use FTP. You could use Git for publishing. So if I FTP my files, they will just update on the server and... Correct. So when you go to the website, you will have something called credentials that you can download and keep for yourself. Those are credentials that you can use. Once you put in that credentials, you can update it. When I said auto update, what I really meant was once the files have changed, we need to do something with the process. We need to restart the process, maybe recycle the process, set up something else. Those are taken care automatically by IA. That's what I meant when I said auto update. Thank you. Okay, thank you very much.