logo

NJP

Now Experience Component Building - Live Coding Happy Hour for 2020-09-25

Import · Sep 26, 2020 · video

[Music] so [Music] one hello and welcome to live code happy hour on september 25th 2020. is that the right date it is yes all right i have got it plagued into the in a window somewhere i don't i don't know where it's gonna really bother me well welcome welcome everyone uh let's jump right into introductions brad hey everybody my name is brad tilton and i'm a developer advocate with the developer program here at servicenow i've been doing servicenow development for about the last 12 years and been an employee for the last four and have been working solely with developers in the developer program since the beginning of this year beginning-ish awesome thank you brad and i'm andrew barnes developer advocate at servicenow and i did figure out uh you know well i just closed all of chrome and some some window was holding on to it from some other time and i specialize in uh integrations custom applications and large-scale uh development deployments and i've been at servicenow for two years and doing uh development on the platform for five see i don't know i think you're at six i think i'm at six [Laughter] you think i'd remember this week every week or that i'd even get into a routine and say the same thing over and over i don't you'd be wrong so what did what did you bring to drink today brad all right i'm trying something new it's a firestone nitro merlin milk stout so we'll see it was uh 59 this morning which is really cold for us this is something so interesting going on with my audio today so yeah i got a stout we're gonna we're gonna do all the things uh let us switch that all right can i hear you brad can you hear me i introduced my beer it is a uh nitrogen now i can hear brad and i can point out mine so uh this is the last the last beer that i have in the house uh which is from uh one of my breweries i really like uh but it's not one of my favorites from them it's still good it's still better than the mystery beer that i'm not even counting as a having a beer it's a sour blackberry raspberry by edmonds host we are going to get everything together today i swear um brad what are we talking about today yeah today is all about now experience components uh so we are going to uh we're gonna work on a component that i already uh scaffolded and and did a few things on to save us a little bit of time on the show uh so we're gonna finish out that component uh use some of the new uh we're gonna use an input uh component which is one of the new ones in paris and then we'll deploy it to an instance and use it on a landing page hopefully so that's the goal is to get our component communicating with an instance and then actually deploy it to an instance all in the next i guess 50ish minutes nice um so before we drop into that um we have done some now experience um work before uh previously uh throughout this year so far and we've built some components that now experience is the new design system that we're using at servicenow and it leverages an external component [Music] build process that you do outside the platform we're going to highlight a little bit of that today i i'm assuming one thing to note if you are on orlando you will need the orlando version of that and if you are on paris you need the paris version of that um they are not cross compatible at this time so just just note that that's a thing that you'll have to deal with uh for now we hope that's not the case forever but that's what it is today um and coming up uh is creatorcon and hacktoberfest i'm super excited about both of those things uh so october 27th is going to be creatorcon and we are going to be highlighting some of the things that you might have missed from knowledge 20 as well as there's some new content that will be available and brad and i will be you know very very highly involved as well as some of our developer mvps are contributing some content for uh the creator con that's coming up next month um and during the month of october we're also going to be doing hacktoberfest i'm so excited i need my new shirt uh i gotta i gotta get my hacktoberfest shirt you know i gotta get a new one i don't know what the design is this year but i need the new one got i gotta get the new hacktoberfest shirt uh so i just released a blog on that yesterday it will officially and they open registration at oktoberfest.com just yesterday and so you can go there and get registered you'll need a github account as well as registering at hacktoberfest.com and you can read a lot more details about it on the developer site blog developer.servicenow.com it is the top post right now and it will be the featured post all throughout october so get all the details there we will be focusing on uh spokes uh so enhancing some existing spokes and then the other thing we'll be doing is what brad components componentoberfest that's what i want to call it and so we will be doing some more component work in october uh as well um and uh the one we're working on today may actually turn into a repo that we contribute to and have others uh able to contribute to so one of the keys with hacktoberfest is you have to submit at least four non-spam uh pull requests to a public repo in github so it's not a really high bar uh so you know if you're watching the show you can do it um and we've got the tools and information for you to do that on the blog and that is definitely enough head talking let's switch over to your desktop share and get building all right let me share my screen here this one all right you guys should be able to see this hacktoberfest 2020 blog post uh just uh if you need more details than what andrew provided they are on this blog post uh which uh you can get to by scrolling down a little bit but we'll pin it up in the future posts here uh in uh here shortly uh one of the things with hacktoberfest is if you're not sure how to even submit a pull request i think we're going to go through the process of doing that on a future live code happy hour during that sounds like a thing that i'll do yes so i'm i'm pretty sure we're going to end up doing that so don't don't don't fret we're going to get there all right so today we are going to we're going to do some work in artifact manager um so just uh just to we've done a lot of things in artifact manager uh on this show uh but just to uh kind of re rehash that artifact manager uh is uh the system that we use to manage all of our content across the developer program so andrew myself uh chuck uh we manage you know blogs and live coding happy hours and youtubes and the breakpoint podcast all get artifacts and artifact manager and we have a lot of automation behind the scenes for different things like all of our youtube posting for this show is all automatic automated through artifact manager and one of the things we do is we look at all the artifacts uh on a regular basis and you know talk about you know what is what do the next two weeks look like uh and so that's uh this artifact manager landing page here uh helps us uh or will help us do this once we deploy it uh but uh we'll have uh you know we look through everything on the uh on the road map and then we move dates around and assign things and things like that so what we want to do today is structured [Laughter] like we almost maybe maybe it's not as structured as that um but what do we what i want to do today is i'd like to add uh some i want to add a component maybe over here or somewhere on this page where i can quickly create an artifact without having to leave this page so i think our bare minimum mvp has an input field with the name of the artifact and a submit button to create the artifact and then i can click into it and do other things and eventually that probably has a couple other fields on it but for today that's that's what i want and then i want to be able to deploy it to this page in the instance okay and so uh we've already got a you want to show what that sort of looks like with the quick view creation one yes so we have just so people can visualize sort of roughly where we're going yeah we have this quick ad which right now this is if i if we're on an artifact manager call and we want to add something we go in and just quick add an artifact so this is a record producer where we tell it you know what kind of artifact are you uh what do you want to call it and then any explanation so eventually i think we'll want to get closer to this i've scheduled publish or planned publish date as another field that would be helpful to have on the front end but for today we're just worrying about this one uh what we want to call it oh and not even the type oh come on we gotta have this i don't i don't know today we're not gonna worry about the type that's a that's a tomorrow trouble that's i added this artifacts to triage thing in here so uh it shows things without types so we oh we're going to create a problem so we can solve it i like it [Laughter] all right so before we get into the component i want to highlight a couple of things here um so there is uh there is a ccw 2905 is a creatorcon workshop from the last creator con and i think it is the single best piece of enablement content that we have around now experience right now building components anyway and i probably go back to this guidebook just about every component i work on just to look at something from the guidebook so andrew along with ben kennedy who was on a past live code happy hour uh built this lab for knowledge and uh it is very good it's hilariously i do the same brad yeah so when i'm working on a component i come back to here too because it's all aggregated together for me in one spot and i i know where to find it here because yeah and there's some really nice stuff in here like um you know there is there is a lot of extra things in here uh like this is why you do this or you know this is this is uh something from es6 that you may not be familiar with so there's some good stuff in here the other good resource to call out is on our service now dev program github there is a now experience component examples and a repo here and there are some pretty good examples in here some of these are built kind of differently so you don't get the exact same you know example in use case on each of them so this is something to look through this is also something that i tend to come kind of look through uh you know these are all components that our our servicenow engineers have built uh so they're also helpful uh to to come look at all right now that we have been through all of that let's go ahead and look at our component here so let me move this into the right spot i think we just want to be down a little all right all right so i have done a little bit of pre-work here and what i have done is i have scaffolded our component here and then i also went in and separated some things out so this is one of the things that that creatorcon workshop yeah there's no way that anybody's going to be able to read that stuff yeah that's a great point let's zoom in um so you uh clearly have already scaffolded a component and uh not gotten too much further it looks like uh that's but you did break it up into some did is is there a change or is or did you do this yourself break it up into action handy no i did this myself okay uh so i i went in and broke it up uh basically i broke it up into uh actions uh the view and then the main component here um so i i did that uh in order there's a few reasons uh you know once you uh you know when once these components get kind of long it's hard to follow when it's all in one file and then it also makes error handling a little better once they get kind of long because you know if you know if your component throws an error not that i've ever built a component that's thrown in error it helps a little bit telling you you know which js file that error was in so somebody asks how come you don't have a servicenow theme for your bs code yeah i just uh i don't i don't have a servicenow theme for this uh i i have you have a theme when you use the ds code extension for doing servicenow development when i have the extension i have the uh the little green color all right so what i want to do first is let's just look at this component uh so this is uh where we're creating the custom element there's a couple of things that i want to call out here uh so we're calling this action handlers uh we're calling the action handlers file and then we are referencing it from the create custom element and then i also have a state that i have set as an and in initial state which if we go over and look at the view i am grabbing that message from the state and then i'm just showing that in the div text so this was this was part of a way for me to know after i had separated all of those things out that they actually work together and that's one thing that i i'm actually going to put in an enhancement for is i'd really like our scaffold to actually have a message in like when you first scaffold a pro uh project it creates a empty shell of a component that you can render and it renders a nice blank white screen and it really could render something like your component was scaffolded properly or something useful anything really so uh yeah but when you're doing it yourself in your uh default created uh index.js file you can uh just put in uh the main divs there any text and and then it will render but uh that's just something that i always do when i'm doing it so i suspect others will and maybe we can actually get it to do that all the time that would be great um so cool so i assume that then that means that you've broken it up and tested it and it works it does but we should probably go ahead and just test that it still works um so i'm going to do now cli develop and then the dash dash o will open it in a tab for me so i don't which is pretty handy-dandy and click uh so it's going to run so what we're going to do after this is we're going to have to install um the there we go let's build the component hey let's build the component it looks so good um all right victory was had everybody can go home now i'm gonna take it i totally missed the beer you were drinking today and it looks really good what was it it's a firestone nitro merlin milk stout oh man that looks great um it is pretty good i had a good real hard pour nobody got to see that but okay all right let's build the component i can take instructions it's telling me let's build it let's go let's build a component so we are going to use um we're going to use goodness we're going to the developer site that's one of my favorite sites of components here uh i think that should be big enough to read still yeah it's i think it's big enough all right so in paris uh you can now see that there's this release switcher up here uh where you have paris and we got uh some more components in paris and actually wrote a blog was it wednesday it seems longer ago than that but i think it was published on wednesday uh that the published dates are not always this is just the developer site somebody asked about the uh so if you go to the developer site developer.servicenow.com and then click into reference and then components that's where we are here uh and so you'll get all of the new ones one of the new ones that we're going to use is the input component and you can so this is a you know this is just an input component but it has a lot of extra stuff on it so you've got the label here there are some behind the scenes things that happen and then if we scroll down oh if we go into usage it'll tell us you know we've got all sorts of things we can add to it there's some messaging that we can add to it so it's a it's a pretty nice component where the other thing that it's going to do is automatically fire some actions along with it that we're going to be able to then uh consume those things with are they uh detailed they are detailed in the api page and if you haven't clicked through uh these component pages there's a ton of info and i was honestly shocked the first time i went into these pages especially the usage section uh because yeah so the api has a lot of stuff in here but some of the usage uh is uh is pretty good in that there's a lot of um if we get down here uh there's a lot of small amount of usage information there yeah like hey we don't think you should use a placeholder we think you should use the label or don't use the placeholder as the label use the label as the label and the placeholder for what you want the value to be so there's just a lot of guidelines in in here that is probably atypical of our documentation i'll just say it uh you know the the components have a lot of uh a lot more like here's your good practices for actually using the stuff which is great and all of this stuff i have a little more insight than i used to on this uh all of this stuff is uh maintained very lovingly and caringly uh by some fantastic people so uh there's a lot of work that goes into making this page cool so uh you're gonna go install i'm gonna install it so you're gonna cancel your develop and install that uh package all right so once it installs uh well i guess we can do that now uh so we're gonna say uh i'm we're gonna look at uh where do we do this already so you're gonna import it's just import import when i think uh because it's still installing it's not gonna auto complete for me but i know what it is because i copied it yeah copy and paste all right so now we have this uh servicenow input and so i have it in here i'm gonna save we've got it installed but in order to leverage it yeah if you go back to this component playground here you can get the code for how to use it and you can even configure it with this configuration tool on the side and it if you can see down near the bottom it's actually adjusting that that code box with what you have adjusted in the properties on the side there so when you toggle things like required or optional or disabled or things those are added to that code box and allows for you to just copy it that and then dump it right into your component building so like the helper content here it's uh this is going to be the title of your artifact and you can see that it's giving me the helper content and now i have this helper content so this looks good to me i we don't need anything all that crazy so i'm going to copy the code for it and we're going to go back and i'm going to leave my message in there um but i'm gonna put it in a paragraph tag there all right um can i do this to make it easier to sure why not i don't think i have to pass any of this stuff uh helper content somebody asked uh if the helper content is what the screen reader should see now the helper content is actually a little pop-up so if i type in some helper content you get the icon now and if i click on it you get the helper content here the do we get i think the label is gonna screen reader should read the label yeah but we can once we render this we can look at the uh we can look at it right so we should have uh we should have this show up now so i'm gonna save and we'll run the develop again uh did we get there no we're not there yet we are still thinking oh it's still going it's still thinking wow hmm maybe my laptop is not like hey there we are all right so we have that if i click into this we have the artifact um if i take a look at it uh we have well that's the what is the in the input uh we've got the name it's the name with the screen reader i never remember um anyway it shows up all right so what we want now uh is we want uh we want to we're done right we've got an input field we have an input field and it rendered correctly so we're going to do a few things uh so we're going to need to install our button uh which i believe is going to it's going to be that's just now i'm pretty sure it's called now button oh no you canceled the thing again and then we'll put in now button and i'm going to kill our message here and so i'm assuming this button is for submitting yes it's going to be a submit button so let's come in here and take a look at the now bust on grab a button this button looks fine to me um and so this is especially on buttons i will highly encourage folks to use the usage page to understand uh how to uh leverage buttons properly in this case this is going to be a primary button because that is the primary action in our thing that's the default when you load this but it should not be the default for you to just use a button not all buttons should be primary so all right ours is going to be primary so i have grabbed that and we will put it there uh okay so i saved it and then i believe i'm we're also going to need to install the http effect so i'm just going to do that now that seems reasonable who where is it now http effect uh so let's look at the http effect that's under api reference i ui effect http oh yeah all right so well that is uh that is building uh we have our we have our view this is what we're going to want it to look like assuming that our our button loads um and right now we want to do a couple of things so one of the things that i want to do i took away the value here but we want to track the value of this field and so i'm gonna call this uh artifact title and then we're gonna grab it from the state i think this is going to work and then we're going to set an initial state for artifact title and we're just gonna make it nothing all right so we're going to save and then now um so what we've done is uh set the value in this input to this new this new state we've added and what we want to do is when somebody types into this field and then tabs out of it we want to use the action that this now input box is going to throw and and add that to the state i think so let's look at the api here and see what that is going to throw so if i come into components and we look at the input it's gonna say i have these three actions so if we get down there i've got this now impact input action so i think this is going to be every time you enter something into the field um this action is going to get dispatched then we have one where it's going to be invalid but i think what we want is this now input value set where it's going to dispatch this action when i tab out of the field basically and it's going to tell us that the value that it's giving us is the value of that field so i'm going to come in and paste this into my action handlers phil's over in the chat asking some deep depth questions and you know it's friday and i'm [Laughter] over here and so let's calm down phil yeah so thanks like questions excellent questions yeah they are really good questions i think there is a so you know we can we can embed components and there is definitely a way where you could just grab all of the fields from a form which is what workspace is doing and i think once we get you know once we get further in our releases there will be more components that do more and bigger stuff than these you know core foundational components that are in there now so i think my hope would be that you don't have to build a form all on your own in the future but that's that's what we're doing here all right so we have this now input value set um and what does this need to look at and so you got that from the api details page of the uh yes input this is one of the uh one of the three actions that the now input field throws is this now input value set so i just copied and pasted that but where uh we need to do something now i'm gonna have to go cheat and look at uh something that i did a while ago because i'm a good developer i never remember anything all right so before let me go see how i did it last time um so what i'm gonna have to do is [Music] i think i need to pass uh coeffects here [Music] and then we are going to use some more object destructuring and we want the value so this is we know that the values being passed in oh james is here jane james showed up watch out everybody oh he's right yeah good call james i feel james is like a safety blanket here i know i know he'll be able to fix us uh if something goes wrong so i just want to make sure that we get the uh we get this value uh let's call it field value yum yum all right did i save everything oh safety blanket and positive reinforcement from james i like it i already have a couple of these windows open so let's just develop hopefully we go a little faster this time ten percent so after we do this uh if we have gotten the correct value then we have to do something with the value so we're going to have to update the state with this value and then then we can say hey on the click of the button send the state over to our server all right did this work did not work huh not found oh no well that didn't work which i think i know why but if i say test nope all right field value undefined okay and something went wrong with our uh i i think i just have the syntax wrong here is it uh artifact title how do you have the syntax wrong i thought you could that looks right i thought you copied that what did i do value oh this is how the syntax is run there's no uh there's no quotes so there we go at least we don't have that in there and then does this work this still doesn't work okay so we know that it is firing something um go effects i guess we could just uh state do state yeah through state or go effects or both uh we probably need to do like a yeah chase some parts strings all right all right so field value art artifact title title is nothing uh let's build the component properties so you were expecting artifact title to have stuff in it and it doesn't so that's why it's oh you know what this is what this is what is wrong i need i don't want the state i want the action yeah so there's a payload for this action uh i want the action here and then we want the value from action. payload where are you console hey there it is hey look at you so i was looking in the state instead of the uh the action all right so now that uh it should be in the action state's important too but so we're gonna need this state um i think we need the state and update state or maybe just update state all right so we have the value here okay so let's leave the log statement and then we want to we want what do we call we call this artifact title so we want to update that okay and then we're going to do an update state with can i paste yeah with the artifact title and i think here we can say because i have the state well let's all right so let's let's do this so my i think this is gonna work so we're gonna also do the button here again ambitious i like it i know brad's getting warmed up it scares me a little bit uh so we've got the button here so let's get let's look at the button actions so there's only one so if if i get clicked i throw this action i do the thing that that makes sense i mean it seems about the only thing a button should do so let's pace it clear and then i think i could have done this at the beginning and then i'll have to do it twice but we're in the business of just making things work right now all right so okay now i have the action the state and what we want to do is we want to make sure that um our so new input value we want to make sure the state was updated when the buttons clicked okay yes so if i can get the right value here then i can send this value to the server okay so i don't have to do that send me to the server send me to the server all right so this is right that's our existing message and hey all right so send me to the server fairly promising for your your mvp there brad you now have a thing that is ready to be sent we have 14 minutes i don't know if we're gonna get this in the instance but hopefully we at least can use the http effect you just need to use h you just need to create a record with this one field populated i have faith in you so now you're going to go to the rest api explorer to the to the table api right for artifact manager and then you're going to simulate uh what you're about to do uh here right and you you can see uh how and what it needs uh so uh we're going to where's my oh i need to post it yeah we're gonna create one of these yeah artifact all right and then let's get started for short description uh what is this title title and then i just say create it from explorer all right and then we will send that and so this is creating a record table looks like it worked uh and it was the short description field we've just renamed it [Music] so i'm going to leave this like that so i can copy and paste some things okay and i am going to import the uh create http effect and it's here look at that and then on the button click i am going to oh you know what we're going to do it's going to steal it from action yeah i guess we could separate that are you just going to send it i was going to just send it but i think i should i think i should just i think i should dispatch a new action so our action's going to be uh create artifact okay and then uh let's look at here nope so i like to come back and this is it yep all right so we want you to copy that whole thing and change the game you'll be you'll be pretty close uh table we're going to say post tables yeah now we're sending it to the correct table and we're not going to send any fields or a query so we are gonna there's a data param i think is what we call it and then so i believe i believe for we're over here so if we look at the http effect reference uh yes the data data param is where i can send the body okay and that should be able to just be copied right from that uh yeah so we'll do the body from in here i think i can just say um i would call it something other than data just because i think oh we're gonna do it from inside the http effect call i think so let's go back and look at what does the dispatch do yeah so we're gonna dispatch the action and then we'll do it from in here okay and then oh instead of that we're going to call it data donate any of this stuff and then this is going to be [Music] that's going to be short description short underscore description and then this is going to be our value [Music] which is state artifact title yeah and you need to change your dispatch okay that looks and then i think you've got an extra right parentheses on line 18. nope that's for the end of dispatch it's fine oh yeah it's very possible that i have an extra parenthesis somewhere so then we're just going to do the artifact succeeded uh i guess i don't need we're just gonna console.log here okay success all right so we are saved you're you're running close to the wire i know uh so we think this might work there we go where is my render you are here oh did not create http effect is not defined uh oh i think i have to um but do i do that differently yes yes let's let's look at how it's done in this exercise uh oh yes i have to create i have to do this i know i'm moving i'm moving fast for everybody but you're fine i want to work i think you're fine so it's perfect we could just pause it right you can you can go back and slow it down if you need it's fine all right oh there's we're not getting errors anymore that's nice from the component action type is dispatched dispatch is not defined oh i think we need dispatch up here let's go back and look at our uh action types i think dispatch is an action type yeah oh it is oh so we need it from the codex okay it's a dispatch so where do we dispatch from here so we're not even using those but that's all right yeah and feels like meh you're not using them why are they there and then we're like because we might we're not here today i i what i should have done is to done the cofx once and so then we can just use its properties later on but i didn't so we saved and create it from component it doesn't matter it doesn't matter success success so the component thinks it works the component thinks it worked let's go to the instance and see if the instance look why don't we look here oh because it should be undefined should be untreated it should be but i'm not convinced that i created that there's probably a default uh there may be let's go all artifacts sort by created or updated you got updated you could have oh i do have updated sure i wish the default was e to a when you hey there's my misspelled component well oh type app that's the default should we deploy it to the instance i think we can maybe do it i mean just hitting deploy we'll do it so yeah let's do it all right we're deploying as long as you're you're off which you have to be in order to have done the post so now it's doing the build process um and getting it ready for the instance all right and now well that was some lovely green messages saying succeed let's go to the landing page just go to cisco and like see that it's there it is this one okay am quick add click it and then drill into that and just so you can show that the stuff is in there all right let me i want to add it to ui builder first oh then we can do that you get you're driving you get to do it the order you like it's not like i didn't change the window i didn't change i'm gonna ignore that one uh i didn't change its name but what if i put it here oh there it is i think uh i think that's all kinds of victory right there yeah so let's save and re-render our workspace man was getting a little iffy there brad all right let's say uh new from workspace oh and one of the things that uh we didn't do but we should do something where if we have success then it clears out this that does unreasonable so let's go back and look at artifact where are you all artifacts and it works hey nice should we click in and look at it are we i mean it's clearly in there yeah so it does uh when you um scaffold these uh components it does create you a scope based on the name that you choose uh so just something to be aware of um when you are choosing your name but yeah you'll see that it created four application files down there at the bottom yep if you don't see all of those one of the reasons like if you don't see it in ui builder and you come here and you see some of them that were pushed when you did your push and but you don't see four of them most likely what you have not um put in the uh the extra bits to make it render in ui builder because that's an extra step um done today it does it automatically now oh i did not i did not touch it yeah so if you we can go down and look is it uh this one yeah yeah so this is uh what you used to be able to have to come back in and add this but it automatically adds it now when it creates your component and that's why i had that my component label when we dragged it in ui builder so a good step would be to come in and change it because it's always going to create it with my component so you want to change this to something that whoever is using ui builder understands and knows what it does nice all right i think it's a good time to stop the screen share brad all right i will stop the screen share uh yes we were on the paris release uh from dirk so i'm on now cli uh 18. and then we were on a paris instance absolutely so that was a lot of fun brad thanks so much for uh getting us through that and yeah that's a great feature we need it uh now we just need to set the type that'll that'll be for uh that'll be for later uh but uh yeah i think with the name and the type that's all we really need for that quick add feature yeah and we'll be we'll be cooking with crisco with that new component and make that that workflow actually useful to us i'm getting i'm getting kind of excited that that uh workspace is actually getting a little useful um i had a few more things and uh i might actually like work there it'd be it'd be pretty great that's the goal right yeah is we actually want to work there i think we covered all the updates and things um it before we started the screen share uh so if you jumped in late uh you know our news and things are uh sort of earlier in the show than they normally are here at the end and anything else you want to share before we rate our drinks brad uh so we'll share the uh the links that i mentioned that workshop um our repo and then i'll put in a link to the reference components as well in the description of this but yeah hacktoberfest uh you know there's there's really no reason not to come in and make four pull requests and you get a t-shirt so i'm i mean it's uh it's worth doing uh so yeah participating hacktoberfest and uh you know yeah that'd be great so how was your beverage today was it as good as it looked i think it's a four to five based on appearance how was the how was the actual it looks good i i've been drinking so many barrel age stouts on the show previously that those are those are my favorites those are those are better than these so it's automatically a little less uh but it was a good it was a pretty solid stout i'll give i would give it a 4 2 5 based on our success factor today it's a little success i mean those barrel age doubts like it's hard to it's hard to carry those they're so good they're especially for you and me we really like those uh so my uh edmond zos this is uh definitely their weakest one i've had of theirs it's a 375 um but i'll roll it up to a four for today uh because we had success and i didn't think we'd actually get the hdp effect and everything working given uh where we were 15 minutes before the end so that was great and now we as brad said we will get those links into the description below um and please join us for hacktoberfest including uh you know if you've got an idea for something and you want us to uh you know come contribute uh put it put it in the comments in the blog um or you know reach out on one of the many ways you can reach us social media um or the the blog directly or community or however raise the smoke signal we'll get it yeah and we will uh we'll take this component and i i think we'll want to make this part of oktoberfest maybe i mean it's kind of specific to our artifact manager but if not we'll do something similar to it but more generic just so that you have something to reference if if this show was helpful thanks everybody and y'all have a most wonderful weekend and we'll see you next time bye-bye thanks guys

View original source

https://www.youtube.com/watch?v=ydtlrsFjwBA