Showing posts with label right. Show all posts
Showing posts with label right. Show all posts

Wednesday, 23 October 2024

Boosting your Xamarin Development Productivity

all right we have Maddy Maddy Lachey is here and you're gonna show us xamarin so productivity in xamarin I am yes awesome so whenever you are ready great yeah so I'm Maddy Legere I am a program manager on xamarin I work on tooling and most specifically xamarin forms tooling but what I am going to show you today are across your whole development lifecycle a bunch of different ways that you can boost your productivity when making your xamarin forms and xamarin apps so i'm gonna share my screen we're gonna do some slides real quick I only have a few only have like 30 minutes so I have a bunch of things to get through and then we'll do a demo some stuff towards the end give you some links close out my face on top Oh minimize that by okay and then hey present okay this is good channel 9 oh good yeah I'll take that as a yes I haven't heard anything otherwise oh great so well boosting your xamarin development productivity like I said I'm Maddie we're gonna jump right into it if you have not heard of xamarin before xamarin is Microsoft's open source app platform for building apps for any kind of mobile or watch or TV that you can imagine using dotnet so you see sharp you use all the familiar tools and things that you are used to but you also get a hundred percent native access native API access to those platforms so if you're building an iOS app using xamarin iOS and you want to use the latest and greatest features like dark mode and all that you have all the ability and capabilities to do that using c-sharp so you don't have to go into Swift or Objective C ever so the architecture of the xamarin app if you haven't seen this slide before it's basically you have all the projects for your dotnet project where you can share your c-sharp code your android and your iOS and your watch and whatever projects and then you have a whole bunch of shared c-sharp your shared business logic your shared api is using xamarin essentials to do things like turn on your flash and turn on or use the accelerometer and then if you're using xamarin forms you can share all yours Amla UI and then you still have these three iOS Android and and your uwp or a watch or whatever other projects you have in there to drill down to that native code so they're super high performance like I said you get all the native API access that you need so you never have to go into a different language if you don't want to you can do everything that you could do with native mobile using c-sharp so let's jump into what we're gonna talk about today which is ways to boost your productivity when you're using xamarin or xamarin forms so you know Visual Studio for Mac Visual Studio for Windows that was the the big splash earlier this week is we shipped 16.3 on Windows and 8.3 on Mac which both include some great updates for exam and developers and you're productivities as well as like the whole 16.0 and 8.0 so the the 2019 series has been super super focused from the tooling teams and xamarin on making these four steps of your life easier so when you're coding when you're building your app and then deploying that app onto your simulator or your emulator or your device and then you know increasing the speed with which you iterate so whether that's your UI or your actual code or your business logic we want to make all of these steps faster so first and foremost the thing that you do every day as a developer is you're gonna be writing code and things like we wanted to do on both Windows and Mac were increased the speed with which you could write code and the accuracy and the confidence and get rid of as many typos as possible so the one of the things that we brought over was Intelli code support from the entelechy manned visual studio for Windows they were able to make and Teleco work with xamarin forms zamel which was fantastic so if you aren't familiar with Intel akkad it basically you can see these little stars here it predicts what you're gonna type using a huge data set of similar projects so if you're doing uwp or WPF and your c-sharp or in your sam'l it's gonna tell you what it thinks you should type next it'll tell you the properties that most people type with when they open a button tag and likewise with like new tags or new layouts so it works out of the box with xamarin forms amal and we're also working on bringing it over for android xml for xamarin android projects which will hopefully really increase your UI coding speed and it does already work with c-sharp for all your different projects which is fantastic on the Mac side we've done a bunch of different pieces of work to bring together the experience between Visual Studio for Windows so what you expect from your intellisense there and your refactorings and your quick actions and bring those over to Mac and the first thing we did came out and I believe 8.1 and it was a brand new optimized code editor so the brains of it are shared with Windows so what that means is these things like multi caret editing and your quick actions and being able to do things with like right-click for each to link all of that great stuff that the visual studio for Windows team at an editor team did those all came over using the same brains and logic but we also rebuilt the editor surface itself so that it's super fast super native very fluid you get right-to-left tech support you get different language support and you get emoji support all important things and so once we brought over the code and the c-sharp editor we then set our sights on the zamel editor and using the same method so sharing the brains but having this native super fast editor we were able to bring over the sam'l intellisense in engine from windows so now right out of the box with Visual Studio for mac you're gonna get really really rich intellisense with your zamel so auto completion and things like fuzzy matching and substring matching and things that you'd expect from your intellisense on windows all the autocomplete lightbulbs refactorings resource completion namespace completion the list goes on and on so as always you can check those amber and blogs for details on all of these things but these are all in Visual Studio for Mac the code and sam'l editors in the stable today and been there since 8.2 so hopefully you've been using them for a while so another thing that we've been working on separate from the sam'l and c-sharp site is the Android XML experience so there's a lot of stuff going on in this world I highly recommend you go and watch John Douglass's talk from last night he went into depth on a bunch of the improvements that are going on from the Android SDK and tooling worlds so go back and watch that I'm not gonna get too much into it today cuz he did a really good job covering it last night but this is just a sneak peek of some of the great things going on like layout linting and new intellisense and light bulbs and great stuff with the xml world great so you're coding faster than ever you're super accurate your Intel ACOTA is writing all your code for you you don't even have to think anymore makes it super easy the next thing you have to do is build your app and we always always always are looking at ways to make building faster because it's something you have to do every time you want to validate a change you make so if we can save you a couple seconds every day you might be making less cups of coffee while you're waiting for your builds to finish but we're gonna make you a much more productive developer so using one of our reference apps that you can grab on github it's called smarten hotel 360 it's a huge app it has a bunch of dependencies it uses custom controls it's got a really intense UI and lots of pages we use this as a benchmark to test a whole bunch of different improvements we did to our build system specifically for Android because we wanted to target that first and we are excited to share these results from Visual Studio 2019 and these are a couple months back the 16.0 figures but it's continued to get better and better since we shipped visual studio 20 1960 now and 8.0 and April April so you can see here like the times for first builds incremental builds and deploys have gone way down and that hopefully saves you a lot of time every single day so we did a performance challenge with all the different improvements you can make to your Android app and make your builds faster and your deployments faster and all that great stuff so definitely check that out that is also on our blog it's also on the github the I think it's on John Douglas is github and I'm sure he's also talked about it in his talk last night so check that back out so that's building faster which is a huge part of what you do every day and then you build it you hit play in Visual Studio and you have to deploy your code to your device or your emulator your simulator so deploy is actually kind of a two-fold problem because hey you want to deploy things faster and you want to make sure that you can debug as quickly as possible but you also don't want to be giving your end users and your customers a huge app so it's a tricky problem we've been working on solving in a couple different ways one of the first things that we did was called startup tracing and the idea with this is that there are some things we don't need to redo every single time you deploy and we can actually ahead of time compile some of the code in your app not all of it because that makes your app size huge but some of it to give you a much faster startup time so you can see what these stats here with when you do regular äôt so you compile everything ahead of time you save over a second in your startup speed but you also double your app size which is really bad with profiled äôt which we call startup tracing so we looked at the things that we can pay ot for you that aren't gonna make your app huge so it's only a four megabyte increase in this sample app but you still save over a second there with your startup speed so it's much faster and the best part about startup tracing all you have to do is take a checkbox to turn it on so go into your Android build settings enable startup tracing boom done faster and not that much of an increase in your apk so another thing we're doing with deployments and this is more on that size side of things is something called Android app bundles an Android built this functionality in recently it came out a couple months ago and there's a bunch of but a bunch of talk about it but basically the way Android traditionally worked is they downloaded everything you could ever need when it came to languages and screen sizes and all of that and that's why your Android apps were huge but what you can do now is very easily use something called an Android app bundle which will download only what your device needs so if I have specific languages that I use and I have one Rose Ellucian on my device and one type of processor that is the apk that might my phone will download for me and we have support for this now in Visual Studio 16.3 and 8.3 so go ahead try it out and this is also part of that Android size and performance challenge so you can see people's results with that right away as well on this Ameren block alright so let's see how we're doing on time Oh plenty of time good so now you are coding faster than ever you're building faster than ever you're deploying faster and you have smaller apps which is great then you want to iterate on things and something that we know folks tweak the most is you eyes so you're pushing pixels you want to make sure that button is just a little bit bigger something's off center and you have to fix it but waiting for those builds and deploys for just a small like one-line zamel change can be really painful and that is where zamel hot reload for xamarin forms came from and so we announced this back in July as a private preview at xamarin developer summit you can watch that whole announcement on the xamarin Developers YouTube but we are excited that in Visual Studio 16.3 this is built right in there's no setup there's no private preview there's no you know like anything you have to do or sign-in or anything you can go in and I'll show you how to do it and take a check box and you can start using sam'l heart real it for exam room forms so the feature itself is still in preview which means that there are still things that are going to change and there are still things we know we need to work on but we wanted to build it into Visual Studio so you can start using it right away and not have to do anything weird and give us your feedback so we can make it better and push it to be a stable feature as soon as possible so like I said you can get it with 16.3 or 8.3 today I'll show you how to turn it on in just a minute but some of the key points for sam'l hot reload for xamarin forms are that it's just running your app so if you haven't heard of a hot reload before the idea of it is that you deploy your app you change your sam'l or change your UI and in whatever language that is and if you're using something else you hit save and then your app quickly refreshes just the page you're working on and it saves your navigation it saves your view model and you can just see what that change is gonna look like super quick feedback and what we did with our heart reload is we made sure it was really smart it was really resilient it leveraged the amazing tools you have inside a visual studio like your intellisense it works with your custom controls and your third-party libraries and frameworks it works with all the great new xamarin forms features and it works on your Android or iOS emulators simulators and devices so anywhere that you're gonna be deploying or your xamarin apps you're gonna be using sam'l hot reload you can be using sample hot reload so let take a look at how it works so I'm gonna close out of my powerpoint hopefully this work is fine no Skype notifications which means I hope everyone heard me okay I'm gonna open my visual studio and here I am I am in James Monte mag nose monkeys app so there's a couple reasons I like using this app as a demo one is it has a custom controls and a lot of other things but I haven't changed anything except for an updated heads Ameren forms so xamarin Zabel heart reload does requires Ameren forms 4.1 if you want to learn more about why we have a good blog post about like the somewhat of the architecture of it you can go see that on the xamarin blog but if you're not on xamarin forms 4.1 yet it's 4.2 is the stable now you have no excuses go upgrade it's great lots of new features in xamarin forms so i upgraded that and then all I had to do to start using zamel Heart reload is go to visual studio preferences and if you are on Windows I know I'm on Mac you can go to tools options and then xamarin hot reload and Mac it is visual studio preferences projects xamarin hot reload and then click this checkbox enable zoom or not reload so then I'm gonna hit play start debugging I already have my emulator up you can see I'm on iOS 13 so fingers crossed because as I'm sure you all know the update craziness no you never know what breaks but it was working earlier so it's gonna build my project it's gonna start spinning up all my hot reload assemblies and boop-boop take its time nothing in the output okay it's thinking that's successful okay so hot reload is nice enough to tell me that James had his linker on so I can go ahead and it's still gonna launch my app hi reload isn't gonna throw up everywhere but it's not gonna work yet so let's close out of this stop debugging and I'm gonna open my build settings with this little button and James has it on linked frameworks SDKs only so you're gonna set it to don't link right there so definitely I've had some questions about this from the private preview why do I have to try up a linker well first of all you shouldn't have your linker on and your debug builds because it's going to make your build slower and linking is just to make your apk smaller or your app if you're using the iPhone itself like a physical iPhone you want to put in the additional em touch arguments - - interpreter and that tells your iPhone your physical device it's okay for visual studio to spit code back at your device and make it refresh it otherwise Apple doesn't like when you do that but that's how hot reload works it just sends more code to your device so you don't need that for the simulator but make sure that you do set your blinker - don't link and then you update your xamarin forms okay let's try this again hit play boo build successful great so it spins right up and OH encountered a problem what don't do okay let's try this quit that quit that and we'll restart Visual Studio a classic yes yeah so hot reload it like I said it's a preview feature but it has been tested with all the latest bits that we shipped out so your your iOS 13 and Xcode 11 and your Catalina it does work with which is awesome and then we'll just go back into visual studio sometimes you need to do like a good old bit obsolete but this should spin right up for us I don't double check that my linker settings I set those right and I deleted interpreter yep iPhone simulator got my supported architectures taking its time and eyes that make sure my same reformed version is good yep let's do it all over again I mean every bill did you do that all right there we go connecting watching oh no what's going on oh oh all right let's try updating my Zam reforms one more time if you haven't seen the new solution level Mac nougat package manager it's fantastic by the way so I can go to manage NuGet packages for my whole solution now check my xamarin forums late a stable good at package select all my packages make sure we're doing good on time close that out and we'll do a full rebuild after this one and hope that works if not we'll switch to another project and see if that one's working okay rebuild all let it clean let it build do double-check my build settings one last time while we wait this let this happen yo yep yep this is when I would go make a cup of coffee if I was a xamarin developer but I'm sure that I'm getting a bunch of messages right now like clear bit on so let me check that too while we're here reveal and find her oh well let that build and see I play Connect let's go and yay okay great a classic rebuild it does the trick every time and hopefully I don't run too short on time but we still have a few minutes which is good so we are in like I said James's Monkees app which is awesome it shows you a list of monkeys this like I said it was a mohawk reload it's just running your app so literally I can click in and go to my different pages I can pull it down and scroll around just like I would if I was on device I could be using my device and screaming it or not I know it were great so the first thing I can do is I can go ahead and like start switching up my bindings so change location and change name so now this should say Africa and Asia up top and baboon on the bottom which is great but exactly what I wanted and you can see how instantly that refreshes so I can switch it back hit save good to go James has this amazing circle image custom control and it's pulled in through nougat it's right here Oh didn't mean double click that Oh what you don't have focus is something blurry okay I don't know I just heard something but I can change the color of this to blue hit save I can hear you Channel nine hi Jamie so okay yeah so I've gone and I've changed in the border color I'm changing the border thickness my custom controls update right away I can go into like this page so I'll I can click on let's go to this Golden Lion and like I said it does hold your your navigation and your view model so what James did here was he found his view model in the code behind so right here which means that when I hit save and it refreshes my zamel page it's not gonna try and reload my view model every time so if I go into the details page here which is this page I'm on right now I can do things like change the location and the name and change my border color change my border thickness 23 and hit save and all of those things are going to get updated right away on my emulator my simulator right to the side here so that's kind of the basics let's go into a shell app as well so I'm gonna stop debugging that open another visual studio and hopefully this one's in a good mood to do do I have to pin abdu this one as well but we'll see hit play and so if you didn't see David or it now stalk on Monday afternoon or morning Pacific time maybe that is all on demand right now you can go see it on the YouTube and the twitch but he went into depth about all the great things you can do with shell so if you haven't heard of shell before it's basically a way to describe the visual hierarchy of your app in one file so you'll see the the exact same app we were just looking at sort of with the with a browse and a list view but this one also has the about page they're all described as these tabs right here and I want to show in this app some of the other great features you can do with hot reload so one of them is being able to change all your resources so if I wanted to change the color on this about page of this button I'll hit save it's immediately gonna refresh and change that static resource up here which is down all the way down at the bottom of the page and this button now if I wanted to move these resources Wow I'm running my app to my app dogs Amal resource dictionary or merge resource dictionary somewhere I can cut it and hit save now hurry low doesn't know where those resources are anymore so you can see it doesn't crash the app instead it just uses intellisense and that great new zamel editor on mac to tell me that it doesn't know where that static resources anymore and then it just takes out the things it doesn't know what to do with so the sack layout is still there it just took out the background color cuz it doesn't know where to find it so I would go drop these in my app resources hit save because I just edited an app level file it's gonna take me back to the beginning of my navigation state but if I go back into my about page all my resources are back there and I can go ahead and change this to something like fuchsia which I can never spell alright and hit save it's gonna bounce me back to the top navigate right back right there and then I can go ahead and change where this is referencing it from so if I wanted to change my background color to primary - and hit save there we go perfect you can see the intellisense pops away when it realizes that resource is there additionally I can go into my shell and start editing things there as well so if I wanted to change like the actual primary navigation color of my app so let's make this lime this is gonna start being a really ugly app in just a second it pops back to the top because it's an app level file app shell but it's gonna change my color right there so let's change it to black so you can see those tabs a little bit better and then I can go ahead and do something like copy paste this tab a couple times hit save and see them immediately pop up and because shell is handling my navigation for me and because this is using content templates in the data template for about page the navigation already works and this is all just editing my zamel so super easy again it's resilient so let's say that I misspelled the color black because I'm really tired it's just gonna get rid of that color for me it's gonna highlight it and it's gonna tell me it doesn't know what that color is so that's kind of the the nitty gritty getting up and running with hot reload and seeing all the different features it has like I said it's a preview feature so definitely report problems on help report a problem right here or help send feedback or porta power of them on Windows and let us know what other features you want for sure so let's pop back into the sides real quick I only have two more slides one is a bunch of links so I should have linked to all of the amazing already existing exam Rand talks but you can find them all from the page that you're on to watch this right now so do that additionally you can learn more about hot reload in the public preview an aka MSI's amo hot reload you can learn about the docs at Samuel hot reload Docs and that's where you will find all the things I showed you about how to set it up and some of the features you can do with it and then if you want to go check out James's app there's the github right here as well there's one more session on xamarin and dotnet conf it's tonight it's mixed reality with xamarin a geospatial anchors which is an amazing talk it's by sui key so definitely go watch it if you are around at that time and that's it so hopefully we have time for a question or two I know there was some demo issues but love to get your questions and as always feel free to tweet me or email me at value one or one and I can get back to you so let me stop sharing my screen and then we can do some questions hopefully there were a bunch of questions but James answered them all yeah oh wow now if you have any directly from Eddie James and Pearson in the channel answering them as well yeah sorry for the interruption there do you mind closing your screen so we stopped getting the screen section oh is that what's going on yeah I stopped sharing it but it's still showing my face that's all they're weird all right well cool thank you everyone well thank you so much all right Jenna later he's at for Easter night okay yes all right yeah we're going to switch over to Elton and thanks Maddie I

