Showing posts with label hi. Show all posts
Showing posts with label hi. Show all posts

Wednesday, 23 October 2024

Building and Deploying your Code with Azure Pipelines

hi my name is Abel and I'm a senior cloud developer advocate specializing in DevOps today I'm going to show you the ultimate DevOps tool for creating your own CI CD pipelines for any language targeting any platform I'm gonna be showing you a sure pipelines with Azure pipelines we've made it ridiculously simple to go from nothing at all to a new as your pipelines project see people have been telling us it's too complicated to get started with your DevOps tools and guess what we listen so let's go check this out let's say your code is sitting somewhere like on github and you don't have an azure DevOps account and now you want to create a CI CD pipeline well just go to this landing page click on start free with pipelines and it's going to create for you your own organization where now all you have to do is jump in here type in your project name click create and bam that is all you need to do now when it's done creating the project you'll have an empty Asscher pipeline project like this so let's go ahead and create our first pipeline so we'll jump into our pipelines and we'll go ahead and create a brand new one and the very first thing it asks you is where is your code is it up and github is it in and Azure repos we also support tfv c and bitbucket cloud but for those you have to use the visual designer now my code is sitting out in github so let me go ahead and authorize with github and once it's done authorizing with github I'll be able to see all of my private repos and public repos out in my github account so let me choose my repo and now it's going to go and analyze the code and the technology used inside my repo and based on what it sees it's going to offer me a couple templates it just so happens my application is an asp.net app but if my repo held let's say no js' app running in a docker container guess what it will create for me a bill pipeline that makes sense for the technologies that we picked all right so now it's going to create for me my pipeline using a yamo file now I'm gonna go ahead and add a couple more tasks and basically the tasks that I'm gonna add I'm just gonna go ahead and copy my zip file that's created and deploy and take my build artifacts and publish them back up to Azure pipelines now once that's done let's go ahead and save and run this build and voila that is literally all we have to do and now it's kicked off our build so now it's gonna go ahead and spin up a build agent and it's gonna go ahead and build our application for us now it's going to download my code from github is gonna restore my packages from you get is gonna compile everything using Visual Studio it will go ahead and run my unit test right is this right here is just what we used to have in V STS now if you remember we defined this build using a yamo file if you guys like yamo files that's freaking awesome I love yamo files because pipeline s code what we're doing here this really speaks to the DevOps in me right however if you still want to define our builds or describe our builds using the visual editor you absolutely still can and hooray for that looks like our build has finished let's go ahead and jump into the summary where now you can see a timeline of everything that's happened during this build including all the tests that were run now notice the one thing that's missing is going to be where's my deployments well there are no deployments because we haven't created a release yet so let's go ahead and create a release for this build I'll go ahead and click on the release link and it will take me to the visual editor for the release pipeline now because I'm deploying into Azure it makes things insanely simple let's choose the azure app service deployment template click apply and hurray for that that's all we need to do now when you go and create a pipeline for your releases the first thing you have to do is you have to define your stages so we'll call this our staging and next you have to define what are the tasks that are going to run for this particular stage now everything is filled out for us because we're using a template but I do need to connect my accounts with my subscription so what I'm doing right now is I'm connecting my Asscher pipelines account to my Azure subscription once this is done we can go ahead and jump in here and select the app service that we're going to be deploying to in my case I am deploying to Azure DevOps launch now there's one other change that I want to make because this is my staging environment so I'm going to go ahead and deploy this into my slate staging slot so first I have to choose my resource group then I have to come in here and choose my staging slot now what if you wanted to do more than just deploy an app to Azure app service well to customize these release pipelines what you would do is add and remove tasks now out of the box as your pipeline gives you about a hundred tasks that you can just download and start using now if what you want to do doesn't exist out of the box it's not a big deal because go to the marketplace in the marketplace our partners have created over 700 build and release tasks that you can just download and start using now if what you want to do doesn't exist in the marketplace and doesn't exist out-of-the-box guess what you can create your own custom tests as well custom tasks those are nothing more than PowerShell or no js' so what that means is anything you can do from the command line you can easily get Azure pipelines to do as well all right so we've created a really small pipeline right we're just deploying into one staging environment let's go ahead and look at this a little bit deeper because after you've created your stage and you've created the tasks that should run in your stage you have the ability to add approvers before and after each stage so let's go ahead and add a post deployment approver and I'm just going to add myself select that and you know what let's go ahead and clone this because I want to add a new stage I want to add a new stage where I can deploy to my production so we'll call this production and from here jump into the production tasks and I do need to make a couple of changes one of them that I'd need to make is instead of deploying to a slot this is production so I'm just going to deploy it to my app service itself so I'll go ahead and save this now and now let's go and release this I'll click on release click create and just like that I've created a release and now the release will start flowing through our staging environment and after I approve it it can flow all the way out into production easy peasy so there you go Azure pipelines for your code we've made it so simple to go from nothing to a full CI CD pipeline for any language targeting any platform and yes this is your code sitting in your repository of choice deploying to wherever you need it to be deployed it can be in Azure of course but it can also just as easily be behind your firewall in front of your firewall anywhere remember any language targeting any platform and not only that if you have an open source project guess what if you get all of this for free you get 10 parallel pipelines out-of-the-box and if you need more just ping us and we'll give you more so go and check out as your pipelines today by going to dev calm

Building a Windows 10 IoT + Azure Cloud Apps

