 Alright, good afternoon everyone. It looks like it's got sound at least to the OBS, so we are good on at least one of the hops here. Let me know if anybody is on either of the streams and if there's any audio issues or anything like that. Let me know and I can dig a bit further into that. Let's see here, we're gonna do a few more things here. How's it going? DeboDessa over there on YouTube. Good afternoon to you as well as PaulSK over on Discord. Careful, a few more of these windows around and then we'll be... What's about ready here? The show on the road. Clear this. They don't just don't have a number on there the whole time. Sounds okay here. Thanks, appreciate the heads up on that. Alright. Oh, we are overlapping on the chats there, aren't we? Let's fix that. Oh, but then I can't see it. Scoot that there I guess. Oh, and now it's... It looks to disappear. I don't know what's up with that, but... How's it going? See Grover? Happy Friday and good afternoon to you. The YouTube chat, I guess, is just a hair on the small side, isn't it? Yeah, we're not getting the full. There we are, okay. Be AutoGaF. How's it going? Be AutoGraph. Excuse me, how's it going? Good afternoon to you. It's afternoon where I'm at, sorry. I just mean... Hope you're having a nice day. Nice to see you. All that sort of stuff. Good afternoon is kind of my go-to, but let's minimize that. Okay, so introductions. First of all, hello to everyone. My name is Tim. I go by FomeGuy on GitHub and Discord. This is the deep dive program, which is a weekly livestream program here on the Adafruit YouTube as well as Twitch and I think other video streaming platforms. I don't know everywhere where we're at, but I think YouTube and Twitch are the primary two where folks are watching typically. This is a weekly livestream program where we are working on various aspects of things, you know, inside of CircuitPython project. It's a relatively large project with lots of different facets, so there's different things we work on different weeks. For folks that might be new though, if you're just joining us for the first time, if you haven't caught this stream or watched any of the videos before and you don't know what I'm talking about, circuitpython.org. This is the website where you can go to learn more. CircuitPython is an implementation of Python that is designed to run on tiny computers called microcontrollers. There's a bunch of pictures of them here on the downloads page. Basically, this is a version of Python that runs on these tiny devices. You can plug them into your computer. It shows up like a little thumb drive and then you can edit some Python code on that thumb drive and then that is what executes your code just by saving it on that device. The microcontrollers come in all different shapes and sizes as well as various different, you know, capabilities and built-in peripherals and things. Some of them have, you know, a bunch of built-in hardware like key switches and a knob and a screen, whereas others of them are more general and they just have built-in a lot of iopins, which you can hook up your own hardware to do whatever you want. So all different shapes and sizes of these things, different levels of capabilities, different, you know, various different speeds of computers and amounts of RAM and storage and all this stuff, but the common thread that brings everything together is that they all run CircuitPython. In particular today, I will say too, we will actually be venturing more so over into the Blinka land. Blinka is the CircuitPython compatibility layer that is designed to run on Raspberry Pi and single board computers as well as MicroPython devices. So some of the devices are listed under both because they support MicroPython and therefore you can use Blinka through that. Some devices like the Raspberry Pi, for instance, Raspberry Pi, the specific one I'll be using is this Pi 3B Plus. This one can use Adafruit Blinka, the compatibility layer. What this is going to let us do is run, you know, quote unquote normal Python, CPython, just regular Python code on this Raspberry Pi, but once we get our Blinka compatibility layer set up, we'll be able to kind of treat that Python code as though it's on a CircuitPython device, even though it's actually a full Linux computer rather than just a microcontroller. This is allowing us to kind of share code between the microcontrollers and these, you know, more full-fledged computers like these Linux single board computers and things like that. So Blinka is where I will be at least starting out today. We'll see how long this ends up taking and then what we maybe jump into next. We'll see. I still know so down here. Can I send you some? I have not got any that I could send you, fortunately, or I will say mostly fortunately. You know, the thing with the snow for us this week, we had rain on, was it Monday? I think it might have been Tuesday. We had some rain. It was pretty rainy all day, but it was like unseasonably warm, like 50 or 60, but then overnight that night it did drop like 30 or 40 degrees and by the next day it was below freezing and I was just counting the stars as they say. I was considering myself lucky that it was not precipitating the day that it was cold because I am sure it would have snowed a ton that day. If it had actually come through the day after. Okay, so that was a bit of a long-winded one, but that's the introduction. That's what we're going to be diving into today. A bit is Blinka, rounding it out for that before we jump in. Let me just say thank you to Adafruit. This is their website, Adafruit.com. Adafruit is a hardware and software company based out of New York in the United States. They manufacture and sell the microcontrollers as well as lots of different devices that you can plug into the microcontrollers to add different capabilities, different hardware bits and bobs and pieces and things. Adafruit is the company that is primarily funding the development for Circuit Python. Circuit Python is an open-source project. Anybody's allowed to use it on your own hardware. Anybody's allowed to port it to run on their own devices. All of that sort of stuff is totally fine. You don't have to pay anybody to do that, which is awesome. Adafruit is kind of the company that is making that possible by paying the developers who work on Circuit Python. It's released open-source, but they're paying the team that works on it. Huge thank you to Adafruit. If you want to help support the project, one of the ways you can do that is just by purchasing hardware from Adafruit. So head over to Adafruit.com, get yourself some toys to play with. In doing so, you'll be helping the project and all of those of us that work on it. So thank you for doing that. So specifically today where I'm starting is this PR for Neopixel library. This is a PR that adds some instructions for running the Neopixel example on a Raspberry Pi, specifically without needing sudo. So the way that you would ordinarily set this up and run it, you would need to use like sudo python and then run your script with that. This is saying though with these instructions that we may not need to do that, we should be able to run it without sudo. So what I'm going to do is test this out. The actual PR here is just in addition inside the readme. So really what we're trying to do is just confirm whether or not this works. And in doing so, we will also just kind of walk through the setup process for the Raspberry Pi with Blinka. So if you've never done or seen that before, this will be a chance to see what that's like. And then we'll poke around with it a little bit once we get it loaded, and I'll kind of show you what it does, and we'll use it to test out that Neopixel thing. Now once we get that done, I'll move on to LED animations, which we'll kind of build on top of the stuff we'll do with Neopixel. So I figured that'd be a next good logical step. So I've already got my Raspberry Pi OS setup. Let's see, I never did pull up the camera. I think we have a new IP on my camera. Is this... Yeah, we're on 226 now. I'm the same IP forever, and like the battery died or something. Rebooted and now it has a new IP. We'll still crash the first time. Really scoot this down a touch. All right, Raspberry Pi. Oh, actually before I jump into the Pi also let me just show this because I thought it was cool. Hug report, huge shout out to Mark Gambler, who we talked about a couple of weeks now when we were working on the animated GIF thing. I was working on some example code for that, and I could not resist the the opportunity to set this one up, which was we put the little animated clue spinning around on the actual clue device. So now we got a clue animation inside the clue, which you know, is one of the things that I find kind of amusing in life is stuff like that. Putting a putting a animation of a thing on that thing itself is like a basic thing in life, but it's a thing that amuses me. So you gotta take those basic amusements when you can get them. But that is looking good, animated GIFs. I think that's already merged in now. So I will be looking to hopefully try to write some guide pages for that as soon as we can in the display IO guide because I love to get the word out that that's in there now and that you know, get it set up to where folks know how to actually use it and stuff. Yeah, clueception. So here is our Raspberry Pi. It's already has an OS installed on it. It's hopefully at this IP. Uh-oh. Or was it zero? Maybe it was zero on that one. Oh, I okay. Yeah, yeah. Nice. All right. I just looked at the IP before I got going here. Oh, and now it's not plugged in anymore. Okay, one second. Let me check something over here real fast. Should be one one oh four. That's just that was why it didn't work one time. So this is already up and running. This is SSH session on this Raspberry Pi. So we're just logged into this Pi inside this terminal. We want to do the setup. And so like a bunch of this stuff is already done, right? All of this like we already have the OS, already have the SD card, already have that plugged in, already have SSH on, already have that plugged in. Mine is not plugged into HDMI right now, but it was before I started so that I could find the IP address. If we need to plug it back into HDMI, I will. However, I don't have a way to capture the HDMI and send it out to the stream. So if we do have to go that route, you all will be kind of in the blind. So sorry about that. Plug in the power. We're already powered on LED flicker. Yep. If you're running Windows, we're not. Bonjour local SSH. I didn't do that, but I did have the IP address. So be fine. It wants to do update and upgrade. I think I did this stuff the other day, but I suppose I'll harm in running it again as long as it doesn't take a million years. And my OS on this is relatively new actually. I just set up this Raspberry Pi like last week. When I was playing with a different piece of hardware that I got, I will bust out on the stream at some point. Not today, I don't think. Python 3 pip. I think we probably will have Python 3 pip already, but we'll check after this. Known as an OS without a display, is known as a headless install. Might be worth mentioning this to be done as a headless project. So what I actually do have is the full OS or the... It does have a GUI. I just don't have it like because the HDMI is not plugged in. We don't see it, but I did actually opt for the OS with the GUI mostly because it makes it easy to find the IP. It's probably not the greatest reason to install an entire like window manager and GUI and everything, but it also makes it convenient if you need to access the browser to like search for error message or anything. If it's like easier to copy paste it from the Pi itself, sometimes just going into the browser is nice. But it is... Yeah, the way I'm treating it here, it may as well be the headless one. Like technically there's a window manager coming out of there, but it's getting lost in the void. So then what's... So installing pip and then doing upgrade setup tools. I think this will be what I opt for, but let's see what it's like. It's not going to say 18%, unfortunately. Oh, nope, there we go. It's got to nudge it along. I'm about install pip, upgrade setup tools, and then... So it does say sudo install. There's script to make sure it's properly configured. Python shell. Pi installer script. The enabling spy, that is something we'll definitely need to do because I noted the NeoPixel PR actually said that. Where does, I guess, does it just run this script somewhere? It must be doing like... Yeah, oh yeah, yeah, this is actually doing the install, I guess. Some Python version. I wonder if that's still true about Python 2. That might be an outdated thing. Is that still the default on a Raspberry Pi? And since I've used a Pi, does it have GitHub integration so you can do stuff like circuit via command line? It does have... Well, I'm not sure exactly, I guess, what you mean GitHub integration. It can run like git commands and stuff like git clone, git checkout, git pull, git push, git commit. Even if you have a repo on there, you could make new commits on there. All that stuff it definitely can do. Circuit, I would assume that it can run circuit for installing libraries to microcontrollers that are plugged in via USB. I don't necessarily think that it could use circuit to install libraries for itself to use inside of Blinka. But I don't actually know that for certain. But one thing is, I wonder, so in the instructions they have this Pseudo Python 3 recipe Blinka, I wonder if we want to try installing Blinka differently than the way this guide says. I wonder if we want to try installing actual Blinka without Pseudo as well. I'm gonna try that way. I thought circuit used GitHub somehow. I think it... Yeah, I know it does. It downloads something. It downloads like a JSON file, I think, from GitHub somewhere. But it doesn't need... It's able to just download it with a get request, I think. It doesn't actually need... I don't think, at least, that it actually needs any special integration, just hitting a URL to download it, if I recall correctly. What do we have for Python? We do have Python 3.9, and that's our default, because I just put Python by itself. And I would assume... Yeah, we don't even have a Python 2. PIP. It's slow, honestly, isn't it? I should have gone ethernet on this thing. And that's the same Python 3.9, so we should be good there. I'm gonna try... Well, let's start with some of this stuff. Great setup tools. I don't think we'll need that part. This basically boils down to install Adafruit Python shell, download this Python script, run this Python script, and then check I2C and spy, enabling second spy, and then blink a test. So what I'm gonna do, actually, is I'm gonna try enabling spy, which it should already be enabled, I think, but I'm gonna double check it and just give us all a chance to see how to do that, both spy and serial port hardware. So we run RaspyConfig. I think you do need sudo for this? Yeah. Why Python 2? Well, no, no, no, I don't want to use Python 2. I was... I only... I just ran Python 2 to see if it was installed or not, and it is not installed. So yeah, we're not using it for anything. I was just trying to validate that what we were using was actually Python 3, for sure. Yeah, I mean, these days, ideally, hopefully, nothing really is using Python 2 anymore, ideally. I don't really seem to change the size of this, hopefully, I don't mess it up. So I think it's under interface. So spy is right here. Spy is currently enabled. Oh, okay, yeah. Interface, serial, that. You like login shell? Those are two things, interesting. I don't know why we would need that though. Login shell over serial? Remote GPIO? One wire? Oh, is it i6? Oh, no, that's what I did though. This says enable both spy and serial port hardware. Table UART, we could double check it inside of here. Go finish at bootfig. Let's have enable UART 1. DTparam, spy something? DTparam audio. DTparam spy is on. Reboot the pie to apply the changes. Okay, I don't necessarily want to, but I will. So that's going to log us out of SSH. The Raspberry Pi is going to do its reboot. Hopefully it's going to come back up to the same IP, otherwise I'll have to switch the screen over. But we'll give it a minute, let it come back up. While that's working, we'll just level set what's the plan here. So the plan is going to be to use GPIO 10 to initialize our neopixel. And then as long as we use GPIO 10, it's supposed to work without sudo. And if I'm kind of understanding what's going on here, I think the trick here is like GPIO 10 is part of the spy bus. So we enabled spy inside raspy config, which I think maybe then gave it access to use the spy bus without sudo. So then as long as we stick to a spy bus pin, I think maybe that's how we are being able to use it without sudo. Whereas if we just choose a random pin, I think we do still need sudo, but spy maybe has its own special rules. This is like my interpretation of what's going on in here. I don't necessarily say if this is correct or not. We should probably start to fire this though, right? So I'm going to need three wires, ground, power, data. Data is going to be on that spy, most of the GPIO 10. I picked up some female to female jumpers here, which is what I'm going to use. If I can get them out of the bag, we could use those three. In this case, I actually need these also. I think I'm just going to disconnect these. It's nice that they're all kind of stuck together, but I'm just going to disconnect those. Here is power. Orange is going to be data. And then brown slash green is going to be ground. And you may have noticed I've got the neopixel strip right here. One with alligators. We're going to go ground. Data. I'm sure it doesn't need sudo. It means no manual intervention. Every time you want to use spy I2C GPIO, did it always work that way? Sounds very inconvenient. I can't really answer any sort of did it always work that way? Questions, I'm not really sure how it was historically. What's the upside of being able to work without sudo? Well, you won't need the password for one thing, but also it's less steps. You don't have to type anything. And if you are looking at it from a device security perspective, it means that your user account doesn't need to have access to sudo. I don't know how much people really do the whole user account permissions stuff on a Raspberry Pi when it's like a physical small thing. It doesn't matter as much as like a server, but if you are managing it like a server with users and roles and permissions and things, that would mean that the user that runs this code would not need to have access to sudo, which might be desirable because you could give like a student account, for instance, if you had a student account that didn't have access to sudo to sudo, but it could still do this stuff, then they could be learning and doing code, but they could not accidentally like sudo rmrf or anything tremendously bad, which sudo will happily let you do by itself. So here's our pinout go. Neopixel, I mean we would want five volts, I believe, right? Yeah, five volts. I'll go ground first. How's it going, Jose? Good afternoon and happy Friday to you. I was thinking it was the opposite, that it would be less secure to do the same stuff without sudo. No, no, I mean sudo is basically like admin in the Windows world, I should say, like run as admin. sudo is kind of the equivalent to that. So if you could make it work without sudo, then that means that the user doesn't have to do that run as admin, which means you don't have to give them access to being an admin. So we're third down on the right hand column, and I'm off, I'm not like 100% lined up here, but it's close enough. This is our right hand column. One, two, three, one, two, third down, third down, ground. Power is actually right above that. The both pins right above that are five volts. sudo or sudo? Is that like gif and gif? It's a good question. Su... yeah, sudo I think is the real thing it is, right? Because it literally is just super user do, like do something as super user is the origin of the name that I've heard. But I do pronounce it sudo more like it rhymes with judo because I don't know. Yeah, I don't know to be honest with you. I picture like an old wise judo master who's like had many, many years of training and like passes his wise ways along to some pupil or something. I have no idea why that's the imagery that comes to mind for me, but it kind of does, which I bet probably helps influence that I call it sudo rather than sudo. I say gif like peanut butter. I usually say gif with a g like gator. Yeah, I usually say gif if I'm not thinking about it. So we this one will be the harder one is our GP10 because it's like all the way in the middle. So this is one, two, three, four, five, six, seven, eight, nine, 10th pin down from the top. One, two, three, four, five, six, seven, eight, nine, 10th pin down from the top on the left side column. Done this one first, maybe. One, two, three, four, five, six, seven, eight, nine, five, six, and eight, nine are unused, which makes the 10th the one that we're plugged into. Okay, those should be connected. So I am, we should be hopefully back up and running here. Okay, and I'm going to try just installing Blinka without sudo or anything. I know this says to download the script and do it that way, run the script with sudo, but I'm going to try just going like pip install eta fruit Blinka, see what that gets for us. It may need, is it need like, I don't recall ever seeing those before. Is that a newer thing in pip? These like saw two things. I know it relies on a few things. Okay, pure IO succeeded. Everything seems to have succeeded. It's pretty good. Let's just go, let's just try going straight to the shell. Let's just try import board. All right, import board succeeds. So that's a, that's a good first step at least for sure. Let's get the neopixel repo cloned up here. That's, so yeah, here we can go get, so we're on the Raspberry Pi here. We can go get clone neopixel. We'll clone into there. It looks like progress. Yeah, it's like, I wonder if it's supposed to like, I wonder if it's supposed to like cover up the old one or something. They weren't supposed to be vertical or maybe they just said to heck with it and made them vertical. Interesting, yeah, because it's like it counts up. All right, so we got that clones, neopixel. And I don't have GH, it would be kind of convenient if it had GH because then we could check out the right branch. Terminal is issuing LF when it shouldn't line feed after the progress bar. JPEG sends it short for joint photographics experts group. Announce JPEG. I did not even know that's what that was. JPEG, I don't think I'd ever heard that before. Graphics are not made of peanut butter. The good ones are. The yummy ones are. If there's a hard G since stands for graphic. Yeah, I'm a relatively easy going kind of one personally. As long as like, as long as whatever you use is something that people recognize, then I'm pretty much fine with it. I don't get too bogged down with this way or that way. As long as it's too ubiquitous enough for people to know what you're talking about, that's pretty much enough for me. My goal is to get an idea across as long as the idea got across then pretty happy with it overall as a communication. Oh, I'm going to just copy the simple test and we're, oh, actually there is an RPY simple test. Actually, what's in there? This could be done with rainbow IO now. Oh, I don't know if rainbow IO exists in Blinka though. This is on D18 instead of D10. Probably everything else could stay the same though, I think. D10. I think we have 30. I don't know the order. Less with it later. This is wrong. Theoretically, maybe this works. We can go Python, we have pixel, RPY simple test. Here's crossed. Oh, duh. Oh wait, but we're, oh because it doesn't know that itself exists basically, right? We're inside of examples. We'd either need to copy that up to here or we'd need to install this or we would need to copy neopixel down into there. What do we want to do? Let's install it, I think. Here we go. PIP install on the neopixel library as well. Phone guy, sorry I learned joined late. Did you install the entire stack without sudo boat with Python? So far, yes. I have done everything without sudo except sudo raspy config. I did sudo on that, but everything else so far I have done non-sudo. So installing Blinka, and then all of the Blinka, whatever Blinka installed as requirements, all that stuff, I presume would have also been done non. And then now I just did the neopixel library without as well. So so far we are no sudos on any of our installs right now. Yeah, good question. And also never a problem to ask. If you're late and you want to catch up or anything like that, it's always totally fine for everybody. So should we validate? I mean, is it truly the case that this would only work on the spy pin, basically? Very cool, useful for teachers. Yeah, teacher to student was one of the examples I gave earlier. In fact, Blinky Blinky, the more advanced version of letting an LED. Yeah, LED neopixels are super fun, super nice as a introduction to programming concept, because you can cover so many things like lists and indexes, you know, loops, conditions, like if this thing set the light one way, if the other thing set the light the other way. Obviously, things like colors and hex codes and stuff like that you can cover. But yeah, you can you can learn so much about the basics of programming with neopixels, and it makes it so much more fun than just stuff printing in the console for most folks. So I am happy to have a way to make it easier for sure. Where did my this go? Oh, I don't have the actual thing checked out though. So that doesn't really help me does it? So as far as I can tell, everything seems fine. We'll we'll test it with a couple other things still as we go here. But everything is looking normal to me. Looking good. I know one person mentioned having trouble with it. They said they weren't sure if it was their setup or something else. Talking about maybe if they had the wrong like color scheme or whatever RGBW versus NoW. Possibly just effective. Yeah, we did have one person try and wasn't able to get it going. But I was able to it is failing checks. That's another thing actually that I'll fix while we're here is I think this just needs like pre-commit stuff. I don't think it's anything. I think it's going to be anything too crazy. So we're going to add Casper, Casper error, Casper. Casper, I don't think Casper, by the way, the person who did this, a nice person who figured this out too. I don't even know how they managed to figure out that you could do this without pseudo. That's not where we want. Get remote, add, Casper error, Casper error. Get fetch, Casper. This is a branch, patch one. Need some immediate gratification, which some newer coders need to have. Yeah, for sure. Should be a way in simple tests to switch to GRB or whatever, right? Yeah, there will be. I guess one thing we should do is I could validate if the colors are working. I suppose I might not notice if like red and green were swapped or whatever. Like since it's just cycling through. Oh, I stopped on super pretty rainbow. I get so distracted when I'm working with Neopixels. I'm like a, like a moth through the light sometimes. So I just will be staring at it for a few seconds, catch myself, catch one we're on. So I think let's go pre-commit. Oh, uh, pre-commit run the trailing white space. Succeeds the second time. We should be able to just commit that. We'll have just changed a empty line or something here. Yeah, just that, which will update the PR. Oh, oh, we might not have access. So the way this says add more commits by pushing to patch one, and like it knows that I'm signed in as foamy guy and it's telling me here that I can add more commits. Does that, that means that they check to the thing that's like allow, allow maintainers to commit? Does that stand a reason? So basically what I'm trying to figure out is do I not have right access to it or did my authentication just fail? It's like the logins messed up or something. It says no anonymous right access. Oh yeah, I think that means they didn't check that, huh? Thinks you're not you. Even with this bit here where it's like permission to this is denied to foamy guy, feels like it knows that I'm foamy guy here, but it is weird. It says anonymous too though, right? All right, let me try something else here. Let's go this mode add foamy guy, fetch foamy guy. I have a commit that's not pushed also. Just delete that for now and delete it. And delete it because it's the branch I'm on I think. Out new branch from this foamy guy first. Recommit run A. Does the fix run it again? Okay, not too... Oh, it does work actually, yeah. Pull zero, great. Oh, let me see with this. I'm mesmerizing, printing individual colors as they cycle through could help validate. Probably what I'll do is I'll just set it to what I expect, red or green or whatever. I'll set it to one color instead of cycling through a bunch. Still working on the new string car feathering today. Having fun refactoring the old M0 custom board. Circuit Python code to work with the M4. Getting plenty of reminders from the old code that my coding skills have improved. Seems like this one I've made a real difference. Nice, that's really nice to hear. Looking good. It is amazing. I'm with you though too. Like if I go back to some of my oldest projects and I start looking through the code and updating stuff, like it is amazing. Amazing how much you learn over time for sure. My first Circuit Python board. Nice. Commit. I'm gonna try to push this to foamy guy. Why? If I need to do this again. I swear I have done this many times. Well, that's in the discord window, wasn't it? Shouldn't it be there? There. Can I actually push to the real one now? It's never remembering my stuff. Done this before. Without this. Run that again. Pre-commit. Run that again. And then try to commit it to the real branch. Oh, now my Control-K doesn't work. Like it can't be focused in here? Yeah, it wants to be in a file. The same problem with Control-Shift-K afterwards. If I open a file though. Oh no, it's because I did Control-Alt-K rather. That was my real problem this time. Oops. It still failed. I think we just don't have access. So I think they must have not checked that thing. Which means all this time, all this entire time, I always thought when it said, I always thought when it said this at the bottom, that it was actually like checking the user and knowing whether or not you actually could commit or not. But not actually the case. Hey, but this says, okay. No, I think maybe this just has different permissions or something. I don't know. I think Neopixel has different permissions. And I bet that's what we're running into. I mean, it's intended to be for the Adafruit fork to have those extra permissions. But it seems like maybe it's actually taking effect here as well. Since I don't have access to, since I don't have access to commit to Neopixel, this thing is true, but I'm not actually a maintainer. It says maintainers are allowed, but I'm not in the maintainers group. Because this one is different. Yeah, I think that's the case. I forgot. Yeah, Neopixel is like the, it's like, I don't know if it's the only one, but it does have more strict permissions compared to a lot of the libraries. And also the last interaction was January 9th. Well, so I can't really, I can't really fix it. I was going to just fix it and commit. So I can either open up a PR against past bearer patch one. And then if that person approves the PR and merges it, then this PR would automatically update. Or the other option is I could make a new branch from Casper error patch one, and then I could make a new PR from my new branch. I got to go now. Thanks Tim. Good night all. Yep. Take it easy. Davodesse. I hope you have a nice night. Apparently hierarchy. I'm into 3D printing lately. Those use multiple rubber wheels and metal extruder for gripping the filaments. I missed a couple here. Let's see. What's the gizmo on the top? It's the drive motor batteries on the other side. Looks great. Would two motors grip the line better? More traction. Are there weight classes? More than one pulley is certainly an advantage for traction and stability. Never tried more than one motor though. That's not a question I like. That means you're getting into the spirit of the challenge? Nice. Yeah, it's always one of the fun things with that type of contest or whatever is like really tweaking different stuff to see how it behaves. I should if they have permissions. Yeah, well I think they would have permissions on their own one, but they would not have permissions on the core on the Adafruit fork, I should say. I think what I'm going to do is just make my own branch and just make it into a new PR and leave a comment here. Yeah, that way because I don't know if this person is still active. I don't have much in the way of activity since then. So in case if they don't come back and approve that PR, I would definitely like it if we could still push this forward in the Adafruit fork. So I will go, I made this and I pushed it. We actually just want to make a PR from that. And then because I started it from their branch, like all of their commits are still there, so it still has the full history of everything they did as well. One thing we could do is, we could also do this compare page. I could do, I could link to the compare page for theirs because this link is just like a legit link, right? Like I can just paste this here and it gets me to this page. Yeah, it'd be nice if there was a compare page that was not open to pull request specifically, but so how to compare two branches even across forks? I just don't know where the UI, you know, that feels familiar to me as well. And I feel like I have, I feel like I've seen it before, but not to compare. But yeah, I don't know where it's, if it's linked from anywhere. But then in order to actually use it, I'd have to just like fill in this and I don't know when that master branches here we go, nice call. I still don't know how to actually find it in the front end, but Google helps us there. And then I'll come back and post the number here once I've created it, base URL plus and then slash compare, which I've also in the chat back here, I think we had something, right? No, let's do reference. Just way to do this. Your follow later. Yeah, new PR. Let's see this PR reader and say, I don't know if it will actually run the checks automatically or not, hopefully so. This X over here, but I think it's just not done. I don't know, sometimes the status is wrong. So hopefully we'll see if that passes. While that's going though, let me also think about this a bit more. Let's check on the GR, like RGB or whatever, see what color order we're in or something. Copy. There's order. That's where you would change it. Let's leave it how it is for now. I'm just going to go auto write through. I don't need wheel. Control shift. Works it down. Don't need rainbow cycle. There. Control K cut that. Probably get rid of everything in here for now. Control shift fix. All the way down. Control K. Pass. So let's fill X. Yes. Save. Boom. So we are in the right color order because we got red with that, which is what we expect. Perfect. Let's check, I guess. Maybe still blue and green could be swapped, I suppose, right? Oh, still failed. I'd all underlined too short. Why did that not fail locally? Running treated as error. That's in the docs, I guess. Warning treated as error. That's usually a sphinx thing, right? Yeah, there we go. Okay. Fair enough. I wish that could go inside pre-commit. I'm pretty sure. I'm not knowing if that would cause unwanted side effects or not. But 114. So yeah, sphinx is pretty particular about this kind of stuff. I think it's this. It wants this to be the exact width as the line above it. Pretty sure. I'll push that to my FOMA guy one. We'll update it on this PR. Should also have the mention or whatever now, right? Yeah, that down there. This is pretty nice that you can do all of it without pseudo. I was kind of, I don't know for sure what I was expecting, but I do feel like this was super easy compared to like the past times I've set up Blinka. It's been a very long time since I actually did set up Blinka though, honestly. I just been using the same Raspberry Pi that I set up like ages ago. Around the time when Blinka Display.io first was released, I set up a Raspberry Pi. And I have been using that one since then, up until the time when I did this one here, which is on a new SD card. While this is going, let's also open up LED animation because I also have, it's unrelated to this entirely, other than the fact that it uses NeoPixels and we're dealing with NeoPixels, but it's not related to this PR at all. But I have a PR open in LED animation, which I did get feedback on already, but I have not come back around to handle the feedback. So I'll do that as well while we're here. This was multi-color Comet, not a gating Comet, but it may be worth using star sentinel from an initial release of this to ensure all the bool arguments, initial release. Is that, I guess that would mean put the star in between here? Got the idea? I think that's what that means, would be like, well, would it be here? Not sure if I understand what that means. Because it would be, well, it would be when we pass to super here, I guess, right? But I guess we would need it in, would we need it in both? Does it go? Do you know for sure if it goes in both, like with multi-color Comet? So would it need one here when it passes here? No, it doesn't like that one. Don't do that one. And this stops you from using the non-names, basically. So it forces you to use the name. Okay, all right. Other one is name. Doesn't appear to have explanation in the doc string. True. Let's see, what do we, I took it from here? Have it here. This one came from here. And actually I have any doc strings for this one. I don't know what peers is. Peers are drawn, then shown together. I don't really know what that means. So it peers, I guess it's another animation object. I don't really know what the name is, to be honest. What is the, I don't know if the, does it do anything? Used in the string. Activates a specific animation. Remember that name. Remember in self-members.index, index. But it keeps a name and it uses it to look through this list, I think, but then it makes the index is what it actually ends up storing. As far as I can tell, it's just, I guess, a string. Name none. I guess it's optional too then, because it's set to none on that one. I don't know the right format for these. I always get sphinx ones confused with actual Python typing. I don't know if that's right. Optional. Word is normally spelled with a hyphen. Is there anything else that uses it besides two string? And the way that it was, I mean, that's like internal. The way that it was finding that index or whatever. I don't even know that that's like, I don't know that that matters, right? Because the actual API is index. So it looks like you're supposed to be passing. Oh, okay. This is like if you passed it wrong, actually. It's saying if you passed a string, then it will look for the value. You're supposed to pass the index as a number. But it actually tries to help you out if you had passed it as a string. So theoretically, you can call activate and pass in the name of your animation. But what does activate do? I don't think I've ever used activate. I don't recall ever using activate, I should say. So should we put that or not? It feels like a, it almost feels like an off label. Like the thing is called index. Primary intention is for you to pass the index, but it is forgiving in that it allows you to pass the name. I don't know. It almost feels like it's a secondary thing. Like we wouldn't want to mention the name. Maybe that's wrong. That's kind of my instinct, though, is to not mention it here because you're really supposed to do the index. That's exceeded. It's optional. Is it okay? Well, these got like super indented. I don't know how it shows where to put that. Oh, flictings. And flicting. I'm going to check back in on the neopixel one here in a minute as well. Update main and then merge main into this background color. We want bounce and new one. Oh, but that changed also. Tricky, tricky. I see. But we want that to be false. I'm going to do magic wand because usually magic wand does what I want. Got out to idea magic wand for somehow reading my mind and knowing what it's supposed to do because I don't really understand how it chooses left or right sometimes, but did exactly what I wanted. Background color. That which will have the merged main. Go merged main. So then this will rerun actions on this one. We'll see if we pass. Let's see about our neopixel. Nice. Good to go there. Okay. We are set there. Wait in here, but I pushed. Let me get LED animation on the pie. And we will just test this out on the pie. But my coffee has gone right through me. I got to run to the restroom real fast and then I'll be right back. Okay. Should we test and see if we could use a different pin? Do we try to confirm that it does indeed only work with GPIO 10? So maybe if I moved it to like 22, which is just too up from where we're at on 10. First, let me turn the neopixels off actually. Should have done that a while ago. That was bright. Yeah. So now let's move our pin. It's actually crashed or did I turn that off? I'm going to go two up from where we're at. That's there. One, two, three, five, six, seven. We are on the eighth pin right now. One, two, three, four, five, six, seven. We are on the eighth, which is 22. Is it D22 though? Yes, probably right. Fair enough. GPIO not possible. And I mean, that's not just like, I didn't just choose a pin that can't do that or something, did I? And I think that pin can do it. It's just it's, it would need sudo. I guess we could test me. Well, I don't know. If I run sudo at this point, does it matter? It doesn't because sudo python can't actually see blinka. We would have to actually install blinka with sudo as well. Or else we would somehow have to link it somewhere so that like sudo python would have access to, hey, hey, hey, hey. Buddy? Just realized a stripy, stripy dude catman down here was trying to help me out with my jumper wires. How's it going over on YouTube there? Abdua Boka? I possibly pronounced that wrong. I apologize if so, but pleasure to have you joining in. Okay, so we definitely cannot just use whatever port pin rather we want. It does seem specific to in 10 or I guess probably any spy pin might be fine as long as it can output, but certainly the mosey pin, you know, is obviously like the spy pin that's supposed to be for outputting. So certainly makes the most sense. Ooh, this time we got nothing. Did I re? Oh, but I moved the pin, obviously. Need to go back down to what we're looking for. Okay. DP22 is illegal on LED channel. What does that mean? Is 22 just like actually doesn't work for LEDs? Did I just choose one that's not working? Is there a listing or something? How would I know which one is fine? So like I'm trying to choose one that's not spy zero since I, if I'm understanding correctly it being a spy pin is why we're able to do it. I could, I could be not actually understanding correctly. Maybe 14 or 15 could work because there you are. Well, what does the original example say? The original example said 18. Trip enable fill up was part of the error message. Yeah, thank you. I definitely did not notice that. Oops, that Microsoft being dead. Doesn't have an answer. We're gonna back to the old Google Tron there. Your word check. Say the same error. All right. This is part of the problem a little bit with Raspberry Pis is there's been so many different ones now. It's like when you do find information you got to definitely try to be sure that like you're actually looking at something that's relevant to your specific version. All right. Let's just try 18 since that's what was in the example code originally. And I don't even have to switch it. Well, I mean we'll have to switch it if we want to see if it works. But what I'm going to do is just change the pin and run it without actually moving it. Because if it fails, we'll tell us that it can't work. Got permission denied. It is a different error. Interesting. Oh, and it even says here. Okay. Yeah. So it seems like 22 actually is just not allowed for some reason. But 18 is. And for using Neopixels, I mean pin 20, 22 seems like it doesn't work with Neopixels, but 18 does. Whereas we're still not able to do it because we have to go with Pseudo. So 10, using 10 is the trick. If you use 10 and you enable spy, you can get it done without Pseudo. And actually I want to change that. I'm not sure why I did. Yeah. Good catch. Thank you for that. Ends up by the way. I definitely just scrolled right past that. We're good on this one too. We got our green check. I'm going to go back here. Get clone this one side there. Get remote dash V. Get remote or a rename origin. Get a fruit. Get remote add foamy guy. Get fetch foamy guy. Get check out foamy guy. Multicolor vomit. Is this tab complete? Oh nice. I had no idea that didn't work. It's supposed to be like that. You can tell a little probably that I don't normally do this with the command line. You check out a branch on a different remote. Flash. Is it supposed to be a slash? Something right slash. And a detached head state. Sure. Yeah. Multicolor comet is there. And I'm also going to check to see that we have our actual new changes like that right there. So this is definitely the latest version of this. So some of these are executable whereas others are not. That's interesting, huh? Done. Only have 30. Oh no. What is M dash U? I don't know how to undo. What is M? That can't just mean the letter M. It's not control because control is the carrot. Is it alt? No. Oh yes. Just took a second. Okay alt. And I have 96. We have 30. A lot of colors but right. Tail length. Probably shouldn't do 20 maybe. Anime. Okay. No module. But that's because we're inside of the examples folder. I wish I could just like look up by one directory and see that I want to do. Let's go back. Hit the install. Dot. That's supposed to do dot slash. I think it's going. Probably but surely. So now we go back to examples. Check around that. Boom. There it is. This is very fast. We do have something weird here where this is always green. I wonder if we have something still disconfigured. I will be honest. I don't quite recall the exact way that the colors work here. So that says to match the number of pixels. So we do have 30 pixels. Oh the orders. We did have DBR I think. DRB. Did that save? Weird. It don't ask me the name did it? Still really fast. We still have green here as well. I don't actually remember. I don't actually remember what it looks like when it's working. It's been a while since I did this one. Doesn't. Doesn't. Oh it doesn't show me the colors. I don't think it's working right. Is this a... It looks to me like this is a gradient from red to green. Is what it's intending to be. But the actual comment that I'm ending up with is like some blue, some red, some pink. And then it's like repeating as well. So we make out the colors on this thing because it's all too bright I guess. But I mean our one green thing seems wrong. But also our colors there kind of don't seem right to me either. I don't... Like I said though it's been so long. I don't really remember what it's supposed to look like. So honestly I'd have to run this on the... I'd have to run it on another device. Take a look at what it's supposed to do. I just don't remember right now. What I'm gonna do is this... It's gonna take a second. Just do two colors for now. Green and blue. Okay that one looks better. Maybe we had too many colors honestly. Like that original one was written for a 96 led thing and it had a comet tail that was way bigger. This time we got more like what I was expecting I think. Interestingly like it looks like red while it's running but then when I stopped... Stopped on blue. Kind of odd right? Green and blue. That color's tail length. Just blow it down. Oh if you do control S does it save? Can you save with control S inside nano? That was weird right? I don't blink you there for a minute. Now it's back to being normal. So like always after the first iteration or animations there shouldn't... I don't think there should be weird. I mean I don't... I don't believe there should be multiple because there's only... I only have one SSH shell open and I've been doing like it blocks. So when I run it I have to control C before I'm going to be able to run another one. So I wouldn't really have a way to get to running and then the actual code itself. Let's double check the code itself. It's possible to do multiple in the code. Multicolor, comet, pixels, speed, tail length, bounce, ring reverse. Yeah just comet only and then anim.commit.animate inside of well true there. I wonder if that's like maybe that wigs it out? But I mean it would be sleeping internally? Well I guess it's not though right? It's it doesn't sleep internally. It does uh it's like uh like pull weighting lines. Dude you totally can control S saves inside nano. That's like mind-blowing moment for me. I have always been using control X and it's not defined. Serious. I made it worse. Interesting. Multicolor instead of import comet. I don't think it will make any difference. The pie is like doing other stuff. I mean if we're just on the spy bus is there other hardware that it could be writing? Like because like something else could write on the spy bus maybe right? Like something else maybe is sending data down the spy MOSI line. Since we're not using chip select or anything nobody is like telling us when the data is meant for us or not. There's no mechanism for that. It seems odd that the time sleep seems to have made it worse. Like I ran it without this. We did not really get that as much. Although I mean I guess I did the first time. A time we have just read in the thing. I don't know. That feels like it's wigging out somehow. My best guess is it's got other stuff that it's trying to send spy data to. And what we're seeing is the neopixels interpretation of that data that's getting sent to it. Seems random yeah. I mean it's got a little bit of a pattern. Like it seems like it's red and green mostly and it seems like this one here really wants to blink a lot green specifically. It's got a little bit of a pattern but it doesn't. That's like sometimes like now it's right out of the gate. And like sometimes I ran it and it didn't do that at all. And it slows down and doesn't blink anymore as much. I don't know though it's like it's doesn't. Maybe I'm coming around more to your side actually it's starting to feel more random now because we're not even getting the same thing. In fact now we're just back and forth with red over and over again. Oh that is really weird. How do you convert a string to a tuple? I don't want to do that. Red works. What's going for here was can I go their way to check whether something else is using the spy bus from the Linux side. There probably is but I don't know how to do it. I mean if nothing else like everything in Linux is a file there's probably some file somewhere where we could do cat-f or rather tail-f I mean. And then like we should see stuff going into it. It doesn't like the zero x int. Oh 16. Okay there we go. There we go. Now I can pass whatever color I want here. And we'll set it. I'm trying to do up though and that's not. Now I guess we could take out the while true at this point but yeah I don't know. My other guess is like something related to speed like maybe we were trying to send maybe we were trying to send data out too fast with the animation because like when we just set single colors like this doesn't seem to have any trouble. I mean so far at least we've always we've always been fine on the single colors. So maybe we were trying to go too fast when it's using animation because it would be well I guess the other thing is too it's not doing fill single ones that are working fine as well. You know pixels designed for I2C bus speeds and not spy speed for built-in IC clock rate. I couldn't tell you to be honest I don't know that much about the actual protocol. For Neopixel and I also don't really know that much about the protocols for spy and I2C for talking about the actual nitty gritty details of the bus transmissions and all that stuff is kind of over my head. Is that sending single color continuously or only once? It should I don't know actually. In my head I think the answer is it only sends it once and it doesn't have to send it continuously. But I don't actually know that for sure that's just like a complete and total guess on my part. I'm not even sure why why I feel like I have a guess because I truly just don't know but yeah that's what I got in my head at least. Okay I think we're gonna wrap it up there. I will be back if folks are interested tomorrow morning at 10 a.m. central time if you want to watch some more of me working on circuit python stuff. I'm happy that we made it through this kind of testing with the Neopixel pseudo list thing. I'll keep an eye on those PRs and see if the original contributor comes back to the other one and makes the change. If they do then I'll close mine otherwise if they don't come back and make any changes then maybe we can get mine reviewed by somebody and merged at some point because yeah I think this is a great addition to the documentation. It's a relatively small touch or whatever right it's not a massive new change but it is pretty nice like especially for that kind of like teacher-student type scenario or any kind of scenario where you want to have the actual user permissions not be elevated. This could help you out in that situation so neat trick. I'm happy to have tested it out we also went back and updated this old LED animation PR mine so I'll post a comment on there that I've updated that at some point as well but that's going to do it for tonight. Thank you everybody for hanging out. Thanks everyone who was in the chat and helping me out by pointing things out and just interacting and having fun and commenting and asking questions and all that stuff. I appreciate everybody who is doing all that stuff but I also equally appreciate everybody who's just watching along and not chatting that's totally cool as well. Like I said I'll be back tomorrow morning 10 a.m. central time over on my own channel on Twitch and YouTube. I'll drop links in the Discord chat here when I get started with that so if you want to just follow the link instead of you know following me or anything like that you can look for those links in the morning. I hope everybody has a good rest of your evening and a good weekend if I don't see you later on but otherwise I'll catch you later. I'll see you all tomorrow morning.