Azure Functions Less-Server and More Code

all right what do you guys what do you guys get ready to film we are going to do a visual studio tool box at the soda I'm one of the co-hosts of visual studio tool box to show that Robert Green started and myself and Batman Brown there now co-host the episodes and I have my guess you Jeremy yeah I just randomly wandered into the studio I'm actually a cloud developer advocate and have been doing a ton of things without your functions we're going to talk about serverless today both compute with functions and then we're going to do another episode that focuses on cosmos DB which is the less server version of the database I always say flip it backwards what's cloud developer advocate I advocate for developers in the Clausura less is less server it's not no server yeah and then a full-time job I'm actually the product manager for visual studio team services which is our DevOps cloud offering so I have a lot invested in Azure and I mean this guy did a so pretty recent about that as well so being able to Jeremy in the show a lot more stuff together I'm sure all right well we're ready to get started and talk about as your functions so Jeremy why don't you kick it off those what are we gonna talk about today in detail yeah so one of the best ways to get familiar with the technology I think is the dog food it right and I wanted to talk about a project that I made that's my own URL link shortener so you're familiar with these we have a kms here for example who isn't know exactly and what I wanted to do was take ownership over the data so I'm very interested in when do people click through links what links generate the most click throughs right is it Twitter is it LinkedIn is it Facebook is it one of these social media sites yeah and then I wanted to also look at different statistics like what time of day is the most popular time of day for people to click or day of the week so I thought what better way to leverage functions and server lists than to build a link shortening tool awesome so what don't we just roll it back just a little bit because I think sometimes people might be watching the video and they're like what would it what are you talking about what is this functionary so at like five words or less summary what is functions and we are talking about something on a so it's a cloud hosted thing but what does functions give to a developer well if you're going to restrict me to five words I would say events and code right it's functions but but the idea when we talk about server less I like to flip it backwards and say it's less server yes so it's the ultimate realization of focusing on your code and not having to worry about necessarily how your codes hosted it's not even platform-as-a-service because we're not necessarily talking about web applications right we're talking about some sort of event that triggers the code and then we're talking about the code that actually runs right and that code could occur in that the X or Y right it's all it's all dependent on what you do in the implementation it's not specific the code doesn't care what you do with it you can write to to a script file something you could generate some data it could execute a web service call it could return something to to an end user but really it's agnostic it doesn't care what codes inside of it I think that's something that you and I took awhile to overcome as a train of thought right this is like you said a function in the cloud right I mean it feels to me like the ultimate realization of the dream that's microservices if you will I hate to use an overloaded term it's a valid term in this case I mean so some of the things that are really neat about functions are number one you can write them in different languages I'm gonna demonstrate it in dotnet through Visual Studio but you can do them in Python PHP node.js you can even write bash shell scripts that launch function so that's one neat thing the other cool part about the way Azure implements functions is we have a concept of triggers and bindings and these are ways we set up the environment to allow us to interact with things like storage and queues and and it can be file storage it could be blob storage and it makes it really easy for the developer to work with those resources and I'm going to show that in the application that I built that's awesome well let's jump into it it sounds like a great demo alright so what I'm going to do is is jump into the portal right now so I've already deployed this application I'm going to take a step back and show how this is built but I want to set the stage with the link shortener that I have I wrote a web front-end but just to focus on the function side it's a small window but you can test functions directly from with inside the the UI which is pretty cool yeah so what I've loaded up here is a link that if I just paste this link in a new tab you can see goes to some of the azure functions documentation so if I run this through the tester I'm just going to click run here it will go out and call that function and I see a little completed success and I get some text back that has what is the short URL that I can use for tracking so I'm just going to copy that and paste that so you can see the way the experience works so jli K which is my first name and part of my last name dot M e right and then BW is the short URL when we hit this it goes through my function and redirects now for the end user it's a very simple experience you just end up where you're going for me a ton of data is generated from that that really simple event right if we have collects quite a bit right it does and looking at that I actually wrote the part that shortens the URLs I wrote that as a script that's this run script so you can see my shortener there's an encoding routine but the the main part of this grabs a request and you know obviously if I have no requests I'm going to return and say basically not found there's nothing there we get the input we check the input for null we go through and basically I'm tagging if it's coming from like Twitter or LinkedIn or some other things and then at the end of the day I'm really just creating a record here that map's the short URL to the long URL and I'm saving it to table storage and that's it so when I'm putting the link in it's here's the long link and then give me something short back that I can use yeah now the real power of this comes from this function host that I have here and by the way all of this code is available on github so I open-source this so people can work with this project yeah well link it in the show notes definitely right so the the redirect comes in and this is when you're hitting the short end point so you're hitting the the BW e for example so what happens here is it'll grab that short URL and then I have a keepalive that sort of pings the server make sure it's running I also get requests from robot so I tell them not to follow right because this is my link shortener yeah and then we come out and we go in to table storage now this little piece of code here where you can see the start time and I'm starting a timer this is something that I love about functions because when you create the function app you can check a box and say you want to use application insights and this will automatically start building telemetry and analyzing response times and basically giving me the feedback I need to know the health of my application right what I wanted to do is because I'm using table storage is I wanted to measure how long it takes to read from table storage so with this telemetry I have this operation that goes out to the table and finds the long URL if it gets it back it says it found it gets that redirect URL and it's tracking how long that operation took and this is that's the most sensitive operation you don't people to wait when they're being redirected that's I mean it happens all the time now these public link shorteners you get to some URL and write events whining whining whining exactly so I wanted to test that and I wanted to just highlight how easy this was to put this custom data and I literally am tracking tables storage that's the thing I'm tracking retrieve is the action I'm taking and then I'm just passing it how much time elapsed the first two like strings it or they have any bigger significance or they're just the way you decided to store just the way I decide to categorize the data with application insights and then it's as simple as two two steps one is I want to do some more operations with this data but I don't want to slow down the redirect so I'm going to add some information to a queue that I can pick up in process later right now the event is an HTTP trigger it came in and requested an endpoint I throw this on the queue and then I redirect them that's it that's the redirect code then I have will ignore keep alive for now I have this process queue so again we said that serverless functions were events in code right in this case the event is there's an item in the queue and my code pulls that off and does some additional processing so I'm breaking apart the message in this code and I'm writing some custom information one of these is what I call a custom event which is literally this came in from Twitter or this came in from LinkedIn the source yeah right and then the other thing so you can see I do the the track event here the other thing I'm doing and that's actually adding a document I'll get to that into a minute there is a page view so with this piece of code I'm highlighting a page view so now I know which page it actually went out to so I'm saying what was the medium what was the page right and I'm adding that all through application insights and I want to show what that looks like and then this is a piece that we can probably dive into at another time because this is creating a document for Cosmos DB and I added this on later I started just tracking through application insights but then I decided to create a Cosmos DB database because then I can stand up a power bi dashboard and do some exciting things around that well and so what what is it Cosmos DB database or those they don't know yeah it's the actually the function is serverless compute the cosmos DB is a server list database it's a not only sequel right no sequel document based database that's hosted in the cloud what's really neat about cosmos DB is that you can pick your interface we have a document DB interface that was developed for the previous incarnation document dd what well it was cold document DB when it first came out on Azure right was you know very comparable to that's how people wasn't talked about it at Microsoft Center no sequel space and then more recently be renamed at the cosmos so there's any confusion out there that's sorry Microsoft love to rebrand but right the product has been very solid very you know long development cycle already for it and then quite you know the the cloud scale player I think is what they often call it right this lady right lives in a ton of data centers as a concept and use the developer of powerful flexibility to deploy your data across the world well you do you you get to choose your consistency levels and you get to just click with replication which is pretty powerful and the other thing I'll point out is this is using the document DB interface and the reason why I call that out is because you can use sequel syntax to query with document DB however there are a ton of developers are used to MongoDB as you mentioned yeah and you can use a MongoDB interface and write an application around so it's very flexible in that respect yeah it's very cool that you have these options and you know I'm a sequel developer most of my life and I've been toying with no sequel I kind of like it and it's awesome to see this not not really stopped me because I actually start with is my first database that I learned you know just the basics around that that claim me I'm a developer yet on that space right having sequel I didn't realize we've even added that so that's awesome I'm working something new in each episode here and that's what I'm finding out with cosmos DB it's so easy I'm a sequel developer myself I worked with it for 15 years yeah so I had that mindset transition to a document DB but after standing up actual applications using this for my analytics I'm finding out that it's not only easy to work with but it is scalable and fast which is is everything someone wants and I don't have to hire a DBA yeah it's literally inexpensive I run this shortener on my own subscription through Azure and one of the huge benefits I see four major functions is I only pay when someone clicks through the the function yeah right and with the model I get a million calls per month right now I'm sure it may change at some point but with that it's literally pennies for me a month I think last month there was a quarter for the storage and the function calls so cheap to handle and it's 2,000 requests a day yeah it's pretty cool that the thing about you know all of this technology on top of azure is that you you are living in the cloud that your credit card is plugged in they're yours or your companies or whatever in the trial we do give you a limit so if you want to now go over the free trial limit we provided an azure but I'm always kind of encouraging developers thinking about moving to the cloud as the first things they think about telemetry so it's awesome to see application in size built-in you actually want to know what's going on with your cloud service it's not just you know consuming your resources of your service it's going to cost you money potentially depending on how much you know requests come in and people just need to think that way it's a right slightly different world you know the other day money matters so it does and speaking of application insights what I thought I would do is show some of application insights just so people can see and this is just the check mark out-of-the-box when I created the function app and some of that custom code and I want to show the reports that it gives back and then we can look at what it looks like to create a function from scratch three visuals thank you let's take a look so let's pop over back to the the website so this is the the function app I had running and I've got all these features that are configured one of the things I wanted to call attention to is this is using a feature functions called proxies and that allows me to map one route to another route so the function app itself is something like blah blah blah as your web sites dotnet slash API slash URL redirect question mark short URL equals totally friendly which is is not a short URL so in in my proxies and you can see this in in the code this is part of that code base I've mapped what is a short URL right here so just slash and what the code is to that longer URL and that allows it to translate behind the scenes no one sees that happen and and Maps it on to that longer function so I have my custom domain and then I have the azure functions running behind it cool if we come into the application insights portion the very first thing that application insights pulls up for me which I love is the overall health of the system so we've got this live stream which I'll show you in a second but this is really informative to me here because this has given me an overview of response times over time and you can see that I'm averaging a few hundred milliseconds but this is across all of my services so it's not necessarily just the redirects right you can also see a count of requests and then up here we've got something called smart detection this has actually alerted me several times when it finds something that's outside of the norm it will automatically email me and tell me you know what your redirect usually only takes a hundred milliseconds suddenly it's taking two seconds you should look into it it automatically does that and when I click on it if there was a smart detection it also helps me diagnose and shows me the sessions that were slow sessions so I can look into them and try to figure out what's going on I'm gonna scroll down here to performance and when we see performance this will let me pick so overall you can see 122 milliseconds what's really important to me is the redirect experience right that's what the end users are experiencing so we've got a 94 millisecond average and if I want to drill into more detail I can come up here and over in this graph I've got my percentiles so I can see what the 99th percentile looks like and you can see the majority Falls even faster than that yeah so and this is the least expensive version of functions you can back it with beefier servers but even with minimal resources it's still giving me this type of performance the other piece is because I tracked that custom application insights telemetry if I click on dependencies you're gonna see my as your table storage operation right and you can see the average there is 17 milliseconds which is more than fast enough for my needs and what I'm doing here yeah it's cool the fact that you can drill down all the way from like what the requests are doing overall to the custom tracking that you did but in a particular block of code I think that's super powerful the fact that it alerts you is even more awesome I've used application insights kind of since the beginning I'm okay in some products so I do have dashboards but I haven't implemented recently and it's cool to see it even though they added that new automatic notification yeah it's pretty cool the other thing that I call this the the sad portion of the application because it is sad to think that you might be sitting in a hotel room watching the livestream of your website saying it so when clicking it is someone clicking it but it's a think it has its own level of use Melissa when you when you sort of create something this is your your baby one of your babies now you know better or worse it's it's fun to watch so this is a live set of requests and as the requests come in it's it's going to show me those and I may actually force the issue over here but let's go ahead and do a redirect and I'm just going to the generic as ER Doc's so that's the shortcode to land on the azure documentation you can see it here I'll show me the request that showed me how long it took and then I have all my trace information on the side so if I want to drill into details I'm not going to click on this now because it'll go into IP addresses a Mac and like everything you want to know about right session but you can drill into the detail the other piece with app insights and again this is just out of the box without me adding anything is this nice little tab right here for lytx if I click on this it's going to drop me into basically everything that it stores is Coria Bowl for insights so I can set up pie graphs and charts I'm gonna just open up my folder here and look at mediums over the past 24 hours and run that and this will give me a pie chart that breaks down Twitter clicks LinkedIn clicks blog clicks etc so you can see Twitter is definitely my main medium of choice for for generating links yeah yeah I remember somebody showing showed me this at ignite actually this this is like a sequel light language right yeah yeah they call the language itself but it's to me when I saw the first times ago this is the sequel close enough I guess it allows you to query all the various parameters and this is again this is the back end of application insights data has been collected it's not any other kind of data but but it can I think be mixed with other kind of data sources to give you a more holistic view of your environment if you have complex deployments these doesn't help the person described this I mean the dumb right ya know it cannon it's all prompt able if I'm inside and I start to type it's giving me a tell us and intellisense so it'll walk you through creating these these queries and that's exactly how I built the one you just saw and I'm gonna open top page views and we'll just do this talk these rolled ones you built yourself right yes they didn't have those and it saved it for me and then I just drop in the table and I could see channel 9 it's actually one of the more popular links in the bag 24 hours right so that's always nice to pull up on the fly we've got a juror this is actually interesting these are all Microsoft properties I actually do tweet other links but these are the popular ones for 24 hours yeah that's cool so that's the application insights experience let's pop over to visual studio and just show someone what it looks like to start a new function out yeah that's really great I think I think it's awesome when we show how we did something and we provide the code but often forget this part right exactly how do you get started yeah so the the prerequisite here is I'm working with at least 15.3 right so it's a preview version of Visual Studio 2017 right think we're up to 15.5 any of those versions will work for functions yeah if anybody has been kind of away from the visual studio versioning game for a while that's the versioning scheme we've gone to and if you like go into about dialogue for a second under the help menu sure yeah you'll be able to show so if anybody has any doubt which version they're on you can jump in there and there's 15.4 preview of that particular you know preview branch and you can install side by side so I have always the RTM version and the preview right machine it tends to work really well I've never had any issues asterisk a string like now you said it I know I care but your machine in your environment users out there yeah that's how people know in case they don't know which version yeah so once you have that install and you have to pick the cloud work load will go into a new project and as your functions lights up and the way I like to talk about this we talked about a Vincent code the function is the actual piece of code that gets executed the function app is the host for those different events and pieces of code right so you have a host that's what this as your functions is it's a minimal amount of you know stuff around it to make it work as a function and the rest is up to you right so what this will do is it'll create an empty project for me that's just ready to host an endpoint so then I can click on that and add a new item and fortunately these are sorted alphabetically so as your function comes up right off dial this yeah that that's convenient and I'm just going to give this a name of echo name and click add and what will happen is it's going to create a class for me the entire experience for functions within Visual Studio is is attribute driven so it's very easy to add what we call bindings or connections to things like table storage and queues what I'm gonna do is create an HTTP trigger this says basically you know what call this piece of code in response to an HTTP request which is a pretty common scenario and I'm making it anonymous so anyone can test it out and access it but you can we support permissioning but for our example here right no big deal and I think they also good just to connect line so we've gone the dependency is like what NuGet packages is this team bringing into to make this the default so you just got the function SDK and that's about it it's very bare-bones at this point there's no application inside there's no you know there's no gunk if you don't need that stuff it's not right by default free right and then if you want to start tracking custom telemetry you would just you know add a new get package going to the Explorer and add that that experience yeah I think if your right click on dependencies it would give you that yep as reference so what we've got is our async task and what's coming out of this is a response message because we have to respond to the request what's going into it is a trigger there's two types of parameters we're typically gonna pass a trigger is what actually causes it to get called and then a binding is something we might interact with and I'm going to show how to do a binding in a second cool so we've got this anonymous it supports getting posts the routes no here's to the request and here's the log and by default it creates some code that expects you to put the name in the request body or in a quarry string and it's gonna echo it back right but what I want to show is before we even touch a j''r I've downloaded the prerequisites I've created a function app I can put a breakpoint right here and press debug and what will happen is it's gonna run a full version of the function host right on my laptop and we just announced that we have this experience available cross-platform cool so it's not just Windows machines this will run on on Linux as well and and Mac OS nice so it's a been waiting for that when I give I kept hearing it was coming in it's awesome that we we finally announced that I I missed that part not not that I'm a Linux person or anything I still run a PC so I'm quite biased alright I spent a lot of time I actually was having fun running the function host in my Ubu - on Windows 10 yeah through the windows subsystem for the neighbors I should try then accessing it so all I'm doing is pasting the URL it gave me and you can see we hit the breakpoint and if I continue for that it's going to slap my wrist and tell me that I needed to pass a name so we'll go ahead and give that a name name equals vs toolbox hey Brandon go and we hit our breakpoint again and we'll go ahead and continue through that and what we'll see is it'll echo back and say hello this toolbox so that's a great start we've got it running locally we were able to debug it let's take it one step further and load it into Azure what I'm gonna do is just right click and go into publish and the publish experiment experience will allow me to create a function app in the portal and connect to an existing one or I can spin up a completely new application right from right here so we're gonna use live there earlier put the publish experiment that hey sometimes the world can be a public experiment yeah we're gonna try for the publish experience today let's see if we get that so we're gonna call this my vs toolbox app use my subscription and I'm gonna give it a second to spin because what's validating is making sure that is indeed a unique application name yeah I'll give it an agree eating the cloud you know resource that's assigning it to to the research group of your choice or new ones so there's a lot a lot to do there but you never have to leave the ID in this case right I'm gonna pick a location will do West us since we're filming here and let's the biggest machine can we do here oh my goodness you would want to do this right so one thing I do want to call out I can pick these various course to back my experience I can also pick the consumption plan the consumption plan is what I call the easy button for functions I don't have much control over size of the servers but I'm allowing Azure to do all the scaling for me it will automatically look at incoming requests and do what it feels it needs to do to accommodate those listen there's always trade-offs right if you have dedicated machines you can configure them to be always on so they're ready to start where with the consumption plan it may go to sleep and you have a new request and it takes a little bit longer to start up but again you have flexibility of options and I think consumption there's a reason to go at a price wise right there's some different right that's a good deal if that's good enough for your production environment right and that's what I'm using for my redirect experience as well I just have a cheat a little bit with a keepalive that pings the server to keep it awake yeah well that's valid they know you're consuming it nobody feels cheated in a dream I'm sure right yeah know it they're keeping an eye on you but for good reason that's right yeah so this is going to deploy there's really I like to share when people are watching this spin there's two steps to this the first step is creating the assets to host the application so it's going to create a resource group which if someone's not familiar with Azure that is a a logical group of related assets I think of it as life cycle if something's going to be created or destroyed with something else so you have an app and a database if they're related they probably belong in the same resource group and you can track cost by resource group and you can script out and even delete entire resource groups yeah it's a very powerful idea at first that was you know when resource groups were introduced I was a bit frustrated like another thing to do there's a girl wait oh there's a lot of benefits to this other thing to do so now I don't even think about it twice I really started to memorize resource groups I'm getting that bad on my glasses my out of my miscellaneous one if I need to just throw something out versus okay this is a bunch of real stuff together then I group right and it's great to if you're giving demos or meeting meetups or user groups because you can create a resource group for that experience and go through the same demo but partition it off so once it spins up those assets it's got the hosts it's got the function app the function app has storage with it next thing it does is builds and creates a set of assets that it then bundles up and deploys out so the first step is what is my target and then the second step is publishing and now it says publish succeeded so what we'll do is we'll just copy this in point right here I click copy to clipboard and we'll paste it in and notice now instead of running off localhost I'm doing the full my vs toolbox after we selected that was the unique name yeah and we called it echo name I believe so if we hit that it's going to spin up and it should slap me on the wrist again and tell me that it's expecting me to put a name inside the corey string and what we're seeing right now is that spin up you know for the first time and we'll let that go and and I always encourage people to use the mouse trick right if it's a clockwise mouse rotation should speed things up for that that is definitely the matter right there I mean you know Jeremy's magic tricks and look at that so please pass the neighbor Cory string now that it's spun up if I correct this and we'll do this again name equals vyas toolbox boom immediately it comes back hello vs toolbox and that that's the experience so basically I showed you how to create the function app from scratch from visual studio but then if you want to see what a mature application looks like something I'm using in the real world then that's going to be on the the github site for the link shortener that I created yeah and the fact that you can write this thing many languages the fact that it's so globally hosts the bowl I mean it's it's amazing what you can do nowadays it is yeah the only thing I don't have in production for more recent stuff is probably functions but we should some find some excuse do to put a function up there but it's cool yeah yeah no it's a great experience and and it's something that I'll be looking at too is is how do we take existing web applications and migrate them where it makes sense just because you can't move them doesn't mean you have to but where it makes sense because ultimately what happens is instead of one app with five endpoints that if you make one update you have to redeploy the entire line with the function you can literally just test and redeploy that one endpoint in isolation and you know you are very familiar with DevOps and and that experience and being able to continuously deploy at a micro service level is a huge benefit in my book yeah it's super awesome in the fact you can monitor it you can really get a sense of T to roll something back how is it doing or if there's any underlying performance issues in the infrastructure like the table storage slow down whatever I mean I have lots of flexibility nowadays to understand what is going on with my production environment and my staging environment if you put everything up on Azure you have all that same telemetry for all your environments which is really awesome right I've always loved love that part of a my def the Devon's experience is awesome right to get you going but get it up in the cloud you get all Morris or a benefit absolutely I'm digging am a one-man shop right with your shorting tool but I get all the telemetry and information I need to make sure it's running and up and healthy awesome well is that all you wanted to demo for this particular there was epic all right well thank you for being on visual studio toolbox and we hope you folks enjoyed the episode we'll make sure we'll put the links to the github repo and to any other resources we mentioned in the show notes and we hope you come back again and watch another episode of visual studio toolbox so thank you Jeremy for being on and see you folks later thank you see ya [Music]

