Hello everyone. This is the Circuit Python weekly meeting for March the 6th 2023. This is the time of the week where we get together to talk about all things Circuit Python. My name is Tim, and I am sponsored by Adafruit to work on Circuit Python. Circuit Python is a version of Python that is designed to run on tiny computers called microcontrollers. The development of Circuit Python 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 adafruit.it. We hold a meeting in the Circuit Python Dev text channel as well as the Circuit Python voice channel. This meeting typically occurs on Mondays at 2 p.m. Eastern, 11 a.m. Pacific time, except when that would coincide with a U.S. holiday. In the Note Stock, there is a link to a calendar that you can view online or add to your favorite calendar app. We'll also send out notifications about the upcoming meetings via Discord. If you'd like to receive those notifications, just ask to be added to the Circuit Python Easter's roll over on Discord. There is a Note Stock that accompanies the meeting and the recording. The Note Stock document contains time stamps 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 45 to 60 minutes, so this gives you the option to skip around. After each meeting, we'll post a link to the next week's Meetings Note Stock on the Circuit Python Dev channel on the Adafruit Discord. Check the pinned messages to always find the next upcoming Note Stock for the meeting. If you wish to participate but cannot attend, you can leave your hard reports and status updates in that document, and we will read them for you during the meeting. The meeting structure, it's going to be held in five parts. The first part of the meeting is community news. This is a look at all things Circuit Python and Python on Hardware in the community. It's a preview of the Python on Microcontrollers newsletter. The second part is the state of Circuit Python, the libraries in Blinka. That one's going to be a statistical overview of the entire project. It's a chance to look at the project by the numbers, separate from what we're all up to. The third part of the meeting and the first of our two round robins is the hard report section. Hard reports is an opportunity to highlight the good things that folks are doing, take some time to recognize awesome folks in our community and beyond. The fourth part is status updates. That's the second of our two round robins. Status updates is an opportunity to sync up on what we've been up to. Take a couple of minutes to talk about what you've been working on in the last week since the last meeting, and what you'll be working on over the next week until the next meeting. The fifth and final part of the meeting is called in the weeds. In the weeds is an opportunity for more long form discussions. Those discussions can come out of status updates, or they can be identified ahead of time as too long for status updates. Again, those topics are just listed down at the bottom of that note stock. That covers how the meeting will go. With that, we will get into some community news for the week. We'll take a time stamp there. Their first item in community news this week is Circuit Python 8.1.0 beta zero was released. There's a new unstable release of Circuit Python version 8.1.0 beta zero. There are links here to the Adafruit blog as well as release notes. I went ahead and threw in the quick bulleted list of new changes since 8.00. Those are added support for animated GIFs using on-disk GIF. Added SafeMode.py for programmatic handling of SafeMode. Added support for seven-color e-ink displays. Allow setting the pystack size in settings.toml. Adding dither support to pallets and then supporting array.extend with an iterable. Great stuff. As always, if anybody wants to give a try out to the newest version, 8.1.0 beta zero. It's always great to have folks trying it out with your projects and things like that and just let us know on the Discord or on GitHub how it's going for you. Next up is some new documentation for the Raspberry Pi Pico, Pico W and RP2040. The Raspberry Pi have released a new set of documentation for the RP2040 Pico and Pico W. There are links here directly to the documentation itself as well as some data sheets and a link to a post on the Adafruit blog discussing that. A couple other items from the newsletter this week, sort of projects from around the web. First one here is making of animated GIF floppies, our very own NB editor of the newsletter where all of these items will appear has created this project with an animated GIF playing floppies or I should say of a floppy playing animated GIFs rather. The editor has been kicking the tires on the new animated GIF support for circuit python 8.1.0 beta zero. Taking the floppy with a display hardware, I loaded the beta and test GIF player worked out of the gate. First was max headroom demo, initially posted that one to Twitter. About 10 different iterations were made with memes and computer software startup screens and more. Likely when 8.1 is released as stable, there will be a native root guide on using animated GIFs as we're still working out the subtle bugs and performance. Huge shout out to circuit python community member mark commas for adding the GIF capability was the top of and circuit python 2023 request list. So there are links here to Twitter for the initial post as well as Adafruit blog and link into the show and tell if you want to see a video of that in action. And rounding out the community news projects this week was a project of the week, a VT2040, a micropython based portable terminal. VT2040 is a portable serial terminal based on an RP2040 dev board with a gherkin keyboard and an ili 9488 480 by 320 LCD screen. The prototype gets about 18 hours out of three AA batteries and runs micropython. There is a link here to github if you want to learn more or see some more images or anything of that project, which definitely looks very neat. So these have all been entries from the newsletter. The circuit python weekly newsletter is a circuit python community run newsletter that's emailed every Tuesday. The complete archives are available on adafruitdaily.com. It highlights the latest python on hardware related news from around the web, including circuit python, python and micropython developments. To contribute your own news or projects, edit next week's draft on github and submit a pull request with your changes. You could also tag a tweet with hashtag circuit python on twitter or email over to cpnews at adafruit.com to submit ideas for the newsletter. So next up is going to be the state of circuit python, the libraries and blinka. Let me jump here. So yeah, just as a reminder, this one is a quantitative overview of the entire project gives us a chance to look at the health of the project separate from what we're all up to. We'll talk about the project overall and then separately discuss the core, the libraries and blinka. So the overall report for this week, we have had across all circuit python repos 34 pull requests merged by 19 authors, a couple of the names that looked a little bit newer to me. So these folks might be newer contributors or less frequent. Certainly possible that I missed some folks and apologize for that if so. But the names that did look like newer folks to me were foxy 82, at a land, let's see, at, let's see, at Alan Torre startup Potec. And let's see, was there one more yet Jetta Han as well, those were the user names on github of folks that again are perhaps newer or less frequent contributors. So thank you to them as well as all of our more frequent names that pop up from week to week. So that was our 19 authors. There were nine reviewers overall this week. So thank you to all of our reviewers. Of course, we would not be able to get new code in without our reviewers. So definitely really appreciate all of you. There were 19 issues closed by 10 people, as well as 29 issues opened by 25 people. And with that, I will pass it over to Scott if you're available to tell us about the core tour. Thanks for hosting Tim. Okay, for the core, the numbers are we had 14 pull requests merged from 11 or 10 authors. I don't know why I said Monday morning. Hello. So thank you to all of our authors. Nice to see a number of folks there. Titi Moby, Atlantor, startup Potec, Hexta and McGowan are all relatively new names. We had five reviewers. So thank you our reviewers. Gambler 21 and the kitty are infrequent reviewers. So thank you for reviewing the core. We had 29 open pull requests. A lot of those are drafts and generally looking good besides draft PRs. Again, we're still on two pages of PR. So I'd love to see us down to one. We have seven closed issues by four people and 15 opened by 12 people. So we're net up eight, which is quite a lot. But again, I think this is a pretty normal time for us to be higher issues wise because we just had a new stable release, major stable release. So we have 634 open issues. You can check those out on the github at github.com.com. We have eight active milestones. We have one issue for 0.8.0.x, which is like the highest, most urgent ones, things that we would actually do a new stable release to fix. And then we have 12 open issues for 8.1, which is the next feature release. And we now have a pre-release version of that as well, thanks to Dan. And then we have 24 open issues for 9.0. So a number of issues in that category and then 500 in the long-term category, which is the category for things that we'd like to do at some point, but not sure when. Lastly, we have, as of these numbers, five issues not assigned to milestone, which is issues that just need to be triaged into one of those other milestone buckets. And that's the state of the core. All righty. Thank you, Scott. Next up will be the libraries. Catney is not with us today, so I'll read out the libraries for us. Take a timestamp. Across all of the Circle Python library repos, we had 20 pull requests merged this week from 11 authors with six reviewers. So thank you to everyone who submitted code or reviewed on the library sides in the past week. Of those pull requests, the oldest one merged this week was 71 days old. There were a couple others that were about a month or so, and then the rest were kind of that two weeks or less in the list there. So that is library stuff. The rest of the stats down here, we had, or I should say remaining, there are 40 open pull requests, with the oldest one being 888 days, the newest one being only two days. Across the past week, we did have 12 issues closed by seven people with 10 issues open by 10 people. That leaves us with 597 open issues across those library repos as well, or I should say of those 597. There are 76 that are marked as good first issues for folks that are interested in getting involved helping to contribute. Those good first issues are a great place to start. You can find those listed on circuitpython.org slash contributing. On that page, there is a list of all the open pull open PRs. There's another tab on the page for issues. And if you click over to issues, you can then filter by good first issues, which are the ones that have been identified as good for folks that maybe don't have any prior experience or extensive, you know, programming or coding knowledge. There is a guide for contributing with Git and GitHub. So if you want to help get involved, but you've never done that before, don't let that be the barrier. Take a look at the guide as well as join us over on the Discord. There's always going to be folks around who are willing to help you out if you're wanting to get involved contributing. The libraries is a great place to do that. In terms of the library PyPy, weekly download stats, we had, let's see here, make sure I get the commas rights here. We had 151,776 PyPI downloads for 308 total libraries. The top 10 list is listed here. It is kind of interesting to see those ones change from week to week. I think it's usually mentioned the top few are pretty static. Some of the ones that poked up into the list this week that caught my eye were LED animation as well as display text. So take a look through the list there if you want to see some of those. There were no new libraries in the last seven days and there is a list of updated libraries here in the notes document if you want to check those out. And that covers the library portion of the update. So I will pass it over to Melissa, maybe? No, actually, I don't see Melissa. I will read off the Blinka section here as well. So Blinka is our circuit Python compatibility layer for Raspberry Pi and other single board computers as well as MicroPython. In the Blinka repos this week, we had zero pull request merge, zero authors and zero reviewers. There are five open pull requests across those Blinka repos. There are, let's see, 96 open issues across those repos. And over the past week, Blinka has seen 14,600 Pi PI downloads as well as 8,488 Pi wheels downloads. And Blinka is currently supporting 101 different boards. All right, so that wraps up our updates. Next up is the first of our two round robins, the hug reports section. Hug reports is a chance to highlight folks in the community and beyond for doing awesome things. I'll start and then we'll go down the list of names as they appear in the notes stock to give everyone a chance to participate. If you're text only or missing the meeting, but you have hug reports in the notes document, then I'll read them off as we get to your turn in the list. So I will kick us off this week. I have hug reports for Dan H for pointing me towards some examples in the core for handling background tasks, as well as logic for checking whether you are interrupted by the like control C and the REPL and things like that. Another hug report for maker Melissa for the installer wizard functionality that's been added to circuit python.org. And a hug report for Mark Gambler for discussing, I should say for discussions around colors and display IO that he had with me. So thanks for that. And next up, I will pass it over to Dan. Okay, thank you. Thanks to micro dev for continuing with various GitHub CI improvements. Some of these are refactoring just to make the code clear. Some of them are kind of small speed ups, but as people say when you're putting a backpack in, it's the ounces not the pounds sometimes. And each improvement on the build time helps. And when there are a lot of those, it helps a lot. Okay, thanks to Gambler 21 and retired wizard for testing a socket fix that I tried recently. And thanks to Scott for pointing out the code problem which caused that socket fix problem. And that will probably go into 804. Thanks to Jeff for figuring out what was wrong with the truncation that was happening to long delays for animated gifts. And I put into fix for that. And thanks to Gambler again for fixing long SPI rights on Atmel-Sandy when they were more than 64k long, it would truncate them. So that's in the fix, in the works also. Okay, that's it. Alright, thanks, Dan. Next up is DJ Devon 3. Thank you. I have a hug for Naradok for helping me troubleshoot why an unexpected maker Feather S3 firmware wasn't working during last week's meeting. I posted a picture of the wiring and as keen eyes observed that it was not a UN Feather S3, it was an Adafruit Feather S3. And I didn't even notice even though I was holding it in my hand. So thank you, Naradok, for your keen eyes. A hug to C Grover for excellent audio related advice this week. Thankfully, I didn't have to go with the transformer route and ended up figuring out a different method, but your advice put me on the right track. Thank you to Kyoshi for the excellent feedback and ideas on the TR Cowboy version 1.2. He kept me updated throughout his entire build process and he had ideas that we were bouncing back and forth that I never even considered which will be implemented in the next revision. Your feedback was excellent and very much appreciated. A hug to Skir for getting his icy blue FPGA Feather to do a thing in the real world. It's been a wonderful, it's been wonderful watching his progress with FPGA stuff. To Lady Aida for the new launch of the IMX Metro M7, very excited to get my hands on one and a hug to Jepler for the tiny UF2 Learn Guide, which will get everyone hopefully up and running with their new Metro M7s. Thank you. Oh, and thank you to FOMI Guy for hosting the meeting. All right. Thank you, DJ Devin. Next up is David Glauda, who's not present. So I'll read. David has just a group hug this week, and following that, I will send it over to Jeff. Hello. Got to find my mute button. So I have a number of hugs this week. A group hug, this community inspires me with their projects as well as how kind we are to each other. Hug to Liz for running Show and Tell last week. It was fun to be on. To Gambler, Mark, Komus, and Ann for GIFIO and the very engaging project you've done with that already. It's fun when the community loves what you do, and yeah, it's great seeing that. A hug to PT and Lamore for enabling me to do fun projects and always giving me more fun projects than I have time for. And to Phil Bee, known as Paint Your Dragon and Ann for very full guide reviews. And that's what I got. All right. Thank you, Jeff. Next up is Jerry N. Well, there's that button. Yeah, just a hug to Scott, Tnuk, for the Mangletood.js port and for patiently helping me get it up and running with the Glider and Blue Fruit Connect apps. It's been a lot of fun. All right. Thank you, Jerry. It's excellent to hear from you as well. Next up is Jose David, who's text only. So I'll read. Jose has a hard report for Foxy 82 for correcting a reference in the documentation for the HTTP server library. Next up is Keith to EE, who's also text only. Keith has a hard report for Catney for a lovely conversation and advice ahead of a presentation that I'll be giving this coming Saturday. Next up is Mark Gambler, who is missing or late, and I don't see him in here yet, so I'll read. Mark has a hard report for Dan as well as Jeff for documentation and answering questions from others about gift support and rounding out the hard report section. I will send it over to Scott. All right. First up, a hug to Isaac Ben for the AES documentation fixes and also a hard report to you from the guy for the many library reviews and improvements that you do, including for my seven color display IC libraries that I just did. It's great to see you take the time to do a lot of testing and interpreting of library reviews through. So thank you so much for that. Thank you, Scott. And that is going to do it for hard reports. So moving on to the next section, status updates. Status updates is our time to sync up on what we're doing. I will start and then we'll go through the list alphabetically or whatever order they appear in the note stock. We'll give everyone a chance to participate. When I call on you, go ahead and take a couple of minutes talk about what you've been doing since the last meeting and what you will be doing until the next meeting. This is also an opportunity to provide tips and tricks relevant to what people are working on. If a discussion becomes too much for status updates, we can move it down to in the weeds. So I will get us started for the status updates. Last week, I reviewed the frame buff library PR that added support for bicolor led matrices. I didn't have that specific hardware with the bicolor leds, but I did test it on all the hardware I do have to check for regressions. And I do actually have one of those bicolor matrices coming. So I'll get a chance to test that one out in the future. I started assessing the scope of example code changes for the new display API. I have a note down in the weeds to talk about this as well. As expected, I think there are lots of changes out there, but by looking through the learn guides and the bundle examples, it looks like the vast majority of them use kind of the same code and the same syntax and everything. So it should be fairly easy to knock out some pretty big chunks with some find replace type actions. So I do think there are a couple of options for different ways we can do that. So that's why I've made a note down in the weeds to discuss that a bit more. I also was working on trying to resolve an issue in bitmap tools dot boundary fill, which was a function that I implemented. It was it takes a while to work, especially if you use it on a relatively large section of a bitmap. And it was kind of causing the USB to get locked out essentially or become unresponsive. It would not react to control Cs and it kind of seemed like it was frozen or hung while it was doing its work, which could take it several seconds sometimes. So it felt pretty broken. So I've got a PR in now for trying to wrap that up, but it does still need some work. The other thing I've got this week is for the latter part of this week, I will be out on vacation. So there won't be any deep dive stream or Saturday morning stream for me this week. And you probably won't see too much from me in the GitHub, excuse me, in the discord after the next couple of days. Next up, I will send it over to Dan for status updates. Okay, thanks. So last Tuesday, I released a sort of Python 810 beta zero. That has animated GIF and other stuff in it. Then we noticed this bug about long frame delays on animated GIFs. So there'll be a fix in beta one, which could be relatively soon. I try not to go too long between betas because it's just there's an enormous accumulation of stuff sometimes. It's hard to keep track of. I mentioned I fixed some socket code that will go into the 8.0 X release chain because it breaks where workflow and it'll be nice to get that fixed in to the stable release. So I'll probably do an 804 release soon. It will have that and maybe if there are a couple other things to go in there, we'll put those in too. And otherwise, I'm just catching up on there are still a whole bunch of open issues and PRs, which we can work on. And I also, in the internal meeting that we had before this, there are some other interesting projects that I might start working on as well. But we have a lot of things to fix for 8XX in the future anyway. Okay. All right. Thank you, Dan. Next up is DJ Devon 3. Thank you. I've been pretty busy this week. Spent a couple hours iterating through different configurations to figure out how to almost completely remove the pop and click from the Adafruit I2S sound modules. And there's multiple that have the same kind of issue. The modules have either no capacitor or an insufficient one that introduces a very loud pop when a sound begins or ends, as most of you are well aware that I've ever used one. This is easily remedied with a large 1000 microfarad coupling capacitor across the positive and negative speaker outputs. It's very similar to the way Adafruit recommends adding a capacitor at the beginning of any long neopixel strip. Tried adding up to three capacitors with no effect. At some point, there's a flawed, dimming return. The 1000UF works best with the 3W Class D amplifiers. It's just a matter of, you know, the capacity. Adding a 100K resistor is recommended in the learn guide as well for bridging gain and VIN, which also helps it lower. It lowers the initial gain. It's a gain selectable, but there's like different pins. So it's like a weird jumper method. It's better to amplify a three decibel signal than a 12 decibel signal that's at or near max peak signal. The pop from the initial current inrush is now practically imperceptible and will make all audio projects much more enjoyable to experiment with. My mail boombox audio clarity is now much improved because of this at high amplification levels. Adafruit warns not to use the 3W I2S amplifier as a preamp, but I did find a way to do it and solve two design flaws in the process. No more popping and clicking. Sunday, I pushed a minor PR for the TR-Calbel simple test code, so it's just a very basic, still no MIDI stuff or anything. I needed to get that done. There are separate examples for those who are using it with or without a display. The default code now assumes you've done the bodge fix as the starting point. If you haven't done the bodge fix yet, please do. Everyone will now be on the same page with their hardware. And I might have just gotten my first electronics freelance job thanks to my work on the 7-segment social media tracker project that has like the seven different API's all built into the one 7-segment display. The order is for 50 14-segment displays showing the number of online media API that I have to code and hook into, as well as the 3D printed enclosures. So all of that is like right up my alley. And all 50 devices will require Wi-Fi connectivity and about the only point thing that I'm really worried about is just getting all the parts. That's an expensive project. But I did 3D print a basic enclosure and as I already fired that off to the client and looking good so far. So I'm really excited about that. And that's all I've got. Nice. Congratulations on that. It's always a great step to achieve. Thanks, DJ Devin. Next up is David Glauda. He's not present, so I will read theirs. David says, fixing a cable to go from StemAQT to Lolan similar but not equal connector. There's a link here to that. Testing one more time that the driver for that tiny screen works with Circuit Python. David will be off for two weeks, one week of skiing as well as two days in Disneyland Paris. And David also writes wondering if Scott wants to take over the deep dive spot for this Friday, since I will be out. Tim will be out this week. David won't be able to catch it live but would watch the VOD later if so. Next up is Genevrov. Hello everyone. So the last couple of weeks I've been working on adding async support to the audio stack and to sort of generally make it a bit more flexible. And so I've sort of reached a milestone with that now where I have a proof of concept app that will stream mp3s over the network and play them. And I'm just cleaning up the code for that and I should publish a draft PR for that soon and I think we'll need to have like a discussion and a design review on what we think this new API for audio would look like. Moving on from that this week, so the audio code ended up not being fully async because the network code is not async. So this week I'm going to be looking into making async APIs of the socket API. And as part of that I'm going to try to enable dynamic memory allocation in LWIP so that we don't have any static limits about the number of sockets that can be used. And that's it for me. Awesome. Thank you for the update Genevrov. Next up is Jeff. Hello. Well first of all I'm really excited to hear about that work on the streaming mp3s. Thanks for doing that. Anyway as to my work I published a couple of guides last week and SNES mouse to USB HID guide as well as the floppy feathering product guide. I've been playing with the open AI API running on circuit python as well as on host computers. I've got two ideas I've been kicking around one I'm calling endless Zork and the other that I was thinking about this morning is to make a story based on choices of emoji and both of those are pretty fun but if I do a guide it will probably be showing the endless Zork as the idea. I made some changes to the Adafruit mcp2515 library which is for a CAN bus interface chip. I need to retest that on hardware so that we can merge it. There is a utility class there are a pair of utility classes in the core canio.message and canio.remote transmission request but that library that module isn't necessarily on all devices so Adafruit mcp2515 has its own copy of those classes. If you accidentally mix the core class with the Adafruit mcp2515 library it doesn't behave correctly and by this refactoring the library will use the core classes if they are there otherwise use its own implementation but by the time that PR was was done it was making a bunch of changes also changing how the documentation builds and so I just need to retest it. Anyway next up I've started on implementing implementing Rotary IO for the IMXRT which would work on that new Feather M7. It will use pin change interrupts and the same quadrature state machine as the RP2040, NRF and SAMD when we broke or when I had to stop working on that to come to meetings this morning it was almost compiling next after that will be to set up my debugger situation. The next thing on the IMX series will be adding i2s audio out on the 1011 which is what's on the Metro M7 there is no SDIO support so skipping that for now later on I may do that on the 1060 EVK it's also supported on the 10C4 so we do eventually want it but it doesn't it isn't needed for the Metro and then besides the open AI endless Zork project the other next project remains the help keyboard and also that will finally test the RISC-5 ultra low power co-processor on the ESP32S3 and that is enough to keep me busy and out of trouble. All right, thank you Jeff. Next up is Jose David whose text only so I'll read Jose writes they worked on the worked on a PR for a MPL31115A2 issue worked on some PR reviews and non-circupython related refactored an old knitting pattern software from PyQt4 it was fun so thank you to Jose for leaving those notes and the next up I will send it over to Scott. I love that Jose David has the fun and quotes at the end of there too for those of you who are not looking at the notes talk. So for me I'm deep in the IMX RT weeds around interrupts and what we can run when we're doing flash operations and not and things like that so I'm looking at memory layout and performance and hopefully hopefully I'll come up with some changes that will make it more reliable Dan saw some of this with his prototype Metro M7 like USB unreliability we're not doing any interrupt servicing during flash erases which can be a multi tens of milliseconds sort of operation which could is probably the culprit honestly so I'm looking at making it so that we can run interrupts during flash operations which will be good I was also looking into doing full fun function tracing and was having some reliability issues there that I kind of got me to this place so I'm deep in the IMX RT weeds hopefully that'll make it more reliable in the end and I'll certainly have a better understanding of it like I didn't know what a veneer function was but basically the ARM 32 bit thumb instruction set can't jump kind of through the whole memory space so that matters if there's code that's in flash that needs to call code that's in RAM like those those places are too far away from each other and so they use these veneer functions which are interesting in order to go from one place to another they're also known as trampoline functions but this is the first I've experienced that so yeah learning a lot and hopefully at the end of it we'll get more reliable circuit Python on the IMX RT so if you did order some of those new Metro M7s please let us know how it's working all right thank you Scott oh and I am tempted to take your slot on Friday all right I'll say at least for an hour stay tuned uh stay tuned to discord then probably for more uh yeah and I'll put a thing on the blog but I've been thinking about starting this dream again so uh you taking a break and me filling in for you is it's a good opportunity for that perfect all right so that wraps up the status updates which is going to get us to the next and final section of the meeting which is in the weeds uh in the weeds is an opportunity for more long form discussions that either come out of status updates or that folks have identified ahead of time if you do have any in the weeds topics please go ahead and add those as soon as you can down to the bottom of the note stock there is one in there but that is it for now so if you have something else you wanted to discuss please throw that in the one that is in there is one that I put in and I will say a late hug report I don't know who it was but somebody added some additional information to this thank you for that this is about updating examples for the new display IO API in particular changing over the like display dot show to being display dot root group and then setting it equal to something as a property the main questions I have that I wanted to get insight from the larger team on was do we want to keep the old version in the code commented out or vice versa do we want to keep it as the old version and maybe leave the new version commented out for now and if we do want to keep both versions old and new is there any preference on sort of the comments that go along with it I have a link to PR here where I took a kind of first stab at this in the learn guide repo specifically the display IO learn guide which I think makes sense as kind of the first place to change but I didn't want to go any farther before I got feedback on on that sort of stuff so I would say something about how I think about this for release staging that we're still the 80 release is really new and so I wouldn't like we're still building the seven X bundles for instance and we do refer people back to seven X when they find regressions in eight and I would like I don't I don't feel like even though seven is not up on circuit python.org directly it's still a reliable release that people might want to use in some circumstances so I wouldn't change it in the examples yet I mean it certainly changed it by the time we got to nine okay and in general this kind of change we've made months after our release was stable and in that case I would say just change it don't include the old code okay because at that point we would expect if it breaks people would just tell people they should upgrade okay otherwise you end up having to make the change twice because we don't want to leave correct sort of deprecated code in in in the in the learn guides I mean you could check you could do a try or something but it seems kind of silly because this is a really common thing to do so I would say just leave it alone for now and you know in the springtime or something like that you know we would change all these once and that would be that would be good enough and that at that point like we might stop building the seven X bundles for instance I would think it would be more in line with that I don't know space Scott you have a different you have a different of your point I agree I agree with you okay yeah like let's just wait till we actually think 80 is stable and then and we're when we're clearly turn the corner and are working on nine that's when we can turn the bundle off and then then move all everything over all right sounds good to me and I have not seen any other topics pop up so I'm going to assume nobody else has got anything else for in the weeds so I will bring us to the wrap up time stamp for that this has been the circuit python weekly meeting for March 6th 2023 thank you to everyone who participated as a reminder if you want to support Adafruit and circuit python and those of us that work on circuit python consider purchasing hardware 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 made available on major podcast services it will also be featured in the python for microcontrollers newsletter you can visit adafruitdaily.com to subscribe to that the next meeting I did not actually look at the calendar but I believe the next meeting is Monday at the usual time 2 p.m eastern 11 a.m pacific somebody correct me if I'm wrong there in the chat pretty please and thank you the meeting is held on the Adafruit discord which you can join by going to adafruit.it slash discord you do need to be you need to have the circuit python easter's role if you want to talk and the other upside of that role is you'll get notified of any upcoming changes to the meeting will ping that role with any changes so thank you to everyone who was here and we hope to see you all next week thanks everybody


