 Hello, everyone. This is the Circuit Python weekly meeting for January 16, 2024. This is the time of the week where we get together to talk about all things Circuit Python. My name is Tim. I'm sponsored by Adafruit to work on Circuit Python. Circuit Python is a version of Python that's designed to run on tiny computers called microcontrollers. Circuit Python development is primarily sponsored by Adafruit. So if you want to help support Adafruit and Circuit Python, consider purchasing hardware from Adafruit.com. This is a weekly meeting which is hosted on the Adafruit Discord server. You can join that server anytime by going to adafruit.it.discord. We hold the meeting in the Circuit Python dev text channel as well as the Circuit Python voice channel. The meeting typically happens on Mondays at 2 p.m. U.S. Eastern time, 11 a.m. Pacific time, except when that coincides with the U.S. holiday, as it did this week, in which case it will get bumped to Tuesday, like we're doing it today. 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 out about the upcoming meetings via Discord, so if you'd like to receive those notifications, just ask to be added to the Circuit Pythonistas role over there on Discord. There is a note stock that accompanies the meeting and recording. You can contribute to the document beforehand. The final note stock includes timestamps to go along with the video, so you can use the doc to skip around and view the parts of the video that interest you most. The meeting typically runs 30 to 60 minutes. After each meeting, we'll post the link to the next meeting's note stock over in the Circuit Python dev channel on Discord. You can always check the pinned messages over in Circuit Python dev in order to find the latest note stock always pinned at the top there, so you can add your notes for the meeting throughout the week. The meeting is held in five parts. The first part is community news. That's a look at all things Circuit Python and Python on hardware in the community. It's a chosen set of items from the Python on microcontrollers newsletter. The second part is the state of Circuit Python, the libraries in Blinka. Excuse me, this one's a qualitative, quantitative overview of the entire project. It gives us a chance to look at the project by the numbers separate from our status updates. The third section and the first of our two round robins is hard reports. That's an opportunity to highlight the good things that folks are doing. You can take some time to recognize the awesome folks in our community and beyond. The fourth part and our second round robin is the status updates section. Status updates is an opportunity to report on what you've been up to. You can take a couple of minutes to talk about what you've been doing in the last week, since the last meeting, or what you'll be up to over the next week until the next meeting. The fifth and final section is in the weeds. In the weeds is an opportunity for more long-form discussions. Those can be things that come out of status updates or they can be identified ahead of time as things that are too long for status updates or require more conversation back and forth. If you do have in the weeds topic, feel free to scroll all the way down to the bottom of the meeting notes and go ahead and put your name and your topic down there in the weeds section. If you happen to think of it during the meeting, you can go ahead and put that in there as soon as you think of it that way. Once we get to that section of the meeting, we'll be able to just call on whoever is first. That covers how the meeting will go. With that, we will get started with community news. Once I get there and take the first time stamp for us, there we are. Community news this week. First item is Circuit Python 2024 is coming. As the year starts, it's time to share goals for Circuit Python in 2024 and beyond. Just like in years past, the Circuit Python team would like everyone in the Circuit Python community to contribute by posting their thoughts to some public place on the internet. Keep an eye on the Adafruit blog for the kickoff post from Scott Sharcroft and start gathering your thoughts to post on social media platform of choice with the hashtag Circuit Python 2024. Next up in community news this week is the new episode of Circuit Python show podcast. The Circuit Python show is an independent podcast hosted by Paul Cutler focusing on people doing awesome things with Circuit Python. Each episode features Paul in conversation with a guest for a short interview. There's a link here to Circuit Python show and the latest episode was just released yesterday and it features the Circuit Python core developer Jeff Epler. Jeff discusses his role as a core developer, adding JPEG IO support to Circuit Python and recent additions of over 2,000 new fonts to Circuit Python. So check out the podcast. And rounding out the community news for the week, we've got the project of the week, which this week is a Raspberry Pi Pico ham transmitter. John Dawson has created a ham radio transmitter with a Raspberry Pi Pico. Dawson can transmit single sideband AM FM and even CW. It has a support range of 500 range of between 500 kilohertz and 30 megahertz. The software for this Raspberry Pi project was created from scratch by Dawson and is written in both site Python and C++. And there are links here to GitHub, Tom's hardware and YouTube if you'd like to check out that project or the video over on YouTube. So all of these items have come from the Python on microcontrollers weekly newsletter. So let me tell you just a bit about that newsletter. That is a weekly newsletter that's a Circuit Python community run newsletter, which goes out every Monday. The complete archives are available on AdafruitDaily.com, so you can always look back at any old newsletters if you'd like. It highlights the latest in Python on hardware related news from around the web, including Circuit Python, Python and MicroPython developments. To contribute your own news or projects, you can edit next week's draft on GitHub. There's a link here in the note stock if you'd like to go straight there. Just submit a pull request over in that repository with your changes to the draft for the newsletter. If you aren't so good with GitHub or don't have an account or something like that, but you'd still like to contribute something, you can do that as well. You can email your news items to cpnews at Adafruit.com or you can tag a post with hashtag Circuit Python on Macedon, Blue Sky or Twitter or X. So next up, you will get into the state of Circuit Python, the libraries and Blinka. This report contains information from the last seven days, including PRs, issues, things like that. The one exception which I will mention this week is for the library section specifically, because those are the ones that I'm more familiar with. I did actually go and grab yesterday's stats as well. So we've got our eight day range for libraries, but the rest of this may be missing a day since we're doing the meeting on Tuesday. So I will tell you the stats for overall. Let me also catch myself up in this document. Yes. Okay. So these are the overall stats from across the whole project. There were, let me time stamp it. There it is. Okay. So overall we had 22 pull requests merged by 16 authors. I did not bold the names that were new to me, but I'll try to read through them live here. The ones that aren't familiar to me. So these folks might be newer or less frequent contributors, or it might just be the case that I didn't recognize their name. Those names this week are Adam Cumick, How to Flow, let's see, Andy Bing, Pico Putsch, user 64, Jay Ellario, Cassane Ho, R Drizzle, Mahindzen, and Santis. Yeah, I think those are the names that I don't recognize. So again, thanks to those folks who might be newer or less frequent contributors perhaps. For those 22 pull requests that were merged, we did have five reviewers. So thanks to all of our reviewers, including Dan, Liz, Sylab's Chatwin, Makar Melissa, and TechTrick. And then our last stat for overall, we did have 10 issues closed by six people with 11 new issues opened by 11 people. So next up, I will take a time stamp and Scott, if you are available to read the core, you can or if not, I can do that. Hello. Okay, so for stats for the core, we had, in the last week, we had three pull requests merged from six different authors. You might think that's weird, but that can happen if the pull request is from WebLate, typically. So WebLate is the software we use to manage translations. So it tends, it will batch translation changes for multiple people. So that's what's going on there. We have two reviewers, Dan and Chatwin. We have 28 open pull requests. So we are just a smidge over the 25 per page boundary that I so like to be under. But that's okay. We've had a lot of folks out including myself. So we'll take a look at these and get those merged in. We had zero closed issues by zero people and five opened by five people. So we have a total of 699 open issues. Again, this is trending up, but we're going to get rolling here in January, and we shouldn't see these numbers go down again. We have eight, sorry, I leave that mickeyboard. We have eight active milestones. This is how we track prioritization for eight different funded folks. So we have two open issues for 10.0. These are things we don't want to forget for a circuit Python 10. We have 49 open issues for 9.0, things we want to fix before we do 9.0 stable. We have no open issues for 8.2x. So 8.2 is looking really stable. And then we also have some 9.xx issues that are the ones that we want to do after we have a 9.0 stable. Lastly, we have 18 issues that are not assigned to milestones. So this is how many we need to tree out still. And again, this is no surprise because we're just booting back up for the new year in 2024. So that's it for the core. All right. Thank you, Scott. Next up, I will tell you about the libraries. These are all of the circuit Python libraries which you can find on GitHub under names like Adafruit underscore, circuit Python underscore, and then whatever name of the library is. This is a Python level code that helps you either interact with specific devices or allows you to work with higher level sort of helper code in order to achieve more without having to worry about as many of the complex details. So across all of those libraries this week, we had 16 pull requests merged by 10 authors. And the name here that sticks out as a newer that I don't think I mentioned before. So I think this one must have been one of the ones from the Monday stats is Tony L. Hansen. So thanks to them again. They might be a newer less frequent contributor as well as the other names I listed before, as well as all of our other authors are definitely appreciated as well. For those 16 pull requests, there were four reviewers. So thanks this week for reviewing Tectric Dan, myself and Liz. The pull requests that did get merged, the oldest one was 209 days old. The newest one, the newest several, in fact, were just one day old. Which we've got a good range going there. That leaves us with 54 pull requests open, the oldest of which is 516 days old. I believe a draft is that one is a draft. And then the newest is actually two days old. So we don't have a one day old this one week this time, excuse me. Across the last seven days, we had eight issues closed by five people with five new issues opened by five people. That leaves us with 715 open issues. And of those, there are 19 of them that are labeled good first issues, which makes the perfect segue for me to tell you about contributing. If you would like to get started contributing to Circuit Python, one of the best ways you can do that is on the library side of things. And one of the easiest ways to get started is just head over to circuitpython.org slash contributing. On that page, you'll see a list of new excuse me, a list of open PRs as well as a list of open issues. On the issues side, you can use a dropdown to filter it to good first issue. And all of those have been identified as the name would suggest being good for folks who don't have as much experience that maybe don't require as much in depth knowledge or you know, preset up stuff. So if you'd like to get started contributing, head over to the website circuitpython.org slash contributing. If you need help, feel free to come and join us on the discord as noted before. There is a circuit Python dev channel and a help with circuit Python channel. And there are folks around there throughout the week who are always happy to help if you want to get involved in contributing, but you need help with Git or GitHub or anything like that. We also have guides and things so we can point you towards resources that will walk you through exactly how to make your first contribution as well as hopefully many more to come after that. So then let me take another time stamp here and tell you about the PyPy stats for the week. So in library land, all of our libraries are deployed on PyPI. This week we had 145,042 downloads across those 324 libraries. So picking back up after I think the last couple of weeks were a little lower. The top 10 is listed here if you'd like to take a look through those in the note stock. The new libraries for the week are over in the community bundle, the WaveViz library from Cgrover. And then in library updates it looks like ESP32 spy and funk tools as well as WaveViz. So check those out. There are links in the note stock if you'd like to take a closer look at anything that changed this week. So next up is Blinka. I do not see maker Melissa this week so I'll go ahead and read the Blinka section for us. So let me scroll here. So Blinka is our CircuitPython compatibility layer. This allows you to use CircuitPython code on RaspberryPy and other single board computers as well as on MicroPython devices. This week across all of the Blinka repositories there were seven pull requests merged by five authors. A couple of names here that don't that stick out to me as perhaps newer or less frequent contributors are Ilario, Casano, and Mahindzen. Although I believe maybe I read those in the overall section. That's all right. Thanks to those folks again who might be newer or less frequent. In reviewers for Blinka we had two reviewers, Maker Melissa and Tektrick. So thanks to those two for reviewing. Of the seven open that leaves us with seven pull requests open which are listed here in the note stock. There is one older one in Bluetooth and the rest of them are kind of at the two months or newer. They're across the last seven days. There were two issues closed by one person and one new issue opened by one person which leaves Blinka with 78 open issues. You can see those at GitHub.com slash Adafruit slash Adafruit Blinka slash issues for PyPI download stats. There were 14,162 downloads this week for Blinka repositories and there were 4,496 PyWheels downloads and the total number of boards that are supported right now by Blinka is 128 boards. And with that I will introduce and kick off our hug reports section. So next up is hug reports. This is a chance to highlight folks in the Circuit Python community and beyond for doing awesome things. I'll get us started then we'll go down the list alphabetically to give everyone a chance to participate. If your texts only are missing the meeting then I'll read your notes when we get to them in the list. All right so let's get the first timestamp there we go. Hug reports for me this week. The other meeting hosts for being flexible with hosting the meeting and coordination and scheduling and all that sort of stuff had some issues with my heater. I wasn't sure if I was going to be able to host today so just appreciate the other host being willing to step in if it came down to it. To Lady Aida for a new game and learn guide quest that she gave me which is a 1D Pac-Man game that's going to be built on one of the qualia super long displays and then just a group hug for everybody in the community. And so next up I will read for C Grover. Dan you'll be after this but C Grover first says hug reports for Jeff and Paul Cutler for the most recent Circuit Python show podcast. Reminds me of how much I've learned and applied from the Jepler Python collection. When I grow up I hope to be as innovative and proficient a programmer as Jeff. C Grover also has a hug report for Tectric for catching an error in a recent community bundle submission as well as a group hug for everybody. So next up I will pass it over to Dan. Okay thanks. So thanks to user us3r64 that's a github ID who fixed some long-standing issues that we didn't really know about in the ESP32 SPI library and some corresponding code. There's probably copied from ESP32 SPI in the Wisnet 5k library. This has to do with network requests that might who's result when they come back if the result is fragmented it might it might it might not get reassembled properly. Thanks to Jeff for working on the bitmap filter image processing stuff that's going to be a whole lot of fun for the memento camera and welcome back to Scott. Okay. All right thanks Dan. Next up I will send it over to DJ Devin3. Thank you. I have a hug for you Fummy Guy for the live streams that you did this week and last week all on display IO. Very informative picked up a lot of tips and tricks from that. Hugged to Paul Cutler and Jepler for a nice circuit python show interview this week and also last week with Jan who we know as C Grover. That was a very both or very informative and a group hug. All right thanks DJ Devin. Next up is Jeff who's missing the meeting so I'll read and Liz you're up after that. So for Jeff's hug reports this week it is a welcome back hug for Scott. It's not been the same without you around. A hug for Paul Cutler for having me as a guest on his podcast and a group hug. So thank you to Jeff for those and next up I'll send it over to Liz. Hello. So to Jepler for helping me get the MCP 3421 library past CI. It's a library that's in the folder so there was one little setting I was missing. Scott welcome back. Todd bot for bitmaps roto zoom examples and a group hug. Nice thank you Liz. Next up is Scott. Sorry I got distracted. First thank you to you foamy guy and Liz for being meeting hosts in the rotation. It's just wonderful to have a number of folks helping out with that. And then a hug to Jeff and Dan and everyone else for keeping things going while I've been out a bunch so I really appreciate that. All right yep thank you Scott. So next up we will get into the status updates section. Let me tell you about that. Status updates is our time to tell folks what we're up to individually. I'll start then we'll go through the list alphabetically. When I call on you you can take a couple of minutes to talk about what you've been doing since the last meeting and what you'll be up to until the next meeting. It's an opportunity as well to provide tips and tricks relevant to what people are working on. If a discussion does become too long for status updates we can move it to in the weeds. So with that I will take the first timestamp and get us going here. My status updates for the past week or so I did a bunch of library reviews. I also spent some time chasing some bugs in display.io or display.io related widget libraries as it turns out. I was working on getting the flip input widget functional. I noticed that somewhere along the way that one stopped working with new versions of CircuitPython. I did a little bit of bisecting and figured out that it's actually not so much to do with the new version of CircuitPython but more so to do with the new versions of the libraries that got frozen into those CircuitPython builds. I've got it narrowed down to some differences in the display text library specifically with how it manages the location of the tile grid internally. But I do still need to figure out the actual final fix for it to get that flip input back to actually working. I updated the infrastructure in one of the CircuitPython org libraries. It was missing webhooks and a couple of other infrastructure things as well as I had super outdated PyProjectTOML and some other stuff. So I got that updated and it is now released. This was kind of the last library over there that wasn't released which was holding up the CircuitPython org bundle as well. So it is released now. It did succeed on the GitHub release but the PyPy1 still needs another look. It was something about needing to switch to using a token for authentication. So I intend to circle back to that this weekend and figure out if I have what it needs to be swapped in. The last thing which I'm getting started on yesterday and today is the code and learn guide for a game that I'm calling 1D Chomper. It's a clone of a small web game that confines Pac-Man to a single hallway, moving only back and forth to escape the ghosts and collect the pellets. It'll be a natural fit on one of the very long qualia displays. I was able to reuse some of the art and components from a different Pac-Man game that I worked on previously. So I got a bit of a head start and I've been building out the rough draft version at first using Blink-a-Display.io and PyGameDisplay on my PC just to plan out the sizes and scales of things. And then today I moved over to the qualia but on a different display while I wait for the other one. And I am getting some of the functionality built out today so it's been a lot of fun. I think it'll be a super neat project. Next up for status updates is Cgrover who's text only. I'll tell you about theirs. Cgrover says, updated the WaveViz widget to plot any one-dimensional list, not just Synth.io WaveTables, working on WaveStore, which is a collection of helpers to store and retrieve Synth.io objects starting with WaveTables, envelopes, and WaveViz bitmap icons. Hoping to eventually emulate the simplicity of Jeff's font library approach so that stored Synth.io objects can be easily imported and used, which sounds super cool. The library of Synth effects took a glance at display shapes.polygon and bitmap tools.polygon to learn enough to suggest some improvements. Hoping to find a way to make Polygon closure optional for display shapes and extend the 8-bit XY coordinate value range for bitmap tools version to accommodate full screen polygons. Interesting, I did not know that was a limitation. Cgrover rounds it out by saying, having fun assembling John Park's fader wear project, but have to wait to finish until this week's cold snap abates. The heat pump out there can't sufficiently warm the workshop for soldering when the outside temperature hovers around 10 degrees Fahrenheit, and I definitely feel that one with some temperatures around zero for my neck of the woods. Next up, I will send it over to Dan. Okay, so still a lot of work on 9-0-0 issues and keeping track of things. I'll try to triage all those unassigned issues later today. One thing that I did that's unrelated to CircuitPython, but it's kind of interesting, is that a user was using a lot of, originally used the megaboard, which is sort of the same size as the Grand Central Board. It's actually the original board of that size. And then there's, everyone has a new thing called the Giga R1, which uses the Arduino embed core. And this user was having trouble. They were using a TFT for must that had a resistive touch screen on top and it was just not working, like the touch was not working. And so I got one of these boards and tried it and it turns out there's a bug inside the Arduino embed core. If you use a pin in a digital way and then try to use it in an analog way, it doesn't work. It doesn't, like, reset the pin properly. And this is the way all the touch screen stuff works because they're using X, Y things. So they, like, turn on a pin to pull it to three volts and then read an analog voltage based on resistive stuff, when you use a resistive touch screen. So I've submitted a bug for that with Arduino. I don't know what will happen with that, but I was able to tell the user what was going on. And then some kind of minor things. There was there were some problems with the settings for the community library for our read the docs circuit Python libraries integration. And I changed some settings for that, which fixed things up. Okay. All right. Thank you, Dan. And next up, I'll send it over to DJ Devon. Thank you. This week, I worked on some performance issues with the Feather Weather Touch project that I've been working on. Appending the display IO groups and labels, only when visible dramatically reduces the loading time of any page. Hidden layers are fine for a few labels, but multiply it times, you know, 100, 200 labels. And the performance difference is night and day, versus, like, not just using hidden, but actually removing groups and then re-appending them every single page. And I have kind of an example of that that I can share. That's like the flowchart of all the GUI stuff that I've been doing lately. So with this type of display IO optimization on an ESP32 S3 Feather with a TFT Featherwing, the soft keyboard grid layout that FOMI guy and I have been working on is generated as fast as the screen can actually refresh. So that was a neat little optimization I found. And that's all because of using display IO group, remove, and it depends, you know, in the correct order that that display IO wants it. So that's what I've been up to. Nice. Thank you, DJ Devon. That sounds like a pretty awesome improvement for sure. Next up is Jeff, who's missing the meeting. So I'll read. Jeff says, I'm putting the finishing touches on bitmap filter PR. We'll set it ready for review once I look over the docs one last time and the build is green. Jeff also says next up is implementing UVC, which is USB video camera mode. Someone has done this on RP2040 with tiny USB, so it should be possible. First will be a quick hack to see if it's at all feasible. Most circuit Python devices are limited to 12 megabit per second over USB. So the frame rate and quality of UVC mode is extremely limited, but it would be a cool tech demo for the Momento camera. Ultimately, this should work like a display IO frame buffer, I think. Nice. Super interesting stuff from Jeff. Next up is Liz. Hello. So last week, I worked on two new product guides, the cap touch TFT feather wing and the MCP 3421, which is an 18 bit ADC. I also worked on some code for a neopixel fidget toy that Noia is working on this week. I was able to incorporate a pared down version of our neopixel run game, which we'd want to do a smaller version of for quite some time. Now I'm back to working on the compass project, which I was doing before the holidays. And I called it done before I went on vacation. But as I was working on the guide, I really didn't like how the UI was looking on screen. I thought it looked a little too simple and a little too clunky. So I've spent the past day kind of ripping up and starting again. I like the direction it's going in now, though, and I've been working on it actually while I've been muted here. And I hope it's going to be a helpful example for folks for coding a compass, first of all, but also doing some more complicated graphics with the round displays, using some roto zoom stuff and different vector graphics that are moving around. And then not necessarily circa Python related, but I had chance to do my first jam with the mod at Cat Piano last night with some spacey guitar pedals. And it was everything I hoped it would be. The meow synth voice really comes alive with some reverb and delay. It's definitely motivating me to work on the next phase of the mod that will control it via MIDI or CV. And that would be circa Python. And that's what I've got going on. Nice, sounds super cool. Next up is Scott. Hello. I'm back after visiting family and I have a giant mountain of email that I'm going to start getting through today along with going and buying lunch and snacks and stuff. I finished, or other things I have to do is I need to still finish that SD card of a Wi-Fi and BLE pull request. If I remember right, it only needs testing, so I should look at that this week. I also want to make a PR with an additional keyword arg for supporting the 13.3 inch ePaper display that I got my hands on. We need an additional Boolean to say whether we should do pixel addressing instead of packing them into bytes. So that was the I just commented out that functionality. So I need a Boolean to do it instead. And then lastly, I want to do a circuit Python 2024 post. And I do want to say that I haven't seen any emails come in. So if somebody wants to drop an email to that just as a test circuit Python 2024 at Adafruit.com email me just make sure it's working would be great. And then I'd love to see folks posts. I know I did the New Year's Day one, but I haven't seen pretty much anything after that. So I'd like to do that between now and the end of the month. So that we can see what people want to do with circuit Python this year. All right. Thank you, Scott. Yep. I know I have not done mine yet. Now try to get that in the next week or so for me. Next up and rounding out the status updates is Tectric. Who I don't think Tectric is here. Yep, not right now. So I'll read Tectric. For status updates this week, Tectric says library CI now announces the version versions of pre-commit hooks being used, which will help in debugging specific related CI issues. Looking into creating typing stub files for libraries, but PEP 561 doesn't have a mechanism for marking modules as typed and distributed, distributing those typings. It only covers packages. Pylance can be tricked into seeing them using data files field in pyproject.toml, but I couldn't get mpy or excuse me, mmypy to do the same. There's a draft PEP that would allow modules to provide their own stubs, which hopefully gains traction. This would allow us to remove the try accept block at the top of files by simply creating stub files and using mypy to enforce the parity between them and the code. Added the wraps functionality to my functools community library to help the iRobots Python SDK for root and create robots support circuit Python. It's just a pass through function, so not a huge achievement, but always need to see your code help build cool things. And TechTricks last status update here says look back at my plan to make GitHub actions using the rp2040js in order to estimate memory usage. I enjoyed getting to compile the pico ET boot ROM so I can add it to the action, which previously used the b1 boot ROM. And then I plan to create an action for comparing memory usage in the next couple of weeks, as well as a proposed plan for how such functionality would be added to a repository. All right. And that is it for status updates this week. We don't have any in the weeds topics, but I will just give you a reminder. This is where we would have the in the weeds section if there were any topics. Those can just be longer form or more conversational topics. So tune in next week to see if we've got anything like that then, which is the perfect segue into wrapping up and reminding you that next week's meeting will be at the usual time back on Monday next week on the 22nd of January at the normal time, which is 2pm Eastern 11am Pacific. So we will see you here next week. And yeah, thanks everybody. This has been the Circuit Python weekly for the 16th of January. Thanks to everyone who participated. As a reminder, if you want to help support Adafruit and Circuit Python and those of us that work on the project, consider purchasing some hardware over at Adafruit.com. The video of the meeting will be released on YouTube at youtube.com slash Adafruit. The podcast will be made available on major podcast services. It will be mentioned in the Python for Microcontrollers newsletter, which you can visit adafruitdaily.com to subscribe to. Next meeting, like I said, is on the usual time Monday, 2pm Eastern 11am Pacific on the 22nd of January here on Discord. If you'd like to be notified about changes in day or time, you can ask to be added to CircuitPythonista's role. And that is it for this week. Thanks everyone, and we'll see you next week.