[Music] hi welcome Visual Studio toolbox I'm your host Robert Greene and joining me today is Daniel Jacobson hey Daniel hey how's it going good how are you I'm good I'm good Daniel's a program manager on the visual studio team that was correct and you are an expert in building Windows 10 apps sure yeah absolutely um you this app that you showed it net conf on channel 9 you also showed it at one of our internal technical events that I thought was just so cool that I wanted you to come on the show and talk to us about building window 10 apps using the universal Windows platform in the context of this actual application because I think it really kind of drives home why people should be interested in this and what the possibilities are it's not just about the surface it's not just about the phone so you know the universal Windows platform runs anywhere Windows runs and that opens up some really interesting possibilities such as sure yep you're going to show yeah so the real beauty of the universal Windows platform is being able to write one application and run it on any one of the Windows 10 device families which right now includes IOT as you see here does top mobile surface hub xbox hololens you name it so one app runs everywhere it's really things that no doubt are being worked on that we're not allowed to know about yes probably who knows so the inspiration for this application actually came to me when a friend approached me saying that they were interested in starting their own small business in Seattle a coffee shop if you will of course coffee Seattle make sense yes so what they wanted to do to optimize their chances of success being a new business was be data-driven be smart about the way they run their application so I thought this is a perfect use case for Microsoft technology I could build universal Windows platform applications that target multiple devices Usenet technology and Azure and pretty much build an end-to-end solution that would help them out so what I built here is a device that will help determine when someone enters or exits their store then send an event to an azure hosted asp.net web application which will be listening for those events then store it in a database and then when they want to review that data over time they can use a desktop or mobile application to actually look at graphs see how is my store trending how many people are in my store at different times in the day what's the busiest day of the week what's the busiest time of the day that way they know when do I need a higher help what days what times how successful are the promotions that they're running do they see a spike in traffic when they run promotions etc oh so that was the idea behind this and as you can see here the app design has quite a decent plethora of parts but it's actually a relatively simple application when you get into the nitty-gritty details for all of these apps so the IOT device really only has one class of code that actually does anything same with the Azure hosted web API it's really just a single class that does everything that's like 200 lines of code and then the client app is a little bit more involved we're not going to go through all the code but I'll point you to the github link after this so you can take a look at it yourself so the way this is going to work is on the IOT device which is what we'll spend some of our time it's it's it's more unique in modern application development era phones have been around for quite a while now same with desktops but these are up-and-coming so what this is going to do is based off of these devices I'm going to fire an entry or an exit event saying someone has entered my store or someone has exited in my store and when that's done it'll send an HTTP request sorry an HTTP request to my Azure hosted Web API listening for a post response which will then write the event information to a database including what type of event is it and at what time did it occur okay and then it will actually send a push notification to the device running the application so one example here is Sam in the back um it's a small shop I'm doing inventory work or I'm doing bookkeeping I'm the only one working at the time right someone walks into my store no one's there to greet them well I'll get a notification instantly saying hey someone has entered your store you better better go take their order so it's another neat way to reduce the number of people I need working yeah this is the modern Bell there you go who needs a bell when you have active smart phones and then finally when the push notification is sent the client at the data visualization app that has some graphs it's notified - hey update the number of people in the store and then it refreshes the data cool yeah so I guess we'll just go ahead and get started yeah so in Visual Studio I have a solution that I've already pre-populated with some of the infirm I'm not going to spend too much time on the asp.net application but as I mentioned this is hosted on github and only cut at the end but what I want to show with the asp.net application is how easy Visual Studio makes it to publish it to a live running web well web app so here's my API I'll look at the one class that I've actually modified most of this is from the template but here's my single controller of interest which has some metadata about my Azure services these are just keys and other private information that's all office gated from the code through a resource file then I have two methods of importance git which is just going to get a list of all the documents and post which is going to post a new document so it actually takes in the parameter my custom event from my portable class library so this is actually shared code and then it writes that to the database and that's pretty much it so two classes you can find those online but what is Keys hard-coded in the code somewhere yes so keys is in my portable class library and a resources file okay I don't want to show that to everyone cuz I can mess with my service here yeah so what I'll go ahead and do is show you how easy it is to publish so if I right-click on the application itself and I have the web tools installed all I have to do is find publish right here I sign in with my credentials which I've already done so it should cache it I can see my profile so I would select Microsoft Azure app service yep it would populate with all of my services select the servers okay and if this was a production environment I would just hit publish that's it but since I want to actually debug this later I'm going to go ahead and change the settings to make sure it is debug in ECP which I did that before so I'll publish and that's it so now this is actually going to send this code to my live running asp.net web application hosted in Azure yep so just to test that as soon as the finished pub finishes publishing we'll debug it real quick make sure this is working before we get into the uwp applications and while this is going the reason I want to focus on this one first is because as you can see both the IOT device and the data visualization app have dependencies on the azure app right so the IOT device is reading to the web app the client app is up sorry got that backwards the IOT device is writing you have a document through through this cloud service and then the client app for mobile and PC that's visual as I visualizing the data who's reading from it okay so as you're a speed on that first and then you WP publish succeeded I can see now in my browser here is my running application so what I want to do now is actually attach the debugger to that and make sure it works so I'm going to press a breakpoint on the post event go to cloud Explorer another tool within Visual Studio I don't have to leave the IDE navigate to my web apps shop analytic service right click attach debugger and then that'll try to find the live running process to attach to in my Asscher service so it will launch the service and if I return to visual studio once I see the breakpoint is ready to go I should actually be able to send a post method to my live service and hit this breakpoint make sure it's working so I'm using a another application called postman which is just a simple web debugging tool that enables you to send HTTP requests to any website you want and what I have here is a pre filled out body so I'm going to send an event type event to my live service that is event type of true which means someone has entered the store and I'm going to send it for today which is September 1st it is so let me go ahead and change this oh if it will let me that's interesting post body oh that's why I was in the wrong one September 1st and this is 8 p.m. global time so 20 o'clock ok I will hit Send I should hit the breakpoint I hit the breakpoint as expected it is loading the information so now I can actually take a look at the variables that are being passed in so a new event crew a fight time you'll see 9 or September first 20 o'clock I can continue to execute this code and now I should actually see a push notification on my device so this device had been previously registered for the push notification service um so even though the app isn't running the data visualization app isn't running because I had run it in the past I'll get the push notification so what that means is if I've got my Windows 10 phone and I don't have the app up and running but someone enters my store I'll still know that they're entering my store right which is pretty cool so I'm pretty confident that's working now I'm not going to worry too much more about the asp.net application let's actually build the uwp application so one thing I'm going to do is actually continue to attach the debugger to this running service and I'm going to build the IOT app in another instance of Visual Studio you'll see why in just a bit so let me open another version of Visual Studio with the solution open there we go and I'm going to actually start from scratch I'm going to add a new project to the solution I don't have an IOT client project tip so I'm going to right click on the solution I don't need cloud Explorer since this is a client up I don't need to worry about this controller anymore now we'll minimize that so let's go ahead and add new project and I will just select blank Universal Windows platform application and I will call IOT client so as soon as I create the project it lets me select my target platform version in this case I'm going to choose the anniversary edition I like to play with the latest and greatest stuff go ahead okay so to get started with this app and for those of you who have worked on IOT devices before what you'll recognize is a lot of the code is just boilerplate code that essentially defines where all these devices are registered on the IOT device and the breadboard so I can say this device is here I want to communicate with this device is it an input or an output device it's really not any logic it's just kind of getting getting everything set up so I'm not going to write that code that codes boring I do want to write the logic so what I'm going to do now is navigate to the main page of my application woops that's the wrong one and I'm going to include that code so let me go ahead and find that code does stops it bits and I'll walk you through what this code means it's just not as exciting to write it cool so let's start at the top I see a lot of squiggly lines that's because I'm missing some references so to start with keys as I mentioned before is in my portable class library so I can add a reference to the same portable class library that's included in my asp.net application I'm sharing resources across both apps the next thing I will see is missing is GPIO pin I can hit control dot to add a reference to the class if I go further HTTP client is missing the references I'm just going to resolve all my references so GPA what someone opere keys actually have to add a reference to the portable class library so GPIO status is actually not something I can resolve immediately what this actually is is a representing a text block on the UI so because it is just a Windows 10 application in order to help me debug that I'm doing everything correctly I just added a text block to the UI of it okay so let me go ahead and navigate to the zamel and for those of you familiar with sam'l development this is just as a molap I will add a textblock X colon name whoops equals GPIO status beat the designer but that's alright horizontal I'm an equal center vertical alignment Center and then I'm gonna make it really big so we can actually see it 72 now I should be able to reload the designer there we go now let's since I closed my tag so I'm not going to see anything here yet but when we run run the application you'll see that so if we return to the code behind that results down no squigglies and all that remains is to event handlers and I'll explain those in just a second but that's what makes a IOT development with Universal Windows platform really easy Wow so I'm just going to create empty methods to handle those for now okay and let's take a look at what this is doing and then just deploy it and see what happens so if I go to the right top the first thing I'm doing is defining the base URI for my azure Web API and this is essentially going to be used to send the post message so I'm going to construct my HTTP client object with this as my base URI and then when I send the post message it knows ok target the right live running servers right these pins if we take a look at the schematic for this device are just actually mapped to pins on the Raspberry Pi so you can find diagrams for the the specific bread where the specific IOT device that you're targeting that'll have a pin mapping for all of the digital devices that you'll be connecting to it ok so if I take a look back to the code 5 and 17 refer to the pins for my sensors so that's what we have here we so that's what we have here yup connected to a breadboard on metal board and then the breadboard has wires connecting to the Raspberry Pi device and correlating to those pins that I specified so the black wire here is ground red is hot so it's the voltage and then the four colors are just different digital devices connected to the pins that enable me to control them through the app okay yep so for somebody who has is a good c-sharp coders done built apps it hasn't really played with the Raspberry Pi know how long look how long does it take to get to the point where you could wire up sensors like this like this yeah probably a day maybe thank you okay yep so I built this in an afternoon and the only previous IOT experience I had was Arduino based it was not uwp it's you don't have to be electrical engineer done soldering I mean so so though in the past right the commonality that all of these devices have is that they're all just digital devices okay they're all very they'll behave similarly so even though I'm using an IR beam sensor here it behaves just as a button would I mean it's going to have a value of 0 or 1 depending on the state of the device so if it's a button and it's pressed it'll have a different value than when it's depressed just like when this is covered versus when it's not covered it'll have a different value okay and is there good introductory material on let's actually show you where that is so if I just search for Windows 10 IOT core on Bing what I will find is tons of documentation so if I just select learn about Windows 10 IOT core there's really great information about what it's like to develop for these boards including examples that people have built so an air-hockey robot and then some tutorials as well so if I click on documentation and I look at the samples hello blinky is essentially the hello world of IOT development so I could select c-sharp C++ does it show you and it shows you exactly how to buy everything ok so to get started it tells you exactly the the hardware you need how you hook it up together and here's the pin mapping that I was referring to before so this is actually the same board that I have and as you can see here GPIO 2 and GPIO 3 are just the numerical pins that I'm referring to here so 5 17 4 and 6 are the ones I'm using so 17 5 6 and then 4 I think is here so all in the same thing yep so it's not too difficult so that's what those are referring to those are just the constant integers that define where I'm plugging those into my raspberry now these are the objects that are actually going to reset represent those pins and then these enter and exit boolean's are going to be used for the actual logic of the code so we'll explain that in detail as I'm writing the code and then client is my HTTP client that is going to be used to send my HTTP web request to my live running service finally the last thing you need to do is actually initialize the GPIO controlling so you'll pretty much see this method in any of the tutorials you go through for an IOT device development but once you have all of the GPIO pins determined first you make sure that a controller exists on the device and what this means is if I were to deploy this application to a desktop or a phone it would hit this line hit this if statement and GPIO would in fact be no there's no GPIO controller on my surface yeah so then it would return out of the method yeah at least nothing that I can control um so then I would send there is no GPIO controller on this device and my application wouldn't do anything that's it so nothing would crash I'm only using the universal API set right meaning I don't have any platform specific API is everything is just common and then I'm actually opening the pins for those four sensors so as you can see GPIO pin I'm defining the sensors and opening the pins okay so after that I need to say is it an output device sir is it an input device so these LEDs are output devices I cannot interact with them the values never going to change I can write a value to them I can say it's on or off but I can't read anything from it so when I set the drive mode for the lights I set it to output and then the sensors are the opposite they're all they're going to give me a value back when I cover it or uncover it so those are input devices just like a button would be okay um after that the debounce timeout is really just to filter out any noise from the IR beam sensors so for some reason the the value changed for 50 milliseconds really really quick like unregister below something that was undesirable it wouldn't actually cause anything to happen after that I just create value changed event handlers and that's really what IOT programming is all about when something happens the value is going to change I have some sensor that changes the value and then I respond to it so what I want to do is I want to place breakpoints on both of these and deploy my application to this device so first I'm going to make sure it's my startup project set a startup project I'm going to select a debug and I'm going to choose armed because I'm debugging to an armed device Raspberry Pi 2 has an ARM processor would finally - electro machine it's hooked up to the network and I'm going to copy the IP address from before and to play so while this is deploying the very first deployment to a Raspberry Pi takes a little bit but it's a $30 computer so you can only expect so much after the radio first f5 oops I it speeds up drastically and you know you'll observe in just a moment so while this is deploying I do want to explain the logic of how this device is actually going to work so if we go back to the PowerPoint I can see this is kind of the overhead view of my device so if I were looking at it like this yeah this is what I would be seeing okay and I can see I've got my customer ready to enter the door it's my ninja cat riding a t-rex with the Microsoft flag and I can see both of the boolean values are going to start at false right meaning they have not crossed any of the sensors so as soon as my customer enters through the first sensor so they've gone half way through the door yeah I change the value for my enter device I know the value of this sensor has changed I can respond to it and I can change the boolean value that I'm tracking as it continues through the door I can now see both of those boolean values have been set to true or in this case both of the sensors have been broken right and I know an entry event has occurred because entry sensor was fired off first and then exit sensor right now if the reverse were true if it went through the exit sensor first and then the entry sensor that's an exit event someone's walking straw just went like that and messed with you so someone so actually if you look at the github repository and someone goes like this and messes with you so that it messes it up I actually have a timeout after a couple seconds and nothing happens it resets the state of the device another example could be say a fly goes by and it messes it up right yeah so so there are ways to counteract that and if you just know some simple c-sharp programming it's pretty easy to do okay but for the purposes of this we don't worry about that case so as soon as the event is triggered though I'm going to immediately reset the state of the device so that when the next customer comes through it's ready to go it needs to respond instantly so let's see so the application is almost done f fiving should take just a couple of second it's kind of like using an emulator takes time the first time yeah I understand right get everything over there you're good flanked to you a device sits and then this app along with dotnet runtime the subset of it yep in all likelihood that runs on this device right dotnet saw dot nets already on here right the runtime so you're copying the literally you putting on it just the executable so in this case it's everything that comes with the application so all of the references all of my new get packages so the it's interesting you mentioned the DA at runtime so with the universal Windows platform you can actually package your dotnet runtime as a part of your application okay so since this is a debug application it's not a store application it's actually deploying but net basically okay however if I were submitting an application to the store for example that shares the same exact net runtime as all of the other apps in the store obviously we're not going to include that version of the.net runtime with every app so there are shared frameworks that you can take advantage of okay um but you can actually change the version of the dinette libraries you want to reference through nougat it's pretty cool cool and then how much storage is on this device how many so it's like this can you get on there it depends on your SD card so I actually have a micro SD card on here AC but that actually has the operating system as well so if I want to flash this device with a new operating system I can take out that micro SD card plug it into my computer download the latest preview build of IOT core and plug it back in and ready to go alright yep so great so the application has gone and it looks like a breakpoint was already hit probably when I reached over yeah so I triggered one of these sensors and we'll go into more you to get the exit further you've reached through I think you actually exited the store I think so I always get it mixed up which ones entrance and which ones exit so now might just have to turn it around but okay I trigger one of them first but what's interesting is I just need to know what is happening when that breakpoint is hit what are the values that I'm tracking at this point so in this case I can see the value has changed for my exit sensor and I want to track the arguments that are being passed into this event so I can just use Visual Studio debugging tools to look at the local variables and see that args that edge is equal to falling edge and I know that seems kind of cryptic almost but this is the the parameter that you're going to track with most of the digital devices that connect to these IOT devices and if you did more of the tutorials that would become more obvious but even if you don't do the tutorials you can figure it out just some clever debugging right so what that means is the instant that that breakpoint was hit meaning means the sensor is broken right and when the sensor is broken args that edge is equal to a GPIO pin edge falling edge so that's how I track if it's broken if it's unbroken it's going to be equal to rising edge okay and those are just enumeration values so I can stop otherwise I'm going to throw an exception and use that knowledge to finish my logic so this is the important part and then for reference the beam is broken and now else the beam is unbroken there are really only two states for this device your long effectively so now I can write the logic for my application on here using those if statements yep so as soon as the beam is broken that's when I want to set the boolean value to true so since this is my exit sensor value equals value changed I need to set exit equal to true now if the enter sensor had already been fired that boolean value would already be true meaning this one was fired second that's when I know what event has happened right so if enter now I'm going to say customer has entered true that means someone has entered my store that method doesn't exist we're going to write in just a moment okay else well exit is already equal to true otherwise I really don't need to do much so in this case actually want to break out of my method and not do anything else did the backwards from how I normally do it normally I put exit equals true at the bottom but it shouldn't really matter okay so the only other thing that I want to do if enter is equal to true is reset the state of the device as soon as I fire off the event so I reset both of those boolean values to false so now it's ready to go for the next person so the code in customer has entered is what's going to send a message send the event to Azure correct okay yep so now um if the beam is unbroken I actually have a light to track when the beam is broken and I'm broken for debugging purposes that's all that's going to happen here so as soon as the beam is broken let's turn the light on so exit light dot right GPIO pin valued low and if you do blinky that the hello world of IOT devices letting that line of code we're pretty similar the light so the LEDs here's red and yellow LED in the device yeah so now I'm just going to copy and paste that to here and I'm going to write the value of hi to turn it off and that's really all I need to do for this so I can just copy and paste this segment into the customer has entered method oops sorry no the entry sensor value changed method and let's take a look here so let me lower the output a little bit so we can see everything so now if our edge equals GPIO pin edge falling edge they're the same exact devices this is the same exact behavior this is right the only thing that's going to change is now I'm working with the entry sensor right so enter light enter equals true whoops and free light yes entry light now if exit so if exit was already fired I'm actually going to be sending an exit event so exit was fired first and then enter I'm still going to reset the state of the device that is the same else entry light dot right GPIO pin value hi so the last thing I want to do is remove the not implemented an exception here and just place a breakpoint to make sure that the events are working as proper or as we expect before we before we send a message to the edge of your website let's make sure we're getting the right expected behavior right so now you'll see deployment should be much faster this time deploy succeeded that was much faster yes there you go so the breakpoint is ready to go so the first thing I'm going to do is just cover one of these oops sometimes when you have some bright lights like a studio light it interferes with the censors but if I cover this one pretty closely I can see the red light is turning on the lights blinking yeah so now if I cover this one the yellow one I can see the lights actually staying on because a break points it so the code is not continuing to execute to turn the light off all right so here I can see in this case V is false that is an exit event so that is going out of the door that means if I were to continue execution of the code and go the other way it should be true so let's try it let's cover yellow first and then red so again breakpoint and now I see V is equal to true yeah red stays on because again the codes not going to turn the light off until it continues to execute right so that's all I need to know so my entry and exit events are working properly on the device now let's actually do something with that information so again just using c-sharp code I can create my object triggered event which I need to first add a reference to my portable class library models folder let's call it event T event equals new trigger event and I'm just going to go ahead and create the event in line so event time equals state time dot now event type equals V I'm thinking I might actually I have a theory that when I'm gone my cat just sleeps all day long I don't be able to find out yeah that you could actually use proximity sensors instead of IR beam sensors so instead of tripping a beam if it goes near it you could also trigger an event right so you can track things at the home you can use this as a security device or some type of monitoring if you're one of those data obsessed people as well you could figure out where your cat spends the most time in the house I know her just by all near the bed so I already know that but a sense in another bed and you could actually calculate how much time spent under the bed versus other other places so lots of funny stuff you can do so I've got my event now I just need to actually create the content to send to my HTTP a web application so HTTP content equals new string content the string itself is just going to be T event to string and then I'm actually going to use some of the overloaded parameters to send the media type so I'm interested in telling my asp.net application that this is Jason that I'm sending because of my tea event to string method I overload it I can actually navigate to it to return the json serialization of that object and that's that it works properly with my asp.net app so let me just do encoding dot utf-8 and then application jason and one thing that i always accidentally do is do forward slash or backslash always get it confused so I can make sure I do it right application slash JSON perfect cool so the only thing I need to add now is I just have to post it so this is the one I want content should actually give it a name and now all I need to do is HTTP client which already have open sorry client I already have my HTTP client I don't need to recreate it dot post async the request UI is going to be API slash event and I'll show you where that comes from and then the actual content so the API event is just what's appended to my base URI so my base URI is shop analytic service as your website's net API event is what's at the end so now if I were to do this so how does it know where did you specify the base URI so I specify up right yes so I specified the base you are I lost debugging to my life service sometimes it times out so I'm going to test debugger again and you'll see why very very soon so up above is where I specified the client information base UI equals keys that has your web app AP UI and then when I actually create the client in main page load sorry at the bottom clavicles narrating yeah ok client equals new HTTP client so yeah so as soon as this page loads what I do is I create my HTTP client with that base address and then I initialize the board right yep cool plot explores um let's try it touching one more time sometimes you get finicky behavior with live writing services so anyways let's go ahead and actually deploy this application to the device and set a breakpoint when the customer has entered the store what or exited depending on the parameter passed through and just so we can track the entire this codes running on the device this code is executing on the device and you've set a breakpoint it's going to show up in visual studio because you are debugging on the remote machine I'm deep but I'm doing remote machine debugging on the IOT device yeah so remote machines bugging has existed for a long time I could do PC to PC yet but now I can do PC to xbox pc to IOT PC to surface of Xbox you name it let's see what's going on with this one my life service is not behaving so well but that's okay we'll go ahead let's see a breakpoint perfect this should be true someone has should be coming into the door so on my local variables load V equals true yeah I can hit f5 again and now what I should see is as soon as it sends the event it has executed properly I should get a push notification that's where I was saying my life service my other reel so a little bit delayed but someone has entered the store example seconds later now it's interesting is I can actually view all of the events that I sent sent so far again in Visual Studio so if I go to document DB accounts loving that because it's just unstructured data and no need to spin up a whole database so this is I'm actually using yeah it's just a list so I'm using document DB which is a no sequel database all it is is a JSON document for the demo I just have a single document but one of the things we're working on in the repository is making it more scalable to use the the no sequel query that is supported so creating a new document for every event and then a collection for every month for example and then we could kind of parse it however okay but you'll see why I use a single document when I copy and paste all my fake date and it's really convenient so if I find my document C document EB is very powerful but I just have single document I can go ahead and load and here we go so at the very beginning we did 20 o'clock ah a clock global standard time and I said true and then I've done one real event that I sent through the IOT device which happened just a couple about a minute ago which is 144 and it's now 145 yep so that is the real event and I didn't have to leave visual studio at all for that so now just for convenience I want to show you another tool that you can use for document DB to copy and paste the data so you can actually see the data when I run the next app okay so in the azure portal i can again go ahead and refresh this document this is the live document here are the two events that i was just working with now let me go ahead and find my fake data i have a lot more than just that and this will actually make the app look like something there we go many more events so I can go ahead and save that okay and not my database has been updated with that data so makes it really easy to schedule in going linked better than going about 1,500 times exactly although we get lots of steps on the band my mom would get really tired though so I'm actually going to break out a Visual Studio 2015 for now but first I want to deploy the IOT device so I'm not going to debug it I'm just going to hit ctrl f5 to deploy it without debugging and that will just continue to run it on on that IOT device for pretty much ever okay um so I think one funny example is I went on vacation and deployed it before vacation came back a little over a week later it's still running fine I came back and swung my hand across all the lights on the push notification cool it's pretty reliable no crashes or anything like that so deploy is succeeded I can go ahead and close this instance at Visual Studio let me go ahead and get rid of this instance of Visual Studio I don't know why that debugging wasn't working that's okay and let's take a look at Visual Studio 15 preview which which preview version is this so this is the next major release of Visual Studio or agile studio 15 preview 4 is available to smore this is actually beyond 4 but now okay so this is latest and greatest sigh you never know what could happen hopefully everything works properly so 4 is available publicly and this is something past that yes something password is available publicly right this is one of the beauties of working at Microsoft is getting to play with daily bits of everything it's awesome so let's go ahead and take a look at this application this is what's going to visual the data mm-hmm I really just have one page that I'm doing there's a lot of code that processes the data behind the scenes and that's where again we can optimize our database structure to just do that in the cloud using querying but for now we're not going to worry too much about it up here you go we might have some intellisense bugs with this version of Visual Studio but I don't think we need it if we're not actually gonna write too much sam'l but the designer works so that's good so let's take a look at the designer first to see what this looks like so on a phone I can see I have a grid here mm-hmm and it's a little easier to view the structure on a desktop first because of adaptive code so if i zoom in I can see I effectively have a grid within a grid so here's my main grid is the outer entire rectangle is the first main grid and in that grid I have two rows this is the first row and then this entire thing is the second row so the first row just contains my coffee shop name the hours and I'm open it'll also give me information about when the data was refreshed then in here I have this picture that tells me how many people are currently in my store okay it's really busy and people are like lining up to the door or something I want to know how busy it is and then I have three graphs that will be displayed in quadrants and what I do is I actually write this adaptively so that if it were on a phone I would just be able to scroll through each of those charts so I can see here's one of the charts below and then it's not going to show you the rest because it's cut out of the UI but I could scroll through it and I'll demonstrate that as well so I'm going to go ahead and just deploy this application and what I want to show here is one of the new features that's coming out in Visual Studio 15 for zamel development to really help you build performant zamel apps okay so this should take just a second I'll also show you a couple of tools that have been out for a little while now but a lot of people still don't know all about them they've only been out for a little over a year so this application is running so let me close some of this so what I want to show you first is what is new so inside of the Diagnostics tools window we have these Diagnostics wall debugging tools that run just while you have five rewrap there's a new one called UI analysis for uwp tools now this is not on by default since it's brand new so for those of you watching if you want to turn this on all you have to do is click select tools check on UI analysis and then you'll have to reset the debugging session okay it's pretty painless but what that does is it gives me a whole bunch of different events about my application and the performance of my application so the number one is using binding instead of compiled bindings I'll have to go ahead and fix that at some point but the one that I want to show you is one that actually surprised me and I found out about this because of this tool so let me restart my application here's the app you can see all the data let me restart my application and describe what I'm doing that is bad that UI analysis told me about that I had no clue about it's actually pretty cool so when my application first launches I can see I don't see much except for this loading ring right and what i'm actually doing behind the scenes is i'm creating these objects and i'm just hiding them so i'm setting their visibility property to visibility collapsing and what that means is on startup it's still loading that zamel control into memory it's having to do the processing to create it and just not doing anything with it right and what UI analysis told me is let me find one of them here we go element numpy 'pl in store of type 1 RT it's the the charting control was collapsed at load time so it told me that collapsing an element or setting its opacity to 0 will not prevent the element from being created so it is creating the element it's using processing power it's slowing down my startup time well that's something I definitely want to fix so not only that but I can actually this is going to work it might be broken because of this it's the problem with daily builds so when this is out if I double click on this it'll take me to the line in zamel that is causing that to break mmm so I can actually just go ahead and navigate to it so numb people in store right here so here's the chart so now what I want to do is change one of the properties so it's going to be hard without intellisense but I can do it so X : the flirt load strategy is the way to fix this oh I do have intellisense lazy cool just I don't have the highlighting I guess so I'm going to set a property called X : to furloughed strategy equals lazy on this chart and then I have to do one other thing so I have to navigate to it in the code-behind up one other tool that I always do this myself I've just gotten so used to it samo edit and continue is another new tool in Visual Studio 15 as you'll notice this application is still running I'm still debugging is app and I just added that property to my zamel without having to stop anything and I just did there because I'm used to it now so I think that's really going to transform the way people create sam'l applications yeah so I will stop it because not going to have to edit the code behind let's go ahead and here and let me make sure I get the right property name so X not num people in storm so the way I'm going to get rid of that warning and UI analysis is I'm going to set that property and then I'm going to call some it's somewhere in the code where it actually makes sense to finally load that element so it's not going to be read at startup it's going to be when I have the data available to actually make that chart meaningful so I'm going to look at my code and I can see on main page loaded I get the data and then I set the data context and as you can see I already did it for a different control before but if I do this dot fine name num people in store this doesn't actually do anything but it tells the code hey I need to create this object I'm trying to do something with this object so it will create an airline so this is going to retrieve the object that has a specified identifier name so in trying to retrieve it it's telling the sam'l hey you need to create it so now if I run this again I should only see five I guess infractions of that specific UI analysis time so here we go so now if I go back here and I sit select filter you analysis it's down to 48 instead of 49 visibility collapsed so as you're debugging what's amazing about this is since its while you're debugging you'll catch these as you write your code so rather than waiting until the very end doing your post-mortem profiling you're at all ready to go oh wait you have 60 performance things to fix on your UI threads well now as you hit these issues you just go ahead and fix emit persuade yeah so the last thing I want to show is UI debugging is my UI debugging that has can you get those before running is there a no so those are actually calculated at runtime so there's a process running that will tell you that this issue is occurring okay so the last thing I'm going to demo is actually in Visual Studio 2015 with this same application and I want to show it because not many people know about it Oh hardcore example developers definitely know about it now but there's still a lot of new developers that are not aware of this feature and I want to make sure it's pretty evident to them that they have this tool toolbox available to them so Sam will you eye debugging is kind of the precursor to zamel editing continue which I showed you before and I think it might be a little busted in Visual Studio 15 but that's what happens when you play with today's build yeah so let's go ahead and hit f5 it should still work I've seen that warning before it's because I forgot to add a reference to my portable class library but the binary output of this folder is enough to get it to work because in another project I have the reference it's confusing but yeah the app works I just want to show the same with your ID buggy so live visual tree now I can see it so here I've got this actual Dorner in my running application let me go ahead and actually while this is running let me show you the adaptive UI nature so if I make this really skinny after a certain point it makes everything in a single column and I can just roll down so the behavior on the phone is I just go ahead and swipe and I can see everything working but now let's say I wanted to change some of the styling on this say I don't like the size of contoso coffee shop I can go and click on the adorn er is that always been collapsible like that uh since update three yeah Wow cool and it's also you can do it start it showed up so you can also hide it I didn't notice collapsed this one is right so you can get rid of it entirely if right interfering with your app so are on the topic of getting rid of things go back there yep why is this decision tools options so that's a global setting a frame I never ever wanted I never ever want it unless I explicitly turn it on and I shouldn't have to go into abductors oh yes for every single one and get rid of it yes sure that's good for you we've actually had this feedback before there's there's two sides of the fence there's the people who actually do use this information line that's why examples options you said it globally alright I'll take that back to my time thanks it's a great feature but when I'm building an applications give them away I didn't know if that if the thing works yet I'm frame rate is one of the last things I'm gonna check that's true never the first thing yep okay but you can see kind of see that's one of the benefits of having a show and inviting there you go close to the product any prior wisdom so what Sam what your ID bugging does is it lets me select that control and then when that control is selected in my effectively this is kind of like the Dom for those of you have to web debugging I can see all of my visual elements that are at runtime and this could be programmatically generated controls if it has this next to it it means it was user generated in a page okay so I can actually click that to navigate to the control in the sam'l so let me actually just show the same oh so that's the textbook that I'm actually looking at here so this version of Visual Studio does not support sam'l edit and continue but the power of that is I can use them or you I debugging to find the control right then I can use the live property Explorer to modify local properties of it so I can set that to 30 to make it bigger I think that looks a little bit better and now if I were to stop this application and run it again it would revert back to 24 right but with zamel edited continuing editing I can then after testing am a lot property explorer I could then edit the zamel file while it's debugging changes the values of the property hit save and then just keep going and I don't even need to stop the application so that's cool yeah it's pretty powerful one of my favorite new features in Visual Studio 15 oops don't know what I did there Ike's and I hit alt tab I wanted to go back to this one oh it's still gone but yeah that's those are some of the new tools cool any questions umm yeah one question so the the PI Raspberry Pi sends a message to the azure service yep which then use notification hub to send a message out to the client right yes okay so some someone a event-driven model where an event is fired the azure service kind of wakes up that sounds like what Azure functions are so did you consider using Azure functions ah for the server side so I initially didn't consider using Azure functions mostly because I wanted to demonstrate the power of sharing dotnet code across all of these different platforms so I'm using uwp I'm using asp.net and I'm using the same code for all of them yeah but as your functions would also serve the purpose of what I'm doing okay cool yep but just to show this one last time as I'm running this it should trigger an event and I should see current people in store either increment or decrement I don't decrement that was exiting so now I don't want people in the start so I got this way then it should go back to zero cool and it's pretty fast so ready oops I might have missed oh yeah they got one so takes two seconds three second clearly notification and update it so you could have that you can have a screen like this in the window of the store shows the number of people in the store and what the average wait time I could eat that too yes I can hook this up to my register so so one of the things I was considering just additional functionality is having register functionality in this app and then I could do how quickly our orders processed how much is the average order I could show correlate this data with money instead of just how many people in the store if I'm running a promotion maybe I'm giving discounts so more people might not equal more money yeah it's such a but the last thing I did want to show is a couple resources for this mostly the github page I think that's what's all this all the code is up in github yeah for both the client and the server and if you have any issues with it or any questions raise an issue or tweet me at pm at Mike this is going to be a living repository for awhile who makes a good sample of all the different services available to you and did they open the coffee store are they using this are they using it today now so this is still just v1 we have to first create our printed circuit board and put it in not um no not yet okay maybe Sunday thanks so much yeah all right cool this is a great example thanks for coming on and showing other problems yeah lot of fun alright hope you enjoyed that take a look at the code play around with it let us know what you think and we'll see you next time on Visual Studio toolbox [Music]

