 All right Well everyone happy Friday Hit it through another week. Let's finish getting a couple of things set up here and Come on, buddy. What are we doing? It's wrestling my foot Octopus time going on over here while we do the introduction Good old octopus on a stick distraction protocol Let's go and see Grover so happy Friday everybody My name is Tim. This is the deep dive program. I usually go by foamy guy on github and discord That's where you can find me online This is the deep dive program on this program. We're working on circuit python Stuff generally speaking if you are brand new or you're catching this in the future and you don't know Anything about who I am or what that is Circuit python the best place to go to learn more to start out with at least a circuit python org So you can head there To give you an idea though circuit python is basically a version of python that runs on tiny computers called microcontrollers These connect up to the computer you write some python code You save it on to these devices and then they execute your python code for you And they can interact with all sorts of devices and peripherals that are connected So one thing you see here is these tiny computers come in all sorts of different shapes and sizes and they all have different stuff connected to them You know some are big some are small some have buttons some have screens and have alligator clips Some are cheap some are expensive some have lots of pins some only have a few pins All kinds of different variations of these things But the thing that ties them all together is that they run circuit python We can program them by writing this python code and saving it to them from a PC Circuit python is an open-source project all the development takes place out in the open on github as well as the coordination and things take place on Discord typically between discord and github pretty much everything that occurs in the project happens if you're interested in getting involved I encourage you to join us on the discord, which is linked down below that way ADA FR you dot IT slash discord that is also where the chat which is right below me down there is that we are Currently in the live broadcast chat room, which is a chat room that gets used when there are live streams going on there are other Rooms or channels I think discord calls them there are other channels on that discord server Which relate to different things. There's a couple of circuit python ones There's also ones for other areas of interest with technology and electronics So head over there if you're interested in joining us or if you have questions about circuit python or a different products or anything like that While circuit python is an open-source project like I mentioned It is primarily funded by this company a different. This is their website a different calm their hardware and software manufacturer based out of New York in the United States So this is the company that's paying the folks who work on circuit python full-time They're paying some folks who work on the project part-time like myself They you know very much are paying the bills that keep the lights on so to speak You know for circuit python right as a project They are paying the folks who are working on it So huge thanks to Adafruit and then of course if you want to help support the project One of the ways you can do that is by purchasing hardware from them since they are paying us to work on it So thank you to them and thank you to everybody who wants to purchase hardware from them How's it going to shippu just got your aid for order kiyoshi nice. That's always a good day We're we could probably focus a little better. It's really not the end of the world There we go So specifically today, I'm actually gonna be jumping in to an area of circuit python Called blinka. So if we do look back at circuit python org Today what I'm dealing with is under this tab here blinka what blinka is all about. This is a compatibility layer What this does is it runs on Raspberry Pi's and other single board computers Linux computers As well as micro python devices. So it's it's kind of two-fold what it does You know two main things one of them is it brings the circuit python APIs and libraries to micro python The other one is that it brings the circuit python libraries and APIs to linux with raspberry pi's and other sorts of similar You know single board computer Devices On YouTube how's it going beata and mr. Eon. Thank you for this. Yeah, you're welcome. Thanks for hanging out How's it going Paul SK? So blinka is this compatibility layer it runs in you know normal python C python as we would call it just the regular standard everyday python blinka allows us to use some circuit python libraries and some other circuit python Utilities that ordinarily would run on those tiny computers those microcontrollers But instead we're gonna run them on a fully fledged Linux operating system inside of regular python Blinka allows us to do that. It's like the the go-between layer that allows that to work So blinka is what I'll be working on today Later for it's been great. I'm in the middle of RGB cube Learning circuit python basics on the neo on the trinket neo key neo key probably trinky. Yeah, nice RGB cube, that'll be awesome post some If you if you're up to it once you get your build out there Definitely post some photos and stuff We're always happy to see stuff like that if you want to share any photos or information or videos or anything like that Over on the discord or Twitter there's a bunch of different ways you can share them But always love to see stuff that people make with with all the parts and stuff So that'd be awesome So blinka is where we're at today even more specifically we're working on blinka display. Oh, we are trying to update blinka display Oh to match the change in the display. Oh apis, which we made to the core a few weeks back So if we go to the core we could pull up that change essentially we We added a property for being able to set the root group Instead of calling display that show I think I put code in here somewhere. Yeah, so Old version or current version in circuit python how it how it You know used to be how it technically still is today unless you're using this cutting-edge brand new build is We have display that show Like this. This is how you get your group onto the display using display. Oh in the new version though It will work like this you say display dot root group equals and then you set the group you want to on there Instead of calling show you say I want to set my group onto the root group and the root group is the one that is visible on the display If you want to go to the terminal you can set it to this if you want to show nothing you set it to this That's the new API. We implemented this in the core You know in the microcontroller version of circuit python we implemented this a few weeks back now What I want to do is update the blink a display IO version to have these same apis I Have my Raspberry Pi here. We were on the camera a little bit ago. We have the Raspberry Pi there It's hooked up with the display. So we're ready to test this stuff out in that context I Think I did actually start this a little bit I think I have a branch. Let's take a look here. So let's do a fetch first of all Well, let's check remotes actually so well And that's actually a little tricky isn't it because I am Well, no actually this should it should work fine to check remotes So this project that I'm in here in PyCharm. This one's a bit interesting. This is actually I Have used SSH FS Which is a Linux utility that allows you to SSH to a device but create a connection as Though it's like a connected drive like a mounted hard drive or a thumb drive or something So I have used SSH to connect to the Raspberry Pi as a as a file storage thing that's mounted and then I have opened up this project as part of that mounted mounted file system so everything that's in this project is Actually on the Raspberry Pi even though what I have open here is PyCharm on my PC So when we're ready to be running stuff, we're gonna save it in here Then we're gonna have to use SSH to get to a terminal on the on the Pi and actually run it That's how we'll that's how we'll do our kind of dev iteration loop First things first though. I think I I think I have a branch and I pushed a little bit of stuff to it So let's try to find that and to start there. We should be able to just go get remote dash V This is gonna tell us all the remotes now what I will say is things are a little bit slower because of this SSH connection, right like The files are not actually on my PC So it's got to travel across the network saving and and doing stuff that relies on those files is a little bit slower There is only one it's foamy guy. It's marked as origin right now, which I don't necessarily care for I'm gonna go get remote rename origin foamy guy just because I I like to just not use origin because It's not specific Reeniam reeniam. It's a nice one right there. Let's rename that sounds better Okay Get remote dash V Now we got foamy guy. So let's go get fetch foamy guy get fetch foamy guy That is gonna. I don't know download all my new branches. I think I don't know the technical definition for what it does But basically it's gonna update the branches and stuff branch I'm looking for Yeah, it does not seem to be there right off the top ad bitmap catch display send examples main To be pixel shader palette items size props towered fix. Yeah, none of those None of those do sound like it. So I'll tell you what I'm gonna open on My actual computer here. I'm gonna open Look at a splay. Oh Set root group. I have set root group here. Did I not push that? Like if I pushed that I guess It's like I didn't push I don't see set root group there. So back to this one. This is the one on my PC I'm gonna try to push this Try to I revert All right. Here's what we do. We're gonna compare this to main There with set root group Starting set root. Yeah, there's one commit that exists in set root group, but not main. I Push that is weird, huh set root group get remote dash V. What are remotes on this get a fruit foamy guy This show pushes That's a commit from from two days ago foamy guy set root group How's it not show here? let's Figure out how do we get that? I mean I could push again, I guess but That not already pushed I think it's not gonna Do anything else because there's no Mits Hang up to date. I'm very confused. I don't know how to close these now that they're open I mean I don't get it. I mean it's here. It says it's pushed. I don't understand why we don't have it I need to get it on the pie. The problem here is this is On my local pc. I want to get the The start that I had there. I mean, I guess we could start over I could look at the changes I suppose we'll do that if I just sit here in flounder for a few for a few more minutes, but I don't understand why it's not pushed How's it going axle Magnus just switched to pie charm from adam Initial confusion gradually being supplanted by clarity proven to be very worthwhile. Nice Yeah, it does. It's pretty overwhelming at first. I will definitely say that it was definitely overwhelming to me as well um But the more and more stuff that I I learned how to use in it the more and more like stuff it does to make my life Easier, how's it going dj devin? um I don't I don't I don't understand shoot See this is What I try to avoid and I clearly failed Yeah So I pushed it to adafruit remote accidentally because I accidentally named adafruit remote as foamy guy Did not mean to do that Refresh browser Yeah, I think we got it nailed down now Yeah It's over here did not mean to do that. Um, I'm not going to worry about deleting that one, but what I'll do is, uh Try to get that into foamy guy now. So first let's fix our I don't actually know how to change the url. So I guess we'll just go get remote remove Get remote remove foamy guy. Does that work? I said remote twice Get remote add foamy guy Actually fix the url because I'm sure what I did is copy and then not fix this Get remote dash v. Okay foamy guy is actually foamy guy now get fetch So if we go push but then we change this to here I will need to uh Ask like the rest of the core developers the right way to uh delete the branch. I don't want to I don't want to like I don't want to risk deleting anything in there. I ideally I would never want to commit anything into there either I only did by mistake. So like Um, I definitely don't want to go try and to delete stuff and mess anything up worse So I will ask them how to do that or ideally hopefully ask one of them to delete it for me in the right way For now, though, we got it onto foamy guy. We should be able to use it there So let's get back to our raspberry pi project and then here we should be able to just go fetch again and actually get our new thing now and like I said, it's a bit slow because like we're You know ssh magic our file connection here. So Everything takes a second longer and and the pi is on wi-fi as well, right? So not only are we relying on that network connection that network connection is wi-fi going through a raspberry pi You know 3b plus or whatever this one is so Set root group right there. We're gonna check that out and take it a second, but it'll get there. There we go And then Probably we should start with just running the simple test again I will go back and look at that diff again because I truthfully don't recall Exactly what all I got done. I didn't do much Did not do much I started Oh, I yeah, really what it is is I started working on this and then I got into right away the differences between display i o blinka and the core display i o which was In the core when we set it to none we would show the terminal, but in blinka we don't have the terminal So it behaved a bit different. So that's one of the changes as I started working on show none What's the other change real fast? I had one more in the other file I think I just created a set root group. Yeah Oh Okay, interesting. Yeah, like pushed it down. I see weird. Okay. Yeah, so I added a print statement because I was trying to debug something I added set root group That's pretty much it so far So we need to actually make it call a set root group. We need to make a property We need to actually make sure everything's working fix any problems. So we still have like a lot of stuff to do We're gonna get back over to our raspberry pi. We're gonna just run the simple test As is right now just to see if this even works at all Um, this should not even be using any of the new code. So this is just going to be calling show using the old api Everything works right. This should just do the exact same thing as it did before Um, so hopefully that's what it will do Actually have a screenshot in here, which is not necessarily simple test Kind of interesting though. I don't think we want to do that honestly, I don't Think we I don't think we Can do that. That's not a method of display. I think what happened here is I was At one point in time. I was starting to add a save screenshot method To uh, blink a display object, but it turned out to be unnecessary. There's actually a, um There's already a screenshot library Um I actually made some tweaks to make it work with blink a display. I think this must be a very very old A very very old, um simple test That I must have been using when I was working on that stuff This is also a tell that it's very old right here max size, you know, I think I might actually just go ahead and uh Update this I know there's a newer one in On the Raspberry Pi just in a different place I think I'm actually going to grab that newer one. So it's actually over here pi mount. So this is the Raspberry Pi I think it's the home directory Go by list Yeah, unfortunately, uh, I have a lot of these I don't Have a lot of these, um Simple test. I'm just going to grab that To give it a new name. I guess so I'll try to paste it in here. I don't know if that's going to actually work Does okay, so hey get down buddy. That's not hey. Hey, hey, hey, hey Get down Thank you Uh, we will call this um I'm gonna just I'm gonna call this one a new api test We don't want to add it Okay, um This is setting those the text to hello world Which is actually if we look back here is already there So I'm going to change it just so we know if it worked right Well, we'll say deep dive While we're here, right Let's do that. I'm going to get an ssh open here Oh, what is all that? Oh, okay. Actually, I think it's just like stuff was too slow because of the file Stuff that's fine ssh. I no no I uh pi It's uh 119 Hero 119 119 169 whoops Ssh, so now this terminal here is on the pi. This terminal here is local even though they both say local I don't know. Can I rename these that'd be kind of interesting rename session Hi Uh, so to run this where we at we're just in home So we want to go inside the the project that we're actually working in so we're gonna go cd eta fruit Blink a display i o we're actually inside foamy guy right now. We're gonna go in there Now to run this we're gonna go python 3 api test new api test It's gonna do its thing keep dive. There we go. He'll dust off there What did kitty do? Oh, he was uh, he was jumping up on the Desk that holds the screen which he That's a new thing for him. I don't I to be honest with you Kind of I'm trying to think through let's give this a good A good think through I don't I don't recall him ever actually jumping up on the particular desk that he jumped up on just now I think that I I believe that I mean You know what he does overnight, right? I'm sure he gets into everything we tell him not to overnight, but As far as what I have actually seen I don't think I have ever seen him get up there It's like the desk that the screen is on for my computer Right now though, he just crashed out He was running around super fast be an honoree and uh tried himself out and he's just like nodding off here By the uh By the window I don't have a good way to pipe the camera and I really need to get some uh Some good ways to pipe in cameras Okay, so this did run it typed in deep dive or not typed in it showed it on there. I was gonna say it's a bitmap saver Yeah, yeah bitmap saver the library bitmap saver Is definitely the way to go if you want screenshots. I but I didn't realize that existed at the time I started writing that other other version of the code. Yep Really kidding. Definitely He's uh, he's he's a fun one. He'll uh, he keeps us on our toes for sure. Yeah, that's true He does he wants to play time. I think We'll get him run around a bit more When I was just starting I don't know if you were here when I very first started the intro actually he was here and I had the uh I had the old uh, I don't want to grab it right now because he actually opened his eyes and was looking at me So that might rile him back up But I got the old octopus on a string right here that I keep by my desk to uh play with him When he wants to come and play with me While I'm working on stuff and I was sitting here like Giving him the old octopus game while we were doing the intro just a bit ago So that's working fine. So, you know, bare minimum the good news is we haven't broken Display IO yet, uh with any of the changes we've made. So that's a good sign Um, obviously we haven't really done anything with changes either But you know, it's always good when you don't break something And so I think we probably want to just like Let's look at what we've done so far set root group we have So I added this to display core. We probably want to look back at The core one honestly Because we probably want to try to match the delineation between display core and display objects So in the core on our display object, we made the property for setting the root group We did that on all our types of displays In the display core The display core We actually changed Yeah, in the display core, we actually changed show to set root group because in the display core, it's like completely internal to the api nothing outside the System is intended to use display core. So I've actually added set root group. I think what we want to do though is Delete that and just rename show All I did was copy it. I don't think I changed anything else yet, but I'm not positive But I think we just want to rename show as Set root group because that's what we did in the core. So we're gonna do that and then whenever we call Actually before we do that I'm gonna go find usages So we found so so I just control clicked and now we're inside of display object So we were in display core. I control clicked show. That's gonna find the usages That's gonna find the code that calls show In this case that code was inside display right here So display also has show and it's actually just saying self dot core dot show So right here, we're just gonna change that. In fact, actually, we can make this even easier One of the amazing things about pie charm I don't know why I didn't use before but pie charm has a refactor rename. I could go shift f6. I could highlight this thing I go shift f6 Rename. We're just gonna say this is gonna be now set root group Refactor that's gonna go through the whole project and fix that usage of show inside display core So if I save this And if we go look back at display here what we're gonna see boom This has been changed now to set root group. It will only do the core ones, right? This is still show here because that wasn't core but Any place where it was used that will rename it for you So super handy if you're like refactoring your code you want to rename a thing to a new function or whatever Is it possible to fix the glass? Uh, no on my display you mean ha no I uh, unfortunately it took a uh It took a tumble off of my desk here. I what I will say though truthfully is that The the camera and the light that we're picking it up with exacerbates the The crack a lot if you just look straight on at it with the eye the naked eye you don't really see it truthfully Or I don't really see it like You have to kind of look for it when you're looking at it straight on but because of the glare It's like super duper obvious in the camera Um, I should get a I should get a new I should get a new one of these honestly This is like this is very old. I I want to say this is like one of the probably first like Probably four or five eight of fruit things I ever had was this raspberry pi display here Um I'm kind of curious will the page show it to me. Do you think I don't know if I'm logged in If I'm logged in will look if I'm not logged in then I won't mess with it Well, I guess is it Okay Yeah, I know it's two factor. I won't mess with it. I don't mess with it I think that was like one of my like literally one of the very very very first things I ever bought from eight of fruit ever Um Way way way way back was this display. So it's been through a lot for sure I should pick up one of the newer ones you can tell it's one of the super old ones too because It has the original raspberry pi header not the newer one with the bigger thing It's also like square the more modern ones of these Uh the eight of fruit device they don't uh, they don't overhang here. They're like nice rounded corners and they match The size perfectly I believe But this one matches the old school like original raspberry pi The regular one with the ports that were all on like every different side, you know Should never yeah. No, I definitely I definitely won't be Have a crack just like that on your uh phone screen protector. Yeah, if it works, it works. Yep That's how I am as well renaming a show. Oh, let me catch up here possible So let's see is it already is it already at the step for renaming show? Okay So important distinction the one that I renamed is only inside display core Which is a completely internal api. So while I renamed it. It's completely internal This does not actually affect any outside code yet. So To your point, this is not renaming the api that everyone will use This is renaming the internal portion of the api That the one that everyone uses turns around and uses but but they don't have to know the name of it So We renamed the internal one the the last step the very very last step when circuit python 9 or whatever comes out That will be to rename or technically really at that point. It'll just be get rid of The old api the old show function on the display object Yeah, good question a cat related tumble Uh, no, I think that one was on me I don't recall the the specific circumstances, but I think it was on me and not the cat New here. Is there a possibility to do a c-sharp equivalent code for adafruit displays? Oh interesting question I do not know of any way to Interact with the display using c-sharp. I will say I don't have very much experience with c-sharp at all um I did a tiny bit of I took one sort of programming like intro to programming course in c-sharp At by the time I took that I already knew java. So it was not really intro to programming for me, but it was intro to c-sharp um I did one other thing with c-sharp beyond that class which was working on siftio cubes Which is what was an old like interesting little toy thing That had a c-sharp api Those are the only things I've ever done with c-sharp personally if there is a way to Execute c-sharp stuff on a raspberry pi um and if there is a way to In particular write c-sharp programs that interact with the gpio pins If that is possible Then it should be possible to use this display from c-sharp I can't tell you yes or no that is or is not possible. I don't know the answers to it to like really either of those questions um But I can say you know if it's possible to write c-sharp programs on a raspberry pi that use these pins Then it should be theoretically possible to use the display now Whether or not there's a driver built for it or you would have to do that yourself Whether or not you'd want to find some glue maybe to python so that you'd kind of be Hooking up to blinka since blinka exists already and can drive this like that might be one avenue There's lots of ways it could work. There's lots of potential hurdles and things to work through Potentially lots of effort that would need to be put in to make it work, but You know technically speaking. I think it should be possible again as long as It is possible to write c-sharp code and use those iopins Then I don't see any reason why you could not ultimately use the display Uh, the private api. Yes, that's the yep private api is the bit. We're uh, bit. We're changing right keep forgetting That's uh, still yeah long hurt. Yeah Yeah, I will be way down the road by the time we actually change the real one You had an os which can run c-sharp and a board which had iopins. Yep Generally speaking. That's pretty much the the just of what you need And and I will say too. Yeah, it doesn't necessarily have to be raspberry pi specifically Um, maybe there's another little single board computer that is made with c-sharp in mind or whatever right like if that exists then Um, then it could be that device as well and theoretically it may be possible Yeah, so yeah, sorry. I can't give you like more more specific Detail on it, but um good question nonetheless. I do appreciate you hanging out and asking Always good to get folks asking stuff So so there we should be good and now we've changed it from show here So let's run it here, right? We only made one small change, but let's make sure we haven't broken anything Uh, yeah, we can't run it that way. I guess I'll change this again. I mean it's Be nice. I almost want to like maybe we should have this do a random number Or something that will change each time. I don't know Okay, so it's actually still running. So I'm going to do control c to stop it running Uh, once it stops running like really nothing happens though because the display Doesn't refresh after you stop it. So like if we go back to the camera Let me find the camera. I got too many windows now It's the I think I did it on the first one So it'd be easier to see and then I just messed it up went right past it anyway Camera's there So it just keeps running, right? I I close that I control c to stop it, but it just stays there Well, but what we can do is just rerun the new one now and it'll show the uh, the new stuff, hopefully You know that or we broke something so we'll see there as well Okay, looking good blink of display. Oh I haven't broken anything yet So That still works one thing I want to know is what happens on blink of display i o Particularly on a raspberry pi when you show none So we're gonna go time dot sleep three we're gonna go display dot show none print showing none Stop that one Run it again. I'm not defined X It's deep Interesting it doesn't oh it doesn't have a python Interesting. Yeah, that's all right. We'll just go to import time It might be nice if we gave it at a uh an environment, but Probably wants time first honestly if we run pylon or whatever I think it's gonna cry if we don't put time first Or at least before some of these things all right one second. I gotta see what little man's getting into here Rubber band piece don't want to necessarily play with that because we'll try and eat it Okay, um Yeah, so it we I suppose Yeah, we'll rerun that and let's see because I don't actually know my prediction here is that show none In blink of display i o today basically won't do anything. I think it will just keep showing what it has Yeah, oh Going okay. I oh I added uh I added that maybe Showing yeah, I added this Yeah, okay because I started working on this The showing nothing and so this was actually this was a difference between Core and blinka because in the core when you would show none it would show the terminal but in blinka we don't have the terminal So like the the behavior had to be different But what we do want is we want to match the new behavior in the core When you set root group to none what we want is to show nothing to show Darkness right the screen is off none of the pixels are lit up Always do time then board uh mu does have the ability to suggest the orders So if it's bad otherwise it won't complain. I gotcha. Yeah, I think pilot maybe or black one of the one of those two Complaints as well if you I forget the wording it says something about a built-in module after another module or something All right, I think we don't want to do this for right now. That's just spamming So I suppose one question is do we want to go backwards and make it so that show none Shows blank Or do we want to just leave show none alone and only handle set root group I kind of think we want to do show none is blank because In the in the core in the actual core when we did this we wanted show none to keep its same behavior to go to the terminal But the behavior here in blinka is pretty much incidental anyway. It's not actually doing Anything really it's just not doing something. It's not doing the same thing the core does because we don't have the terminal Yeah And I actually did solve this problem So different part of when I worked on this the other day part of what I did was work on my pie game display And I implemented it to properly show none inside of there So I think I'm gonna steal that And I essentially had to just draw a black rectangle if I recall correctly Will I need to refresh? I'm not sure if I'll need to refresh Okay, we already have buffer equals image new we already have buffer paste so we need the the bits in between there Draw so this creates an image draw. This is a pil object right here. Whoops. Whoops. Whoops. Whoops This is a pil object for being able to draw inside pil images, which is what this is We're gonna draw a rectangle. It's gonna start at zero zero. It's gonna Be the same size as the image height than width same height than width as the image And it's gonna fill black and then we'll see if this works I'm not sure if the refresh is gonna work. We might need to add that flag that force refresh thing there Um, so we'll see if it if it still doesn't refresh. So let's scoot that over. Let's go back to our camera Go back to our terminal Run that one again Don't unblank sounds logical. Yep. That's what it will do In the long term ultimately when we get all the way to set root group the new version, that's the behavior we'll have but on Uh microcontrollers we wanted backwards compatibility. So on microcontrollers if you use What I'll call the old api the dot show api It will keep its old behavior for none image draw is not defined. So I just need to import that I think Um, I almost do think I want to just choose this Because then stuff like this will be Oops I could just go like this number. Oh, it's actually it's not. Oh, I was on the wrong one here. Let's do that import Yeah, I like that In this case, I don't actually know which one it is. So it didn't help us draw Just top level image draw. All right. We show our label. We wait three seconds We show our none We're supposed to be showing none Quite showing none so well, but I think that's going to be that our reset refresh thing. So this other bit of code we had Here force refresh We want to do that So breaking it down a bit the way this ordinarily works the way this used to work so to speak is um This is inside refresh. Okay So this function gets called quickly multiple times a second if everything's going right It's called very fast and it it prepares the image that's going to be drawn on the screen It creates a pil image that essentially is this picture right here It gets the bytes inside that image and it sends it over the spy bus to the display basically um but It chooses which parts to send to the spy bus based on these sub rectangles Uh, we only actually refresh display area on the sub rectangles that have changed And in our case, uh, there's not going to be any because it doesn't know that anything changed So like if we went print Self that sub rectangles here, it's going to be an empty list Which is why our display is not actually changing Because we didn't refresh display areas any part of the display Okay, so we have so at the beginning there, you know while we were waiting our three seconds Everything was fine. We were getting like an actual object there, but then afterwards we got an empty list So after we did show none, that's when we started getting no of these refresh areas Uh, and we just need basically the same thing here. So we want to go Not here but here Forceful refresh equals true and then we'll have this logic here, which will Basically make a rectangle that's the same size as the display Treat that as the refresh area that actually needs to be refreshed Go here I get the right two of these so I could copy back and forth a little bit better so We had this logic Now this is going to be here. No, it's going to be uh Here Else we all need print Uh, regarding c sharp equivalent, not sure what you mean by equivalent circuit python is not that different in theory from c sharp Uh, I'm not sure how I used equivalence. Sorry. I'm not sure exactly what I said anymore And I'm not sure what you mean I mean circuit python is I mean, it's fairly quite a bit different than c sharp because circuit python You know actual circuit python not not blinka like the stuff we're working on here is blinka But actual regular circuit python is going to be much different than c sharp because it runs on those microcontrollers those very tiny Uh computers not like a fully fledged operating system like windows or linux Um, you know in that they're both programming languages in that, you know You write code in both of them and it's like instructions to the computer The computer executes that code in some way or whatever like In that manner, they're you know, they're obviously pretty similar But in terms of like what things they can run on and the syntax of the code and stuff that I would imagine They're definitely Pretty different that being said I don't remember that much about c sharp the in my memory It's similar to java, but I actually learned java first So like I always related it to java anyway Maybe I became biased because of that Uh pylon usually has a couple suggestions about import ordering Since none is terminal on mcu's uh, then there could just be blank for blank Uh, yeah, we could make a new constant for blank. I guess I think I I'm gonna I think I'm gonna submit the pr with none and if anybody Reviews and has to change it then we can certainly change it But I I like the idea of none showing none honestly Um, if it were fully up to me, I'd actually be a bit more aggressive in the deprecation If it were fully up to me, I'd say even starting now if you do show none You'll get nothing instead of getting the backwards compatible Um terminal, but it's not fully up to me and scott recommended the opposite way So I'm also happy to follow scott's recommendation for sure Um But we'll see on blinker I feel like blinker is a bit of a different scenario than the core because of the way that it doesn't actually Do the thing um when you when you show none anyway, so I think it makes sense to do that now in this case, but If not, then we'll change it up there as well once I got over that my code is working fine So why the suggestions attitude pilot has become a great python mentor? Yeah, that's a good point. Yeah pilot it it's easy to To just look at pilot as this annoyance that's like, uh, you know change this code change that code Why'd you write it this way or whatever? But over time if you do start to internalize some of the suggestions that has for you You like you find that you know your code does start looking a bit cleaner a bit nicer a bit more consistent A bit easy to read or read over and understand so It is nice suggestions on fully working code Uh, yeah, so from pilot's perspective, it could be to help optimize it. It could be to help Make it more legible. It could be to help keep it formatted nicely things like how many times You know it nests like if you nest more than four times or whatever and it's you know too many indentions like It'll flag that sort of stuff. It's it's generally to kind of like pretty up Pretty up your code Some of that is efficiency some of that is legibility some of that is briefly just opinion and syntax, but all those things kind of combine to Clean up pretty up your code a bit I don't think you can allow a literal blank. Um As it probably requires some type. No, yeah, literal I think we'd have just a constant called blank or something It'd be it'd be actually like zero or nine or it'd be something. That's that's an actual thing, but Yep agreed there got a definitely got to defer to scott's expertise on All things circuit python and core related for sure and and I think scott did a lot of the work on display io as well so like obviously I'm gonna be going with whatever he thinks on any of this stuff Um Is our else? I don't think our else is right yet. Let's see. What do we have here? We had Okay Oh I see Okay. Yeah, okay. We did have the full else in here I suppose in this one I could get rid of this print as well. That's gonna be spamming but We actually just do all of this inside the else Uh finish will just happen here. I think that part's fine Okay What is this yellow Might be referenced before assignment I mean I see Yeah, I see else. This is else. So if uh if this was true and we did this one We won't have that so we actually need I guess, uh horse full refresh false okay Yeah, pylint is a lot like pie charm, right? Like this thing highlighted this yellow is like, hey, like, are you sure this is how you want this? Um, you know, maybe in in some cases might not gonna do what you want So make sure that's actually what you want pylint's a pretty similar Kind of tool in fact the thing pie charm is using it might even be pylint. I don't know it's it's a linter I don't know if it's the same one, but That's kind of the idea is it will try to point stuff out to you that that might be Actually problematic like in my case there was actually a path of code that it didn't consider which probably would have raised an exception or something Um, or it might just be like, you know, hey the best practice way to write this line of code is this other way or whatever So three seconds of our label Show none boom got the black screen there. Perfect That's doing what I think we want it to do again. We'll see I'll submit the review I'll submit the pr this way. We'll see if If there is uh other ideas for what it should do when you show none Um, but I think that's what I think that's what is best as far as I figure so far thinking about it Uh, see grover. I felt that way about mu but my code is always Uh, gorgeously laid out and forced me into great habits. First, I wanted to hold on to my bad habits bringing over my php Uh, which is a bad idea to bring over the php syntax habits Uh, into cp, which is a bad idea overall move force the formatting and pylon is great At the end of the day sharing code on discord And get hub, etc. Yeah, that's true. Yeah, pylon. It's really nice like if you're if you know, you're writing code to publish it's definitely worth the extra time and effort to um Get it cleaned up that little extra bit just to make it, you know, that much easier for the other folks to use it so Whatever, uh, everything I write in utter mess usually have lots of old comments commented out codes and things like that Um, or stuff that I was trying from code that was grabbed elsewhere Yeah, I'm with you kiyoshi to be honest with you. I'm 100 percent the exact same way What I will say though is like contributing to circuit python Uh, and having to go through the exercise of cleaning up the code and the pr actually Got me to be a a lot better. But to be honest like I am I I certainly was and frankly I I'd say I still am the exact same way Uh, when I write something out just for the first time It is exactly like what you described. There's there's massive commented out sections. There's code copied from other places. There's You know Extra print statements that don't make sense or or print weird stuff or whatever. There's all kinds of just stuff that is not great and then um Contributing to circuit python has gotten me to like start doing those lookovers Afterwards with pylint and black and all that stuff. But Over time, you know as you do that more and more and more what you start to find is it You know little things you get better and better and better at writing it out cleaner the first time But that being said like, you know, if you look uh, if you were to go and look at like some of my work code For instance, some of my non circuit python, but like my day job coding code Um, you know, you'll find a fair amount of of what you described there truthfully There's some php compilers what helps uh, so no need to write php Okay So our show none is working and so really now we need to be getting our set root group Which is gonna be I think honestly pretty easy. So we basically So this is actually just calling uh core set root group already So pretty much we're just gonna say well first thing do we have a get root group? Oh, okay, actually I started coding this down here fair enough. Okay. We have a get root group It's this we actually I actually have a set root group as well Current group is new group and then really all we want to do is actually just take the same thing that's in show Where's that show so it just said core set root group group We need to set current group I feel like we would need to set current group, wouldn't we? Or does core do that for us because here I have Current group equals new group. All right, let's test it out. So Before we sleep, let's say print Display dot root group Let's also say print Display dot root group Uh equals equals um splash See if that is the splash object, which is what it should be if that's working, right? I think None false. Uh, okay. Yeah, we probably need to be doing that inside of show When you start pushing prs and knowing your code is going to get reviewed you're approaching it a different way. Yeah So that's just for myself not a get over in a pr is extremely messy kind of like getting dressed up for church versus hanging out in sweatpants Yeah, that's a good analogy All right, so we actually inside show we want to be saying um We want to be saying in here current group equals group prized the I guess, okay. Maybe I maybe I added that I thought I was thinking that was there, but maybe it wasn't I mean this goes core current group Maybe we shouldn't be having current group on here This is inside the core object Let me look back at our Like our controller one so the Yeah, what I need to know is on In the core on display Did it get a current group? Does it have a current group? I'm actually gonna look in sea lion instead of Github Although this is probably gonna take a minute to Update I wonder if I have a new enough one that has this stuff in it Does have well, no, that's core current group Okay All right I will actually look on github real fast since that's gonna probably take a second to fetch and by a second I mean honestly, it'll probably be a few minutes Does it matter if we go bindings or module? Go module Basically, we want to know is there a current group on this object in the core There's core current group That's on the core. That's not on this object. That's on the display core Yeah, all of these are on core There's only five. I mean there's only six rather we've already looped more than once. Okay. Yeah, all those are on core so In our blink of display. Oh, we don't want In our blink of display, we don't want current group on display. We don't want that You shouldn't have this here. Uh, this is already calling into core. Probably that is setting the core current group inside of there And for our git, we should be doing not self dot current group instead. This should just be core core current Current group Yeah, unfortunately the the terminology gets a lot confused here, right because we're talking about the core as in circuit python core But we also have display core, which is called core here as well. So Got a lot of different contexts going on there Let me catch up here Did a bunch of coding got the he he for the uh the sweatpants. Yeah, the analogy for church there did a bunch of coding a firb wear an assembly where the structure and uh be a cup comments be a cup Yaku Yaku comments. I'm not familiar with that term Created some good habits except for except concise brevity still working on that All right comments geared towards beginners probably something I picked up Reading so many learned guides those rub off, but it helps even to give reviewers context. That's true. Yeah Definitely, it's a lot. Yeah, it's a lot quicker and easier To review code that is like commented well and documented well and stuff Um We agree there So when we access root group from the display object, we actually want to just reach into the core and get the current group from there When we set it, we actually don't even need to do this. We're just going to say set We're going to do the same thing that show does Show just set core set root group right here. We already have this pretty much We could we could steal this um Dock string as well to be honest and what happened to our formatting Actually new group. Okay, I saved that So we should Should be able to now go Let's say after our sleep here, let's say, um No, actually let's go show none. Then let's go Another another one second of none and then we go display dot root group equals I'll just go back to splash for now Keep trying to move the mouse pointer between the workstation and the laptop nice Yeah, every not so I normally have two screens that are hooked up to my same computer So I can just run my mouse across them every now and then though I'll be doing something else on the other screen I'll have a raspberry pi or I'll have another computer or something showing on that other screen and I will just Utterly and completely confuse myself when the mouse just will not Move over to there. It just refuses to uh to go on to that other screen and of course it's because it's a different device, but So definitely been there be a cup is pronounced bow koo bow koo. I don't know what it means interesting the french equivalent to plethora. Oh, okay Bow koo The more you know. Yeah, no, I never heard that before that's interesting Don't really write comments yourself Our future uh or future me to remind me of the new concept. I just played yeah comments to future me are are a thing that I Did not do enough of in the past and have since started to get better at and seen the uh The amount of power that past me has in terms of being able to convey useful stuff to future me um It only takes a few times of like past you really saving current use but to to start thinking that writing Comments like that or is a really nice thing Uh and and the first couple of times that it happens where you're like holy crap I wrote this thing that is like the perfect thing I needed to use in this new situation nine months later that I totally forgot about it Is uh is awesome feeling too Bow koo usually write all the comments then figure out how to do that in the code Yeah, I have a few times done where I've like written my comments out kind of first as pseudo code essentially And then gone back and filled in the code. It's not it's not how I write everything that I do certainly but um I did find it pretty enjoyable truthfully the times I did it was mostly javascript stuff Um I did find it pretty nice though. It's it's it's a thing I should probably try to do more in some other contexts Bow like bow and arrow. Oh, I said bow. Okay. Let me hit. Let me check it out again. Bow like bow and arrow bow bow koo Bow koo same Bow koo is a better description. That's the american way Uh, okay, so we sleep again. We're gonna set that back to splash. So let's see if that works So if that works, we're gonna show our let's change our thing up here as well We've done some stuff since then let's just say uh stuff. We'll just change it to something else Um, if that works, then we're gonna show our text We are gonna show none for one second. Then we're gonna go back to showing our text Maybe we should change as well. Should we change as well? Let's do that Oh, let's close that Trying to convey pronunciation text is hard Alrighty Run this one. All right. Our root group is working good now Our root group is actually a group a group object. It is equal to splash. So that was good Then we went to show none. That seemed like it was working fine We have some extra prints in here Inside the display object. It looks like somewhere still Which we'll get rid of but Functionality wise it looks like that worked. We set it to root group. It seems like it's working Let's go time dot sleep another two seconds. Let's go display dot root group equals none So then we should be left on blank again when we're done now We'll flip back and forth twice or whatever the blink of stuff None changed Back to none Perfect So, I mean, are there anything else we need? I think that's kind of all we need, isn't it? Am I forgetting anything? So do we have so in the core one of the things we had was like e-paper display frame buffer display Uh, there is e-paper display actually. Yeah, okay You know, I've never used an e-paper display with a raspberry pi Maybe we'll have to hook that up. I guess to test this out I don't I it's not going to be a tonight activity for that because I don't even have a I don't even to be honest with you. I don't know if I have an e-ink display that I can hook up to a raspberry pi. I'll have to I'll have to dig through the old I'll say parts bend, but it's really a parts room at this point We'll have to dig through the old parts room and see I know I picked up just E-ink displays here and there, but I have no idea if I got one that's going to be raspberry pi compatible or not. So When we tested this on circuit python in the core, I tested on the mag tag Has built-in display But we can't use that on on a raspberry pi certainly. So Uh, is that a blame plug and you're using a pie charm to show who wrote what? You probably explained this earlier. Yeah, no, I have not explained it earlier It I don't know. Um, I got The newest version of pie charm when I got this new computer. Um, which was A little bit before my birthday. I think I got this computer towards the end of october Somewhere around there. Um When I got this new computer, I installed the the latest and greatest brand newest version of pie charm When I got that brand newest version of pie charm, it's been ever since then it's been showing me the uh What git calls blame? I think blame has a negative connotation. But but yeah, what git calls blame essentially the author of the different parts of code um Truth be told I would kind of like to turn it off because occasionally I accidentally clicked this and then for whatever reason don't know how to close it In this case, it looks like all I did was just click this again to close it And I don't really see why that would be so hard or why I wouldn't be able to figure that out but Uh multiple times now I have actually ended up with this open and then just like gotten flustered being like Give me my space back. There's no minus go away Um, I'll have to remember that it's this honestly Because it has come up now and because it's now in my conscious I'm gonna entertain a very very very small rabbit hole Pie charm Uh disable Show vcs blame Author disable Be right clicking on the number column Turn off code change information Oh annotate with git blame But that says it's off Oh, this is in sea lion Also says it's off though That just opened the thing That's another way to close it though preference editor inlay hints Or right click on the inlay hint I went to sea lion again configure code author I just clicked cancel. I think although it seems like it worked Okay Yes, good question. I did not explain it earlier. That is what it is. It's relatively new Truthfully, I don't necessarily want it or need it and now we have turned it off Even the french quarter might be And I am behind a bit now in the chat so I'm catching up which might be slightly different from french canadian Or french because it's based on creole I live in the french quarter god, no wouldn't want to wish that on my enemy Fun to visit wouldn't recommend living there. I've never been down to new orleans Any part of new orleans personally Read blame is not the best word. Yeah, totally agree Uh bit bucket calls that Annotate Which is not as negative, but also not very specific. I don't I like author I don't I don't know what's wrong with just like author author loot, you know author view author annotation Something like that Does anybody know whether it's possible to clone or fork? One folder of the learning guides repo I do not believe it's possible that being said I don't know for sure um If your goal is to download it, okay If your goal is just to download it to use it right on your device If that's your goal if you're not trying to make a pr You're not trying to publish code back to github If your goal is just to download it what I would recommend is go to the learn guide system go to the actual learn guide page For the guide you're interested in and look for a download bundle. There should be like a download bundle button At the top of the code that will download for you essentially one folder Out of the learning guide system It will actually have some extra stuff like libraries and some other things But it will basically download one folder for you If your actual goal is to be able to make a pr or to push back to github or to publish your code or whatever That's not going to work for you. You need the repo To the best of my knowledge. The only way is to clone the entire repo I don't know of a way to clone just one folder. That doesn't mean it's not possible But I don't know of a way to do it. It's huge. It is it is pretty big. There's a lot of stuff in it um I I have no uh No arguments there for me. It's pretty big Learn guide documentation and github is like four to seven gigs find out the hard way I I've never looked at the file size, but I'm not surprised truthfully Um, it's definitely pretty big. There's a lot of folders There's hundreds at at least of folders inside of it. Honestly, there's probably I wouldn't be surprised if there was more than a thousand folders inside of it. Um, it is a very big project Definitely true Um Yeah Yeah, so I mean, unfortunately if that's your goal is to publish back or whatever the The only way I know how to do it personally would be to clone the whole thing now github I think github has an editor built in like you can edit individual files. So Maybe you could clone it and just not Or maybe you could fork it, but just not clone it, right fork it in github, but don't you know download your Your copy, right? Don't clone it locally and then potentially you could change files that way I I don't use the uh the edit inside github web interface very much. So I can't speak to Too much about it That seems odd Why would we have pass here? Is this work? This might not work actually. This might just be stubbed I kind of feel like this is not functional, right? Like show would have to do something and refresh and like all these would need to do stuff We also don't have any like initialize, right? Although it does say you would use the driver Hmm, but I mean display is kind of the same way Like you wouldn't use display directly either. You would use the driver like ili 9 whatever is what i'm using 9341 driver But I mean it still needs all this stuff author hundred percent um pie charm Yeah, so i'm definitely on board with the uh the old pie charm Got a lot of configurations and all kinds of good stuff Over 2000 learn guide staying you can make a shallow clone similar to with fetch sub modules Interesting I do not know how to do that, but that sounds pretty sweet. That might be worth a search Was that axel? I think asked that maybe search around for a shallow clone Get shallow clone you might find a way to To access different portions of it like that that'd be pretty cool um I'm gonna try to look back at the history of the e-paper display section of the code and see if like when that was Was intended to be functional or maybe if it was just added as like Here's the start of e-paper display and like eventually It will get implemented further This was just updating the constructor So at this time this was august 2021 and this person was going to try To get the e-ink display to work on the raspberry pi Which implies to me like they did not necessarily Have it working at that time or or as a result of this pr certainly catch up there You found the stubs. That's not blinker The frequency they work on learn guides got for a bit eight about goes ham every week pulling origin Before push is probably an ordeal Excuse me It can be I will say despite being a massive repo like my computer tends to Chunk through it pretty well Truthfully like doing updates and doing pushes and stuff Um or or pulls I should say in fetches I find the core repo the core circuit python repo I find takes longer on my computer than like learn guides or Even bundle or anything honestly The core I find takes a very long time to fetch On my computer inside pie charm the way I do it, which Maybe I'm not doing it the right way or maybe there's a faster way or something but So looks like this was initially created here or no because it Got some code already Renamed from there. I see so the older history is here Was eventually renamed from just display. Oh to Mint paper. So this is when this got created That's four wire in here actually That's more stuff in it That's like actual stuff in it. No, I don't know if you paper display is meant to work or not I'll have to ask melissa I kind of get the sense It's not actually implemented yet based on the fact that show is just pass here and like refresh is just pass And there's no like initialization Like send or anything like that. That's Tending data to the display controller I don't know um The other one was frame buffer display and it Does not appear as though there is a flame frame buffer display either So I think we might be just all right with uh display honestly Now that we need anything else is this actually implemented in blink it That doesn't look like it This one looks empty as well This might be a fun exercise one day would be to implement shape inside blinker. This is a core Display object. It's not utilized very much um But it is there It'd be interesting to make the blinker version of it You can find the right commit with get blame Kind of in this case It was a bit tricky because the file was renamed a few times from different stuff and then originally split out from other stuff Uh Core's been streamlined by devs for the purposes of fast builds Learn doesn't work that way That's true. I mean the learns it doesn't really have to build much on the learn system Which is I guess Definitely a big difference doesn't really have a a compile step at all. It's just a bunch of A bunch of code that stays in vcs essentially I mean we run pilot and we run some like actions tasks on it, but So I think I mean I think we're pretty good here. I mean the thing is we didn't have as much to change since we didn't have the circuit python terminal So Our show is still working It still works the exact same way as it did initially um Our root group property is now working fine Let's try a little bit of a different syntax just to make sure this other syntax works I believe this code is equivalent. So I don't think this makes a difference, but Let's say display Root group equals a new group That seems odd. I guess it would be display. Oh group probably is how it's imported Make that a new group and then let's actually use shape Uh, you know, I mentioned shape shape is not a thing that gets a lot of attention Let's use shape real quick here circuit python docs shape display io shape display io dot shape So you got to be careful here because this links to the blink of one Really, this is what I want though More specifically shape right here is what I want Yeah, really what I was hoping to find was a an example for it. I think um, so I started Maybe there's an example over here in core module Shape, yeah, yeah, yeah Let's get some of this stuff and do it mostly the same way. So back into here We created a new group. So now we're just creating a new group putting it right into here We're not even saving another instance of it or whatever You don't need our we already have our display. We're not messing with that We want all this stuff though And the only difference though, we don't want to do this. We already have a group We're just going to go now display dot root group This tests our getter as well And that's how grid there's our color So we should end up with like a square of Whatever color that is teal I can't run it that way Oh, yeah, I need to delete the uh, this end of show thing as well before we commit I feel like we're getting pretty darn close to done But I do want to remember to remove that print All right, so there's our first one. There's our show none There's our changed. There's our set root group none That was anticlimactic We set that to a new group We create a shape We create a palette I don't know. Why did we This feels odd, right? We create a palette with two colors. We used index one Why would I do that? Surely zero is the one that's used I would think right? So I know vector IO A while back I think used index one, but that was vector IO and that has since changed Maybe shape was the same way or maybe I got my wires crossed. Maybe it was actually shape or maybe they both were I don't know Interesting. Okay, let's try like this. So So my guess is maybe it's it's working, but our shape is not visible because it didn't have a color Oh No, I'm being completely silly It doesn't work because shape is not actually implemented Obviously. No, it's shape is implemented Shape is implemented. Didn't we just look and it was mostly blank though? extends bitmap How does that work? Am I missing something? I don't get how that would work at all Display IO shape Takes a width height mirror all this stuff Does it change if we do this? So we don't need to spend any time Implementing that it's it's already there the mirror x did not do anything but I I think that's actually mirror x only matters if you use a Set boundary or whatever This just has pass. I don't know how that's working We did get we did get palette zero though. So Interesting, okay The important bit the bit we're actually testing here was that creating this group seems to have succeeded Adding this thing to this group also seems to have succeeded I'm a bit perplexed That this thing actually does work, but somehow it does turns out it does Really what we were testing though was creating our group putting it into root group here Adding to it here all that bit looks like it's working fine. So While that bit in the middle there is A pleasant surprise to me I think our actual thing we're testing is definitely looking good. Oh interesting. Where is that end of show coming from? Okay, there it is let's look for more prints and no prints in there Print and we don't really need that any other prints. Oh no more prints. Okay Let me catch up. Good night. Uh, yep. Good night to ship you. Thanks for hanging out Um shallow clone seems to have to do with commit history Found out sparse checkout Sounds somewhat promising as well. I've never heard of sparse checkout personally So does this have pre-commit? Yeah, it looks like it. Okay Would we want to run pre-commit on the pc is that that should be fine? I guess right? It's got all the files. Yeah, pre-commit Run dash a Oh, this says scaling fix It's just old though. Oh, that's not what I wanted at all black modified some stuff A couple of files don't have re-used licensing information. They're not checked into the repo. So that doesn't matter Not checked into the repo. So that doesn't matter Island missing function method or doc string the display group object that showing I'm trying to think of the right way to word this. Let's look at the core Yeah, why don't why do I need to think of a way to word this we should Theoretically we already did when we did the core This would be shared bindings I mean it actually already exists. I think It's a shared module The root group on the display Good enough for me All right Yeah, we're just gonna keep failing reuse because those files are not checked in but I want to keep them because I use them for testing So just all these red ones here are not checked in so They don't have licenses, but they're not in the repo so I don't really need licenses Island fail display access to a protected. Oh, yeah, that's probably that's Probably just gonna happen honestly I mean, I suppose we could go to core and we could just make it public core You know, it's it's a I mean obviously in python anyway It's more of a suggestion than a public or private anyway, right because it doesn't actually enforce it Core itself is all internal so really anything that's on core You know could be considered private really for all intents and purposes from the api's perspective But maybe we just don't need that to be underscore Or maybe core should have get root group That's probably the real answer, right Core has set root group core should just have get root group too. Yeah Which I think that matches I think that matches actual core Not to be confused with the display core what we're talking about also Do that like that and this way we don't need to access a private thing Private private thing from there instead we just do Get root group we could should we make it a property? It's weird because display core in the actual core. It's not a property because It doesn't have properties. It only has functions So in the api to the user it is a property, but here it's a function called get and a function called set All right, let's make sure it still works Actually, let's make sure it passes pre-commit I don't really care if it doesn't work if it doesn't pass we still need to change it again But while the light has got me pretty washed out, doesn't it? We're getting to that time of year where it's getting so dark outside that I have a bunch of extra lights on so it's not to look like I'm in a dungeon but Now I look like I have the sun inside my house over here. So It probably toned it down a bit with some of them I added a new thing which doesn't have a dock string This is actually the same it's actually the same thing honestly like literally the exact same as this It's on the core instead of the display, but this is just like the internal object, right? It's really still the display. It's like It's the other layer of it that's That's internal to the uh the system I mean one thing we could do I guess Inside e-paper We could at least go ahead and add. I mean we could go ahead and add it I don't I don't like I was saying earlier. I I think the pass here. I feel like In the lack of initialization, I feel like maybe these don't actually work But maybe it does if you have the other driver like Like I have ili 9341, which I need to use my spy display. Maybe I need You know e-paper library or maybe I need a library specific to one of those displays and maybe That's where the bulk of the magic is rather than actually inside of here. That's possible But we could we could actually go ahead and do it, right? So let's just do our two properties here getter setter Ooh, that does get tricky though. We don't have access to core here Hmm That definitely does make me think it's not Not actually functional Where does core get saved? That's like foundational to the way this one works It creates a display core inside of uh In it I'm thinking it's gotta not be working, right? Oh, that sounds promising. Okay So there's an issue to add support. So I think the code that's there is like scaffold essentially It's not actually functional. It's just some parts of the code There was a in a beginning of starting to do this But it has I think this person doesn't Hasn't been around in a while hasn't done much circuit python land. But yeah, I don't unfortunately I think this The work that they started on it probably won't get finished unless they do come back into the circuit python community, but They had started it But yeah, I I think this confirms it's not actually Not actually ready to use yet. I links to there, which this isn't in there yet. All right I mean, that's maybe that's the challenge then I mentioned talking about Writing shape for display. Oh, however, I will say I think shape is probably a much smaller challenge than implementing e-paper display all the way Especially for somebody like me. I don't really know anything about how e-paper displays work. So that'd be a tough task I'd be curious. I'll be curious to look into shape. I wonder if set boundary I kind I would assume that set boundary doesn't work In blink of display. Oh, but maybe I'm wrong That'll be something to look into one day though is if it doesn't work then maybe we could add that on the blink of side So because we don't actually have core It does limit like I don't think we really want to add these Because if we don't I mean, I guess we could just make them pass I suppose You know, I you know Or none. I don't know if it's worth it though, right? Honestly, I think it it makes sense to just wait until it gets implemented the rest of the way, so let's leave that Make sure I haven't messed up my formatting at all Pass them in a mall But for reuse but we already talked about that it's not gonna pass just because it's looking at files that aren't checked in Um, so I think we're ready to push this and make a pr from it um I kind of think if there's anything that I'm missing That thing is really coming to mind. So, yeah Can you commit? Our changes are inside display and display core Be imported image draw because I needed to use it to draw the black none We got rid of current group. I'm not sure if I'm the one that added current group or not We'll have to look at the diff But I think we don't need it here because the core holds it and that's how it works Unfortunately, you know again with the confusing terminology That's how it works in the core the core of circuit python is that the display core Is the object that has current group not display. So we want to match that dashboard my dashboard and I do public but the other users my dashboard and My dashboard I do public but the other users do access not work Sorry, I'm not sure I follow my dashboard. I do public but the other users do not Do access not work Do any function. Sorry. I'm not sure what you mean That might go back to something that I mentioned a little bit ago, but I'm not Not sure that I understand So we swapped that internally so externally Code still calls show but internally now on our core we call set root group instead This is our new show nothing behavior. We actually draw a black rectangle We force the full refresh so that it will actually get the Sub rectangle area We added a doxtring The correct thing here to get this from core The setter working correctly by calling core set root group. Okay All of that's looking good to me here. We renamed This is on the core and in the core the display core. We renamed show to Set root. Uh, no, excuse me Yeah, yeah, yeah, we renamed show to set root group. We also added a get root group here though Which returns the current group got rid of a print I got rid of set root group because I actually added this this was originally just a copy of show It turns out we don't want to copy a show. We just wanted to rename show inside it here So now that shows as getting removed which makes total sense for this commit. Okay Um root group properties properties on display object And properties slash functions Display core Let me guys set root group Before I push just because I already messed this up earlier in the stream right or I I pushed it a different I pushed it a the other day not actually during the stream, but I discovered it during the screen Dream just because I did mess that up though last time. Let me go get before I push so I committed but haven't pushed Let me go get remote dash field. Let's just double check. Yeah, foamy guy here is foamy guy here So when we push it, it's actually going to our To our fork. So foamy guy set root group. We'll push that We'll let that go question mark, uh question mark Yeah, sorry friend. Jose over there on youtube. Sorry. I don't I don't um I don't understand your message or what you're referring to Think you were asking about c Nope, that was a different person asking about c sharp My dashboard I do public but the other users do access not work To do any function do access not work to do any function Maybe we Is that that was maybe back to the discussion of like public and private functions or something like that? I'm just not sure what Not sure i'm interpreting your uh Your statement really um To understand what you mean and then even further than that. I also don't know If it was referring to something that I mentioned or that somebody else mentioned in the chat or what so Sorry, I just don't Not sure where it ties back Uh, so this should be pushed now. Let's check that out on the github side And I'm going to be wrapping up here in just a minute. So While we do that, let me just say of course. Thank you to everybody for watching I hope everybody has a good night and a good weekend and all that stuff Uh, I'll be back on my own stream tomorrow morning at 10 a.m. Central time. So if you're interested in Some more circuit python goodness, um, I'll be back at it tomorrow morning for that You can find me over on twitch.tv slash foamy guy underscore twitch I will also post links in this live broadcast chat when I stream in the morning tomorrow I don't do that for deep dive because it's kind of a larger show and a lot of folks already know about it and stuff So I don't bother with the links, but when I stream on the weekends, I'll drop the links, especially because on youtube Um, the link actually changes every week. I can't it's not just the same link like it is more so for deep dive in this sense, but Um, I'll be back for that. Uh, I will before I go right now I'm going to make this into a pr here, but that's basically the last thing I'm doing Uh, let's see this change updates Uh, updates the apis to match A new core api behavior um There is no circuit python terminal for blinka Yet so that portion of the behavior Is not implemented here either Tested successfully on raspberry pi. I think it's 3b plus. I'm not 100 sure. I think that's right though. I'm like 90 95 uh b plus, um With this tester script I'll put this if anybody who wants to review this wants to use the tester script Now I will say the tester script is specific to the display that I have right so unfortunately Unless you have the exact same display, you'll probably have to modify it some But I'll put this just because it is what I used That's fine. I'll delete the comment from the top just to save a bit of space maybe All right. Yep. Thanks. Uh, yep. Thanks for me guys. Thanks as patrick for watching. Thank you everybody else for watching Thanks for everybody who hung out in the chat asked questions answered questions. Just chat about stuff Uh, appreciate all of you coming watching along and hanging out Like I said, I'll be back tomorrow morning. Hope everybody has a good night. I will Catch you next time. Uh, thanks