 If you're watching this out to the fact, make sure and check the description for time codes. I thank you to David in advance for doing those. We're going to hang out as people get collecting. It's going to be a super chill stream, I think. So if you have questions, feel free to drop them in. Otherwise, we'll do housekeeping in a little while. Let me make sure everything's running. Oh, you know what? I forgot the restream chat. Let me pull that up. So if you're on Twitch, I can't see you. I see David and Mr. Certainly and Dexter and Discord. Hello, everyone, folks in YouTube. Hi, Beotograph. David's there, too. DrX17, the shippu? Hello, hello. You know the thing I said that I wouldn't do last time, because I didn't have a big enough screen. Well, that's what I'm doing, so we're going to do some merging today. Live on Twitch. Hey, Johnny. Hey, Gareth. Hi, Bruce S. Hi, Mark. Doctors in the Discord as well. I love the factory. I'm Colorado. Audio is a bit tinny. Is that just because it's too far away from me? Welcome, doctor. Thanks for joining. I'm one of many Adafruit folks that stream. I'm not the only person. So you'll see other people on this stream as well. But this is the normal time that I do stream. And I probably am the longest, usually, I think, because I'm the least formal about it. Audio is just fine, says Johnny. Thank you, Johnny. Spooks reorienting. I moved the cat tree a little bit so you could see him in that bed there. 2 o'clock on the dot. How are we doing on people? 17. Cool. Probably get a few more. Building an Adafruit breadboard PSU while I listen. Nice. Bruce S. is rebuilding their NAS, getting close. I put together how I upgraded my motherboard and my CPU. I had the old ones still, along with a better graphics card. So I actually have a bunch of boxes over here I have to clean up this weekend. But I made a second computer based off those parts for gaming. So that'll be good. Got an email about the Python language summit that I'll be giving a lightning talk to. I'm applying for a couple talks this year. And they're just really short. The Open Hardware Summit one is 15 minutes. And then this lightning talk that I'm giving in a couple weeks is five minutes. So it's just like, and if you watch these streams, you know that what I prefer to do is two hours of rambling. So yeah, it takes more work for me to do the short ones. So I've got to get going on that. Love the factories. Boredom tomorrow. Nice. Yeah, I think neither my wife or I slept very well last night. So I think it's going to be a pretty lazy weekend. I planted corn out front. The squirrels have eaten all but three of them. I had like 10. And there's only three remaining. So I've got to do something about squirrels this weekend. Squirrels and corn. All right, let's get going. Let me do housekeeping. So hello, everyone. My name is Scott, and I work for Adafruit on CircuitPython. CircuitPython is an easy to use version of Python designed for microcontrollers. It's based on a project called MicroPython. It runs on these little inexpensive computers. Ooh, here I have it. I got my Neo Trinkie out here. Let me switch. I'll show you what I'm talking about, how tiny these computers can get. So there's the Neo Trinkie there. And you see the chip underneath my finger. The black one there is a SAMD21, which is a 48 megahertz computer all in that little chip for $1 or something. The board itself is under $10. But the chip itself is around $1, I think. So CircuitPython runs on that. You plug it in. It shows up as a drive. And you can edit the code.py file on there to do stuff. So that's what CircuitPython is. Oh, I just expanded all my windows. So where are the saved streams posted? Sorry, I got distracted. I answer questions. If you want to check out past deep dives, you can go to youtube.com. slash Adafruit. And if you hit Playlists, Created Playlists, there is a deep dive playlist there that has all the past ones. So yeah, Adafruit is an open source hardware and software company based out of New York City. I work remotely for them. So I'm actually in Seattle, which is the other side of the US, which is why I do this at Pacific Time, because that's the time zone I'm in. If you want to chat with me and a bunch of other folks, you can join the Adafruit Discord server by going to the URL adafru.it-discord. That's what the smaller of the two windows here is, is Discord and then YouTube below. These deep dives happen every week. They're typically Fridays at 2 PM. Next week, I think, will be on Friday as well. Occasionally, I shift it to Thursday if I want to take Friday off. But I haven't had a reason to do that. We finished skiing, so I haven't done that recently. Generally, what a deep dive is, is it's just me talking about whatever I'm working on that I've been working on over the week. And I go into deep detail for about all the things. I'm happy to answer questions. So if they're related to what I'm doing, that's great. If they're not, that's great, too. I'm happy to go off in tangents, as some people will note. And yeah, so the last, so if you have questions, feel free to ask them. I get distracted and I answer them. It's totally cool, but that's how it goes. It typically goes for about two hours, so it'll be just under two hours from now. Last thing is, is this kitty here is spook. I'll go to the cat cam. That's spook that you can just see his ears there. He is epileptic, which means he does have seizures occasionally. He's on new meds since we started streaming, so he's been doing really well. But if I'm standing here watching him and not paying attention, that's why. So yeah, that's housekeeping. Let me see who I can say hi to here. Well, the factory says hack the touch pads to do ice cream and sea. My plan actually, the reason I got the Neo Trinky out is I ordered it, but I have a lot of stuff I didn't use, but I just put this computer together for gaming that's under our TV. And what I was thinking is that I could just program this using Circuit Python to type in the pin to log into Windows. So you would start it up, but you'd have to log in so you just touch this, it typed the pin in and off the way you go. So that's why I was doing that. Andico says that the Nordic Power Profile Kit 2 that I ordered in January arrived yesterday, that's awesome. Hello, Moto Teemo. Happy deep dive day. Johnny says I have 25 terabyte NAS for backups already. Hi, Keith EE. Johnny says, which is why he does this at a Europe friendly time. Six by 10 terabyte iron wolves and a RAID six style set up dual parody. Wow. Yeah, Spook's been up elect. Doctor says poor fluffy baby seizures suck. Yeah. He's like super lovey after he has them though and they've been much better in the last, I don't know, six months now. So it's good. Can the Trinky interface to Adafruit IO Cloud might be a way to sync time codes? Hmm, I don't know. I don't know, we could think about that. How do people in the US follow this, take a break from work? Yeah, I think so. I think some people watch this while they're at work still. I'm at work still. Hi, Andrew Reid on YouTube. Yeah, folks are. Friday becomes loose in the afternoon. Yeah, everybody's kind of checked out. My wife and I were talking about that earlier. We're kind of like done for the day. So after I'm done with this dream, I'm done for the weekend. Although I do want to work on the law stuff some more. But that's not work. Alex Landon says, I'm trying to load CircuitPython on my new Metro ESP32 S2, but the firmware doesn't seem to update since I don't see it mount. What is the RGB LED doing? And I would recommend getting on the Discord. And if folks in the Discord can't help you, I would take a look at the, I would look at the Adafruit support forums as well. And DCD, I think the time codes in the notes are two minutes behind. It's 11.30 right now. I get off at four Eastern and I have wine. Ah, yes. Having a refreshing beverage and watching a deep dive is sounds kind of fun. And if you want to... Ooh, Bad Abby asks, where does Adafruit order their PCBs from? I'm not actually sure. I think it's there. I think the more actually gets them from different places. I know when Sedatius was working with us, he was doing some prototype PCBs from Oshpark. But generally I know that LadyAda likes to design stuff so that LadyAda likes to design stuff so that it can be manufactured by basically everyone. All of the PCBs are designed in a way that are like pretty easy to fabricate, which also means they're low cost, high yield sorts of stuff. Eddie? Oh yeah, Randall says the reset sequence is tricky. That's right. On the S2s, you have to hold, to get to the UF2, you press reset and then press boot. Keithee says, Alex, I've got a Metro S2 as well. If you have questions, the guide is really helpful. Eddie says, I'm really loving working with CircuitPython. I'm finally launching my new board, the Atmega Zero, which is an ESP32 S2, which will be released with CircuitPython. Thanks for all you do. You're welcome. I'm glad it's useful. It's very cool to see so many people build on CircuitPython and Adafruit deserves the credit in terms of like, I wouldn't have the time to do it or I wouldn't even know, I didn't know about MicroPython until I talked with Adafruit. So Adafruit is a large part of what made CircuitPython. Hi, Jose David. All right, so let's pick up where I've left off. I don't see a ton of questions if you have them, feel free to ask them. Unrelated, let's go to the desktop here. Unrelated, I was actually just reading this article here from Oxide Computer Company about how they found a security exploit in the LPC-55. I'll have to read the rest of it. Exploiting undocumented hardware blocks in the LPC-55. They were talking about using it as a root of trust. I'll post this in there. Hi, Phil. Two of us are logged into Adafruit. If you're on the YouTube chat, there's two people who are typing in Adafruit Industries. Ah, Rick. Steve says Adafruit rocks. Yes, they do, it's awesome. I've worked for them since the fall of 2016. So yeah, I've been very lucky. It's been great, I like it a lot. All right, we got some questions here. Sometimes deep dive is literally on the TV. Nice. Oh, nice, they're at the factory too. I assume you're doing state of the fruit from home because it's still virtual. Oh, but yeah, like Phil and Lamore said that they got their second shot. So, and I got my first, I got my first vaccine shot on, I got Pfizer on Monday. And then three weeks from Monday, I'll get my second dose, which I am very excited about. So Rick says, hello from Redmond, still wondering circuit versus micropython. A lot to like with circuit Python. Oh, David G got there first. Yeah, nice. So, circuit Python and micropython are related. Let's just kind of recap it for those folks that are new. Micropython started, they're at the factory but doing virtual stuff. Okay, micropython started with a Kickstarter by Damien George, who's the person that created micropython. And the first Kickstarter was for the STM32 Pie Board hardware that Damien did as well. And two years, two years later. So, micropython, oh yeah, happy birthday. Micropython turned eight years old today. So, let's just find that on the blog. Happy eighth birthday, micropython. So, April, I saw Damien said, yeah, April 29th was the first line of code written. So, happy birthday to micropython and congrats to Damien about that. So, in August of 2016 is when I started working with Adafruit and how has that been eight years? I know, right? So, yeah, so in 2016 Adafruit, I pitched them hiring me and they were like, we have a project for you, are you interested? And I was like, sure. And they were like, we want, like I hadn't heard of micropython. So, they were like, like do you wanna help get micropython running on our boards, which are the CMD-21s? And they didn't support it at the time. And so, we did that and as I was doing that, I discovered that there was some design decisions I disagreed with about particularly the hardware APIs. I wanted to be much stricter about what the hardware APIs were. And those are the hardware APIs that we build like hundreds of libraries on top of and code and examples and things like that. So, I knew Adafruit had done this like process of like all their products have Arduino support, for example. So, I knew if we were going to this Python world, we had to make sure that the platform we were building on was gonna be consistent across all of the boards that we did. So, that was kind of like one of the technical reasons that we wanted to do it. And then, after I got all the CMD stuff working and then we were talking about what the hardware APIs should be, like there was very clear that there was different goals between what Damian wanted and what we were going for. Or like Damian wanted to expose the details of a particular chip, like the STM chips in particular. Whereas like we were, I was totally okay like glossing over this stuff that's like slightly different. Or maybe like what makes a particular chip special in exchange for writing code that works across platforms. So, that's kind of like the principle of it. And then we also made some decisions about the workflow with CircuitPython that mean that it works the same across everything as well. So, all of the boards that once you install CircuitPython, they show up as drive on your USB. And they have code.py. That's not true for MicroPython. MicroPython can do that. I don't know of any MicroPython that auto restarts your code like CircuitPython does. But it is much more consistent. That being said, MicroPython supports ESP32. It supports boards that don't have native USB, which CircuitPython doesn't. So, I think those are the high levels. We have kind of an old laundry list in the read me. If you just go to github.com. There's a bunch of data fruit on the read me. There's a differences from MicroPython. So, you can see some stuff here. But it's kind of like not super up to date. So, what I've been working on though is like one thing we do share is we share a kind of the Python core. We don't use a lot of the hardware API stuff, but we do use the core Python bits of MicroPython. MicroPython, so what I've been doing starting last week is like I've been updating the versions of the bits that we do share with MicroPython to the newer versions of MicroPython. So, that's what we'll get to later today. But first, I'm gonna get caught up on the chat here. I hope I answered your question, Rick, about it. Oh yeah, Memorial and Phil got Pfizer as well. Go JimmyPy says, the second-sizer is not as fun. Yeah, but it shows that it's working. I'm privileged to work from home, so I can just do that. Hi, Dave. Hi, Rockbit. I like your party emojis. Hans Repel says, I used to, you know, zero five five and my project works fine when I move the sensor in all directions. But when I start going north, X axis moves to the right and Y moves up. Hmm, I'm not sure. It sounds like, so Hans, I would recommend going I would recommend going to the support forums or the Discord server to ask more detailed questions about your example. The Discord you can do is a-d-a-f-r-u-i-t-slash-discord is the URL. And then if you just go to like forums.atorfruit.com, you'll get to the support forums. Rick says, thank you. Interrupts threading and good on your first dose. So, MicroPython does support interrupts meaning code will run kind of in-between other Python code. CircuitPython doesn't do that, doesn't allow interrupts in Python because that's concurrency and it's really hard to program well. CircuitPython does use interrupts internally though. And it uses those, so we, CircuitPython presents APIs for things that are hard to do and that are time sensitive. And then it uses all of the C things internally. There is threading. So the other question was threading. There is threading in the core Python VM that we share with MicroPython. As of like 6.2 CircuitPython, we were actually quite old for MicroPython. So there have been some changes there. We don't use it at all in CircuitPython and I'm not sure whether it's even on. But it's not like we've removed it. We just don't, we don't support it. So if somebody wanted to do the work to get threading going, they could. But there may be cases that are buggy as a result of that. It's just not a priority for me or anyone at Adafruit because you can do so much without it. But if somebody wanted to have threading, you could add threading. Like the MicroPython pieces are in the code still. Yeah, and thanks to David for time keeping again. So David G asks, how can I get access to when or how many garbage collections is taking place? I would like a GC.count to figure out if this is frequent or not in my code. Ooh, that's a good question. Somebody can point you to where the GC module is created. You certainly could have a counter. I don't know of one. I don't think there is one now. But you could certainly add it. There's some memory. I added a memory monitor. I added a memory monitor class that can do similar things. But it's more just like tracking allocations in general. Yeah, NDRUA says, I just dropped the circuitpython.uf2 onto my NeoTricky. It's throbbing green, which reminds me of a recent deep dive. Yeah, a couple deep dives ago, I was playing around with turning off that. And in fact, I actually have the feather still sitting on my desk that's doing the new blinking. So I do want to do that still. I just got distracted with all this merging stuff. Well, the factory says, for space reasons, does it make sense to respin the Trinkie UF2 image for yet another baked in library? If you need the space, and that's the only way, then that's the only way. I really don't like freezing in libraries, but it does solve the memory problem. Ah, Keithe points out, you could track when GC-mem-free goes. I wonder if GC-mem-free triggers a collect though. I'm not sure. Welcome, doctor. Doctor just found out about circuitpython and micropython. I tried the latest MPY cross, by the way, and the size gained on the modules like NeoPixel was pretty nice for smallboards in particular. So it changes in 111, which is merged in. 112's about to come in as well. So I'm curious to see if 112 changes it as well. NeoPixel MPY with 6x is 1700 bytes, with current 7x it's 1,000 bytes, just over 1,000 bytes. Nice. Yeah, they did optimize it. One of the optimization, the questions I'm reading right now are in the history of the Discord chat that wasn't behind. One of the optimizations in MPY files was that there's a set of queue strings that are fixed, that are always numbered the same and they're always guaranteed, so they don't need to be included in MPYs. That's one thing they changed. Hi, Jim. Sorry, I'm a little, I'm like five minutes behind. Oops. Yeah, can we interrogate the program counter? Not directly. Yeah, the questions that I'm reading are off screen. It doesn't trigger or collect. All right. Rockbit says I really love it when Circuit by the Lives just work cross-platform. Like when I was using a Lura RF modem on a Raspberry Pi with Blinkett, it ended up being the only way I could get the hardware to work with the Pi. Yeah, yeah, so that, when we decided to do our own API and really focus, there was a moment where I was thinking about the hardware API and like the MicroPython API was very, like I want to create a generic API for this common hardware block sort of thing. And we kind of stepped one further step back away from that to make our hardware APIs be feature-focused and then about what you want to do, like sending a pulse set in or out and that allows us to, depending on the platform, to do it in different ways. And that model of API design, I think, has also allowed us to even go into the, like the CPython world with the Blinkett library. So it's worked out really well. And so in terms of like overall community, like you'll find a lot more drivers and examples for Circuit Python than MicroPython, I think. Because honestly, MicroPython is different in a lot of different cases, right? Like there's MicroPython for the MicroBit, there's MicroPython for the MicroBit V2 and they have different APIs and they work slightly differently and stuff too. I think it's Lopda or Yopda and Twitch asks, can Circuit Python run on the Adafruit Feather boards? Yes. If you want to see what boards it can run on, you can go to circuitpython.org slash downloads. And you can just type in feather and you can see all of the different feathers that it runs on. It's not everyone, the eight bit feathers won't work, but anything, all of the 32 bit ones do. Some work better than others, like the M0 basic is not very nice because it's very, very limited. But yeah, there's lots of feathers that it does. Yeah, this one, the M0 basic is not really recommended. Dr. asks, would learning regular Python help learning Circuit Python? Yes, definitely. So the core parts of the language in terms of the syntax and control structures and all of that, that's all Python. It's all the same. MicroPython did a really good job of re-implementing the Python language itself. The things that you'll find are different are the pieces kind of around it. So all the hardware APIs and the modules and stuff like that, but the language itself is the same. Yeah, Naradoc says 11 moved an MPY version four and 112 takes into version five. And Naradoc also says learning Circuit Python helps learning CPython. CPython is the kind of more specific name for desktop Python because it's also written in C. It's also like the canonical implementation. Yeah. Okay. Hey, look at this. So I... G-Wiz says you can learn five or six basic things and do loads and loads of fun slash useful stuff. Okay. So I... Right, so Dishapu points out there's also PyPy, which is PyPy. That is Python implemented in Python. That runs on desktops as well. So there's multiple implementations of Python. And so CPython is kind of like the more specific name for Python, like the original version of Python, the main one. It's also written in C. So I just got my Rage 112 build passing. So I'm actually gonna create a pull request before we get started. There was like a few boards that didn't build as of this morning, so I fixed that. And it looks like I fixed it well. Oh, I should also give a thank you to Jeff Epler for kind of rescuing me from despair. The 112 merge, which is what I'm just about to pull request if I can figure it out, is was pretty rough. There was a lot of tests that failed. And it was a cut, and they were not simple fixes. So I was kind of slogging through that and Jeff offered to help and that was really, really helpful. So Jeff's been doing a great, he actually went back and there was a couple of bugs they introduced with the previous merges. And so Jeff found two of those over the last 24 hours as well and has fixed those. So a huge thank you to Jeff for helping me, being my backup in terms of getting this stuff fixed. Go Jimmy Pye asks, has anyone been able to get circuit by them working on a soft FPGA risk five? We have a light export that Sean Cross did. It's not used very often, so I can't claim that it works. And I've got lots of ideas about FPGA stuff. I just don't have the time to do everything that I'm interested in. Hi, Sammy. Hi, Izzy to RPN. Okay, let's do the poll request. It's probably gonna crash here. Maybe not. Yeah, sorry for the noise, the window's open. I think I'll have Jeff do the merge. Dan got out a poll request today for the new USB stuff, which is really exciting. So folks should check that out if you're interested in. I think it's for issue 299. So we'll create that poll request. Can't hear your noise because of QRM from local lawn mowers. They're not lawn mowers here. Not that bad. All right, well, cool. So the status update on the merge is, and for those, maybe I'll recap for the folks, those didn't join us last week. So CircuitPython was originally forked from MicroPython in 2016. And we updated it a couple of times, but then kind of like got distracted in all the other stuff we were doing. And so the version of that we were basing CircuitPython on was actually MicroPython, MicroPython from like June of 2018, which was version 1.9.4. And it was like not 1.94 proper. It was like between 1.94 and the next release, which was 110. So what I decided to do is we, because we're in this mode right now where 6.2 is stable and we're going to be going to 7.0, we're making some API changes. And that's what major version numbers are kind of all about. We thought it was like a really good time right now. And this is why I interrupted the BLE work I was doing. It was like, now's the time. If you're going to do it, you got to do it now. Otherwise, you get too far into 7.0 and you don't want to introduce a lot of instability and bugs and stuff. So we decided now was the time to do the merge and MicroDev had started it. So thank you to MicroDev. MicroDev at Gojibipy just tweeted it at Sean. So cool, we'd love to see the FPGA support revived. I own system on the chip.org by the way, because I wanted to make a system for FPGAs called that. Juan Carlos, yes, merging more MicroPython today. So now's the time to do it. And MicroDev had started it. They were merging 114 in directly and that's like a ton of code changes. And I was like, oh, you know what I'll do? I'll merge 115, which was just released and then we'll be up to date. And I looked at it and I was just like, this is too many changes to deal with. Like what is the better way to do this? And I decided to actually, there were six releases of MicroPython since we had updated. So it was 110 through 115, inclusive. So that's six releases. So what I've been doing, and I was talking about this last week was starting from 110 and going up through 115. So 110 is checked in, 111 is merged in. There were some bugs, but I think the most critical ones we found now. Thank you to the folks who tested. 112, I just made this pull request for. And the CI was passing for all the builds, so that's good. And then 113, so 113 I started yesterday. And the first process I have is like going through the files that I know I just don't want changes for. And then once I have that, then I get a bunch of files that we both changed and I just have to go through all of the merge conflicts. So last week I was like, oh, I can't do that. I did it for 112 in the morning and finished it. And then I think it was bug fixing during the stream last week. But I'm not to that point yet here. So I actually figured out how to fit it. So I've got Sublime Merge open here. And if you see me leaning towards the monitor, that's why I made the font like size eight so that it would kind of fit. So here's where I'm at and I've started this. I was like, oh, should I do some beforehand? And then I was like, oh, there's 235 unmerged files. Like I think I can do some of it beforehand. I'll still have plenty to do on the stream. So this is gonna be a bit different than last week. If you have questions, please distract me so I don't have to do a bunch of this. But my plan is just to go through this and do the merge. And I'll show you how I've been doing it. This is the part that when I was talking last week in our meetings, I was like, this is the part that makes me like go cross-eyed. But it's also kind of one of those things that you get on a roll for. So one thing you'll notice here is I've got like four tabs. So this is Sublime Merge. It's by the same people that do Sublime Text, which is the editor that I use. I have a baseline circuit Python one. So it can show you like what I've been changing in kind of like the git state. Merge MicroPython is, you can see here, it's merge 112. That's the branch. Merge MicroPython is the one where I'm working the furthest ahead. So this is the 235 unmerged files is me merging in 113. Pending Merge is where 112 was living and it's working. So I pushed it and now there's a poll request for it. So that'll sit there. And then this revised code has nothing to do with it. This is the Washington legal law stuff that I was doing. But you can see here that I was actually playing around with applying a bill to the code. So I'm making some progress on that. Bruce S says I was a Sublime Text user for years moved to VS Code because of reasons. I've tried VS Code and I just don't like it. It's too noisy. Like one of the principal design things I think of how VS Code works is that it pops up something in the right hand side in the right hand corner. Like, oh, did you want to do this? Oh, did you want to do that? It drives me nuts. And I settled on Sublime Text, like you have to pay for it, but like if I'm doing this or I use it all day. So it's like totally fine to pay for it. And because it's written in native, like it is quite snappy, which is great. Whereas the like Adam and VS Code are written in JavaScript stuff. And that's not quite as... Is it Yopta? Is it an L or an I? Yopta, it might be, I might be two old fashioned varieties. Yeah, I don't, I don't... Bruce S says Sublime Text is Python. Lopta, okay, thank you. I don't really use IDEs. I think there are things that I could definitely optimize, like be quicker about, like if I'm trolling through like a bunch of error messages, if the ID was jumping to the right spot, like that would be nice. But I just, like, I really like just, I like tools that I can apply to all languages and I don't wanna have to like set up a new environment for everything. So I end up using the command line for everything and GDB for everything and like a text editor for all the text and all the code that I edit. Sublime is still unbeaten when it comes to handling insanely large text files. Yeah, so I made a mistake. I was looking at an MPY file in Sublime Text and it automatically renders it as hex. And so I like pinged Jim. I was like, Jim, why in the world are these MPY files like text encoded hex? They weren't. That's just Sublime Text automatically showing it. Doctor says, so I've never used GitHub or similar. I've always worked on my own. So when you fork, you're just making a copy and modding from there and merging, you bring in changes from a newer version of what you forked from. Yeah, that's exactly right. So what GitHub is doing is it's tracking versions and like most version control, you have kind of branches. So you can say like, this version is changed on this version which is not changed on this version. And so what merging is doing is it's taking like two independent branches of changes and you merge them together and you get a bunch of changes in that one but those changes are meant to like encode the whole history from both of them. Oh, there's a Zen mode, yeah. Keithy asks, does anyone use PyCharm while programming with CircuitPython? I spent years programming in g-edit so I'd use our thing I don't know how to utilize. I used to use g-edit too. I used Kate for a while. I think people do use PyCharm. I know Katni's done some work with it. I do it the same style, probably. That's one of the reasons I like Sublime. Yeah, I mean, I'm also a print FD bugger. So, you know, we have a good learn guide. If you're new to GitHub, we do have a pretty good getting started learn guide. Getting started. Katni wrote a really good guide. Contribute to CircuitPython would get in GitHub but it will talk about most of the stuff. So I recommend that. Johnny does PyCharm but not necessarily for CircuitPython. Expound a bit on the results of your pull request and what you see as next steps in merging. So the pull request, thank you Minnesota meant that for that. The pull request I made will merge in the changes from 112. Last week we covered, this is right. Last week what we did is we looked at all of the updates for MicroPython or read through the release notes to kind of gauge which ones would impact CircuitPython or which ones won't. So if you want to know like what we get from 112, I'd suggest taking a look at that. For 113 we'll see when we get to the actual merging kind of like, we'll start to see some of the things that changed. Hamsley, I just got home so I just tuned in. I'm having a pretty amazing day. Awesome, that's how I felt Monday was. I got my first dose and I was pretty excited about that. I do CP for CircuitPython. If I were to truncate CPython, I would just do Py. Yeah, my partner got Moderna on Tuesday. And my arm was sore but yeah, that was it. Hi, unexpected maker. Hi, Sadie Electron. Okay, so if you're new to GitHub, I recommend this. It talks about some of this stuff. But okay, let's just do merging. Let's get in the zone. So here's what we got. So we're in the merge MicroPython. So last week I talked about Git work tree which allows you to have multiple folders from the same Git repo at different branches. So I've got four branches. I've got CircuitPython, Merge MicroPython, Penning Merge and I've also got a MicroPython work tree which allows me to reference each one. So Merge MicroPython is where I'm merging 113 in and I've got 235 on merge files. Oh wow, Canadian folks get their second doses a while later. Yeah, they said when I got my first dose, they were like, if you get Pfizer, they just automatically scheduled you three weeks out and if you got Moderna it was four weeks. Git is great working alone. The lightweight branching makes it super great when working on fixes or changes. Git, Diff and Bisect are really useful to track bugs too. Mark says August for a second dose. Oh, for AstraZeneca, interesting. Okay, so here's what I have to do. We have 235 on merge files. Here's you can start to see like the on merge bits. So what I do, MD Robert says at least four months later. Hi, Asteron 1987 from Argentina. So all I do is I hit resolve and this is the screen I was saying I probably couldn't fit. I probably couldn't fit last week. So let me explain what it is. So in the middle here, we have the automatically merged version and what you can see if we start at the top of the file, the left-hand side is what's in CircuitPython. The right-hand side is what is coming from the version of MicroPython that we're looking at. So here you can see that like here's the version header in MicroPython. Here's the version header that has been switched to SPDX in CircuitPython and you can see it was automatically merged. So the ones on the left that are included in the middle will be, they'll be like solid green, I think. And then the ones on the right-hand side are blue if they're included. And then there's arrows here that allow you to include it or not include it. And then there's arrows on the right-hand side as well as that. On my TV, that's unreadable unless I walked a fee three to way. Yeah, is it too small? Like the problem is that if I make the text bigger, it doesn't word wrap. I know this is why I was like, I don't think I can do it. I can increase the font size if nobody can read it. I can read it. Yeah, so what you'll see is that all this stuff has actually merged automatically. It's nice that the darker parts are the parts that changed. Unexpected Maker says it looks okay. Minnesota says it looks... We don't really need to read the code. It's okay, I'm not actually trying to play along. Yeah, okay, so you'll see here that these things are automatically merged. Timon Skou says it's okay too. Never trust a development environment that doesn't work in an 80 by 24 terminal. Good luck doing a three-way merge with that. Okay, so left-hand side is circuit python, middle is the new version and then the right-hand side is micropython. And Sublime Merge does these fancy arrows to show you how things line up, which is really cool. Steven says, I'm just glad I already have a glass of wine if we're doing three-way merges on a Friday afternoon. Call it 132 by 24. Okay, so a lot of this stuff is really straightforward. And in fact, this is like the third time I've done it on this code base, right? Because this is 113. So I've done 10, 11, and 12 already. So some of these are really like I've seen before, which is why I think me doing it again is it's fine. So this one here, where we add this NP Proto Implement thing is just something that Jeff added a while ago. So what I'm gonna do is, they're marked as conflict and red here. I know they're small. Can't praise beyond compare enough for deficit three-way merge. Interesting, I'd like to know how it's different than Sublime Merge here. So yeah, so these two merged in and then at the top, it says all conflicts resolve. So all I have to do is hit save and stage and now I have 234 files to do. So I kind of think it might just be, it's usually me getting in the zone. So here's an example of like the copyright changing and it's just Damian adding it a year. So like obviously I'll just take that. Like I'm happy to have the copyrights updated. This one's a little trickier and I can use this to actually scroll. Looks like this is the one we want. So this is the thing where it's like, I'm gonna do this and I'm gonna get something wrong and that's totally fine. So this is just adding like M time to stuff. The copyright update. There's also this next conflict button. I think I want this one. So some of these are, like this is the last merge that has. Yeah, I changed the signature of these stuff. So that's why different little FS version two be string. So I don't think we've changed much in this file. This is for a little FS, which I think we literally just got support for. It's all okay. You can also click here and do take left or take right if you think you want the whole file or something. 234 bottles of beer in the wall. 234 bottles of beer, merge, delete, resolve conflict, 233 bottles of beer in the wall. Yeah, that's pretty much the process. Keith E says, oh, that's so much more intuitive than a command line interface. Yeah, I am totally willing to pay for something. Gareth says meld is a similar free tool, so much easier than using a CLI tool. Yeah, I've come to love, it's well worth the money I paid for merge, for a supply merge here. Oh, and the middle column, and we'll probably see this, the middle column is editable as well. So if you wanna actually take like something from both, the ship who says 99 bugs in the code, fix one, patch it and 104 bugs in the code. Guilty is charged. So much easier than comparing two files in no plaid plus plus. Yeah, I don't usually do this, but like when I'm doing like all of these, so I suspect we'll wanna, so here I am like typing it in. Ah, so here's one of the big changes. Ah, Apple's Xcode file merge has the third panel the bottom full width, it's nice too. Hmm, I use, Dave says I need a tutorial on sublime text. I just open the files and edit them. I don't use a lot of the fancier stuff. UnexpectedMaker says I use smart git and that has the same type of merge conflict resolver, but the way they name the columns is so confusing. One thing beyond compare does different is that you have the base and output and separate pains. Yeah, like I said, it's well worth it. Okay, so here's one of the things that changed is that in 113 they introduced this MP error text and they took this, Rick says ever played with beyond compare. I haven't and I'm curious like for those of you who have, if folks have tools, they recommend better. So they actually started inspired by us. MicroPython started compressing their error messages. Unfortunately, they decided to do it differently than us and they don't do translations. So, sorry for the truck. So what I decided to do is where they, where the error messages are from MicroPython, in this case, I will replace our use of translate with their MP error text. But what MP error text does what we'll do in circuit Python is it will just, it's a macro and it will put translate there. And then I just changed the make translate, make check translate things in the make file to also look for this MP error text. And the reason to do that is that that means that our code will be closer to what the upstream MicroPython code is and that's a good thing. As you can see, I kind of get in the zone here. HamzLive says I'm literally using beyond compare right now to compare two eight gigabyte binary files. Ah, interesting. I'll have to look at that. How much does it cost? UnexpectedMaker says that's very clever. Yes, the closer both code bases are going for the easier to move stuff back and forwards. Yeah, 100%, let's just pull up beyond compare. I think I've looked at it before. I don't actually use this tool very much though. Download the free trial. Let's see how much is it to buy. 60 bucks, that's not bad. That's pretty similar, pretty comparable to sublime text. Features, three way merge for the pro. Yeah, I mean, it's pretty similar. I think it's similar enough to sublime merge. I don't need it. CP catching up to 115 is such a great thing. Yeah, I hope so. Steven says I bought sublime merge because our company uses SourceTree and it's unimpressed with our 30 gig Git repo, right? I just checked in the latest version of Visual Studio I have and merge conflicts are just error messages in the output window. Moto team has said it's honestly pretty similar. Sorry about the truck. Hold on, let me, wait, where are they going? Okay, sorry, I decided to close the window. Less distracting. So we can get into our three way merge then. Yeah, it sounds like the beyond compare licensing is similar to how sublime merge is. It's like you just get the key and you can work. You can use it wherever. All right, let's keep going. I got a lot to do. I don't know what all these simsys ones are. So I need to look at those. This looks like a formatting thing. It's possible that we didn't get the formatting correct. This I know we want the left-hand side. All this protocol stuff is stuff we want to keep. Oh, this is like a, what's different? It must just be how we formatted it. Okay, so I think what I want to do is I can do get check out. So there's also theirs. You can say get check out theirs live simsys. So that updates the files and then we can say get add live simsys and that will stage it. I like that we trust you approach the licensing. Yeah, I know. High tech for kids. Can do folder merges outside source control. I don't think supply merge does that. I put everything in get anyway. Has microbiota and customized simsys. I don't think so. It just might be a fluke of the code formatter. Let's keep going. 212, we'll get under 200 here. So one thing I'm watching out for when I'm picking these other error messages like this one, I want to make sure the error messages stay the same because we've put extra effort into the error messages so that interesting that we haven't asserted there. This is another one. I'm doing good tech for kids. Just trying to get through this stuff. Let's do the same thing here for the little fslib which makes it gets us through more of the chunks there but I did a lot of that already. The reason I left this simsys library in there is I would like to use it at some point netutils. That's a simple one. It would be kind of nice to if I could automate it like, see this feels like it should be like they look the same. It's just like the code formatter didn't take ours or theirs, we'll take theirs. So if you hit it both then you'll get both which you don't want to do. Is there an Adafruit BMP280 Eagle library? Find the product and you can probably snag it out of there. I don't do eagle so I'm not sure. It's weird that these are showing up as conflicts because it doesn't look like, it must be like trailing white space. You know that's what it could be. It could be trailing white space. Just silly but we'll go through this whole process and then it'll probably just get, if there's trailing white space our formatter we'll just remove it again. It's fine. Somebody started doing this SPDX stuff but never finished. So I'm keeping the ones. Oh yeah, we used fast seek. But Feather S2 Crash Safari, nice. That makes total sense. Yeah, somebody earlier was saying now that we can do, when we'll be able to do dynamic descriptors we'll test all of the OSs for resilience. Oh, so this changed. Let's do the new version of that. GC Helper, interesting. Like that has, it's got like merge markers in it. That looks weird. Maybe we never use this file. Like this file we haven't changed at all. I don't know what the deal is. But there was formatting that's happened in both sides that could cause this. And this we won't. Although I don't know why they made it go away. Again, like this is just a first pass. The next step after this would be like getting MPY cross compiling. So here's a case where we want part of what Circuit By Thunders and part of what Micro By Thunders. Like we do this extra assignment to the parse tree chunk to set it to zero. And the reason that I added this ages ago now is that it means that when, if that pointer ends up on the stack for a while, what will happen is like if you're doing a stack search for all the pointers you want to keep around when you're doing a GC collect, it will actually keep it still. So by deliberately assigning zero to that pointer, we make sure that that pointer goes away and we can collect it. So we'll just want to update this. Interesting, this has a true in it. It looks like MPHandle pending might have changed. So I'll do my best to like be consistent about it by the end of the day. I'll probably have to go back and fix it. I won't get to that until Monday or Tuesday next week. Hi, Erica. Could you preprocess with the formatter and save a bunch of time? I tried to do that. So Circuit By Thunders updated and 113 actually is updated as well. Although there might have been some bugs. It happens. Such a time saver. All right, we're under 200. I'm just gonna keep going. If file exists, like we added that or no, we return the result, white spacey stuff. Oh yeah, MPY crossmake file. GC helper generic. We have this somewhere else. So let me pull up this file in. So here you can see it's light blue, but then this one line is dark blue. So that's the thing that's changed. At what point does Circuit By Thunders and Micro By Thunders get so big that the repo gets broken down into smaller chunks? I don't think you, there's been some discussion about having like the parts that we use as a separate core. But I think the problem is you lose history if you ever have a new get repo. So I'm skeptical we'd wanna do that. Okay, so let me just close these files. I'm in this version, MPY cross, MPY cross.make. I don't know why we moved it, but we did. Okay, so we want the left-hand side. I try to organize it in Circuit By Thunders pretty well. So here is GC collect, GC helper get regs. Now I think this version of Micro By Thunders changing that, what the heck? Which I'm on board with, elect root. Although here we have some other stuff. Oh no, this is the stack too. Okay, we don't want the left-hand side here. So I can unclick it and we'll go away. It's like it changed. Adding board definitions and new spy flash. Yeah, the spy flash stuff changed. Trying to break that out. All right, new MPY cross stuff. It's part of it's also knowing like, oh, we didn't change this file or we did change this file. And the bugs that Jeff found were where I got that. Yeah, this feels like white space stuff again. VCX project. Sandy ignore. There are these weird cases where like it changed a file that it shouldn't have. Like it tried to guess like, what does git status show for this? Like it's applying this from a different altogether. Like neither, like Micro By Thunders doesn't have this board at all. So like git is just being dumb. Like driver's bus queue spy into this like micro controller thing. Like that's not right at all. Just take left and be done with it. Here too. Can I do big array? I don't need any more equals zero. And then GC collect, collect. You could just do Dell. There's a Dell keyword in Python. And that will do the same thing. It will delete the name from the namespace and then collect. Yeah, tech for kids. We already talked about Micro Python's birthday. This shabu is going to be a shaman. Okay, so here. So there's this frozen manifest stuff that Micro Python did, but we don't use it. We redid how we do. We do frozen stuff differently than Micro Python. So I'm just going to keep our stuff. And we don't want machine. Kind of seems like we don't want either one. Can I delete this conflict? I can. Neat. And we don't want BT stack. Variant directory.c. That stuff is, the variant stuff is new. So let's take it. I assume we'll need it. So this is in the Unix port. That's what we use for. That is what we use for all the tests. So it's worth keeping going. This manifest stuff we don't want. Good night, Dave. Thanks for hanging out. I got a spam call earlier. Dude, you're getting a Dell. I got a Dell. So this must be the variant stuff. See how it's deleting all these things. Testful. All right, well, I'll fix it up later. But I suspect we'll want, we do want translations in here too. Rapid says, does circuit Python run any hardware CI to make sure there are no regressions on supportive boards? Yeah, this has come up across the years. And the answer is no. I tried doing one called RosiePie. And then there was a, Summersoft was trying to do it. And then there's a startup called BloggerData that's kind of trying to do that stuff too. But no. There are ways of running all these tests on hardware, but I haven't done it recently. It's definitely a hole in our testing strategy. Oh, my YouTube. Oh, sorry. Is it? Looks like it's just a little too long. Yeah, it was just too long. Sorry about that. No window again, I think. It's like beautiful out. Nice and sunny. All right, 188. Oh, look, they said goodbye and I missed it. I don't know what Paraheep is, but we probably want it. Average.C. Where's RingBuff? Did they remove the RingBuff? Geez, that merge did not work out well. I don't want RingBuff because we, turns out Microbyte then added a new version of RingBuff after we did our own version of RingBuff. So we want this for RingBuff and then we want this for the new stuff. And that'll break a test, but we can fix that later. Good night and remember, hit the like. I love you can do too excellent live streams to catch up. Todd Butt says, I have, I've got four different circuit by the boards hooked up to Raspberry Pi with the USB hub that supports hub power control so I can remotely connect to each board, run stuff, power cycle, the board, et cetera. Yeah, that's where I was started when I was doing the Rosie stuff, but I found that the USB host stack on Linux wasn't reliable enough. It was quite confused. This file went away. We're not even in the Pi folder yet. Okay, I can delete it too. GC helper again. That's good. That's something I've been thinking about doing in circuit by the onto. So I'm happy to have it is like sharing all the GC helper stuff. Unix main, bath separator. So this is different because we do frozen differently. So one thing we do with frozen stuff is we actually, there's like, like Python has a sys.path and we actually have an entry in there for frozen stuff so that you can actually sort, you can change the path before you import stuff to make it actually import stuff instead of the frozen things. There's no gritty which board comes up as dev TTY ACM zero. So there's also in Linux, there's also dev disk and dev serial and you can do those by path and stuff. You can do those reliably. So there's a way around that you just don't use the ACM ones. Like if I do dev serial, you can see there's like by ID. So you can see like my keyboard is there but you can do path as well. And path is determined by like how you have everything hooked up. So you can, you can make it, you can do it. You just can't use the ones that you would typically use. Okay, this is right. I don't get why I have to do some of these. Okay, this we want. See, they changed the capitalization. I think that's right, but like, and maybe the web like gang who's here can tell me if I shouldn't be changing the capitalization back. But I'd really don't want people to have to retranslate just because capitalization changed. That doesn't make sense to me. Like there was also some changes in MicroPython like save a byte by contracting them. Only a truly empty program has no bugs. True. We're down to 183 conflicts. More error text stuff. Mod J and I, huh. Definitely don't use that. Mod Machine. I'm surprised we have this at all. I thought I'd deleted Mod Machine. Certainly don't use it. Machine is the MicroPython hardware API. I thought I might get 200. Yeah. It goes pretty quick. It's just like mind numbing. I'm starting to get hungry too. Should have had a bigger lunch. Yeah, handle pending has a Boolean variable now which is different going. Some of the stuff we don't use. Like Mod Microsocket. Like we don't use that. Like I tried to delete most of the the networking stuff because we don't use it. Approved by the Wedlight Gang. What is it? Don't worry about it. So you think I should change the capitalization from, it's the first letter is no longer capitalized in some of these. All right, we're almost to the pie directory which should be good. Okay. That's where the most of the meat of it is. I don't remember. I guess when in doubt I'll do the newer run. If a piece of software has a bug but nobody runs it, does it really have a bug? I don't know. Does the tree make noise when it falls in the forest? There's definitely some like with these changes that Jeff found like we found cases where we don't have tests. It's good to have tests. I feel like I need merging music since I'm not talking that much. Get Mac address. I don't care about that. Here's MP thread, begin atomic section. Like this merge is pretty easy because I know we didn't change any of it. Like this is for threading on the UNIX port. Anecdata says I have music playing along with the stream. There you go. I hear a bird sound that I swear sounds like it's on a loop. No, I think it's just, sorry, I was checking in with Lady Aida. I really want to get to the pie directory that's going to be more interesting stuff. Sure, it's fine. Huh, this went away? Frozen queue strings? That moment when you hear nothing and you realize you brushed the space bar and paused the stream. I used to listen to this podcast where they would like deliberately stop talking for a little while. I'm surprised we added this. I don't remember doing that. We're too away from getting to the pie folder. Looking at this guy, getDiff just made my anxiety go through the roof. Sorry about that. I'll take care of it. Don't worry about it. You don't need to worry about it. Just, I guess we don't need that anymore. Imagine being cool enough to message Lady Aida. They're quite accessible. Just go and show and tell and show your project. That's how I got this job. Sorry, John. We're going to do some more diffing. Emacs word move. What that is? He's the guy. Oh, fadfsu's label. I messed that one up last time. We do want that. Mark says, warning, going on show and tell may eventually lead you to contributing to Circuit Python. That's not a bad thing. If you get quested by Lady Aida, it seems like a Zelda type quest of adventure attacking chickens and a heroic commit that greatly improves Circuit Python. You don't have to finish your project to put it on show and tell. I show intermediate stuff off all the time. All right, we're in the pie folder. Ooh, this looks like a good one. So on the left, we have a regular if else, but on the right, we've got the macro version and we've got MPR text. So we'll definitely want that. And more MPR text. Oh, another question for the the weblit gang is whether you like contractions or not, like something I've already fixed, but there's like, if you say cannot, like the word cannot would be can't and then do not is don't in like newer micro Python, which is weird, but yeah. So I think the pie folder is going to be a ton of this, which is just translate changing to error text, which, you know, is kind of like not a bad thing to do on a Friday afternoon when your brain's done. Like I can skip the, I will skip all the stuff that's like trickier. Well, like when in doubt, I'm changing, I'm taking the newer version. Assembly stuff, bytecode stuff. Oh, you know what? We have this fancy one. We're going to use that. It's like slightly more efficient. I have to do that some more. I could do these merges and then just mass change them, but there's a few things that are going to be marked translate that we do want to keep because it's not error text. Yeah, contractions can conflict with translation. It's just in the error messages. I mean, generally like, yeah, we could also fix the contractions in the English translation and leave the source version the same. It's another way to do it, code stuff. Only 20 conflicts. Yeah, this file is kind of a lot because we have more support in struct. Like we support padding bytes. We also want this if, we turn off the non-standard stuff, but there's this new float stuff that we do want. Is signed, we want this one. There's a break here now. That's weird. I don't know why that break is there. Oh, so I can't edit that one. I have to edit this version as we want, but we also want this last if we want the non-standard byte code. We want overflow checking. Goodbye, tech for kids. Have a good weekend, you too. Thanks for hanging out. This looks better, except for the non-standard thing again. See, MicroPython? Oh, why these are conflicting still. Built in. Clab stuff, that looks right. Oh, except we're missing consts. I think we do want this const there. Sorry I'm not talking, for those of you who aren't watching. This is why I was like, ah, maybe we need plus any modules. What's the new MicroPython version have? Nothing interesting, built-in import. We want our import stuff here. SysPath is empty, that will never be the case. Adding a space we can do, this we already do. It's just here instead. Import error. See, here's an example of a cannot becoming a can't. I want the same still. Raise message. Everything I learned in school is British English and everything else is American. Sorry, I tried to lean away from the mic. We need Viking. That'd be cool. It costs a lot of time to build those things though. Here's an example of a copyright that had the year updated. So we'll do that too. Ooh, 46 conflicts in this file. So this file, this is pycompile.c. This is what takes Python text code and it produces, it calls the emitters to produce like bytecode or other things. So that's what this does. Piles syntax error. Right, so this is where we have compressed strings. Yeah, so all these are gonna be, we need some royalty free music. Looks like these are just error messages. My window is slightly too small to actually see that. You know, this is different though. This was changed. This is an error message. This is different for art. Oh, that's right, this has async stuff as well. Oh, a lo-fi player. 21,000 commits on CircuitPython GitHub. Y'all are chill for hanging out, thanks. Hanging out as I do these merges. Do it as empty error text. I think the sneeze was cause the window is open. And it's a beautiful day, which means all the pollen is out 27 ago. Most of the files are easy, but these ones that a lot of stuff are not. Oh, here we go. So remember when we were going over the things? This is a PN assign. I suspect that that means it's the in the walrus operator is what I think this is. That's my guess. And this is just a variable rename, which makes total sense. There's an error. Super can't find self. I'm just assuming these aren't changing the text of the error messages. They're just the translates. CircuitPython has a walrus. What does it do? Yeah, it's the, it's called the walrus operator. And, hey Eric Moyer, thanks for jumping in. Yeah, you can relate. You're in the same city as I am. Assignment expression. Yeah, I've never used it. So I don't know. I don't fully understand what it does. So there's more async stuff from us. Like we do, I think we do better async validation. I think that's one thing that warrior wire added. Nine left. I always know it's Friday when you're streaming. UnexpectedMaker says you can assign and test inline. CP7.0, weblate suddenly says we're at 50%. Is it that bad? I tried not to make it that bad. Boom, boom. I've also never used it. Yeah, it's pretty new stuff. This looks like a good cast a native base. So we're in dine runtime. I haven't done any of this stuff. This is the stuff that's needed for native MPY files, I think. I've not used it. So now we're in emit by code. This is just removing a printf, which is fine. Here's another printf and another printf. And one more, just totally fine to remove. PersistentCodeSave. That looks like a white space weirdness thing. Interesting, so what is this? It says, check for a generator. And if so, change the type of the object. Oh, that's this piece of code. Okay, I don't want that. Cause we do it down here. We check for a generator and wrap it here. And then this setSysTraceStuff is further down as well. So yeah, generators are scope objects, I think. And we have this extra flag for a generator versus async. And the async one, you use them slightly differently depending on which flag they use. So that's what that is about. And I just redid this. So we're gonna take mine inline thumb. These are just error message changes. Two, three. I'm happy to get these switched over to their error text generator. I was happy to find that getText. You can tell it multiple keywords to look for. I have one. I won and I missed it. So the right-hand side in the scroll bar, it actually marks them as, oh, you know what? I don't think we want that. We want our version, not their version. Cause the type of the thing that's produced by the NPR text is still different. I had a feeling this was gonna be the case. The nice thing, this kind of goes to show why it was nice to do one version and then another is that like if I was doing all of this at once, it would be less clear. Like here's these big changes that happen. Like there would be more big changes that change stuff. So here it's nice because there's just like four 113, the only really big change is this like the error one. There's not like five that I'm trying to juggle all at the same time. 22 conflicts. More just error messages. This is where I was thinking, I really should put a macro pad together for like the five things I'm doing on the keyboard. Like for a file like this, like in emit native, like I know that like we probably haven't changed any of it. Like it's pretty unlikely. So some of the macros do change, but generally it's like I'll just take, like I default to taking what MicroPython's got. Here's an easy one. Wonderful get under 100. So we're in GC and I have changed some stuff here. So I'm gonna be this moved. That's one I've had to deal with before. This break, permanent pointers is a micro, is a circuit Python thing. Oh, interesting. They collapsed this thing. ATB is free. We just made it a loop. There might be some dead code left from that. That's fine. And a cast alignment. We have a few warnings that they don't. Under 100, you could do it. I have seven minutes left and 146 left to go. I don't know if I will. MPY, yeah, it's a native. I wanna add a regular BitBang NeoPixel so it doesn't use a PIO. Yeah, streamed, stream deck. It's kind of like I have all the tools I need to do it. I just would need to find the time. All right, here's a copyright. I don't have a time. I could get under 100, remaining till five. So here's something we changed. This is the f-string literal stuff because we have f-string support. Micropython doesn't. Here's the walrus stuff. Del comma, del colon, semi colon, tilde. I haven't done a lot in this part of the code. This is where Micropython deserves a lot of credit for how many tests they have because this sort of stuff is just so hard to do and having tests is just so nice. That's something really in CircuitPython we should be much better about. All right, so here's the make queue string stuff. So this is gonna be different because this is where we, in CircuitPython, do all our translation stuff as well. So it could be kind of a pain, but I don't think the other versions changed a lot of this but I don't think that, I don't think CircuitPython did. I think, or this version of Micropython didn't change a lot of the stuff. I don't think, here's their compressed stuff so that's where we gotta watch out. Process file. Yeah, see, I know they looked at our stuff. They just decided to do it differently and that's okay. Just means that it actually makes it easier to merge which is nice. They added a mode. What is mode? Oh, we don't want that. We're not gonna change that. Seeing YouTube pause on my end. YouTube looks okay here. Jose David says, yep, tying the most precious of resources I know. Are you finding that you recognize your old code changes? Does it distract you to reminisce? No, it doesn't distract me to reminisce. Some of the code changes I don't recognize because I didn't make them. YouTube's okay, right? It looks okay from here. We got 50 people hanging out. Make a version. Right, one thing CircuitPython's build that Micropython doesn't do is we take the full version number out of the Git tag whereas Micropython actually has it in the repo. Go to my end. Thanks, Eric. YouTube is fine. Yep, I've got Gigabit as well. Malik, maybe. Oh, we're in Malik, okay. It is good to know where we're at. I don't think anything changed in Micropython about it. Something's fishy because it's highlighting these closing curly brackets. Oh, man, 138. I've got a lot to go. I'm gonna try to get under 100. Size of field. Just gonna take ours, cruise in. We don't want this manifest stuff. We don't want their text compression stuff either. Custard gen flags. We have that down here. I'm actually gonna not take this. I'm just actually ordered depths. You might want that. I mean, after I'm done with this, it's not gonna compile. It's just not the way that it works. Think we want ours again and all this queue string stuff we want. Two and a half gigabits per second. 1.2 gigabit. I know, that's funny that like, yeah, I have gigabit symmetric. It ends up being like just under a gigabit though it's not quite, not quite above it. I've been listening to a lot of broadband policy stuff. I've not found anything, but I can tell it deviates from CPython with format designators. It shouldn't. F-strings should match CPython and if they don't, please find it and fix it. So it doesn't. We use array, but we don't use the U. 134, hold on a minute. Maybe I won't get under 100. The tests tend to go faster. Raise type, that's a good change. Having raised type. I thought even in the, in the, oh, there's a none that we missed. In the CPython documentation, I thought they just linked to the regular format specifiers. I mean, I work from home. So it's easy. Like I write off half the cost of my gigabit. I think I've actually measured it at like 800. 940 megabit is the theoretical max for gigabit internet. New float stuff. Let me just rename something. Math domain error. We got more warnings on. There's another raise value errors. Those are good. Those like tiny things can add up to some space savings, which are good. So we're here in mod struct and we don't actually use this code. I don't think we've copied it elsewhere, but we actually, yeah, it's bad. We have two copies of the struct code and we updated the tests, but the tests don't use the code that is used in circuit Python. Oh, good. So the S-strings do use the same. Max fiber planning from orange here is 500 megabits, but it's uncapped. But we get up to a gigabit that the ethernet allows. Neat. I think the next big thing is they talk about like 10 gig service. I have a ubiquity regular dream machine instead of the pro one. All right, well, here's two spots where we wanted to say circuit Python, not micropython. And Hugo, I think, is working on rebranding it, making it configurable. We want these new. So these are new error strings that I think I do want to use the error text on, even though, like, because we're in the pi folder, my brain is definitely, I think I could do 100 though. Yeah, so this is the version stuff we don't want because we generate a track relocation. Sure, non-persistent. We do want, that's a thing for us. Math, sure. Crypto live. Oh, no, that's fine. These are the things I deleted because we don't use them. That's one thing I've come away with this exercise is like, there are some things that I don't think belong in the pi folder. I like things that I should talk with the micropython folks about. We pay 80, I pay 85 a month for gigabit symmetric. This is, I'm like a firm believer in like everybody should have broadband access. Oh, and I'm over time. How am I doing? Let me finish this one. Looks right. 122, I'm not going that fast, but I have till five. ADSL still exists, yes it does. You too, have a good weekend, Minnesota Mentat. New float stuff, take the new float stuff. That's probably like something Jeff did. I'm like, oh, I don't need that, always right. Oh, interesting, here's an error message that's not supported, we must never use that. Cause when I like added all the translates, I added, oh, that's not the one I want, I had to fix this. Raise message string cause like native files can have it. Hoping to get a good deal on 400 symmetric. They have a starter deal right now for gigabit symmetric here that's 65 a month, I think. There's like this community broadband bits podcast that I've been listening to where they talk about it. If you're in like Minneapolis, St. Paul, I think that's where one of the folks are there. Interesting format off. I think we might have run the formatting with it. 117, when in doubt, use the new version. ObjC yet type. Whoa, that's a much bigger thing. Print helper, print decompressed frame. That's what we want. ObjEqual, ObjEqualNotEqual is the new name of it. Shortcut for the very, yeah, I think I could just take all the new version. We'll see. The compiler will tell us if P float interesting. Like we have type specific for our arcs here. Speeds up to 18 megabits per second. Sorry to hear that. 50, 50 is $80. So if you're in the US that the FCC has a thing where they're trying to get people to measure their speed because like they use these broadband maps that tell coverage, but they're private. You can't have access to them. So I think they are trying to build a new database of like what speeds people can actually get. So you should check that out. If you find it, post a link, index error. This is good streaming. Sorry in advance. We are losing people. It's funny, like two hour stream is long but we do lose people after the two hour mark, which is fine, I understand it's a long time. You love it, it's just chill, good. This is like more chill than it usually is. It's usually more me talking actually. But I'm really typing urge at the same time. 114, oh, this is the thick of it though. That's for sure. Obj.h is a big file. Get a whole map stuff we do want. Come on, you could do it. 415 version, I guess we don't need that. I don't think we added that type error, connection error, broken pipe error, new bytes of zeros. Halfway from where you started already, that's a good point, Gareth. Sorry, discord I'm behind on, not gonna, ifdevvastart, new except for the message vlist. What is ifdevvastart? Is that like, that might be like a compiler thing? It'll be interesting like once we're at 115 to actually go back and like see all the changes. Cast a native base. Get global set, globals, take ours. Slice, no grow. Oh, I did, so back in a while ago, they like changed the capitalization of these things and I just deleted those because I don't want them. I have less worry about being backwards compatible. The good news is that 113 was the last big-ish update, so 114 onwards should be much easier apart from the CMake changes and the S2 stuff. We don't use that anyway, so it doesn't matter. Like all the ports stuff, the only ports we care about are the Unix port basically. But yeah, I think you're right, unexpected maker, like the next ones are gonna be, not as bad. Memory view cast, implement in, size T makes sense. We had different locals, 112, oh, it takes longer than I think. I just get in the zone. I'm gonna use our old message. I know that the translation folks said it was okay, but it's only the core stuff we're reporting yet. We really just like are not sold on the CMake stuff. We've talked about this on the stream before. Like it doesn't solve the problems we have. The object is dict type. I feel like that might be somewhere else. I'm gonna delete that on Monday or Tuesday, we'll see where that gets us. Yeah, I just got right in the thick of it. All these files are is dict or are dict. Okay, yeah, that makes sense. Like clearly that's a newer function or macro that is going to be better. Okay, so here's a case where item, interesting. Like they completely changed the error text here. Let's pop item from empty. Or maybe we did, we could have changed it. And then this is gonna have to be empty raise message. Yark. Thanks Tim. Everybody's cheering me on. I have hummus waiting for me as a snack. And I'm definitely done for the week. Nine more, I think we want the old version. This is the keyword args thing. I changed flex result. Eight more, include translate, not this other stuff. Oh, here's their decompressed string, maybe. Oh, we don't want that, we're not gonna use it. That's an object set, interesting. Here's our version of it. I'm just gonna keep ours. And I'm gonna keep ours here too. Accept new message, again I changed it. Generally I think I'm just gonna use our version. Okay, hydrate some chickpeas. I'm lazy and I just buy the hummus from the store. We have made it though, like it has. I think I did it once, it overheated the blender. It looks like we want... We will find out when I go to try to get it compiling. 106, do I have to do 99 or do I end at 100? I think 99. Oh, maybe we don't need that else. Oh, generators had a lot of stuff changed in it. Translate, this is probably where all of the gen wrap call. Need a gen wrap call. MP type flag binds self. I'm gonna skip this one. I don't have the brain power to do it. Object doesn't look bad. MP raise or float error of the arc. Oh, we changed the messages too here. I take this back, I don't want this version. Let's start here. I'm gonna have to do a mix of both. Oh, it's nested. Yeah, this float stuff changed. What am I doing? Why am I getting a right click when I should be getting a... There we go. And the wrong thing, six to go. Don't we have an overflow? We could probably save some space if we use the overflow function. I think that's how it works. 104, 103, hopefully they changed the text too. I don't want to change the text. I guess I would change it if upstream did, five by zero. It's nice that I can see that the text didn't change at all. Number one, two more. That's right, I changed this. This was changed so that we could subclass list, I think. That's what this is doing. 10 to go. I miss any of these translates. It'll still work, which is a good reason not to miss them. Okay, one more, last one. Oh, great, yeah, mostly one. This is where all the native modules are defined. It's all just formatting conflict. Alrighty, that's it, 99 left. So will the 99 be left until next stream or will you chip away at it during next week? I'll do it next week before it. I hopefully the PR out will be out for 113 by the end of next week. Yeah, my eyes hurt a little bit from that too. What did I miss in the chat? I've earned my hummus and going outside. Lots of good internet discussion. I'm not gonna compile it now. I gotta take a break. Yeah, I was like 250 to start or something. And most of those I did straight away. Yeah, no lady to saving Scott today. Yeah, I checked in with her. She said she had a headache, so she wasn't up for it. Oh, and I missed Mr. Certainly. Yeah, she hasn't had her pink hair in a long time. Johnny's hardcore and stayed up late. Okay, let me switch back. Thank you to everybody for hanging out. This has been another deep dive. We dove right down to the bottom of the weeds of Circuit Python and MicroPython. Hopefully that was kind of interesting. If you have tips on three way mergers and stuff, let me know, but as far as I know, it's just kind of something you put your heads down to and you just do it. This week, we'll have a newer Python core from MicroPython. Thank you again and happy birthday to the MicroPython folks. If you wanna support MicroPython, you can GitHub sponsor them, which I do every week, or not every week. Every month I give a little bit of money. It's just a little, but it's more than nothing. So I would encourage everybody to do that as well. They do obviously really good work. Let's see, if you wanna join us chatting all week, you can go to Adafruit's Discord server by going to ADAFRU.IT-Discord. Thanks again to David, DCD for time codes. And if you wanna support me and support, please support Adafruit as well by going to Adafruit.com. Purchase some hardware there, it runs Circuit Python. It should make it really easy to do whatever you're trying to do. And if not, hop in the Discord and folks will help you out with that. Anyway, if you can get vaccinated, please do. I had my first dose this week and we'll get my second dose in a few weeks, so thank you for that. And besides that, have a great weekend everyone. We'll see you, we have a Circuit Python weekly meeting on Monday, JP has a show on Tuesday and Thursday, and then we have Ask an Engineer and Show and Tell on Wednesday. Noe and Pedro are on Wednesday morning, so lots of cool Adafruit content for you to check out. And with that, I will pet the cat and get up and go have a snack. I'll see you all next week. Spook, you want some pets? Have a good one everyone.