Azure DevOps for NET Fall into the Pit of Success

all right we are here with Jeffrey Palermo hey Jeffrey how are you I'm great how are you I'm excellent and you're gonna talk to us about Azure DevOps for dotnet absolutely it's a really exciting topic and let me share my screen all right should be on now so today we're talking about a DevOps for dotnet and falling into the pit of success and I'm so glad that you're here you're tuning in to this session then that means that you want to get more done you want to move faster you want to produce higher quality so that you can deliver for your team your company your customers and that's what this session is about falling into the pit of success there's so many choices the complexity is endless but I'm going to narrow it down to the seven key elements that you need to put into your as your DevOps pipeline to move fast and and building a smarter Manor and run your systems with confidence so I know from experience that if you map out your software delivery process and then automate it you will deliver more you'll absolutely love programming again but we do have an enormous problem serious problem problem we're gonna have to deal with and solve most teams automate work for their own customers by producing software but then saddle themselves with new administrative work to build deploy and monitor software that you know it relieves their customers of their administrative work there's no reason that the Cobblers kids shouldn't have shoes and I work with teams all the time we're one of the most senior most capable developers is trapped by the task of deploying the software because he's the one who understands the software the best so they take their best talent with the most experience in the software and reduce them to weeks full of administrative tasks a deployment is a set of administrative tasks copying files changing a config file configuring a credential starting a service and then doing it again and again over and over and we all got into software because we saw the tremendous power available to us we can write code and make the computer do something that makes ours and our lives better so then why shouldn't wash should we settle for a process that takes people with technical creativity you and turn them into an automaton and so for you managers listening in I want to share with you what goes on in the brain of your people who have to do these manual processes over and over we as humans are always on a pursuit of happiness whether we get fulfillment and serving others or making something new your people aren't finding happiness in the process of manual builds environment configuration and deployment they want to get it done as fast as possible so that they can get back to why they get into software in the first place to create things to solve interesting problems to make others lives easier through software and as a result the manual tasks are error-prone and just mind-numbing and the more your staff in doors tasks that don't bring happiness and satisfaction the more they become open to perhaps considering other employers that might be able to provide more work that does bring satisfaction so whether you're an individual developer a lead a lead of a team or a manager and technology this talk is for you so today's session we're going to talk about the the pipeline structure we have already discussed the challenge that we're faced with in software and how DevOps solves that next we'll go through the key seven stages of the DevOps pipeline and then I'll show you how to get started so I want to give you something of value and help you get automated I don't want you to continue to be frustrated and sometimes trapped by the software that that you work on and I understand lost weekends and surprise overtime due to software builds and deployments over my career I've helped tons and tons of people to do this and I want to just give you a copy of my latest book for free not selling anything I want to give this to you for free we want this to be in your hands we gave the preview Edition out of the build conference dotnet DevOps for a sure and it exposes the secret about how any team can have a fully automated DevOps pipeline using Azure DevOps services by following a concrete seven stage design and so here's what you need to do read the book and and I'm giving you a free e-book copy just send me an email for being here today on the.com or even stumbling on the recording then second you need to understand the seven stages of your DevOps pipeline which I'm giving you now in this talk and then three on turd launcher dotnet DevOps pipeline and and use the free public project as a template it's a community projects help you get started with Azure DevOps services and you'll find that in the book and if you do this you'll have a fully automated DevOps pipeline using Azure that will enable you to move fast and and with higher quality and also you can tune into the azure DevOps podcast and and get more information there so let's dive right in the seven key elements of a DevOps environment are the pre-code design process how you set up your your version control which sets the stage for the rest of the automation your build and then your levels of validation which include full system testing user experience testing production release and then telemetry observation we have to make sure that we are watching how the system is running in production and so to look at how that would lay out in as your boards for example we have the top level that is your pre code design process there's four types of design decisions that have to be made before you put your hands on the keyboard is the conceptual definition what the heck are we building that's the good old fashioned requirements user experience design wireframes what's it gonna look like how's the user gonna use it then technical design libraries patterns architectural changes and then acceptance criteria and test design that is what does it mean to be done and how are we going to test this once it's put together armed with that we're ready to code and then move on to the next pieces this is what it would look like in Azure boards you're going to configure the columns for you you're going to nobody has no nobody's full process has fewer than nine columns because ahead of development ahead of the column that represents hands on keyboard coding you need to represent these four different types of pre code design because even if you don't have them on the board these decisions are going to be made and if they're not made explicitly by the right person or people then a developer's gonna have hands on the keyboard and just have to make assumptions and make it up as they go and so these are the four types of pre code design decisions you need to have these representative in your process or you're just kind of kicking the can down the road you need to structure your version control system you need to factor out your git repositories properly and one of the big things the mistakes that people make is putting more than one application in a single git repository or maybe taking a subversion or a TFS repository and just dumping it into a git repository and it has a huge tree of software and then they try to figure out how to do a DevOps pipeline it just doesn't work I'm here to tell you the rules that are gonna cause you to fall into the pit of success and putting one application into a single git repository is the beginning of the automation chain that causes you to fall into the pit of success because we're going to have one build that builds one get repository one application altogether and produces a set of release candidates that all have the same version number so you can have a large software system but it's I mean it's segmented into multiple applications anyway you just need to make sure that each application has its own git repository so that you have the source of what is versioning okay then we need to build and there are various stage you need your private build along with your continuous integration build if you haven't read the addison-wesley book on continuous integration back from 2006 you need to read that book and because your private build is going to be leveraged by your continuous integration build and so building whether it's test-driven development or build process any test uses the natural pattern of a range act assert or setup get ready do something and then check to see how things went and so these are the basic build steps there some people put static code analysis in the assert column it's not not required but notice that I have two levels of automated test unit tests these are in unit or X unit tests that do not call out of process as a result they are super fast because they don't call out of process then there's component level integration tests these are the integration tests that you can run in the build process so if you're calling out through entity framework to sequel server database you can test that boom that's an integration test and notice that my great database is here and lost that over your applications generally use the database so for your build process you need to stand up a shell of your database so that you can run tests against your code to make sure that your application talks to the database and uses it a continuous integration build that doesn't create the database that the application owns and depends on is woefully incomplete so pit of success make sure that your data stores are in your build okay static code analysis is a proven quality control method and so whether it's Roslyn or any other static analysis tools every language has static analyzers make sure that that is in your build process don't leave that out okay and then we're going to publish test results we're going to package it up into various new get packages and publish it to Azure artifacts so let's dive into an example and this example we're using is asp.net core web application and a sequel database and with with any application it's important for all of the components to be built and deployed together if they reside in the same git repository they have the same version number and they are built and deployed together if you don't know why you would be an exception to this rule then you're not an exception this is the pit of success we build the solution we run automated test and package up our deployable components and here we are full platform as a service application as your app services as your sequel and so in this case we end up with four new Kias that are published to artifact because you see we have three components that are going to be running processes in our environment we have the web application we have an offline job of some sort and we have a statement server database and so we have the app service the web app will push our job into an azure function and will push our database into an azure sequel and also we have some acceptance tests some full system acceptance tests now remember back in our pre code design process we listed out our acceptance tests these are simple bullet points but then going into coding we create a full system test suite if it's a web application we're gonna use a lot of selenium to actually pull open a browser and click around and and test test our screens and so we want to package up the test suite that is the version number of this application so that we we tie that all together and then we are going to push those into Azure artifacts don't use the old build artifacts store if you're building new pipelines as your artifacts is where all of you or release candidate packages should go and and use that okay so build steps I want to show you what your continuous integration build generally gonna look like and this is coming from from one of the preview on preview Edition so we had to install on the hosted agents the SDK for three oh but that's released now this is using all platform as-a-service there is no virtual machine in the mix now for speed a lot of teams use a private agent so that they have a VM that they control for the builds and I like that approach and that's a good approach this approach uses a hundred percent hosted and so there is no server that you have to spin up therefore when you grab this template and when you do it this way you're gonna get up and running really really quickly so first thing we're gonna do we're going to use as your resource manager and tie it to our Azure subscription and actually create a sequel database just for the build process that they work on a throw away after this build is finished then we're going to then we're gonna run our build script which is a PowerShell build script the private build that runs locally is just simple PowerShell and just look in the book I give you a template for that build script it's not complicated but after that build runs which includes the MS build exe or the.net build those kinds of commands it's doing all the compilation it's running the in unit test suites or X unit and then we publish our test results and then we're gonna do a and it also packages up and we're going to do our new get push and then we call into Azure and say hey throw away my build database so that we clean up okay this is what our whole pipeline is going to look like in in Azure DevOps services so we're gonna have our continuous integration build tied to the git repository that automatically kicks off and then we automatically kick off the various stages and the the template will soon be converted to Hamel that just came out at the build conference those those things are being enhanced and that's getting better and better every day so gamma will be the future but most people are who've adopted this already are using the steps and so I'm showing you the steps which easily convert to gamble just for clarity and so we have TDD UAT and productions there are three types of environments three unique types of environments in your DevOps pipeline and you need at least one of each remember this is the pit of success this is the rule of thumb okay everybody knows production you can have one knee at least one and sometimes we have a different production environment for each customer so you can have multiple then we need a manual test environment we call this uit for user acceptance testing you can have multiple of those we find common manual test environments all over the place dev test queue a staging those are all manual environment you could have as many as you need and then there's the TDD environment it is the automation environment there's no humans allowed on this environment it is it is for full system test automation it is for running test suites that require a fully deployed environment in order to run and so functional selenium tests that are the execution of your acceptance test perfect for running in there so you see in our pipeline we have a hundred percent of our tests did pass after the TDD deployment let me show you what that looks like for when you configure it these are the things you need to put in it so the first thing that we do is we give the signal and send a message over to application insights that we are performing a release to this environment that is super important because I'll talk about Salemi tree after a while we tell application insights hey we're starting to deploy then one at a time we grab a deployable component that is a new gate package in Azure artifacts and we deploy it so we grab our database and then we then we use Azure resource manager to to create our database in a TDD environment again we're using infrastructure as code here the TDD environment does not exist we're creating it on demand we're using it and then we're throwing away so it's super cheap to do this and for feature branches you can have as many feature branches as you go and you can have a full deployment with a full system test run even before you do a pull request really powerful and then we're going to going down the list create the database schema and our database is ready to go then we're gonna grab them just truncating in here we're gonna grab our web application package create the azure app service do the deployment start the website then we execute the self health check that is important every time you do a deployment it could be as simple as a PowerShell invoke web request and you call out to some endpoint so that the application can say hey I'm here I'm started up all of my dependencies are reachable that that proves your configuration and I am ready to rock now now here comes the full system testing we download the package of our full system test then we push in the connection string to the database and the URL for where the web application is and then we use the visual studio test step to run our full system tests which is actually going to open up a browser on that VM that that is the hosted agent and is going to run all of our acceptance tests and then after this is all said and done like we have an azure resource group deployment that actually deletes the resource group and throws away this environment because we don't need it anymore all right let's dive into the what the full system testing looks like after it runs because this is really sweet this is really empowering I think a lot of you understand unit tests and a lot of you using integration tests but we find that UI tests or full system tests that are driven through the UI are not as often used and they are absolutely empowering and the perfect implementation of the acceptance test criteria which is a common part of scrum because a lot of teams I know are using scrum for project management and so this is the view of the this application has six of these full system tests that run and a powerful thing is that we can actually do a screen capture of every single screen as the tests move through the application we can capture them and as your devops services happily just grabs all those attachments and makes them available on absolutely every deployment every stage every test run and so if we zoom in on what that screen looks like we can see that what we're showing here is the inside of the browser and it doesn't grab the title bar or the chrome of the browser but it just grabs that essentially the document the body of the screen that you're looking at and so it's typing in those text boxes it's it's clicking buttons and it's actually driving and recording what that screen looked like okay really powerful and really easy to do and the the free azure devops services project template that we have available online has literally this examples of this you can get up and running really quickly so let's look at how the different environments are arranged here's a principle never do anything in production for the first time everything that you do while deploying to production should have been done at least once and preferably multiple times in environments prior so that we can see all the things that we do in our in our TDD environment which no humans can use that because they try to get on and it's just gonna be the environments gonna be ripped out from under you so no humans allowed it's just to deploy and run some test Suites and then you eighty or whatever you choose to call your manual environment manual test environment that comes next but we're going to load test data on demand in TDD we're going to recreate the environment recreate the database running acceptance test we're going to that completely unattended all the time we're gonna destroy the environment now for our manual test manual test environments we don't do as much and you can see that on the chart now let's talk about telemetry every one of these runtime components needs to be monitored now as your monitor wraps up some services that really make this easy and so every one of these can be attached to application insights and if your application has things that run on VMs log analytics is your answer to get absolutely everything that doesn't have native application insights integration but let me give you the principles for falling into the pit of success with telemetry everybody in those logs log Fernet just flat file log files trace but there's two others that you need to make sure your application is emitting metrics and events you probably have applications that create a data warehouse or a star schema or some type of queryable denormalized data store that analytical reports can be can be run off of for your for your users well emitting metrics and events gives you that same type of capability where events are akin to dimensions in a star schema and metrics are akin to facts in a star schema and that way you can you can select by events group by events and then do average and some and min max over your metrics and you are creating a data warehouse of what your application is doing and that's absolutely empowering and then you need to take all of this information and make sure it's available in a centralized store now application insights gives that for us and this is on the screen just a really quick snippet of some of the free things that application insights gives you just by grabbing the nougat packages now if you go to the azure portal you can also see our deployment markers when we said hey as your application insights I'm deploying that little arrow is the deployment marker and if something goes haywire right after that we can click on that and in application insights in the azure portal we can see all the information about that deployment and link right back to it and where it came from and so that's to tie it all together now this is the seven key elements of a DevOps environment pre-code design process the version control structure the build full system testing user experience testing the production release and then telemetry observation you need all seven don't stay frustrated by a slow and manual process take pride in delivering to customers faster automate your DevOps pipeline so that you can ship software quickly and also preserved your weekends okay now remember send me an email so I can send you a free copy of my book that walks you through in detail everything you need to set up and of course it refers to documentation because the azure devops services has great documentation and I didn't want to regurgitate documentation here on this 30-minute talk I wanted to give you the guidance to fall into the pit of success and if you if you haven't if you're struggling to get started yes just do it that way and as you read the book use the included as your devops services project template that's linked here bitly on the top right bitly slash dotnet devops project and literally get up and running within a day feel free to copy literally copy that completely working project along with the infrastructure is code and azure air and templates just attach it to your Azure subscription you'll be up and running fast and I do a lot of DevOps education webinars and and the next one I'm doing is how to educate how to organize your git repository to make DevOps automation easier and and also another resource is the Azure DevOps podcast but if you email jeffrey at clear - measure com I'll send you that free book and I'll also post the slides and tweet those out at jeffrey palermo and i'll be happy to take any questions that there are all right thanks Jeffy that was fantastic we don't I don't know that we really have many questions so just take a couple of minutes and what's what do you best what are you recommendations for how people get started doing this I think you know people have seen a lot of DevOps they definitely want to do this I'm gonna dive in you know I've got an hour here an hour there how do i how do I get started and get up to speed well if the adjective op services is completely new then you need to get the skeleton working first because you're gonna have applications and everybody has tons of applications and if you try to try to start automating one of your applications first you're just going to really struggle with the complexity of your application and the new tool so I recommend going online creating the new org and then there's downloading or creating a skeleton a shell of an application that doesn't actually do anything that way you can get the automation down without being distracted by the features and so but there's a lot of concepts there and so if the the shell of the application that the community the community template ought to talk about that's the jump start and but either way get a shell of an application create the private build the continuous integration build throw in your unit test suite integration test suite and a full system test suite that uses selenium make sure you can have one function and it calls a nothing query to a database and then three deployments a test automation environment a manual test environment and then your production environment and so if you can get just the skeleton of your pipeline with a you know file new at file new project type shell of an application and visual studio solution then you can get all the pieces accounted for you can see how all fits together see how it flows and then you can start adapting one of your applications to the pipeline and you know sidestep a lot of confusion a lot of complexity because you will have a working pipeline for an application that doesn't do anything but you'll you'll have that full working pipelining you can adapt it to seam coins that have a hundred a hundred plus applications with no automation and it's a mountain of effort but that's a way to get started perfect cool that's a nice well thank you so much Jeffrey for taking the time to share your talent with us we're gonna get going here we're gonna get J power talking about static content thank you so much Jeff awesome