Well, placement into foster care can be a difficult transition for some kids when starting a new life with a new family, especially when they don't have the basic necessities such as a blanketer toothbrush. Haiti Clotter shows us how one family is using their own personal story of adoption care to give back. It's bright and early for the Murray family and their day begins by dropping off bags filled with simple things for children of all ages that are in the foster care system. They're going back to where it all started. Allen and Brittany Murray adopted Jennifer Lita and Araya a year ago from North Home's Children and Family Services. So on the year anniversary, we wanted to do something to give back to where the girls came from. The Murray's worked with the non-profit organization that provided them more than 40 bags and the girls took it upon themselves to turn the empty duffel bags into sweet cases by adding the items. Some of these kids go into homes without anything and these girls wanted to make sure that no one else had to experience it. It was a family affair putting the sweet cases together and the girls left their mark on each bag by personalizing each one with pictures. Some of them might be sad that they're going in a foster care and then I wrote quotes on them so they could like be happy and love the family they're going to and they'll always be theirself. Quotes such as work like a captain and play like a pirate are positive reinforcement for the young kids that will receive the sweet cases. They might be happy because they might not come with anything like blankets toothbrush toys so that's why we put them in the bag so that they'd be happy. The Murray's raised $25 per bag and received about 20 quilts and blankets to donate to children once their adoption is finalized. Friends and the community also got involved with the process. It's going to be such an impact for those kids but we have so many kids coming out of home placement in our area that this will make quite an impact. Each bag also comes with a friend, a teddy bear. Jennifer says the teddy bears will provide comfort for the kids so they won't go to bed alone. In Bemidji, Haiti Clotter, Lakeland News. And the spirit of giving carries on for the Murray's as they plan on doing another campaign in the summer. If you've enjoyed this segment of Lakeland News, please consider making a tax deductible contribution to Lakeland Public Television.


