 Hello everyone. All right. Happy Friday. How's it going Paul Kutler? Looks like our YouTube chat's not quite there. Let's fix that. Do this maybe? There we go. And over in YouTube Dave Odessa. How's it going? And Charles Burnifer. Thanks for tuning in folks. Hi there. Hope you're having a good day. Evening Tim in the chat. Yep. I'm having a pretty good day. Busy overall. Feel pretty busy. I started a class last night teaching a JavaScript class for the next couple of weeks in the nights. And so did that for a couple hours last night. And so I got some last couple of days or long days yesterday and today. But we have made it to the end of Friday and that is certainly always the goal. So we're feeling good now. How's it going? See Grover over in the Discord. Let's see did we miss anybody? Paul Kutler. DJ Devon 3. How's it going? Thanks for tuning in folks. Be out of graph. How's it going? Good afternoon. Good evening. Happy Friday. Paul SK. How's it going? Howdy to you? And okay let's see here. Let me shuffle a few of these windows around and then we'll get going. So we don't need this preview really. We could get rid of that one. We don't really need this preview either. We'll pause that one. We'll go back to the camera controls in case we need them momentarily. We'll put this one away. We'll get our chats over here where we can see them. See Grover. How's it going? 4chan for prez. I gotta disagree with your username but how's it going? Happy Friday nonetheless. All right so where are we at here? We've got the screen showing already right? So yep this is just my empty editor. So let's get this show on the road. Hello to everyone who might be new or watching this video in the future if you've not seen this program before. This is the DeepDive livestream. This is a program that is centered around the CircuitPython project. You can learn more at circuitpython.org if you are new to this and you want to learn more about CircuitPython generally. I would encourage you to do a couple of things. One of them is head over to circuitpython.org. There's lots of high level information about what CircuitPython is, what kinds of things it can do. This username is older than me. I believe that as well. You can learn more there. I mean you can get started. You can download CircuitPython for your devices. So again if you are new to this and you're wanting to try to use CircuitPython, one thing you could do is head over to downloads here and then search up your device. If you already have a feather or a microcontroller or a Raspberry Pi Pico, if you already have one of these devices you might be able to run CircuitPython on it. We currently have support for 329 boards so that's quite a few. Plug in a couple of words into the search here and you can find it. Let's see here. Yeah, I think we will pass on this one. I think we're trying not to use language too much like that in this stream. Let's go hide on that one, I think. Here for Python, yeah, perfect because that is exactly what we are getting ready to get into as some Python. So again, quick introduction CircuitPython.org. This is one of the things you could do to learn more. The other one I would recommend is join us over on Discord. So there is, I think I have that on the screen, green still, right? Yeah, down, let's see, down this way a little bit, down there. There's ADAFRU.IT slash Discord. That is where you can join us to talk about CircuitPython on Discord and that is also the text that is visible right here, assuming you can see my mouse, which I think you can circling around there. This is the Discord chat, specifically this is the live broadcast chat channel. There is also a CircuitPython dev channel. There's a help with CircuitPython channel so you can head there if you want to get involved with CircuitPython or ask questions about CircuitPython and that sort of stuff. Right up front, I also want to mention tomorrow we have the CircuitPython open office hours. I think I have the right name. I should look back and have gotten the name. This is actually something I meant to look up before I started today and I failed to do that unfortunately. But tomorrow I believe we have open office hours for anybody who's watching this who might be interested in helping contribute to CircuitPython in one way or another at any different skill level or anything like that. If you're interested in that, open office hours is a new thing that we are starting where folks who are interested in contributing can get help. If you're not sure how to get started or if you've already gotten started but you ran into a hurdle, you need help resolving it or something like that, the open office is exactly for that or the office hours, excuse me. And so we'll be doing that tomorrow. I'll be on stream for some portion of that but there's also TechTrick and I think Tammy and a handful of other folks. I don't have the full list in front of me so forgive me for not listening everyone out but there's a handful of folks who are involved in that and helping. CircuitPython help desk 8 a.m. Eastern time tomorrow. Thank you Paul. I appreciate the time there. When do we get our deep dive with Tim Shirtz? That's a good idea. I don't know. You probably get yours sometime after I get mine and I have not gotten mine yet so we'll have to work on the shirts still. Okay, wrapping up the introduction I want to say so I kind of am all over the place but again if you're new to this circuitpython.org that's where you can go to learn more. Join us on the Discord. You can jump in and start getting involved in the project there and then the other thing I want to mention is CircuitPython project is open source. It's supported by members of the community that contribute code and contribute projects and things like that. Those folks that contribute that stuff the ones who are paid for it are paid by this company Adafruit. So while CircuitPython is an open source project and it's free for everyone to use and modify and do essentially whatever you want with as long as you follow the license which is a very permissive license. It's out there for free to use but Adafruit is the company who's paying us to work on CircuitPython. They are the primary financial backers for this open source project so if you like CircuitPython and you want to help support it but you're not necessarily interested in getting involved in development or contributing code or anything like that you can actually just purchase hardware from Adafruit. Anybody who's purchasing hardware through their website here Adafruit.com you are helping support CircuitPython project because you are of course buying hardware from them and they are then turning around and paying the folks who are working on the project. So thank you to everyone who does support CircuitPython in that way by purchasing hardware from Adafruit. Thank you to anybody who wants to do that in the future. I'll quickly mention the kind of stuff they sell is like the microcontrollers that you can run CircuitPython on as well as all the bits and bobs that you can plug in and do stuff with. So everything from LCD displays to buttons to beepers, buzzers, lights, LEDs, sensors, you know accelerometers, temperature sensors, gauges, pretty much any kind of little electronic widget that you can connect to a circuit. They very likely sell a breakout for that thing. You can plug it into your CircuitPython microcontroller and you can write Python code to run on that microcontroller which is awesome. That's what we are all about here is running Python on the microcontroller. So thanks again to Adafruit. Thank you everybody who wants to help support CircuitPython by purchasing hardware from them. Let me catch up on the chat here. I do like your cute Cyclops logo. I thank you. I do appreciate that. I actually don't consider myself particularly artistic but I did actually create that logo that is this one up here. I did create that logo. I created it in PowerPoint several years back and it's very basic but I do like the way it turned out. I'm pretty fond of that little character as well. I have, this is like breaking news off the press like never been put out before but I'll let everybody in on a little secret who's watching right now. I can't promise this will come to fruition but I actually have something in the works where I'm working on getting one of these little Cyclops guys designed by an actual artist and drawn out for me by somebody with a lot more artistic talent than myself. I got to reach back out to them. I got to figure out when that's going to happen or whatever but I've been in talks with a local artist here in my city to actually make me another one of those things because they draw some really cute little monsters. In fact, why don't I just show you. I've got a couple of them right here and we've got the camera up already so this is super easy. I can just swap this in. So the artist that drew these these two little drawings here of these little you know I don't know monsters or whatever these little things are. I've been in touch with this person to see if they're interested in drawing a a version of that Cyclops for me with a little Raspberry Pi Pico or something like that in its hands. So super secret you know Adafruit has their top secret segment. This is the the FOMI guy specific top secret segment is that is in the works and you know fingers crossed hopefully we're going to be getting that thing sometimes soon and whenever I do get it I plan on putting it into the stream graphics but that would also make a pretty good t-shirt truthfully if we did end up getting it and then wanting to do the t-shirt that'd be a good thing for it. Let's see here I've spoken most of my week hip-deep in spent excuse me spent most of my week hip-deep deep in CP sensor driver code says Beata nice trying to launch a SQL server and working on SAP via visual basic please don't ship pies in envelopes I would second that no pies in envelopes no dessert pies in envelopes but also no raspberry pies in envelopes that should probably be a padded mail or something like that go for that I think you're talking about the new logo so yeah I'm hoping to get that coming is there a micro python merit badge yet I don't know actually um do you mean merit badge like the ones they sell at Adafruit's or do you mean something different because I know they have some of those little patches right is that yeah maybe that's called a patch or maybe I'm misspelling merit skill badge is what they these are the things I'm thinking of is skill badge is that a similar is that the same thing you're thinking of or something different um I don't know if they do have a micro python one of those it's like a sticker but no patch yet it's like no on that yeah Adafruit okay yeah I think no micro python one yet there are a couple of those things I know there's a raspberry pie and there's a couple others um there's like a smoky one if you let the smoke out of a thing which is definitely a rite of passage there's a couple others like that but I think not a micro python one yet that would be a good idea too though so a micro python one of those would be nice um let me also catch up on the chat here I think a pcdv version would be awesome I'd buy a t-shirt nice I will keep that in mind yo silent trying to get to the af ecosystem uh silent if you're not sure what that one is about hope to be awake tomorrow for uh the help desk sounds like a lot of fun yep thank you to anybody who wants to uh come tomorrow and hang out and get help on circuit python stuff uh how's it going glenn thanks for tuning in I don't know if you've seen before I don't recall your name but if you're new um then you know hello welcome and and thanks for tuning in look for the blue smoke one yeah the uh the sparky one is pretty fun okay let me pull this one here okay put that one back away fighting with quaternan quaternians quaternianians uh euler angles and ain't doing so good it is fun yeah I can't say I probably couldn't offer you too much help there I have I have struggled that battle once myself as well um and I kind of just had the hunt and pack my way through it I was not very not very good at it but I did eventually get the effect I was after are you trying to make a thing that rotates with an accelerometer or something like that where you rotate the accelerometer and then it rotates a thing inside of some 3d rendering engine or something like that that's what I was um that was what I was working on when I did that okay so jumping into today's episode what I'm gonna work on is what we have pulled up here on the camera um and as you can probably see this is a pretty basic flip clock so um what I have so far are a flip digit which each of these individual digits use the flip digit class uh and then I have a flip clock class which holds four of these digits you know two pairs of two uh with a colon in between so I've got those two layers of helper library um those both exist and they are working what I want to do today though is clean them up because they're pretty rough around the edges there's some stuff that's hard coded that should probably be arguments um there's some arguments that probably should be named better there's some code that could probably be cleaned up there's probably old code that could be removed there's plenty of code that should be commented better than it is um and so that's the kind of stuff I want to work on today as well as uh making the cookie cutter uh of the library that will hold these two classes um so we'll cookie cut it we'll drop in the code I have today and we'll start cleaning up and commenting and hacking away at it and um just you know generally cleaning up improving that code and then depending on how long that ends up taken I may start building at the layer on top of that where I'm actually you know doing something with the flip clock class which is what I have running right now on my feather uh it's using the flip clock class along with the ntp library to fetch the time from the network we're back up here so we're connecting to the wi-fi network we're fetching the time using the offset for my time zone and then once we get the time that is what we're putting on the flip clock and then we're updating every minute so we're checking for the time you know again after a minute or I think it's actually quicker I think we're doing 10 seconds is that right yeah we're actually checking every 10 seconds but of course the the minute doesn't actually change except for you know when it's been 60 seconds since the last change so um we're just constantly grabbing the time from ntp putting it into the clock so this is of course kind of the most basic thing that you can do with this flip clock um and so ultimately you know I'm trying to get published the library that will allow other people to create flip clocks like this you'll be able to customize the look and feel so you don't have to use the same colors you don't have to use the same fonts um you don't have to use the same sizes although I will say there is a bit of a limitation on size just because um the sprites that make this work are kind of large uh considering the size of our device and how much RAM we have so there are some constraints around size you can't just make it super super huge massive um but you can play with it a bit you can go down some you can go up a little bit I did test a couple that were bigger than this um but it was starting to get really really tight on my device I had to delete a bunch of other stuff so I dropped it back down to the smaller one here one thing we might try is a a good trick for circuit python if you want to make stuff bigger in display i o a good trick that you can try is actually make it smaller counter-intuitively you make it smaller but then you give it a scale two so it will be twice as big as it was and so you scale it down a bit give it you know in your content in your actual root file so your images in our case the sprite sheets we could make those sprite sheets smaller but then at our group level in display i o we could set that scale to two so that you know each individual pixel will now be represented by two by two pixels so each one goes to four which makes everything look bigger of course and bolder and you know bigger lines and and thicker lines and things like that so we might give that a try that would actually let us shave down the size of the sprite sheets a little bit which would be nice and I think we could get it to a point where after we double it it takes up pretty much the majority of the height on the screen because I do think that would be nice if we could get this thing to be a little bit taller to take up that full height there okay so that is a quick high-level look at what I'm going to work on so I'm just going to jump straight in if anybody has questions about anything that I am working on or about this widget or any of the other widgets that work with it feel free to drop them in the discord or the youtube chat those are the two chats I'm watching I don't actually have an eye on the twitch chat so if you are over on twitch and you want to interact or ask a question or something I would encourage you if you could just head over to discord or youtube and that's where you can get to the chat that I will actually see so feel free to shout out questions if you have them otherwise I'm just going to dive straight on in here so first thing we want to do is run the cookie cutter to make a new library well let's close our email so we're not popping stuff up randomly we want to run the cookie cutter whenever I need to run the cookie cutter I always just go to this learn guide learn guide page that's talking about sharing a circuit python library because this page documents the cookie cutter creating a library so this gives you the command to run this also gives you the all of the inputs all the things that it's going to generate as well as like all the questions it's going to ask you all the prompts you know and what you can answer to each one so I'm going to go just get a close that one I'm going to go just get a reap a terminal opened up over here let's see here we got to go this way for some reason you can't open the terminal if you're in list view I don't know why that is I already have cookie cutter installed I won't need to do that we should be able to just run this command receive last Monday 32 bit dev console from primaroni UK nice 32 bit dev console we're going to run cookie cutter and for folks that don't know cookie cutter is the name of a project that's like kind of like setting up templated projects for you you can build sort of a template for your project and then you run this command you answer a series of prompts and then it spits out a new you know empty project folder for you to put your project into and it includes all kinds of infrastructure files and you know pipi and read the docs files all kinds of the things that we use in the circuit python libraries we're going to tell it yes it can redownload itself that's fine we're gonna target I just test in here is that intentional that's interesting isn't it we downloaded the newest one hmm anybody know is that intentional let's take a quick let's take a very minor quick detour let's just go look at cookie cutter maybe I pointed to the wrong one or something cookie cutter ate a fruit probably like this file I don't know test is in there huh I don't know what that's for make tests run with cookie cutter to make cookies interesting I don't know when you would fill it in that way I don't know if it's like is it for creating tests or is it for creating libraries that are not under one of the other three target bundles I guess is there a is there a test bundle maybe that's it anyway in our case though we're gonna I'm gonna choose ate a fruit I don't know for sure yet if this is gonna end up being a library that's is gonna go under a to fruit or if not then maybe we'll move it over to circuit python org or community for now though I'm gonna make it as a to fruit because the project came from lady Ada so my assumption would be once we make it that it will be a native fruit library we'll start with that we'll say user is a to fruit yeah author is me company yeah library name so this is where we want the smallest name for our library this is where this comes in cookie cutter read the docs stable test has been in there for a couple of months now okay so it's not necessarily brand new but it is on the newer side it sounds like better project templates oh yeah here you go this is kind of the high level docs for cookie cutter thank you as Patrick for dropping that one in there so yeah anybody who is not familiar with cookie cutter you can learn more about it here it's a really it's a really cool project honestly I need to get it I need to get spun up for my work projects as well circuit python is the first time that I used cookie cutter was was as part of the circuit python stuff but it is actually a really cool utility that could be super helpful if you're creating lots of projects that are similar in nature they have the same infrastructure shortest name for the library we're gonna call the library display IO flip so we're either gonna go flip clock like that or we're gonna go flip clock like that I think I like I think I like this one a little bit better I think we're gonna do that one display IO flip clock enter library description display IO widgets for going flip clock style animated animations changing from one number to another keywords display IO the commas or spaces enter a string of lowercase keywords spaces okay so we'll say display IO we'll say clock we'll say time we'll say flip clock we'll say display lcd widget ui numbers number yeah I think that's a good list to start with library prefix we're going to leave that blank for Adafruit product ID so this will work with any display IO based like any microcontroller that supports circuit python and display IO this would work on it however I will say especially at the default size it's pretty much built specifically for this screen so maybe we should put this as the product but maybe we shouldn't because it can work on other project products it's just this is the one that it's kind of like most directly targeted at I think we're gonna leave it out though I think we're gonna leave it out because it I mean you could run it on a pie portal you could run it on anything with a display really so that requires bus device I kind of not hmm that's a tough one I think no technically it doesn't the library doesn't use bus device but the display I think initializing the display does although our display is built in so it's initialized in the core which has its own bus device I think we'll I think we'll put yes because I'm pretty sure you would have to have it for the display to work other requirements we do have other requirements it's gonna be display IO widget no display IO layout I mean is the name of the library flip clock new window let me catch up here as well make test run jeppler added it make test around with cookie cutter too I keep hearing about cookie cutter but since I don't code libraries I don't have a use for it it's really geared towards cp devs even built-in displays still use a bus yeah I will say cookie cutter is a more general project cookie cutter itself is like good for creating lots of kinds of projects we have the specific fork that helps you create circuit python library projects but generally it's a much bigger wider just like a library or tool it can create lots of different kinds of projects and it's just about eventually really what it's about is like templatizing project setup so you're gonna be creating lots of projects that are similar this makes it quicker and easier for you to actually create multiples quickly I use cookie cutter for community bundle yep same here and circuit python org bundle as well finally figured it out nice nice did you probably you submitted the pallet fader if that's submitted maybe we'll take a look at that tomorrow perhaps I'll I'll go and review that if that's in there and hasn't been reviewed by somebody else yeah so we need to get the other other requirements which would be in our case it's gonna be a display layout and that is oh and actually yeah cedar grows pallet fader as well okay other requirements so I guess these are probably spaces in between or maybe commas this is why this lot a learn guide page is so good other requirements add any other module dependencies enter a comma separated string of modules using lowercase full name of the module dash instead of underscore eg eta fruit hyphen circuit python hyphen pca 9 685 okay sure here's what here's what we're gonna do we're gonna open scratch pad here to paste this change these here and then we'll do this one as well we want them comma separated eventually so I'll just go ahead and do that right there paste it in there I wonder if it should be the space it's probably all right with us yeah there's a space here pallet fader was merged a couple days ago awesome sphinx uh yeah we'll go sphinx um there okay so we're done so now that will have created a folder for us called in our case eta fruit circuit python display IO flip clock I think right here flip clock so this is what got created here's all the code inside of it one thing that we'll want to do right off the bat is our thing is gonna be a package instead of a single file actually what I'll do is I'll open this up open this up in this one but this is in a different repo or a different uh place on my computer new window you can close that one uh cancel oops I clicked okay and set a cancel I really want to set up an interpreter too late now though oh it failed look at that okay we may have to see if this is on pi pi or not and if not we could probably take it out of requirements and document it separately circup can install it so does anybody know if circup can install from a requirements dot text that'd be pretty cool uh if you're only working with one file in each oh uh this was a response back to dj dev and we'll see okay maybe I could use it for templating some of my git code projects usually only code pi size basically just an example level coder you're working with one file on each there's probably no point in templating it the template includes all the files needed for libraries to be deployed and so on as well as the library file template feel out of crust yeah I would the one thing I would say is if you're planning on sharing your code like if you want to publish it to github um then I think it's definitely worth it to go ahead and use the cookie cutter if for no other reason then it's going to generate you license files and code of conduct files so like if you intend to share your thing kind of in the the ecosystem in the sphere of circuit python world um and you want to publish it on github it may be worth it to run the cookie cutter to get those couple of things because like it's always good to have license on published code it's always good to have a code of conduct if there's a larger community involved a readme file is always a really nice thing to have um and it will set up all of those things for you now if you don't intend to share it if it's just like a thing that you're using for yourself it's way you know it's way less important right you you don't need a license for yourself you know for the thing that you created you probably don't need a readme although actually readme's to yourself are pretty helpful sometimes as well you know if you're not going to do read the docs right then you won't need any of this stuff so to catney's point definitely if there is a lot you know if you're if you're just making like a little single file library that you're going to use by yourself probably not worth it if you want to share it though I would say go ahead and look into cookie cutter um it's pretty straightforward to run it so you know it's a it's a couple of prompts and not every single one of them might be something you need to use but uh some of them can still be helpful for you for sure circup install help requirements file there is a dash r okay sweet using cookie cutter alongside github desktop was a fun challenge reduce the number of command line entries needed oh that's pretty sweet I didn't know that it would like uh integrate in with the desktop thing I downloaded github desktop but I have not done too much with it thanks for clarifying it's really for library coders and above I gotcha the pi pi part is now required for ate a fruit libraries um yeah pi pi so we'll our flip clock here will be on pi pi the one I don't know about we'll have to check cedar groves to see if this is on pi pi or not if it is then we can have it in here but if it's not then we will just give them instructions to do it with circup um t 75 five I don't know what that means over in the youtube chat there all right so one thing I said a minute ago which we do need is this is gonna be a I think they call it a package instead of a library right so we are gonna change this packages we'll leave that name the same we'll create the folder you know what would be nice maybe is in cookie cutter to add one more prompt for package versus single file then it could well that gets complex actually because it would have to have the would have to have the folder inside of the template thing be helpful but it might be complex uh ate a fruit display IO flip clock directory create that we'll make an init file inside of it dunder init we'll put our header from this into there we'll take out the duplicated one of these from the template file we'll fix the spelling of animations hardware so we could list some hardware here I don't remember if these are supposed to be dented in or not a fill in one of these and then later on we could go back through and add pretty much any device with a built-in display and lots of like external displays technically as well you could use I suppose I'm on the s2 there is an s3 now I'm not sure if this would work on there or not so we'll do this one for now community bundle libraries are not on pi pi okay no worries the new suggestion is all libraries to be on pi pi for auto complete to work in the ide's I gotcha yeah I mean a circuit integration in the ide would be pretty sweet too then it then it wouldn't need pi pi as much all right so then in here this is where I'm going to drop in the classes that I do have already which are flip clock and flip digit duplicate this and I'll say cedar grove palette we'll link over to that is now in the community bundle so I'll go circuit python community bundle by one of these it'll write the on the long way around but this is going to get me over to this page which is what I'm trying to link here circuit install because I'm pretty sure this takes from the community bundle so I believe this will work now you will need was in flip digit need the import style of this lowercase underscores oh I think oh this is not markdown uh what is the code work I guess it's this thing I think this is this might be trying to render it as markdown I think this is not working right because uh there's missing stuff in here right it says the following command but then it doesn't show it all right we'll see what it looks like when we push it to discord I mean to get hub because I'm not sure that this I don't know if this can render rst files correctly I know it can do markdown but I'm not sure about rst uh all right let's get I know actually this is where we're at so we got those there examples simple test we could go ahead and write the simple test actually to be honest with you MIT yeah we'll have the simple test I think what I'll do is um flip clock simple test I think it probably makes sense to also have a flip digit simple test as well let's copy that and we'll go but the thing is it's supposed to keep the name of the library I guess what we do is we go display IO flip clock flip digit test and then this one is actually probably the the most simple one because it's going to be just a single digit by itself and I will go ahead and write the code for this so uh yeah let's just let's just spit it out here import display IO no from we're going to go from display IO import we want group definitely uh anything else I think I don't think so maybe though we'll see import board let's go display equals board dot display shouty let's go create a group main group equals group new group we will put a while true we'll put a pass we'll make a flip digit flip digit equals flip digit we're going to need to pass a lot of stuff to that we're going to need to import this we're going to go main group main group dot append flip digit and inside our while true loop uh we're going to actually go four i in range nine or actually ten flip digit dot value equals i time dot sleep zero point seven five okay we need all the stuff that goes in here hey guys how's it going tonight uh what's doing tonight where I am working on a flip clock widget so I cookie cutter the library and I'm working on right now specifically writing an example for the flip digit but more generally what we're working on today is getting the these widgets that I have created flip digit and flip clock getting them into a real repository with all the rest of the infrastructure stuff it needs get the examples written get the code cleaned up and commented because right now they are purely functional it's not really commented at all there's probably some bits that could be cleaned up and done better there's probably still some things that are hard coded that might not you know probably shouldn't be that kind of cleanup and just getting it ready for other people to use it more generally that's the kind of stuff I'm working on right now I think we're pretty close here we would pretty much just need the stuff that's inside of here and then I think I think we'd be good to go here I think this would work so let's find well so this one just passes it straight through from there which is not as helpful truthfully I want to say maybe we have a copy of this back into here yeah so we need to load all the spreadsheets and there are three spreadsheets um means we're gonna need to put those in the examples folder do we want them inside of a directory let's just leave them in examples for now we could get refactored later we do want them inside of the directory so this takes three spreadsheets you need the static spreadsheet which shows each digit by itself the full digit so this is one of the ones we need and then we need the bottom animation spreadsheet and the top animation spreadsheet so there's these two right here this one gives you the bottom half of all those digits and then each column represents one frame within the flip animation for that half so each column in here represents one frame of the bottom half of the flipping animation and then in this one each frame represents one frame of the top half of the flipping animation so it will cycle through these one at a time in order to basically play the animation I was going to ask what's past versus continue looked it up and immediately realized the problem I was having with my lower code is because I'm using continue instead of past nice I'm watching you just paid off huge help for my project awesome that is great to hear okay so we'll grab these two as well we're gonna drop those in the examples folder we're gonna need um licenses for these because reuse will just complain if we don't have licenses so let's create those static sheet dot bmp dot license and there's one I can steal I don't know the exact like format or whatever of this so let's try image load or a slideshow I know there's images in here oops I really I wanted to let's see I want github oh that's not github either this will get me to github it's one click away at least there isn't images folder here maybe we should have an images folder take another one of these for each of the others because we need a license for every file gray bottom animation right sheet a top animation sheet we shouldn't have one called sheet and one called sprite sheet so let's just call it sheet hey that fixed the license file too I'm actually pretty surprised about I totally expected to have to change the license file afterwards okay so we need to image load our sprite sheets this code which means we need to import this but this was actually already called sheet here interesting now we've got those these are the wrong size these this is the bigger size actually so we should probably actually maybe make variables for these things for the example that way all of the variables are up top which basically declare all of these different arguments so sprite width and this is actually 48 knots no it's uh let's go height and then width I do height first this is 480 by 500 and it's also 10 by 10 so that means each sprite in this sheet is 48 pixels wide by 50 pixels tall this looks wrong I know this came from commented out code but this looks backwards because I'm pretty sure all of the sprites I've used so far were taller than they were wide so I don't know why this would have a larger width than a height uh Dave Odessa sorry Tim got to go night all yeah no worries at all have a good night my friend thanks for tuning in hope you have a good weekend and all that stuff thanks for hanging out so here we'll plug in sprite width and sprite height animation delay I'll let that for now shave it off a bit transparent indexes I'm using range 11 brighter level darker level medium level one thing we could maybe do also is we could configure it so that if you leave these blank maybe it just won't do the darkening and then that would also remove the requirement for palette fader so if you want to have the darker stuff on the bottom then you get it you put these in and you use cedar groves amazing palette fader or if you leave those out then it will still work you just won't see the darkness on the bottom although I will say another thing you could do to cheat this a little bit is you could actually you could actually just darken this sprite sheet and I think that would let you have the darker bit at least on the bottom half maybe it wouldn't maybe it wouldn't I'm not sure I have to step through the animation again it's really particular about like it animates the top half and then it animates the bottom half and at different times it also changes the tile grid to be the static one so like it shows the old one with the animation on top of it and then it reveals the new one with the static thing behind it so it's like pretty particular the steps everything happens in so I don't know if just making those darker in the sprite sheet would actually work like I was thinking a minute ago but it's possible so we'll say brighter level we'll just keep the values we have 99 0.5 0.9 and then we'll fill those in down here we called it flip digit instead of digit I will scoot it to x honestly a guilty confession I guess the reason why I moved this to 100 is actually because I have the sticker here that I am thus far still using not to take off yet my screen protector but I did want to scoot it over to be like over here because this thing is on top of it so compensating for not removing my screen protector which I probably should just remove the screen protector instead but I'm resisting for now flip digit move it to x append it count it between zero and nine I think this is everything we need to make this work so what I'm gonna do is go back to my device I'm gonna say code copy paste this as as code underscore ntp flip clock and then copy this there's that so now I'm gonna delete code delete paste this as code here's an example of use of continue from one of my projects nice you'll continue save that and yeah let's see is this actually working or did it crash no module name date time that should just be time no module name a for display oh flip clock which is fine that just is because we have not copied this library right here to our device yet pile height must exactly be divisible by bitmap height ah that one's got to be 50 well it's supposed to be 50 right who knows what we forgot I know what we forgot we never called display that show main group created a main group we added our flip digit to it we moved its location we never showed on the display there it is though uh one thing that might be nice is if we started on one instead of zero because I noticed that when it ran the first time it flipped from zero to zero actually I thought we added an if statement that prevented that we not do that we did that but it's on zero and then it still flips to zero see that's interesting I could have swore maybe it's in a different copy or maybe I lost it in the shuffle somewhere I could have swore or maybe we did that at the clock level maybe we did that at the clock level actually that sounds right yeah these ones here are checking the value and then not changing it if it's already on the right value okay so we should I think we should have the same logic inside digit so when you set value like this it should say only do this stuff if new value is different than old value and that would actually make it so that it will not flip from zero to zero it'll basically just do nothing for the first one means it'll stay on zero for a little bit longer but it won't do anything else no it still flipped zero to zero didn't it interesting okay I tell you what unfortunately I got a little bit too much coffee and water in me I got to run to the restroom I'm not gonna make it through the rest of the stream so I'll leave this running here and then I'll come back and troubleshoot it I'll be back in just a minute sorry for leaving you hanging for a minute here okay so well we didn't update it on the device yeah see I wasn't thinking straight I knew you know I wasn't gonna make it so we edited it in here but we did not paste it through the device it will certainly have to do if we want the new version to run there we go now it spends like an extra beat on zero before it starts but it makes it so it doesn't flip from zero to zero which looks weird and in the physical version of this thing wouldn't have been possible because each number is like actual physical little cards or whatever right like there's it would have to have two zeros in order to do that but I don't think that it would I think it has one of each one of each digit got everything working just right now and I don't want to touch it it's like it has a mind of its own yeah I'll totally uh totally understand that that mindset where the program just doing its own thing has a mind of its own where it switches between transmitting receiving but not both that's a handy tip right now it's doing both but if I reset the board it'll magically make up its mind to do one or the other when I uh let's see to the point that I actually swapped in another board thinking it might be a board issue but it still happens so it's potentially a library bug dealing with CRC and acroturns could be I don't have a lot of uh don't have a lot of experience on the Laura stuff I've played around with it a few times but not done any sort of like in-depth troubleshooting on it um so this I think is pretty darn good for a simple test for the digit maybe one more thing that might be good to add to this is um center it instead of randomly just setting it to x100 we could actually center it instead which seems like a pretty nice thing to do so let's do that and the reason why we can do that super easily is because flip digit extends something that's not imported in this file because it's imported inside flip digit but it extends display IO layout dot widget which has anchor point and anchored position just like display text do so we'll say point is 0.5 0.5 we'll say position is display width over 2 display height over 2 can't move no because I did this in here and we need to put it back on our device when we guy uh even input a bug report about the laura board that has random behavior you did input a bug report I think is what you mean if so that's definitely the best thing to do especially if it's repeatable like if you can you have a relatively small example that shows it no module date time oh let's get that fixed before I forget again although random behavior does make it harder it might not be consistent in case it could be trouble oh I think the 4848 I should have been working in the one in the repo I guess huh or I should have copied it back maybe to the repo I just had a thought actually we could we could divide the size of the sprite sheet to get these instead of hard coding them hmm that's an interesting idea I wonder wonder if that's how we want to do it or do we want them to just be variables I mean one thing is we have a lot of arguments for this thing I do think it would be nice to cut down on some of them is there ever a scenario where it would be different than sprite sheet divided by the number of tiles I think so okay I think what I'm gonna do is compute it at this level for now but we might actually go back inside a flip digit init and compute it inside there instead of passing it in not gonna for right now the second but that is what we might do eventually what I will do for now though is go here and we'll go we know the static sprite sheet is three over by four down three columns by four rows and this has to divide evenly so this is 144 over 400 if we divide 144 divided by three that's going to give us our width if we divide 400 by four that's going to give us our height but the height is actually double because our other sprites are animated sprites have top half and bottom half separated so we would have to divide this out and then actually cut the height in half so for width we would go static sprite sheet dot width over three and then this one we'd go static sprite sheet dot height over four and then over two also back to the version without show that doesn't seem right I think I started from an old version of this I feel like I'm missing stuff that I have already done hmm maybe we did it in clock but not digit did it in clock but not a joke okay that does make sense so really what we want is inside digit we need to be setting the height and the width when we initialize the parent which is the widget object in our case got random issues worst kind of issues to track down no matter what you're doing from cars to plumbing or whatever yeah totally agreed there so we're gonna go I'm gonna try to stop screwing myself up here I'm gonna try to make all of my edits in the repo and then copy to my device that way when we're done everything's working how we want it'll all be in the repo ready to go we won't have to copy back from the device to the repo I'm gonna try to do that so inside of flip digit we're gonna go in here and make it so that it tells the widget the size because that is why the anchor point is not working correctly because it doesn't know its own size which is very important for anchor positioning is to know its own size so here we would go width equals and in this case the width is equal to the tile width and the height is equal to the tile height over no times two times two because the full digit is both the top half and the bottom half together height times two but the tiles are talking about the tiles in the animation spreadsheet which are half of the full digit do that again so I'm editing in my repo so let's copy flip digit put it on our device there we go now we're centered up I'm glad I wrote that into the example because I may not have noticed that that was broken if we hadn't so that is good so we got our flip digit I think this is probably a good example right I mean this is definitely nice and easy it shows just the digit by itself shows you how to set it up shows you how to change it over time I think this is a pretty good example so I'm pretty happy with that one we'll change over to the flip clock next why do you edit in one window and copy paste into the device uh in auto reload if you edit the file in device really good question the main reason is just because I am ultimately gonna push the repo when I'm done with all this um and doing it this way makes it so I don't risk pushing the repo with a different version of the code than what's running on my device so I want to keep my device and the repo in sync they should always be having the same things and so that's why I'm doing it that way is editing it in the repo then copying it to the device I could edit it on the device we could save it live right there and then as long as I remember to copy it back into the repo everything would still be fine um but I am a little forgetful sometimes and I don't want to I don't want to risk it so doing it this way just basically means I won't I shouldn't ever end up with different code in the repo versus on my device that I'm running to test yeah good question though so the clock simple test I think for this one we will pretty much do most of the NTP example except we won't drive it with NTP instead we will just hard code it and use a for loop with an incrementing thing like we did when that's done we'll make another example that does use the NTP I always edit in VS code and then terminal copy to the file could to terminal copy over to the device let's go get rid of this we don't need that secrets we will keep flip clock I'll put above we'll fix this it needs to be from a to fruit this dot okay we don't need wifi or socket pool we yeah we'll still need time I think we don't need any of this stuff we could should be able to get by with just group I think dot how's it going James Fishwick uh over in the YouTube thanks for hanging out with us I'm not sure if you meant to type anything longer or not but appreciate you being here and I hope you have a nice day and a nice night and all that fun stuff so thanks for thanks for hanging out uh we'll get rid of this one we'll get rid of this one we should probably have all the same variables but the repo could mirror the device rather than your hard drive um I mean I guess you could probably have a repo on the device the problem with that though is that the repo inside the dot get folder there's a hidden folder called dot get g it and get is constantly writing stuff into there which on circuit python um when it writes those files it would cause a reboot we don't necessarily want that we also don't necessarily want to use up extra room uh which the get files would and then the last reason I'll say that I don't necessarily want to do that is I do also want to keep a bunch of other stuff right like I have this example I have this example I have all these other codes none of these have anything to do with this project but I do want to keep them on my device um so if I made my device into a repo I'd have to do a get ignore or something to get those to not be checked in so this all this stuff can stay the same oh we already have actually animation delay we don't need two of those this one is not a digit it's a clock we can still fill in all of these other values though oh we need the height and width medium level next oh we got the whole line that's not why not that's not what we want oh we were setting y to zero I'm gonna get rid of that we're gonna do the anchor point anchor position again and create our main group we're gonna add our clock to it we're gonna actually show it this time we are gonna get it pun intended thanks nice I like it I don't I don't think we need these we definitely don't need this we want this to be slower so I mean faster so I will definitely speed that up past 10 seconds and I think mostly this is what we want actually so current value equals the first pair next value equals current value plus one first pair equals next value current value equals second pair next value equals current value plus one second pair equals next value let's do one more thing in here like if next value greater than 59 next value equals zero and then this one will be greater than 11 12 23 let's do 23 but honestly these are backwards right first pair this one should be 23 this one should be 59 we're thinking minutes and seconds or excuse me not minutes and seconds obviously hours and minutes that's what I meant there I did make this generic enough I called this first pair and second pair I thought about using hours and minutes I might still go back and add hours and minutes properties that are like just helpers for for convenience can you know convenience accessors but I figured if I did it more generic if I made this first pair and second pair then some people could use this for hours and minutes other people could use it for minutes and seconds other people could use it for something totally different if they're not actually keeping track of time or something right so I didn't want to commit to any particular label on those which is why I ended up with second pair and first pair but convenience properties might still be in the in the future for this that might be a nice idea for now though I think this is good we're just incrementing the first pair until it gets over 23 incrementing the second pair until it gets over 59 I will say this is not gonna it's not representative of how a clock would work right because it's gonna increment hours and minutes every time if we wanted it to be more like a real clock we would increment minutes if they go up above a certain thing then we would increment hours but I do want to show in this example the thing actually updating more frequently I don't want the first pair to just only update after like a long time right so save that let's copy it out we'll go actually back on my device I'm actually gonna go copy paste this again and go flip digit test that way we have a copy of that one on my device still we're gonna take all this put put this stuff in it and see if it works but I bet we probably forgot at least something right close pair value must be string with length two code pi line 58 so this is when we try to set the first pair so we would I guess the zero we would we would start out on zero so that would be zero zero you would change it to an int which would then be down to just zero we would add one to it we would not be over 23 in this case we would not go into there but then we would try to set it so honestly this is another thing that I feel like I solved when we go to set for yes yeah I thought this was okay so when we go to set first pair which is what we're doing saying first pair equals new value there's new pair coming in if length of new pair is exactly one then go new pair equals a string with a zero and then whatever's already in new pair so pad it at the beginning with a single zero if its length was exactly one so why does that not work though so that is the string one string containing a single character the character is the digit one so I think the problem is that this ever made it into the repo yes okay see this is like what I was talking about earlier where I don't want my repo to get out of sync from my device this is what this is the the exact situation that I got myself into so I had a newer copy of flip clock on my device then the one that was in my repo but now the question is have they changed hmm okay that was the only change so we didn't do anything else but we did have that difference so I just pulled those in now and we should have it delete this we got this code in there now so we'll take that flip clock we will now put that in our lid folder here I guess this does mean um they're gonna be showing the same number for a while here this feels very slow hmm it's slower than last time I'm not sure so maybe it would be cool to start them on different numbers that way they're not always in sync like this I mean it doesn't matter it does show an example of how to use the thing but it kind of be cooler I think if they were on different numbers so what if we did clock dot first pair let's just say 15 or 18 type int has no length this needs to be a string oh but we should be having a better catch on that right thought we had a catch for that so we're kind of double dipping with our logic here which is what got us in trouble so really what we need is this one kind of should be its own thing and then this if it's not a string and do this if we get to here that means it was a string if it only has length one then pad it with a zero if it doesn't have length exactly two return this it kind of does feel bad truthfully to have this right I don't want to have to duplicate that truthfully but we need to make sure it's a string before we call length on it so we could put this first but then our logic doesn't work right because this will say or if length is not equal to two and then it will raise but we want to allow one also since we're going to fix that in the next line I guess we have to say or if it is not a string or if it is not two or if it is not one so it has to be either two or one and it has to be a string otherwise we're going to raise this exception if it was length one then we are going to zero pad it right there which will then make it length two which is still valid we'll put the same thing here now our value is not duplicated it does still feel a little weird truthfully because now this is basically duplicated right we pretty much have this here in the same thing here but it's not the end of the world copy that drop it to our device first pair oh it does still need to be a string let's be a string with length two is a string with length two my if the if statements must be wrong right all right when in doubt print it out what I always say now I don't think I'm not sure I've ever said that before maybe once or twice it's pretty catchy though maybe I should start saying it I do believe it I'll tell you that when in doubt print it out one more with this whole thing okay uh false so it is not not a string but is a string false is not equal to two makes sense through because because it is two so this equated to false through it's not equal to one is also factual because it is length two therefore it's not length one but then this was true this supposed to be an and and I think so really we want this last one to be false in our case that didn't work that didn't change do we want the last one to be I don't know if I I don't I don't think I like the logic this way um okay what if we said not equals two and equals one oh thank you yes yes yes yes yes yes that is the not length new pair in if it is not a string raise this or it is a string but the length of it is not in one or two then also raise this exception that should be right thank you seagrubber but now we died on second pair but that's fine because that's just because we don't need that's because we do need the same logic down there saving automatically this is not showing me the asterisk like this I don't editors messed up it's also weird we didn't get hello last time it's just still running it didn't uh it didn't restart but that tells me it didn't save but I just don't see the asterisk not in here either let's try to restart it here I don't know what that was about but I think we're good now also get the library repo this one let's open that so now I have edited the wrong one so I made changes on my device but we need to get them back to the repo duplicated code fragment 10 lines long that's not a duplicate this is different down here it even knows it's not a duplicate it sees the difference why does it warn me that's a duplicate is there a way we could refactor it though because it would be kind of nice I don't nothing like immediately jumps out I mean I could like uh I mean I could do something like this right we could have like def validate new pair we could move all of this inside here and then it avoids a little bit of duplication I need to get that to go away how do I this gets rid of the part that is actually duplicated I would just think so you have one that's five lines long I don't get that I don't see why those aren't those aren't duplicates though like these are different variables we could maybe use a list or a dictionary or something I don't I don't I'm not sure we're actually gonna get rid of that part though I feel like this is kind of pretty close to bare minimum for what we need in there see now I'm paranoid that I could have changed something in there and we're about to override it so what I'm gonna do is do a comparison again this is why I'm trying to always do it the same way so that I don't end up accidentally overriding one or the other that's not true maybe I chose the wrong one here we go okay code pie this would be our flip clock example we won't need that I guess I didn't uh didn't actually save here actually I got rid of that print we should excuse me we should probably take that put it back into code pie this is what we want I do apologize but I have got to run to the restroom again been sitting here drinking too much water apparently so I'll be back in just a minute again we'll pick up where we left off I'll probably be wrapping up before too long but I'm not gonna make it without just dancing around here so BRB okay oh a little hit myself there okay so this I think works pretty good for clock as the example I think maybe we should make another one that does actually count maybe minutes and minutes and seconds you want to do that or do we want to count hours and minutes but just do it faster let's do that let's make another one that is gonna count hours and minutes instead of like this one which is just kind of arbitrarily increasing each pair and let's make one that actually sort of follows the hours and minutes so we'll say flip clock simple test but I'll call it hours and minutes we have this we don't need this all of the rest of the setup is going to be the same we will just let this start on zero we will increment the minutes and if that gets over 59 then we'll increment the hour so I guess what I'm going to do is cur hour equals zero cur minute actually I'm going to say clock first pair clock second pair and then we're going to use these instead so cur minute equals clock that second pair we'll say next minute equals none next hour shoot we're supposed to be minute per minute equals second pair next minute equals current minute plus one if next minute greater than 59 change it down to zero set this here and also do this inside of here which is pretty much take this put it in here but make it per hour next hour next hour next hour next hour per hour so if the minutes get to 60 then increment the hour and if the hours get to greater than 23 just reset back to zero change the minutes and then time does sleep and let's go quicker maybe point five I kind of want it to go pretty fast because I don't necessarily like I definitely don't want real time I do want people to not have to wait for like a full hour to see it you know click over right so we're going to be going faster than real time but I want it to count the same way it would if it were going in real time the same values not the same speed flip lock test the code goes here almost kind of curious like what's the fastest we can get this without it seeming ridiculous I guess I mean the animation is blocking so like theoretically I suppose we could just go without this and that would be as fast as it can go it might look a little crazy though I'm not sure yeah I mean it's pretty fast and cool looking though I don't want to sit through for it too much but I do want to make sure that the first pair increments correctly and that this goes from 59 back to zero and it did well that's looking good I'll watch it flip over past the two just make sure that the hours go up to two make sure that this 59 goes back to zero like that slower should we slow it down a little bit yeah I do like that that it's still fast still doesn't feel like we're going to be waiting that long but it just it gives it a what second in there to kind of breathe while it's just in between right let's us just see it without the animation for just a hair I do actually like that effect I think that's nicer so we'll leave that sleeping this was code hours and minutes why is this red statement what happened here why is this all indented hours and minutes and then I think the last example that I'll have for now will be the NTP example so let's go copy flip clock simple test and let's say flip clock NTP test and this one will use the actual NTP library it will use secrets it will fetch the time from the internet it will show the time on the flip clock but it will be in my time zone can you have both digits turn over simultaneously at zero nine uh short answer is no not really the longer answer is not right now because the animation is synchronous the frames of the animation have time dot sleeps inside of them so you couldn't there's no way to run two animations at once because each one tries to sleep I started the other night working on trying to make it asynchronous instead but I quickly decided that it was getting too complex the logic for the asynchronous one so we may still eventually make it asynchronous I'm not 100% sure not not dead set any any which way just yet so potentially we will make it asynchronous if we do that then you would theoretically have the ability to make it so that both can flip at once instead of sequentially but as of right now it's stuck sequential because of the time dot sleeps good question though yeah I did and I did have that in mind and I did make the attempt but it started getting pretty hairy pretty fast because it turns out the animations are kind of complex I just need to we need to go back and kind of make a state machine for the animations we want NTP so the first updating let's see I saw first updating the hours then minutes at passing 59 wouldn't be better to first show minutes and then update hours uh I don't necessarily know which one I think is better let's see yep that I like the flip clock being updated for at least the start set by the NTP server then maybe after some time sync it again yeah that's how this one works is it sets it from the NTP at the beginning and then it checks over time to get the newer values from the NTP so that it stays in sync with it um to show it flip the from 59 to 0 before the hour so we could do it but it will make the comp it will make the logic more complex because basically we would need like else here and then this inside of here I think that's what we would need at least but it let it roll through real quick just a short moment it was just a short moment but it looked like the seconds were hanging for a moment so I will say one thing is the the camera that this is being filmed on sometimes hitches and then also this is being streamed over wi-fi from that camera back to my computer that stream also sometimes hitches so uh occasionally there will be like pauses or delays or weird jumping action on whatever we're looking at here usually that is not on the display thing itself it's typically uh either the camera that's viewing this or the stream that is streaming this back to my pc here that we're viewing it from so I think this one did do the minutes first right I was talking over it but I think I caught it there and I do believe it did the minutes first I'll say too the minutes feel like seconds probably right because it's going so fast but they do still technically they do still represent minutes you know the other thing we might want to do is when we go from like the nines like 49 to 50 I wonder if it should flip the nine to zero before the four to five or something yeah I I think it probably should because like when it's gonna flip both it flips the tens digit before the ones digit but I think actually flipping the ones digit before the tens digit might look more natural yeah I feel like it would I think I feel like it would I don't necessarily want to make that change right right now but I'm gonna keep that one in mind and we may we may try to knock that one out later uh what I do want to do right now though is try to wrap up the ntp one and then once we wrap up the ntp one and get it tested we probably will be heading out for the night so if anybody does have last minute questions comments ideas things you want to share uh now is the time to get those in the discord or the youtube chat I will finish up this ntp test one import so now the stuff in here is also different but not too much thanks to him for the stream looking forward to downloaded the updated clickflop repo clock flip repo yeah uh totally you're welcome for the stream and um that is awesome I will push it I think before we before I cut out here tonight I'll push it to my own github eventually well if it's going to live under ate a fruit eventually it'll get created under there as well but I will go ahead and push when I'm done here to my github and then I'll share the link in the chat anybody who wants to play with this code can perfect so that is in my time zone again 1811 because it is 6 11 p.m here so I'll let this run here for just a minute uh maybe while that's working I'll scrunch this over and get a new one here maybe we'll start doing that new repo stuff there it goes to 1812 it is in fact now 612 I can't drag here oh that is hard to hit new repo this is ate a fruit display IO flip that's what I did right I mean we should say pre-generated I do think it's important to understand this is a bit like you know it's a bit like a magic trick right we stuffed the bunny in the hat before we were able to pull it out in our case the bunny is these pre-generated sprite sheets that really is kind of like the key of this whole thing making it work is these right sheets right here which I'll also be releasing the pil code that creates these um in fact I will I may as well I'll just go ahead and drop that in the repo as well before I push the first time so public yeah we'll leave all the rest of this blank because we already got license and get ignore and all the rest of the stuff read me and everything we got all that from cookie cutter go create repo copy that so in here we're going to go get a knit no just like that get in it then we're going to go get remote add foamy guy this then we're going to go get checkout dash b main then we're going to go get not in here though get add dot get ignore and push for the first time get ignore foamy guy main push pushing refresh okay we got our get ignore now we're going to go add everything else almost certainly going to fail uh actions because we haven't done pilant we haven't done pre-commit we haven't even done black or anything so like there's definitely you know more than likely this is going to be failing actions and I do know that we will come back and fix it but I'll get the first version at least pushed so we did we're not using that file anymore we can delete that and then what I'll do is inside of examples I'll make another directory for sprite sheet generator and that I have over here makes sprites flip animations but this is the bigger one which I don't actually want truthfully I want the smaller one that wasn't very much stuff to change on anymore in here 12 I will say the bigger the padding um the more pronounced the 3d tilt effect will look because that padding size becomes the part of where it can grow to make it look angled to make it look like it's closer to you more padding means more room to be angled which means that that transition that that translation of that 3d rotation there will look a little bit more pronounced if you have a bigger palette I mean a bigger padding rather I don't think you need to do the get ignore push before anything else that fills your local uh that file tells your local get what to do yeah I think you are probably right but I still always do it this way just kind of like the the path I have gotten into is doing it this way and I know that this way works and so I don't tend to experiment with it too much but that being said I do think you're right I think I could add all that stuff at once and I think it would work um all it's superstition I guess basically that I don't do it that way anyway oh I think it does work 4800 by 500 okay happy that that over here I was being nice need to do it that's true yeah no I don't I think yeah I don't think I need to do it I just do it out of superstition basically no no good rhyme or reason for why I do it I just started doing it that way and have kept doing it that way yeah that's in there we definitely need to come back and clean this up still we got some old commented out stuff we have no documentation comments we have no type annotations or anything like that we don't have those in the widgets either which we'll want to add probably as well but this does get the base version all into the repo I believe and this has got everything we want NTP tests oh we don't want 13 on this though did we change that here yeah let me take that put it back to this NTP test now we can push all of this uh initial see commit things could use yeah so we have to do is that I didn't take care of that are you know they come that way in the cookie cutter you need to go take care of each of them when you spin up a new library I did not do all of that so we have to do is that my thing is telling me about which will also make it fail the actions but that's okay mostly I just want to get it out there so that people can use it if they want so that's now pushed I will drop a link to it in the discord chat here anybody wants to try out the widgets they're in that repo they are inside of the library here there are three different examples that are set up now which show three different ways you can use the library one of them is the most basic the digit by itself the next one is the entire clock the next one is the clock with hours and minutes and then actually I lied there's four examples and the fourth one is the NTP version that will actually fetch the time from the internet and show that live on the screen so it is staying in sync here it's 621 and that is showing 1821 so we're all good there and then the last thing that's in the repo is the pil script that makes the three sprite sheets it makes the static sprite sheet and the two animation sprite sheets it's not documented at all so it's kind of like run at your own you know not really at your own risk it shouldn't do anything bad but you know you kind of got to get set up for it and run it yourself you'll need pillow or some other version of pil the python imaging library you'll need to install that and numpy as well but then you should be able to run this it should when you run it create static sheet dot bmp not this bottom animation sheet and top animation sheet those are the three things you want to take and put on your device in order to use the widget so I think that is going to do it for now I got through creating the repo and we got through creating the examples I didn't do quite as much of the cleanup as I had hoped to get through so some of that's going to have to wait for perhaps tomorrow or later on I will while I'm wrapping it up here say as a reminder for folks what we mentioned earlier is that tomorrow morning is our first circuit python help desk here I think I just put that that's on the screen right or did that go away oh no have we been missing the discord for like ever or did it just go away hopefully we were not missing that for the whole way now it's tough because like it is okay hopefully that was not gone the whole time if it was then I apologize but yeah usually I try to put the discord chat up there um this right here though circuit python help desk first ever circuit python help desk is tomorrow morning this is going to be a new thing that we do on some sort of schedule I don't know that we have the schedule 100 percent nailed down yet so we don't know when the next one will be but our hope is to do this every so often you know once a month or every other month or something like that something fairly regular we're going to try to shift the times around so tomorrow we're doing it Saturday morning you know next time we might choose uh an evening or we might choose a weekday or whatever right we'll try to shift the times around to make it good for all members of the community no matter what time zone you're in this one is the first one though and it is tomorrow morning at 8 a.m eastern time 8 a.m eastern daylight time so that is uh that is uh so for my time that is uh 7 a.m starting and then even earlier six or five over on the west coast so I think I got that right a fair warning I'm not great with time zones maybe I did it backwards that's possible too but I think I got it so the important bit though is 8 a.m eastern time tomorrow you can translate that to whatever time zone you're in and that's when we will be kicking off that first ever circuit python help desk we'll be here on discord so I encourage folks if you want to get involved in circuit python but for whatever reason you haven't done it or you think it's too hard or maybe you gave it a try and got stuck on something or whatever if that's you then join us tomorrow on the discord for the help desk hours there will be plenty of folks around who are willing to help people who are trying to get involved and and just need help from more experienced folks so that's what the help desk is all about we'll be doing that tomorrow morning here on the discord I will be discord just went away it was there until now perfect okay thank goodness um I will be streaming on uh my own uh twitch and youtube tomorrow for that help desk but I don't know for sure if anybody else will be streaming I think a couple other folks mentioned it so there may be a few other streams where people can get live feedback while they're working on stuff um so yeah that is what's going on tomorrow I encourage anybody who's interested to join us on the discord for that um thank you everybody for watching this program this has been the deep dive as a reminder um normally I stream Saturday mornings at 10 a.m central time I'll be a little bit earlier tomorrow because I'll be participating in that help desk so uh I'll be a little earlier than normal tomorrow uh and then I will leave you with the final thought uh again just thinking Adafruit and thanking everybody who would like to purchase hardware from Adafruit in order to help support circuit python project and you know help pay for all of us who do get paid to work on the project of course so thank you to Adafruit thank you to everybody who purchases hardware from Adafruit uh thank you everyone for watching I will see you all back on my stream in the morning tomorrow hope you all have a good night and a good weekends and that