Build triple A games with C++ in Visual Studio 2022

[MUSIC] >> Hi, folks. My name is David Li. I am the C++ Game Dev PM at Visual Studio. I'm here to talk to you about some new and exciting changes in Visual Studio 2022. Recently, our CEO, Satya Nadella, has said, as a company, Microsoft's all-in on gaming. At Visual Studio, we're all-in on gaming too. We have been creating new and exciting experiences for Visual Studio based on your feedback. Whether your Unreal developer, an indie game developer, whether you make your game on our proprietary engine or work on AAA game studio, let me show you why VS 2022 is the IDE for you. First, let me get started with the demo on Hot Reload. Now for game developers, this might sound familiar to you. Have you ever spend 30 minutes playing your game just to get to a specific state? Spend all those minutes and hours getting to that state just to find out your bug fix didn't work? Or if you're a technical artist. If you repeatedly have to restart a game just to see your [inaudible] iterations, Hot Reload is a feature for you. Let me show you how Hot Reload works. Imagine you're building an open source, cross-platform [inaudible] project like Bitfighter here. In Bitfighter, you have a ship that has a red round shield. You can activate the shield with a press of a button. Now what if you want to make the shield a little bit more exciting? Let's do that in Visual Studio. Here, instead of the color red, I'm going to make it cyan, and instead of a circle, I'm going to draw a star. Normally, without Hot Reload, you will have to close down the game, rebuild it, and click through the menus just to get to the same state. With Hot Reload, all you have to do is to press the "Hot Reload" button. It takes a few seconds for Hot Reload to run. Let's see here, a giant 10-point blue star. Isn't that crazy? Oh, okay. Maybe that's a little bit too exciting. Let's change it back to something a little bit more reasonable. Instead of the star, I'm going to go back to the circle. But this time, instead of red, I'm going to change the color to gold. Instead of pressing the "Hot Reload" button, you can also activate Hot Reload on File Save. To enable that, go to the dropdown next to the Hot Reload button. Click "Hot Reload on File Save". Once that is enabled, every time you save the game through Ctrl +S or the Save button, the change are automatically applied. Here, a gold round shield. Hot Reload supports any changes that are currently supported by Edit and Continue, and is not limited to only game developers. With Hot Reload, you no longer have to close your application, recompile it, get the application back to the same state, only to find out your fix doesn't work. Instead of spending minutes and hours getting to the same state when debugging, take those precious minutes back with Hot Reload for C++. Next, let me show you a demo with Intellicode for Unreal Engine. We build Intellicode for Unreal Engine by parsing many Unreal Engine databases and making an AI model. When enabled, Intellicode for Unreal Engine shows up in Unreal projects. For established developers, Intellicode saves time by suggesting the most common suggestions and sorting them to the top of the member list. For new developers, Intellicode suggests the right APIs in the right place. For Teams, you can train custom team models over your codebase, which makes the effects of Intellicode even more powerful, but providing suggestions on internal types as well as more specified suggestions based on your Team's coding patterns. This also makes it easier to onboard new developers as it help suggest things the Team is using elsewhere. Here, let me demonstrate how Intellicode works with member access. When you press a "Dot", Intellicode suggestions will show up with a star. The star denotes that this suggestion is from Intellicode. Similar down here, when you press the "Dot" operator, you'll get another Intellicode base suggestion. Down below, the Arrow operator also brings up a list of Intellicode suggested suggestions denoted by the stars. In this case, the top suggestion is GetController. With Intellicode for Unreal Engine, power up your experience of developing Unreal Engine games in Visual Studio. We have been working closely with Epic Games to make a great experience of developing Unreal Engine games in Visual Studio. Haven't tried the Unreal Engine? You can check it out under the game development with C++ workload in the Visual Studio Installer. One of the things that we have been working with Epic Games is increasing the responsiveness of IntelliSense. IntelliSense for UE projects is now significantly more responsive due to utilizing PCH when generating VS project files. Look for this new updates in a new version of Unreal Engine 4.27 coming soon. Similarly, Intellicode for Unreal Engine 5 is coming in an upcoming release. What do you want as an Unreal Engine developer in Visual Studio? We want to know. Connect with us on Twitter, and leave us your feedback. Aside from making Unreal Engine IntelliSense improvements, we have also been making core performance in C++ IntelliSense improvements in Visual Studio 2022. We have made a test based on Unreal Engine 4.27, a large project, and benchmarked it with VS2019 against the VS2022. The timings we're taking when VS opens a project for the first time and subsequent times average over three runs. Visual Studio 2022 feels faster when getting to code. You can get to code quicker in Visual Studio 2022 and open the file twice as fast. You can also wait less time for IntelliSense ready. Get the syntactic highlighting and code changes to appear in member list twice as fast. With the new improved IntelliSense performance in Visual Studio 2022, you can save seconds each time you open a file. We hear pain about IntelliSense performance with game developers. Now these are only few seconds each action. But imagine, how many times are you opening a file every day? How many times are you waiting for IntelliSense to open every time you open a new file? These are only a few seconds but add up over time. Especially for bigger projects, this will scale. These are small numbers, but they add up. We want more feedback because we aren't done making improvements. Install Visual Studio 2022 side-by-side with VS2019. We want to make it easy. VS2022 is binary compatible with previous C++ two sets in 2019 or older. If you are coming from VS2019, you may be familiar with our built throughput improvements. Let me briefly tell you what you'll gain from upgrading to the latest tools. Using the latest tools, the Gears 5 team at The Coalition saw a 2.6. seven times faster end-to-end build time and 2.8 faster link time compared to VS2017. Similarly, at Turn 10 Studios, they saw a five times improvement and link times for Forza Motorsports. For Forza Horizon 4, the link times are now 18 times faster than in Visual Studio 2017. The decrease in build time enabled Playground Games to switch from /DEBUG:FASTLINK to /DEBUG:FULL. You can enjoy all the benefits of the latest toolsets by upgrading VS2022. When you load your projects, you'll be prompted to upgrade, but you don't have to. You can still use the old compilers and the older toolsets and they will still work. You can enjoy the IDE experience of Visual Studio 2022 that way. Third-party libraries that will also work. Don't have a package manager? Try vcpkg. Download Visual Studio 2022 today, and try out all the new and exciting features we have in store for you.