Monday, 21 October 2024

Architecting NET Microservices in a Docker Ecosystem

all right everybody how's it going down Netcom 2019 we got Hamidah here to taco talk to us about micro service that net micro services and docker take it away Hamidah hello hello everybody hello my name is hameed are very I am Microsoft MVP in developer technologies and today I will present a session about architecting mile marker services in dotnet car and using the Kuroko system so I will share my screen to start not shown up yet up there it is so during this session we learned how to work with the microservice architecture pattern and docker containers using the.net car 3 platform to build the distributed system we will start by talking about the transition from monolithic architecture to an architecture that consists out of small and independent services that you can scale and dependently on your difference software cycle from development tests to production environments and before talking about micro services we need to understand the difference between traditional application approach and micro services application approach any application is built as a collection of services and can be the development tested version and deployed and skillitz for monolithic application scales is done by cloning the app on multiple server here which pieces server we means VM several machines but for micro services scale is done by deploying each server and dependently with multiple instance across servers or VN we will start by presented monolithic up a predication approach based it on a live application here we have the presentation value that presents for us do all user interface it can be web mobile or desktop application the service flier is responsible for handling HTTP requests and they're responding with in either HTML or John or XML for with api's for example the business logic is here with the treatment though we can say the processor of our application the database access layer is the data access object responsible for access to the database despite having illogical modular architecture the application inspect packages and deployed as a monolith monolithic application arm all of single complete package having all the related needed components and service encapsulated on one package but for micro services the idea it's really some it can't set to sleep to split your application into a set of smaller enter connected services instead of building a single monolithic application and each maker servicer is a small application that has that has its own eggs egg on architecture consisting of business logic along with various adapter so microservices can expose or Esper for example for the case of api air pc or massage basic api and most services consume and he is provided by other services and micro servers are deployed and dependently with their own database their service saw the underline here as you can see we have many technologies and many patterns but if you won't use micro service we have mam more and more patterns like bounded context that we know before I use it like domain driven design secure ace and domain even the main events mediator we have many many patterns that we still can use a few micro services and we have many technologies today we will present docker containers for example and we talked a little bit about Orchestrator developer consider micro service as architecture style that promotes the development of complex applications as a suite of small services based on business capability and multiple and diffident subsystem in the form of anonymous services and the following pictures show the micro services architectural style here we can find the various components that we can find in a micro service architecture for example we start from the clients that communicate with API get way that is sure that serve as a client and ponds or we've talked about that after and we have the identity provider that managed the identity information it's related about authentication within a distributed network and the API gateway is communicated our services here we have poor for example services and we we find service discovery management's that static continent it's like page and CDN here I will talk about the importance of API gateway in micro services it's sit between the client and services it act as a reverse proxy routing requests from the client to the services it may also perform various cross-cutting tasks such as authentication we find SSL offloading SSL termination rate limiting etc if you don't deploy gateway the client must send request directly to the front end services it creates two coupling between the client and the back ends and the client needs to know how do individual services are decomposed that makes it harder to maintain the client and also harder to refactor the services now we need to deploy our services we consider that we created a each service so we build our our micro service architecture and to do that we will use for example docker container so what's local doaker its technology that allow the creation and use of container and local developer and this is admin to so easy deploy that application is sandbox to run on the host operating system to start our demo we need to have a Windows 10 professional and enterprise because we can't understand the docker desktop for windows in Windows 10 home we need Visual Studio 2019 but 2017 it support docker and docker for a desktop for Windows and docker tools now we will try to start creating a speed net car 3 solution but before we will try to architecture I will go now to the demo here I have an old solution created from four years ago this old solution I base it on on Web API create by with API the old the old way of with API as you can see here we have the service line it includes many controllers I had many controls to manage my application here and we have the business part here it's divided by application and domain we have the oppressed actually this is the database it's a layered application and I live the web parts it's it's a web angularjs inside in dc4 it's all the application as I said and I would like to react at a to do micro service architecture here and to start here I created a blank project here it's a blank project and ready created some Web API for my AP is but we will do that again now so here in Visual Studio 2013 I have a blank solution and I will add a project here and we'll choose is P dot net web application for example for me I choose here I have configuration service user accounts I go back to the old one I will choose for example here contacts API I would like that this the control will be separate services as API sorry say here contacts service for example and here create and here we have any speed net car 3 but already launched it from today's we will use this and here as you can see in advance its parts we we are requested to to say enabled docker support here requires dhoka dhoka the desktop here i have the application the docker application desktop as you can see here it's docker is already running and here we can choose between Windows and Linux for me I will keep windows because I am in I'm in Windows container here but if we change near pullings we need to switch to a Linux container in docker desktop here I will choose API API and we click on create here and here as you can see our docker file is already created and if you want to check yeah absolutely so we have on what we need to lunch token and here we can launch docker here you click on docker to be able to see to to deploy my web api on docker might will be in my machine locally in doha desktop so here the rate around okay but because it's not there we need to do to say that so do set up projects to be primarily one so first it was on the web but here we can launch docker and again so we were waiting just to see so when you try to check out the image in docker waiting to hear we can comment line we say docker images and here we have our complexes the our image this is the image on docker and we can create more than one image for the same web api basis it's really important than one of advantage of docker containers and micro-services and we can do the same thing for whip-it for for the presentation layer for example if you want to create if you want to create for example here I want to create empty see your project and we can do the same thing here and you can say for example here this is webparts microservice for example create and we can choose NV severe and we check naval check naval doctor support but you can't create and you can have the same thing here the for docker file will be created we set it as start projects and we can mash it on docker it will be a web application but we know T if we check again token image we will find this project yes this one and we try to check here so we go back to our presentation here so in previous movie movie are we started from an old application that include many many layers many services to in a service layer and we created a new solution blank solution and we added four we are able to add more and then API and the web application and this is one to start my our micro services and we deploy this in a local but in a we need to deploy this in within the clouds and in Asia we talked about cloud we talked about eager containers in angel here we have the alpha services that we know to deploy many many application the service fabric is it's an important container and Orchestrator to kubernetes - it's another Orchestrator and container and we have a container instance and back in our case we will try to use the registry container registry in asia to deploy it's easy from from the vision so we go back to our application just to show you how we can do that so start from here we can choose web or any web api application here we choose publish and as you can see here we find all all publish target but that we can use it we have the opt services the container registry the containers s3 is dedicated to deploy our images to push them into Asia and we can create a new one here from from visual studio it will be created in our reporter or we can select from exist think a jerk on the container if we already have the containing created in Asia portal we can add it and we can use the docker in the curve it's dedicated it's an open source litigated to docker or we can use a custom server that configure it in in the hostel so here we click create we create our profile and we give Venice prefix because here you it creates a name and our subscription we define research group and we click and on three days for here so it's deploying step it takes few times because it's deploying into Asia to create our container container resistant include or company that you need it can be grouped using your research group here and it's here when we leave to publish it will be published in our portal importer of leisure and we can after go through see ICD pipeline or create up services if it's it's a web application to show it or if we include throughout the program for IP I to display our API what you have so you go back to our our invitation here sorry we talked when we talk about contains docker we need to talk about Orchestrator in Asia or here for example here we have two known Orchestrator in Asia but the youth is different so if we use the kubernetes with the with docker or service public you need to know to choose it depend from your micro service it's really based on container only or it's based on plain process state of services and you find the mullennix and the windows it's the same it's not a problem and as now here are Cuba natives it's open source for automation deployment scaling and operating of application and we can we can pay in a jeweler for VMs in cluster and you key to create to have this place pay-as-you-go here and it's is container after structure and the same for syllabus fabrics so this session was an overview about micro services with docker micro services allow to in to evolve deploy and scale part of application and dependently but we can't use this architecture for small application because it's dedicated to distributed the software challenge and a challenge and the for scalable and long-term evolving application thank you if you have any questions please and you can send your questions to my Twitter and you can found more detailed at the source code in my kit about this this example and other example hey I mean thank you so much we've been looking on the chat and we don't see any questions so well thank you for sharing your Twitter so again if anybody has any questions go ahead and use Twitter to ask Amita those questions the github repo is right there so we can share that thank you so much that's great and thank you so much for taking the time to share your knowledge and your experience with us we really appreciate that it's you know people like you is what makes our community strong and it makes us better all right so or yet awesome so all right everybody we are going to be going into our next speaker and let me check that here we have Santosh talking about cosmos DB for asp.net so we'll get that going here we'll be right back

