TLO what's poppin? Y'all are on twitch. We are not But you can leave a like comment subscribe turn on your post notification bells me Let's continue to grow the family from Chicago to the UK If we go happen to go live and you miss it This is the channel where all the highlights from the live will be Right behind me Don't forget we do got the patreon man if you can go ahead go over there and be a member man I then what was tier if you want to be it just you know if you want to just show some laughs for And don't forget we got the discord all of this is all down in the description Let's get into this UK dash cams cop 9 2023 let's get it to see how many traffic circle issues we have in 11 minutes I would have been home. That's why you never put your car in park when you drive Just because there's a lot of traffic don't put it in park cuz you don't know what you're gonna You're gonna panic put it in reverse.   Okay, this first traffic circle issue. What's he doing? How did play how did that even be honest with me on this traffic circles even help just put a light That was a red light Was it squire Indubitably Nobody's nobody in that situation was fast Like he got off the bike ran in slow motion. The police got out the car ran in slow motion He did all that to stop at a red light Sorry for what Seeing an opening and he has on a reflective jacket. You should have seen him coming That's what the gear is for in this transaction did anything correctly This first car ran right over the middle of the traffic circle the guy driving this vehicle right now Right over the middle of the traffic circle I'm not even mad at this dude right here because he's following the path of the traffic circle If this guy driving would have done what he was supposed to do And went this way and around and then out He should it wouldn't have been an issue to your father No, it's you dude all this road and you want to be in his lane the traffic light It's not raining that bad van driver. I even moved up. I get it when you drive me You want to anticipate somebody else's move? But if you were to stay in your lane, he he had it covered He seemed you coming. He turned on the outside lane and you would have stayed in this lane and everybody looked at them Okay Cyclist because somebody hunt that you're gonna stop all of this whole road looks sketchy That's a boyfriend girlfriend couple.      Oh, this is at the junkyard Tl leave a like comment subscribe turn on your post


Steven they said what first question came from my guy stone two times. He said a engraving hope all as well with Junior family today I was watching Steven they talk about the Ravens and I think the media is finally Starting to understand what us Ravens fans have been saying for four years now We're just to get a little more more weapons. My question to you is well first off let's talk about what Steven a was saying because he was having a conversation with Kieshawn Johnson and I Love this conversation. I know a lot of times Steven a Smith be saying some outlandish stuff about literally everybody But I appreciated this back and forth between Kieshawn Johnson and Steven a Smith so much I would normally put the video to it in this video, but The last video that I put up about Peyton Manning talking about Greg Roman the NFL They found it and they said hold up there buddy. What you doing using our stuff, man, but so anyway Watch it for yourself But Steven they were having a healthy debate a healthy back and forth Kieshawn Johnson was talking about hey Ravens running the ball and playing great defense. That's who they are That's their philosophy and Steven a Smith was saying well. Yeah, that is who they are But he said this and you ain't had Ray Lewis in a while You ain't had air eating a while and he said back then with those guys You could count on those guys to deliver on defense for you and you could win because of them Even if your offense was lackluster, but he said now he said it's been a while He said it's been a while and the Ravens have not had that success in the playoffs So he said they need more from their offense and he said LeMau needs more help and he talked about them adding weapons And Kieshawn Johnson was like well, that's that's not what they do They brought up all their back on Junior Kieshawn Johnson Like all their back on Junior ain't going to know Ravens as we all already know and maybe by the time you see this Video, maybe he will be wherever he's gonna be it. No, probably not. But anyway Like they I just watch it for yourself because I loved their Conversation anyway, he said number one who's received that's gonna be a free agent this year that you'd like to see the Ravens sign this off season I don't know who's gonna be a free agent. I honestly don't um, I Would obviously love the Andre Hopkins. Y'all know that's my guy. Um, I just The philosophy is what the philosophy is Kieshawn Johnson spot on with that one Their philosophy is their philosophy and that's what it's gonna be Like whether people like it whether people don't like it whether people think it needs to be updated Or whether people think it needs to say the same whatever it is. That's who they are these Ravens are who they are there from the top That's where it's coming from the philosophy and they it seems like they're gonna continue to stick with it So, okay, so As far as expectations for receivers and receiver that my expectations are low I don't think the Ravens are gonna go out and make some splash move for some receivers because they don't value that That's not who they are. They never been that way. I know some people some people like oh, well It's Lamar Jackson Lamar Jackson doesn't throw to the receivers. He doesn't use it. He throws to the only the tight ends Who has he had out there like that and Again, this whole receiver thing. This ain't just one of them off. This has been a flacko thing to that Ravens It's their philosophy, man. It's their philosophy So that that that's what it is and then he said number two whose receiver you like the Ravens to select this upcoming draft You know you wrote up there buddy stone two times. I ain't watch not one single draft prospect yet We still in the regular season NFL. I ain't been messing with no college football, man But I can't answer that one at all, but then number three. He said who's a receiver you would like to see the Ravens trade for next season Oh, yeah, we're talking dream scenarios now Yeah, that's the Andre Hopkins all day for me. Um, any other ones? Tyreek Hill, he would be a great one. No, I know that's unrealistic. I know it ain't gonna happen Devonte Adams he getting close to being 30. So Ravens might start looking but no Who else I don't even know when I don't even know I'm just I'm so wrapped up in this season right now and just seeing how it goes with everything I haven't even really been thinking about next year too much yet But I guess I mean according to my guy stone two times. They never too early to think about it But anyway, he said thanks for all the great content and keep up the good work You're a bright spot in a lot of people's day and we're very thankful to be able to watch your videos daily Hey, I appreciate that stone man. Thank you. They may Better cry this video ain't trying to cry through any videos. I'll be crying enough already, man But I appreciate y'all I appreciate you a lot for this message and thank you Boy Next question came from my god Kevin. He's angry, but I'm happy to be a patron now So you can read every one of my questions and comments. I told y'all we do like 99.99% of all the emails that get sent to but if you're a patron, you can send it directly on patron And I mean speaking of the team keeping clean patrons appreciate y'all Thank you all if any of y'all would like to become a team keeping clean patron You can go to patreon.com slash engraving vids. It's all down below in the description You don't have to and shout out to the team keeping clean channel members as well If you want to become a team keeping clean channel member So you get a nice little star next to your name in the comment section of every single video or every single live stream That's cool too. You could become a team keeping clean channel member by clicking the join button Um, but anyway, thank you all my back to my god Kevin question. He said, uh, I told you we needed to give Always less snaps because he's the only past rusher not balling I don't know what's been going on him. You know what was crazy um I remember towards the end of the game um Because I as far as like personnel stuff when i'm watching live like when we're doing our live streams and stuff I don't always be noticing that stuff because i'm watching the game. I ain't looking for like always all the way out here but He wasn't even out there. I was like, oh Yikes, like especially like in a time when he's supposed to be helping close it out Anyway, he said if a job is just 20 better than away Which I think he's going to be way better than that Then you have to super you have a super deadly pass rush with great lineback in an awesome secondary The ravens are built for the cold playoffs. The only thing that can stop them The only thing that can stop them is offensive play calling and not using every single weapon on offense They do not use mike davis in the absence of gusts and they need to use devin duvenay and king drake The same ones gusts and jk come back Yeah, mike davis, uh, they don't use him at all. I took ever since the dolphins game They tried to run him in the dolphins game. I think like two or three times dolphins said no This dude ain't running for nothing on us. Ravens ain't look back since They ain't look back since So anyways, he said i'm saying that so on offense to use your best players Right, that's that should be a collective effort and lean on your defense Yeah, I mean, that's how it should be and this defense is definitely one that you could rest the shoulder on Um, so the offense. Yeah, use your best players put your best players in the best position to have success And go all out next question came from my guy steven. He said hey, what's up, bro? Hope you and the family are doing well. Well, what's up with andy isabella You know just as much as I do we again We don't hear anything every single practice report nothing every single report We don't we don't hear a thing about andy isabella at All like at all but now that I think about it But with the show and jackson we heard about him I guess because he got put on the injury report. He got designated with the injury So I guess they they had to report him. So but now I'm thinking about we don't we don't ever hear anything about tyler Beatty Benjamin victor because they on the practice squad Um, but even still well, I guess they're healthy on and on the practice squad So that's not that well, that's why they're not listed on the injury report But still we don't hear nothing about them ravens. They signed this dude and just He's been a blank this question came from my guy j fire He said a engraving a happy Thanksgiving or late Thanksgiving whenever this gets to you Oh, no Thanksgiving. It's just a regular day for me. I don't celebrate Thanksgiving But we we thank for every single day Out of the year. Um, but I appreciate you man. He said, uh, hope you enjoy some good food and time with the fam Oh, yeah, we do that on a regular. We do that on a regular. We ain't gotta just do it in November, baby We do that on the regular baby You like you oh, you can't see this belly right now because it's like down below But yeah, this thing is real deal, man. Uh, but anyway, he said, um Here's my question What are you thankful for about the ravens this year and what hope do you have for our immediate ravens future? Thanks again for what you do for the flock and you have a fantastic and tremendously blessed day. I appreciate that j fire um I mean The ravens always make football fun They make it fun. Um, they make it stressful But they make it fun. We have a lot of fun watching ravens football So i'm i'm glad that they do that, uh for us. Um, they Uh, this season specifically. I mean they they seven and three so they've won More than half of the games that they lost and even in the games that they lost They had double digit leads and remember back then like it was like man Who are these ravens? These are the ravens that have built up a big lead and then they'll lose it They were very inconsistent, but they've been building up consistency and I know The um the quality of teams that they've been going up against recently has dropped But hey, I ain't complaining because you still got to take care of business regardless of who you're going up against um, but So ravens could they got to ride it out. They could ride it out and then um Come play off time. Yeah, the quality is going to go way up But anyway, uh, oh you said what do you have? What hope do you have for our immediate ravens future? Superbowl simple as that next question came from speed killer He said which teams do you think should trade for lamar or which teams will be great for him? And which head coaches would get the best out of him if he leaves See a lot more people been asking this question I think people trying to like prepare themselves for if and when that happens if it if it does happen Hopefully it doesn't but we'll see um I think the bucks Would be a good team for him, especially just with the weapons that they got That's what I just really want to see wherever lamar ends up whether it's with the ravens or with another team I just want to be I want to see him surrounded with Wep with high quality weapons because he just he hasn't had that like that with the ravens and again That's just their philosophy or whatever But I will that's what I want to see I want to see lamar the the potential be maxed I want to see it be reached be tapped into like crazy Because with the ravens, that's not that's not gonna happen. It's not gonna happen. Um, so But which teams I did say the bucks Again, we talked about this before too. We're trying to make sure that lamar don't go to miami because I think It will it would be great there. I think with I think I know they got tray lengths But with the 49ers the way that they um The weapons that they got in the way that they scheme stuff too They they scheme stuff to get their different playmakers involved and they they do a lot based off for yak They set their guys up to get good yak Um, so 49 I know it's not gonna happen 49ers will be a good one. Um Who else who else who else who that's a tough question off the top of my head Um, that's the only one that I can think of off the top of my head right now So I'll say bucks dolphins even though dolphins a little shaky right now because to to have been balling, man um And you had a 49ers, but again 49ers they won't happen and last question on this episode came from my boy Antonio He said success with wide receivers when andrews is out. Hey, man I'm new to the channel love the work you are doing. Oh, I appreciate it Antonio He said one of your opinion one of your opinion on when andrews has been out of the game Have you noticed this makes greg roman spread the ball around and I would say it was successful Uh bingles and panthers. So I wish greg would keep doing this even when andrews is back Maybe let's target but might keep lemar in a rhythm and get this offense moving how we want how we want it What do you think now? Yes spreading the ball around is up to greg roman, but it's also up to lemar jackson as well It's not all on greg roman because greg roman could dial up a nice play But if lemar doesn't see or doesn't even look for the receiver Then it doesn't mean anything. So it's up to both of them. Um, it's both It's up to greg roman to call the stuff and for lemar to execute it Now, uh, reason why he gives it to mark andrews so much is because mark andrews is his most reliable and his best Weapon his best target, um Now we've seen it since mark andrews has been back that the ball has been spread around Like we saw it in the last game now There were some drops because really on that first drive it was going the ball was going everywhere Mark andrews, I think he caught a couple passes, but he had a drop Well, uh, he caught a couple passes pat ricardi on that wheel route. He had it, but he dropped it Um, jane pro shea. He had it, but he dropped it. Um, I think there was another drop too Then likely he'd be dropping and whatnot. So the ball is still being spread around Um, but we just and then of course the markets roverson had he went What nine for nine on he had he was talking at nine times had nine catches for like a hundred twenty nine Y'all something like that, but the markets roverson. He had himself a game So we've still been seeing it even upon mark andrews return that the ball has been being spread out So it's just a matter of consistency at this point You


