Hello, everyone. This is the CircuitPython Weekly Meeting for August 21, 2023. This is the time of the week where we get together to talk about all things CircuitPython. My name is Tim. I am sponsored by Adafruit to work on CircuitPython. CircuitPython is a version of Python that's designed to run on tiny computers called microcontrollers. The CircuitPython development is primarily funded by Adafruit, so if you want to support Adafruit and CircuitPython, consider purchasing hardware from Adafruit.com. This meeting is hosted on the Adafruit Discord server. You can join any time by going to adafruit.it slash discord. We hold the meeting in the CircuitPython dev text channel as well as the CircuitPython voice channel. This meeting typically occurs on Mondays at 2 p.m. Eastern, 11 a.m. Pacific time, except when that coincides with a U.S. holiday. In the note stock near the top, there is a link to a calendar which you can view online or add that to your favorite calendar app. That will get it synced up with your personal calendar if you want the meetings to be listed in there. We also do send out notifications about the upcoming meetings via Discord. If you'd like to receive those notifications, you can ask to be added to the CircuitPythonistas role over on Discord. There is a note stock that accompanies the meeting. The final notes document indicates time stamps to go along with the meeting, so you can use that document to skip around and view the parts of the video that interest you most. The meeting tends to run about 30 to 60 minutes. After each meeting, we'll post a link for the next meeting's notes document over in that CircuitPython dev channel on the Adafruit Discord. You can always check the pinned messages in that channel to find the latest notes doc, and you can add your hug reports and status updates or in the weeds topics throughout the week if you would like as well. Once that gets pinned, usually shortly following the meeting, then you are free to start filling in stuff for the next week. The meeting is going to be held in five parts. The first part will be community news. That's a look at the CircuitPython and Python on hardware newsletter, which comes out on Mondays now, so we'll see a couple of the items from that. The second part is the state of CircuitPython, the libraries and Blinka. That one is a quantitative overview of the entire project. It's a chance to look at the project by the numbers separate from all of our status updates. And the next part, the third part of the meeting is hug reports. That is an opportunity to highlight the good things that folks are doing. Take a moment to recognize the awesome folks in our community and beyond. The fourth part is for status updates. That is the second of our round robins, along with hug reports. During status updates, you'll have an opportunity to report on what you've been up to. You can take a couple of minutes, tell us about what you have been doing since the last meeting last week, as well as what you anticipate you'll be doing over the course of the next week until the next meeting. The fifth and final part is called in the weeds. In the weeds is an opportunity for more long form discussions. Those can be things that come out of status updates or they can be identified ahead of time as too long for status updates. So that is how the meeting is going to go. So next up, we will get into community news. I will take the first timestamp here. So our first item in the newsletter, which should have, I believe, been sent out earlier today. So that first item was Circuit Python 8.2.3 was released. The Circuit Python 8.2.3 version is the latest bug fix revision of Circuit Python. And it's the new stable release. There is a link here in the notes that will take you over to the Adafruit blog, as well as another link for the release notes. And there was a short list of notable changes since the prior stable release, which was 8.2.2. And the main item that's there is improvements in the RGB matrix timing for the SAMD 51 or 5X it says here. So better support for RGB matrix, it sounds like, is the main update there in 8.2.3. Next up, we have getting Linux running on an ESP32S3. Lady Aida at Adafruit has been hacking on a community project to get a version of Linux running on an ESP32S3 microcontroller. She's had success using Docker to run Linux builds when other methods have had issues. Now Wi-Fi and a number of other features work under Linux. There is a link here to check that out on YouTube if you would like to see more about that project. Next up is big European companies have formed a risk five venture. The risk five open instruction set architecture got a boost today after it emerged that five chip giants are coming together jointly invest in a companies to develop reference architectures based on the standard. The new entity will be formed in Germany with investment from Infineon Technologies, Qualcomm, NXP Semiconductors, Bosch and Nordic Semiconductor with the aim of speeding up the commercialization of future products based on open source risk five architecture. There is a link here to an article in the register if you would like to learn more about that. And a couple more that we have our projects for the week. In fact, the project of the week was recreating the Tars robot from Interstellar. Charlie Diaz created, excuse me, describes making a miniature version of the robot Tars from the movie Interstellar. That one's linked over on Haxter IO. And the final newsletter item, which caught my eye this week was the Pico W Bluetooth controller. Kevin McAlar has made their first PCB, which is a Bluetooth controller that uses a Raspberry Pi Pico W and it is programmed in MicroPython. I thought this was really neat for a first PCB project for sure to have the Pico mounted there in the handheld controller. Super cool design. So all of these items were from the CircuitPython Weekly newsletter. Let me tell you just a moment about that. The CircuitPython Weekly newsletter is a community run newsletter that's emailed every Monday. The complete archives of that newsletter are available on AdafruitDaily.com. It highlights the latest Python on hardware related news from around the web, including CircuitPython, Python and MicroPython developments. You can contribute your own news or projects if you would like, and it is much appreciated. To do so, you can either edit next week's draft on GitHub, which is linked here in the Notestock, or so you can submit a pull request, editing that draft file. Another thing that you can do is tag a tweet with hashtag CircuitPython on Twitter or email over to cpnews at Adafruit.com. You submit projects and ideas for the newsletter. Next up, we will get into the state of CircuitPython libraries and Blinka. Let's see here. Let me catch up on this one. Yes. Okay, so the state of CircuitPython libraries and Blinka is a quantitative overview of the entire project gives us a chance to look at the health of the project separate from our status updates. We'll talk about the project overall and then separately discuss the core, the libraries and Blinka. So first up is the overall section, which I'll tell you about. Overall this week we had 13 pull requests merged. Those were from 10 authors. I did not highlight ahead of time. So let me go through and try to do these real quick here. A couple of the names that at least I don't recognize. So these might be newer or less frequent contributors who are certainly much appreciated as are all of the contributors. But those names for this week again that were not recognized by me are Andy being Tyler Crumpton as well as Santis. So thank you to those folks, as well as all of our other more frequent contributors. Across all of those pull requests, there were five reviewers. So thanks to those folks. It's like we have mostly usual suspects there. So very much appreciated. Jose, Jeff, Mark, Scott and Dan as the reviewers there, there were let's see eight closed issues by six people and 14 issues that were opened up by 12 people. That is it for overall. So next up I will pass it over to Jeff to tell us about the core. Hello. Yeah, Scott is out enjoying a little vacation somewhere. Hope he and his family are having fun. But anyway, as for the core, it was a slower week than some lately, we had 10 pull requests merged by seven authors, including a couple of those that Tim mentioned a moment ago, Santis, or Santis, and Andy Bing, as well as four reviewers. We currently have 26 open pull requests, about half of which are in draft mode, and which range from one to 412 days old. Issues wise, we saw an increase in issues with only three issues closed and nine issues opened. That leaves us with 691 open issues. The work that is prioritized by Adafruit, we display that through the milestones. So for our stable version, 8.2.x, we have two issues we'd like to resolve. And for our main branch with new features and then compatible changes 9.0.0, we presently have 50 open issues that we're working on. We've also got a large number of issues tagged as long term. And what that means is that Adafruit isn't prioritizing work on those right now, but we almost certainly welcome community involvement to work on those. So if you have familiar with C programming, and would like to see one of those long term issues resolved, we really invite you to step up and work with us. And you can find us on the Adafruit Discord in the Circuit Python Dev text channel to help you out. Just please drop by, ask us questions, get yourself oriented and dive in because there's a lot of work that a new contributor could do. We've also got four issues not assigned to milestone, which means that any different person needs to go in and triage them according to whether we want to work on those in the near future. Then I have a couple of notes about what is going on in the core aside from the numbers. We will soon merge a very substantial PR that brings all of the features and changes from MicroPython 1.19 into main. And one consequence of that is going to be that MPY files are not going to be compatible with the old 8.x version. So the way to install packages then becomes circup install dash dash py, which has it installed the source version instead of the MPY compiled version. We are not supporting this this version right now because we will merge MicroPython 1.20 soon. And that has a second change to the format of MPY files. After that is merged, we will probably at that time add the main branch building to the bundle, do an alpha release and that kind of thing. But for people who are testing in the meantime, there are going to be a couple of more speed bumps. The final speed bump that we're aware of is you'll need an updated version of async.io, which is currently in a pull request in that repository. And then finally, another consequence of this is that for the moment, we are going to add all new 80 fruit boards to version 8.x. And third parties who are adding boards are also encouraged to add the boards to 8.x. And this is because of all the stuff I was just talking about. And of course, ask us on Discord and help with CircuitPython or CircuitPython dev if you're using main and run into problems. And I can't promise you exactly when this pull request is going to be merged, but we really hope it's this week. And thanks for letting me go on for a moment. That is what's going on in the core. All right, thank you, Jeff. Appreciate it. Next up is the libraries. I will send it over to Katni to tell us about the libraries for the week. Thanks, Tim. So this week, in terms of all of the 80 fruit CircuitPython libraries and all of our CircuitPython community libraries, we had three pull requests merged from three authors and three reviewers. Two of those were to the community bundle and one was to a new library, which is great, leaving us with 49 open pull requests. We had five closed issues by three people and five open by four people, leaving us as even as we were last week with 632 open issues. 19 of those are still labeled good first issue. If you're interested in contributing to CircuitPython on the Python side of things, check out circuitpython.org slash contributing. You'll find all of this information and more, including the list of open pull requests and the list of open issues. If you're interested in reviewing, check out the open pull requests. If you're interested in contributing documentation or code, check out the open issues. If you are new to everything, there is a guide on contributing to CircuitPython using Git and GitHub that walks through both contributing code and also the whole review process. And we are also always available on Discord to help you out. We want you to be able to contribute in a way that works for you. For library Pi PI week, we download stats. This week was 130,530 Pi PI downloads over 312 libraries. And as always, the top 10 are listed in the notes. In terms of library updates in the last seven days, we had two new libraries. One is Circuit Python Micro OSC from Todd Bot. And the other is Circuit Python GC9D01 by Tyler Crumpton. And we had one updated library PIO ASM. And that's where we are with the libraries. I'm ready. Thank you, Katnie. Next up is the section on Blinka. I will send it over to Makar Melissa if you're able to tell us about Blinka this week. I am. Thank you. So Blinka is our Circuit Python compatibility layer for MicroPython Raspberry Pi and other single board computers. In this week, we had zero pull requests merged. There are currently five open pull requests amongst all the repositories. There's zero closed issues and zero opened, leaving a net of 102 open issues. There were 10,134 Pi PI downloads in the last week. 10,238 Pi wheels downloads in the last month. And we are 119 boards. And that is it. All right. Thank you, Melissa. That is it for the stats section. Next up is Hug Reports. Let me get a timestamp going here. There we are. Hug Reports. As a reminder to folks, Hug Reports is a chance to highlight folks in the Circuit Python community and beyond for doing awesome things. I'll start and then we'll go down the list alphabetically to give everyone a chance to participate. If you are text only or missing the meeting, then I'll read your notes when we get to them in the list. Otherwise, I will call your name and you can speak in the voice channel. So I will get us going here. Let me get a timestamp. So this week, Hug Reports for me, as I imagine we'll hear quite a bit. Everybody who was involved in Circuit Python Day, everybody who streamed, there were lots of great streams going on. I enjoyed watching streams about Synth.io and the 3D Hangouts in the morning as well as all the panels and Asking Engineer and Show and Tell and everything. There was so much great stuff going on on Circuit Python Day. So thank you to anybody who's streamed as well as anybody who watched along. There were lots of great folks hanging out in the chat. It was a really fun day to just hang out and enjoy Circuit Python in the community. So thank you to everybody for that. My other one for this week, Hug Report is too clever over on Discord. They made a version of Chip's Challenge, which was a game that I was also working on. They made a version for the Raspberry Pi that runs bare metal on the graphics chip, which is really cool. And they were sharing all sorts of information and saved me some time on a couple of things where they pointed out how stuff needed to be in the game that I was working on. So much appreciated to them and all sorts of really cool stuff, if you want to check out the Discord history from them. Next up, I will send it over to Dan. Sorry, okay. I'm meeting my Hug Report. Is that right? Yes. Okay, I was doing something else entirely. Thanks to Jeff, who is working on the merge of Margaret Python v1.19.1 with me. He spent a lot of time getting the test to run and fixing another bunch of miscellaneous problems after I got the initial after I submitted the PR a week or so ago. So we're getting very close. Thanks to Katnien Jeff for the joint video chat that we had on Circuit Python Day. Talk more about that later. Thanks to Katnien for doing all kinds of organizational things for Circuit Python Day. And thanks to everyone who presented or participated in Circuit Python Day last Friday. It worked out great. Okay. Right. Thanks, Dan. Next up is to Shippu. So thank you to Dan for helping me with the bugs over the weekend. And also to Clever, who also helped with that. And that's it. Alright, thanks to Shippu. Next up is DJ Devon 3. Thank you. I have a hug to Dan H for helping me with a Git problem. Using multiple working branches within the same library. It's tedious, but I have finally seen the light on why it's best practice after I watch two separate submissions get merged into one PR. A hug to Romkey for confirming an Adifruit request bug that I was testing. A hug to Mark Gambler for confirming a GitHub report bug with some older unexpected maker board shipping with an overriding .star.pi file, which I'll go into later. A hug to Unexpected Maker for being an active developer and responding to an issue before I even had a chance to bring it up in today's meeting. The issue came up last night and he was right on it. So a big hug to Unexpected Maker. You're awesome. And a hug to everyone who participated in streaming on Circuit Python Day 2023. There are far too many people to give hugs to individually. It was an amazing day full of projects and formative topics and everyone just being awesome. Thank you. Alright, yes. Thank you, DJ Devon. Next up is David Glauda, who is text only. So I'll read David has a hug report to everyone that participated in or organized Circuit Python Day 2023. So thanks to David for that. And next up, I will send it over to Jeff. Hello again. So I have a hug report to the whole community and especially the enthusiastic participants in the Chat during Friday's streams. Y'all are what makes us worth doing. But in particular to Paul Cutler, Todd Bot, Catney, JP and Dan H for being on streams with me. And to Paul in particular, because being a panel moderator is at least as hard as being a panel member. I did a little more than show up while he prepared the whole outline of topics that we discussed. Also a big thanks to Todd for a box of cool objects that are also on his Tindy store. You should check that out on Tindy. There's a whole Todd Bot store. And Todd, I owe you at least one cool project based on these boards now. And Liz, it was so nice to see you on the 3D Hangout Stream. I don't know whether it was your debut or if you've appeared before other than maybe a background figure. Your contributions and skills in 3D printing have gone under appreciated by me before now. And thank you to everyone else who appeared on all of the other streams. There were so many I have not watched everything yet. But I noticed especially Tim that there was a lot of continuing interest in your stream after it was finished. And Dan, thank you for doing so much of the work in the 1.19 merge. And for helping and guiding me while we work together to get the PR action checks all green. And I'm so excited that we've gotten to that. Thank you. That's what I've got. All right, thanks, Jeff. Next up is Katnie. All right, echoing a lot of other folks. First up, hug report to Paul Cutler for hosting the SynthIO panel on Circuit Python Day. This is the second year in a row that Paul's hosted a panel. I totally understand the amount of stress that goes into doing that. And he has not only done so it's been amazingly successful. And I really appreciate you doing that to Todd, John and Jeff for joining me on the SynthIO panel. It was a lot of fun. I definitely went into it with a lot less experience with SynthIO than I planned but still felt very welcome and very involved. To Jeff and Dan for joining me on another successful Circuit Python Day chat. I always give us a lot of time and every year we all sit around and wonder how we're going to fill it and then inevitably we always do. To a group hug to all the folks who participated in Circuit Python Day by doing streams. Thank you for making organization simpler this year by stepping up to join in and making for the longest Circuit Python Day of content we've ever done. A lot more work went into it last year than this year because I was able to reach out to all the same folks who joined us last year including a couple new folks. And it worked out really well. And I really appreciate it. To Todd for the excellent examples to go with the amazing little cutie pie synth board from my synth care package. And another group hugged everyone who watched Circuit Python Day without you. What's the point. That was the other great thing about the Circuit Python Day chat as Jeff mentioned in the chat just now. We had an excellent set of questions from folks both on Discord and YouTube and it allowed us to expand on the topics we were talking about and also just answer questions that were completely unrelated to what we were talking about but related to Circuit Python. And it made everything a lot of fun and the participation is really what drives feeling good about doing it. So thank you so much to everyone who joined in who was able to watch and who's watching after the fact. We really appreciate you. That's what I got. All right. Thank you, Kenny. Next up is maker Melissa. I want to give a hug to everybody who participated in Circuit Python Day to Jeff for reviewing my alpha plan PR and group hugged everyone else. All right. Thanks maker Melissa. Next up is Paul Kuller. Thanks for me, guy. I've got a hug for Jephler, Catney, Todd bot and JP for being on the Cynthia panel and a group hug for everyone who participated in Circuit Python Day. Thanks. Excellent. Thank you, Paul. Next up is Todd bot who's text only so I'll read Todd bot has a group hug for everybody on Circuit Python Day, an extra hug to all the Cynthia panel members and an extra extra hug to everyone who organized things in particular Paul Kuller and Catney. So thank you to Todd for hug reports as well as everybody else. Let us get a time stamp for status updates and I will tell you about that. Status updates is our time to tell folks about what we are up to individually. I will start and then we'll go through the list alphabetically. When I call on you, you can take a couple of minutes to talk about what you've been doing since the last meeting and what you'll be doing until the next meeting. This is also an opportunity to provide folks with tips and tricks relevant to what people are working on. If a discussion does become too long for status updates, we can always move it down to end the weeds to handle a little bit later. So I will kick us off here once I get a time stamp. There it is. So my status up this date this week. I did not do too much in library world in the past week or so I haven't touched libraries very much. I have been very much in Oshawa land still working on submitting products that hadn't been submitted to them yet. I have built up a series of scripts that pull and cash data from the Adafruit product API and then process it down into only the fields that are unique for each product because there are quite a few fields that are repeated. So just get it down to only the ones that change. Then the couple of manual steps that remain are filling in the description, checking the silk screen for the revision and then lastly just getting the link to the PCB repo. So I was tempted very briefly to try and bust out like some beautiful soup and write scripts for this as well. But I figured that's probably overkill and I could probably just work through the list quicker than I could write the script. So that's what I've been doing. Once all the data is compiled and there is a separate script that does go ahead and send the post request out to Oshawa in order to submit that and saves the responses. I am on track to finish up the last of those. There was about 60 of them at the time that I wrote my status update here, but I have actually knocked out a few more of those in the time since. And then the only other thing I really have for status updates was the other thing I worked on over the past week, which was mostly my game that I streamed about on CircuitPython Day. I created a small clone of Chips Challenge. It works on a PyPortal with a StemAQT gamepad. At least that's how I've been running it. The maps are loaded from JSON files that get exported via a program called Tiled, which is an open source tile map editor. I have a completely functional level one and the place where I left off, I was working on the entities, the behavior required for them in order to make level two. So that is where I ended up making it two with the streams over the weekend on that. All right, I will pass it over to Dan next to tell us about your status update. Okay, thanks. So as we mentioned, Jeff and I worked on the MicroPython Merge over the past few days. We're really close to getting it to Merge. There were, especially with Async.io, there are a lot of, at one point I was working with four versions of the Async.io library. So we figured out a way to avoid some version skew problems with Async.io so that we can have some compatibility between 8 and 9. We're going to do smoke tests on all the architectures and then go ahead and merge, we think. And we will not make an alpha release for this because this is an intermediate build which has a certain version of the MPY stuff, which is different from eight series. But we then have to do the next Merge, the next version of MicroPython in and it also changes the MPY versions. So in order to avoid confusion, we're just going to not start making test releases like Alpha or Beta releases until the MPY version has stabilized. And as mentioned, we're going to make, we want to make sure that any new builds for new boards should be done, those should be against the 8.2.x or later in the eight series lines so that people don't have to deal with some possibly unstable 9 version for these new boards. And as mentioned also, I was in the chat session with Caddy and Jeff. We had a great time. We were covering things, certain Python features you might know about and we want to highlight. And so I did keep had Async.io, secondary USB, SafeMode.py and a couple of the things and there are just a lot of things that are in CircuitPython. There are so many things in CircuitPython and it's hard to know all of those. That's what that was motivated, what we wanted to do. Okay. All right. Thank you, Dan. Next up is the Shippu. So I planned to work on my game for the CircuitPython day. So I dug out the game console I was working on previously, one with a bigger display for convenience and turned out there was a number of things I wanted to fix on it first and then I run into a number of bugs. So I turned out the weekend fixing things around that and refreshing the board definition for that board because I haven't submitted it to CircuitPython or PostArray yet because I didn't have the PID for USB. So I worked around all that basically made all the pull requests for that and I will make the pull request with the board definition as soon as relevant the PID and flash memory definition requests get merged. All right. Thank you to Shippu. Next up is DJ Devin 3. Thank you for my guy. Kind of like to Shippu. I was kind of in the same place where I was working on a CircuitPython day project. I got stopped by running into multiple bugs. I was working on the Matrix Portal S3 with a bunch of panels and ran into a bunch of hard faults as well. So I switched to a Feather S2 and still got one of the same bugs which kind of threw me for a loop. I spent my 10 p.m. on a Saturday bisecting the Adafruit Request Library that prevented an SSL handshake with GitHub, which is part of the stock learn guide. So that's that was kind of clued me in that there was a major problem there if the learn guide doesn't even work. This bug at a minimum affects all S2 and S3 boards using the ad for any project using the Adafruit Request Library starting in 8.2.2. If you have a project using Adafruit Request Library, I highly recommend sticking with 8.2.1 or prior at this current time. The developers are aware of that issue. I ran into another bug report on GitHub for the unexpected maker Feather S2. Turns out unexpected maker was including an adafruit underscore dot star dot pi library in the circuit pi root directory, which obviously overrides anything with the same name that you would throw into the lib directory. And he's been made aware of that. And he is currently working on changes. So that's it. I have caused them some work for developers and I'm sorry. That's it. All right. Yeah, no worries. I mean somebody's got to be the one to find the bugs. It's probably best for somebody who understands it to be the one to find it for sure. So thanks, DJ Devon. Next up is David Galada, who's text only. David says soldered an I2S amp to a Feather RP 2040 USB host following this guide. There's a link here to the learn guide for that. Made the DVI version, but it works perfectly and tried various Synthio examples from Todd, guessing that's probably going to be Todd bought on that one, tested the USB host MIDI library, which is linked here. That's a new library repository. David says he tested the simple test that the MIDI Synth and the demo from Scott, but it failed. The piano keystrokes were taking a lot of a second to be relieved, received, taking maybe longer than a second. It sounds like so it sounds like there was some delay, perhaps when David tried out that USB host MIDI example. All right. Next up for status updates is Fede to who's also text only. So I'll read Fede says last week compiling circuit Python natively on a risk five 64 hardware just because I'm sorry I wasn't able to host a circuit Python day event. I hope I can for next year. Hopefully with an event inside Microsoft and in Latin America. That would certainly be very cool. And then for this week Fede says if somebody wants to test the risk five 64 hardware that is probably suitable for per circuit Python. Let me know and I'll send you the sends you a milk V probably milk five I'm guessing duo microcontroller for $9 for free or cost $9 I guess probably is that for free. And there's a topic in the weeds for more on that Fede says so with that I will send it over to Jeff. Hello again. So last week early in the week I worked on dot clock displays but I still don't have the code actually doing anything yet. Later in the week I shifted to helping Dan with the 1.19 merge by working on compile and test failures on Friday with circuit Python day. Yay. It was so good that everyone here everyone involved gets another hug here in status updates. And as I mentioned earlier I got the 1.19 merge to be green across the board and GitHub actions over the weekend. It was bothering me like a toothache. But instead of going to the dentist you get to code so that's fine. This week helping in any way I can to get one 19 over the finish line and merged. I met your back and call Dan. And then back to the parallel display stuff you may have seen over the weekend that more did a stream. She's already designed hardware that needs to go with the software that I'm working on. There is Arduino code that works with it though so all is not lost if I don't get it done in terms of having a product that's useful to test all of her strange displays with. Coming up soon I ordered my first board from JLCPCB. Previously I've done Osh Park and some other board houses more a decade or more ago. I opted for the cheap slow shipping so it won't be here anytime soon. But when it does I'm looking forward to putting it together. It is a board for programming two kilobyte eProms. And of course I forgot something so I'll have to put a bodge resistor on it. But that's life. And here's a random idea for anyone to use a circuit art flexible PCB bookmark. I think somebody should make one. Yeah. So let me know if you do. That's what I got. All right. Thank you Jeff. Next up is Katnie. Hello. So last week was mostly circuit python day festivities. I started the Metro ESP 32 S3 guide but kind of lost momentum on that with preparing for circuit python day both between organizing it and participating in two streams. The everything went great. Thank you again to Noah Pedro and Liz Paul, John, Todd, Jeff, Dan, to you Tim, to Melissa, to John again and then to Scott and Phil and the more and everybody who was on show and tell I didn't get a chance to watch it. But I'm sure it was amazing. It was the longest circuit python day we've ever had which was pretty amazing and special hug to John Park for doing the intro. I really didn't want to and he offered to do it. So that was also excellent, especially considering what time it was in Pacific time. So that went amazing. I'm really happy with it. I'm happy with the streams I was on and thank you again to everyone. It was really an excellent experience and I don't know how we're going to top it next year. Another Latin America stream would definitely add to it and top that. So looking at you Feta 2. So this week is the drilling back down to the Metro ESP 32 S3 guide. Last week I added a pin to the circuit python board definition that was missing, which I'm only mentioning because I PR that to main and to 8 to X. And that was the first time I've ever PR to a release branch. It actually wasn't difficult, but I did not do it magically. I did two separate branches and two separate pull requests. So I didn't really level up much. But still it was it was a good experience. And as for what's actually done, the first thing I've just done, I finished finally the pretty pins diagram. This one was a little bit normally because there's a lot of a lot going on on this board. There's an SD card slot. There's a battery connector, Neopixel, WQT connector and debug pins. Those are the ones that are not typically on metros. So a lot of pins, a lot of pins going on. So the pretty pins diagram is finally finished. And then the guide skeletons created and I'm finally prepared to start filling it in. I usually do the pinouts page from the pretty pins diagram. So it's something that has to be done in a certain order to make it easier. It's doable without it, but it's so much easier with it. So that's what I'm going to be working on this week. And that's what I've got. Alrighty, thank you, Catney. Next up and rounding out the status updates for the week is maker Melissa. Hello, so last week I finished software for my message board and I designed in 3D print and the enclosure for it. And I worked on I started working on the guide for that. And I did my circuit Python day live stream using that. And I'm this week I'm going to finish up writing the message board guide. That's it. Alright, thank you, Melissa. And that is the end of status updates. The fifth and final section for the meeting, which I will tell you about after I take a timestamp is in the weeds in the weeds is an opportunity for longer form discussion. These can either come out of status updates or be identified ahead of time and put into the note stock. You've gotten in the weeds topic, please make sure you get it added. As soon as you think of it, we don't necessarily want to stop and wait for folks to write out topics at this time. There are a couple of them in there. One of them was mine. The first one was mine. So I'll say that although it looks like I've got a response. And I think I know that this won't take much longer. But just to read what's in the notes here from this one, it was a question with a list of libraries that don't have releases yet. And I was just asking if any of those need to be released and or added to the library bundle. That would be an and not an or actually on that one. And looks like I've got a response here, Catney. I'll read which just says we could go over these individually after the meeting. Some of them definitely do not yet. But there are some I don't recognize. So they're more recent. So I will speak with Catney about that one. Yeah, that'll be totally fine. It's there's a bunch of them that we just sort of that just exist that we're not doing anything with so we can talk about the rest of them after the meeting. It sounds good. The next in the weeds topic was from Fede to his text only. So I'll read this one out about a new micro controller. So Fede says, is the micro controller from milk V duo? There is a link here to that as well as a link to the docs. And it looks like maybe a model number or something like that as well. So is that processor a good processor for circuit Python as a powerful alternative to an M seven? I understand that the chips need time to mature. So this is very early question about its usefulness. No uf two, no tiny USB, but it is a risk 564. It fruit is a member of the risk five foundation has two cores with one of them clocked at a blazing one gigahertz. It has USB mass storage with USB hub, AI and DSP, Ethernet, Linux support, and it is extremely cheap $9 for a complete duo board, etc. And let's see here looks like Jeff mentioned looks like it's designed to run a Linux, maybe it's better for standard Python plus Blinka could be the case. I am not familiar with not only this specific hardware, but even the hardware on this level. So I don't really have an ability to add much more, but anybody else has thoughts in terms of it's running a Linux. I think the question is whether 64 megabytes is enough RAM to run regular CPython with Blinka on top. Yeah, good question. Sounds like maybe a good maybe like first sort of probing step if you will for trying to figure out something like that might be to try the Linux that they've got now and see what level of support is there, whether it can run Python with the existing bit and what the memory kind of like headroom is looking like or if it's already running out or how that's going, that's probably a good first step, I would imagine. But yeah, I don't have much other insight into that one. Right. I mean, it would be really interesting. I mean, it could also be like the Broadcom ports that run bare metal. Yeah. They're complicated because the architecture of that chip is a lot more complicated than the typical microcontroller because it has fancier caching fancier memory management and things like that. And I don't know what level of that is on this this particular chip, whether it has a memory management unit. I mean, it's very interesting. Doing something for a particular chip is dealing with the secreties of that chip. And then also things like I to see and so forth are peripherals and those may or may not we may or may not be able to take implementations of particular peripherals from other places. But often what a port takes is a lot of work getting the peripherals on the bunch of peripherals to work, you know, just getting the the repel up may not be so much trouble, but getting it getting it to deal with all the peripherals, especially if they're if they're if they're not stand kind of standard, right, take a lot of time. But it is interesting. It is interesting. Yeah. Yeah. Okay. Some good information there to at least get started, it sounds like next in the weeds topic was from Todd Bot, who's text only. So I'll read that one as well. It says a quick ESP IDF question with the impending merge of the ESP IDF version five. Is that going to allow for DAC audio out? And there is a link to a circuit Python issue three eight nine eight. And I will say again, on that one, I have no real insight into that. I'm not super familiar with IDF or whether that's going to be a thing that is possible or not. If there's like a specific improvement to or addition to ESP IDF, it might enable that. But that on its own will not add different forms of audio output, someone needs to write the common health code that does that. So like Dan was talking about, the big question is how do you create this adaptation layer between the the board's SDK or the registers and the circuit Python's idea of what an audio audio is? So like you were saying, I don't either know specifically about whether this added better support for like doing a DMA operation to an audio or an analog output. But even if it does, there's still code for us or for someone to write. So it sounds like a couple, a couple layers there, even if IDF does add it, there will still probably be some work to get it going in circuit Python sounds like. Okay. And then the let's get a time stamp for that one as well. OK, so the last of our in the weeds was from Carter who's text only says, will the MPY compatibility break? Will it break sync with a circuit Python major number like 9X? And an answer here says, yes, after micropython 1.19 merge, MPY files will not be compatible. Users will have to install the Python source version, which if you're using circuit, you can do by doing circuit install dash dash pie, use the dash dash pie flag will get you the Python version of that file. You can, of course, also download the library bundles from circuit Python dot org or GitHub. There's a Python bundle as well, where you can grab that file from. And then it says, thanks. So the 7X library bundle will work with 7X 8X library bundle will work with 8X and 9X library bundle will work with 9X. And that is my understanding. Yeah, okay. Yeah, also saying yes, except with the caveat that we won't add nine immediately, we're only going to add that after a second additional incompatible change. And that's why we're only that's why we're having users use source Python files in the meantime until we think we are done with the incompatible changes that are going on in the main branch, which is what will become circuit Python 9. Okay. So did that make sense? Yes, it did to me at least. Yeah. I'd also note that between seven and eight, there's actually not any compatibility. So you think 8X maybe will turn into a bundle on seven. Yeah. Yeah. Mostly. Yeah. Okay. Right. I think that one is covered. So with that, I will take one final time stamp for the wrap up. I will mention that this has been the circuit Python weekly meeting for August the 21st 2023. Thank you to everyone who participated as a reminder, if you'd like 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. The podcast will be made available on major podcast services. The it will also be featured in the newsletter, Python for microcontrollers newsletter. You can visit Adafruit daily.com to subscribe to that. The next meeting is at the usual time of 2 p.m. Eastern 11 a.m. Pacific. That is on the 28th of August next week, one week from today. The meeting is held, of course, on the Adafruit Discord, which you can join at adafru.it slash discord. If you'd like to be notified about the upcoming meetings, you can ask to be added to the circuit Python Easter's role on Discord and we will send out notices there. And so with that, I'll say thank you again to everyone and we hope to see you all next week. Thanks, everyone.


