{"title":"PyCoder\u2019s Weekly","link":[{"@attributes":{"href":"https:\/\/pycoders.com\/feed\/hoKXr0ob","rel":"self"}},{"@attributes":{"href":"https:\/\/pycoders.com\/"}}],"updated":"2026-05-05T19:30:00+00:00","id":"https:\/\/pycoders.com\/","author":{"name":"PyCoder\u2019s Weekly"},"entry":[{"title":"Issue #733: marimo pair, Finding Bugs With LLMs, httpxy, and More (2026-05-05)","id":"https:\/\/pycoders.com\/issues\/733","link":{"@attributes":{"href":"https:\/\/pycoders.com\/issues\/733"}},"updated":"2026-05-05T19:30:00+00:00","content":"\n         <p> <span>#733 \u2013 MAY 5, 2026<\/span><br> <span><a href=\"https:\/\/pycoders.com\/issues\/733\/feed\">View in Browser \u00bb<\/a><\/span> <\/p> <p><a href=\"https:\/\/pycoders.com\"><img alt=\"The PyCoder&rsquo;s Weekly Logo\" src=\"https:\/\/cdn.pycoders.com\/37bdf31dc645f968ffb90196e5d38ff5\" style=\"max-width: 100%;\"><\/a><\/p> <hr> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16371\/feed\" target=\"_blank\">Agentic Data Science Pair Programming With <code>marimo pair<\/code><\/a><\/h3> <p style=\"margin-bottom: 0;\"> How do you add agent skills to your data science workflow? How can a coding agent assist with data wrangling and research? This week on the show, Trevor Manz from marimo joins us to discuss marimo pair.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16371\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">podcast<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16364\/feed\" target=\"_blank\">Using LLMs to Find Python C-Extension Bugs<\/a><\/h3> <p style=\"margin-bottom: 0;\"> LLM&rsquo;s can be powerful tools to help find problems with code, but without a human in the loop things can be problematic. This post talks about how one coder is approaching the challenge.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16364\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">JAKE EDGE<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16357\/feed\" target=\"_blank\">Positron: The Data Science IDE from Posit PBC<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16357\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/0b9e0c93f77f7ff0c43a061434bbdd6b\" alt><\/a> <p style=\"margin-bottom: 0;\"> Positron is a free IDE built for Python data science. AI assistance, interactive data frames, Jupyter notebooks, and instant app deployment, all in one place. Stop context-switching. Start shipping. <a href=\"https:\/\/pycoders.com\/link\/16357\/feed\" target=\"_blank\">Download free.<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16357\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">POSIT PBC<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16378\/feed\" target=\"_blank\"><code>httpxyz<\/code> One Month In<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <code>httpxyz<\/code> is a fork of <code>httpx<\/code> created one month ago. This blog post describes how the journey has gone so far and where they&rsquo;re going in the future.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16378\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MICHIEL BEIJEN<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16366\/feed\" target=\"_blank\">PyPy v7.3.22 Released<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16366\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYPY.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16385\/feed\" target=\"_blank\">PyCon US 2026: Call for Volunteers<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16385\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYCON.BLOGSPOT.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16389\/feed\" target=\"_blank\">PEP 661: Sentinel Values (Accepted)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16389\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16365\/feed\" target=\"_blank\">PEP 831: Frame Pointers Everywhere: Enabling System-Level Observability for Python (Accepted)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16365\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16387\/feed\" target=\"_blank\">PEP 820: PySlot: Unified Slot System for the C API (Accepted)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16387\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16381\/feed\" target=\"_blank\">PEP 829: Structured Startup Configuration via .site.toml Files (Accepted)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16381\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <h2>Articles &amp; Tutorials<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16392\/feed\" target=\"_blank\">Building the Async Python Task Queue I Wished Existed<\/a><\/h3> <p style=\"margin-bottom: 0;\"> If you&rsquo;ve ever written async Python for your API and then switched to synchronous code for your background tasks, you know something is off. Repid v2 is an attempt to fix that - an async-first, AsyncAPI-native task queue built over two years of production use, countless rewrites, and one hand-written AMQP 1.0 implementation.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16392\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">ALEKSUL.SPACE<\/a> \u2022 Shared by Alex<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16379\/feed\" target=\"_blank\">Inverse Sapir-Whorf and Programming Languages<\/a><\/h3> <p style=\"margin-bottom: 0;\"> The Sapir-Whorf hypothesis is the idea that the languages you speak influence the thoughts you can have. The inverse is the idea that your language limits what you can&rsquo;t but say. When applied to programming this has subtle results determining core ideas like execution order.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16379\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">LUKE PLANT<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16358\/feed\" target=\"_blank\">B2B AI Agent Auth Support<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16358\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/012e0a1cbc39d888c748f46d3b3a4e1a\" alt><\/a> <p style=\"margin-bottom: 0;\"> Your users are asking if they can connect their AI agent to your product, but you want to make sure they can do it safely and securely. <a href=\"https:\/\/pycoders.com\/link\/16358\/feed\" target=\"_blank\">PropelAuth makes that possible \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16358\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PROPELAUTH<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16376\/feed\" target=\"_blank\">What&rsquo;s New in Pip 26.1<\/a><\/h3> <p style=\"margin-bottom: 0;\"> pip 26.1 adds support for dependency cooldowns, experimental support for reading\/installing from standard lockfiles (pylock.toml), fixes several long-standing limitations of the 2020 resolver, and drops support for Python 3.9.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16376\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">RICHARD SI<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16386\/feed\" target=\"_blank\">Python Packaging Council Approved<\/a><\/h3> <p style=\"margin-bottom: 0;\"> PEP 772 established the Packaging Council, an elected group to set standards for packaging standards and tools. The PEP was recently accepted, and this post talks about the group and what it took to get here.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16386\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">JAKE EDGE<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16383\/feed\" target=\"_blank\">Choosing a Python Logging Library in 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This post compares Python&rsquo;s standard logging module, structlog, and Loguru. It includes real benchmarks, OpenTelemetry integration paths, and framework specific guidance for Django, FastAPI, and Flask<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16383\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">AYOOLUWA ISAIAH<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16396\/feed\" target=\"_blank\">\u23f0 Last Chance: Claude Code Live Course May 6\u20137<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Developers who learn to work with AI agents will have an edge that&rsquo;s hard to close. This 2-day hands-on course takes you from zero to a working Python project built entirely with Claude Code.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16396\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16393\/feed\" target=\"_blank\">Before GitHub<\/a><\/h3> <p style=\"margin-bottom: 0;\"> There is a lot of talk on the net lately about the state of GitHub. This opinion piece by Armin talks about what Open Source was like before GitHub: it was reputation-driven and full of friction.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16393\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">ARMIN RONACHER<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16390\/feed\" target=\"_blank\">It&rsquo;s Time to Redesign <code>djangoproject.com<\/code><\/a><\/h3> <p style=\"margin-bottom: 0;\"> The site that hosts the Django framework is overdue for a refresh. This post describes how they&rsquo;re going through the process and what to expect next.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16390\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">DJANGO SOFTWARE FOUNDATION<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16372\/feed\" target=\"_blank\">Testing Your Code With Python&rsquo;s <code>unittest<\/code><\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how to use Python&rsquo;s unittest framework to write unit tests for your code, including test cases, fixtures, and test suites.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16372\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">course<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16377\/feed\" target=\"_blank\">Quiz: Testing Your Code With Python&rsquo;s <code>unittest<\/code><\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16377\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16395\/feed\" target=\"_blank\">AI Coding Agents Guide: A Map of the Four Workflow Types<\/a><\/h3> <p style=\"margin-bottom: 0;\"> AI coding agents come in four types: IDE, terminal, PR, and cloud. Learn how each workflow fits into modern Python development.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16395\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16384\/feed\" target=\"_blank\">Self Hosting Apps for Python People<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Talk Python interviews Alex Kretzschmar and they talk about what it takes to move from the cloud to hosting things yourself.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16384\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TALK PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">podcast<\/span> <\/p> <\/div> <h2>Projects &amp; Code<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16362\/feed\" target=\"_blank\">cadquery: CAD Scripting Framework<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16362\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/CADQUERY<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16363\/feed\" target=\"_blank\">secure: HTTP Security Headers for Python Web Applications<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16363\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/TYPEERROR<\/a> \u2022 Shared by <a href=\"https:\/\/pycoders.com\/link\/16382\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">Caleb Kinney<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16391\/feed\" target=\"_blank\">tryke: Rust-Based, Jest-Style Test Runner<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16391\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/THEJCHAP<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16368\/feed\" target=\"_blank\">StegoForge: Zero-Dependency Python Steganography<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16368\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/NOUR833<\/a> \u2022 Shared by <a href=\"https:\/\/pycoders.com\/link\/16370\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">Nour Islem KOOLI<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16388\/feed\" target=\"_blank\">miniword: A WYSIWYG Word Processor in Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16388\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">CODEBERG.ORG<\/a><\/span> <\/p> <\/div> <h2>Events<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16374\/feed\" target=\"_blank\">Weekly Real Python Office Hours Q&amp;A (Virtual)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 6, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16374\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REALPYTHON.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16367\/feed\" target=\"_blank\">Canberra Python Meetup<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 7, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16367\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16373\/feed\" target=\"_blank\">Sydney Python User Group (SyPy)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 7, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16373\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">SYPY.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16369\/feed\" target=\"_blank\">DFW Pythoneers 2nd Saturday Teaching Meeting<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 9, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16369\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16394\/feed\" target=\"_blank\">PiterPy Meetup<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 12, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16394\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PITERPY.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16380\/feed\" target=\"_blank\">Leipzig Python User Group Meeting<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 12, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16380\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16375\/feed\" target=\"_blank\">PyCon US 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 13 to May 20, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16375\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYCON.ORG<\/a><\/span> <\/p> <\/div> <hr> <p>Happy Pythoning!<br>This was PyCoder&rsquo;s Weekly Issue #733.<br><a href=\"https:\/\/pycoders.com\/issues\/733\/feed\">View in Browser \u00bb<\/a><\/p> <img src=\"https:\/\/pycoders.com\/issues\/733\/open\/feed\" width=\"1\" height=\"1\" alt> \n        <hr \/>\n        <p><em>[ Subscribe to \ud83d\udc0d PyCoder&rsquo;s Weekly \ud83d\udc8c \u2013 Get the best Python news, articles, and tutorials delivered to your inbox once a week <a href=\"https:\/\/pycoders.com\/?utm_source=pycoders&amp;utm_medium=feed&amp;utm_campaign=footer\">&gt;&gt; Click here to learn more<\/a> ]<\/em><\/p>\n      "},{"title":"Issue #732: Web Scraping, Altair Charts, OpenAI's API, and More (2026-04-28)","id":"https:\/\/pycoders.com\/issues\/732","link":{"@attributes":{"href":"https:\/\/pycoders.com\/issues\/732"}},"updated":"2026-04-28T19:30:00+00:00","content":"\n         <p> <span>#732 \u2013 APRIL 28, 2026<\/span><br> <span><a href=\"https:\/\/pycoders.com\/issues\/732\/feed\">View in Browser \u00bb<\/a><\/span> <\/p> <p><a href=\"https:\/\/pycoders.com\"><img alt=\"The PyCoder&rsquo;s Weekly Logo\" src=\"https:\/\/cdn.pycoders.com\/37bdf31dc645f968ffb90196e5d38ff5\" style=\"max-width: 100%;\"><\/a><\/p> <hr> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16354\/feed\" target=\"_blank\"><code>browser-use<\/code> vs. Playwright: Which to Pick for Web Scraping?<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Follow along in this walk-through building a Hacker News synthesizer with browser-use, then see it fail on a harder Newegg scraping task. Includes a side-by-side comparison with Playwright and a breakdown of when each tool is the right call.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16354\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">CODECUT.AI<\/a> \u2022 Shared by <a href=\"https:\/\/pycoders.com\/link\/16351\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">Khuyen Tran<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16343\/feed\" target=\"_blank\">Altair: Declarative Charts With Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Build interactive Python charts the declarative way with Altair. Map data to visual properties and add linked selections. No JavaScript required.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16343\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16325\/feed\" target=\"_blank\">Positron: The Data Science IDE from Posit PBC<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16325\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/0eabf4213cfed6fb9f8ad2aeedf5005d\" alt><\/a> <p style=\"margin-bottom: 0;\"> Positron is a free IDE built for Python data science. AI assistance, interactive data frames, Jupyter notebooks, and instant app deployment, all in one place. Stop context-switching. Start shipping. <a href=\"https:\/\/pycoders.com\/link\/16325\/feed\" target=\"_blank\">Download free.<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16325\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">POSIT PBC<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16339\/feed\" target=\"_blank\">Leverage OpenAI&rsquo;s API in Your Python Projects<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how to use the ChatGPT API with Python&rsquo;s openai library to send prompts, control AI behavior with roles, and get structured outputs.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16339\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">course<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16341\/feed\" target=\"_blank\">Quiz: Leverage OpenAI&rsquo;s API in Your Python Projects<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16341\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16344\/feed\" target=\"_blank\">Python Software Foundation Fellow Members for Q1 2026!<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16344\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON SOFTWARE FOUNDATION<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16335\/feed\" target=\"_blank\">PEP 708: Extending the Repository API to Mitigate Dependency Confusion Attacks (Rejected)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16335\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16347\/feed\" target=\"_blank\">PEP 806: Mixed Sync\/Async Context Managers With Precise Async Marking (Rejected)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16347\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16352\/feed\" target=\"_blank\">PEP 833: Freezing the HTML Simple Repository API (Draft)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16352\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <h2>Articles &amp; Tutorials<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16334\/feed\" target=\"_blank\">Fixing a Memory &ldquo;Leak&rdquo; From Python 3.14&rsquo;s Incremental Garbage Collection<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Adam encountered an out-of-memory error while migrating a client project to Python 3.14. The issue occurred when running Django\u2019s database migration command on a limited-resource server, and seemed to be caused by the new incremental garbage collection algorithm in Python 3.14.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16334\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">ADAM JOHNSON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16342\/feed\" target=\"_blank\">Logging to File and to Textual Console<\/a><\/h3> <p style=\"margin-bottom: 0;\"> When writing TUI applications in Textual you can&rsquo;t just print out your debug info since the terminal is controlled by the framework. This article shows you how to log and use Textual&rsquo;s built-in debug console.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16342\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MIKE DRISCOLL<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16326\/feed\" target=\"_blank\">Beyond Basic RAG: Build Persistent AI Agents<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Master next-gen AI with Python notebooks for agentic reasoning, memory engineering, and multi-agent orchestration. Scale apps using production-ready patterns for LangChain, LlamaIndex, and high-performance vector search. <a href=\"https:\/\/pycoders.com\/link\/16326\/feed\" target=\"_blank\">Explore &amp; Star on GitHub.<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16326\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">ORACLE<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16353\/feed\" target=\"_blank\">Read the Docs Now Supports <code>uv<\/code> Natively<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Popular open source documentation site Read the Docs has announced they now support native <code>uv<\/code> in <code>.readthedocs.yaml<\/code> for Python dependency installation. Learn how to use it in your configurations<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16353\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">READ THE DOCS<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16332\/feed\" target=\"_blank\">PyTexas 2026 Recap<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Per-talk notes from PyTexas 2026 in Austin: Hynek on domain modeling, Dawn Wages on specialization, MCP security, PEP 810 lazy imports, free-threading, Ruff, ty, uv, supply chain.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16332\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">BERN\u00c1T G\u00c1BOR<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16338\/feed\" target=\"_blank\">The Carbon Footprint of Wagtail AI<\/a><\/h3> <p style=\"margin-bottom: 0;\"> One of the package maintainers for Wagtail AI shares his method for measuring the carbon impact of the different AI tasks users can do and goes over the initial results.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16338\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">WAGTAIL.ORG<\/a> \u2022 Shared by Meagen Voss<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16329\/feed\" target=\"_blank\">Gemini CLI vs Claude Code: Which to Choose for Python Tasks<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Gemini CLI vs Claude Code: compare setup, performance, code quality, and cost to find the right Python AI coding tool for your workflow.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16329\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16328\/feed\" target=\"_blank\">Learn the Agentic Coding Workflow That Actually Works on Real Projects<\/a><\/h3> <p style=\"margin-bottom: 0;\"> 65% of Python developers are stuck using AI for small tasks that fall apart on anything real. This 2-day live course (May 6-7 via Zoom) walks you through building a complete Python CLI app with Claude Code, from an empty directory to a shipped project on GitHub.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16328\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16331\/feed\" target=\"_blank\">Implementing OpenTelemetry in FastAPI<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how you can observe your FastAPI web apps with OpenTelemetry, including how to integrate it and why it is important.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16331\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">SIGNOZ.IO<\/a> \u2022 Shared by <a href=\"https:\/\/pycoders.com\/link\/16349\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">Dhruv Ahuja<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16356\/feed\" target=\"_blank\">Building a Python Library in 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> So you want to build a Python library in 2026? Here&rsquo;s everything you need to know about the state of the art.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16356\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">STEPHEN IF<\/a><\/span> <\/p> <\/div> <h2>Projects &amp; Code<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16346\/feed\" target=\"_blank\">Local Usage PyPI Alternative With Vulnerability Scanning<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Very interesting project<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16346\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/RUSTEDBYTES<\/a> \u2022 Shared by Yehor Smoliakov<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16340\/feed\" target=\"_blank\">typeform: Type-Safe UI\/CLI Generator Powered by Pydantic<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16340\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/STHITAPRAJNAS<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16336\/feed\" target=\"_blank\">vibescore: One-Command Quality Score for Any Python Project<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16336\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/STEF41<\/a> \u2022 Shared by Anonymous<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16337\/feed\" target=\"_blank\">dash: Data Apps &amp; Dashboards for Python<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16337\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/PLOTLY<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16350\/feed\" target=\"_blank\">profiling-explorer: Table-Based Profile Exploration Tool<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16350\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/ADAMCHAINZ<\/a><\/span> <\/p> <\/div> <h2>Events<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16348\/feed\" target=\"_blank\">Weekly Real Python Office Hours Q&amp;A (Virtual)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 29, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16348\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REALPYTHON.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16330\/feed\" target=\"_blank\">PyCamp Spain 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 30 to May 4, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16330\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYCAMP.ES<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16355\/feed\" target=\"_blank\">PyDelhi User Group Meetup<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 2, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16355\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16333\/feed\" target=\"_blank\">PyBodensee Monthly Meetup<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 4, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16333\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYBODENSEE.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16345\/feed\" target=\"_blank\">IndyPy: Lightning Talks<\/a><\/h3> <p style=\"margin-bottom: 0;\"> May 5 to May 6, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16345\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <hr> <p>Happy Pythoning!<br>This was PyCoder&rsquo;s Weekly Issue #732.<br><a href=\"https:\/\/pycoders.com\/issues\/732\/feed\">View in Browser \u00bb<\/a><\/p> <img src=\"https:\/\/pycoders.com\/issues\/732\/open\/feed\" width=\"1\" height=\"1\" alt> \n        <hr \/>\n        <p><em>[ Subscribe to \ud83d\udc0d PyCoder&rsquo;s Weekly \ud83d\udc8c \u2013 Get the best Python news, articles, and tutorials delivered to your inbox once a week <a href=\"https:\/\/pycoders.com\/?utm_source=pycoders&amp;utm_medium=feed&amp;utm_campaign=footer\">&gt;&gt; Click here to learn more<\/a> ]<\/em><\/p>\n      "},{"title":"Issue #731: Visualize ML, Vector DBs, Type Checker Comparison, and More (2026-04-21)","id":"https:\/\/pycoders.com\/issues\/731","link":{"@attributes":{"href":"https:\/\/pycoders.com\/issues\/731"}},"updated":"2026-04-21T19:30:00+00:00","content":"\n         <p> <span>#731 \u2013 APRIL 21, 2026<\/span><br> <span><a href=\"https:\/\/pycoders.com\/issues\/731\/feed\">View in Browser \u00bb<\/a><\/span> <\/p> <p><a href=\"https:\/\/pycoders.com\"><img alt=\"The PyCoder&rsquo;s Weekly Logo\" src=\"https:\/\/cdn.pycoders.com\/37bdf31dc645f968ffb90196e5d38ff5\" style=\"max-width: 100%;\"><\/a><\/p> <hr> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16323\/feed\" target=\"_blank\">Machine Learning Visualized<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This is a series of Jupyter notebooks that help visualize the algorithms that are used in machine learning. Learn more about neural networks, regression, k-means clustering, and more.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16323\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GAVING HUNG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16301\/feed\" target=\"_blank\">Vector Databases and Embeddings With ChromaDB<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how to use ChromaDB, an open-source vector database, to store embeddings and give context to large language models in Python.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16301\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">course<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16294\/feed\" target=\"_blank\">Wallaby for Python runs Tests as you Type and Streams Results Next to Code, Plus AI Context<\/a><\/h3> <a href=\"https:\/\/pycoders.com\/link\/16294\/feed\" target=\"_blank\"><img style=\"float:right; margin-left: 16px; margin-top: 7px; width: 17%;\" src=\"https:\/\/cdn.pycoders.com\/6e033334b6a6ea979e931b8106a21780\" alt><\/a> <p style=\"margin-bottom: 0;\"> Wallaby brings pytest \/ unittest results, runtime values, coverage, errors, and time-travel debugging into VS Code, so you can fix Python faster and give Copilot, Cursor, or Claude the execution context they need to stop guessing. <a href=\"https:\/\/pycoders.com\/link\/16294\/feed\" target=\"_blank\">Try it free, now in beta \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16294\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">WALLABY TEAM<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16295\/feed\" target=\"_blank\">Python Type Checker Comparison: Speed and Memory Usage<\/a><\/h3> <p style=\"margin-bottom: 0;\"> A benchmark comparison of speed and memory usage across Python type checkers including Pyrefly, Ty, Pyright, and Mypy.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16295\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">AARON POLLACK<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16314\/feed\" target=\"_blank\">PEP 831: Frame Pointers Everywhere: Enabling System-Level Observability for Python (Draft)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> This PEP proposes two things:<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16314\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16311\/feed\" target=\"_blank\">PEP 800: Solid Bases in the Type System (Accepted)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16311\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16304\/feed\" target=\"_blank\">PEP 772: Packaging Council Governance Process (Accepted)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16304\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16324\/feed\" target=\"_blank\">PEP 832: Virtual Environment Discovery (Draft)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16324\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16309\/feed\" target=\"_blank\">PEP 830: Add Timestamps to Exceptions and Tracebacks (Draft)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16309\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <h2>Discussions<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16312\/feed\" target=\"_blank\">Reverting the Incremental GC in Python 3.14 and 3.15<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16312\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON.ORG<\/a><\/span> <\/p> <\/div> <h2>Articles &amp; Tutorials<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16315\/feed\" target=\"_blank\">Reassessing the LLM Landscape &amp; Summoning Ghosts<\/a><\/h3> <p style=\"margin-bottom: 0;\"> What are the current techniques being employed to improve the performance of LLM-based systems? How is the industry shifting from post-training towards context engineering and multi-agent orchestration? This week on the show, Jodie Burchell, data scientist and Python Advocacy Team Lead at JetBrains, returns to discuss the current AI coding landscape.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16315\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">podcast<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16307\/feed\" target=\"_blank\">Security Best Practices Featuring <code>uv<\/code> and <code>pip<\/code><\/a><\/h3> <p style=\"margin-bottom: 0;\"> This collection of security practices explains how to best use your package management tools to help avoid malicious packages. Example: implement a cool-down period; most malicious packages are found quickly, by not installing on the day of a release your chances of getting something bad go down.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16307\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/LIRANTAL<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16293\/feed\" target=\"_blank\">Beyond Basic RAG: Build Persistent AI Agents<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Master next-gen AI with Python notebooks for agentic reasoning, memory engineering, and multi-agent orchestration. Scale apps using production-ready patterns for LangChain, LlamaIndex, and high-performance vector search. <a href=\"https:\/\/pycoders.com\/link\/16293\/feed\" target=\"_blank\">Explore &amp; Star on GitHub \u2192<\/a><br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16293\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">ORACLE<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;background-color:#ffffe0;\">sponsor<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16316\/feed\" target=\"_blank\">The Economics of Software Teams<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Subtitled &ldquo;Why Most Engineering Organizations Are Flying Blind&rdquo;, this article is a breakdown of what software development teams actually cost, what they need to generate to be financially viable, and why most organizations have no visibility into either number.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16316\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">VIKTOR CESSAN<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16319\/feed\" target=\"_blank\">OWASP Top 10 (2025 List) for Python Devs<\/a><\/h3> <p style=\"margin-bottom: 0;\"> The OWASP Top 10 is a list of common security vulnerabilities in code, like SQL injection. The list has recently been updated and Talk Python interviews Tanya Janca to discuss all the big changes this time around.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16319\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">TALK PYTHON<\/a><\/span> <span style=\"color: #AAAAAA;text-transform:uppercase;padding:1px 4px;border:1px solid #dddddd;margin-left:4px;font-size:0.8em;border-radius:2px;\">podcast<\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16317\/feed\" target=\"_blank\">Textual: An Intro to DOM Queries<\/a><\/h3> <p style=\"margin-bottom: 0;\"> The Textual TUI framework uses a tree structure to store all of the widgets on the page. This DOM is query-able, giving you the ability to find widgets on the fly in your code.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16317\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MIKE DRISCOLL<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16321\/feed\" target=\"_blank\">Reflecting on 5 Years as the Developer in Residence<\/a><\/h3> <p style=\"margin-bottom: 0;\"> \u0141ukasz Langa is stepping down as the Python Software Foundation&rsquo;s first CPython Developer in residence. This post talks about his experience there and everything accomplished.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16321\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">PYTHON SOFTWARE FOUNDATION<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16306\/feed\" target=\"_blank\">Decoupling Your Business Logic From the Django ORM<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Where should I keep my business logic? This is a perennial topic in Django. This article proposes a continuum of cases, each with increasing complexity.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16306\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">CARLTON GIBSON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16302\/feed\" target=\"_blank\">How to Add Features to a Python Project With Codex CLI<\/a><\/h3> <p style=\"margin-bottom: 0;\"> Learn how to use Codex CLI to add features to Python projects via the terminal. Master AI-powered coding without needing a browser or IDE plugins.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16302\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REAL PYTHON<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16303\/feed\" target=\"_blank\">PyPI Has Completed Its Second Audit<\/a><\/h3> <p style=\"margin-bottom: 0;\"> PyPI has completed its second external security audit. This post shows all the things found and what they&rsquo;re doing about each of them.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16303\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MIKE FIEDLER<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16296\/feed\" target=\"_blank\">New Technical Governance: Request for Community Feedback<\/a><\/h3> <p style=\"margin-bottom: 0;\"> The Django Steering Council has proposed new governance mechanism and is looking for feedback from the community.<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16296\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">DJANGO SOFTWARE FOUNDATION<\/a><\/span> <\/p> <\/div> <h2>Projects &amp; Code<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16320\/feed\" target=\"_blank\">django-modern-rest: REST With Types and Async Support<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16320\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/WEMAKE-SERVICES<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16308\/feed\" target=\"_blank\">django-freeze: Convert Django Sites to Static Ones<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16308\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/FABIOCACCAMO<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16322\/feed\" target=\"_blank\">spy: SPy the Compilable Python-Like Language<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16322\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/SPYLANG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16299\/feed\" target=\"_blank\">prettytable: Tabular Data in a Visually Appealing ASCII<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16299\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/PRETTYTABLE<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16313\/feed\" target=\"_blank\">endcord: Feature Rich Discord TUI Client<\/a><\/h3> <p style=\"margin-bottom: 0;\"> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16313\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GITHUB.COM\/SPARKLOST<\/a><\/span> <\/p> <\/div> <h2>Events<\/h2> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16305\/feed\" target=\"_blank\">Weekly Real Python Office Hours Q&amp;A (Virtual)<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 22, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16305\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">REALPYTHON.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16318\/feed\" target=\"_blank\">The Carpentries<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 22 to April 24, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16318\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">INSTATS.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16297\/feed\" target=\"_blank\">AgentCamp Amsterdam 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 23, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16297\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">MEETUP.COM<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16300\/feed\" target=\"_blank\">North Bay Python 2026<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 25 to April 27, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16300\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">NORTHBAYPYTHON.ORG<\/a><\/span> <\/p> <\/div> <div> <h3 style=\"margin-bottom: 0;\"><a href=\"https:\/\/pycoders.com\/link\/16298\/feed\" target=\"_blank\">Python Sheffield<\/a><\/h3> <p style=\"margin-bottom: 0;\"> April 28, 2026<br> <span style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;font-size:0.8em;text-transform:normal;\"><a href=\"https:\/\/pycoders.com\/link\/16298\/feed\" style=\"color: #AAAAAA;font-weight: normal;text-decoration: none;word-wrap: break-word;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;\" target=\"_blank\">GOOGLE.COM<\/a><\/span> <\/p> <\/div> <hr> <p>Happy Pythoning!<br>This was PyCoder&rsquo;s Weekly Issue #731.<br><a href=\"https:\/\/pycoders.com\/issues\/731\/feed\">View in Browser \u00bb<\/a><\/p> <img src=\"https:\/\/pycoders.com\/issues\/731\/open\/feed\" width=\"1\" height=\"1\" alt> \n        <hr \/>\n        <p><em>[ Subscribe to \ud83d\udc0d PyCoder&rsquo;s Weekly \ud83d\udc8c \u2013 Get the best Python news, articles, and tutorials delivered to your inbox once a week <a href=\"https:\/\/pycoders.com\/?utm_source=pycoders&amp;utm_medium=feed&amp;utm_campaign=footer\">&gt;&gt; Click here to learn more<\/a> ]<\/em><\/p>\n      "}]}