Hello there, lovers! Today's video is sponsored by Summer's Eve and it is a video that I can hardly believe it has taken me this long to do because it's right on my alley. We're talking about sex and health, sexy health in essence. I want to share with you guys what it is that I do before having sex and what I do after having sex. A complete care guide but before we jump into all of the juicy details on doing the dirty, the clean way, let's talk about Summer's Eve. This is a feminine, hygiene product line that I can truly get behind. Summer's Eve is 5-in-1. It's clinically tested, safe sense. It removes odor-causing bacteria. It is pH balanced. It's free from parabens and dyes and it gently cleanses and freshens. I was actually thinking about this before I press record today and at this age, I have literally been having sex for half of my life. For just as long as I've been not having sex, I have been having sex and probably within the past, well literally since I got with Jared, that's the only time I really truly nailed down a care guide that really works for me, that works for my body and that I am excited to share and of course by the end of the video I'd love to hear what yours is as well.  I cannot use a wash on my vulva that is not specifically formulated for it. I have made that mistake traveling. I will not make it anymore but specifically I want to talk about sex because sex is about introducing new bacteria, new fluids into the area which is why it's super important that you have a care guide. Now before we go any further and get into like the juicy details of it all, I do want to give you guys like a basic dry run of what pH essentially is. The pH scale measures how acidic or basic something is and contrary to what you might naturally think the vagina is pretty much around the orange juice realm. Majority of the things that interact with your vagina on a monthly basis are a lot more basic or a lot more alkaline and those things include water, soap, blood and semen and so while yes your vagina is a self-cleaning system that doesn't need a lot of assistance, it has done what it do for thousands of years and it will continue to do so, it is a natural wonder but you throw a lot at it. Nothing can substitute what it is that you're putting into your body and none of the products that I'm mentioning today are things that I suggest that you insert or that you ingest. These are topical use only and so I'm a big fan of probiotics, I'm a big fan of drinking water and of course I'm a big fan of visiting my gynecologist to ensure that I am getting professional help to ensure that I'm giving myself the right things to make sure she's as happy as possible. So nothing can substitute that. So once you've done those things that's when you can do this thing and come up with a topical system that's going to work best for you and that's what we're about to tackle right now. First we're going to talk about what I do before I do what I got to do to do what I want to do. You know what my good girl needs to get done. I don't know if any of that made sense. I'm talking about the pre-sex care guide. I want to split this up into two separate parts. What we used to do and the one that we currently have. So when we very first got together and sex happened anytime, anyplace, anywhere we could get it in cars, in movie theaters, at his friend's house, you know in my apartment in the stairwell. There's details we'll go over it later but sex just happened, which is why I always had individually packaged disposable wipes and so summer's eve has this incredible one that has aloe vera infused in it and it is five in one. So what you do with these individually wrapped cloths, which I got one right here to show you, you toss like four of these in your bag because it might be nice to give it to your partner too. And so you just spread the labia part. You don't go into the actual vaginal opening. You just wipe around the folds. I tend to get discharge buildup as the day goes on. So it's nice just to remove that out. Once again, you don't have to do these things. I think a lot of the pre-sex care guide is mental. It's making sure that you feel fresh. In addition, you want to ensure you're not introducing new funky bacteria to your partner that they're not accustomed to dealing with. Your body is probably fine. It's the pre-sex care guides more so for your peace of mind and for your partner's peace of mind.  You're trying to lure that person in, make them feel like you've got this like fragrant punani that just like oozes honey.  So this powder again is five in one. And here's really important things to remember. This is always talc free. You do not want to put any talc down there. On top of that again, I don't lift or fold or press or open. I just take it arms width apart and I spray. It's a nice way just to dry things up, address any odor. It's pH balanced. It's clinically tested. It's safe. And so it just gives a beautiful fresh scent. And on days when I didn't shave and I had some nice beautiful foliage down there, it grabs to the hairs really nicely to give just a clean fresh scent. So I used to love just a nice little quick spray before I went on my way. And then we got to pop in moving on to what we currently do every single day. I'm just joking. Let me like three, four times a week.  So we work on the morning together and then we pretty much shower together, maybe like 70 to 80% of the time. Our showers aren't always sexy. Sometimes it's just sharing and saving a water bill. But ultimately, it is a nice time just to be in there to bond. I have to have a specific wash. Whether I'm having sex or not having sex is kind of null and void of that. But it is essential that I have as wash that is specifically balanced for my genitals. I have made the mistake several times, like I said, of using just any old soap. It does not work for me. This one in particular, I super love. It is a naturally normal cleansing wash. It's for normal skin. It honestly has like, it has a waft to it. There's not like a strong scent and it's really gentle. So I usually take no more than like that much and I do front to back. I do my genitals. I do my anal area and I just clean that way. Jared actually also uses my washes for his sensitive areas as well too. And so we tend to go through these because they're pretty integral to our daily care. Okay. So let me give you like a totally different scenario now. We work on different floors in the house. And so it can be like four or five PM and we haven't seen each other all day. So we might meet in the kitchen at some point and then he might be like, ooh, you look, you look nice. You look all productive. Like you've gotten a lot of stuff done. You feeling good? I'm like, yeah, I'm feeling good.   And I'm like, I could spare a break. What do you have in mind?  It's just a natural part of I think our care for both of us mentally. We just like to do that one second wipe up. Sex can happen and it does casually happen.  I love these cleansing cloths by Summers Eve. This one in particular again has a very light fragrance. It's gentle. Jared uses them as well too. And we just have these in every bathroom.  For me, sex is very mental. If I have cracked heels, for example, and I could hear the sound of those against someone's skin, it can kind of take me out of the moment. And so I know if I haven't just taken a second just to feel my best, I may not necessarily be able to fully enjoy the moment. And then the big event happens. We go and we have sex. Flowers bloom, birds chirp, bees pollinate, fireworks pop, pop, pop, pop off. It's a wonderful time. And when we are done, we sit in that after sex glow and we look at each other and we say, I love you. And we just experience and feel we let our heart rates come down and let our sweat dry for approximately 10 seconds.  Like this has been our thing since the jump. And I actually think Jared's the one who introduced this to me. We get up and we go to the bathroom together immediately after sex. Again, maybe like roughly like 30 seconds afterwards. Like once all the pulsing has finished, we're like, that was great. Let's go. So I go to the toilet, he goes to the sink. I go to the toilet and I pee. If you haven't heard this before, I want to say it six times in a row.  Peeing after sex is a way to clear out any new bacteria that was introduced to the area. It can prevent a multitude of infections or imbalances. It's a simple thing that you can do. It's free. After I finish peeing, I get up. I might grab one of these wipes. So these wipes are excellent once again to remove odor causing bacteria. And I just want to use something that's pH balanced. Or I might just pop a squat over the sink and bird bath.  Very rarely do we ever shower after sex. I just, you know, we would have had to have like a very like sticky encounter.  I want to get back to the bed to cut as soon as possible.  That's a way of seeing if the condom was compromised in any way. Obviously, if some water is coming through, you know, there's been an issue. If not, you just dump it out and then you throw it into the garbage. And then he takes warm water or he takes a cleansing cloth and he wipes up as well too. Then we go back to bed and we just get to do all the fun stuff. All of the petting, the cooing, the kissing, the cuddling, and then eventually the sleeping. And there you have it. You guys know all my business now. That is exactly what I do before I have sex and after I have sex. And now it is your turn. I am dying to know because I just spilled all my tea. Give me a sip of yours. What do you do before sex and what do you do after sex? What is your routine? And does it change from partner to partner or do you have your set in stone? I feel like the routine that I have, we will keep for a very long time. Again, my body, both of our bodies, have never been happier or more in harmony. And I attribute that to the work that we put in both before and after. And speaking of work, I'm so proud to have worked with you, Summer's Eve on this collaboration. Summer's Eve is available on Amazon, a majority of retailers. And so I like it for that reason. It's convenient. I can pour a little small bit into a travel size. We can go with me wherever I go. And again, they have a multitude of products. And so it's not a matter of like what's worked for me and my vulva, which you feel free to take the recommendation, but I strongly recommend that you go to their website, go through the product line and see what would best benefit you based on what your needs are. And you can go in the info box below to links to how you can find the full Summer's Eve product line on Amazon. Take your pick. I suggest you go through it slowly, ask questions, you know, have a conversation with yourself to find the care guide that works best for you. And once you find that guide, come back and tell me. So yeah, go in the info box, then go in the comments, and I'll see you guys next time. I have no idea what kind of ending that was. We're still here. Maybe we can try one more time. Thank you for joining me on this hot episode.