We were discussing the structure of the real number system and in the last class we listed various properties of the real numbers and let me recall that I mentioned one of the most important property of the real numbers is what we had called the order completeness property or also known as LUB action. So, let me state that once again what it simply says is that every non-empty subset of R that is bounded above has least upper bound. And we have already seen that once we say that it has a least upper bound then that least upper bound has to be unique. And by the similar argument we have we can also see that if this is accepted then we can in a similar way using this we can also prove that if a set is non-empty and bounded below then it has the greatest lower bound or what we call infimum. Also the way in which this LUB or supremum comes into picture in various proofs is as follows that is suppose you say that A is non-empty and suppose alpha is the LUB of A. Then what we have seen in the other class is that for every epsilon bigger than 0 the alpha minus epsilon is not an upper bound. So, you can always find the element in A which is bigger than alpha minus epsilon. So, for every epsilon there exists x in A this x may depend on epsilon this x for different epsilon you may need to choose different x. So, if you want you can write x suffix epsilon which is what some books do, but not very important right term. So, there exists x in epsilon such that alpha minus epsilon is strictly less than x this means that alpha minus epsilon is not a lower bound and alpha itself is a sorry alpha minus epsilon is not an upper bound and alpha itself is an upper bound. So, x less than or equal to alpha this will be always true and this one particular axiom is the one of the is the most important axiom of the real number system which distinguishes real numbers from all other number systems. And we have seen also in the last class that any with this axiom real number system becomes what is called a complete ordered field and there is only one complete ordered field which has all these properties. Also the way in which the this axiom comes into picture in the various well done theorems in real analysis. Let me again remind you in the last class perhaps I had mentioned this article by Professor S. Kumarisan role of L U B axiom in real analysis. We shall see some instances of this. In fact what we will notice that is what we want to emphasize is that most of the important properties of the real line either follow directly from this axiom or in some chain of logic that is you prove some theorem using this axiom then something else using that theorem etcetera and at the last stage you prove whatever that particular property. So, every major property of the real numbers depends either directly or indirectly on this particular property. Let us see few instances of that to begin with for example we can show this that the set of all natural numbers n is not bounded above there is no real number which is bigger than or equal to all all natural numbers. So, how does one prove that when suppose n is bounded above we shall see what happens we will get a contradiction suppose n is bounded above by the way instead of bounded above if we had talked about bounded below is that true it is bounded below that part is trivial. So this is only important n is bound suppose n is bounded above then what should happen in view of this n is already non-empty we know several natural numbers. So, it should have a least upper bound it should have a least upper bound. So, suppose n is bounded above then n has least upper bound say alpha suppose I call that least upper bound alpha then use this we know that for every epsilon this should exist some x in a such that alpha minus I will take this epsilon as 1 I will take this epsilon as 1. So, suppose I take this epsilon as 1 I can say there exist x in n such that alpha minus 1 is strictly less than x and this is less than or equal to alpha. Now, take this part if alpha minus 1 less than x from this can we say that alpha less than x plus 1 alpha less than x plus 1. In fact, since this is a natural number let us use a different notation. So, that you will understand what is happening instead of x I will say small n small n belonging to n such that alpha minus 1 less than n. So, this proves that alpha less than n plus 1, but what is n plus 1 n plus 1 is a natural number because n is a natural number and alpha is less than n plus 1. So, that contradicts that alpha is an upper bound. So, that is not possible. So, n is not bounded above then similarly there is another very well known property of real numbers which depends on or which relates national numbers and real numbers it is called Archimedean property. Archimedean this name may have come from this Greek mathematician Archimedes, but apparently he was not the one who discovered this. Anyway, we will not go into those historical points if you those of you who have interest can look at the book. What this property says is the following suppose you take two positive real numbers. So, suppose suppose x y in R or such that 0 less than x and 0 less than y you take two positive real numbers then you can always find a natural number such that n times x is bigger than y that is given any two real positive real numbers you can take any of those positive numbers and multiply that by a suitable natural number. So, that that multiple becomes bigger than the other real numbers that is called Archimedean property then of course that number n may depend on both x and y that number n. So, then there exist a natural number n such that n times x is bigger than y can you see that this follows immediately from this see suppose this is false suppose this is false then what does that mean n s that means n x less than or equal to y x is bigger than 0. So, does it mean that n less than or equal to y by x right see if this is false that is if not n less than or equal to y by x for every n in n that is clear. So, if there is no such n it means that for every n n must be less than or equal to y by x, but can that happen because that will mean that again that will mean that n is bounded above. So, that is not possible now many of you would have seen this proof of this famous thing that root 2 is irrational and how does the proof go suppose it is rational then you say that root 2 is m by n and then you remove the common factors from m and n then you will write that 2 is equal to m square by n square. So, that will give 2 n square is equal to m square etcetera and then since we already. So, this will mean that 2 divides m square that will give that 2 divides m. So, removing 2 again you will get that m is even and similarly it will prove that n is also even by after you remove 2. So, fine that proof is quite well known to you right, but does this say that there exists root 2 as a real number how do you know that there exists a real number see all that this proves is that there is no rational number all that this proves there is no rational number whose square is 2 that is what this proves does it prove that there exists a real number whose square is 2 it does not it does not that. So, that needs a proof separately that there exists a real number which in fact without that even this notation root 2 is meaningless without proving that there exists a real number whose square is 2, even this notation root 2 is very less. And to prove that, you will need this. Let us see how that can be done. So, let us just take that as a theorem. And then we shall subsequently see that there is nothing very particular about 2. But let us prove it for 2, since this is a familiar proof. Let us say, I will say there exists x, in fact one can say something more. There exists x, unique x bigger than 0. This is unique x bigger than 0, such that x square is equal to 2. Of course, I can say it is unique because of this. Suppose I remove that condition, then that is not unique. Because minus x square is same as x square. So, as far as the uniqueness is concerned, there is nothing much to prove. See, suppose there are 2 x and y, we satisfy both. You will get x square is equal to y square. And that will give that x minus y into x plus y is 0. See, suppose there exists x y in R such that x square is equal to 2 and y square is also 2. Then this will give that x minus y into x plus y is equal to 0. Of course, this is important. Suppose there exists x y in R such that x square equal to 2 and y square equal to 2 and both are positive. Now, if that is the case, x plus y is also positive. So, you can multiply both sides by 1 by x plus y and you will get x equal to y. So, if we do not assume that x is equal to 0, then x plus y also can be 0 and that will give y equal to minus x. But if x and y both are positive, x and y must be equal.  Let us say I will take the set A as the set of all x which are bigger than 0 and x square less than or equal to 2. Is this a non-empty set? Obviously, 1 belongs to A. That is clear. 1 square is less than or equal to 2. So, 1 belongs to A. So, that is non-empty. Is it bounded above? How do you prove that it is bounded above? Yes? No. How do you show that? 2 is an upper bound. Fine. How does 1 prove that? That will only show that 2 does not belong to A. How does it show that 2 is an upper bound? What you say is right? 2 square is 4 and that is not less than or equal to 2. But that only means that 2 does not belong to A. How does it show that 2 is an upper bound? To show that something is an upper bound, what is needed to show? You have to show that if you take any element in x, then that must be less than or equal to 2. And how do you show that? Let us do. Let x belong to A. Then what we know is that these two things we know. x is bigger than 0 and x square is less than or equal to 2. We want to prove that x is less than or equal to 2. If we want to say 2 is an upper bound, we want to prove that. Now, tell me how does one proceed after this? We are not sure any such thing that taking square roots preaches the order. Just use whatever we have said so far about real numbers.  Once you realize that, that will be clear. See, suppose x is less than or equal to 1. If x is less than or equal to 1, then 1 is less than 2. So, there is nothing to be proved. So, then obviously x is less than or equal to 2. If not 1 is strictly less than x, if not 1 is strictly less than x. If 1 is strictly less than x, can you say that that will give x is less than x square? Remember x is bigger than 0. Remember x is bigger than 0. If 1 is less than x or even less than or equal to 1, this will give that x is less than or equal to x square. We already assume that x square is less than or equal to 2. So, that shows that a is bounded above. Now, use this action, since a is bounded above, it has a least upper bound. Let us call that least upper bound as alpha.  Obviously, alpha is a real number. We have said that every non-empty set that is bound above has a least upper bound. This least upper bound is a real number. Alpha is a real number. What we want to say about this alpha? That alpha is or alpha square is equal to 2. This is what we want to say. So, alpha square is equal to 2. Now, we use this property of this least upper bound. We have said that if alpha is a least upper bound of everything, then if you take any epsilon, then alpha minus, there should exist some x in a such that alpha minus epsilon is strictly less than x. We shall choose that appropriate epsilon little later, but let us start with any epsilon. So, let epsilon be bigger than 0. Then, there exists x in a such that alpha minus epsilon is strictly less than x. Of course, this is less than or equal to alpha. We shall choose this epsilon in such a way that this alpha minus epsilon is also positive. That we can always do. It is because suddenly alpha is an upper bound. So, alpha is bigger than or equal to any element here. Alpha is bigger than or equal to any element here. So, in particular alpha is bigger than 1 also. Alpha is bigger than 1 also. For example, if I can choose epsilon as half, alpha minus epsilon will be strictly positive.  This we can do always. So, this is 0 less than alpha minus epsilon less than x. Since, alpha minus epsilon is less than x, now we can say that we will multiply this by alpha minus epsilon, this by x, then this inequality will remain unchanged because both are positive numbers. So, what we will get is alpha minus epsilon whole square is less than x square and less than or equal to this alpha square. So, suppose we expand this, what we will get is alpha square minus 2 alpha epsilon plus epsilon square is less than or equal to alpha square. So, what follows from this? Of course, I want this also. Let me forget about this part. This is strictly less than x square and since x square is in A, we can say that x square is less than or equal to 2. x square is in A, we will say x square and that is what we want to use. x square is less than or equal to 2. Now, does it follow from here that alpha square is less than or equal to 2? Remember, this is true for every epsilon. So, I can make further choice of epsilon such that this number becomes strictly positive. See, this is something I have mentioned right in the beginning. That is, suppose you want to show that something is, suppose you want to show x is less than or equal to y, you can show that x is less than y plus epsilon for every epsilon or which is same as saying that x minus epsilon less than or equal to y or x minus epsilon less than y for every epsilon. This is what we have shown here. Whatever epsilon you take, this is always going to be less than or equal to 2. For every epsilon, that is important. Since this happens for every epsilon, we must have alpha square less than or equal to 2. We can say that since this holds for every epsilon bigger than 0, we have alpha square is less than or equal to 2. Is that clear? Alpha square is less than or equal to 2. One more thing we should not notice right here. Since alpha is an upper bound of A, alpha is bigger than or equal to every element in A and every element in A is bigger than 0. In particular, alpha is bigger than 0. In fact, we have also noticed that alpha is bigger than or equal to 1 actually. So, alpha is strictly bigger than 0. Now, we have proved that alpha square is less than or equal to 2. But what we wanted to prove? We want to prove that alpha square is equal to 2. So, that means what we need to prove next? That is alpha square is also bigger than or equal to 2. Suppose we prove that alpha square is also bigger than or equal to 2, then it will be less than or equal to 2 or which is or other way to saying is that we should show that this inequality cannot be strict. We have already shown that alpha square is less than or equal to 2.  Alpha square is strictly less than 2. We have to show that this cannot happen. Our idea is to show that this cannot happen. Alpha square is strictly less than 2. Then we will do something similar again. Here we have taken alpha minus epsilon. We will now consider alpha plus epsilon. We will choose an epsilon in appropriate way and get some contradiction.  And then see our idea is basically this. If alpha square is less than 2, we will find some epsilon such that alpha plus epsilon whole square is also less than 2. Is that possible? In fact, that is what we shall verify. Those are the calculations that we shall verify.  Then alpha plus epsilon whole square is equal to alpha square plus 2 alpha epsilon plus epsilon square. Now, alpha square is less than 2. Alpha square is less than 2, which is same as saying that if I take this number 2 minus alpha square, that is a positive number. Now, the question is suppose I choose an epsilon in such a way that this part 2 alpha epsilon plus epsilon square, suppose this is less than this. Then what will be the meaning of this? Then that whole thing will be less than 2. So, let me just say that thing here first.  How this is to be done or whether this can be done or not? That we shall see little later. But suppose this can be done. Suppose this can be done. Then what does that mean? It will mean that then alpha plus epsilon whole square that is equal to that is less than alpha square plus 2 minus alpha square and that is less than 2. That is less than 2 and it means that for this epsilon, what does that mean? That alpha plus epsilon is bigger than 0 and its square is less than 2. That means this means alpha plus epsilon belongs to A and this means alpha plus epsilon belongs to A. Now, with epsilon strictly bigger than 0. Now, can that happen? Alpha is an upper bound of A. So, no number bigger than alpha can belong to A. So, this is the contradiction. So, now only thing remains is that whether we can choose such an epsilon. Now, for this to happen, what must be the case? Anyway, see if we choose any particular epsilon and suppose this inequality that is what we need is this inequality. If that inequality works for any particular epsilon, it will also work for any other epsilon smaller than that. That is clear. Suppose I let us say it works for epsilon equal to half. It will also work for epsilon equal to 1 by 4, 1 by 8 or anything. So, it is because of this that I can assume right from the beginning that epsilon is less than 1. I can assume right in the beginning that I can choose epsilon smaller than 1. So, I can say that we may choose 0 less than epsilon less than 1. Then, the point of choosing this epsilon is less than 1 is that this will also imply that epsilon square is less than epsilon. If epsilon is less than 1, then epsilon square is less than epsilon. Then, now the choice becomes very easy. That is the whole idea here.    That is and of course epsilon. Now, 2 minus alpha square divided by 2 alpha plus 1 this is a positive number. Can we always choose some positive number with some positive number which is strictly less than that? We can always do that. We also wanted it should also be smaller than 1. So, we can say that choose epsilon which is smaller than minimum of these two.  These are two positive numbers. Their minimum is also a positive number. For example, you can choose epsilon to be half of that minimum. Then it will be less than 1 as well as less than this. This is the kind of technique that you use in many proofs. That is why I have done this in detail here. Is this clear? Whatever we have done. So, now what is the final condition? So, this shows that alpha square less than 2. This is not possible because we have got a connection to this. So, that means alpha square has to be equal to 2. We already shown that alpha square is less than or equal to 2. But now we have shown that it is not strictly less than 2. So, we must have alpha square is equal to 2. So, let us again take a look. What did we prove that there exists of course, uniqueness is trivial. There exists a unique x which is strictly that x is alpha. That alpha is bigger than 0 and alpha square is 2 and that is unique. All those things are proved. Now, let me give you an exercise. Exercise is the following. There is nothing particular about this 2 and that 2. You can take any number here instead of 2 and similarly you can take any natural number here instead of 2. By the way after having proved this then only this notation is meaning proved 2 or 2 power half or whatever it is. So, I will simply state this theorem and proof will be left to you as it is. So, for every x in r with x bigger than let me instead of x let me take it as a for every a in r with a bigger than 0 and a natural number n. There exists unique x in r with which is positive with x bigger than 0 such that x to the power n is equal to a. Proof left to you as an exercise. Do it on your own. Whatever we have done for 2, you do a similar thing for n. Again uniqueness will be straight forward to prove. You similarly define the set a with appropriate modifications here. Whatever set here we have defined, you define the set with appropriate modification. It will be a set of all x bigger than 0 with x to the power n less than or equal to a. Then show that that set is non-empty bounded above etcetera. Take its supremum and there in a similar way show that that x to the power n is equal to a. So, whatever we have done for this square, you will have to take the nth power everywhere and come across the appropriate inequalities, prove the appropriate inequalities. Now, let us go to one more very important property of real numbers. See till now we have seen how natural numbers and real numbers are related to each other. Now, we look at how rational numbers and real numbers are related to each other. This important property is sometimes expressed by saying that rationales are dense in real numbers. What we want to say is that given any two real numbers, there exists a rational number between those two real numbers. So, given any two real numbers, there exists a rational number between the two means between those two real numbers. So, suppose x and y are real numbers and we are saying the two real numbers, it means they are two different real numbers. So, let me say a and b. Suppose a and b are two real numbers and a not equal to b. So, the first step I want to say that it is enough to consider the case when both a and b are positive and both a and b are positive. We can also assume that a is less than if both if they are different means either a is less than b or b is less than a. So, a and b are after all notations. So, we can assume that a is less than b. So, what I want to say is that it is enough to prove it is enough to consider the case. Let me say 0 less than a less than b. In other words, I want to say it is enough to consider the case when both are positive. Why it is enough? What are the other possible cases? One is negative and one is positive. One is negative and one is 0 is there. So, that is nothing to prove. If both are negative, see suppose we have proved this case, let us say q is a rational number. If a is less than q less than b, because in that is same as say that minus b less than minus q less than minus a. So, suppose you take two negative numbers, you take their minus of those two numbers, they will be positive. Find the rational between those two positive numbers, minus of that will be rational between the two negative numbers. So, it is enough to consider this case. That is clear? Now, let us see how we go about this. See, after all what is our idea? We want to find the rational numbers. That means we want to find numbers p by q. We want to find number, we want to find natural numbers p and q or integers p and q such that q not equal to 0. This should happen a less than p by q less than b. Maybe one of these inequalities may be less than or equal to also. That does not matter. Of course, if a and b both are positive, is it clear that p and q also must be positive? So, we have to basically choose p and q in such a way that this happens. To do that, we have to say how to choose q and how to choose p. Now, first consider the case. Let us consider the number 1 by b minus a and 1 by b. Both of these are positive numbers. You can take maximum of these. They are also positive. You can take maximum of these. There is also positive. Now, whatever is positive real number, since we have already proved that the set of all natural numbers is not bounded above, I can always find a natural number which is bigger than the maximum of these two. Is it clear to you? This is a real number. Maximum of these two numbers is a real number. I can always find a natural number which is bigger than this real number. That number I will call q. You can say there exists q in n such that this maximum is less than or equal to q. That is 1 by b less than or equal to q and 1 by b minus a is also less than or equal to q. That is also less than or equal to q. This is something we want to prove. Let us just record what we got here. Then we will have these two inequalities. Then 1 by b less than or equal to q and 1 by b minus a. This is also less than or equal to q. Now, let me take this set. I will again call this set as a. I will take these are the set of all natural numbers in n such that m by q is less than or equal to b. m by q is less than or equal to b. That is same as saying m less than or equal to b times q. Is this set non-empty? This is an obvious number that belongs to it. What is it? 1. 1 belongs to it. It is obviously bounded above. Of course, this b times q may not be a natural number. It is just a real number. We are taking all those natural numbers which are less than or equal to this real number. Since this set is bounded above, can we see that there must be a maximum in this? It is a subset of natural numbers. It is not a subset of real numbers. It is a subset of natural numbers and that is bounded above. There must be maximum among this. That maximum I will call p. Let p be equal to maximum of a. What does it mean? That p belongs to a. Since p is a maximum, that means p plus 1 does not belong to a. That is not only that. Fine. This is what we will require that is. Then p belongs to a and p plus 1 does not belong to a. We shall use both these facts. Now, p belongs to a means what? Of course, p is a maximum of a. That means, remember a is the subset of natural numbers. We are choosing maximum of that. This is also a natural number. This is a natural number. What does p belong to a mean? p is less than or equal to b q. This means p is less than or equal to b q. Remember q is also a natural number. So, this implies p by q less than or equal to b. This is one of the things that we want. We also wanted that p by q is bigger than or equal to a.  So, this means p plus 1 strictly bigger than b q.  Let me write it here. So, p by q is bigger than b minus 1 by q. Now, what do we know about 1 by q? It is here. 1 by b is less than or equal to q. So, this means 1 by q is less than or equal to b. This is not something that is useful now. This part is useful now. 1 by b minus a is less than or equal to q. So, this means 1 by q is less than or equal to b minus a. Hence, what can we say about minus 1 by q? Minus 1 by q is bigger than or equal to minus of b minus a. So, this is bigger than or equal to b minus b minus a. That is same as a. So, here we have proved that p by q is less than or equal to b. Here, we have proved that p by q is bigger than a. That is what we wanted. Remember, we wanted to show this. That is a less than or equal to p by q less than or equal to b. We have proved that. So, we have shown that between any two real numbers, there exists a rational numbers. Let me again remind you that this is what is expressed by saying that rationals are dense in reals. Now, remember in this proof, we directly use the l u b action in the proof itself. In this proof, we directly use l u b action in the proof itself. In this proof, we did not use it directly, but did we use it indirectly? For example, here we said that there exists q in n such that this is less than or equal to q. There we use the fact that n is not bounded above. This we can get because the set of all rational numbers is not bounded above. That was the property that we got from l u b action. So, what I wanted to say again is that practically everything that you will prove about real numbers, it will follow either directly or indirectly from l u b action. We shall see the instances of this in the next few lectures when we discuss the real number system. We will stop with that for now.