# CircuitPython Weekly Meeting for December 18, 2023


Liz is hosting.


Video is available [on YouTube](https://youtu.be/HaZwRZp-W_8).


Join here for the chat all week: http://adafru.it/discord.


The CircuitPython Weekly Meeting normally is held at 2pm US ET/11am PT on Mondays. Check the #circuitpython channel on Discord for notices of change in time and links to past meetings. Meeting times are also available in [iCal format](https://raw.githubusercontent.com/adafruit/adafruit-circuitpython-weekly-meeting/master/meeting.ical) for use with standard calendar applications and can also be viewed [in your browser](https://open-web-calendar.hosted.quelltext.eu/calendar.html?url=https%3A%2F%2Fraw.githubusercontent.com%2Fadafruit%2Fadafruit-circuitpython-weekly-meeting%2Fmain%2Fmeeting.ical&title=CircuitPython%20Meeting%20Schedule&tab=agenda&tabs=month&tabs=agenda).


If you want to be able to participate in the meeting by speaking, you will need to be added to the @circuitpythonistas role on Discord. Please ask any of the moderators or admins to add you if you’d like to join.


CircuitPython development is sponsored by Adafruit. Please support them by purchasing hardware from https://adafruit.com.


Reminders: Podcast available on most services. Let us know if we’re missing some. The canonical URL for the podcast version is https://adafruit-podcasts.s3.amazonaws.com/circuitpython_weekly_meeting/audio-podcast.xml which you may be able to enter directly into compatible podcast apps.
## 02:46 Community News
### 02:49 CircuitPython 9.0.0 Alpha 6 Released
CircuitPython 9.0.0-alpha.6, an alpha release for 9.0.0, has been released. It has significant known bugs and will have further additions and fixes before the final release of 9.0.0 - Adafruit Blog and GitHub Release Notes.
### 03:12 The Second Editions of Two Favorite Books
Programming the Pico Book Released
Programming the Pico has been updated to a second edition with a new chapter on the Pico W. Programming mainly in MicroPython with a couple of examples in CircuitPython - Simon Monk via X and code examples on GitHub.
Making Embedded Systems is Getting a 2nd Edition Refresh
Making Embedded Systems, 2nd Edition, by Elecia White will have new chapters about motors, managing networked sensors (IoT), debugging hard faults, and more. It's scheduled for a March release and can be preordered from booksellers now - LinkedIn.
### 03:44 Project of the Week: Detecting Ghost Aircraft with Python
Detecting Ghost Aircraft with Python
Angelina Tsuboi has created what she calls Fly Catcher — a Raspberry Pi-powered system that can detect false aircraft using Automatic Dependent Surveillance. Fly Catcher works by monitoring the 1090MHz frequency and can determine whether or not a potential aircraft is genuine thanks to a neural network developed just for this project, with the app coded in Python - Tom's Hardware, YouTube and GitHub.
### 04:17  Newsletter Details
The Python on Microcontrollers Weekly Newsletter is a CircuitPython-community-run newsletter emailed every Monday. The complete archives are [here](https://www.adafruitdaily.com/category/circuitpython/). It highlights the latest Python on hardware related news from around the web including CircuitPython, Python and MicroPython developments. 
To contribute your own news or project, edit next week's draft [on GitHub](https://github.com/adafruit/circuitpython-weekly-newsletter/tree/gh-pages/_drafts) and [submit a pull request](https://help.github.com/articles/editing-files-in-your-repository/) with the changes. You may also or email cpnews@adafruit.com, or tag a post with #CircuitPython on Mastodon, Bluesky, or X (formerly known as Twitter),.
## 04:52 State of CircuitPython, Libraries and Blinka
**This report contains information from the previous seven days. Any changes (PRs merged, etc.) made today are not included in this report.**
### 05:09 Overall
15 pull requests merged
  * 11 authors - wtuemura, jepler, FoamyGuy, dhalbert, how2flow, prplz, michalpokusa, lcmcninch, vladak, bill88t, makermelissa
  * 5 reviewers - jepler, FoamyGuy, dhalbert, tannewt, makermelissa
* 16 closed issues by 11 people, 22 opened by 20 people
### 05:41 Core (@jepler)
* 5 pull requests merged
  * 5 authors - wtuemura, jepler, dhalbert, bill88t, prplz
  * 2 reviewers - tannewt, dhalbert
* 18 open pull requests
  * https://github.com/adafruit/circuitpython/pull/6555 (Open 531 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7440 (Open 341 days)
  * https://github.com/adafruit/circuitpython/pull/7618 (Open 301 days)
  * https://github.com/adafruit/circuitpython/pull/7675 (Open 289 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7811 (Open 263 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7997 (Open 213 days)
  * https://github.com/adafruit/circuitpython/pull/7996 (Open 213 days)
  * https://github.com/adafruit/circuitpython/pull/8033 (Open 206 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8100 (Open 179 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8233 (Open 141 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8349 (Open 109 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8457 (Open 76 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8647 (Open 26 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8699 (Open 12 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8713 (Open 6 days)
  * https://github.com/adafruit/circuitpython/pull/8723 (Open 3 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8719 (Open 3 days)
  * https://github.com/adafruit/circuitpython/pull/8725 (Open 2 days)
* 5 closed issues by 4 people, 7 opened by 7 people
* 671 open issues
  * https://github.com/adafruit/circuitpython/issues
* 8 active milestones
 * 10.0.0: 2 open issues
 * 8.2.x: 1 open issues
 * 9.0.0: 43 open issues
 * 9.x.x: 7 open issues
 * Libraries: 23 open issues
 * Long term: 567 open issues
 * Support: 15 open issues
 * Third-party: 11 open issues
 * 4 issues not assigned a milestone
### 07:53 Libraries
* 8 pull requests merged
  * 6 authors - michalpokusa, lcmcninch, jepler, FoamyGuy, vladak, makermelissa
  * 4 reviewers - tannewt, jepler, FoamyGuy, dhalbert
  * Merged pull requests:
    * https://github.com/adafruit/Adafruit_CircuitPython_PyPortal/pull/131 (Days open: 38)
    * https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT/pull/187 (Days open: 26)
    * https://github.com/adafruit/Adafruit_CircuitPython_Display_Button/pull/42 (Days open: 10)
    * https://github.com/adafruit/Adafruit_CircuitPython_PyCamera/pull/5 (Days open: 7)
    * https://github.com/adafruit/Adafruit_CircuitPython_HTTPServer/pull/74 (Days open: 2)
    * https://github.com/adafruit/Adafruit_CircuitPython_DisplayIO_FlipClock/pull/12 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_PyCamera/pull/6 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_Qualia/pull/3 (Days open: 1)
  * 63 open pull requests (Oldest: 487, Newest: 1)
* 9 closed issues by 6 people, 11 opened by 10 people
  * 703 open issues
  * 19 good first issues
* https://circuitpython.org/contributing
#### Library PyPI Weekly Download Stats
* **Total Library Stats**
  * 149600 PyPI downloads over 323 libraries
* **Top 10 Libraries by PyPI Downloads**
  * Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 11385
  * Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 11071
  * Adafruit CircuitPython Register (adafruit-circuitpython-register): 4166
  * Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 1934
  * Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 1845
  * Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1345
  * Adafruit CircuitPython Pixelbuf (adafruit-circuitpython-pixelbuf): 1248
  * Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1221
  * Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1147
  * Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1085
#### Library updates in the last seven days:
* **Updated Libraries**
  * [adafruit/Adafruit_CircuitPython_MiniMQTT](https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT)
  * [adafruit/Adafruit_CircuitPython_PyCamera](https://github.com/adafruit/Adafruit_CircuitPython_PyCamera)
  * [todbot/CircuitPython_MicroOSC](https://github.com/todbot/CircuitPython_MicroOSC)
### 11:29 Blinka
* 2 pull requests merged
  * 1 authors - how2flow
  * 1 reviewers - makermelissa
* 6 open pull requests
  * https://github.com/adafruit/Adafruit_Blinka/pull/417 (Open 1041 days)
  * https://github.com/adafruit/Adafruit_Blinka_bleio/pull/40 (Open 801 days)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/299 (Open 204 days)
  * https://github.com/adafruit/Adafruit_Blinka_bleio/pull/65 (Open 19 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/749 (Open 12 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/757 (Open 2 days)
* 2 closed issues by 2 people, 4 opened by 4 people
* 84 open issues
  * https://github.com/adafruit/Adafruit_Blinka/issues
* PyPI downloads in the last week: 17484
* Piwheels Downloads in the last month: 9399
Number of supported boards: 128


## 12:34 Hug Reports
12:51 @Liz (hosting)
* Group hug


13:13 @anecdata (missing meeting)
* @eightycc for all the work on raspberrypi wifi access point starting and stopping


13:24 @CGrover (text only)
* @PaulCutler for being a gracious podcast host and expert editor. He kept me on track during recording and made the results coherent.
* To the community and the team for the amazing progress on the next version.


13:45 @danh
* Community hug.
* @foamyguy for quick reviews of 8.x.x-9.0.0 displayio updates.


14:25 @DJDevon3
* @JPosada for adding forkawesome bitmap symbol font support to the bitmap fonts library in 2021.  They are very handy for GUI design.


14:38 @david.glaude (text only)
* Dan for a huge help on getting up to speed with my ESP32-C6-DevKitC-1-N8


14:51 @eightycc (text only)
* A big hug to anecdata for helping out with the AP restart bug (#8718) on RP2040.
* A huge holiday hug to everyone working on this project. See you all next year!


15:06 @foamyguy
* @jepler for enhancing circuitpython-build-tools to support extra non-py files in libraries that get built into bundles. Also another for looking into Adabot’s long run-time and submitting improvements to it
* @DJDevon3 for making an awesome soft keyboard layout for displayio utilizing GridLayout, and for working generally towards projects having the ability to be end-user configurable without the use of PC and even lower technical barrier to entry than CircuitPython already has.
* @Danh for resolving some Github Repo settings issues from the weeds last week. And another for working on 8.x / 9.x compatibility for the displayio changes in several libraries
* @Justin for initially troubleshooting issues with out of socket errors using requests and mqtt together and jumping in to discuss during the meeting and work on proposed solutions


16:55 @jepler
* @liz for working on some cool product guides
* @dan for releasing
* @tannewt for dropping by when he can, and taking time away as he needs to.
* @neradoc for seeding an idea in my brain with the way you created the keyboard layout bundle
* clickonben on github for bringing up a github limitation that we can better document (the github-generated “source” for a bundle is not too useful); we improved the release notes for bundle releases with this in mind
* 2bndy5 for noticing some outdated stuff in circuitpython-build-tools and pitching in to make things better
* Echoing others in thanking @eightycc for work on rp2040 wireless


19:50 @makermelissa
* Group Hug


19:59 @tannewt
* Group hug to everyone. You’ve all been a part of the wonderful CircuitPython community that is a core piece of my life.
## 20:44 Status Updates
21:09 @Liz (hosting)
* I’ve been working on a compass project using the Qualia S3 and 2.1” display. I’ve made some good progress with it and will be writing up a guide for it along with some photo and video of it outside hopefully
* Since Thursday I have put the compass on hold though to work on some product guides and assist with a Ruiz brothers project. You may have seen the MEMENTO PyCamera and USB Host FeatherWing come into the Adafruit store last Wednesday. As a result I am working on guides for both and want to get them done before we all start napping for the christmas and new years break.


21:50 @CGrover (text only)
* Getting closer to releasing a helper library for algorithmically generating multi-oscillator composite waveform samples for synthio. The current version accepts a list of frequencies and relative amplitudes of multiple waveshapes (sine, square, triangle, saw, noise) and produces a composite sample that can be used by synthio.Note, Synthesizer, LFO, and Note’s ring modulator. One of the challenges was detecting and correcting potential loop distortion that happens when the value at the end of one sample is different from the start of the next. The first two proof-of concept projects are a sample-driven version of the IoT WindChime project and a simulation of a Roland TR-808 top hat cymbal sound (with six square wave oscillators as a resonant noise source). Next steps include storing the sample into a collection folder and completing the companion Playground note (https://adafruit-playground.com/u/CGrover/pages/construct-a-synthio-waveform-object-from-a-list-of-oscillators).


22:49 @danh
* Released CircuitPython 9.0.0-alpha.6.
* Fixed several display libraries that had 9.0.0-only examples, at least one of which was used in a Learn Guide.
* Usual reviews and 9.0.0 bug fixing. No more open 8.2.x bugs right now.


24:10 @DJDevon3
* Added a way to display wifi network scan to a TFT display last week.  Refined it this week to be much more reliable.
* Started using displayio grid_layout to create a TFT touch keyboard. Due to the amount of labels and touch_points required the responsiveness is slow. It should suffice for changing wifi credentials, preferences, and settings.
* When I get it into a usable state I’d like to make a commit to add the touch keyboard layout to displayio layouts.


24:38 @david.glaude (text only)
* ESP32-C6
   * Installed CP 9-alpha-6 on my ESP32-C6-DevKitC-1-N8
   * Testing Web Workflow… because what is best than a CP device without mass storage to force you to try another workflow
   * …


25:01 @eightycc (text only)
* Resolved an issue (#8718) that proved to be a race condition in CYW43 Driver. After the new year I’d like to visit reviving the CP CYW43 Driver fork repo for this and possibly other issues related to implementing _bleio.
* Continuing work on _bleio. Finishing up the GATTS database port from MicroPython today. BTstack doesn’t have one built in.




25:33 @foamyguy
* Another pass of refactoring in Circup web workflow last week. Then today went back thru and fixed up the test scripts to succeed and all remaining pre-commit failures from them. Intending to do another round of more thorough testing both Disk and Web this afternoon
* Worked on some enhancements in GridLayout to allow it to better support finding which grid cell lies at a given pixel location when the cells span rows or columns. This was in anticipation of:
* Working on a SoftKeyboard helper library built from DJDevon3s initial code hoping to contain all of the complex details of layout and which keys map to which letters inside of a helper so that user code can have a very easy to use interface to get key presses events from a SoftKeyboard on a touch screen. Ultimately have in mind touchless input method as well like an old school NES text input box with selection cursor and D-pad control.


28:05 @jepler
* Submitted a small PR to add CPython-compatible `codeop.compile_command` which is a building block of a custom REPL.
* Working on jpegio improvements
   * WIP PR can now read from files, probably from sockets; still only tested on host computer but It Should Work(™)
   * Next up is to support `bitmaptools.blit` style arguments for x,y; x1,y1,x2,y2; and skip_colors for basic compositing
* The below stuff all comes after that…        
* Created a “font bundle”. Remember how I said a few weeks ago I wouldn’t do this?
   * There’s a range of font sizes
   * Mono, sans, serif. Styles: normal, bold, oblique or italic, bold+oblique or italic
   * With this you just say `from font_sans_oblique_72 import FONT as SANS_OBLIQUE_72`
   * Sometime in the coming weeks will be added under the adafruit organization as a separate bundle.
   * Works with circup, though you will have to `circup add-bundle` it (once)
      * May end up being defaulted in a future circup release, we’ll see
   * You can try it now: `circup add-bundle jepler/circuitpython-fonts`
   * Everything subject to change for now
   * Currently based off of freefonts with the “GPL + font embedding exception” but I may change the font foundry to something with a more appropriate license
* Wrote an implementation of `glob()` in pure Python. It’s just in a gist for now: https://gist.github.com/jepler/7a09f9672b06851a00eec018bccb7175
* Want to update the runcpm learn guide (arduino-based) to use the USB host featherwing


31:22 @makermelissa
* Updated the Qualia guide with New Displays
* Updated Arduino GFX library to handle bar displays, but PR is still being updated
* Updated CircuitPython Qualia library with newest displays
* Added missing boards to CircuitPython.org
* Updated Blinka libgpiod pin to work with latest version of gpiod
* Continuing to look into Raspberry Pi 5 oddities in Blinka
* Also working on a project that is IR remote controlled seasonal lights using CircuitPython


32:28 @Paul Cutler (missing meeting)
* New episode of The CircuitPython Show out today featuring Jan Goolsbey (Cgrover).  We chat about the CircuitPython Community Bundle, using synthio to create wind chimes, and more.


32:41 @tannewt
* Wrapping up SD card support in web and ble workflows and then taking off for the holidays.
* Submitting a proposal to PyCascades 2024 in Seattle.
* Will be kicking off #CircuitPython2024 on New Year’s day.
## 34:30 In The Weeds


34:47 @Justin (text only / here happy to talk about it)


* Follow-up from 2 weeks ago. After playing around with things, I have come up with the following steps:
1. Move socket specific code from `requests.Session` to `requests.SocketHandler`
   1. Draft PR here: https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/146
2. Make `requests.SocketHandler` a `singleton`
3. Add some methods for better `key<>socket` handling, and helpers like `get_open_keys()`
4. Add tests for new methods and changes
5. Make sure Docs look good
6. At this point mark the above PR as `Ready for review`
7. Update `adafruit_esp32spi_socket.py` to `adafruit_esp32spi_socketpool.py`
   1. Since `adafruit_esp32spi_socket.py` returns a fake `Socketpool` it would be easier to follow code with more correct naming
8. Update `Adafruit_CircuitPython_MiniMQTT` to take SocketHandler in `__init__` and use it
9. Add something like `SocketHandler.lock_socket()`
   1. Which would make sure that you could always open a socket for a particular key: for example `("io.adafruit.com", 1883, "mqtt:")` so you can always connect to AdafruitIO
10. More update thoughts to come
* I am also happy to tackle https://github.com/adafruit/Adafruit_CircuitPython_Requests/issues/128 and move the handling of `_FakeSSLSocket` into `SocketHandler` for when `is_ssl is True` and `self._ssl_context is None`


## 44:20 Wrap-Up
Next meeting is Tuesday January 2nd, 2024. Happy new year!