Build and deploy Node.js and React apps with Visual Studio Code, Azure App Service and Cosmos DB

>> Hi I'm Matt. I'm a program manager on the Azure tools for Visual Studio Code Team and I'd like to welcome you to Microsoft Connect. I'd like to show you some stuff today that my team has been working on to help you be more productive, building your apps locally, and then extend that productivity to the cloud as you deploy your apps and adopt Azure App Service in Cosmos DB. We'll start with this app here which is an Express app built with React and uses a Mongo database on the backend. I'll start this app in debugging mode just to give you an idea of what it looks like. You can see it's a sticker app with no stickers. This will let customers come and browse and order stickers and customize them, but again, there's no data. So let's populate our database with some data. So the first thing that I want to show you is the Cosmos DB extension that I'll actually let you work with your database is locally as well as on Azure. In this case I'm connected to a Mongo database that's running locally on my machine and this app is configured to use a stickers database on localhost. So let's go ahead and create the database that we need and the collection which is just called stickers. There we go now we have a database and a collection with no data. So, I have some initial data that we can use. I'll copy this entire array of sticker objects, and I'll open up what's called a scrapbook. So this is a fairly unique concept to the Cosmos extension. What a scrap book because is, is a way to write your Mongo queries and get IntelliSense for the database that you're actively connected to. I'm already connected to the stickers database, but to do that what you would do is click on the "Connect" button. Choose my attached accounts, my local database, and the database we just connected to or we just created. Again, you will get some intelliSense on here so when I type Db, you'll see the stickers collection is automatically recognized as available and we're going to do an insert mini. I'll paste the array of sticker objects I just took from my initial data and we'll execute this command. As you can see, 15 stickers were added, we can expand the collection and actually see those collections or those documents within the collection, and I can actually click on these documents and make changes to them directly in the editor. Saving will upload the changes to database. But for now let's just go back to our app and make sure that the data works. Okay. Cool. So this is what it's supposed to look like and it's working on our local machine and let's go ahead and deploy that to Azure. To do that I'm going to use the Azure App Service extension which is our platform as a service offering that lets you deploy your applications and scale them as the demand arises. This all starts with the blue up arrow which is the deploy button. I'll create a new app, let's give it a name and I'll pick my node version. So what this is going to do it's going to call out to the Azure APIs to create an App Service plan which is basically a VM where the app instance will run. You can have multiple app instances running on an App Service plan. It will also create a resource group which is a logical grouping of Azure resources that you can use to manage various pieces, and it will create the app instance itself where the app will be deployed. Now that the app is created, I'm prompted to choose the directory that I want to deploy it to the app instance. We'll skip this part for now but if you wanted to you can actually let the App Service extension remember which app was deployed to this particular app instance so that in the future you aren't prompted for which app you want to deploy to. So at this point it's going to package up the app. Since we're in the default configuration it's just going to use a zip archive It's gonna take all of your code. Put it in the zip archive push it over to the Azure API where Azure is going to take over extract all of the code, run NPM install in the root of the project, and then start the application. So now that our app has been deployed we get notification letting us know that we can connect to the log stream or we can just go ahead and browse to the site. So let's do that and get an idea of how it's working. Again, we have the same problem with no data, but in this case I've actually created a database out on Cosmos that we can connect to. To do that, let's go into the App Service extension here expand the node for the app and choose connections. This will let us connect to a MongoDB instance that's running on Cosmos or in Azure. Choose connect or pick from my subscription. Again, I've already created a database for this, and it's going to automatically create the environment variable that we need on Azure to connect to the database. I'll use the default value of Mongo URL because that's what this app is looking for. Now that it's connected we can actually reveal this database in the Explorer which will take us directly to the Cosmos extension. We can expand this and the same functionality that we had on the local environment we have again here in the production environment on Azure. So, I can do something like make a change here. When I click "Save" prompt it to upload and refresh the page and take a second for our environment to be reset to use the correct environment variable. Now our stickers are loading. You saw that I made a quick edit to the markdown sticker and that did show up right here in the production version running on Azure. Okay. So now we have our app running it's connected to the database but deploying from the editor's a little strange. So what we're going to do is we're going to set this up to automatically deploy from our GitHub repository and we'll do that from the deployments node. I'm prompted automatically to connect to a GitHub repository. I'll click that, choose my username, pick my sticker app project and we'll choose the master branch. So what this will do is set up all the hooks out on GitHub to automatically pick up pushes to the master branch. This also includes things like pull requests that are merged into master, and then anytime that happens the code will automatically be synchronized over to Azure and it'll be running just automatically as we develop our app. This step takes a little bit of time because it is actually setting up the hooks and that it's going to do a sync or deploy, and get all of your all of your assets out on the worker and running. Okay now the application is connected to the GitHub repo. You can see the commits that have been deployed to this app before. At any point in time I can actually right-click these and redeploy to revert changes if I find that they aren't quite working as expected. So we have our app now configured to deploy automatically but the App Service Extension will let you do other things as well such as manage the state of the app. You can browse directly to the website, stop-start restart. You can actually set up your continuous delivery here as well. Your next step would be to set up continuous integration on your GitHub repository using something like Azure pipelines, and this will run your lint and unit tests tasks as you validate PR's and you do your code reviews. Once you merge those items into Master they'll automatically be deployed to App Service. For more information or to run through these things on your own, you're welcome to visit us at any of these resources, visit our docs page, there are specific tutorials that walks through the steps that I just showed you. Also please reach out to us if you have feedback about any of these features. I'd like to thank you for your time. Enjoy the rest of Connect and happy coding.