Hello, my name is Mike Olliton and I'm here to discuss the importance of helping students develop confidence with their mathematics and their competence at being mathematical. A key planning issue is to offer students something that is easily accessible, which they can all make a start on. A strategie I frequently use is to ask either an open question or present an image for them to look at and discuss in pairs for the first two or three minutes. After two or three minutes I shall ask several pairs of students to tell me one thing that they've been discussing. I won't ask for hands up because I'm more interested in just getting a general response from a group of students. So it's just one thing that I want them to tell me about they've been discussing. In response to what they tell me I'm going to try to praise here on the board what they've said. After gathering some information from the students I will then make it kind of an open house where I will say well would any other pair like to say something that hasn't already been talked about or they can build upon something that has been already mentioned. And in this way I'm interested in giving the students some ownership and some direction of where the lesson might be heading. I call this strategy one of drawing upon and drawing out and drawing upon. So having drawn out some information from them I'm going to go a little bit further with my questioning to use what they've told me to go further with their thinking. So I'm drawing upon what they tell me. And again this is about ownership it's about them having a sense that this lesson isn't all done and dusted it's about it's kind of dependent upon what we've already told the teacher. For example a lesson aimed at summing linear sequences with a key stage 2 class. I know that's a key stage 5 topic however I'd been asked to do something on sequences and I thought that's what we'll do. So I started off by asking them to tell me everything they already knew about the word sequences. If you're interested in pursuing this particular line you might read pages 36 and 37 of Mathematics Teaching MT 271. So that's enough talking about pedagogic issues just for now. But in preparation for the next short video I would like you to choose three whole numbers between 0 and 10. I'd then like you to turn them into coordinate pairs where the x-ordinate as far as you're concerned is smaller than the y-ordinate for each pair of the pairs. Having done that I invite you to think about where it might go next, where you might take the lesson next having got the students to create some data and we'll see where that takes us. Hello again. I would love to find out what kind of ideas you came up with with regards to what you might ask the students to do next having gained these three pairs of coordinates. Well obviously we can ask them to plot the coordinates on a square grid. Now plotting coordinates is something that children meet at the beginning of key stage two in year four. It might even be in year three but it won't be a new idea. So plotting coordinates and of course they're all going to recognise that assuming they've plotted them correctly they've ended up with right angle triangles. Depending on the numbers they've chosen some might end up with isosiles right angle triangles and some with scalene right angle triangles and again there's some important vocabulary to be brought out in that simple situation. So mathematics as well as needing to be accessible it needs also to be extendable and so because they're right angle triangles and because they'll have worked on areas of shapes in key stage two then I think a nice extension task for them will be to work out the areas of their triangles. And now there's other things we can do such as instead of plotting the coordinate pairs as x being smaller than y what happens when y is smaller than x when x is greater than y. Well yeah if you plot them you'll find there's a very interesting geometric property to arise and of course why miss out on that opportunity when it's there to be had. Certainly in the lesson where I taught this was a key stage two group the children were noticing different things and this ultimately led me to asking them to work out what would the area be for any three numbers which I'm going to call A, B and C. I thought I'd take a chance but certainly that kind of problem will be will be suitable in year eight year nine maybe sorry I should have said year nine year eight maybe. But what happens if we then have six coordinate pairs and we form a hexagon what will the area of the hexagon be and how does that relate to the three numbers that we started off with. Of course students are going to need some knowledge of Pythagoras' theorem in order to be able to work out the perimeters of the triangles and of the hexagon but it's all there to be had depending upon who we're working with and what knowledge one would expect students to have in order to be able to work on more complex problems. And if you want something for your your A level students and then try turning the three numbers into three dimensional coordinates or coordinates in a three dimensional plane. Do you call coordinates triordinates I'm not sure. Anyway it doesn't matter but what does matter is that there's a cracking problem there for our GCSE A level students which is so plot the six points on a 3D grid. What shape do you get. What will its volume be. What will its surface area be. All kinds of potential developments starting from think of three numbers. Again the triangle problem is written upon in the same article that I referenced in the first video in the first video in MT 271. Okay thank you bye for now.


