Okay, hello everyone. Happy Friday. We have made it through another week after noon. I hope everybody had a good day and a good week. Let's up here, so it looks like I have sound into OBS. We'll get there on the microphone off a couple previews here. Careful our chat's around to the top live on Twitch. Thank you, Mr. Certainly appreciate the heads up. How's it going? Devo Dessa. Good afternoon to you as well. Hope on greetings from Switzerland. How's it going friend? Hope on over there in Switzerland. That's pretty pretty cool. Thanks for tuning in Love the factory. Hello from Colorado and the Red Rocks. How's it going? YouTube is live. Thank you. See Grover. How are you today? Thanks for tuning in as well Dexter See Grover and Mr. Certainly as well as Patrick. How's it going? Happy deep dive day indeed. Let's see. We have the screen up right now, right? Yeah, we have the screen up. So Let's go. We can minimize this. Be out of gaff Graphs, excuse me be out of graph over there on the YouTube. How's it going? So hello everyone. My name is Tim. This is the deep dive program. So this program was originally started on Fridays by Scott, Scott Schalcroft, the lead developer of Circuit Python. This is a program where we work on Kind of like high-level, you know, pretty advanced stuff in Circuit Python We call it deep dive because we're really diving down into the weeds You know oftentimes looking at C code or at least looking at you know more complex Python code like libraries and things like that. So that's the kind of stuff we work on on the stream We can take a quick step back though If you're brand new to all of this and you have no real idea what I'm talking about a good place to start is circuitpython.org You can head there to learn more Also encourage folks that are new to join us on the discord Which is linked down below? ADA fru.it slash discord the discord chat. We are in the live broadcast chat I think they call them channels or rooms or something like that over on discord We're inside that channel you can join us there and that is the chat that is right below me on the screen right there So you can head there and ask questions or leave feedback or you know comments questions Interactions all that kind of stuff you can do in the chat there as well as YouTube How's it going Paul SK and K match and Nair doc as well as Shippu We're keeping up there. We've got lots of different languages of hello going on here, which is awesome to see Um, so let's see here Uh, let's see. We talked a little bit about circuitpython Um, I'll mention, uh, which the banner right here, of course says coming up in about a month from today is circuitpython day So the 19th of august is circuitpython day. So there will be You know more circuitpython festivities than usual friday on that day. There'll be a special episode of this stream Not a hundred percent sure on the timing of it If it will be in the same time slot or not possibly a little later It kind of depends on some of the other streams But I can let you know. I don't know if this has gone out on the blog or anywhere else yet I sent this Information over to catney, but I'm not sure if it has been disseminated further yet So if not, then we're getting the scoop right here My circuitpython day stream will be a sort of mini game jam. My intention on circuitpython day is to Try to build a you know relatively small, but nonetheless Entire game sort of from scratch using circuitpython. So I don't know exactly what game it will be Um, I don't a lot of times game jams. They do have a, um, you know a set time for The length, you know, they'll say like it's 48 hours or if you're doing it all at once Maybe it's like three hours or four hours or something Um, I think what I will probably do on that day is start with the two hour stream Try to knock out the game if we don't quite get it finished into the in the two hours Then I'll uh resume it on my saturday stream But I'll try to knock it out within like two streams or less I don't want to keep working on it over and over because the The the point of it is, you know, game jam games are meant to be built very quickly Uh, it's oftentimes like a hackathon type event where people do it overnight or something like that. So That will be my circuitpython day stream is a mini circuitpython game jam Session so if anybody is interested in games Definitely keep a lookout for that and I will also mention while I'm talking about it If anybody is interested in participating In a circuitpython game jam in the future not necessarily on circuitpython day this year, but at some point in the future Reach out to me. Let me know ping me on the discord or drop me a line somewhere I'm curious if folks are interested in this idea if other folks are then I may organize You know a wider game jam where we can all Work on our games and then we'll have you know, like a modified sort of show and tell type thing at the end Where we can all show the games that we have created. So if that's something that folks are interested in, let me know Let's wrap up the intro though because we have been going pretty long here Let me just mention one more thing here, which is that circuitpython. It's an open source project And it is primarily funded by this company right here. Adafruit though. This is their website adafruit.com So they are the ones who are paying the core team to work on circuitpython full-time as well as Other members of the team like myself to work on it part-time. So they are providing You know the financial backing for this project So if you want to help support the project one of the ways you can do that is by purchasing hardware from adafruit.com So definitely do appreciate folks that head over to adafruit.com and purchase hardware from them They sell microcontrollers of course that run circuitpython They also sell all kinds of things that you can plug into the microcontrollers to do with them Okay, so let me Catch up here on a couple of chats fun fact python is using quantum computing Quantum computers too. What a range app from microcontrollers all the way through quantum computing. That's pretty crazy How's it going there solo sailor on the youtube appreciate the the neat fact Hari Suresh, how's it going over there on youtube? Thanks for tuning in Let me catch up here. K match. How's it going retired wizard? Good afternoon. Isaac ben Hugo happy afternoon. Happy friday as well. Thanks and to you too Thanks for the reminder meant to take some pto on circuitpython day I think I need to put mine still in the calendar for that as well actually So I'll say back at you. Thanks for the reminder. Why is the text I wrote in portuguese? went into the sinkhole Probably the bot my guess is the bot might have deleted it the bot has a relatively rudimentary rudimentary list of like bad word filters and Sometimes it you know it flags things that aren't actually bad words or it flags things that it doesn't understand My guess would be that that probably flagged it and deleted it If that's the case, no worries. It won't like not going to ban you or anything like that. It just gets deleted Flag subword. Okay. Yep Let's see here. Happy friday in portuguese. My guess is it probably translates either to a What a word that's in the system as a bad word in english or possibly I think there are even some Some foreign ones as well. So you could have written it in portuguese, but you know If it's like a turkish, you know bad word or something like that. It might be in the list as well Just coincidentally or something How's it going here? Let's see Do the donations from the stream also go to ateafruit? Hope on the donations from the stream I'm not sure what you mean the donations from the stream You're over on youtube. Is there a donate feature built into youtube? I'm not familiar with it if there is But let me know what you mean like where you are seeing a donation link or button or Whatever you are seeing for that And then I can do my best to answer but I don't actually know Sure Set made another real-time show awesome. Thanks for tuning in. It's nice to have you Let's see. It was a subword. No harm done. What do we mean subword? Oh, uh, just like a word within a word like a substring of a word like it flagged it even though it didn't have Didn't have bases Charles Burnford good day tim really interested in the titled project. How's it going charles? Uh, thank you and yep, we're gonna be diving right into the tablet I'll mention as well. I think I didn't write back to you charles and uh, I apologize for not getting back to you sooner Basically, uh for folks that are interested one more piece of housekeeping for this week is The hack tablet. So that's what i'm about to start working on is this esp 32 s3 hack tablet And I was on show and tell this week this past week with kmatch to show off some of the Example scripts that we have created for it and we announced at that time that we will be giving a few of these things away Um, and so a couple of folks did reach out to me Um, and so thank you to those that did If anybody here is hearing about it now for the first time and you're interested What you can do right now is just go ahead and reach out to me on discord drop me a line over there Just let me know that you're interested, uh, and I'll put you on my list to ping when we have the the actual published Announcement which should be coming this upcoming week. I believe I'll probably be writing it over the weekend Probably tomorrow and then um, that's going to get published this week, which will have the more Uh full, you know, like instructions and information around this giveaway Uh super chats on youtube, uh, I am not familiar with that yet. It's the ate a fruit account So I assume that it does go to ate a fruit. I have no idea If they take it out of there or if it just goes, you know, I don't know what happens to it after that But yeah, that would be When we're streaming here, we're on the ate a fruit account. So that would be going over to them Um, but yeah, thanks. Thanks for that again. I don't know exactly where that goes, but uh, do appreciate that as always This is ate a fruit account. So yeah, it would go to them donations. Yep. Uh, let's see always a joyous occasion When it censors someone's monday name. Yeah Uh, yeah, I have uh, I have a lot of sympathy for things getting, um Picked up accidentally by bad word filters. I have I have a name that is Uh, very likely to get picked up by bad word filters. So I'm very familiar with uh Your name getting filtered out of stuff basically Yeah Okay, um, so we are starting on this. So the first thing really I'm gonna do is actually just look into the Either issue or pr because I think I saw go buy some further changes to this uh Which came in after the last time I looked at the issue Do this instead Let's go author Because I I want to say k match. Did you Have you started? Was it that I saw? There is a dot clock go 6049 was this Just got some more recent information or is there a pr somewhere as well already? Okay, there's a little bit more information. Yes, I made a first attempt to resolve Uh, the issue where it's reef Basically where it fades out if you don't refresh it essentially I do this instead blocked link Locked away maybe in the uh, you two or something like that. Let me uh Check this out Here Awesome. Yeah, thank you.  So I'll send you a ping What's that announcement does come out for other folks if you are interested? Um, but you don't want to you know, write to me right now That's solely fine as well. Just keep an eye out that uh, anoint that announcement will be out next week with those Uh with more information about how to get signed up to get one of these hack tablets Uh modified this line to force a refresh even when there are no dirty areas So let's give this a try if so it says here if current area How did you modify that basically just take out the ifs if statement Even when there are no areas Or is this the modified one? Maybe this is the modified one Okay. Yeah k-match Yes, okay. This is probably the modified one. So let's take a look at what's there In the current thing and see if we cannot apply the same Uh tweak that uh came much made and see if we can get it running on ours Our tablet right here and everything. I'll load it up putty. Where are we in putty? That's not where we want to be. Um How did what why would we be? buddy There Trying to go sea lion. But it's true. I see No pr yet. Okay Yeah, it's just saying uh go to Adafruit's website and then buy a board instead of chat. Oh Yes. Yeah, that's definitely Um much much appreciated either way If you do go to their website and purchase something then of course, you know, trip it to you and you'll have a fun toy to play with So, um, that's always fun Always fun. I'm always super excited on uh days that Adafruit deliveries are coming. What is it like this? This has like a whole table inside of it here. This is pretty fancy um So rgb ad is this? branch we want Well, hold up though because this is uh, are we in yeah, this is the idf actually Need to go to the python Actually had in this one New window There we go. That's the branch. I'm expecting. What is this load?  Maybe we'll see it here Plus youtube takes a certain amount from the donations Really like 30%? Oh, wow Crazy. Yeah, I don't know at all how the donations work. Um, hopefully on youtube or twitch even I have uh, I made what they call it. It's not partner, but like uh affiliate I Made it to affiliate finally on twitch, but I don't think I I gotta go fill some more stuff out to actually Start being able to take donations and stuff I kind of am interested in just keeping it free though and no ads and all that But you may not actually have anything All While that's working. Let's also go Oh, we don't have our like a view anymore or they call that context or something Um, right. We'll base one third third module, right And a third module frame buffer. I oh And then in my version it see three dish or an area Update merger refusing to merge unrelated history. Oh unrelated history. Do you have changes? This whole ID isn't Oh boy. Hopefully my computer is not going to freeze. We had a lot of trouble last week. Unfortunately tech trouble Way, okay, so it's just taken forever to load this window is what it is It deletes bunch of deletes STM stuff Of course, I also buy on the site, but I think a bit of color in the chat doesn't hurt It's all about the tablet today. Thanks everyone for them. Yeah, for sure Uh, dj devon, how's it going? What all the Okay, this one any isp idea Make a little more. So we did modify that No, though, I really know why these would have changed 19,000 oh Not available until an update is finished. Okay, maybe it's just not These updates I feel like these take so long inside of here I understand why I know if it is going though is one thing because this says it failed two minutes ago But then this Running so Unclear if it actually is going or not. Yeah, no hammering the the work has been completed Uh, we have no more No more power tools. No more hammering none of that stuff. We are in the clear now as far as uh auditory interruptions, hopefully The one bit that is left is they do still have the dumpster outside They brought a dumpster and dropped it off in the driveway I assume at some point There'll be a truck coming to pick that up and I guess that might be a little bit loud whenever they do it But I'm not Really anticipating them coming today But I don't actually know for sure when they're supposed to come I don't know. I feel like we're kind of stuck here. I don't get Not quite sure if this is actually updating Or what? Oh Project partially updated 19 commits Maybe main got merged back in It was 11,000 files. I guess there's quite a few files But really I guess what I wish is that it had a better progress like this is okay This tells me about how long it has left kind of in a way The one before was just like it is updating and It might finish some time Not very reassuring kind of This feels a lot better Updated this before I started the stream. Sorry that we just get a kind of weight on this here. There we go Okay, now we don't have any more changes except for the one get modules which I think I changed in order to Get this pointed at the right branch of ESP IDF That makes So let's just make a build here file unrelated Like I had trouble with something like this last time Oh, this is in the ESP IDF though Fetch sub modules. Did we do a fetch sub modules? I feel like that's likely to break because of the way we have a difference in the IDF, right? Because we don't have a build folder in here already See here. Probably we need to do this, right? ESP IDF Port make um I did also see Your message earlier came out and I also did not get a chance to reply to you today. Oh, this is like I we're building a new Website at work. So I've been like Start of the day to the end of the day working with my partner developer On this website heads down. So I didn't get a chance to do much Circuit Python stuff today or honestly the last couple of days during the day um I will say though you you asked about Let's see The bootloader. I do think it's worth trying the Whatever bootloader gives it the ability to use. Uh, I guess you have two You have two bootloader. I don't know if that's the name of the bootloader or not But whatever allows it to use that file if the ESP 32 s3 supports it, which I don't actually know For sure. I know there were some that didn't support it at least yet. Let's take a look here if we go innate R8 Does have a uf2. Is there a bootloader? Sometimes these pages. Yeah If two bootloader Here we go. I think it is worth trying this. I'll probably try it on on this one here Oh Oh, but this is s2 though and we're in s3 You okay Like I have an s3 spareboard to try the bootloader in case it breaks something Raise the previously flashed firmware Okay, I have done this process on a couple of on a couple of my esp devices a uf2 I'm pretty sure I maybe I don't maybe I don't know what that's actually saying I'm pretty sure I've done some of my esp like mag tag for instance I think I did my mag tag so that it shows up As the boot drive and lets you do a uf2. That's That's esp 32 s2 Sure And then I've done it with this thing The uh the flasher in the web I did it once with the esp tool as well actually It lists somewhere else But every time since then I've used this one web one works pretty good so far See did we get a build? Let's see see make output build board error one. What's back above Protecting Oh missing package. Oh, okay. It doesn't oh weird. Okay. You have to redo this every time All the missing packages Following python requirements are not satisfied IDF component manager That a pip install thing Get the manager seems like he's saying to use install And this because this said all done Don't virtual okay export fails with this But it tells you to run install and we did run install install tells you that it Click problem Okay Click eight. I wonder if that's gonna break cookie cutter or something. I remember at one point There was a deal with click where like the core used a different version or something So it is it. Oh, let's go pip Install dash dash upgrade They come after that one three. Okay Then install Next port Oh, okay. There we go. Now we got IDF build how You probably do a queen at this point That thing hasn't it Thanks, Gary. I got you on the list of ping once that announcement. Oh, we still something that's missing While hearing done Build files have been written to Getting from unfinished job figuring done generating done build files have been written to ring directory error Was this this was was this the file that you had to add at one point? This seems familiar to me that is French word I think you're LF Yeah the error I guess all that have been randomly sometimes to do a second clean and rebuild and it works It's something different for sure thank Well, uh, no, we got to same here ring directory over IDF I wonder if it actually has I'll end up here, but I don't know if it did before either I think it's the j4 introducing a race condition I wonder if we could go back to using it after we get a successful build faster around Oh, yeah, I think we made it to a new spot. Good call. Thank you. Uh Hey match and a shippu You basically just changed if I understood you earlier came at you basically just change this to be true inside of here or Conversely, I guess set this to a boolean of true Then causes it to always refresh How's it going axl magnus over there? Hello from europe. Thanks for tuning in appreciate it. That's awesome Get a heavy here We'll get this build and then uh, if this one builds successfully i'll change this I'll make it another new build. We'll install that second one That'll be the one with an actual I guess this one has all of those commits that we updated earlier, but I don't know that there's any difference to our actual Like lcd peripheral bit of it. Let me catch up here as well Of course that okay to evaluate watching a pro troubleshoot is very instructive. Thanks for sure. Yeah, thanks for tuning in. I'm happy that it is um Directive happy that it's helpful. Yeah, I do find it is nice sometimes to watch to to watch other people kind of like I'll say struggle and I don't necessarily mean just like watch them struggle But like work through problems. It's nice to see people Other people work through problems to figure out their processes like Even like more specific ones exactly. How do they solve? Particular problems, but even more general like problem-solving stuff. We did end up actually with the same the same error Um Without the j4 It really feels like it's not thing Correct idea the correct branch I do know that linker lf was like At least one of those specific changes on the branch that we are using although we're trying to be The one not in the build for let's look at the one in ports expressive That's Ah, see yeah, we do somehow we don't we don't have the uh On that in components And then there should be linker here Yeah, okay question though is this Use circuit that's on riko This one is actually a match Who did we put this Or here's this idea for the game match one I mean tablet I guess I didn't build inside of this project I guess it was actually that other one that we built inside of last time What we'll do But basically the deal is we don't have uh k matches modified espidf And the one that we're trying to build right now rgb add branch And way late. What's the context here? How's it going luger 718? So um It depends a little bit if you have even a high level like have you ever seen the show before do you know What the show is about and you just need context on the thing we're working on today or do you have no No prior knowledge about the show at all This is retracted Works to Let me know though if you I'm happy to uh happy to explain either and or both Let me know What kind of level you're at if you've ever seen the show before Um Need a remote first I can guess you myself branch Part of branch Okay, we just don't do new branch therefore we get an existing so get check out That made a new branch. I don't want it all But I can't go back either On that good to know never knew how to get back I'm gonna open Close this one I'm gonna close this one Should have got linker now. Okay Now try back with jr4 Okay Seems like it's going I'm gonna run to the restroom really fast. Sorry. I didn't go before I started I should have but I'll be right back Is why I like get desktop using command line for checkouts and branches isn't as transparent as a windows folder structure Yeah, I would agree. I do like visualizations of uh Of git that's honestly that was the the main reason I initially started using pycharm was because of the way that they Visualize lots of the git Interactions the activities and stuff Uh tim I have an idea for a learn guide about circuit python and github for students. Uh, where do I go to suggest this idea? um I would say a good place to start is on the discord. There is a uh learn guide authors Learn eta fruit authors. Um, so you could mention it in there Um, another thing you could do is uh since it's circuit python related you could just uh Especially if you're available on a monday to join the weekly meeting Uh, or even if you're not available to join you could still add it to the notes for the weekly meeting Uh, probably like in the in the weed section or something like that and just kind of like write out a little bit of details about what your idea is um And you know like if if you're wanting to work on the guide You know mention that or if you're wanting like you just think it would be a good guide for you know somebody else to work on You could mention that as well. Um, that's probably the the two places I would start with though the discord in that uh learn authors channel and then the weekly circuit python meeting Uh just in the weeds down there. Yeah, I mentioned a note for it And then we'll discuss it during the meeting You know if you're live if you can join us during the meeting then you can listen along and discuss with us If you're not uh able to join us during the meeting Then of course you could listen to the recording and see kind of the conversation You know go back and listen to the conversation around it Real-time closed captions and youtube work really well now. Oh, that's cool. I didn't even know we had closed captions turned on over there That's pretty awesome. Uh, okay, so we did get a successful build. We are gonna change this still to true before we actually Run this does c have Capital or no, this doesn't change colors. Okay, it doesn't change colors So i'll make one more build with j4 This one should actually do the forced refresh Um and then what we will do probably is we'll maybe try to add a argument to the constructor a boolean argument that's like Turn this thing on or off and then make it so that this is the switch if you set it to true then it will Do it this way where it forces it to happen, but if you set it to false then it will uh Only update if there is a need to if there's a dirty section So we got another build um I don't have the uf2 bootloader on it right now. So we will have to use ESP tool for the time being Or I guess we could try the web one as well I think probably the safest thing is to use ESP tool because that's how I did it before I will say though. I don't remember the command. Let's see. That's no good Some reason it's like not in the history for this session somehow these like sometimes Like the different tabs and the different terminals they like keep their own history somehow Feel like this doesn't have the same command there Nothing in that one either though Okay, match. Do you happen to have the uh that command that I think maybe you shared it with me before in fact Let me try searching Right here. I want to say this was last week when we built it Nice. Thank you Pretty much should keep a uh Let's file or something that has that in there One thing is we'll need to be connected to the other ports like right now. I'm plugged into What I guess is the usb portals and other tfts Um, so we are in this one, which I think is usb We actually need to be in the other one, which is uart And you can actually connect both and then you don't have to switch back and forth Which is pretty convenient Um, I don't actually have two cables plugged in right now. So we're just gonna switch back and forth But so you when captions are enabled, uh, it does mean the delay is longer So if you're trying to chat with the speaker, oh, that's good to know the trade off But I'm sure it's very helpful for many Yeah, I wonder if there's like an api to download the uh The captions that's what you were looking at that at one point I think maybe s patrick for the like note stocks to try to automate Captions actually forgot I think you mentioned that to me before That would be pretty cool if you could pull them out of there and use that as the starting point for notes, um Note stock although I guess it's so like stream of conscious. It's not really what you would want for the note stock. There is nice But it would help a lot because it would get the high points You could kind of cut some stuff out and then build the structure into it Eventually somebody could build a machine learning model. Maybe to try to extract the Primary points from the program or something not followed up and got a key. I got you So mostly I'm stalling because I'm trying to think if there's anything else We might want to do before we run this just because it is like a flash command. We don't want to But unless we're ready, but I think we are I don't think there is anything else to do so put a rib No module. Okay Module didn't we install oh, maybe it's this Python If in this we're like inside this virtual environment It's weird though because I don't have a thing here, which usually when I'm in a virtual environment It prints it here Yeah, it's just weird though because I installed it last time and I don't so like I know my root python the the main python on my computer has it Which I would have assumed was the one being used since it doesn't show one here. I just Now we got put into this environment And the IDE doesn't show the same way that it normally does. It's interesting I wonder if it has time stamps in it. Oh, that's a good point. Yeah, you would kind of need the time stamps And if it had them that would definitely be a huge benefit I mean it almost would have to right or at least it has to be in the database I guess whether or not they make it available in the api is up to google but It must have it in the database because it needs to be able to play it at the right time When it shows it while the video is playing Yeah But then the question just becomes do they make it available in the api which hopefully they would I mean you know if not It depends on how it comes out of there, but hopefully hopefully the time stamps would be available in the api like each each uh Individual caption would have some text and then a time stamp And you just have a list of those when taken all together Equal all of the captions for the whole movie. That would be my guess Okay It's like we finished up I will switch back to here We'll go to back over the one oh Oh interesting This causes the hiddenness to Well now that is fascinating the labels hide, but the circles do not Not a way to know without calling the api. I'm sure there are docs somewhere, but Probably right that it's going to be easier to just try it than find the docs. I'm sure Or something kind of the chat Great, where do I submit my notes again? Uh discord and meeting link thing. Yeah, the discord uh is linked down below Me there adafru.it slash discord and then head to that learn Uh learn author This one learn adafruit authors this channel here and then the weekly meeting I'll grab you the link from here, but you can always find it if you go to circuit python dev And then pinned messages and it's always the uh It's always the top message in there, so But i'll grab this link here and drop it in One for now as well Over there. Oh, I should let me put that in the youtube though since you're over on the youtube axle It's interesting that these circles don't hide but the labels do so Let's just verify that This change actually does affect that Maybe I don't know. Maybe I changed my Python code about it. I should open that up as well Maybe it wasn't right the plate. What? Excuse me Maybe it wasn't the right place to force refresh the first quick cry. I gotcha I will say it does Work it does seem to also force because we aren't um It would have been fading out by now in the other version of this. I'm pretty sure I could probably find another cable Do you have them both plugged in? Do you have to like? Do anything special before you run esp tool? Yes, not right because it's gonna find this one Gonna be there in addition to ACM zero which it will just ignore for me Try I'll cause some uh Try I'll cause some other glitch weirdness as shown on the video on the issue I grabbed the uh Do the video for some Oh Audio for a bit of firefox Some weird stuff in there sometimes Oh, I don't know same thing in chrome as well It might be worth trying to paste that video again It seems like it it's weird though because it calls it mov here, which is definitely a movie format It has this icon, but uh Browser is seeing it as audio instead of video. I guess it's inside of a uh It's in a video So still it has mov. I don't know that might be on my end I don't know what could be causing that Does refresh That's glitching Ending glitching on mine, but I didn't look at the bottom either Here's when the screen is stagnant with no drawing changes Hmm. Okay, we made it here Uh, okay Oh This is the same though It's also still not fading Not convinced we got a new build for that one Well, that's running. I'll take a look as well Get refresh areas Then if current area 30 row bit mask And reset the size of to zero's bit mask info All the current area is not null do a refresh area self current row 30 row bit mask Then current area dot next that loops over until it gets to null Swap buffer It does a core finish refresh on the docs for the awesome. What is inside of Fresh area At least in the file come from here But buffers would eventually triggers a refresh on the rgb peripheral. Oh, okay Basically like writes everything into the buffer and then calls swap buffer and that's what sends it to the display. It sounds like Build Plug this Bentley Back in I'm also trying to be diligent about Not plugging stuff back in super fast like knock on wood Very gently. Uh, sometimes when I plug in usb stuff my computer freezes up Which is no good But I think like when it happens anecdotally I feel like I unplug and replug real fast and I think I need to like let it chill for a second before Plugging it back in at least that's what I'm hoping is the cause because that I at least control So if I don't, you know, if I give it a second, then hopefully we can get it to stop happening It is uh, it does make it difficult to stream microcontroller development if There's like a one percent chance of plugging in a usb device causes your computer to lock up and stream to stop We got to plug in devices a lot with the reset buttons and all that stuff Let's take a look in here while that's running as well third module display. Oh core curious in chasing this back to figure out where Get refresh areas comes from What it does the logic inside of it supervisor shared this There either Finished I will say I ended up switching this background to White because it does hide the fading quite a bit We continually getting touch events that was odd It seemed like we were just getting events spammed Uh, even with this build though, we do still have this going on I am quite perplexed by Let's take the white back out because I will say the white um Made the fading effect much much much less renounced Was actually the main reason I asked back to black and this will hard Hard fault I think So that's another thing we need to trace down one of these days is the hard fault I suspect the hard fault will be tied in with The stuff that scott talked about with the display as well um Kind of assume that the results That the Conclusion like whatever we need to do that scott was talking about You basically make it so the display can live after the vm It guesses that the hard fault is tied into that Aspect of it as well. So once we fix that my thought is maybe it will not Be hard faulting anymore Hmm Definitely confused Back to how we were The source of the hard faults. Yeah, I'm not I'm not definitely not positive either But because it happens when it tries to reload my guess is that it's somehow tied into that I actually read that guess of issue today Started in may came out just so much progress since yeah for sure what I'm gonna do. I guess is let's This one did nj4 Probably clean too So now I'm curious if this one is different Maybe it's just I was thinking that we were the same with this, but maybe we're not maybe somehow FOMI tablet is in a different spot than ESP 32 s3 dot collect display I'm pretty sure I started from that one started foamy tablet from that one But we did have a lot of changes old early Maybe one of those got the build Copy again the I'll press enter when I want to run it not this hurt Better go now. Thanks Tim. Good night. Oh, yeah. Thanks Dave for hanging out. See you around Have a nice weekend. Yeah I don't agree with that dj That's just not a great work Oh That's dead Okay It is fading as well We do have other differences We have other differences here Why this is green now? I don't know if I copied it terminalers I did find that they're That it can run for a long time Like I've left mind running the touch demo for like a full day And just touched it every now and then throughout the day and it worked the entire day. It never did Crash or have any trouble, you know, I wasn't like constantly using it the entire time, but Every couple hours I would touch it, you know a couple a couple of touches and move it around a bit and then Yeah, it didn't it made it the the entire day from when I turn my computer on in the morning until I turned it off at night Uh, have a nice evening. Thanks cherry. Um, see you around. Thanks for watching if you're heading out or maybe you were talking to Dave I'm not sure about either way Um Okay, so we made the build with that set to true I will say it is actually It's actually kind of tough to tell if it is fading or not So it's starting in this case. It's getting a little lighter. I guess I also wonder if it's worth, um Changing up the display somehow Make it more apparent. I mean, I guess as we wait it will happen, but Okay, right now. I'm on Made the build. I'm pretty sure we did that after we changed it, right? I guess I don't have to switch it back Did switch Oh, yeah Now we can definitely Much brighter on the screen than the It looks much brighter coming through this camera feed here than it does looking at play Play is actually a bit dimmer Exit as well actually Dimmer from the angle I'm sitting at but if you point it Direct it gets it does lighten up a bit attention Able is gonna play every time unfortunately It'll be more consistent and go back and forth I do see some of that stuff down at the bottom there But we can see the uh, id if I Pull the downs behind We'll let it go a minute and see if it starts to fade Um, are you using vox audio vox auto mute or noise canceling or something the audio sounds a bit like Audio gate opening and slamming shut clipping parts of the words I do have uh an audio Yeah, I have a noise gate set up inside of obs Um, we want to go behind the curtains here a little bit You have this noise gate which affects my microphone coming into Any of the obs scenes which is then what's getting sent out to the stream Restream technically which then goes to youtube and twitch from there If anybody knows like good better Better values or anything like that to try in here. I'm definitely open to Trying stuff. Honestly, I just kind of guessed at these numbers. I think maybe I looked this up online How to do it the first time I enabled this and just kind of like tweaked the numbers a little bit I don't really actually truthfully grok what they mean. So Very possible. There's a better, uh Better setting for it I used the twisty knob demo and left the screen for a while and it Left the screen for a while and it faded out just one click on the knob again and it Figured the refresh perfectly back to where it should be I think since these clock displays work differently than ones with built-in memories We need to call the refresh each time the auto refresh Code triggers Was not live and took off my headset and it sounds better now. I got you You to call the refresh each time The display auto refresh code trigger It seems Into me at least it seems like it's not doing the fading So far, I feel like we got it relatively quick last time, which of course this would reset it That at this point it would reset But we'll let it sit a couple of minutes and I feel like last time it did go pretty quick I wanted to do one way to do a double check is think of it as basic math check for basic qualities It's it'll work if not double check it again Young man. Yeah for sure. Thank you Great insight. Thank you. Cheers macOS Who's who's seriously bad didn't notice the noise gate at first, but don't hear it being distracting or cutting off words on my I should do some testing one of these days and like really do a bunch of Maybe like record real quick a little sample and then like figure out what the values What values are actually best? I have seen less of the Stuff at the bottom it seems like we got a couple right at the beginning there and then this is still live, right? Okay, yeah live anymore I'd see that and I'm not Any fading as well Definitely did see the bottom stuff initially Um really what could cause that I would guess your I would think your guess about the refresh rate would be That's probably the best guess I could have as well, but I saw that you did mention slowing it down with displayed at refresh Target frames per second minimum frames per second same result Did this actually slow down the refresh rate? I wonder maybe this doesn't actually take effect Have for refresh Well, I had this It accidentally bit flip or you could get into a black hole depends When you start doing theory Oh It is actually starting to fade eventually Does seem like it takes a lot longer though. Oh Oh, well now. Okay. Okay, but now it's hard faulted. So it definitely stopped refreshing which then is why it started fading. Yeah, yeah, okay I think we still are good though. I think it still didn't start fading until Essentially until the code stopped running. I don't know if I trust the refresh rate That didn't actually do anything. Yeah, that's what I'm gonna try to see here because if this is actually oh, wow We got a lot of this now. This is actually quite a bit more pronounced this time interesting I wonder if the white and yellow is a clue Like it's making that same sort of thing each time I get it a little bit even when this draws as well Yeah, this it's definitely still faster than one frame per second They're a maximum If we try 10 frames per second If we still see the same glitchiness or not, this would tell us Well, this might help suggest whether or not slowing down Will help with those yellow and white things Because if this one doesn't have it then we know like we're gonna be refreshing at a much slower rate No, it does still and then this is actually like chunky now. So Is it even just a tad slower? I don't see those frequent hard faults. Wonder if your power supply is an issue very well could be it's on a usb hub Which has about a billion things plugged into it and no external power Uh and at least one of the things that's plugged into it Uh to put it politely let's say has wonky usb wiring Or or the hub itself does Or more likely honestly one of the things plugged into it and the hub itself. I have uh Noticed like some weird feedback where I can have like the camera plugged in And it powers something else even though the computer is not on like that shouldn't really work through the hub Um, so it could very well be the power to me. It seems like every time it I get a hard fault essentially any time that I save code pie and it triggers the rerun That is when I get the hard faults pretty much consistently. I think Okay, we're definitely much slower only two frames per second. We're very chunky on the refreshes But we are in fact still seeing that weirdness. I bet you That this must be getting called quicker than Refresh in here. That's my guess. So we're gonna add a print statement in here Oh except for I still don't have memorized the right way to make a print statement. I really wish Uh, I need to learn a good place to reference this. I need to add this to the dock somewhere But I never know I never have a good spot to reference this from And I just don't write it enough It's Thing is there's also not that's what we mp print f mp plat print message New line So my theory is that we're gonna see this spammed much faster than twice per second The theory is that this is actually running tighter than The display calls from our code pie Catch up here Signal gates for audio can be problematic since one they don't adapt to gradual changes in the background levels Yeah, for which for me is definitely relevant because the air kicks on And also the fan on my laptop speeds up which creates some Ecent audio noise background Very few gates have soft knees to ease into and out of gating. I prefer to use a compressor device I'm a trickier to set up initially Like to be able to interrogate the actual frame rate Didn't paint your dragon come up come up against something similar with his dot clock implementation and the neopixels I don't know. I knew that paint your dragon was working on it, but I have not seen Uh some of the work sherry is a bot youtube. I guess is what you mean, which Does kind of make sense because sherry does seem to be saying Stuff that is uh not really related Or Yeah, maybe it's I mean, maybe it's related. I can't quite tell To allow for the magnetism and the voltage from your fingertips to be added to the current voltage and the static electricity Now I did not account for any of that stuff I would start with the hardware and work my way backwards And we call this wd-40 and we're at wd-3 now USB hubs it's hard to find a really good one. Yeah, anybody knows of a good one Let me know because I'm definitely interested Discord mp printf Other board that would mean just signal noise I would look up new physics by just george theoretical student and reno who aren't Maybe maybe tomorrow or next time I can try it plug directly in without the hub. Well, no, I have to have the hub because it has the camera The microphones and lots of stuff that's used for stream. So I guess I could try it off stream sometime without the hub in the mix What does yours do came match when you save codepie? Do you get So you don't get a a hard fault when you save codepie But it also doesn't Does it it doesn't rerun successfully does it or does yours? Maybe I misunderstood that Bring test for sherry. Yeah Let's go I wish there was a learn guide page at least a learn guide page It doesn't have to be a full guide but a page somewhere that showed The build process which there is a learn guide that shows the build process But on that same guide, I wish there was a page that showed The print statement. I feel like that would be a nice low level like If you're building circuit python, there's a decent chance you're gonna want to add a print statement But at some point you're probably trying to Add some new functionality or test some new functionality or Verify a bug or anything. Okay, it goes to repel via serial, but the screen stops responding Okay, so yours does not hard fault, but then the screen does still get get disconnected which kind of it does make sense because we will have to do I assume we will have to do whatever scott is saying. I don't quite understand it fully. I need to read through it again it's been a little in a little since I read through it truthfully but I suspect that ultimately the direction that he gave is what gets us to the point where the display can live After the vm resets Which I had assumed that that was the point when my hard fault was coming and that I had also assumed that that was happening on all of them Sounds like that's not though happening for you and it very well could be I would not be surprised if it was voltage related. It definitely Is pretty likely that In my setup the power is not clean But it gently the power is definitely not clean And there is a lot of stuff plugged in could Not have enough um amperage potentially especially at peak And it does the peak uh pull or whatever This does run a lot faster is basically This is one of our loops And then all the ones in between Those got called Internally in the core In between our refreshes Although I didn't turn auto refresh off Maybe we need to do this It is likely that the original hardware I don't see anything But still running Hmm, but it's fading out and we don't get any circles Does still seem like this is running much faster Could be I didn't put enough Um, I do bet that the original Hardware did you get power adapters with them by chance? Because I would assume the original thing probably had a 12 volt or at least nine volt um power supply I would guess It is a Large display Okay, now we are Okay Now now we're much slower so auto auto refresh was the key Because now it is not it's only now it's getting one refresh per actual code pie refresh it seems like Which is running fairly slow Even slower than one tenth of a second. It looks like to me, but You know what we don't see anymore though is Not seeing any of that stuff Oh interesting Power over ethernet. I have no idea what the specs of that are as far as like voltage or over ethernet. Are there any micro control? Uh, this is still quite slow actually It doesn't feel any faster than the previous time to be honest I well, yeah, I mean, I guess though That's pretty much what we're hitting is that one frame per second Well, you know what I think that that Started refreshing faster before it actually did crash So it's like it did live and the display did actually Connected for at least a brief second there You know, we can have high voltage but low current usually 24 volts. Uh, I see And that port on the back there and has an electrolytic cap on the main board Isaiah heathley dark mode. Yep. Definitely a dark mode, uh Dark mode enthusiast, let's say. There's a lot of dark modes. This I think this did help I'm not seeing this down here anymore. So you might try on your end again with the The one with the if true And then explicitly in your code pie turning off Turning off auto refresh and then also Using that Display refresh, which I think this you may have had already because I think I copied that from your issue Oh, wow. Yeah, it does have Quite a beefy little cap there. I don't know on I prefer to use auto refresh as pop if possible Set the frame rate rather than refresh Okay I think we should be able to I think this does prove that if we slow the frame rate down We will get rid of that weird artifact stuff kind of what I'm What I'm thinking with this angle And so then we could basically just uh Speak to refresh rate down somehow internally So let's see if we can affect that Yeah, I noticed it starts running right away. This is like after I saved It must have reset and actually ran But then eventually if it oops, sorry, then it reconnects and uh my case at hard fault But it totally could be just like when it draws to like initially turn the display on or something that could just be enough enough amperage to uh Some push it over the edge or whatever So this one is with auto refresh on We're seeing the artifacts earlier. Although, you know what we would have slowed it way down by adding prints actually I bet you we slowed it down by adding the prints prints are actually quite slow compared to a lot of the stuff that happens Did that go Maybe that gives a hint at what's causing the glenching. Yeah well I don't know that it I mean for me at least I don't know as much about it or I should just say I don't know too much about it at all, but It doesn't necessarily Point me towards what causes it, but it does kind of point me towards an idea for what might Resolve it which I guess maybe that's One in the same, but I think of it as like I don't necessarily know the root cause, but if we slow down it will get better. That's kind of my hypothesis Then the root cause is like going too fast, but Suppose the actual root cause is something A little more specific than that But if we can slow it down And it fixes it then that will work for me I wonder if we could just Make a limiter inside of here Does this have like refresh rate or anything in this rate below minimum? When you call refresh I go ahead of the rate. Okay, here we go Last refresh call remaining time Target milliseconds per frame. Where does that come from? Okay target. So that's like Okay Passed in What is it set to when auto refresh is on maximum seconds per real frame Passed in also The five chip is what does power regulation to an extent to I had to swap one once for my edge router got struck by lightning X Had a run. Have a great weekend. Thanks for the stream. Yeah, thanks. Ask patrick having a nice night and then weekend Based on the youtube chat. I now kind of want to know A wt-40 could help. Yeah Auto refresh is false. You have to call refresh from python. Yep. That's true. I believe gotta go This was interesting in terms of what might be done with it. Can't wait to see it working completely. Yeah for sure Take it easy charles. Thanks for hanging out Okay, took the prints out and now we do have that stuff coming back And then when when we touch in this case, you know, when we are drawing something else The drawing of the something else takes long enough that we don't see the glitches during that time Essentially, I think for the same reason we didn't see him when we added the print the print slowed it down What is actually responsible for calling? Refresh when auto refresh is true Because something would need to call this Burnover, right? Native frames per second There's spec sheet for that tablet. Um, mr. Certainly, I think linked us a not quite a spec sheet, but like a product Product sheet. I don't it may have had specs in it. I think it was pdf That's linked further up in the live broadcast. I think during a show and tell that link came in Probably as a spec for the poe requirement has quasi standard some here and some don't and then yeah, that's the model there native frames per second FB getter default get native frames per second And then 60 native milliseconds per frame 1000 divided by Frames per second. Oh, does it make sense to you that if this was 30? theoretically we would Our maximum speed would be half of what it was if we didn't make this change It feels like that's what that would do to me So we did have better luck at 30 frames per second as far as not seeing the glitchiness Maybe we'll try putting this on 30 I assume that means our native frames per second will get set to that unless You know, I my assumption is this is like Try to use this value and if it's No or not valid then use this value instead Um, I don't actually know for positive. That's what this does, but that's my guess. I'm not sure where this one would be coming from The only mention of it Nothing found the search doesn't work very well This project truthfully Well, I guess we're inside of ports though Got our build. Let's unplug Well, let me check this. Never noticed that native frames per second. Let me see what this link is 99 play refresh So but and this is the c side of This function I think let's play refresh Calls into this c code If I understand right But when auto refresh is on I wonder what Is there something else responsible for calling this like Maybe supervisor calls this or something Then auto refresh is on Speed tool 802 Uncompliant DOE standards nice I do want to try the uf2 bootloader. I may order You're still in stock. I may order an extra one or two as well Just to end up having I'm trying to figure out the architecture of frame buffer looking for where object rgb values are loaded into the buffer But I keep getting lost and distracted and challenged by my limited c skills. Does anyone know of a write-up that could help? I do not unfortunately I have a guess to your original question Where are the rgb values loaded into the buffer? My assumption is that this Involves the palette because the Display itself tends to store Fit maps with just ints and the ints are color indexes within a palette I don't know where it would happen, but my guess is the The display must be pulling those colors out of the palette somewhere To actually end up setting them into the buffer that goes to the display Unless the display itself also gets the palette object I would a dozen. I would think it's rgb values, but I also don't know. I don't have any real Like experience to speak of so these are all Total guesses shots in the dark if you let's let it run a minute See if we see any Thing down there. I have not so far We're pretty snappy here. There we go. It might be good to go Is it fading? I don't think it is This is making it look like it's fading, but honestly, this is the stream. This is the video stream not the actual display Yeah, it's still black. Got it straight on Gray into it at all We'll just let that run for a minute. I won't touch it that way. We'll see if it ever does start to fade But this might have this might have gotten us here setting the uh Native frames per second down to 30 instead of 60 Seems to limit the overall refresh rate With auto refresh on Which then seems to help the glitchiness But right up I looked through the sharp display code. I think there are two frame buffer style modules Can't remember the name of the second one One point the palette values are translated to rgb before being placed into the screen Buffer that's the holy grail is finding where that happens. I see Okay, Devin This would have been the ethernet poe power delivery. What's actually made it to the screen though is a bit of a different story Yeah, I'm sure there was internal Voltage regulator and stuff like after the poe before the Everything else probably the actual brain of the thing little android or whatever it was Um in there And the screen as well There's voltage. Well, I guess voltage is just a Probably a speck of poe Which I somebody mentioned 24. Oh, there's range here Right in front of my face That is quite a bit higher, but it would definitely get regulated down Go into the computer In the screen That could write a roadmap In case this is a good way to find links In between modules Well, you know, I've heard of this before I have seen this source graph thing I don't think I've ever looked at the circuit on one though So this shows you like connections or something like if I go shared shared module frame buffer IO Buffer display see Look like a neat one of their oddball display as well. There's an rgb matrix module or something like that I was being Yeah, I've heard of that one as well rgb matrix for the uh Proto matter slash Matrix portal type displays the big led boards. So I think we're good here. We have I still don't see any kind of fading Still looking dark, uh fully black to me when I look straight on This is still working fine We've got a pretty good refresh rate the same as we had before really as far as like actually noticeably Looking, I mean, this is basically as snappy as it ever was which is Pretty snappy truthfully for a circuit python microcontroller Um, you know what a telephone right like an android phone or an iphone running at gigahertz Probably can update faster than this but Pretty darn good for our microcontroller and it seems I mean it seems to feel the same as it did before to me. I don't this doesn't feel slower Even though we did chunk it down by half of the available Frame rate. I'm not sure it was ever actually hitting 60 Need a way to programmatically set it. Yeah, we could um We could just Add it to the uh Instructor Probably the best way to do it Add it there as another int and then it just defaults to 60. I am still curious. Where does it come from? It is I mean, there may be a way actually come to think of it. So I kind of changed it here there may be a way to To make this number come in differently because I I assume like we only use the 30 if this is null or something and I assume it is null in our case Which is what slowed us down But if we could actually find where this comes from, maybe we could change it there and then not have to change 60 here Where And shared module is my only even remote guess for where this might be coming from I'm not shared module, but shared bindings rather. Well, let's look at third module H. Is there any? No. Oh three results. Yes Get native frames per second fun Get native frames per second default 60 Clared in frame booker H There No, not there either For that so the function I guess it looks like it's coming from that function and it did have it Commented as defaulting to 60 We still don't get no Where did the 60 actually come from because that's just Let's look one more place. Let's look in shared bindings Uh frame buffer display C Make new If we have anything in here talking about frame buffer fill row fill row See grover fill row Or maybe fill area I think maybe fill row Or fill area might be where It is getting the color potentially So the only real experience I have with it was blink a display i o which is Definitely not the same as the core But it is written to you know, hopefully behave the same so Because in here I want to say I only implemented like I think there's like one main function of display and I was basically getting the colors and sending them to high game fill area Refresh display area Let's look at fill area on blink a display i o Oh, that's right. It's not on Group but then ultimately maybe tile grid. I think tile grid is the one we actually end up calling Yeah So but inside blink a display. Oh at least Uh inside a fill area. I'm pretty sure is where it marries up the actual color value With the pixel like taking it from the color index to the color value I think happens inside of here at least in blink a display. Oh, um fill row Inside a tile grid or a fill area. So you fill area inside tile grid catch up here Okay, right seems like there's okay. Yeah, we saw this one. I think the other one is is 31 a fill nice find I need a way to programmatically set it. So we talked about that adding it to the constructor would be awesome stamp you for circuit python microcontroller Performs like it's 200 years in the future compared to the tft featherwing. It's yeah, it's pretty fast Data frames per second is in the display i o display constructor. Okay Which we're not calling that one though. I'm not sure how it comes into play when we use frame buffer i o Though i'm running it on a blue for its sense quad stack with almost no ram and pins less left I've yet to even solder the headers on the s3 a zoom Get attention to that Data frames per second Yeah, I wonder where that gets called from though for this This stack Dull buffer sounds promising. That's likely at least for blink a super clue. Thanks. Yep Tile grid connection. Yeah Tile grid I think is there's going to be a lot, you know where there's smoke. There's fire I think there's a lot of smoke around tile grid because In display oland tile grid is what maps The palette with the bitmap And then tile grid is also what goes on to the display So tile grid then when it goes to refresh it does make perfect sense that it would be Utilizing tile grid to get those colors for each of those actual pixels and here's the actual mem copy This was inside of the Pressure area. Okay, so that gets all the colors and then does the mem copy Once it has them This has been running for several minutes now. It never did start fading. So I do think we got a good solution there Um, it does seem promising to look into the display thing here. Maybe we can initialize this display Maybe we're extending it I wonder are we extending it? So maybe we can just pass this to ours or if that works like that I doubt it That's making frame buffer And frame buffer display, but maybe this crashes it Certainly the stubs don't think it has that And of course at this point. I also changed it in the core. So we wouldn't actually notice if it took effect But we will notice those if it crashes recognize the argument Happened Quite passive would have to figure out where This ends up calling The display constructor if it does Or does it not use the display constructor because this thing Behaves like a display, but is not actually a display In which case, maybe this maybe this is just a gap in the constructor here Maybe this one should have that just like the display io one does If this is meant to mimic the display io one That could be Watch out. How great here I come. Thanks. Yeah for sure. I like the way you explain that I've been wondering uh wondering that about how great explains a lot. Thank you. Yeah for sure Sure Yeah, it doesn't seem like it does get it i'm thinking I think in we need to add it probably to the constructor here I think in this constructor should have most of the same stuff as the display constructor Or at least the ones that are relevant and this one definitely does seem relevant But I think I am going to call it a night there. We're a little over two hours So thank you to everyone hanging out in the chat definitely appreciate you all. Thank you Of course 2k match for this tablet and the wonderful project Helping us get straightened out here. Thank you for the clue on the um That you left on the issue there that eventually led us down the right road And we got what I think is a solution to that bit of it at least So we'll figure out how to work it into the constructor at some point and then From there, it'll be like better because then it's not just hard-coded in the core So I'll probably work on that tomorrow morning On the stream if folks are interested you can follow me on twitch to get a notification when I stream then That'll be tomorrow morning saturday at 10 a.m. Central time. That's when I'll be back So yeah, thank you to everybody else. Um Yeah, mr. Certainly dj debon k match, of course Seagrover had in the chat a couple of folks. I think left a little while back as patrick and Few others charles beata. We got a couple over in youtube. So thank you to everybody for watching definitely really appreciate all you folks Again, stay tuned for announcement next week about getting a hack tablet Yeah, also drop me a line if you are super interested in that if you do drop me a line ahead of time Then you'll go on my list and I'll ping you when that announcement is published That way you can be sure to see it and you won't have to just like watch for it But if you don't want to reach out now, you don't have to you can just watch for that And it will go out and it will be open to the public. So everybody will have an equal chance at this Thank you fascinating on use uh fascinating and useful on many levels. That's awesome. I'm glad to hear that So thanks everybody. Hope everyone has a good night. Good friday. Good weekend all that stuff I'll be back tomorrow and yeah