One, I think we can start. My name is Vasili Shishkin. I'm an orthopedic surgeon, but I use blender in my daily practice. And today I'm going to be talking about creating orthopedic surgical implants with a blender. I work at the Central Clinical Hospital of the Russian Academy of Sciences in Moscow. So this is a picture of my hospital. And apart from being a general hospital, this is also a scientific institution which gives us an opportunity to carry out some research projects, scientific projects, and currently we're having a project on 3D technologies in surgery. So this is me doing work. As you can see, we're using blender in the operating room, helping surgeons to make the correct decision, how to make correct surgeries, to use the planned, the previously planned surgery to get it into life. And just a couple of words about orthopedic surgery. It's a branch of surgery that mostly deals with bones. So there are bone fractures and deformities and some other diseases that affect the joints. So today we'll go and be talking about joint diseases and problems with joints. Usually when there's a problem in a joint, in any joint in the human organism, eventually the person comes to a joint replacement surgery. A joint gets replaced by a metallic structure that takes the function onto it and in that way it reduces the pain and gives some inability to the joint. But this approach has some issues. First of all, implants come in standard sizes that do not fit all patients. And sometimes the surgeon has to adapt a patient to the implant. So he has to cut away more bone just to make the implant fit right in place. They're made out of metal and they are not anatomical, meaning that they are meant to articulate, to move around, but they did not fully mimic the bone itself. And in a couple of years, like 15, 20 years, a revision surgery is needed. So these implants do not last long. Having that in mind, the Russian professor, Alexander Voronsov, proposed his vision of this problem by creating individual joint replacement implants by using molding techniques. In his understanding, the restoration of the anatomy will give the restoration of function while maintaining the anatomy of the joint. He had a lot of operations made and basically this was his workflow. He took a plastic model of a bone, made a mold out of it, and casted a special cement that's used to hold a standard implants in place, casted that into that mold and in that way he produced the implants that were later implanted to the patients. So as you see, they're quite anatomical. They look like the real bone. And he had a book, he wrote a book that's called Individual Joint Replacement Surgery and Art. And one of the questions that he was raising in that book is surgery art and does a surgeon needs to be an artist. He himself was a sculptor, so he was using his sculpting techniques in his work to get the correct anatomical shape of the implant. And so this is where Blender comes in. So before we start to work in Blender, we need the material to work on. So we make CT scans of the affected problematic hand or leg or arm and then convert those into 3D models using specialized software. We create surface models and the healthy model serves as a template that we can use to restore the anatomy of the affected one. So on this slide you see that the green model is the healthy hand, but it's mirrored so it will represent the right one and the yellow one is the one that has the problem. At the 2015 Blender conference, I've raised an issue about model alignment because when we have these two models, we have to align them one against the other to get the understanding where the deformity arises from. So I got a great feedback from the Blender community. People were calling me coming up with different ideas and eventually I came across this add-on for Blender that's called ICP add-on. This is an iterative closest point alignment algorithm that is employed to minimize the difference between two clouds of points or meshes when one object is held in place and the other one gets rotated and translated around it just to make that it best matches the reference point. It was introduced in the 1990s but it got an expansion only in the 2000s. So this is how it looks like. It offers a semi-automated alignment process. The first one, the first option is a pick point alignment that enables you to get a rough alignment of two separate meshes and the other one is the ICP alignment. This algorithm was written by Patrick Moore. He's a dentist himself and so he met the same problems that I had during planning surgery so I've included the link on the GitHub so you can go and check it out. And so this is how it works. The first step, the picked point alignment. You have two models and you just select the corresponding points on each model in order to snap them together. So this is a video showing this process. This is a really severe elbow dislocation and fracture and this is the problem that we see here. The bone is fractured. So we made a CD scan. We took the healthy bone that's shown in green and we need to align the green one to the yellow one. So we select both of them, select the pick point alignment thing, zoom in and we just need to pick the points that we know that are not touched but the deformity that are healthy. So usually three points are enough but the more the better. So you just select them, hit enter and it just snaps one over the other. This is quite rough but you still get an understanding that the problem is somewhere around the elbow joint but it needs a bit of fine tuning. So this is the next step to be done, implementing the algorithm itself. So what you do is use weight painting to select the region that is relatively healthy on each of the models, on the affected one and the healthy one and after that you execute the algorithm and the algorithm itself finds the way to align those bowls in a really sophisticated manner. You see that it's moving one model over the other and you can see that the blue thing sticking out is what the implant should look like, the replacement implant. So this is the correct size and the correct shape of the implant to be made for this patient. So the possible areas of this algorithm of use includes dentistry, some facial reconstruction of surgery but basically any area that needs to align one thing to the other architecture, 3D scanning, anything. So I encourage you to check out the GitHub link and have a look at that algorithm, that's pretty interesting. Now the next thing to do after we have defined the thing that the shape and the form of the implant, we need to somehow produce it and here we'll come to 3D printing. Unfortunately we do not have materials yet that can be implanted inside the body of the patient. So we are heading back to the professor who made the casting thing, so we need to make a mold. Now I've made some research around the web and I found the guy that already did this but he was working with brain, so they three printed a brain model then made a mold out of it, a scaled model, made some casting, but the story had a kind of weird ending because at the end the guy just ate his brain. I guess this was the whole point of the scientific research but nevertheless this was a proof of concept for me that this could be done. But instead of printing a model and making a mold out of it in real life, I decided that a mold could be made in blender but that was relatively simple, so the model was just taken and using Boolean operations and some primitives, a mold was created and then printed out. Now for some clinical cases, there will be some pictures of surgery so if anyone's not feeling comfortable watching blood you can just close your eyes for a moment. Now that's the first case, a patient had a tumor of the distal radial bone around the wrist, so this is basically what CT looks like without 3D reconstruction. That's just 2D black and white slides that the surgeon has to scroll through and use his imagination to really understand the thing.  The red one is the affected bone, the green one is the healthy one and then unlined that one over the other. The affected bone with the tumor had to be removed, obviously, and then created a mold, 3D printed the mold and casted an implant out of it. On the top picture you see the rejected thing, the thing that we removed from the patient's hand and this is the surgery, the implant positioning. It snapped right in just as it was there and had a tight fit. This is the postoperative x-ray showing good alignment and this is the functional result. The patient may not have the best flexion and extension of his hand, but he gained strength. He was a car mechanic, yes, so he was able to get back to work so he was happy about it. Now the other clinical case, a severe elbow fracture, the community fracture of both forearm bones. We made a 3D reconstruction. If you're looking at this and thinking that you don't really understand what this thing is, you're not the only one because a lot of surgeons that make x-rays, make CT, do not have the full information about the thing and they found out some interesting things during surgery so this thing has to be really carefully planned. So we made a mold and blender when we modeled a fixation stamp to hold the implant in place, tried the surgery. Virtually then we printed the mold and casted the thesis. So we used approved surgical cements. In this case it was a specific cement that's non-toxic, bone-like and it integrates into bone and we used this stem that was made out of biodegradable plastic that dissolves through time and so in a couple of years the patient just ends up with the implant held in place without that plastic stem. So this is the comparison of the bone that was removed from the patient with the created implant. As you can see, the bone does not have a really even shape. It's kind of oval, triangular-like thing, but the implant fully restores that. This is the x-ray. Unfortunately, the implant is not visible on x-ray but you can see the space where it's positioned and this is the most interesting part. The thing works. This is the rotation inside the elbow. We've tried that during surgery and it works fine. The patient in one month had good function of the elbow flexing, extending, rotating. She's 74 years old. She was able to get back to her normal life and was not disabled. So creation of individual surgical implants give the surgeon a better understanding of the problem, restores anatomy of the bones, enhances precision of surgery and gives good functional results. But we've run into some issues and those are related to segmentation issues. Segmentation is the transformation of 2D CT slices into the 3D model. Usually it's made, it's performed in a certain software such as Slicer in Vizalius and a couple of more. It takes up time and gives out a big STL file that's really hard to work with but it uses the algorithm that's called marching cubes. Now there is a possibility of visualizing DICOM in Blender. I've made this myself. I've talked to people doing this but apart from visualization you cannot do nothing more about it. You can just scroll through slices, have a look at them but we need a 3D model. I've run across a marching cubes algorithm that was made for Blender, there's the link below but unfortunately I didn't have the opportunity to get it work correctly so I'm calling out for help. If anyone knows how to get this thing work or maybe has any other suggestions on solving this problem please get in contact with me. I'll be here around the conference and I'll have my contact details below. So hopefully the solution of this problem will get us one step closer to creating a fully functional surgical orthopedic add-on for Blender. Thank you for your attention.