 Hello, everyone. This is the Adafruit Circuit Python, or the Circuit Python Weekly meeting for April 8, 2024. This is the time of the week where we get together to talk about all things Python. I'm Scott, and I'm sponsored by Adafruit to work on Circuit Python. First, I'll apologize for the frog in my throat, but I have a daycare cold courtesy of my two-year-old. Circuit Python is a version of Python designed for on tiny computers called microcontrollers. Circuit Python development is primarily sponsored by Adafruit, so if you want to support Adafruit and Circuit Python, consider purchasing hardware from Adafruit.com. This meeting is hosted on the Adafruit Discord server. You can join anytime by going to the URL, adafru.it, slash discord. We hold the meeting in the Circuit Python DevText channel and the Circuit Python Voice channel. This meeting typically happens on Mondays at 2 p.m. Eastern, 11 a.m. Pacific, except when it coincides with the U.S. holiday. In the notes doc, there's a link to a calendar you can view online or add to your favorite calendar app. We also send notifications about upcoming meetings via Discord. If you'd like to receive these notifications, ask us to add you to the Circuit Python needs to Discord role. There's a notes document that accompanies the meeting and recording. You can contribute to this document beforehand. The final notes document includes timestamps to go along with the video, so you can use the doc to skip around to view the parts of the meeting that interest you most. The meeting tends to run 30 to 60 minutes. After each meeting, we post the link to the next meeting's Discord or notes document to the Circuit Python Dev channel on the Adafruit Discord. Check the PIN messages to find the latest notes doc so you can add your notes for the following meeting. If you wish to participate but cannot attend, the notes doc is the place to leave hug reports and status updates for us to read during the meeting. This meeting is held in five parts. The first is community news. This is a brief look at all things Circuit Python and Python on hardware in the community. It's a chosen set of items from our Python on microcontrollers newsletter. The second part is the state of Circuit Python libraries in Blinka. This is a quantitative overview of the entire project as a chance to look at the project by the numbers separate from our status updates. The third part is hug reports. Hug reports is an opportunity to highlight the good things folks are doing, taking the time to recognize the awesome folks in our community. It's done as around Robin. Status updates is also done as around Robin. Excuse me. Status updates is an opportunity to report on what we've been up to. Take a couple of minutes and talk about what you've been doing in the last week, since last meeting and what you'll be up to over the next week. The fifth part is in the weeds. In the weeds is an opportunity for more long form discussions. These discussions can come out of status updates or be something you've identified. The head of time is too long for status updates. That covers how the meeting will go and I'll get started. Take a time code and do community news. And if you do hear pauses, I'm trying to... I do have some coughs and I'm trying to pause or mute my mic. Not for the live folks, but for the recording folks. All right. So community news is a preview of the newsletter. We'll talk about that in a little bit. The headline here is CircuitPython 9.0.3 was released. It's the latest bug fix release of CircuitPython and is a new stable release. The only changes from 9.0.3 to 9.0.2 are fixed for analog in on Nordic NRF boards in the addition of a WaveShare RP2040 Geek board. And there's links to the release notes there. Next up, expressive chip news. Back in our January 10th, 2023 issue, we discussed the new ESP32-C6 and ESP32-P4. The C6 is on the market and the expressive has more P4 news. Adafruit has announced that the Adafruit ESP32-C6 Feather, a C6 development board in the ubiquitous feather form factor, it integrates 2.4 gigahertz Wi-Fi 6, BLE 5, and the 802.15.4 protocol. It brings the goodness you know for the low-cost C3 series and improves it with ZigBee, also known as 802.15.4 at 2.4 gigahertz. It can make for great matter development hardware. There's also a BME280 temperature and humidity sensor to make an integrated sensor node. Regarding the P4, there's a new video just released by Espressive saying unveiling the ESP32-P4, a high-performing SOC with extensive IO connectivity, HMI, and security features. There's a YouTube video and a product page link there as well. And DJ Devon 3 notes in the chat that the P4 does not have Wi-Fi. So just heads up, that's one of the first chips from Espressive that doesn't have Wi-Fi or a radio at all actually. It's the first one I know without a radio completely. I'm sure that'll change. Okay, last up in our community news, the Python Software Foundation has news and brief. First, the PSF has joined the Open Initiative for Cyber Security Standards. There's an April 2024 newsletter including Picon 2024 information and more and then also a blog post about reporting malware on Pi PI. So check and look at those things. Newsletter details. These stories come from the Python and Microcontrollers Weekly newsletter which is a CircuitPython community-run newsletter emailed every Monday. The complete archives are available at the URL adafruitgaly.com slash category slash CircuitPython. It highlights the latest Python on hardware-related news from around the web including CircuitPython, Python, and MicroPython developments. To contribute your own news or project, edit next week's draft on submit a pull request with the changes. You may also email cpnews at adafruit.com or tag a post with hashtag CircuitPython on Mastodon, LooseGuy, or X. Alright, that's it for community news. Next we have the state of CircuitPython libraries in Blinka. This is a kind of objective view on how CircuitPython and its core components are doing. To balance the later parts, we'll talk more subjectively about how things are going. First, the numbers overall. Over all of the CircuitPython-related repos, we had 28 pull requests merged from 15 different authors. Some new folks to me are Brushmate, Sean the IT guy, and Fabian Chateau. Those are all new-ish names to me, so thanks to the new folks. We had seven reviewers. Thank you again to all of our reviewers who support our authors. Overall we had 18 closed issues by seven people, and 19 opened by 19 people. So lots of engagement in terms of different folks filing issues, and we're only net up one, which is great. Now for the core. So this is the C core of CircuitPython. We had 16 pull requests merged from 10 different authors. Those new names are listed here as well, and two reviewers, myself and Dan. We have 21 open pull requests, so I think we're comfortably under that 25 limit, where we have to have more than one page. We have 12 closed issues by four people, and nine opened by nine people. So we're net down three, which is awesome, and getting close to double digits in terms of folks involved. We have a total of 673 open issues. We have nine active milestones. The core ones are 910, which is going to be the next kind of feature release, which has no open issues actually. 9XX is like work we want to do kind of soonish. It has 25 open issues. There is one open issue for 8.2X, which I will talk about later if I don't forget. It's not necessarily an 8.2 issue, but it's an interaction between some of the NRF bootloaders and CircuitPython. And we have three issues not assigned to milestone when these stats were taken, so we're just going to have to do our normal post-weekend triage as well. And with that, I'm going to hand it off to Dan to read the update for the libraries. Okay, thanks, Scott. Normally, Tim Foley Guy would read this section, but he's off watching the Eclipse. So covers things that all the CircuitPython libraries and related code. And in the past week, and pull requests merged by five authors and there were seven reviewers. A lot of these pull requests, none of them was more than two weeks old, more or less, that were merged. And so we have left. There are 71 open pull requests across all the libraries in which there are hundreds. There are, in the past week, there were five issues closed by four people and nine issues opened by nine people. That leaves 737 open issues, of which five were marked as good first issue. So if you'd like to contribute to CircuitPython, working in the libraries is a good way to do that because it's all Python code. You don't have to do low-level C code on the CircuitPython core. If you want to look at CircuitPython.org slash contributing, where you'll find a list of the open pull requests and list of open issues, you can look for, there's a few issues that are marked good first issue, which are relatively simple or straightforward, and you might look at those, but you could also just look over. There's a lot of issues that aren't marked that are probably pretty easy to deal with also. So take a look at those. And I think that's, please feel free to ask us for mentoring help. We love having contributors to both libraries and CircuitPython. So with that, I'll turn it back over to Scott. All right. I will cover PyPI Weekly downloads. I'm sorry, I forgot to do that. Go ahead. I have never read the library before or not from the past three years. You're doing great, Dan. You're doing great. Okay. So PyPI is the main, regular Pythons place to download libraries from, and we do upload all our libraries to there for download for various purposes. There have been 136,852 PyPI downloads over 325 libraries, and the most popular libraries tend to be Request and Bus Device and then some other related libraries. In the past week, only two libraries were updated of the CircuitPython Request Library and the CircuitPython Tommel Library, which I believe is a community library. And those have been, so those are in the latest bundle. And that, now I'm really finished. Thanks, Dan. All right, and next we're going to ask Melissa for a Blinka update. Yeah, Blinka is our CircuitPython compatibility layer for MicroPython, RaspberryPy, and other single board computers. And this week we had two pull requests merged by two authors and two reviewers. There are currently four open pull requests amongst all the repositories. There was one closed issue by one person and one open by one person, leaving a net of 85 open issues. I believe most of those are like new board requests at this point. There were 14,264 PyPI downloads in the last week, 11,356 PyWheels downloads in the last month, and we are at 133 boards. And that's it. Thank you, Melissa. All right, that's it for the State of CircuitPython libraries in Blinka. Next up we have hug reports. This is the first of two round robin sections where I will start and then it will go somewhat alphabetically through the folks in the Discord channel and those who have dropped notes in the note stock. If folks have said that they are not present, there's actually, we're recording this during or close to an eclipse in part of the U.S., so there's a number of folks that are doing things for that. But I'll read them off. They've dropped notes in here prior. Hug reports is a chance to say thanks to folks for what they've been working on and highlight all the cool things that people are doing within. And Fed A2 says the eclipse is partial in Costa Rica as well. Okay, so hug reports. Let me start and then we'll go through the list. For me I have a quick hug to all of the PyCascades organizers for a well-run conference full of Pythonistas this past weekend. Next up is Dan. Okay, so thanks to Brushmate who added code to CircuitPython to be able to change the various names that USB MIDI presents when the USB MIDI device comes up. So there are two what are called interface names and there are two MIDI jack names and those were fixed at a certain thing and a lot of people have asked to be able to change them and thanks to Brushmate for adding the code to do that. Thanks to Kevin J. Walters who found a very odd issue where if you reuse an analog pin as a digital pin on NRF 52040, it doesn't work right. And we thought maybe first this was a new nine bug but it's present in eight and it could have been present since the beginning of time. So it's not a common use case so we'll look at it for sure though. And thanks to Scott for a 9x issue triage meeting which we had last Friday. That's it. Thanks, Dan. All right, next up I have notes from David Globe. He says, hug to P3-LIM, Adrian L. Lung and Dan for hinting the use of microcontroller.nvm for hiding circuit pi. Hug to Dan for taking care of all of the circuit pipeline releases and myself for working on the USB host feathering support. Next up is DJ Devon 3. Thank you. I have a hug for FOMI guy for going through my commits with a fine-tooth comb especially the typing PR where Pilant almost calls me to throw my keyboard across the room. Another hug for the Saturday morning stream on refactoring and improving circuit. A hug to L. Pakenin for advice on catching line endings using ordinal values. I didn't end up using it but I learned a lot from the process. A hug to Todd Butt for helping troubleshoot an SD card issue just a couple minutes ago. It's turned out to be bad soldering on my part. Very nice catch, Todd Butt. And a hug to Tanute for a nice Cascades preview on Deep Dive this week and I hope you get better soon. It does sound like you have a frog stuck in there. Yeah, and I like your frog emoji in the notes too. Thanks, Devon. Okay, next up I have notes from FOMI guy who says hug reports to Scott myself for reviews and offering improvements to the circuit refactoring work. A hug to L. Pakenin and Dan H for helping me work through a bill-wildering issue with Pi test and Discord. Also hugs to L. Pakenin for sharing ideas and improvements to an on-device testing utility that I've started to build and a group hug. Next up from Jep where we have a group hug as well. And now is Mika Melissa. Let's see. I have a hug for everybody who's been submitting their new boards at circuitpython.org to Rich Turf, Gabby's Rich Turf that is for opening an issue for a Blikabug and PWMIO that I accidentally introduced and group hug to Brunos. Thanks, Melissa. Last up I have notes from Mika Pacusa who says hug to Andres the cat for posting the issue about using Adafruit HTTP server with an AP and hugs to AnakData for testing the PR with AP and connection manager examples in HTTP server. That's it for hug reports. Next up we have status updates which is also done in a similar manner. But this time we want to hear what you've been working on in the past week and what you plan on working on in the coming week. It's a great opportunity for folks to share knowledge if somebody's working on something that you've done before or if you want to collaborate together. So it's cool to see all the different things that people are working on. I'll start and then we'll go down the list just like last time. So for me, my Pi Cascades talk went as well as you could if I sound like this. I'm really happy I did it on Friday before I started sounding like this on the deep dive stream. I'm wrapping up the USB host feathering support today and tomorrow. I did a good refactor during my stream on Friday and I want to just bring it over to CMD in particular and I have to update the documentation as well. I may spend a little time to finish adding clang support to our make files so not necessarily switching over to clang fully but at least getting a CI run that builds under clang so that we can ensure that we keep support. There's a CLI tool called bear which you can use to generate a compile commands.json which is used by the clang-d language server to determine how each individual C file is actually compiled like what include past there on things. I got it set up on my laptop last night and it looks really helpful so I'm going to actually do that this afternoon for myself on my desktop. I'm out most of next week for a Zephyr conference here in Seattle and then on Friday we're taking a family long weekend so I won't be running much next week and then just a heads up I'll also be gone the first full week I think it's the first full week of May the 6th through 10th for a road trip with my dad so I'll be out then too. Alright next up is Dan. Today I released CircuitPiketon 903 as mentioned above it's just one additional board and one port fixed. As I mentioned Scott and I also treehouse the 9XX bug list and we reduced the number of issues we want to work on from 33 to 25. Some of those we push forward some of them we closed so forth. Somebody some people noticed or at least one person noticed that there were some read-the-docs bills that were really ancient and it turns out like we added some feature and they said I didn't even know that feature was there because it wasn't in the documentation that was because around December read-the-docs decided that they wanted for all their webhooks they wanted a secret which is basically just a password that they generate a long key and many of the webhooks in the libraries did not have them about 10% didn't have those secrets either because they weren't copied over or because the webhook had been created so long ago that it was before read-the-docs was even using secrets. So I went through all of these by hand which was an interesting amount of clicking and fixed the ones that needed secrets. We ran some builds if it looked like they were really out of date and also fixed some other problems with these webhooks. I didn't look at anything else kind of in this process but I think that now nearly all the documentation will build reliably. There are a few documentation, RTT bills that are in the wrong style and I think that's probably because there's something wrong with the read-the-docs YAML file that's in those repos but I neglected to write down which of those were there so if you find one bring it to our attention. Otherwise I'm looking at bugs to fix in 910 and later versions of 9XX looking at them, triaging them, figuring out if they're really bugs and fixing them if I can. That's it. Okay, next up I'm going to read for David who says, Improved my mouse jiggler by making it stealth but switchable by the boot button on the QDPI 2040 using microcontroller.nvm0 to store a behavior flag. Soldering for the first time with prescription glasses and this is a game changer. Great. The USB host feathering is ready to test my work and the DVI RB 2040 feather is to be ready to replicate the CPM emulator by Jeff. Next up we have DJ Devon 3. Thank you. This week I submitted a new API example for qtimes.com API to add a free request. The API interacts with many different theme parks. The example only pulls from Disneyland shows the name of the ride, the Q-time if the ride is open or closed and I handed that idea off to the Ruiz brothers who might turn that into a project somehow because they're really interested in Disney stuff. I finally figured out a way to address the GitHub desktop issue where it automatically converts all line endings to CRLF during checkout. I wrote a playground note on using Windows PowerShell to automatically convert them to LF line endings and then it runs black and then reuse and then pre-commit all in one shot with two mouse clicks. This issue has plagued GitHub desktop users since its debut. Pretty sure every Windows GitHub desktop user on the entire planet will want to know about this. I'm not going to call it a fix, but it's definitely a nice workaround. I made some more progress on the ATEC crypto chip bug. I fooled it into thinking it's receiving a correct CRC match and it started working as intended. Upon more investigation I found that CRC1 and CRC2 randomly do not match. Early indications are pointing at some kind of analog voltage oscillator counter rollover. Not working properly. The CRC mismatch error seems to occur when CRC1 reaches 65535 and I don't think that's a coincidence. And I finally got a working belt sander. I broke two of them this week. And I can sand and stain some new shelves. That's it. Nice. Thanks, David. Alright. Next up we have notes from FOMI guy because he's out, well, missing the live meeting to catch the eclipse. Refactoring CIRCUP to break it up into smaller chunks to hopefully make it easier to understand, maintain and develop new features for. Resolving a few of the existing issues while I'm there and trying to work toward a new feature that would allow CIRCUP to be used for loading library examples onto the connected device. In order to make my wish of CIRCUP loading examples easier to achieve, I'd like to resolve a long-standing issue slash idea and CIRCUP I can build tools to break up the examples directory into one directory per library rather than the existing way which puts all examples from all libraries into one folder together. Received all hardware and started wiring buttons for a Simon like game, but I was too rough with the thin grove cable wiring and my buttons are flaky if the wires it held perfect, absolutely perfectly. I'm planning to drop the grove wing all together and just wire the buttons to a perma-proto breadboard instead. All right. And that's from FOMIGuy and now we have Notes from Jepler who says, out watching the eclipse today, hopefully works a bit on the POSIX port. I found an interesting crash when trying to enter safe mode. I should make up a PR to fix it. The problem can occur if a safe mode reset message is printed before the cue strip pool is fully initialized. This happens to me in the POSIX port, but may or may not happen in quote in real life. And last up, let's hear from maker Melissa. Hi. Let's see. I always have trouble finding that unmute button. I worked through going through the Raspberry Pi related guide feedback and updating the guides as needed and it's really good to continue doing. Awesome. Thanks, Melissa. And that's it for status updates. The last section we have here is in the weeds, which is a chance for any longer form discussion or questions that we have. We've got one topic here today from DJ Devon 3, so I'll hand it over to them to introduce the topic. Thank you. Currently, all request API examples that I've contributed use an explicit response.close to disconnect the socket. Anecdata brought up a good point that using with request.data and then the source as request or as response does not require an explicit close. Any preference, does anyone have a preference on the syntax or method used? Anecdata says to me, quote unquote, to me with is simpler than close, but it's another concept to grasp. So it might be better for beginners to see the dot close, the explicit dot close, in order to see what the script is doing. I can submit a new API example that uses both methods so that somebody could see the with method right up against another identical that doesn't use the with and uses the response.close instead. But this is because it's in the adder for request library, that's not a decision that I can make that's up to you guys. So with is better. And it's better because if an exception happens with ensures that the close is still called. It's not obvious that it works that way, but... I did not know that, okay. Yeah. It's a general Python thing that with is better because it happens even when exceptions are raised. And I assume that works for a circuit by then too, but yeah, I understand that it's a new mechanic, but I think with is really useful. The term for it in circuit by then is actually context managers, if you want to find more information on how that works. Okay. Are there any objections to me just going in and rewriting all of this stuff that has dot close to use with statements instead? Do one first, please. Okay. It can get a little tricky because you end up nesting stuff. Oh, I have already done it on multiple examples. Okay. Yeah, just push them in. So let's just double check that it looks okay. Okay. I would say one thing that's missing is going up a level on all this is that you don't actually have like a guide about kind of like canonical and best practices for doing networking. Yeah. There's a lot of like, there are these mirrored pages that show you, okay, here's how to do a simple something or other on this board and that board on the other board. But there isn't like, you know, we now have this display IO guide, but we don't have like a networking guide. And I know David Claude said that he assumed there is a guide and there is not a guide as far as I know. So you might think about that in the long run. Like all these examples, for instance, that you're doing in the library are great, but a lot of people don't know to look at the examples directory in the library. And so it doesn't, there aren't links to those things. And so maybe we'll bring this up internally about whether someone might write a guide or if someone writes to write a playground note or something like that, that would be great too. I could do that. I've done all of the API examples. I'm probably the best person to do it. Yeah. I mean, I'm thinking that you might want to write up your examples as playground notes. All of them? No, no, no. Well, you can do what you want. No, no, I don't want to do all of them. But to say to make, it makes them more findable in Google searches and stuff like that. And we could cross-reference them. And because otherwise they're just like, oh, you can, here's this neat thing that you could use to get this obscure data or this interesting data off this website. But the only place you're going to find a pointer to that is in a search result that's from GitHub. OK. So how do we make that more visible? I think it's best if you guys do something internally and have at least a guide that can be pointed to and then I can point to that. That's, yeah. I think that's probably a good idea. Yeah. If only you guys work on Cirque-Up to make examples more accessible, it might help too. Like in the Arduino world, in the editor, you had that big dropdown with loading examples. And a Cirque-Up Python equivalent like that would be really helpful. That's interesting. I think maybe we might even figure out some interesting way of listing them on circuitpython.org or something like that. Yeah, and it's also, I've also thought about making a PyLeap library for Cirque-Up Python where you could use, you're like, PyLeap is good for projects and pulling projects down and doing discovery like that. Maybe there's a world where we have a PyLeap module that does that from Cirque-Up Python itself. That's interesting, yeah. It's also, maybe it's a feature to add to Mew, but that's, they would be very careful about that. Or code.circupython.org. Yeah. Is that a thing they can do? Because that would be cool. Is it what, Mew? Yeah, because Mew is like the beginner level IDE that pretty much any beginner in Cirque-Up Python goes straight for, unless they're on Linux, I guess. But for Windows, yeah, it's straight to Mew. Yeah, a lot of people use VS, and people who are programmers, a lot of people use VS code, which unfortunately... Right, but then those people are beginners. They'll get it like great and a lot, yeah. I mean, making it on a website might also be interesting because that's, it's certainly... Maybe someday incorporate it with like Web workflow. Maybe, yeah. Right. The other thing that I was thinking about in this vein is whether, like some people are exploring, like in Python land, there's these notebooks and it crossed my mind to whether we could run like notebook formatted Python code from the device itself, which would be neat, I think. And if editors have support to automatically format like the text parts of that nicely, that would be cool too. I'll have to look more into it, but yeah. There is somebody that's made a plugin for Jupyter already for Cirque-Up Python, but I'm thinking... I think it has to be tethered in that case, but I'm thinking more of like it's code that's formatted and stored in Cirque-Up Python in a way that when you load it, it runs well or it like looks well in your editor, but still can run standalone in the device too. So yeah, thinking about that. Okay, that'll keep me busy. Awesome, thanks. You want to add, like if you just... Maybe just if there's some... I'm not sure I have time right now, but if somebody wants to add like a few bullet items to the end-of-weeds so that it'll... This extra part will show up in the published notes. That would be interesting. Oh, like more description of what we... Examples, like right, like... Networking guy, you know, there might be a place to put examples. That was a topic that Fummy Guy brought up in Dead Chat that probably should get added to the end-of-weeds, yeah. Yeah. All right, can somebody summarize that in the notes talk, please? I can do it. I might be able to just copy and paste what Fummy Guy posted earlier. Just a bit. So that is it for in-the-weeds. Thanks, Devin. I'm going to go back to my script to get us out and done for the day. So thanks everybody. This has been the Circuit Python Weekly for April 8th, 2024. Thanks to everybody who's participated. Even if you're looking at any clips and just added notes, I still appreciate you adding notes and hearing what you're up to. If you want to support Adafruit and Circuit Python and those of us that work on Circuit Python for Adafruit, consider purchasing harder from the Adafruit shop at adafruit.com. The video this meeting will be released on YouTube at youtube.com.adafruit and the podcast will be available on major podcast services. It will be also featured in the Bython for Mac controllers newsletter. Visit adafruitdaily.com to subscribe to that. Next meeting will be held next Monday, I believe. Yep. At the normal time. No holiday next week. This meeting is held on the Adafruit Discord server, which you can join by going to the URL adafru.it slash discord. To be notified about the meeting and any changes to the time or day, you can ask to be added to the Circuit Python and EASIS role on Discord. That, we hope to see you all next week. Thanks. Have a great week. We'll see you on Discord. Thanks for hosting, Scott. Hope you feel better. Thanks.