logo

NJP

Dynamic recipient list for scheduled reports (Part 2) - Live Coding Happy Hour for 2020-04-10

Import · Apr 11, 2020 · video

hello and welcome to live coding happy hour on this wonderful April 10th 2020 it's me Wow [Laughter] Thank You Brad let us get right into introductions bread hello Brad Tilton I'm a developer advocate with the developer program at ServiceNow and I forgot to mute my iPad when I flipped the YouTube up and that's rough I've spent about I don't know 11 years developing on the platform and yeah I'm excited to be here today awesome Jared hey I'm Jared Montz I service now architect that works at finite partners and focuses on integrations security and all platform internals types of things awesome Thank You Jared I'm Andrew Barnes other developer advocate here at ServiceNow I've been on the platform for over five years do lots of interesting things with integrations and managing development cycles and custom applications and just excited to be here with you fine folks today and from the chat so feel free to interact with us on the chat let's go around and introduce our beverages of choice for today all right I've got a saint Arnold Springbok so it's st. Arnold's it's local Houston brewery and yeah nice a good beer and Jerry I'm a Colorado kombucha from rowdy bird made in bolder lines main lines main tumeric and pineapple kombucha and it's called rowdy rowdy mermaid is the brand nice nice that's a good that's a good brand name I like it and today I have got a big wave golden ale that is from the Cana Brewing Company I don't know where that is I don't think it's local to me one of the things I drink are local but I don't think this one is and that's what we got today so super excited to be here on this Friday I know folks out in the the world are getting a little stir-crazy in their homes and I know it impacts us on our team well we can't travel anywhere but we're we're work at home pros so we're a little used to this being a home thing Jarrod you you don't go into an office either right I'm I'm full-time remote unless I'm on-site at a client which as you'd imagine it's been pretty slow these days yeah I imagine that has been pretty slow these days so what are we gonna work on this week I think if I recall this is a follow-on to your dynamic reporting that we worked on in February I think it was the first show of January actually we were probably a couple months removed from that episode already and yes this is what you're gonna tell me it was March in like time had traveled you know slower but apparently it was January yeah I think we're a full three months off of the first episode and yeah we're coming back to the scene of the crime to clean up the code make it make the UI a little bit better and hopefully add in one or two extra features on top of that I love adding features and cleaning up code is useful and should be done it's not it's fun usually right yeah yeah future future technical debt episode might not have the excitement of adding new features probably probably get around to doing a little bit of here awesome so why don't we just recap a little bit before we drop into the chair on what we did the first time I know we I included a link in the description so you can go back and view that you know if you want the whole picture but the snapshot I think my memory is really shady was that that we were adding people to reports dynamically for for sending out so on like a scheduled report it would only send to the people that it was relevant to based off the data that was contained inside the report exactly right that way that it it is out of box the list of recipients to a scheduled report is static here either adding users or groups or email addresses to that list and so what I wanted to do and and we learn how to do in that previous episode was to kind of work around how would the outer box items worked run our own script that would walk from the scheduled report up to the report itself and look at and we where we left the last episode was a we hard-coded like the assigned to value or the assignment group manager value and also doing the testing correct yes and so we proofed the bet it would work but it was ugly it was all you know on a per report basis it was all not production-ready so you don't have turnover if a concept level exactly and we're gonna turn this into more like product level yeah something you could turn over to your business analysts or whoever's generating reports project managers make it intuitive make make it look like the rest of the platform hilariously taking something from a proof of concept to product level is like four times the effort [Laughter] it's working but now I have to make it work well right it's way less fun yeah but it's way more useful all right let's drop into the share and get rolling then all right let me know how that looks if I need to zoom in or anything I don't think a 1 or 2 zoom would be sad I think maybe at least one zoom ok going to 125 yeah a little bit there we go all right all right why don't we show it in action and then we'll dive into the script excellent so what we have here is a report just basic report all incidents by state we have it scheduled to run weekly we can click the execute Now button but at the end of the episode what we were looking at was and I did kind of recreate my browser tabs by reviewing the past video just a nice things about doing this right is yeah what did i do last time oh yeah I could just go look actually actually I actually yeah I just have the browser I haven't touched these browser taps in three months and it's just been sitting in this on line like this on my desktop but no what we do what we're doing here we were using x2 the explore tool kit and we were using the GX cute now command in lieu of our clicking the UI execute button okay this is faster it doesn't go into that async queue or anything like that it just just runs it so and for those that don't know if you're still out there in the wild and somehow your this but you don't know what Explorer is it's a share item so you can head over to share da service now calm but really it's developer dot service on comm and then you go to connect and then share to get to all of these great shared items and we might even talk more about share later yep I'm a fan of explore toolkit and a lot of those items that are available out on share so by clicking that if we look over at our outbound emails we see that we have a new one that was sent and the recipient list appears to be Fred ludie at example and Beth Angwin at tests so let's review our settings here those people weren't in the users though how did they get in there exactly so at the end of the last episode we got the logic to either append the dynamic users to be statically configured you sort of above completely replace these static users above or do an intersection only send it if that user appears in both the static list and the dynamic lists generated by the report I'm mostly a memory list machine but I know we spent quite a bit of time deciding on what those three things would be I remember I was going well how would we actually want it to be and those were the three that we settled on was the that you know just completely completely scripted replace those statics you know do the intersection or the additional atom together and so that that's I I don't did we actually make all three work we did not we ran out of time when we were working on the intersection so what what and that's the only bit of offline development that I've done since the previous episode I did I I wasn't familiar had never used an array intersection can I end in any of my past projects so I did look that up review some of the JavaScript available for that and I did like they say that in yeah copy and paste off of the internet without fully understanding what it does because I mind eV and and let's check it out so this this function I found appears to do what we wanted to do it works with strings I'm not sure how it will work with glide records or societies or whatever is we're working with above but I was thinking that that would be a good place to to close the loop on the previous episode and then jump into this one I'm fairly certain that the we've got some array or tails and ServiceNow instances I believe there's an intersect in there well I know we yeah instantiated the array Yuto up here drill into that script include let's see what functions are available to us here we could go look at the docs but we could also just go look at the functions and methods and see what's available and and see if we've got a guy sure it's very unique there's the DIF intersect even easier Jase I agree with you I still love the click through to it is wonderful it's it's magical like I want the next level which is will do methods for me as well but you know just getting to the correct script include it's good enough for most days all right so appears that we run this by putting our arrays in as arguments here yep so I should be pretty straightforward to to get and it returns the intersection as an array okay so down here instead of my line we can like I suppose we want to do users array group array and a dresser a and we no longer need now those aren't the same types of objects great true so hmm I don't know the intersect will intersect actually help us there with at this stage because if we're doing a true intersection are we going to say the users that we find in the report are we gonna check to see if they're in that group are we gonna say the groups we find we check against the groups and the users we find we check against the users I I think it is going to be a simple version like that all right because they're all going to be just societies behind the scenes we'll just kind of have a net intersected users intersected groups okay that might be a little weird because then I put a group in I would expect it to know like just as a user I would expect it when a one of the users in that group and that that group exists in here I would think that that I would want to keep them because I would probably put user groups here as my as my method and then I only want the people that are contained in those groups who had things when I choose intersection so we might have to do some more complicated math to unfurl the groups yeah into yeah I was I think you might want to grab all of the users from all of the groups combine them with your users get a unique list and then use that as your an intersect it against the yeah I know that's more complicated but that's the that's how I would expect it to work it as an administrator of this thing and so there was a question you know what's intersection in this case with what's that mean and it's when I have two groups of things and I want to find where those groups of things overlap so if I've got a list of users in Group one and a list of users in group two the intersection that is where I have the same user in both groups lists not groups all right so what are we drilling into here refresh our memory on who is actually in the assigned to fields omnious report okay so we have a sense of who the people are so that we know what what victory looks like when we press buttons right so you drilled in to see which users have notifications turned on yes I want to get tripped up on that again that's great so I'm I'm kind of on the fence on if it's worth digging into that particular feature or going into the user interface and getting rid of this line here where we are hard coding it into the assigned to field then making that and be a little bit more dynamic let's clean that part up and then if we have a little time we'll do the user group unfurling thing because that's a nice to have whereas this other thing is a need to have I concur yeah and so I'm gonna put that action back to append to static and we will save our code here and do one more one more test as a baseline to make sure that that works so this looks like we have some people from the dynamic portion and some people from the state aesthetic which is which is what we expected right yeah so when we looked at the report how did we tell which things we were expecting so this appears to have a few more people in the assigned to list and I don't remember I don't more specifically why they went on some of them so you check the notification is enabled but some of them may not have email addresses because because that's how some of these records go so so I'm looking at the over here on the right side to look like they all have email so who isn't in the list who isn't in the notification that we expected to be in there and let's just go take a look at one of them because there's Beth and bud and that's not over here right right right this and Beth so why isn't but in there is there some David so did we log out who our users were anywhere so that we could look to see what this was doing we did not we just have a simple while loop it lets either yeah we're not is this this would be an inline synchronous operation for this script running wouldn't it I'm asking can we debug or can we do we just throw it along I believe this execute now is not synchronous and don't believe it's a mess and neither is the Explorer Explorer all right so we just have to throw analog boom that's fine that's or analog because I'm curious if we made some logic mistake when we were doing something with the objects in the array we should we want to just log report get value assigned to right so just copy that from the line below and paste it up in there we should also log the that assigned unique I know I I have had issues in the past using array utils and not getting what I wanted to from it which is about as specific as I can be in wildly specific sort back created and come on throw in a source next time so we could sort on it script that it's alright so that is what just ran in the one run and that is how many entries twenty-five and how many were in the report these aren't unique so they're short but the injuries in the report should be it's true that many because that's what it's looping through this should be twenty five if we scroll up oh okay how many incidents are there yes yeah okay good that that part is good so now let's let's see what array the one we had to tell it to be unique let's see what we get after that so I underlined 26 actually let's before line 26 let's see what it is and then after line 26 let's see what it is so let's get the assigned array before nice and then do you like unique array after and then you can you can pass in another parameter for a source and we can make Andrew happy it will make me delighted that will make me very there we go look at that that's lovely beautiful Jase is about to give us the notification debugging which we we all love to do I I want to see if our code is suspect before I dive into the notification debugging so our expectation was how many users had how many unique users were there I think six in the report so I expect the array after to have six things in the array before to have 25 yes we're gonna do a length that sounds yeah that sounds good cuz that's all I care about at this stage is just how long it is and if they're six in the output afterwards then I suspect that it's a male notification issue and not our scripting all right 25 yeah saw twenty five and seven seven I I was guessing on the number of users in that report it looked like six but it could have been seven yeah so that was rehab I think it's yeah this tab is it seven yeah alright cool so now if we cared we'd go check out bud and see why he's not getting a thing but I don't think we care because we're not here to debug mail notifications yeah what's that but that wasn't there let's make it look pretty absolutely so switching gears to the UI and no longer a rate of bugging which which could be done offline I'm sure it's something fairly logical so at the end of the episode we were some options some other places on the platform where we had good looking items such as this for example all right like here we want to have something that we can pick instead of users directly out of the user table but something that we are still picking dynamic fields off of whatever table this report is going on so something dynamic based off of report got table where we are picking fields off of that record so the idea in the last episode was on a UI policy there's a relator list at the bottom and you have that tree picker style where you are saying if you know this reference field you can have that you have the little plus next to it but what I didn't like about that was that you had to have a related list you'd have to have another table you'd have to have one row per per field for example if we wanted to say in this case incident dot assignment group manager mm-hmm you'd have to have you have to store that in a kind of a one-to-many related list so I was thinking about other options on the platform where that same type of thing occurs and the best thing I could come up with was on notifications so and within a really any notification who will receive has this user group in fields yes it does so this is my recommendation for making it look pretty so this is dynamically based off of what table is selected on the same record and we have the ability to dot walk and go multiple layers deeper we can have four people we could have thirteen people whatever on the same form no extra tables all by adding one extra field so I did are there any other places that I'm not there can't possibly be any objections to using this method this is the method for this right that's that's my that's my plan so this looks looks great to me so let's take a look at that real quick this is a dictionary field that is a type of I don't believe I've ever used a few lists dictionary item like that I created I don't think I've ever made one right yeah exactly but in this case let's figure out how to do it and that way it'll be more out of box and less hacky than on the user interface I'm not very adventurous I on the back end I feel very comfortable trying new things but on you guys you know I I let you know you you know designers and research and all sorts of people get involved in that and curate these things and and test them and debug them and make sure they work on a gazillion browsers and I just used those things then I get to do whatever I want in the backend alright so full disclosure I did look up this field prior to today early this week I did go to I went through the step that we did and I did notice that this visible field for field list out of box is unchecked so when you are adding a column to a table this will not be one of those options out of box but to save some time and I did I looked ahead of time I've you're a cheater I been a fun thing to run into this wall it's it's fun so I did this this box like Chuck did on one of the reference episodes that I keep going back to you from November of 2017 it's he runs a background script and checks that box that's that's the same stuff I did and we put big asterisks next to that and saying yes it's possible to do these things no don't call support / support for a thing that you're not allowed to do yeah there there's usually a reason that things like that aren't checked so just know that yeah so - and really if you're in a team of developers and you're doing this you know I would enable it leverage it and then disable it back because they you need to have a really good reason yeah all right so what do we want to call that field the people that I want to send this notification to what do we word that in the notification is it fields to send too because that seems like a nice place to steal the name from I think you're right though I think it is it sounds like it would be fields to send too because fields yes yeah dynamic fields fields to include I'll look it up Thank You Brad it is I'm waiting my kids are all streaming video and their iPads users groups in fields user slash groups in fields that is the name it's slash okay recipient fields is the dictionary name which seems better oh so that's the would like recipient underscore fields is the dictionary name yes or is there just a label specific to notification no that's the dictionary name is recipient underscore fields which is good it should have a simpler dictionary name all right so let's put this up right right under dynamic action and of course we see nothing whenever I'm running around and reverse engineering something I find myself going right to this field to this dictionary and let's yeah so I I'm expecting that the it needs something and like a reference to know which table object to look at yeah so let's just add attributes let's add dependent and let's add a reference qualifier and see what other places on the platform are are using with this type of field list so attributes there's some multitask multi-texture looks like dependent and dependent field are populated and reference qualifiers doesn't look very useful so dependent and dependent on field seems like the right way for this one alright so back into our field and this is global and early an episode one we decided not to do a global scope we decided not to do a scope tab so that's why I'm not in studio right now okay so we're on our field flip over to advanced view and dependent on the report that table is that a thing it's gotta be I just don't know how to get to it hey there it is alright let's see if we get fields I'll be really great if we do I love that you use the history like natively like you just go to the history I want a hot key to go there though like I want a hot key to switch to history and then hit a number and it takes me to that and have oh one two three I'm top to bottom yeah like hot key of history and then four takes me the the fourth thing in the history maybe our note we'll build that into the that seemed like a good SN utils it does seem like SN utils enhancement somebody take that as it to do put that on his list okay so we still don't have anything yet now there were two fields that were populated with table when he looked in the ListView was dependent and dependent on field did both of those get populated when he filled in the one on ours [Music] so dependent on field but there was another one that is just yeah he is looking at the XML just so everyone knows oh I do only have which is phone browser window but yes that's what window is fine yep so it was populated in there yeah here's here's what the XML showed and then so there's probably a business rule or something keeping those in sync so we have to wonder then our does it not allow for a dot walk for that cuz that is my first suspicion is that dependent can't do dot walkie agreed so let's quick and dirty so throw a table field on here and verify that that's how we build these nice I like it table name yes this stuff right here is why sometimes I will I will do things in in scratch instances versus my works development instance absolutely I need a reference field that's to two table here but it's definitely not going in production agreed yes I've proved that this is how to use this thing yep a PDI plus sec OPS+ just dangerous thrashing of of it leaves your customers def instance squeaky-clean and and you know the where these scratch instances whether that's a PDI or somewhere else's is it's up to your organization I know I've done some some work on where all the scratch stuff needed to be in the scratch instance for our organization that's that's not a prod instance right oh it's totally a prod instance it's just for people we don't care about okay okay so here we are I've updated the dictionary to be dependent on the same table field so I think that's so now we have to decide do we pull that data in to a reference field for a table when we change the report we populate right yeah that feels terrible and horrible and dirty but if it if it doesn't work any other way then it makes for a good user experience and is sustainable I I would tolerate it in this case agreed it's something that could be kept in sync but not displayed on the form yeah not displayed yeah doesn't really need any maintenance you just make sure it's always in sync with the you know whenever report changes it changes it and bam you're done and we're going to do assigned to manager and assigned to manager manager and assigned to manager manager or manager so we're gonna validate that our field is working before we try and actually build the the connective tissue to make it work permanently absolutely and did you see that little the rendering blip where it cut off after three letters and I had five items rendered or five items selected and now we got selected back down to two so I'm having flashbacks to another earlier live coding happy hour where it wasn't a recipient field but it was another type of reference field where I think it was Chuck also mentioned when you add these to the form it uses that default 40 character string value along with the field type so so yeah truncate it we and I'm gonna just cheat because this is no actually you can't yeah cuz it's already on there yeah least Bureau you can do the just use a client script share the field good I always go to the list view for things like that for me though because I know it's in the regular list for you I don't have to get there and it is editable fields and we just need to change its length its that like this day outside so I don't know why it's not on yours so let's change this to something yeah and I tend to standardize on the the sizes there so standard to certain like a good base size increments yeah you know as if it if I care about the length then our you know I do other things but the I just tend to sink on the the same standard sizes that that most ServiceNow fields use because they're synced to database sizes and if I'm happy with 800 I'm usually happy with you know a slightly higher number than 800 there we go look alright that looks like what we expect exactly and now let's uh let's link that out so that we use it right because we yeah we've got a reference that in our script versus our hard hard coded area so so I'm going to do a trick like I did on the first part I'm gonna right-click on this record in explore toolkit and then change the default gr to current okay and we can run and prove that it does load up our glide record and then I'm going to take the first part of this code yeah until the looping and then I'll just use a single word with the array which will output that on the right side along with our one of the very handy dandy things that an explorer does it is correct yeah that's that's not an out of box feature that's unique to the explore tool good yeah so let's see Thank You J's J says it's 5,000 and out of box all right very good nice so now I think it's time to you want to split that [Music] and I forget if I have to go to a string first or if I can just split from here [Music] you should yeah think so it looks good looks good and then now this is one of those cases where the way you want to do intersection will make us not me to do extra logic for this thing right because we if we wanted to do that extra logic we'd need to detect whether or not they were groups or users but that's a definitely a death another layer of complexity on this which I'm not sure I want to play in that because two layers of complexity multiply okay so this this part appears to be working where we take the value of that field split it into an array loop through the array and then we now we have what we want to query for so I'm going to move this portion up into the loop that will run for every record and [Music] now what are we going to do we have report appears to be equivalent in this case to the incident because this we're running it we're executing the report we're seeing how many records there are and who was in certain fields so it's gonna be dynamic based off of which table the report is reporting on mm-hmm but I think we can do and give value or possibly get elements of that [Music] and I'm just gonna make up some bad names from things cuz I know hey naming things is always fun part of the program so it looks like and this is what I like about the if you don't want to look up at Docs and you just want to brute-force try a bunch of things quickly so it looks like the non dot walks fields look good but the dot walk items are not coming okay or possibly our blank you know they may not have managers yeah and most of the out-of-the-box stuff doesn't have managers so yeah so go ad so let's yeah add a couple of managers to Beth and then to Beth's whoever you mark Beth's balsan whoever you mark - Beth's boss let's make Beth and Fred each other's managers that always works out oh that's just mean it works for our UK but expense report time I could probably count Andy [Laughter] [Music] right so Fred gets boss that's Beth and then Beth gets boss that's someone on Fred please but dawn hey I have a boss all right [Music] we still have a bunch more or less than we had before I don't know if that's more or less it doesn't it looks like it's the same amount yeah that looks like it could be a little different oh yeah can we adjust our report to just Beth a great idea just filter or to Fred cuz fred has Beth and then Beth had someone ya J's we were confused too that's why we're narrowing it down yep if it works the first time no need but alright and save and now when we're in Explorer we expect to get at least manager you know the dot manager and the dot manager manager to show up and a whole lot less injuries make it a little easier to read all right so we've got managers and societies and assigned to in societies and manager to manager not said manager or manager manager not said on this one we have manager now it's two managers so this that's probably the one where it's Fred and then Beth and then Beth's manager but the ones where it was Beth it does it right but because we've gone past one layer of got walking I'm gonna assume that we could go to three four five level yeah to see if nine that if that one is Beth's managers Society which I think we marked as Don yep [Music] we can stun alright nice so this method we are not doing a get value we ended up doing a get element which is the kind of a lesser ease cousin of a get value unlike get value it does not return a string so we will probably want to turn that into a string before we toss it into the array absolutely that is a good call out there yeah get value is great for putting things in this into arrays because it stringify Z and then that makes you don't have any weird you know 25 entries if the same thing in your array of 25 so you've not been a ServiceNow developer until you've run into that problem a few times that's right yeah and the the get info get log tries to be helpful it converts it to a string for you so when you log it it looks like it's all configured properly but if you log inside your loop and look at the values for each iteration you see that it changes what the sis ID is for the new entry and all the all of them so that's right which which is is the way you figure out oh yeah that problem again so where we ended here we for each item in that UI field that we added the field list we're gonna do the get element and for the if the Gil item element exists then we're gonna drop that into the array noise and then we'll continue on use our array util and then our switch and then I think we will you know see what happens so it looks like after this we had four people after the deduplication step and that's what we would expect right because we have because we narrowed the report down to Beth and Fred and so that's Beth and Fred and Dawn and then who's the one more does Don have a manager set oh we're appending to static no well yeah we're duplicating before that set yeah we're not so who's the fourth one [Music] maybe Don's got a manager said we just didn't go look well yeah I expect three until I know that Don has a manager all right let's move that back into all of this over here I think we're one step away from moving this into a script include I don't think we're gonna get to that today but we're not getting logically that's the next step and that's a pretty easy step from here yeah moving it into a script include so you ran the Explorer and we expected some results but we didn't get one oh we have an error jumping around it I know I can't keep up now I know I apologize for that just the yeah something's not triggering in the new loop so we adjusted some variables did we adjust them back for getting it into running it in the Explorer directly we I did I I took that current trick off of the the top of the script okay I removed that the other items I don't imagine not pleasing hmm did we say aye I believe I did I think that was here that was a that was me doing the shift-tab code sorting script oh we know you did get the haven't done anything weird with the the new reference field and this is the magic of the live coding right here well unlike the live pull out some of those uncommented and see if we get anything yeah do we still have the I thought I still saw down later that we have the arrays being logs correct [Music] and we haven't somehow caused your calling script in the Explorer to be wrong now have we I don't think so the society here f56 8 the society shouldn't have changed right cuz right exactly yeah and you hit the execute also right and I saw some logs for explore logging some things yep and that's that's one of the default options just like a background script it it does throw what you ran into the syslog but filtering that out nothing useful that's the current time yeah no sir those are things from inside our script so we're definitely doing things inside the script so when I did the execute now it looks like it's doing the run as admin and that's why it so we're we're clearly in the script we're clearly getting sis IDs for the queried users what is and no recent errors or warnings just some client-side standard things at the bottom so yeah sorry an hour we're in our condition do we actually like send things back out of this script I think where's the it's probably at the bottom right where we actually do things yeah yeah we have a cases so that's it is and we didn't change the array name or anything weird like that no I think I I think I know where you're going I think I did a copy and paste error where I did not copy the full the full text let's see if we can find the because remember this is a we're we're tricking this this is we're starting with the condition field it's looking for an answer equal true answer equal false type of statement which may have gotten dropped in the move to explore and back yeah so I think we I think there was something at the bottom that said if ready to send or something like answer equal ready to send at the bottom which it's going to default to true unless it hits that out unless B unless we come up with 0 users which that logic might not stand but let's let's try this one line addition [Music] and new email just now all right yay now does it contain who we think is it Beth England and Fred and and I didn't validate whether if Don had yeah is someone who can get emails but we got Fred and Beth which is what we expected for sure we do that's victory then that at first glance manager Don is active as an email as notification enabled so we can yeah that looks like the next part of the troubleshooting yeah but that's notification troubleshooting all right let's drop into and and maybe at some point we'll do a whole show on just just the notification 101 troubleshooting that I that I keep a list of handy whenever anyone at in slack asks why notifications aren't working here you go poof sorry if you find a thing that doesn't that this doesn't solve that let me know cuz I will headache I'm found a thing in a long time that didn't solve well that was great so now we have a way for users to pick the groups and user fields from our report we didn't we didn't quite link up that to be automatic from our report yet but that's that's a simple logic business rule to keep that in sync for us but but the interface is the right thing that we want and it's consistent with other places in the platform which is a good thing to do right so if you've done this for notifications you can do this here in reports and makes it feel similar look feel similar and we've now got to the point where we can generate these users look look up to see if they have data in this report and send it to them if so this is super cool playing host to like that done with this this particular feature it does use it I don't like mailing reports but if I mail reports I want the recipient to want it yeah absolutely I look forward to continuing on this I do have two or three additional features but like on most of these live coatings things that I thought we're gonna take up time went fast and the things that I thought would go fast took up the time so yeah the one thing I'm sure of is that I don't know where the roadblock will be because whatever I think it will be and like it and the time sinks they're they're our best guesses as in all development right is you think oh well that's I'm gonna hit a tricky point around this thing and that ends up being easy but the thing you thought was gonna be easy with the tricky part but still somehow our estimates of complexity are still about right is you're still roughly right on how complex the thing was you just were wrong on which parts of it will hear the clicks parts which is funny so thank you Jared for joining us we don't now need to close out this wonderful show with our ratings of our tasty beverages in in original order so Brad is first I'm first I had the Saint Arnold Springbok it's pretty good it's a pretty good beer we broke 90 this week here in Texas so I needed something that was not not the stouts that I had been drinking the Imperial Stout sir are shelved once you hit 90 that's right so I'm gonna give it a 375 it was it was solid not spectacular but yeah nice Jared I'm gonna go with a 4.5 Plus on whoa I'll miss it it is the favorite it's a to light kombucha it's not then you know bite your face off so it's yeah it's solid it's it's one that I usually have around the house and I'm gonna keep it with a good score so it's so a staple for a year yeah exactly and my big wave golden ale I don't know if you can tell but the the choices that the variety of my house is getting low this was this is this is this is like the last one of the last beers that I have that's a step up from like a me culture like I might have to venture out in and get some beer for next week's show because I don't want to have to pull out something like in the Cultra is that what he said so and this is a 3/5 with one wild about it I drank it but I won't buy it again any time you know someone puts it in front of me I'm I will drink it so that was super awesome join us on developer.com coming up soon we've got the knowledge 20 and the creator con that's associated with that as we mentioned last week if you joined us then Brad and I are running the hackathon this year and that's going to be over May 1st through 3rd on the weekend and we will be doing some interesting things around that as it's a virtual hackathon so we'll have more details on that to come but well we'll be engaging with the broader community as detailed as I'll get with that for today anything else that we want to mention bread I don't think so hackathon if you haven't signed up at least go take a look at the page we've linked to it from the developer blog yep and the developer newsletter will go out next week so look for that in your spam inboxes so expect to see that on Monday or Tuesday I know it tends to go in my spam box so I have to go I have to go look for it so I have to know it's coming Thank You Jared sounds good Brad thank you the chat for engaging with us as always we got up side a out Andrew really contributing today chase MHC thank you for contributing today and we look forward to seeing you again next week have a great and safe time this weekend everybody bye bye bye bye guys

View original source

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