Bring VS Code Themes to Visual Studio

hi everyone today we're going to be talking about how you can convert a vs code theme to work in visual studio we've been on a journey to make visual studio as flexible as possible so that you can code the way you want and now if you're a theme author you can convert your theme to work in visual studio so that a wider audience can get access to your theme let's get started here are the things you'll need in order to convert your theme i'll note that you'll want visual studio 2022 preview 4 or later because it has fallback colors which you'll want just in case the json doesn't cover that area of the ui let's navigate to visual studio to configure our install i have the.net desktop development workload i also have the visual studio extension development workload in components i have net 5 runtime now i'm ready to go i'm going to be converting the winter is coming theme today i've gone ahead and applied it to my visual studio code instance on my keyboard i'm going to press ctrl shift p to bring up the command palette i'm going to select generate color scheme from current settings this is going to give me all the tokens inside this theme that describe the colors i'm going to save this in a folder that i previously created it's going to be a json file not a json c file next i'm going to navigate to our converter tool this is a free open source converter tool and if there's anything you'd like to see improved you're welcome to create a pr or create an issue i'm going to go ahead and clone this tool i'll navigate over to my command line opened in admin mode i'm going to clone using the git clone command after i clone this tool i'm going to navigate over to the folder that i've just created then i'm going to build the tool using.net build next i'm going to navigate into this folder i can run the tool using this command with the flag dash h this is going to give me instructions on how to use the tool i'm going to go ahead and convert my theme the flag dash i is the folder that i've created which contains my json file i can convert several themes at once by including several json files inside this folder the flag dash t is the target visual studio which will open and patch my theme so that i can take a look at it i also have the option of just creating the package def file without opening visual studio after it's loaded i'm going to navigate to tools theme and select my theme it's going to get applied there you are winter is coming next i can package my theme up inside a v6 in order to upload to the marketplace or share with friends i can navigate to file new project or ctrl shift n next i'm going to search for v6 and create an empty v6 project i'm going to name my project and then select create then i'll navigate to properties right click add existing item i'm going to select the package def file that i've just created this is going to be in the same output folder as my json file i'm going to select all files in order to see my package def file once i've selected that it's going to show up in the tree i'm going to select the package chef file and expand the project properties window for copy to output directory i will select copy always and for include in v6 i will select true then i'm going to navigate to the v6 manifest i'll navigate to assets and new then for type i'm going to select microsoft visual dot for source i'll select file on file system and then for path again i'm going to select the package stuff file that i've created and i'll select ok finally i can adjust the metadata inside my theme like my theme name author and version now the last step is to build it i'm going to go ahead and build the extension you can see it's working after i've built the theme i'll see a v6 file inside my output folder i can now upload this theme to the marketplace where there are a lot of other great themes already available and there you are winter is coming on the marketplace if you try the converted tool or if you try any converted themes we'd love to know what you think this process is always iterative always changing and we're always looking to improve thanks everyone