An old, classic returns. Images of the Vex Offensive. What could be Vex Offensive? Armor, as well as a look at a new exotic, believed by me to be the Leviathan's breath. How's it going guys? My name's DPjen. I'd like to thank you for stopping by and checking out my video. If you do enjoy it, leaving a like truly helps out and if you're new around here and enjoy daily Destiny 2 videos, be sure to subscribe. Okay, so we have covered most of what packs is brought in terms of new info regarding Destiny 2's Shadow Keep and what's coming. One of the speck of information that came out of it is the fact that an old, classic will return to the game in the Kvass stuff. Arguing much yourselves how it's pronounced. The starting weapon for Destiny 1. The first weapon you shoot playing the game. The weapon which also returned in year 2 as an exotic where you could switch around its firing modes. I mean I prefer the original but hey that's just me. While it's returning, which if you think about it, it kind of makes sense for the fact of New Light. The 3-2-play Destiny 2 campaign starting fresh for newcomers to the game. New Light sees players starting their journey into Destiny 2 playing the very first mission in Destiny 1, where you arrive by the original Mr. Peter Dinklage, even though it will be all enough to newcomers. And you went on to pick up your first weapon, that being the Kvass stuff. Because this mission is coming back with New Light, new players will actually be able to grab this weapon and have it added into your collection. We can see this confirmed by this image on screen now. We also see the original Ghost Shell being added into your collections. Question is how do folks like me get hold of this weapon? Can we get hold of this weapon? That I ain't sure, which is a shame, because I loved this thing. I love that broken lens on its sights too. Thing is, deleting a character and starting again, I don't even think that will work. Will it? I don't know. I don't think I want to restrain it. But yeah, the Kvass stuff returns with New Light and Shadow Keep. Now we've seen a lot of speculation because the original Kvass stuff is coming back. The Kvass stuff 7G02. Many people are speculating on the fact that the exotic version may return also. I've seen numerous videos on this, but I'm not sure about it people. Maybe in the future sometime it may return. Maybe Brunji are hiding it away behind some secret hidden exotic quest within Shadow Keep. But the exotic version, the Kvass stuff 7G0X, will this return to Destiny 2 as a new exotic? I'm not sure on people. Let me know your opinion on this down below in the comments section. All I know is I want the original. If it's confirmed that you can delete a character, go back and get it. Goodbye Warlock, nice knowing you. But yeah, let me know what you think about this down below in the comments section. Okay so moving on and unscrewing, now we see what is believed to be a new exotic version of the Viathan's Breath, a part of an exotic quest exclusive to season pass holders. Now what we are seeing here I believe is the bolt we saw being worked on within the Viaduct some time ago which offered a weird knockback effect. Now we've also seen another bolt and it wasn't until seeing this image that I do believe it's an ornament for the Viathan's Breath. And it's this one you see on screen now on the left, with the hive bone structure effect added onto the existing frame and it looks incredible. I believe this to be an ornament because of that chain like bolt string. Okay so we're going to move on and we have a first look at the Vex offensive event. Now although we can't actually tell what's going on here, we can see a giant like Vex portal has opened up under destination and teleports in Vex enemies. Now what this event consists of and the mechanics behind it we have no idea of as of yet, but it does look pretty damn cool. Now sticking with the Vex offensive on screen now we see the battle pass which comes with Shadowkeep. The armor available from this battle pass is armor confirmed by Bungie to also drop from the Vex offensive. And on screen now we see a much bare image of all three armor sets this battle pass and the Vex offensive event offers. And to be honest I kind of like the fact it isn't your typical spacey like armor. It kind of reminds me of the typical blue rare armor you'd pick up at those low levels which sometimes I love the look of. Now this I'm into mines on at the moment, is it special enough? I ain't sure but it's definitely different. The leafy effect we have on it though I do like and it matches the weapons that also drop from the Vex offensive confirmed by Bungie though I thought and these are two of them right here. These are basically mercury prophecy weapon reskins. Now the armor we see on screen now which we've been a little confused over. Originally people included myself thought it was raid armor others thinking it was moon or Vex offensive armor others thinking it's eververse armor so much more. What I actually think this armor is is ornaments for the Vex offensive and battle pass armor confirmed by Bungie the battle pass will feature three universal armor ornament sets one per class and I believe these fit directly in relation to the Vex offensive gear. As when you compare the two they are indeed very different but the balance for each armor is the exact same so that's pretty cool. But yeah people the shadow keep is around the corner and I am super excited for it. Today I just brought you a little recap over the my new information we've had over the past 12 hours so I hope you enjoyed it people. If you did leave me a like really does help out and if you are new around to and enjoy daily Destiny 2 videos be sure to subscribe. But guys that is it for another video thanks as always for stopping by and hopefully I will see you on that next one.


