 So, this is the Circuit Python Weekly for Tuesday, January 21st, January, wow, June 21st. This is the time that we could get together to talk about all things Circuit Python. I'm Katny and I'm sponsored by Adafruit to work on Circuit Python. Circuit Python is 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 them 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 adafru.it-slash-discord. We hold 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. Eastern, 11 a.m. Pacific, except like today when it coincides with U.S. Holiday, and it gets moved to Tuesday at 2 p.m. Eastern, 11 a.m. Pacific. In the Notestock, there is a link to a calendar that you can view online or add your favorite calendar app. We also send notifications about the upcoming meetings to the Circuit Python Discord role, so if you'd want to get those notifications, we can also add you to the role. There's a Notestock to accompany the meeting and recording. The Notestock contains timestamps to go along with the video, so you can use the doc to view only the parts that interest you most. The meeting tends to run 30 to 90 minutes, so this gives you the option to skip around. After each meeting, we'll post a link to the next meeting's document in the Circuit Python Dev Channel and Discord. Check the pinned messages to find out the latest Notestock so you can add your notes for the following meeting. If you wish to participate but cannot attend, leave status updates and hug reports in the doc and we'll read it off during the next meeting. The meeting is held in five parts. The first part is community news, which is a look at Circuit Python and Python on hardware in the community. The second part is state of Circuit Python, the libraries, and Blinka, which is a statistical overview of the entire project. The third part is hug reports. Hug reports is an opportunity to call out folks for doing great things and recognize the awesome folks in our community. The fourth part is status updates, which is an opportunity to sync up on what we've been up to. Take a couple minutes to talk about what you've been doing in the last week, since the last meeting and what you'll be doing over the next week until the next meeting. And the fifth part is in the weeds, which is an opportunity for more long-form discussions. These discussions can come out of status updates or be something you've identified ahead of time is too long for status updates. And that covers how the meeting will go. So with that, I will get started with community news. First up, MicroPython 1.1.9 has been released. The release has been seeing a big change to the format of MPy files. These files, which contain pre-compiled byte code now contain mostly static data, which is ready to execute without any changes. Previously, a lot of linking steps were required when importing MPy files. This simplifies things and improves import speed, but most importantly, will soon allow you to easily freeze pre-compiled byte code into a linear file system without needing to rebuild the main firmware. This dynamic freezing feature will be available in a future release. There are a number of other enhancements that are listed here in the notes. You can also check out the release notes, changelog, forum posts, and downloads for more information. Next up, HaxDriot article on CircuitPython 8.0.0 getting way ahead of myself. So it's a shiny new CircuitPython 8.0.0 alpha brings new board support, bug fixes, and more offering support for new boards, including Adafruit's latest ESP32 S2 feathers, and it's now ready for testing. You can check that article out on hackster.io. Next up is two Python cheat sheets. These are single page summaries of Python information sometimes called cheat sheets. Such sheets have been popular in this newsletter. Here are two new ones, a general Python 3 cheat sheet and a list of Python questions that could come up in interviews. You can check out the links in the notes or higher resolution images of both, which is the general Python 3 sheet and the interview sheet. The project of the week this week is a cube of rainbow torment. Todd Kurt makes an inexpensive, blinky colorful RGB LED cube and posts on Twitter. The code is in CircuitPython and it's just barely fast enough to control 64 times six RGB LEDs that make up the cube. The code is running above is taken straight out of the Adafruit LED Animations Learn Guide. And that covers this week's news. And this has been highlights from, usually it's a preview of. But it's been highlights from the CircuitPython Weekly Newsletter, which is a CircuitPython community run newsletter emailed every Tuesday. The archives are available at adfreuddaily.com slash category slash CircuitPython. It highlights the latest Python on hardware related news from around the web, including CircuitPython, Python and MicroPython developments. You can contribute your own news or project by editing next week's draft on GitHub and submitting a pull request. Or you can tag a tweet with hashtag CircuitPython on Twitter or email cpnews at adafruit.com and that covers the community news section. So next up is the state of CircuitPython, the libraries and Blinka. This is a statistical overview of the entire project starting with an overall set of information followed by more specifics about the core, the libraries and Blinka. So I will start with overall. We had 25 pull requests merged by 15 different authors. Two author names that I don't recognize are Julian Ortiel and Omerick. We had seven reviewers and we had 28 issues closed by 13 people and 16 opened by 14 people. So overall, we are net down. And with that, I will turn it over to Scott to talk about the core. Can you hear me? Yes. Yeah, my internet's not particularly happy. But I do have it loaded. Okay, so for the core, 10 pull requests merged from eight different authors. Thank you to all of our authors. Omerick is a new author, I believe. We had three reviewers, so thank you to all of those reviewers. We have 14 open pull requests where we have three now that are older than 100 days old, so we should take a look at those. And then kind of like a bit of everything from there on. So definitely have a bit of a PR backlog. So if you're associated with any of those PRs, please take a look and close them if we're not going to do them or yeah, I haven't even taken a look recently either, so need to do that. Issues-wise, we had six closed issues by four people, eight opened by six people. So we're net up to for a total of 525 open issues. We have five active milestones. There are two issues open for 7.3x, which are the most urgent issues. That will probably lead to a new 7.3.1 or 2, whatever release to fix some bugs. I know Dan's working on that. And we have five issues not assigned to milestones, so we'll need to do some triaging with that as well. And those are the numbers for the core. Thanks, Scott. Mm-hm. All right, next up is the libraries. This section covers all of the Adafruit Circuit Python libraries, which is everything that begins with Adafruit underscore, CircuitPython underscore, as well as a few extras such as Cookie Cutter and the Community Bundle. So across all of those repositories, we have 15 pull requests merged from seven different authors and seven different reviewers. So thank you to all of our authors and our reviewers. We can't do this without all of you. In terms of merged pull requests, one of them was two weeks old, which is great to see we're still getting through some older ones. And it's also great to see that the rest of them mean we're keeping up with newer ones as well, which leaves us with 25 open pull requests. There were 21 issues closed by 10 people and seven opened by seven people, which is excellent to see. Leaving us with 634 open issues, 183 of those are good first issues. If you're interested in contributing to CircuitPython on the Python side of things, check out circuitpython.org slash contributing. You'll find all of this information and more including an actual list of all of the open issues that you can search to decide whether you'd like to contribute code or documentation and whether or not you are new, in which case, check out good first issues. And remember that we have a guide on contributing to CircuitPython using Git and GitHub. And we also have everybody available on Discord to help you out. We want you to be able to contribute in a way that works for you. In terms of library updates in the last seven days, we have no new libraries, but we do have a short list of updated libraries that I will not read off. And that's what I've got for the libraries, so I don't see Melissa, so I will read off the Blinka stats as well. So Blinka is our compatibility layer for running CircuitPython libraries on single board computers such as Raspberry Pi. We had zero pull requests merged. There are four open pull requests, and there was one issue closed by one person, and one opened by one person, leaving 76 open issues. There were 8,579 pihills downloads in the last month, and currently they are supporting 89 boards. And that is the state of CircuitPython, the libraries, and Blinka. Next up is Hug Reports. Hug Reports is an opportunity for us to call folks out for doing great things and highlight the awesome folks in our community. It gives us a chance to say thanks and let people know that we appreciate them. So with that, I will get started and then we'll go down the list. And if you are here, you'll read off your own notes. If you're not, I will be reading them off. Or if you're text only, I will also be reading them off. So that's how this is gonna go. So I have, first up, a hug for Tectric for migrating all of the iSquaredSea Address Guide data to mark down on GitHub. And then updating the guide with GitHub embeds. So that, and that is because tons of people want more stuff added to that guide. And right now it's a huge pain to make that happen. Now people can just submit a PR and say, hey, here's my new device. And here's the address and then it will get added to the list. To FomeGuy for writing up some code for me for a future project using the GitHub API. To Jerry for all of his help with my mailbox project. To Rose for working really hard to get the mailbox code to do the last bit I wanted it to do and for 3D printing some parts for the project as well. And a group hug. So with that, I will turn it over to Scott who will be doing both his hug reports and status updates because he has a prior obligation later. Thank you, Kenny. Yeah, I have a dentist appointment. I'm gonna get my teeth cleaned. Okay, so for hug reports, hug report to Naradok, Gambler and FomeGuy for getting the bundle fixed over the weekend. And then also a hug to FomeGuy for banning a spammer over the weekend as well. And then for my status updates, I made really good progress on the web workflow, which is basically a server, an HTTP server that runs automatically. When you auto connect to Wi-Fi from an ESP board in this case. And it allows you to like browse your file system and get and put files and delete stuff. So I've got, that's behind basic authentication. So you set a password and then MDNS, which allows you to do auto discovery of the IP is working and you can actually ask the device to discover other devices on the network as well. So that's the pieces there. What I need to do is I still need to add JSON output for getting directory contents. And then I also need to do some basic JavaScript to allow uploading, deleting and making directories from the directory HTML pages. Which should be cool. So that's, I'm still very much in web workflow land. All right, thanks, Scott. Next up I have notes from Liz, who is text only today. Hug reports to Catney for all the help with the QDPI ESP32S3 guide and a group hug. Following that, I have notes from C Grover, who is also text only. To Carter for diving deeper into the NAU 7802 Arduino libraries startup sequence to test the timing of the chip rev register confirms the approach taken for the circuit Python library and a group hug. And next up is Dan. Thank you. I'd like to thank Dave Putz for several fixes to circuit Python. And to Eva for who's starting to work in Discord support. Thank you for jumping into that. All right, next up I have notes from David Glauda. Who says group hug to Jephler for a beer and trusting me to be his guide for one of his holiday days. And to Dan H for the numerous release he handled while the other usual suspects were not present. And next up is Dave. All right, just a group hug to Scott for getting me some really good insight on how to handle the VLA disconnect issue that I was puzzled about. All right, thank you. Next up is foamy guy who is not attending today. Hug reports to Naradok for reporting and fixing an issue with the generated MPy files in the bundle to Scott for initial work on the new webflow. Very exciting possibilities. And to GitHub user left right here for submitting some improvements to the PyPortal interface learn guide code. Next up is Jeff who I don't see here either. So I will read that off. Group hug. Hug to David Glauda for the chance to meet and showing us all around some of your hometown. And to Dan H, congratulations on cracking that matrix portal bug. And finally, I have some notes from Tectric who says thanks to Katnie for showing me how to use the learn guide system to make changes to guides and a group hug. And that sums up our hug reports. Next up is status updates. Status updates is a chance for us to talk about what we've been up to since the last meeting and what we're going to be up to until the next meeting. Take a couple minutes and let us know what you've been working on. And let us know about any personal stuff you're doing as well. We are interested in whatever you've been up to. So I will get started. Last week, I helped Liz out with the Q2Py ESP32S3 guide. Guided Tectric through migrating and updating the iSports e-addresses guide. And continued work on my GitHub profile guide. Last weekend, as in this past weekend, mostly finished up the mailbox project. It has been deployed. The receiver code still isn't completely done, but the two bits are talking to each other over the distance and through the barriers. I'm hoping to finish it up. This week, my dad was super excited about it. He's still super excited about helping update it to fit his needs and was really into it and really got into building the way to mount it on the actual mailbox, it was very cool. So this week, catch up on email and various miscellaneous assignments over the long weekend. Finish up the GitHub profile guide. There's an alert in the iSports e-addresses guide that needs to be updated to instruct folks to submit PRs instead of guide feedback or forum posts. And my next guide is a GitHub actions tower status light. So that'll be coming up after I finish up with the GitHub profile guide. Next up, I have notes from C Grover. The display IO object fader normalizer project found a hard crash when display IO pallet dot pallet dot make transparent was set outside of the pallet index range. Negative numbers were the most problematic but surprisingly didn't cause instant crashes. Submitted an issue describing the problem. Also submitted a wish list for adding two display IO dot pallet property getters to help with pallet management. We'll wrap up a learning guide like tutorial about the fader normalizer project this week. It's an intermediate level approach that uses some embedded code to support the new class, hence the need for a tutorial. Ultimately the fader normalizer scheme could be a proof of concept for pushing pallet and color brightness into the display IO core. Would be useful to have a tool that works like an audio track mixer for graphics objects and groups. It's essential for brightness control of RGB LED matrix displays that lack hardware brightness control. And Father's Day gift was a pressure washer is a lovely hammer that makes everything look like a dirty nail. Only wish it had come with a bigger bow. Next up is Dan. Hold on, I lost my place. Okay, I fixed a problem with DMA setup on the Samby, which was not a topic. And this was the problem, seemed to be the problem that was causing hangs on the protomatter on matrix portal when using RGB matrix, which uses a software library called protomatter. That's because it spends about one third of the time updating the display on the matrix portal in an interrupt routine. And it can block out, if the interrupt happens, it can get in between two parts of the DMA setup and it will cause it to hang. So I think that fixed the problem. I have it, it's in 73x and it'll go into main and I'll have some people who are having trouble try it, but it's a necessary fix in any case. I still need to look at some other ESP32 SPI issues, but those just cause circuit Python exceptions. So you can always be covered from them. So they're a little less terrible than just hanging everything. I tested a fix for hangs on ESP32 S3 for I2C that was supplied by somebody from Expressif. It works in my test program, but it doesn't work when it's incorporated in circuit Python. And I don't understand what the problem is, even though I made the test program more complicated and more like sort of Python. So I need to figure out why that is, because we still need to fix this problem. I'm back porting various fixes to 73x so we can do a 731 release that's up to date with interest and interesting fixes, including the matrix portal fix. And we decided that since we're starting to support non-general USB ports because we now are going to have a Wi-Fi workflow that we will support. We will add support for a plain old ESP32, which people have been asking for for a long time when we said no, no. And we'll target the feather ESP32 V2 first because that board has a stem of connector and it has a number of other nice features that make it a nice circuit Python board. We will not be supporting the ESP8266 again, sorry. Okay. Thanks, Stan. Next up I have notes from David who says, made my first digi-key order, mostly of Adafruit products, it seems like a good option for Europeans. Replace the screen of my clue. I now have a VL53L4CX that does not have a CP driver. Maybe there needs to be a visual way to identify products with or without a CP driver and with or without an Arduino driver. The BBQ20KBD is a circuit Python board, BlackBerry keyboard from Arturo 182 and solder party, driving the i-squared C128 by 128 OLED from the stem of QT connector. Next I have notes from Foamy Guy. Tested MPi fix for the build tools that get used to make the bundles. Tested MPR 121 library typing PR that includes a different kind of type annotation that we haven't used in other libraries yet. Both MPi cross and the microcontroller run successfully with it. Started tinkering with web workflow functionality. During D5, I got basic editing page created and was able to load the content from a file. Over the weekend, I also got saving files to work and started integrating the ACE code editor module, which brings syntax highlighting line numbers and other QOL features. This week, working on a PyGamer port of an old Nintendo game and watch style game. Nintendo Game and Watch style game called Octopus. And test and review some improvements to the PyPortal Interface Learn Guide project code. Next I have notes from Jeff who said past week's vacation. This week, wrapping up vacation. Next week, back to working on Adafruit stuff. And finally, I have notes from Tectric. Last week, exposed Adafruit logging dot handler methods for customization like in CPython. Submitted PR to fix learn guides using Adafruit logging. Documentation updates to the libraries I had been meaning to get to. Moved I squared C address learn guide contents to a GitHub repo. Turned the tools I made for Adabot for checking CI and RTD doc build status into CLI tools that can be used in CI builds for the bundles. Next week, exploring introducing CLI tools to CI workflows. Adding more interlinking documentation to the core. Continue working on Bluefruit Connect image transfer feature edition. And looking at making a circuit pipeline game for a month long game jam would be fun to build something on my PyGamer. Going to look into what feather wings I have to get some add-ons that I might end up using. We'll look into streaming the process as well. Currently looking at doing one in November. And that is status updates. Next up is in the weeds. We have one topic. This is an opportunity for more long form discussions. TechTrack identified one before the meeting and put it in. If you have anything else you want to add to it, please add it at the bottom while we're discussing the first one. So TechTrack is not around, so I will be reading this off. Should we look at using GitHub's dependabot to keep track of library dependencies in the bundle? It might make tracking or even pinning interlibrary dependencies easier to manage with regards to dependencies since it auto PRs dependent libraries. I'd be happy to be the PR assignee to help keep track. The two points are below, using dependabot. Dependabot is capable of being set to trigger for only major, minor, and or patch revision updates per semver. So example, it can be combined with version requirements like dependent module is one dot star and only when dependent module gets to 2.0 would a PR be submitted and then approved with changes to the library made if necessary. Pinning dependency versions pros libraries being pinned at a specific minimum version might make it easier to problem solve reported bugs and issues moving forward would make it easier to update those libraries whose dependencies have API breaking changes such as a fruit logging recently cons. Most libraries work fine without a minimum version, but they also rarely, they are also really dependent to other libraries like a different logging, a different motor, et cetera are might cause some initial hiccups of reports when first implemented. I would say that there's a benefit in setting up dependabot as described in that block. So things are always triggered for at least API breaking changes, optionally minor revs could be useful too for looking at optimizations. I mean, I guess the issue is how that I see is how involved the initial hiccups are going to be because I like I have no problem with us setting up dependabot. It's, we have it set up on some other repositories and it appears to be super handy. But the initial hiccups as Tectra referred to them, we've gone through major changes to libraries before and it has taken up a ton of time. But the changes we've made have been worth it. So I can't say that these won't be worth it as well. It's just we have to be, we have to have the cycles from someone to make sure that all of that is handled. Within, you know, reasonable amount of time, we don't have a bunch of broken libraries for months. So that's my thought on it. I don't know if anybody else has any opinions. I'm confused about like, is this mainly just to say that the seven X bundle would have ceilings on certain versions or something like that. So that- I think it's per library. Right, right, right. For some library, for most libraries, you wouldn't say anything, but for some libraries, you might say, oh, we don't want version 50 of this library because it's incompatible with seven because it's compatible with eight or something like that. Is that, that's the idea? So when a library gets updated, so library A gets updated and library B is dependent on A. If it fits the settings that we put for Dependabot, it would submit a PR to B to update A, like within B. And sometimes- Oh, I see, okay. Yeah, and sometimes those changes, like sometimes A is like an API breaking change, right? So we have to actually update library B before we update the dependency or B will break. Right. So if it's just inter-library, I think this is just, it's this kind of good bookkeeping. Yeah, I- I thought maybe it was saying that it was, it would be a way to generate bundles that differ. No. Okay, okay. Nope. All right. Okay. All right, I think the people who want to discuss this are not here. Yeah, but I mean, like I'm giving my go on it. It's just I want an answer on who's gonna take care of the- Yeah. In-between eBits. I guess that's my question. Right. Other than that, I'm perfectly fine with it. Okay. All right. So we'll discuss it at another point or sometime during the week after Tectric eventually, I assume listens to this and gets the answer or at least gets the question. So that's that. So I'm gonna go ahead and wrap up the meeting. This has been the Circuit Python Weekly for June 21st, 2022. Thank you to everyone who participated. Just want to say next week's meeting is at the normal time of Monday, June 27th, 2 p.m. Eastern 11 a.m. Pacific. If you want to support Adafruit and Circuit Python and those of us that work on Circuit Python, consider purchasing from adafruit.com. The video of this meeting will be released on YouTube, youtube.com.adafruit and will be available on major podcast services. It will also be featured in the Python for Microcontrollers newsletter. Visit adafruitdaily.com to subscribe. That is already out this week, so it will be in next week's meeting or next week's newsletter, rather. The meeting is held on the Adafruit Discord, which you can join anytime by going to adafru.it.discord and to be notified about the meeting and any changes to the day or time, you can be added to the Circuit Python Easter's Roll on Discord. We hope to see you all next week. Thanks, everyone, for being here.