Branches Merging, Rebasing, and Squashing in Visual Studio and GitHub [Ep 2] Advanced Series

hi everyone thanks for joining this session on integrating branches merging rebasing and squashing in visual studio and GitHub where we'll cover the different ways you can integrate changes from other branches using git and how each Works in vs and on the web in GitHub whether you merge or rebase a secondary Branch you'll end up with the same changes being added to your primary Branch the different lies in how the commits are connected in your git history when merging your primary Branch will get a new merge commit and you'll have the entire history of the second Branch preserved as a detour in your graph as shown in the graph here when rebasing every commit in your secondary Branch gets replayed on top of your primary Branch as if you made those commits on your primary Branch to begin with as shown in the graph here you can see they have the same commits but are connected differently compared with merging you get a cleaner history and a linear commit graph which is helpful for rolling back changes sometimes these actions result in merge conflicts which we covered in more detail in another video Once you pick your method it's easy to either merge into current Branch or rebase current Branch onto from the context menu when you complete a poll request on GitHub you can choose from the following options and your organization can configure which merge type it allows on a given Branch when either of these strategies are combined with squashing you lose the individual commits from the secondary branch and the result is a single commit with a new commit message this is useful if you want to throw away the source Branch completely going from a branch with multiple commits into a single commit to squash simply hold control and select a set of commits you'd like to combine into a single commit and rightclick and select squash commits thanks for watching everyone

Blazor Part 2