Hello. Hi there. We have a hyperledger wiki down today, barely was able to scrap the link for the Zoom meeting. Luckily Mira saved me, he had it, I successfully connected. Did you say the hyperledger wiki was down or something? Yeah, it still doesn't work. Oh geez. By the way, I see we have a newcomer here, hello, Innocence Autopilot. Let's give it a minute or two more and then we can start. Hello. Hi Nayan, we're just waiting for everybody to connect and I'll be starting in a short moment. Okay, all right, yes, I wasn't hearing anything, so got it. Yeah, yeah, it's your first time, right, so it's all good. I'll see how it goes, actually it's an unusually rich meeting in terms of people connect that. I think this might be the historical record, it's usually not that nine people. Oh yeah, and Swapter is asking for a link, so we'll have one more person coming in here. Okay, so I'm just reading what is this Innocence Autopilot writing to the chat. Apparently it's a bot, which is taking notes, and it seems like some sort of app. I don't think we need this, I think the recordings from Hyperledger are already automatically transcribed, so I'm gonna remove this bot if it's possible, it doesn't look like it's possible, so I guess we'll just have to leave it that. All right, so let's get started, I'll share my screen. We don't have, we don't have the Viki working, so I'll just, am I still here? Yeah, I'm here, I'm sorry for confusion here, I confused myself, there we go, sorry. Okay, okay, here we are, just a second, I'm really apologies for messy start, all right. Here's the screen, there we go. Okay, and I can't get rid of this screen right here right now, yeah, we'll just move it here. Okay, so starting, starting with the Hyperledger and try this policy notice, I'll just give it a short moment to read this, all right, I think that's good, so yeah, welcome to 29th of June 2023, ARIZ 6.1, today we have an offline agenda here in a notepad, so I see that we have some new faces here, new nicknames, what would you say? So if you would like to do a short round of introductions, just go ahead, if you would like to stay under a shade of anonymity, you can just stay quiet and just leave it. So if you would like to introduce yourself, you can do so now if you are connected for the first time. Yeah sure, I'm Myself Abhishek and I'm representing Instant Organization from Myself and I'm trying to understand the VCX framework development in iOS and Android, so that's why I joined this call. Awesome, thank you. Thanks. Okay, let's go ahead, so yeah, the second point in the start meeting discussions, Livy6 notice, I just saw some discussions pouring out on Discord about the Livy6 iOS and Java, I just wanted to like put it out there one more time, kind of verbally on this meeting if somebody's watching on YouTube, I just wanted to make sure that everyone involved is aware of the status of the Livy6 iOS and Java and that there are like different recommended ways how to how to proceed nevertheless, I left a Discord message, maybe Abhishek, it might be relevant for you, perhaps like before we like dive into other stuff around kind of a more mundane part of the meeting where we discuss like the technical stuff about work we've done and work we're planning, we can talk a little bit about Livy6 because it seems like that's the main point of your interest right now, how to build iOS and Java applications, so have you tried to work with Livy6 yet or are you just looking around, what's your kind of status? Actually, I downloaded the iOS sample demo from your property and I was able to run it in Simulator in Rosetta mode and now I'm trying to understand how to provide the config, so for example all the IP address and wallet key and credentials, so I'm trying to understand that how to provide the exact values or how to run the mediator in public IP, so that's where I'm at the moment. Right, yeah, so I guess you had some of the, did you post any messages on the Discord? Yes, yes, scroll a bit down, a bit down, yes Abhidhar, this one Abhidhar, yes Abhidhar, oh okay, I see, right, so you are using the demo from, as was done a few years ago by SK Telecom in Korea, so we are actually successfully run this, correct? Yes. Oh I see, I see, I'm not sure what version of VCX is being used here, it might be it might be it might be kind of old but I guess it's still possible to run this, but yeah anyway just to just make sure that you are aware, like surely you can run this and I guess like if you want to use VCX you know and build, start building for now, iOS slash jam application on top of that, I think this can be a good starting point but just be aware it's been done three years ago and since then there has been, I think not terribly a lot but some breaking changes in the API, so if you would then go ahead and update VCX in this demo I guess you would run into some instances where some issues where you would have to tweak the APIs and kind of just update the stuff to use the latest version. Yeah, okay. And what's your thoughts on the UNI FFI if you have any or if you have time to kind of consider it because basically you know the approach we recommend as we state on the main page is to rather use you know if you are kind of committing like long term to build some sort of wallet application and you want to have it native there's much better approaches to use UNI FFI every VCX but that's really just in diapers right now so like if someone decides to go with that like there's significant investment which must be done to to kind of you know get this to more production ready state and actually we have a we have a mentee you know as a part of the mentorship program Swapnel is on the call with us who's working exactly on this kind of taking the UNI FFI wrapper this POC from POC state to something you know at next stage maybe not production ready right of the bed but definitely something more a demo demoable than just POC because currently it's very early early stage did you have a chance to have a look at it yeah I saw it yesterday but there is no documentation or anything for there yet I know that it is in progress so once it will be in stable stage then definitely I will try it out but currently there is no documentation or steps to use it at the moment like this yeah it's more like you know it's kind of just the first stepping stone in building it and like basically if you want to if you would want to go down this route you would have to literally you know that would be the part of work to be done is to actually build a documentation and kind of just figure it out how should it work and design the whole stuff and and build it but it depends on your you know and kind of end game and and and your resources and stuff like that it's definitely easier to kind of get something I guess done with libvcx today but yeah it's not a great long-term investment so it just it just depends on on your situation right correct so I guess I should do the libvcx for now to brush up my fundamentals first and once I will be comfortable then definitely I will spend better time on unify areas so yeah for a few days I will be fixing the libvcx issues and trying to implement the working demo with the wallet and as a long term I understand that I should use the unify areas v6 so let me clarify some of my fundamentals and basic steps then I will be able to contribute in the unify areas v6 all right all right if you would have you know if you would make actually improvements to the you know this v6 demo iOS it will be amazing if you can update it you know if if you update the version or do some improvements like this being kind of you know under and it's now under layer of dust nobody touched it for three years so if there's improvements you do to this it'll be valuable if you can contribute a pull request here it's under it's under uh it's under this Korean organization I'm not sure if you maintain it if you if even yeah I'm not sure but maybe if if they don't you can just fork it and you know do a new version then we then we could link it from the main repo like hey this is updated version for for libv6 demo hey I was I was wondering as well hey I'm George by the way I was the one responding to your discord messages I was wondering where you got the provision values from you know the IP address and and all that is that something you're running oh it's not running for me at the moment so yeah I'm following your suggestions so I will I need to create some I need to use the mediator first I start mediator first in some public IP and then only I will be able to get the correct IP address and all the credentials so for now I just copied some of my you know from my invite URL I copied some data from there but it is not working so now I'm trying to and generate some means use the public IP and run the mediator on this IP to okay to catch the all the required parameters cool yeah it sounds like that would get it going but then yeah there's all the issues with the maintenance of it and whatnot yeah yeah is there a question for Patrick but is there a public instance of the mediator running anywhere yeah we definitely had it and I'm not 100% right right now if it's currently up and running but that might save save a lot of hassle to people trying out the first time so I'll check that and I'll check that right after the meeting and update on this card so if yes Abhishek we could we might actually be able to provide you a kind of you know a functional deployment of the mediator so you don't have to bother running it yourself at least for the starter yeah that would be helpful yes thank you all right let's go let's go on Amira at least the EC2 instance which runs the the agency is running I'm not sure if it's like for exposter working I think all right we'll check that so I'll put like a to-do to-do note here after anything to check okay yeah so next up we have like mentorship update so we have started the mentorship program about a month ago and since that like kind of onboarding transition and stage and we're putting together the kind of project plans so we have two projects mediator which would be Aries compliant mediator written in Rust kind of kind of basically written from scratch um and we have second project um UNIFI we already mentioned the UNIFI wrapper Ariesv6 wrapper and we have the the respective mentees on the call as well so we have an IAN for the mediator and softnail for the UNIFI so yeah if you guys can just like give a short you know to one like I don't know 30 seconds or one minute two minutes whatever you want kind of upgrade update on what's your what's your status you know what would you been up to so far in terms of the the project and the mentorship and and what's kind of like you know your next steps going ahead yes hi I'm Nayan I'm under this mentorship at Aries with the X team I'm working on the Aries mediator project which is I think previously also called agency their similar roles basically it's a Dropbox kind of service where people can drop messages for you which your agent can later pick so for example mobile devices can use this to get messages when they're offline or when they face network interruptions or when they're switched off so they can just assign a mediator and the mediator can store messages for them so Aries VCX currently doesn't have a Rust based mediator there is a Node.js based mediator VCX agency node I am building a fresh Rust based mediator for the Aries VCX project that's my task for this mentorship so over the last two to three weeks that's when we started our mentorship me and Swapnil so I've been up to a few things firstly there was onboarding from Hyperledger and the Aries VCX team then I also personally was trying to get comfortable with the Hyperledger ecosystem I attended random meetings and just popped in and tried to get an idea of what people do at Hyperledger then on the development side the last two weeks we have been busy trying to set up the VCX development environment it starts easy at first building the project and running the unit test but with integration tests it gets a bit tricky so we were a bit stuck regarding that for a while but thankfully with Swapnil and the team's help we finally resolved those issues and I think yesterday I got greens on the integrations test so yes now I think hopefully we are in a good state to start working on the Aries VCX I've also been looking into and researching frameworks that would be suitable for the project since the mediator is a web service I've been looking at Rust-based web frameworks for this project which satisfy the requirements that we have for Aries mediator so Patrick described some requirements which are mainly horizontal scalability performance and the ability to use web sockets so web sockets for being able to communicate with mobile devices using very less battery life or energy so these were the main requirements and I've been looking into web frameworks that satisfy these hopefully by next week we'll have a final selection so yes that's my status until now yeah thank you thank you that was very like clear and concise thank you for that um yeah maybe now we can turn to the other project Swapnil there is yours okay hi everyone and first of all thanks Nayan for a beautiful introduction it was very concise so I'm presenting working on the Unify front and I'm really glad that someone else the the bulk of this project will be helpful to at least to some people so I wish I think once we are done with this project I think we're able to supply some things that are helpful helpful to you so my project is is around developing an API around the Aries vcx that enables development for mobile devices and especially in Kotlin and Swift because that is what Unify currently supports and also Python but we're not concerned with that for the moment so for this project in these weeks building up for this project I have been working on setting up the development environment like Anand said that the integration tests are a bit finicky when it comes so so we have been setting up that and I think Nayan gave me some scripts that were able to that made that made things easier for me as well so and in the in the past few weeks I've been working on on a demo application using Unify and getting things up and running with the current state of Aries vcx Unify wrapper so building up to that I did a few templates this was inspired basically because the IntelliJ has the support for adding these these small templates that you can use for this project so I decided to do a couple of those so I will drop the links for those templates and for the application if anything finds that anyone finds that useful and that was my build up to presently where I am and the further in the coming weeks I will be starting developing the library itself and developing a demo application that will go along with these along with the development of the Unify wrapper so this will be my project awesome thank you very nice um yeah it's also it's also great to hear that you guys are like you know helping each other vacant for it so you are not only working with us but also help each other together as mentees and these two projects are highly related and kind of coupled in some sense I mean not coupled but definitely there's an integration point between them so so as a cooperation will be very can be very like fruitful and helpful for the for the final final state of state of things well that would be I guess sorry like initial initial meeting discussion and I now to the kind of the the usual usual program so just reviewing the work and thinking about what to do next and so we did not have like a tons of stuff tons of stuff I think since last week but we have completed the peer DID implementation I think maybe last week or the I guess talked about it I don't know is there is there something you would like to you know say about this work I don't want to repeat you know what you might be possibly talking about last week so yeah we have we have spoken about the motivation for this for implementing support for peer DID 3 previous or peer DIDs in general on the previous call and as you said like the the implementation is now is now done finished at it's about constructing, resolving, parsing, serializing, deserializing and like overall working with peer DIDs which will be which is necessary due to the like coordinated community wide move away from unqualified peer DIDs to unqualified peer DIDs so yeah that's about it like the implementation of course like it's not being used anywhere yet so it's just an initial implementation which may change depending on the on the use case when it's fully integrated into various VCX right and and did exchange specifically which which is where we will start which which will be the first place where it will be used and that that is another piece of work which is underway right now yeah that's right we have an item here it's a worry in progress as to the exchange protocol yeah we are we are also since we are at it kind of jumping back and forth a little bit but it's fine we are also doing that like following our new new state machine implementation guidelines so that implementation will be IO less and using the state pattern as it is now or also but it will be additional additionally using the IO kind of IO less principle so that'll be exciting lots of goodies coming with the DID exchange and so DID exchange will be coming with peer DIDs and if I'm not mistaken also integration of the of the new DID document right that's let's correct this right awesome okay now back to back to the main point we are going through the the work done since last week one more thing which is like largely done is like test refactoring I've been working on myself for well it's been it's been dragging out for a while then I went on the whole day and the work left undone but over the course of the past few days I I kind of drove into completion so there's a PR ready PR ready for review it has lots of things squashed into it but it's usually like small changes so the delta is quite high but I was looking through it like myself and honestly I think it's not too difficult too too too hard to review this is many of the changes are very trivial but to kind of like go over over the things which are down here and why I think it's cool is it's like so first of all previously there has been places where we have hard coded basically the the underlying implementation we use so for example we had in we have lots of ellies slash favor integration tests and previously I'll show you an example here just let's set up yeah we had kind of different ways of constructing ellies and favor and the different was that the ellies was kind of dynamically built this function always dynamically built ellies components her credex implementation like her unknown creds implementation and ledger client implementation based on the features whereas with favor it was hard coded so that previously where is it previously favor was I think always using the the in the the vdr tools implementations and so when you then run integration tests with with kind of credex feature flag then yeah you would run ellies with you would run ellies with credex but it wouldn't really run the favor side of thing with with credex and this pr is adopting the same approach for ellies and for favor so it's introducing similar like we had a function create ellies we have now create create favor and even more like even further and this applies for both ellies and both ellies and favor the way of building their their profiles they're using is is reusing the setup profile kind of testing to I know testing helper strike we had so so there's no like duplication there's only one way really we are setting up all of our integration tests previously ellies was being yeah ellies was kind of dynamically you know the selection of profiles dynamic let me find that ellies it's hard to find ellies there it is so when ellies was being built this is this is a new code sorry what I'm looking for is in this old seemingly deleted file input favor input ellies yeah so previously we had our own custom way here of like looking at the feature flags and then setting it up we had like custom function here so instead of that now when we build both ellies and favor the way we do it is that we always reuse this setup profile it's in this setup in this setup file is it this one yeah in this the setup we had this setup profile and that's literally the thing which is like looking at the feature flags and then constructing the profile accordingly combining the the library the components with the respective implementations and so this is now like literally used for all of the integration tests whether it is using ellies or not you know whether it's you whether it's ellies favor test or and whether it's ellies or favor or just just this is the the canonical way how to you know how to dynamically build the components for any integration tests so this was like one significant improvement in areas vcx testing just kind of unifying everything and like using the same approach and one way of initializing library second like significant thing was there are the changes in libvcx core and that's basically enabling libvcx core and there's for technically also the libvcx itself and vcx napi rs nodejs wrapper to run run run the library with different combination like different implementations this was more of a preliminary work to make that happen but there's another pr build on top of this which is harnessing these changes and let me let me find that i'll pull it up yeah so we have one more small pr on top of that which is introducing feature flags to libvcx and to the nodejs wrapper as well to kind of opt into whatever implementation you want to use and you can you can even select that granularity so you can you know you can choose to use let's say in the vvr ledger client let's say you know vdr tools ledger client and anon crates like critics implementation for anon crates or you know any other combination so yeah this this was now fairly easy to do with the changes layout in the previous pr and it's running in ci now with you know two different combinations the tests are passing so we finally like tested on a libvcx level as well kind of additional i guess level of confidence that things are working tested both with with critics and with the old legacy implementation vdr tools yeah so that's what i've been up to here and essentially what i'm still busy with i i still need to update libvcx to try to run to use in the vdr as a ledger client instead of vdr tools and that's most of the stuff we have here except migrations and for migrations that's in the hands of bogdan so how is going there as annoying as ever uh essentially i i remember that i've been talking with mira in the past couple of calls these past few weeks and i was so afraid i'm going to jinx this because it all appeared to be so easy um and i'm gonna jokingly say that you came around in the and spoiled it all up essentially the scenario that you proposed it was um it's kind of surfacing some stuff that i'm not really sure what why it's not behaving properly but it's not so it's a joke it's obviously a good thing that we caught this um so there were a couple of things um one thing was that in vdr tools the developers for some reason were storing the registry deltas with a non-intuitive key and it didn't seem like something important so i didn't include it in migration sorry in the migration um so that's one thing that surfaced but that actually came as i was debugging the previous issue uh or i realized that as i was debugging the previous issue and the issue is that after the migration is done um when credentials are issued something doesn't match in in ursa so and i frankly have little to no idea what because all the values are encrypted they're always changing and there's really not an easy way to troubleshoot what's wrong but it's i tracked it down to basically some check in ursa um and it it's mainly either related to how the credentials are issued and maybe something not matching there we're not getting generated properly which would seem fairly odd because when like the credits profile was not like that was already there it's being tested it technically works so when credentials are issued from credits like when you start the test from the credits profile everything works but when you migrate in the middle and you want to issue another credential essentially the credential gets issued but the proverd where the holder doesn't accept it because some checks some encryption checks fail um yeah and like i said i'm not even entirely sure why that is happening and i've been chasing this down for the past couple of days and today is pretty much going to be the same thing um but it feels like this is the last mile hopefully uh i don't want to jinx it more um yeah well uh i think so if it will be like if you know if it would be like uh really problematic or cryptic to like we cannot get we cannot get past this because it's not a scenario you want um like it's it's not even about publishing the revocation registry or the deltas so that's not the issue i tried that it's just that after the migration whether the registry is published or not or the deltas are published or not that credential check still fails so we cannot get past it and say that okay we're just going to push everything to the ledger before the migration and then do the migration and then move on with our lives we can but uh yeah there is kind of like you know non-technical solution to this um is that you say like the migrate we can say a migration strategy for for this is that after the migration you use you you know you can't continue issuing on top of old credential definitions and instead you have to like i guess just just build the new ones and start issuing from those and that way you don't really have to solve it you know on technical level but we will still definitely have to still support our vocations but perhaps we you know we can say like you know we don't support uh issuance post migration and given the fact that i think there's not so like i'm not aware of any other issuers other than ourselves right now i think it's like you know acceptable like solution as far as we can be ourselves can accept that and i i guess we might if it's too cumbersome to like figure out some cryptic uh or something awesome i mean the worst stuff is i believe impossible to figure out like that's the point of it right um but i don't know if shoving this under the rug is really a good idea um because like i said it might um in my point out that there's an issue within the migration itself or maybe when the credential is issued um so i wouldn't really just disregard this like that okay now let's give it some time then so try to try to solve it uh properly have you um i don't know if this will help it all but have you looked at the existing migration scripts um like i know akapai uh went through this migration at one point in time i wonder if they i did i did but i i haven't noticed that he did anything special right um so i'm i'm not really sure what the issue is which again kind of points or kind of makes me wonder whether the like the issuer issuing credentials is the problem and whether i messed up something there in the credits profile i don't know um there was there there's like there is a small oversight regarding the like dead qualification but it's not applicable here um that's basically something to take care of in the future maybe in the next PR it's something really small um but again it's not it's not the issue here um yeah no i'm i'm if you if you i don't think of any ideas i'm more than willing to listen so in the meantime i think i posted some message on on the maintainers chat essentially i'm gonna try and track down uh all those leads um particularly let me see if i can find that message um yeah so like i said it's either something that gets messed up during the migration itself which doesn't really seem like the case but who knows um and or it might be the case that something within the test environment like in the test itself um i don't know maybe there's some static stuff that kind of messes things up uh that also doesn't really seem likely but but again i i don't really know um and maybe a small small idea for myself here is like try if see if it makes any difference after you do after you do the migration you cannot issue the credential right so try to make a new revocation registry and try to issue against that and so maybe if it somehow if if there's a problem with migration which relates to revocation registry itself then maybe if you rotate it it will work you know i guess that could point towards something but then if it doesn't work regardless of whether you use new or old uh uh like uh revocation registry then it might be something to do with uh like credential definition migration perhaps or something more general or shared yeah it's not a bad idea i was thinking we're rather wondering um when we test then we set up the indie pool and whatnot but what if because i i believe that the credential data and the credential definition data that's static within the tests aren't they well yeah like some ideas and stuff i was wondering whether if i try to uh because i cannot decipher the encrypted values but um like if i clear everything out after i run a test let's say without a migration take note of the values and basically reset the entire environment and try to run it again with the migration i'm wondering whether the values might be similar you know across the steps um but i don't know if something is dynamically generated it probably is um some things probably are um the key yeah the crypto stuff definitely there's lots of like some some random like yeah well then um yeah i'll um it's a good idea with rotating the revocation registry and trying to do that too um but yeah it's pretty much just needle in a haystack kind of thing and i'm i'm not going to be surprised if it's going to end up being something really really small but uh yeah it usually ends up like that okay um well i guess uh i don't know i i have a work ahead empty i couldn't figure out what to like put here um because we are already busy with like lots of things um in progress so and the the exchange is kind of big and this migration might take a while and i'm myself busy with like libcx uh kind of integrating those modular libraries in libcx but i guess like uh well kind of things which will come after that i think it was included in the notes for the last meeting uh it did uh without me um that was the the CLI demo and then we had state pattern it's been it's been here for a while but nevertheless it's still there it's like one of the top priorities i think and what else um uh maybe the the harness uh 80 was it harry's test harness what's the abbreviation a t a t h a t h um uh test update back channel fictional update uh i guess that's hard kind of the main points yeah i'm i'm hoping to have a go at the cli demo uh in the next week i think i'll start with um making that dummy relay or mediator implementation that we talked about um because i think that might be helpful to uh swap nil maybe for some of the tests that you might want to be running on the wallet right right so how would that roughly work there will be some small htp server which can just receive messages and there's some simple way to uh you already outlined something i think some yeah i made one before just you know imagine like a simple queuing system a queue of messages under an id and not secure or anything but yeah good testing locally yeah right right yeah that sounds like a good start all right folks uh we came to the last point we just end meeting discussion right and do we have anything else to discuss well it seems like it seems like no so which is fine uh so we can wrap it up um thank you all for joining in um have a wonderful day and rest of the week as well see you see you next week again thank you have a good one see you guys play


