 All right. Hello everyone. This is the Circuit Python weekly for Monday, March 11th, 2024. This is the time of the week when we get together to talk about all things Circuit Python. I'm Dan and I'm sponsored by Adafruit to work on Circuit Python. You might ask, what is Circuit Python? It's a version of Python designed to run 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 any time by going to adafruit.it slash discord. Behold the meeting in the Circuit Python Dev Text Channel and the Circuit Python Voice Channel. This meeting typically happens on Mondays at 2 p.m. U.S. Eastern Time, 11 a.m. U.S. Pacific Time, except when it coincides with the U.S. Holiday. In the Note Stock, 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 would like to receive these notifications, ask us to add you to the AdSign Circuit Pythonista's Discord role. So I mentioned that there's a Note document that accompanies the meeting and recording. Right now, this is the Google Docs shared doc. You can contribute to this document beforehand. The final notes document includes timestamps to go along with the video that's recorded, so you can use the doc to skip around and view the parts of the video that interest you most. The meeting tends to run 30 to 60 minutes. After each meeting, we post a link for the next meeting's notes document to the Circuit Python Dev Channel on the Adafruit Discord. Check the PIN messages to find the latest note stock, so you can add your notes for the following meeting. If you wish to participate but can and attend, feel free to leave hub reports and status updates in the document for us to read during the meeting. This meeting is held in five parts. I'll discuss each part as we get to them. So right now, I will start with community news, and I'll take a timestamp, and I'll remind you that these news items come from the Python and Microcontrollers newsletter, which is published every Monday, edited by Anne, who's in the discussion right now, who's in the chat right now, and I'll talk to you more about the news letters after I read the item. So the first top item is that Circuit Python 900 release candidate zero is now out. This release is believed to be stable. It is meant for testing before the final release of 900. You can see the blog post about the release in the Adafruit blog. You can also look at the release notes on GitHub, and there's also it's been pasted into the Circuit Python Dev and help with server Python channels also as of last Thursday evening. We know of some bugs in 900 release candidate zero, and we'll talk about that later. Next item is back to the future style time circuits display, which is showing up in the chat. Thank you very much. This was done by somebody with Circuit Python and has dial and time settings now, and you can read there are links in the notes document and in Reddit and on Tom's hardware about this. Looks really nice. Next item is a new book called build your own robot using Python, Cricut, and Raspberry Pi. This is a book published by Manning by Marwan also Bobba, and it's coming out March 12. That's tomorrow. There are links in the notes document. The link on the publishers website is especially helpful. It shows a lot of what you can see inside the book. Cricut, if you don't know, is Adafruit's. There are several boards called Cricut that let you control motors and things like that easily motors and servos, easily from Circuit Python or Arduino or whatever and in a variety of form factors. So this looks really nice. And now I'll mention that these things come from the Python or microcontrollers newsletter, which is a Circuit Python community run newsletter emailed every Monday. The complete archives are at Adafruitdaily.com. This newsletter highlights the latest Python and hardware related news from around the web, including Circuit Python, Python, and MicroPython developments. You can contribute news to the newsletter by submitting a PR I pull request to next week's draft, which is on GitHub. Or you can email cpnews at Adafruit.com or you can tag a post with hashtag CircuitPython and Mastodon, Blue Sky, or X formerly known as Twitter. So we appreciate you sending in information things to talk about. It could be your own things or other things that you find interesting. All right. The next section, the next major section, is the state of Circuit Python Blinkas, the libraries and Blinka. This is a quantitative overview of the entire Circuit Python project. It gives us a chance to look at the health of the project separate from our status updates. We'll talk about the project overall and then separately discuss the core libraries and Blinka. So in the past week, as of like around midnight last night, 29 pull requests had emerged in the past week by 21 authors. And there's mothers I haven't seen here before, Leiland Sint, Gin's Ticomoda, Anonymous Cowhead, and Sean Chain W. Maybe they've been here before, but I'm just not familiar. And there were six reviewers of those 29 pull requests. And there were 37 closed issues by nine people and 12 opened by 10 people. And now we'll go on to the report about the Circuit Python Core. And Scott, are you available to read that? Yeah, I'm here. Okay. So for the core, we had 18 pull request merge from 12 different authors. So thank you to all of those authors. We got some new folks as well. Gin's Ticomoda, James DeNau are relatively new, Goetz is relatively new, and just to highlight Lady Eda had a PR as well. We had three reviewers, Melissa Dan and I, so thanks to us. We have 24 open pull requests at the time that these were taken, which is right up on that limit of a single page. We had 29 closed issues by five people and six opened by five people. So a lot closed. I think thanks to Dan. We have a total of 656 open issues. And we use milestones to track the prioritization for a fruit funded work. We've got two open issues for 9.0. That is our main milestone right now. We're trying to get 9.0 stable really close. We have three open issues for 9.0x, which is the kind of the next milestone for us, which is like once it's stable, these things are worth fixing as well. That's also a new milestone this week. We have two open issues for net 10.0, which are things we want to remember for 10. And 8.2x, which is our current stable release has no open issues. So it's looking good there. Yeah, so that's generally it. And we have one issue not assigned to milestones. We'll just need to double check that we've triaged everything. And that's it for the core. All right. Thank you, Scott. Yes, I went through, especially the support issues. There are a bunch of stale issues there. And I closed a bunch of them. All right. Next up is the library section, which will be read by a foamy guy. All right. Thanks, Dan. This section does cover all of the circuPython libraries, which you can find all on GitHub under names like Adafruit underscore, circuPython underscore, and then the name of whatever library it is. Those are the official Adafruit ones I should mention. I guess a couple of our stats later on are the community bundle, which of course would have different names. But of these libraries, they are Python level code. Typically, these are going to help you either interact with a specific piece of hardware like a driver library, or they are a higher level sort of project helper library, such as portal-based, PyPortal, the Clue library, things like that, that allow you to interact with various bits of the hardware without having to worry about as many of the minute details. Across all those libraries this week, we had eight pull requests merged by eight authors. The names on here that stuck out to me as newer or less frequent contributors were Leland Sint, and then I will say KB Sriram as well. I believe I've seen that one before, but maybe not as frequently over on the library side, so thanks to them. And Leland Sint as well, either newer or less frequent contributors, thanks to the rest of the folks as well who are more typical contributors. For those eight pull requests, we had five reviewers, so thanks to our reviewers, mostly typical folks, Dan, myself, Scott, Tectric, and Liz, thanks to those folks for library reviews this week. Of the merged pull requests this week, most of them were on the newer side. The oldest one was just about two weeks old at 15 days, and the rest were just six days or less. A couple of them being only one day old, just like usual. That leaves us with 55 open pull requests. The oldest draft one of those is 571 days. The newest one is just one day. Over the past seven days, there were six issues closed by five people, with six new issues opened up by five people, so staying net equal there on issues. That leaves us with 740 open issues across all these libraries, and of those there are 19 of them that are labeled as good first issues, which you can find over on circuitpython.org slash contributing, which is where you should head if you are interested in contributing to circuitpython on the Python side of things. You'll find a list of open PRs as well as open issues. If you're looking to contribute, that's a great place to start. If you want to get started with reviewing first, you can check out the list of open PRs. Take a look at the code. If you've got hardware, test it out. Otherwise, just look at the syntax spelling, comments, things like that. Leave a comment on the GitHub PR. Let us know that you looked at it. Once you found, once you get comfortable with that, we can level you up to leave official reviews over on GitHub. If you are interested in actually getting your hands dirty with coding, you can take a look through the open issues. You can sort by labels on the open issues, including that good first issue label. On those issues, you can take a look through the list, find something that you've got hardware for and attempt to add whatever feature it is or fix whatever bug it is that the issue notes. We know that this process can be daunting to folks that are new, so we've got guides for contributing with Git and GitHub. Those are over on the learn system. We've also got folks on the Discord who are around all the time who are willing to help you if you are trying to get started and need help. So let us know over on the Discord if you are having trouble. Take a look through the guides. We want to make sure that everyone can contribute no matter what level of skill that you've got, so we're happy to help out. In library PyPI stats for the week, we had 117,506 PyPI downloads across the 325 total libraries. The top tens list is here in the note stock, if you'd like to take a look through those. And then for updated libraries this week, it looks like OAuth 2 and template engine are the two listed here. And that's what we have this week in library land. Thanks. All right, thank you, Tim. Okay, next up is Blinka, and I'll be right by the list. Hello, so Blinka is our circuit python covalentally layer for MicroPython Raspberry Pi and other single board computers. And this week we had three pull requests merged by two authors and one reviewer that leaves six open pull requests amongst all the repositories. There were two closed issues by one person and zero open by zero people leaving a net of 83 open issues. There were 12,496 PyPI downloads in the last week, 11,775 PyWheels downloads in the last month, and we are 129 boards. And that is it. All right, thank you very much. All right, next major section is hug reports. I'll take a timestamp. Hug reports is a chance to highlight folks in the circuit python community and beyond for doing awesome things. I'll start and we'll go down the list alphabetically to give everyone a chance to participate. If you are a text only or missing the meeting, I'll read your notes when I get them to them in the list. So as I said, I'll start here. Take another timestamp. Thanks to Solam Citron and Retired Wizard who found issues with the Nino or release candidate zero and one of them has been fixed and we're working on the other one. And thanks to JustMobilize and BablockB who have been working on Adafruit requests and thinking about ideas about how to improve some aspects of it right now. Next up is C Grover. I'll read theirs. Thanks to Rob Cranfield on GitHub for catching a documentation error in the Wave Builder and Webster with Repose and a group hug. And next up is DJ Devin. Thank you. This week I have hug reports for Anecdata for helping troubleshoot and Adafruit requests out of retries error handling issues that I failed to account for. Catching the error and reloading provides a new pool of retries until an inevitable successful connection can be made. So thank you for looking into that issue. And that just means that any script that you have that runs 24-7 online with an API, even if it fails, no matter how it fails, it will just reload. A hug report to JerryN, Argon Blue, Bear, LP Kennan in help with CircuitPython Discord for their help with parts of Adafruit Atec crypto module and General Python syntax help, a lot of learn from their collective help. And a hug to FomeyGuy for a series of streams on the M5 stack card pewter this weekend. It was highly informative on how to port a new device that has a built-in keyboard. And that's it. Thank you. All right, thank you. And next up, we have Tim or FomeyGuy. All right, thanks, Dan. Hug reports for me this week thanks to Retired Wizard for running with the start that I made on the M5 card pewter key scanning library, making some improvements to that as well as sharing a project that has successfully hooked it up to the REPL, which is really cool. Thanks to C. Darius on GitHub for submitting a PR to add support in the core for the D-Muxed row pin wiring that the card pewter has on its keyboard, although I don't know if that's the right term. Thank you to Michael McCall-Pokusa for entertaining lots of my sort of off the top of my head. It would be cool if style ideas for the template engine and the HTTP server library, most recently with some very fancy error messaging for the template engine that makes it really easy to figure out where any syntax errors in your template are. But there have been a handful of other things that I have kind of wished for and have come true. Thanks to them. So thank you for that. Thanks to Tyeth for working last week on the CIRCUP web workflow support branch. And finally thanks to Argonne Blue on Discord for reporting an issue over the weekend for Discord moderation. Appreciate it. Thanks. All right. Thank you. Next up is Jeff. Hello. I have a group hug and to be more specific about that, I looked up the number of people who have authored commits from the 8.2.x branch up to 9.0.0 RC-0 and then includes contributors to MicroPython. There's a list of 351 author names. Some of those are spelling differences. Some of those are bots. But that still means there's like over 200 people and probably over 300 people who have contributed to this moment that we've gotten to CIRCUP Python 9. And that's really exciting. And I just, I'm thankful to every one of them that they helped us out. All right. Thank you, Jeff. That's what those are very interesting numbers. And next up we have Jerry. A group hug to everybody. Nice to be here. Thank you, Jerry. And next up is Justin. Yeah. Also just a group hug. I've really just been enjoying working with people here. It's a great community. All right. Thank you. And now we've got maker, Melissa. Hi. I'm Doug. Give a hug to everybody who's added boards to CIRCUPpython.org. Also everyone involved in getting the release candidate CIRCUPython out. And to Jeff for the quick fix for the web workflow on SD cards. And a group hug to everyone else. All right. Thank you. And next I'll read retired wizards contribution. Thanks to Foamy Guy for the card pewter key scanning library he wrote on Saturday's live screen. It's just three not scream and a group hug. And finally, Scott will round us out. Thanks, Dan. First, I have a hug to Austin, a Applebee on GitHub, also Tangent on Discord, which is very similar to my name, which is funny. For the Hancho build system, I saw this on Hacker News. It looks really interesting. It's meant to be a super simple build system that leverages Python's async IO system to do building stuff. So I've been playing around with that. Hugs to Dan H for making the release candidate release. Hugs to KB Sriram for doing bit buying IO fixes and including tests. And the tests include like a simulation. So you can actually like use pulse view to see what your code's been doing, which is very cool. Hug to Liz for continued CIRCUPython testing. She's found lots of really critical issues. And then everyone else who also has tested 9.0. It's great to be this like super close to the end. And we wouldn't be here without folks finding all the problems. So thank you all. All right. Thank you, Scott. Next up, our major section is status updates. This is our time to tell folks what we're up to individually. I'll start and we'll go through the list alphabetically as usual. You can take a couple of minutes to talk about what you've been doing since the last meeting and what you'll be doing until the next meeting. You could also talk about any tips and tricks that are relevant when people are working on and if something turns into a discussion, we can always bring it to the in the weeds section if we want a more extended discussion. All right. So as I said, I'll start. I released CIRCUPython 9.0.0. Release Canada 0 last Thursday night. There have been a couple of bugs. There will be an RC1 when we fix the current set of showstoppers and we're going to update the frozen libraries again because they're constantly being updated all the time. I fixed a race condition in BLE scan entry processing, which was there for a long time and caused rather odd problems and sometimes storage problems. It definitely affected the NRF port and maybe also some other ports, but it was kind of a general problem. And I've been doing just a lot of reviewing and bug triage over the past week, getting ready for the release candidate and then following up on things. And I also closed a bunch of issues, especially support issues, as I mentioned that got stale or were taken care of or we had no feedback on. All right. Next up, I'll read C Grover's contribution. Electronics and coding projects were placed temporarily on hold when the home remodeling project commenced. Getting to solve some hands-on problems such as, quote, is that eyebrow window outline a fractional tip of an ellipse or a radius arch, close quote, and how is the radius of a circle's arc determined if you only know the width and height of the eyebrow? Thank goodness it wasn't elliptical. And then expecting to return to the WaveStore Library and the CT35 calculator projects next weekend. And next up is DJ Devon III. Thank you. Yes, I've also noticed there's a lot of woodworking projects being posted in the Circuit Python Discord or in just in the Adafruit Discord lately. This week I finished the ST7796 display project that I was working on and includes a custom feather wing adapter, PCBs, and a 3D printed enclosure. And it took about two months to complete. There's a picture of that. Submitted a minor quirky PR for a code comment error in Adafruit HT16K33 repo simple test. The seven segment library a long time ago used integers from 0 to 15 for segment brightness. And a code comment reflected that. It was changed to float values shortly thereafter, but the code comment never reflected that change. So it went uncorrected for four years tackling the tough issues in Circuit Python. And that is of course sarcasm because the PR was just literally two characters that I submitted. But it just goes to show that anyone can contribute if you spot an issue and submit a PR and fix for it. Discord user bear02 found an issue with the Adafruit Atec crypto module. The simple test completely fails in 8.2.10. And I've been helping them work through the issue and got the simple test to work again until it started failing again. So there's definitely an issue there. I had to lower the I2C frequency, the bus frequency from 100,000 to 75,000 and it magically started working. I have no idea what prompted that required change in frequency. The wake frequency is like a ping and without the correct ping the I2C module will never wake up to even function. But then after 128 uses it locks itself again. That's what I found out after iterating 128 times. So the datasheet mentions that there is a release function to DNit, but there is not one in the library. So the module stays locked permanently after the first 128 times that you use it. Or if you attempt to generate a CSR signing sheet, which is also included as a simple test, it will lock itself. And I will submit an issue on this soon. That's it. All right, thank you. Yes, these Atec modules are not easy to use. And I appreciate you working on that. Next up is Tim, foamy guy. All right. Last week I finished up some of the remaining changes based on feedback for web workflow support in CERCUP PR, along with a couple of extra fixes that were just due to changes in the web workflow API that were made in the course since that PR was originally started. After that got done and put in, I started looking into adding support into CERCUP for 8.x devices. Since the web workflow API did change, it would need some adjusting in order to support. But I think where we landed is I'm going to give up on that one for now because there's actually a separate issue affecting those devices, different from just the API changing, but still problematic in allowing it not to work. So I'll set that down. But the other thing that I had my eye on inside of CERCUP when I was working on it is kind of starting to brainstorm and think about how I would refactor the main sort of monolithic giant code file that it's got into some smaller, more manageable sized chunks, which would be nice. The addition of web workflow started us down that road by adding the back ends. But there's definitely still some improvement that can be made. So I'll probably jump on that here pretty soon. The other stuff that I got into over the past week, I mocked out some potential behavior for the keypad module with a class that I called multiplexer matrix. This allows you to read from a key matrix that has row pins that are mapped to a three to eight shift register as opposed to the other kind of shift register whose name I forgot. I built out a helper library that kind of went on top of that sort of mocked out keypad reader thing to actually map to the letters and functionalities that are on the actual keyboard on the card pewter, which is what I was working on, and got it set up to where you could actually type onto the screen. It will add add letters and digits to a label as you type them, which is pretty cool. And then I since then have also gone a little bit farther on not quite the same project, but a project that's still continuing to build on top of each of the previous ones, which is a messenger kind of like a social messenger type web server application that runs on the card pewter. It allows you to send messages between the person who's holding the device, they would just type on the keyboard and another person who loads up the page, a web app page in a browser from a device that's on the same network. So you could kind of chat back and forth between those two users. And then lastly, as a reminder mostly to myself, I'll be filling in on deep dive this week on Friday as well. So stop by on Friday afternoon if you want to check it out. Thanks. All right, thank you Tim. All right, we have Jeff up next. Hello, I'm a little distracted by the card pewter rebel code, which I want to see how that is working. But over the last week, I did a couple of small fixes for the version nine before the release candidate went out. But mostly I spent the week in Arduino land enhancing support for the Adafruit Floppy upcoming product and just interacting with floppies generally. So one of the demos is to present a floppy to the computer as USB mass storage. And I've been adding features to that such as the ability to swap disks out and the ability to detect whether the disk is right protected and to figure out whether in this case of a three and a half inch drive, whether it's a 1.4 mega 720k floppy. So that's coming along pretty well. There are a few items left to do. And once that is done and merged, I will look at updating the floppy IO module in circuit python, which is built on the same core C code. And to kind of prove that out, I will make a demo or example program in circuit python that will read the contents of an MFM floppy from the floppy drive onto an image file on the SD card slot that's built into the floppy. And in personal news, I've been singing in a local community choir since last fall. I was in a concert a week ago and another one next Friday. It is really a lot of fun to be doing that. So just wanted to share that with y'all. Thank you. All right. Thank you, Jeff. Okay. And next up, you've got Jerry. Oh, we got to hit the button once. Okay. So I've just been spending a lot more time working on this combining the RFM69 and 9x libraries. I think I reported last week I finally got FSK working on that 9x and also stumbled across that that also makes OOK work on off-keying. So they both work so the RFM9x's can happily talk to the 6x9's if you want them to. And so now I've really been thinking about the best way to structure all this. Now that I've got the basically the existing libraries working as a combined library, but I had been concentrating on making so I didn't break any of the current API settings and he did so that existing code would run with just changing the library name. But now I'm really thinking whether it's worth preserving that or going ahead and making some real changes to make things a lot simpler and to make it more consistent for naming of things. So just thinking about all that. And one of the things I've been going through all the issues that are existing and trying to make sure they're all corrected in this new version. The only one that stands out that's really I think a significant issue out there is there clearly were some problems in the way the RFM9x was handling some of the non-default settings for the spreading factors and bandwidths. So I want to make sure those are fixed and that may be the one thing that I probably want to backport in and put in the existing library as well if I can straighten it out. Time will tell. But then the main new thing and Dan brought this up to is that it really would like to try and see if we can get async.io to work and help out with some of the timing issues on these libraries. So that's really the next big project part of this and probably what makes it all worth doing the whole changeover. So more on that as situation warrants. I'll update if I can come up with anything. Otherwise that's it. Thanks. All right. Thank you very much, Jerry. And we really appreciate you working on the library. Next up is Justin. Yeah. So I've been spending some time working through some of the older issues that are in the Request Library kind of on a request networking kick. I'm also looking at how different the socket pool dot socket versus like the ESP32 spy socket are to see if I can work on getting them a little bit more similar. For example, when Adafruit NTP was updated to use the socket pool it stopped working for ESP32. So just trying to see if I can kind of get some of that stuff kind of closer. I also have a personal OAuth library that's a little bit more robust and current from the library that's out there right now. The current one is all for Google and sports more of their older OAuth methods that don't exist anymore. And so just trying to see if I can get that one into a better spot. All right. Thank you, Justin. We really appreciate all the cleanup that you're working on. Next up is maker Melissa. Let's see. I worked on PyEyes and that's for the snake I found it. I added code to resize the desktop contents on the fly and output to the display. So that's sort of working. I tested an issue with slow spy which is only occurring on the Raspberry Pi 5 and with the PyEyes NC. And that is a subordinate issue to Raspberry Pi for that. And I found a bug where it only grabs the Wayland desktop when it first starts and not after that. So I'm going to fix that soon. I also need to optimize some of the code so that we can get more frames per second. But at the moment I'm working on finishing up a web workflow guide for momentum. And that's for Matt. All right. Thank you, Melissa. And next up we've got Scott. Hello. So I'm out this Friday because Ari has no daycare. So we're going out of town for a long weekend. I've been doing some bug fixing. I fixed the ESP watchdog in correct time. I think anecdote reported. I fixed the RGB matrix reliability stuff and updated the IDF to 513 which is I think Liz found as well. I fixed a TLSF issue where we couldn't allocate the same size after a free. This is a bug in upstream TLSF and it was found due to breaking the DVI, basic DVI example. I'm investigating the ESP32 boot loop issue. I just got it pulled up. And it looks TLSF related. So we'll see. And then a couple other things I'm going to do this week. If I'm not working on a high priority issues, I'm going to get my Commodore 64 fixed slash at least tested thanks to Jeff Kaiser. It goes by Mightyome. And I'm also working on the Honto build system as a replacement for make in Circuit Python because it looks really interesting and pythons way easier to debug and understand. So I'm going to see how far I can get with that in a couple of days. Okay, thanks Scott. That sounds interesting and interesting possibility. Okay. And finally, I'll read Todd Bot's contributions. Tried making a palette generator slash color summarizer for JPEGs to return a rank list of dominant colors. And it works ish. It implements a simple color similarity detector to bin related colors takes about five seconds per image on an S3 that an ESP32 S3, I guess. And before that, a median slash mean image color to processor, which could be made much faster using some tricks from the above. Those both sound interesting. Like maybe they could also be used for effects like posterizing or something like that. That's my comment. All right. So that's it for status reports. And we don't have anything for in the weeds this week, unless somebody has anything to say. If not, I'll do a wrap up. Take the time stamp. So this has been the Circuit Python Weekly Meeting for Monday, March 11th, 2024. Thank you everyone who have participated. If you want to support Adafruit and Circuit Python and those of us that work on Circuit Python, consider purchasing from the Adafruit shop at Adafruit.com. The video of this meeting will be released on YouTube at YouTube.com slash Adafruit and the podcast will be available on major podcast services. The meeting will also be featured in the Python for Microcontrollers newsletter. Visit adafruitdaily.com to subscribe. Next meeting will be held next Monday as usual at 2 p.m. Eastern and 11 a.m. Pacific. I think that's right. And it's meetings held on the Adafruit Discord. You can go there by join by going to adafruit.it slash Discord. If you want to be notified about the meeting and any changes to the time it's scheduling, you can ask to be added to the AdSign Circuit Python East as role on Discord. So we'll see you all next week. Thanks everyone for attending. And I will stop recording now.