>> Hi welcome to Visual Studio Toolbox. I'm your host Robert Green and today's episode is part two of an hour longs worth of Sam Basu and Ed Charbeneau talking about Blazer. So, I explained previously, they were here taping a bunch of episodes with me. They wanted to do an episode on Blazor. I unfortunately had a conflict I couldn't get out of and Dmitri wasn't available. So, we left them alone in the studio and they talked for an hour on Blazor. Really good stuff, but we decided an hour is too much, so we cut the episode in half. Hopefully, the cutting job isn't a little too choppy, because we're just going to pick up where they left off now. >> Let's do file new project. We'll do ASP.NET Core web application again. This time we'll do the full stack version. Now, it's important it spins up, we'll outline when I say full-stack, we're not doing Server-side rendering. >> Okay. >> So, we're still using that Client-side, we're going to ship everything to the browser, let it run on Web Assembly. We're not doing ahead of time compilation of the views, and sending any HTML down the wire other than the bootstrapping index page. >> Sure. >> That's it. It's something that we just need to clarify, so people don't expect that those Razor views are being compiled on the server and HTMLs being sent down the wire. >> So, you are coming back to the server for data, like essentially UPI implants. >> So, if we look at this, it's exactly what you said. We have our client app, which is the same exact thing that we saw before. Now, we have a server project, and the server project has a Web API controller. This is going to supply that weather data that we saw coming from a static file before. >> Okay. >> So, it's web API endpoint with a Get action on it, and it's just going to randomize some weather data for us. >> Yes. You can hook this up to any data source you want. >> It could be Cloud service and Azure function, Node.js, all the above file. >> Or SQL server sitting under my desk. >> Cognitive Services, you could do some cool machine learning stuff there. >> So, this is just web API and I can do CRUD operations like create, read, update, delete? >> Absolutely. >> Okay. >> Then notice we have a shared library now. >> All right. >> So, if we're on the Client and we're going to iterate over a list of weather forecasts. So, this is the same view that we saw before, an array of weather forecasts is coming in from this GetJSONAsync, and the server sending a list of weather forecasts. Then the weather forecasts can live in a shared location where both projects can access that class type. >> I see. And is that like, how would you show, is that like a document standard library? >> Absolutely. >> Okay. > So, this is a .NET StandardLibrary. It's being referenced, if I go into my dependencies under projects, you can see shared. It is actually using the .NETStandard.Library as well. >> So, you can reuse this from Xamarin if you wanted to? >> Yes. You could share it not only across Blazor projects, but any .NETStandard project. That also opens up this to a whole ecosystem of things that already exist. So, think about that for a minute, we'll actually have a demo at the very end here, we'll I've gone in and tried some of these things. >> Like existing NuGet packages? >> Absolutely. >> Okay. >> Yes. NuGet, .NETStandard packages that are on NuGet within reason they work within Blazor. Now, if they have some direct access to the system, they're looking at your system temperature, registry or things that belong on maybe Windows, it's not going to happen. What you can do though is load in things that are business logic and stuff like that. I'll show you a use case for that, where it's been successful for me. >> Okay. >> So, this is the other project and we've got the same type of structure, but inside FetchData, we're actually going out to an endpoint now and pulling that data in through an API. We have shared logic folder. These are all very good things that help us be productive. >> Sure. So, in this solution, you could host the server in IIS or anything that you would host an ASP.NET application in, and then the client could just be served up from anything you want. It's a Client-side? >> Absolutely. In this scenario though, the client application is actually being served by .NET Core, but you could split those out if you wanted to. >> Okay. All right. >> So, let's look at another project. I'm going to open this one. I didn't want to do too much live coding here, so I know I will fat fingers something and we'll have some demo fails. So, I pre-created in here. Let's pull it off my start page here. I want to show the concept of having external component libraries. So, there's currently no file new project experience for creating a component library from within Visual Studio. There is tooling however. We can drop down to the command line, we can type in .NET new Blazor lib. So, that .NET new Blazor lib will spin up a project that is a boilerplate for creating component libraries. >> Okay. So, let me back up, you said CLI. So, all of this Blazor stuff I can do it through CLI as well? >> Yes. Technically, it's a NuGet package, so you can go into your command line .NETnew-I will install, and then you point to that package and it will install those command line tool for you. >> If this is on .NET Core I can do this on Mac or Linux. Right? >> Yes. Again, Blazor.net and look at getting started, you'll find those CLI commands. So, people don't have to try to memorize them as the same here on the show. That's the best place to find them on Blazor.net. So, we have our client application and we have another library called MyComponents. I have a component in here called MyComponent, really cleverly named component here. I've put that component on my index page. So, on my index page I have MyComponent. >> So, you're referencing your component project from inside the Blazor project obviously, and then you're able to just render that. Does the component have other NuGet dependencies that you're putting in? >> Right now, it's just dependent on the Blazor libraries. So, if we look in ".NETStandard", you'll see we have our Blazor libraries here. >> Right. >> It's dependent on Browser and build. If we come into our dependencies on the client application, you can see I have a dependency on MyComponents. Then that dependency is registered in the Viewimports file. So, here it's being registered as a tag helper. So, this is another familiar concept from ASP.NET Core mindset. >> Okay. >> So, I'm registering any components that exist in the MyComponents library and referencing. That allows me to drop it on my index page. So, let's take a look at what this component does. >> So, the code looks almost identical to just rendering a component that's inside of your client project, but you're just pulling this in? >> Yes. So, I have this big box with a dashed line. Most of this is actually boilerplate. I've modified it slightly, so we have a cool demo for the show. I've wired up what already exists in that template, just so it may give a little more flair. So, I'm going to click on this box, and now I'm going to prompt. I can type anything in here. I'll say, "Hello VS TB," and hit "OK". Now, that data's represented in its bound inside of that dotted box there. So, let's see how that works. So, again MyComponent, will look at MyComponent.CSHTML. It's a simple div, I'm binding to the HandleClick function handler. >> All right. >> Or ClickHandler. It's got a regular CSS class on it with MyComponent, and then I have a value called message. So, I'm going to create a placeholder for it, string message equals, "Click here to change". That's the default value. Then whenever I click "HandleClick," I'm going to set the message and this is going to do it asynchronously, and it's going to make a call to JavaScript. It's going to display a JavaScript prompt in the browser. >> Got you. >> So, I'm making a call to JavaScript from my C# code, and then when that comes back, we're just going to notify Blazor that the state of the view has changed, and it needs to do an update to the shadow DOM. Now, if I dive in to MyComponent, you'll see this Content folder. This is put here by the template, and inside of that are resources that belong to the component, including this example JavaScript interrupt. >> All right. >> So, this is a JavaScript module, and it's being loaded into the global namespace of the window here. So, on window, we have our scope of example JS function, and a function called showPrompt. >> All right. >> Then that prompt takes an argument of a message. So, we can set that prompt to whatever we want and then it returns the values that was put into the prompt. >> So, how is the name showPrompt different from what you are calling from JavaScript? I thought you just said prompt in your component. >> So, there's a nice little wrapper piece of syntactic sugar around that. If I open up example JSInterop. So, there's little C# extension method in here, and it's called ExampleJSInterop. Sorry, it's not an extension. That is just a static method. It's asynchronous, so it uses a Task, returns a Task at string, and it takes in the Prompt message and returns a string value as a Task. So, here's where it's calling that scope, and then, that function in JavaScript. >> Okay. So at this point, you're mixing and matching JavaScript and .NET on the client-side. So, if you have existing JavaScript assets and functions, you can call them from .NET. >> Yes. So, if you have existing JavaScript libraries that you love and they're too big to maybe translate over, or you want to have a moment where you're migrating to. >> You're in-between. >> Yeah. >> Yeah. Okay. >> So, you can do some migration there, or WebAssembly may not target certain things yet. So, for example, we can't pull up a prompt natively in C Sharp through WebAssembly, so we need to reach out to JavaScript to say, hey, we need a prompt, and we're able to do that. So, we have that flexibility, and this is how it's done. >> Okay. That's very interesting. >> At the same time, we've got little experience with developing component libraries, and you can see there's no page directive on this one, it's just HTML, a little bit of C Sharp in Razor, and this is very easy to understand what's happening inside of the system. So, let's do the server-side example now. >> This is where you're going to make it confusing for me, aren't you? But let's see. This is interesting. >> So, we've been talking a lot about WebAssembly, we're going to get away from that for a moment. We're going to actually do all this in the server. We're going to create a Blazor application that is running on the server, and all of the data is going to be handled through a WebSocket. So, the application on the client is just going to be a very thin client. It's just an HTML page that spins up a SignalR listener. >> Connection back to the hub on the server. Okay. >> Yeah. So, there's a hub on the server that's all part of the application framework. So, we don't really have to concern ourselves with all of that. It looks exactly like the previous few examples. Let's run this guy. While that's spins up, I'm going to fire up yet another application. This is Fiddler by Progress under the Telerik brand, something that you and I know and love. >> Most web developers can not live without Fiddler. >> Fiddler is a free tool that you can download and use, and it's very helpful for working with HTTP connections and things like that, because I want to show you, when we're running this, WebSockets perform a little different than your normal requests. So, the server has sent down the application through the SignalR pipeline. We have this active connection back to the server, and we can do updates like this and pull in data from our application, and we can do all this using that SignalR hub. >> Okay. But this one, this is not running purely client-side. >> There's actually almost nothing running client-side in this scenario. So, let's actually open this guy up. Let's pull up the "Network" tab, and again, we'll do a reload. Notice all the DLL's aren't coming down this time. >> No, they're not. >> Because they're staying on the server, they're running on the server, and we have a small JavaScript file that's handling all of this for us and just sending back changes through that SignalR pipeline. >> So, how does the server know about the DOM, if you had to do anything? >> So, that's in the diffs that it's sending back, and it's a binary package it's sending to Blazor to make those changes. So, for example, if I navigate here, let's clear this window out, and let me come down. Let's go to "FetchData". Notice the data loaded. So, the data is in here, and we didn't make any kind of communication back and forth. Let's do the "Counter" component. I'm clicking, there's no communication back and forth. You might [inaudible] surface think that you're not communicating with the server. Let's pull up Fiddler, and hopefully, this works for me. Let's try to put this side-by-side, and we'll do a click, and I'm going to demo fail. So, let's try clearing our, is Fiddler responding? There we go. Some kind of lag here. So, let me try again, and for some reason, Fiddler doesn't want to behave with this demo. So, I have a little demo fail. Normally, what we'd have, we'd be able to open this up, and Fiddler would actually show the Socket traffic. >> So, DevTools does not capture REP Socket's traffic that Fiddler can. >> It may. I just don't know where to look, if it's there. >> Okay. >> So, it may be a little bit of my inexperience with the WebSocket traffic in the tooling here. It does normally show up in Fiddler though. >> Okay. All right. >> So, every time I click this, actually, we've frozen up there. When we click this, we're actually sending some traffic through the Socket up to the server. Again, this is what happens when you work with experimental bits. Things don't always happen. >> You can pray to the Devil. That's enough. >> The way you expected them to. >> We get the point. So, this is running server-side, almost nothing on the client-side, and you are piping content through a WebSocket's channel or a tunnel, essentially. >> Yeah, absolutely. So, one other very big difference that you'll notice, remember before when we did our dependency injection on that FetchData? Something's a little bit different here. So, since we're on the server, we don't need to send an HTTP request. So, we can just new up a service, ForecastService. This could be maybe a layer over the top of [inaudible] Framework or something like that, but we don't have to send a web request because we're on the server with the data in the application and all of that, and we can just say, get the forecast asynchronously and do it that way. So, our dependency injection actually looks different as well. So, we're not injecting an HTTP client, we're just injecting the service, which is a C Sharp class that we've written. >> Right. Yeah. So, this is interesting. You're hosting the data on the server and you're also running the app right next to it. So, you can get the data just as quickly without making HTTP. >> You could see we have our WeatherForecastService in here, and it's just creating a Task, an asynchronous Task, return that array. Like I said, that could be your database there. So, no HTTP call. So, that's an interesting mode of operation. Let's do one last demo, where we show a project that I've created and used some existing .NET assembly from NuGet. I've got to stop this guy from running first, and then, I'll see if I can grab it off my Start Page, and I've lost it here. So, let's do "Open", "Project", and the project is called BlazeDown. I figured I'd go with the theme. Browser plus Razor is Blazor, Markdown plus Blazor is BlazeDown. So, let's do little bit of BlazeDown. So, this is a Markdown Editor completely written in Blazor. So, I'm going to run this up, and it's a client-side application. It's running on the browser only. There's no server code in here, so we're going to get the application, the browser loads it up. We have Markdown here on the left, and we have the rendered Markdown here on the right. So, this is a very cheap Markdown Editor that we can just come in here and live edit, and those changes persist on the other side. We can use some of our Markdown syntax to change things like headings and do code highlighting, for example. All of those things are working here right in the browser and being rendered as HTML on the other side. Might expect a lot of code behind this, right? >> Yeah. >> I'm parsing Markdown into HTML real time. >> Are you doing this yourself? Or do you bring in some libraries to help? >> I'm not the smartest guy in the room ever, Sam. So, I'm actually using something someone else created. >> Okay. >> So, there's an existing library called Markdig. So, there's a dependency in this application, and if I look under "Dependencies" and under "NuGet". We've got something missing here, it's actually in a Component. Sorry. I've moved it out to a Component. So, our dependencies in that Component itself. So, I have a markdown component, NuGet and there's Markdig. So, this is off the shelf, I haven't modified it in any way shape or form, pulled it into my project and just started using it right away. I don't know anything about making a markdown parser. I didn't need to somebody already did the hard work for me, I can just pull that into my component, if I open up my component, the component takes and runs a function called BuildHTMLFromMarkdown, and I pass in this content value which is whatever you're typing into that text box. >> Okay. >> That runs this function called BuildHTMLFromMarkdown and returns at HTML using this method here called ToHtml and sends that back as a string. Then that string is loaded as raw HTML into the Component displaying it in the browser. >> Okay. All of this is now running Client-side entirely? >> This entire thing is running Client-side, so Markdig is running on the browser using the DLLs that come out on NuGet, those are actually running right here in the browser. I can do things like pull in, I can use the HTTP client to pull in Markdown files from another resource maybe GitHub. >> Right. >> Something like that. I don't know if people saw that I'd clear this out. I can do import and it'll go back and pull in that original file that I was using before. Then I can also do something cool here, I can say download as Markdown, and click that button and I'm prompted with a Markdown file. >> So, at this point, you were on the Client-side and you downloaded a file from the Client-side that was generated in the Client-side as well, right? The Markdown file is acting like an output of the Markdig extension? >> So, that's what we're going to get to now. >> Okay. >> I'm glad you brought that up Sam. I have a download Component here. >> So, there's another component? >> There's another component and this is called DownloadButton. >> Okay. >> So this Component has an OnClick event that's when you click the actual button itself. It has a property called Payload and a property called FileName. So if we look at our index page here, you'll see the actual Component being used, DownloadButton here and I'm setting the value to that same content value. I'm binding. All these things are just being bound to content value. The Markdown Editor itself, the Output and the button are all binding to the same set of data. Then I set the FileName to whatever I like that to be, and then when somebody clicks the button, let's look inside of our button. So, we go to DownloadButton OnClicked event fires, and I'm using a JavaScript Interop. >> I see. >> So, the JavaScript Interop is necessary in the scenario because of browser incompatibilities. So, I initially wrote this with no JavaScript whatsoever. You're able to do this in Chrome through a special type of URL that you can just set a prompt and click a button and that URL translates into a file download. That's not possible on Edge. Edge has a special API that is custom for Edge called msSaveBlob. So, I've wrote an Interop that wraps msSaveBlob. There's basically a simple browser check. So, if I go in here there's a function in here called, isHtmlDownloadAllowed, and there's also one to say, ismsSaveBlobAllowed. So, we check to see is msSaveBlob a function that exists in the browser? If it's not, that means we're probably not on IE or Edge. Then it fails over to the next mode which is this HTML download that is more universal. Then finally, if no browser support is there, we'll just throw a console message and you won't see that download come across. >> Okay. >> So, that gets invoked when we click that button, and but this project is a good example of how I can use existing .Net technologies, go into NuGet pulling some packages write very little code, almost everything that exists in Blaze down you just saw on the screen, just couple properties here and there and couple of function calls and I'm able to make something really cool like this. >> Indeed, indeed. So, that's very interesting. >> That's Blazor in a nutshell right now. 0.5.1 is the current release. It just came out a couple of weeks ago. May be updated by when the recording comes out on Visual Studio Toolbox. But just check Blazor.net for updates. >> Sure. >> See how that turns out. >> You're wearing an interesting shirt that says, "Goodbye JavaScript, " but it sounds like we're not really saying goodbye to JavaScript. You can do JavaScript and .Net Interop, but just like JavaScript runs natively in the browser or on the Client-Side now you've got C# running native on the Client-Side as well. >> Yeah, my shirt does say, "Goodbye JavaScript, hello C# and Blazor," but I don't wish any bad will towards JavaScript. >> Of course. Yeah. >> It's still, there's still some great frameworks out there that a lot of people are using. This is just another option for .Net developers and people that may want to use .Net for doing Web technologies and creating browser-based applications to use. >> Yeah, yeah. So, it sounds like if you are a .Net and developer and you want to stay on top of modern web but you don't want to write a whole lot of JavaScript, this is a way for you to write C# straight up in the browser and run it natively. What about performance? We are running native performance in the browser. >> Not yet. So, again, this is only like six months old. >> Sure. >> The performance, if you look at Blaze down, it's pretty performing, it does a good job. You're not supposed to be using this framework for building production applications because of the state that it's in, it's an experiment. The performance isn't going to be as good as JavaScript at the moment. But it'll get there over time. At least I feel that's the direction it's headed in and I think Daniel Roth and his team have a pretty good outlook on what's happening. >> It sounds like this is not just a Microsoft or a Google or an Apple thing. As long as Web Assembly gets better at executing those bytecodes we'll get more and more performance out of it. >> Yeah. Nothing about Web Assembly is Microsoft. It's the W3C standard. It's a standard technology that browsers are implementing, all the other evergreen browsers have it. Other technologies are looking at targeting it. There's Go Compilers, Russ compilers, C++. So, this is just another flavor of WebAssembly and a really cool framework built on top of it. >> Sure thing. So, sounds very exciting. Well, what's next? So, they just keep an eye out on what the ASP.NET team is doing and Blazor is as open-source now? Part of the GitHub repo? >> Yes. So Blazor is open-source. Again Blazor.net or look for it on GitHub. Further down the pipeline, we'll see some more experimentation. There's actually a project out there of using electron with Blazor and using that same signal or a type Server-side experience but it's using the electron shell instead. It's yet another avenue for this cool technology to take off. The experiments just keep producing really interesting things. So, keep an eye on it. >> They are very exciting. Yeah. Surely, you are prompt and I think if you're a C# developer and you want to see where your code can go, definitely keep, it behooves you to kind of keep an eye out on Blazor and where this is heading. >> Very much, very much so. >> All right. Well, thank you so much for sharing all this knowledge and all the cool stuff that the ASP.NET team and Steve Sanderson and Dan Roth and those guys are building, this is very exciting. So we'll see what comes out of this and how this evolves. >> Yeah. Hats off to them. It's really cool stuff and I've just been watching and enjoying all the things they're making and trying to help with issues on GitHub. If you get a chance to try this out and get the bits, click on the "Survey" button that comes with the example application, fill out the survey, get in touch with them on GitHub, let them know what your needs are so they know where to steer the framework and how to make it better. >> Yeah. Just like anything else in the ASP.NET is open-source and sounds like the community, this is the perfect time for us to play around and make sure we're doing this together. Yeah. All right. Very exciting, very cool stuff. So, this was all about Blazor on VS Toolbox. Hopefully, you guys enjoyed it. Keep an eye out on how this evolves. Very exciting times ahead. Thank you so much for being with us on this VS toolbox show. Thank you and bye for now. >> So, I hope you enjoyed that look at Blazor it's a revolutionary technology. It's still experimental but it's got some potential to really change web development. Hope you enjoyed learning about it and we will see you next time on Visual Studio Toolbox.

Building Bots Part 1

it's about time we did a toolbox episode on BOTS hi welcome to visual studio toolbox I'm your host Robert green and jo...