Also, I just learned my camera, Jake's camera, two-shot. Is that what that is? That's the two-shot. Oh. Sorry. Because it shoots two. Go three. So you're sick. Yeah. I guess we should explain. Like, we decided to come to the studio and film two or three, which is, like, what we do. Yeah. That's our drop. That's it. And we picked today because it's, like, the only day that we have for, like, the next month. Pretty much. And then I got ill. Yeah. My eyes are running. My nose is running. My ears are running. They're not actually running. But they're dying. Like, it's only going to get worse. So you're going to be moany and insufferable to listen to? Well, what I'm going to try and do is I'm going to do the kind of forced talking thing that I used to do as a teenager when I got home drunk and I didn't want my parents to know I was drunk. And sort of, oh, yeah, they always knew. They knew, right? Yeah. But this is me pretending not to be ill. So, but there might be some sniffles. So editor Lucas, he's going to do an amazing job of editing all of that out. Cheers, Lucas. Hashtag. Thank you. No pressure. So. So. I, this is probably one of the most clickbaitiest titles. I've, well, not even clickbait, just polarizing titles. Well, the answer is yes. Yes. It is bad. Is reduced bad? Yes. Bye. Okay. I like your impression of the theme. That was quite good. Okay. So there is obviously a background story to why this is a topic now. Yeah. But first, just to make sure everybody knows what we're talking about, we're talking about the array method. So you have an array with stuff in it and reduce is one of these array methods that you can mutate or process whatever's in it. So you do specifically, you give it an accumulator start value and the function. Yes. And then for each element, the accumulator and the element will be passed in whatever the function returns becomes the new accumulator value. Yeah. And that just keeps going until the entire array has been processed that can be used for a couple of things that can also be abused for a couple of things. Many things. And you did a tweet. I did. Which was actually triggered by another conversation that we had on the side. Yes, it was. This was me sub-tweeting one of our colleagues. And I think we've talked about this before a couple of times. But we basically both think most of the time what reduce is or where reduce is used, it shouldn't actually be used. There's better ways of achieving the things where people use reduce. There's a couple of very few cases where it actually makes sense. One of them is like, if you want to look smart. Yes, absolutely. But I would, I mean, I want to point out that I'm not shaming people here. Well, actually, there is one person I'm shaming and it's myself. Because I definitely went through three phases, like learning code. First one, my code is very simple. And I didn't use things like regx and array.reduce because they were scary. Agreed. And then I learned these things and I learned all of the programming techniques of like currying, recursion, blah, blah, blah. And I thought, you know, my code, yeah, my code should demonstrate how clever I am to everyone.  And then I because if the other person doesn't understand your code, you are smarter than that person. Exactly. Yeah. Yeah. Yeah. And they should just get cleverer, which is really, which was like a lot of the replies that I got to this thread. But I'm now like, you know, I've been doing JavaScript which is just like. 20. Yeah. I'm old. I'm quite old. I look particularly old today with the illness. But I feel like I'm now in the third phase of my coding experience, which is like, I want my code to look like the code in a beginner's book. Like I want it to be that straightforward. Yeah. I definitely over the years I've learned to appreciate code that you can just read. And you're like, I understand what is happening. That is so invaluable when you have that in a project and you actually know where to go and fix it. And so that's basically what I want to talk about. So what I did is look at some examples. And I kind of want to throw an hypothesis out here where I think when you see reduce, it will fall into one of four categories. Four. Right. Okay. The first category is it's a sum or something that is like a sum. It's some like. Some like. I like that. The second category is it should really be just using array methods, maybe with some object entries and object from entries. And those things are, some of those things are new like from entries is particularly. Yes. We want to talk about that. Yeah. Okay. But basically sometimes I see a reduce that is just a glorified filter on map and really you should have been using filter and map. Yep. The third category is it's a loop in it. Yeah. Like just use a loop and don't do reduce to abuse a loop. Like they're just using the loop aspect of reduce and actually don't use the thing that makes reduce, reduce. Yeah. And the third category is hashtag I'm smarter than you. Yes. And those were examples where I looked at them and I just couldn't figure out what they were trying to achieve. So my theory is actually that these would fall into category one to three if I could understand what they were doing. Yeah. And I didn't put any examples of category four in here because otherwise people were just explaining the comments to me what this fragment does and that would just be, you know, point. In that thread, there was a, I was asking for examples as well. And yes, there was a lot of times where I had to just like really stare. And like I say, 20 years of experience. I'm not the smartest person by any stretch, but I was had to really stare at the code. And then, thank you.  And I would write it as a loop. And so much clearer to me. But then, you know, the code you write is always clearer to you. But yeah. And so I thought I would look at some popular projects, clone them and just do a code search for dot reduce. Spectrum chat. Spectrum chat is a chat. That is really cool. Should have figured that out myself. Written on the Sinclair Spectrum. With React Redux. That's all I remember. But I thought, you know, if Redux is in there, there probably is reduce in there. What was my assumption? And so I just used a couple of projects I knew, looked through the code and picked some examples of good examples for these categories that I have. Let's see them. So let's start. First category. I'll let you take a look and try to explain it. This one is a pretty easy start, I think. Oh, I see. Okay. Yeah. Okay. So you got an array of durations and you're trying to find out the maximum one. It turns out there's a better way to do this. Yes. It is that. Yes. There it is. I'm not sure if this is just a pattern that exists now because spread of the thing. But even before that, you could use apply or call. It's easier to read. Like the entire reduce just is more mental overhead to parse. So I think this would be a preferable way to write it. I heard someone actually say that this hits a limit of argument count whereas the other one doesn't. Now, I've not tested this. So I don't know what that is. Okay. But even then, I think you could fold out to a loop. Right. Or just, and at least contain this slightly overhead version and put in a function called max. Yes. Absolutely. Which just takes an array. Yeah. And even then I'd use a loop. Yeah. Because it would be faster and easier to read. This one I found interesting. Okay. Because I actually am not sure. Yes, you could probably write it as a loop. But it's, so the good thing about this example is they used reduce, but they contain the reduce weirdness in a function. So it takes, gives an array of values. Oh, I see. And you want to basically accumulate them up for each. And each one is the accumulation of the last IC. And as long as you put it in a function, it has a descriptive name. I actually kind of don't care how you implement it because the functions that use this function are going to be quite easy to read. Right. You could use a loop in here. I don't think it makes a big difference. So it's starting to get to the point where the things I dislike about, I've just noticed there's an extra line of this code missing. Anyway. What is it? Yeah, the final thing. Some of my brain's all on fire now. It's just starting to get to some of the stuff I don't like about reduce. And one of the, it's a problem for quite a few functions in JavaScript. The arguments are in the wrong order. Yeah. Right? Like if you've got a callback, that needs to go last. Right? Or it needs to be because the simplest code is read sequentially. True.  But it's still sort of sequentially. Whereas here to even start to understand this, you have to go to the end of the thing and then read back from there. And yeah. And also this is creating a lot of arrays as well. I mean, I know you didn't, you're not willing to talk about performance. Oh yeah. That's what you think. I think I mentioned it. I didn't want to talk about performance because I feel like the first order that you look, when you look at code, should be readability. Absolutely. Performance should be a second priority most of the time because, and that's only because we have reached a point where the community looks at performance first to the point where they have reached a point of return of investment is just not there anymore. They optimize things that don't need optimizing at all. And some people sacrifice with ability in favor of performance that they don't need. Right. But this is doing, it's sacrificing readability and performance. Potentially. Yes. I may most put this in because I wanted to show that if you put it in a function that has a good name, you can get away with more in my opinion. I absolutely agree with that as well. And even then actually, I would then take the opportunity to just put it in. Sure. But then you have it well contained. You can write tests. You can do the refactoring in one place. A lot of people don't like mutations. Yeah. In code. But if you're limiting it just to one function, it's okay. Yeah, I would agree. Definitely. The next one, I found that interesting. But it's one of the classic examples. Basically you get a, you get, you have a list of edges, which are between two points in a graph. It's trying to build the graph, which you can look up for a start edge, all the connection that a start edge has to all the end edges. And this is this example where you're abusing reduce just for the loop aspect. And the detail here is the thing that is put here comes out here and it's just returned. It's the same object every time. It's just a loop. So really if you have that, just use loop. And this is actually, I think, so much easier to understand what's happening because you create a map, you loop over the edges, you add sets for the edges if they don't exist yet and then you just add the individual edges to the array that corresponds to it. Yeah. If you, and now I know some people like, oh, but this is not pure. Like I said, like some people like the pure aspect. But the pure version is just not as readable. I tried to write one and it like, yes, it is potentially understandable. But I don't think that is worth for purely sake. Yeah. Especially because JavaScript to me is still not a functional programming language. You can write functional code in JavaScript, but it's not functional programming by nature or by design. Yeah. So like readability is tangible. It's subjective, but it's tangible. You can look at two things and go, that's the one I prefer. Performance is tangible, right? Even measurable. It's measurable. You can see that. But when people say like purity, it's like, well, but what do you get for it? Right. And I understand like you can actually gain a lot of reliability by avoiding mutations. But again, if you're isolating that into one function and the mutation doesn't happen outside of it. If small self-contained functions are your building blocks, then you can work with mutability inside those well-defined scopes. Because mutation is happening somewhere, right? Yeah. Those ones are turning to zeros and vice-versa. Okay. At some point. So yeah. Okay. Let's carry on. This one I found cute. And this is one of these examples where something that exists now probably didn't exist. It is flat. Right. And so I was like, okay, let's give them the benefit of the doubt because probably flat didn't exist at the time they wrote it. Yeah. So what they should really have been doing is just error. Which probably didn't exist at the time. Yes. But even then write a function that's called flat because when I see this code, I have to read it and like you go, huh, huh? Oh, it's flat. Yes. Which is a semantic abstract that makes so much easier to read. So if flat didn't exist, just write this code, the previous code, and put it in a function called flat. Yes. Absolutely. Which just makes it easier to read. Yeah. And again, even if I was writing that function, I would avoid the many array create. Oh, okay. Here we go. Yeah. Even then you would use a loop because once again, and I know that some people have problems with the whole, oh, you create a variable and then you mutate it in a loop. But I think it's easier to read. It's easier to follow what is actually happening. And if you're, yeah, trying to be strict about mutations, as long as it's held within one function, like we said, I'm fine with it. Couple more examples. So this one I looked at and I was like, holy crap, this is unnecessarily complicated. Because what they're effectively doing is they're creating an empty array which they are concatenating to and returning. So it is kind of like, oh, this should probably be a loop. So we're appending. And this I look at and then I realized, oh, they want to put commas in between the individual links except for the first and the last element. Oh, hello. It's joined. It's not, is it? It is joined. However. However. This is a list of VDOM nodes of JSX. Right. So a join that basically intersperses element between already existing elements and returns a new array doesn't exist out of the box. Right. I see. Yes. So this is actually a thing where this one would give you the wrong results. You can't just use join because the join returns a string. But again, write a function that's called JSX join or something which just makes it easier to pass of what is actually happening. So what it's trying to do is put the text node with a loop or in between. Right. I see. Okay. Yeah. Fair enough. Once again, I feel like a loop write a function. Functions don't cost anything. A loop would have made that so much clearer to me. I acknowledge it's subjective. Loop would also work, actually. That's a good idea. I just like in this case, you get a bunch of links and a bunch of issues and you turn each issue in its own link tag. The map here, I find very expressive. Yes. Oh yeah.  Like you could do it as a flat map. Exactly that. Yeah. So you, because you, it's valid to have an array where it's a JSX element and then a string, which will be a text node. Yeah. Okay. Flat map is the thing, which is also pretty new. Yeah. Again. Just write your own function. All right. Okay. So we've got the usual problem of just passing the object around and around and around. Yes. So this is basically something we would say write a loop, except in this case, we're building up an object. And when that's happening in modern JavaScript, we're building an object from entries. Yeah. So basically what they were doing is they just look at all the events that were there and creating a new object that has a function for each of these events. So in this case, you could just use, turn it into an entries list, map over the values, change them how you like, and then turn it back into an object. Yep. This is actually borderline readable to me. I feel like if this gets a bit more complicated, a loop might be easier to read. Yeah. And again, like if the idea is you're wanting to assign it to a constant rather than, well, actually even, you wouldn't, it would be a constant anyway because it's an object and you just rotate it right. And again, farm out to another function and it's fine. Yeah. Agreed. Now this is something you already mentioned to me earlier, so I didn't talk about it anymore. But this, so here's someone who put it in a function and wrote a comment. Really good. You're allowed to use reduce with a comment and an explanation like, I wouldn't have written it this way necessarily. But you put it in a function itself and it points to the person who wrote this. And you add together the top left bottom and right properties of each client track but keep within height of the first one. Right. Oh, interesting. So that's what they're doing here. And now that I've read the comment, I can almost immediately see that that's what's actually happening. Personally, I would have written it like this where I would actually make the code give the explanation and that I would turn each property into a sum. However, if this is a hot path in your code, iterating over your rectangles four times or iterating and mapping and summing, this could potentially be a performance consideration at some point. Yes. In which case you can turn it into a loop, a single loop. Potentially, yes.  Obviously, I'm likely to be releasing in the next month and just like to say, have I used reduce?  And, like, I used reduce a few times for adding stuff together. Yeah. The one exception was kind of similar to this. I had an array of client rect objects and I was finding the the bounds, the total bounds of all of those. And I am still into minds of whether it's a good use of reduce. You would find the minimum of top, maximum of bottom and the maximum of right, basically, right? Yes. So, you could map in Max and Min. Yeah. Would be fine. Potentially. More expressive. But, you know, as I said, this was put in a function so I'm less inclined to actually get annoyed by it. I really just dislike when there's like a reduce in the middle of a bigger function and then I have to stare and figure out what is the semantic equivalent of that reduce. Yes. And that's probably the, any tricks you do if you can isolate those into a single function. Because sometimes tricks make the code really fast. Yeah. Or if you are chasing file size, which probably shouldn't be, but if you are, yeah, putting that stuff into another function, even if it's only used once, a good minifier will be able to inline that. Yeah. And so you get the benefits of documentation and readability and you still get to use your trick in it. Yeah. Exactly. Do I have more? I think I have some more. So, this is a pattern I've seen quite a bit actually where this filter boolean application is basically a way to say, only keep the truthy values. That's quite, that's kind of cool. It's a fun trick. I would, I would only spell it out, but. But is a filter like F, maps to F, like it's also not much more expressive. I feel like this is actually a bit more expressive in the sense what it does. True. True. You could say it reads like filter the booleans from the other day attacks. Yeah. I guess it could also be misunderstood and I did actually write a piece of filter like F. Arrow F. Arrow F. And, yeah, in this case I was actually trying to get rid of the empty strings. Yeah. Yeah. Actually, that's good. I don't know which one and maybe I should have done F equals equals empty string would have probably been the more expressive way of doing that. So, what they do is they get the edges, they filter out the falsi values and then for each remaining one, they start with zero and if the node is seen, they don't increment the count and otherwise they do. So, they're basically counting the things that are not seen. I see. So, I feel like this should be done differently because what you could just do is like you map to is seen then map out the boolean and just say dot length. Right, of course. So, this is going to be either, yeah. Either it doesn't exist or it is. So, it's going to be false. Yes, yeah, that's much more obvious to me and it's nice that it's, one of the things that I like about the functional programming thing is it, for example, it's simple code is sequential. Yeah. And this is a sequence of steps that execute. And if it was a series of function calls, you have to read them inside out. Yeah. Which is not sequential. So, yeah, I like that element. Agreed. Yeah. This is another example. I think of a combination of things really where you just, they reduce over a list, see if it has a thumbnail and if it has a thumbnail, it gets pushed into a list. So, really, or if you want to use the new pattern that we just showed, you can map first and then just fill out the dirty values. Both of these work just fine. All right, this is all the examples that I have. Okay. But I thought, these are code examples from these real projects and some more, like this is real code out there. And I feel often you can have more expressive, more readable code. Code, not cold, although you have an expressive cold. Yeah, you're just making me feel bad because you're allowed to use reduce. It's not as wagging our fingers just saying, like, here's how we've come to the conclusion that most of the time reduce can be replaced by something that we would deem better. And it is something that like, let's say, I have made this mistake in code before and much worse mistakes with lots of tricks. Like, I often felt like going back a few years, my attitude to coding was like, I was doing all this smart parkour when I could have just walked down the street and got there faster. Yeah, pretty much. Even if you feel like seen by this, if you think, oh, yeah, that is what I'm doing, you're not alone. So one last thing I want to point out, obviously if you have these nice sequential type of a map and a filter and another map and a flat map or whatever, some people might be worried about creating all these intermediate arrays for the individual steps, which JavaScript will create under the hood. Like, one map will take the original array and create a new array. It doesn't mutate the existing array. It doesn't have a function applied to it. If people are worried about the intermediate values and arrays being created, there is also a way of doing this with iterators. Oh. So I'm going to plug a super old project of mine. OK. Which is called underdash, where I basically collected all the functions that underscore and similar libraries provides and have little two to three line implementations of them. You can just copy paste. So rather than having a library for it that you download and install, that you need. And I have it for arrays, but most of them also have a synchronous iterator and an asynchronous iterator version. So instead of chaining array methods, you could be working on iterators which basically prevents all the intermediate arrays being created. Yes, because it's passing. It's like a stream. It's basically streams. Yeah. Yes. And I thought, you know, if somebody is interested in that, take a look. It still exists on my GitHub. Yep. Yes. Yes. See you next time. I'm going to keep that ending. Yeah, I like it. Go for it. Our editor, Lucas, is really cool. Really cool. Really, really, really cool. Cheers, Lucas.