ABP Open source web application framework for ASP NET Core 3 0

right I shared my screen yes you do have a chair give me one second okay all right everybody we are live now we got Holly on here talking about the ABP f-- framework open source so let's let's take it away hey leo oh there you go okay hi everybody today I will introduce an open-source project the ABP framework probably some of you have already heard about it or using it in your applications in any way I believe that this talk will be usable to understand the need for such a project and what ABP is offering with its next version I am a Libra whom Kalkan a Software Architect and co-founder of palo soft i am the lead developer behind the ABP framework ABP is an open source web application framework for the latest asp.net Corie 3.0 ABP provides a complete architecture and the strong infrastructure to create modern web applications it follows best practices and conventions to provide a solid development experience first we should understand why we need to such a project and why we have created it if you are building your applications on top of the plain asp.net core you mostly find you on repeating yourself to build a similar infrastructure again and again you need to decide on an architecture say a layered architecture based on domain driven design or clean architecture principles you will write some action filters or interceptors to automate cross-cutting concerns like authorization validation exception handling database transaction management audit logging caching and so on you definitely don't want to repeat these logics in every source method you need to create base classes abstractions integrations extension methods how purrs library workers to simplify your application code you will deal with all this infrastructure and much more stuff again and again for every project for that reason big enterprises are building their internal application frameworks on top of asp.net core but it's hard to build maintain and document it this is why most of such works finally failed or no one knows how it works because of the missing documentation beside the big enterprises most of the software development companies don't have such development resources to build the infrastructure themselves we have created the ABP framework to address this problem and provide a full stick application model and infrastructure for everyone it's hard and time-consuming to select the right tools and we'll the clean architecture while starting a new application as a Software Architect you need to close the followed software trends tools principles and patterns you have to believe the fundamental solution structure and train your team to align them to follow the same principles and coding styles to create a consistent source code when you use a VP fundamentals of the architecture will be already decided and implemented for you a VP solution model is based on the domain driven design principles and patterns DDD offers four fundamental layers domain application presentation and infrastructure a VP startup templates implement this layering by providing a multi project solution structure a b.p framework provides infrastructure for your application to implement TDD easier and finally a VP documentation supports you to truly implement TDD in your source code a beefy framework is designed to create fully modular applications it provides infrastructure to distribute your entity's services api's UI components and page into isolated modules in the development time and bring them together to act as a single application on runtime we already created tribute modules like account management Identity Management and talent management those are ready ready to use in your application documentation and guides help you in building your own modules micro-service is another training approach to create scalable systems both in development time and on run time NIV ABP has been designed at micro services in mind it provides infrastructure to implement common micro service communication patterns easily it's integrated to the island server for for authentication pre-built application modules are designed so that they can be deployed to separate servers or containers with date they're dedicated databases as independent micro services we have also created a complete micro service solution sample and documented it to be a reference model you can check it on the website multi-tenancy is a fundamental architecture to create software as a service solutions ABP framework and modules provide a complete multi-tenant infrastructure tenon determination automatic data is relation dynamic database selection channel pays the setting system and much more are already implemented by the framework it not only supports to develop multi-tenant applications but also makes your codebase mostly unaware of to multi-tenancy pre-built tenant management module provides the application logic and basic UI to manage and create your tenants ABP framework is not a new project actually it's the successor of the asp.net boilerplate framework asp.net boilerplate has been around for six years it has been more than 7,000 stars on github 1.5 million downloads on new yet it has been actively used by tens of thousands of developers around the world we have been working on the next generation of the asp.net boilerplate framework for a few years and it's finally here the first stable version will be released in a few weeks based on the asp.net core 3 it's a complete rewrite so we don't use the log name anymore it's the ABP framework and the new website is ABP dot io it's now more modular and micro-service compatible supports relational and on relational databases provides more options to create composable and distributed systems in addition to simple monolithic web applications we are very excited to introduce it in the same event Microsoft launches asp.net Court 3 now I want to show you how to create a new project based on the ABP framework and make it running in a few seconds first I'm entering the ABP our website in the getting started page we have two options to create a new project via a BP command-line interface CLI or we can directly download from the website once we enter a project name then we can select application template or module template to create a reusable module I select the application template we have two options as the UI framework for now MVC and angular and we have now two database providers and two framework or supports most of the relational databases at MongoDB and now we can create a new project but in this demo I will create the project via CLI ABP new project name its grace the complete solution in a few seconds yeah the solution has been created I am opening in the visual studio I have a preview one it has a mom it is a multi project solution consists of the source code and related unit tests it's layered based on domain living patterns and principles and layers it's also well documented on the website so you can easily understand how solution structure is design it when I run the application the solution template has is include some of the pre-built modules like tenant management and identity management when I run the solution yeah I see the account module I can enter the user name and password at the startup time place uses two modules as I said before identity management is used to create and manage roles then we can set permissions for each role that means we can allow to do something in the system for the human role also in the user side we can set rules for the for a user we can create a new user it also supports multi-tenancy out-of-the-box we can create tunnels and use multi-tenancy as well it's localized to a few language okay that's all the solution is stuff actually doesn't contain any user interface component or any functionality I have shown it uses nougat package for all the functionality related identity management talent management account login and register page okay let's continue now I want to highlight some features of the ABP framework as a brief the main goal of the AVP framework is to make you focus on your own bussiness code by handling repeating tasks by conventions it handles cross-cutting concerns and provide services you need let's see a typical application service class to understand how ABP can help you in this very simple code block AVP provides base classes for ddd elements in this example class inherits from the application service application service base class provides properties and methods commonly used in the application layer AVP automatically registered this class to dependency injection container as a transient service you can use the generic repositories to work with the database declaration authorizing tribute can be used to check permissions which are auto policies actually it is completely integrated into asp.net course authorization system and extends it unit org system automatically creates and managed database connection and transaction for you it rollbacks if your metal drops and exception otherwise it saves all changes to the database as a single transaction it works out of the box by convention it automatically validates the input and throws exception if it is invalid so you can safely work with the palette in put inside your method it automatically creates and saves audit logs for each method call so you can then get add attack tailored report to know which user called which method audit log system is very detailed detailed and configurable it can also save entity and property changes as well you never handle exceptions manually ABP handles all exceptions and send an appropriate result to the client ABP extant asp.net calls localization systems to make it more dynamic and extensible object mapper is used to make objects it has Auto mapper integration out-of-the-box and can be replaced by another mapper AVP also provides some other services usable in the application source in this way you only write the code related to your business without repeating yourself if your application service basically performs quadruped operations then you can also inherit from the root of service to get it fully implemented for you you can then override and customize any method you need once you create an application service you type collie want to expose it as an HTTP API by writing an API controller AVP can automatically create API controllers by convention based on your method names input and output types so most of the times you don't need to manually create API controllers arrange routes and HTTP methods okay you have created your HTTP API and or let the ABI a VP framework dynamically create it for you what about when you want to use the API from a client application AVP can dynamically create JavaScript and C sharp proxies you can use the client proxies to use the remote HTTP API just like calling a regular method in the client side you don't deal with authentication exception handling JSON serialization deserialization and point configuration and so on notice that it doesn't generate any code it all handles in the run time you don't have a large machine generated code that you don't understand what it does here to example code that uses the dynamic client proxies JavaScript code calls the method just like calling a JavaScript function c-sharp client injects the application service interface which is shared with the server the injected service is a dynamic proxy object which internally performs HTTP calls to the remote server then you can use any service method just like calling a local local method and you get the result if provided ABP provides a distributed event pots out-of-the-box publishing and even is pretty easy just injected I distributed even post service and use the publish method subscribing and consuming an event is also easy just implement our distributed even hunter interface and fill in the handle even method the rest of the communication and retry mechanisms are handled by the ABP framework it's integrated to RabbitMQ as a first implementation we will add more options in the feature a BP is framework UI framework agnostic you can use different UI frameworks like asp.net MVC angular react whooshes or blazer it currently has a missing and angular startup templates more will become by time in the section I will show some of the ABP features for a missile age razor face UI option in a modular application you typically want to em and make your UI components like wheels or javascript file CSS files and image into the LS or may get packets you may want to create application independent reusable modules with their own entities services API and UI elements ABP provides a virtual file system that acts as a single file system but internally can read contacts from various resources like physical files embedded files or even from dynamic files created created on runtime this is an essential feature when you want to work with files distributed into modules we have created tackle programmers for most of the bootstrap for components like buttons models cards tops and so on in the sample you see a button and the model the dialogue code writing using a BB tag helpers it produces native bootstrap code on runtime in this way you write less code to create bootstrap components in your views it makes possible to get the power of the intellisense when you want to directly work with the bootstrap code you are free to write native with dropped HTML which is cooperates nicely with the AVP toc helpers in addition to wrappers to bootstrap talk helpers we taught that creating a regular form requires a lot of boilerplate code to reduce the code we type we have created a VP input tag helper which generates most repeated localized and validated input controls it understands the input type and can work with the existing attributes to customize the HTML output time we thought why we should define an a VP input tag for each form element when we want to create a simple form what if we create a single tag helper that gets the model and generates the complete form for us ABP dynamic form tag helper does exactly this creates a complete form for you with a single line of code it gets all the information from your view model class handles validation and localization to the last feature I want to highlight in this top is the bundling and minification system provided by the ABP framework you may think that why we need to create another bonding and unification system while we have a speed-up net course bundle and minifiers or gulp or grunt GS the main reason is that none of them are modular none of them can read CSS files inside the dll none of them can this arc the bundle content on the fly and actually none of them are easy use which bundling and minification system can be simpler than this code it's just a tack helper directly used in your page or view it adds given files individually to the page in development time bundles and minifides on runtime it works with the virtual file system out of the box so you can add an embedded or dynamic resource into your bundle it can automatically include dependencies to the bundle that means if you included the library to the bundle that depends on jQuery it automatically includes jQuery to the bundle if jQuery was not already added to the current page before that means it rearranged bundles on-the-fly can't determine the bundle content conditionally it allows you to create named bundles and reuse it in an application or even across multiple applications it has many more features that are needed to create modular web applications check you can check its documentation so I highlighted some AVP features that are easy to explain in such a short talk then there are me many built-in features and extensibility points waiting for you to disk or visit a BPO and follow tutorials to learn it deeply as the last word ABP doesn't try to reinvent the well instead it tries to fill the gap between the plain asp.net core and real-world enterprise application the not scenarios it helps you to code in best practices to build maintainable software solutions okay that's all for my talk if you have any questions I'm glad to answer them yeah somebody was that's a great great story the Helena somebody was asking Ritesh um Tamara carcasses are they any real use of a BP at the moment yes actually a BP is the next generation of the asp.net boilerplate framework so it's widely used by thousands of developers for the ABP IO the next generation it's in the preview know we have just upgraded to asp.net code 3 yesterday immediately upgrade nicest asp.net core so we are using it in production but we don't call it 1.0 for now because it has some locking documentation and we we want to test more so some of the custom some of the developers are using the NIV a BPO in their production and one but we don't such as for a few weeks more a few weeks more Dom we will release the first stable version for the BPO awesome awesome yeah people been saying great presentation there's a comment here from Oz Bob Western Australia I've been reading a VP documentation all did a support slash buckle integration and open API and swagger UI Wow definitely gonna give it a go so yeah your you did a great job for sending all the features of your framework that's awesome so I want to thank you for taking the time talking about it and showcasing it I know everybody were excited so we're gonna hang up here folks and we're gonna get Martin who's gonna talk about indexing nougat with a sure functions so again Ellie oh thank you so much thank you very much and thank you to everybody listening me okay oh so much have a good one I will be back in a bit folks

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...