Python Bytes

Michael Kennedy and Brian Okken
Python Bytes
Senaste avsnittet

50 avsnitt

  • Python Bytes

    #473 A clean room rewrite?

    2026-03-16 | 46 min.
    Topics covered in this episode:

    chardet ,AI, and licensing

    refined-github

    pgdog: PostgreSQL connection pooler, load balancer and database sharder

    Agentic Engineering Patterns

    Extras

    Joke

    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Our courses at Talk Python Training

    The Complete pytest Course

    Patreon Supporters
    Connect with the hosts

    Michael: @[email protected] / @mkennedy.codes (bsky)

    Brian: @[email protected] / @brianokken.bsky.social

    Show: @[email protected] / @pythonbytes.fm (bsky)
    Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too.
    Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

    Michael #1: chardet ,AI, and licensing

    Thanks Ian Lessing

    Wow, where to start?

    A bit of legal precedence research.

    Chardet dispute shows how AI will kill software licensing, argues Bruce Perens on the Register

    Also see this GitHub issue.

    Dan Blanchard, maintainer of a Python character encoding detection library called chardet, released a new version of the library under a new software license. (LGPL → MIT)

    Dan is allowed to make this change because v7 is a complete “clean room” rewrite using AI

    BTW, v7 is WAY better:

    The result is a 48x increase in detection speed for a project that lives in the hot loops of many projects. That will lead to noticeable performance increases for literally millions of users (the package gets ~130M downloads per month).

    It paves a path towards inclusion in the standard library (assuming they don’t institute policies against using AI tools).

    Thread-safe detect() and detect_all() with no measurable overhead; scales on free-threaded Python 3.13t+

    An individual claiming to be Mark Pilgrim, the original creator of the library, opened an issue in the project's GitHub repo arguing that Blanchard had no right to change the software license, citing the LPGL requirement that the license remain unchanged.

    A 'complete rewrite' is irrelevant, since they had ample exposure to the originally licensed code (i.e. this is not a 'clean room' implementation).

    Blanchard disagreed, citing how version 7.0.0 and 6.0.0 compare when subjected to JPlag, a library for detecting plagiarism.

    Blanchard told The Register he had wanted to get chardet added to the Python standard library for more than a decade since it’s a core dependency to most Python projects.

    Brian #2: refined-github

    Suggested by Matthias Schöttle

    A browser plugin that improves the GitHub experience

    A sampling

    Adds a build/CI status icon next to the repo’s name.

    Adds a link back to the PR that ran the workflow.

    Enables tab and shift tab for indentation in comment fields.

    Auto-resizes comment fields to fit their content and no longer show scroll bars.

    Highlights the most useful comment in issues.

    Changes the default sort order of issues/PRs to Recently updated.

    But really, it’s a huge list of improvements

    Michael #3: pgdog: PostgreSQL connection pooler, load balancer and database sharder

    PgDog is a proxy for scaling PostgreSQL.

    It supports connection pooling, load balancing queries and sharding entire databases.

    Written in Rust, PgDog is fast, secure and can manage thousands of connections on commodity hardware.

    Features

    PgDog is an application layer load balancer for PostgreSQL

    Health Checks: PgDog maintains a real-time list of healthy hosts. When a database fails a health check, it's removed from the active rotation and queries are re-routed to other replicas

    Single Endpoint: PgDog can detect writes (e.g. INSERT, UPDATE, CREATE TABLE, etc.) and send them to the primary, leaving the replicas to serve reads

    Failover: PgDog monitors Postgres replication state and can automatically redirect writes to a different database if a replica is promoted

    Sharding: PgDog is able to manage databases with multiple shards

    Brian #4: Agentic Engineering Patterns

    Simon Willison

    So much great stuff here, especially

    Anti-patterns: things to avoid

    And 3 sections on testing

    Red/green TDD

    First run the test

    Agentic manual testing

    Extras

    Brian:

    <code>uv python upgrade</code> will upgrade all versions of Python installed with uv to latest patch release

    suggested by John Hagen

    Coding After Coders: The End of Computer Programming as We Know It

    NY Times Article

    Suggested by Christopher

    Best quote: “Pushing code that fails pytest is unacceptable and embarrassing.”

    Michael:

    Talk Python Training users get a better account dashboard

    Package Managers Need to Cool Down

    Will AI Kill Open Source, article + video

    My Always activate the venv is now a zsh-plugin, sorta.

    Joke: Ergonomic keyboard

    Also pretty good and related:

    <code>Claude Code Mandated</code>

    Links

    legal precedence research

    Chardet dispute shows how AI will kill software licensing, argues Bruce Perens

    this GitHub issue

    citing

    JPlag

    refined-github

    Agentic Engineering Patterns

    Anti-patterns: things to avoid

    Red/green TDD

    First run the test

    Agentic manual testing

    <code>uv python upgrade</code>

    Coding After Coders: The End of Computer Programming as We Know It

    Suggested by Christopher

    a better account dashboard

    Package Managers Need to Cool Down

    Will AI Kill Open Source

    Always activate the venv

    now a zsh-plugin

    Ergonomic keyboard

    <code>Claude Code Mandated</code>

    claude-mandated.png

    blobs.pythonbytes.fm/keyboard-joke.jpeg?cache_id=a6026b
  • Python Bytes

    #472 Monorepos

    2026-03-09 | 28 min.
    Topics covered in this episode:

    Setting up a Python monorepo with uv workspaces

    cattrs: Flexible Object Serialization and Validation

    Learning to program in the AI age

    VS Code extension for FastAPI and friends

    Extras

    Joke

    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Our courses at Talk Python Training

    The Complete pytest Course

    Patreon Supporters
    Connect with the hosts

    Michael: @[email protected] / @mkennedy.codes (bsky)

    Brian: @[email protected] / @brianokken.bsky.social

    Show: @[email protected] / @pythonbytes.fm (bsky)
    Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 11am PT. Older video versions available there too.
    Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

    Brian #1: Setting up a Python monorepo with uv workspaces

    Dennis Traub

    The 3 things

    Give the Root a Distinct Name

    Use workspace = true for Inter-Package Deps

    Use importlib Mode for pytest

    Michael #2: cattrs: Flexible Object Serialization and Validation

    cattrs is a Swiss Army knife for (un)structuring and validating data in Python.

    A natural alternative/follow on from DataClass Wizard

    Converts to ←→ from dictionaries

    cattrs also focuses on functional composition and not coupling your data model to its serialization and validation rules.

    When you’re handed unstructured data (by your network, file system, database, …), cattrs helps to convert this data into trustworthy structured data.

    Batteries Included: cattrs comes with pre-configured converters for a number of serialization libraries, including JSON (standard library, orjson, UltraJSON), msgpack, cbor2, bson, PyYAML, tomlkit and msgspec (supports only JSON at this time).

    Brian #3: Learning to program in the AI age

    Jose Blanca

    “I teach a couple of introductory Python courses and I've been thinking about which advice to give to my students, that are studying how to program for the first time. I have collected my ideas in these blog posts”

    Why learning to program is as useful as ever, even with powerful AI tools available.

    How to use AI as a tutor rather than a shortcut, and why practice remains the key to real understanding.

    What the real learning objectives are: mental models, managing complexity, and thinking like a software developer.

    Michael #4: VS Code extension for FastAPI and friends

    Enhances the FastAPI development experience in Visual Studio Code

    Path Operation Explorer: Provides a hierarchical tree view of all FastAPI routes in your application.

    Search for routes: Use the Command Palette and quickly search for routes by path, method, or name.

    CodeLens links appear above HTTP client calls like client.get('/items'), letting you jump directly to the matching route definition.

    Deploy your application directly to FastAPI Cloud from the status bar with zero config.

    View real-time logs from your FastAPI Cloud deployed applications directly within VS Code.

    Install from Marketplace.

    Extras

    Brian:

    Guido van Rossum interviews key Python developers from the first 25 years

    Interview with Brett Cannon

    Interview with Thomas Wouters
    Michael:

    IntelliJ IDEA: The Documentary | An origin story video

    Cursor Joined the ACP Registry and Is Now Live in Your JetBrains IDE

    What hyper-personal software looks like

    I’m doing in-person training again (limited scope):

    On-site, hands-on AI engineering enablement for software teams with Michael

    Joke: Saas is dead
  • Python Bytes

    #471 The ORM pattern of 2026?

    2026-03-02 | 39 min.
    Topics covered in this episode:

    Raw+DC: The ORM pattern of 2026?

    pytest-check releases

    Dataclass Wizard

    SQLiteo - “native macOS SQLite browser built for normal people”

    Extras

    Joke

    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Our courses at Talk Python Training

    The Complete pytest Course

    Patreon Supporters
    Connect with the hosts

    Michael: @[email protected] / @mkennedy.codes (bsky)

    Brian: @[email protected] / @brianokken.bsky.social

    Show: @[email protected] / @pythonbytes.fm (bsky)
    Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 11am PT. Older video versions available there too.
    Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

    Michael #1: Raw+DC: The ORM pattern of 2026?

    ORMs/ODMs provide great support and abstractions for developers

    They are not the native language of agentic AI

    Raw queries are trained 100x+ more than standard ORMs

    Using raw queries at the data access optimizes for AI coding

    Returning some sort of object mapped to the data optimizes for type safety and devs

    Brian #2: pytest-check releases

    3 merged pull requests

    8 closed issues

    at one point got to 0 PR’s and 1 enhancement request

    Now back to 2 issues and 1 PR, but activity means it’s still alive and being used. so cool

    Check out changelog for all mods

    A lot of changes around supporting mypy

    I’ve decided to NOT have the examples be fully --strict as I find it reduces readability

    See tox.ini for explanation

    But src is --strict clean now, so user tests can be --strict clean.

    Michael #3: Dataclass Wizard

    Simple, elegant wizarding tools for Python’s dataclasses.

    Features

    🚀 Fast — code-generated loaders and dumpers

    🪶 Lightweight — pure Python, minimal dependencies

    🧠 Typed — powered by Python type hints

    🧙 Flexible — JSON, YAML, TOML, and environment variables

    🧪 Reliable — battle-tested with extensive test coverage

    No Inheritance Needed

    Brian #4: SQLiteo - “native macOS SQLite browser built for normal people”

    Adam Hill

    This is a fun tool, built by someone I trust.

    That trust part is something I’m thinking about a lot in these days of dev+agent built tools

    Some notes on my thoughts when evaluating

    I know mac rules around installing .dmg files not from the apple store are picky.

    And I like that

    But I’m ok with the override when something comes from a dev I trust

    The contributors are all Adam

    I’m still not sure how I feel about letting agents do commits in repos

    There’s “AGENTS” folder and markdown files in the project for agents, so Ad

    Extras

    Michael:

    PyTV Python Unplugged This Week

    IBM Crashes 11% in 4 Hours - $24 Billion Wiped Out After Anthropic's Claude Code Threatens the Entire COBOL Consulting Industry

    Loving my 40” ultrawide monitor more every day

    Updatest for updating all the mac things

    Ice has Thawed out (mac menubar app)

    Joke: House is read-only!
  • Python Bytes

    #470 A Jolting Episode

    2026-02-23 | 25 min.
    Topics covered in this episode:

    Better Python tests with inline-snapshot

    jolt Battery intelligence for your laptop

    Markdown code formatting with ruff

    act - run your GitHub actions locally

    Extras

    Joke

    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Our courses at Talk Python Training

    The Complete pytest Course

    Patreon Supporters
    Connect with the hosts

    Michael: @[email protected] / @mkennedy.codes (bsky)

    Brian: @[email protected] / @brianokken.bsky.social

    Show: @[email protected] / @pythonbytes.fm (bsky)
    Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 11am PT. Older video versions available there too.
    Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

    Brian #1: Better Python tests with inline-snapshot

    Alex Hall, on Pydantic blog

    Great for testing complex data structures

    Allows you to write a test like this:

    from inline_snapshot import snapshot
    def test_user_creation():
    user = create_user(id=123, name="test_user")
    assert user.dict() == snapshot({})

    Then run pytest --inline-snapshot=fix

    And the library updates the test source code to look like this:

    def test_user_creation():
    user = create_user(id=123, name="test_user")
    assert user.dict() == snapshot({
    "id": 123,
    "name": "test_user",
    "status": "active"
    })

    Now, when you run the code without “fix” the collected data is used for comparison

    Awesome to be able to visually inspect the test data right there in the test code.

    Projects mentioned

    inline-snapshot

    pytest-examples

    syrupy

    dirty-equals

    executing

    Michael #2: jolt Battery intelligence for your laptop

    Support for both macOS and Linux

    Battery Status — Charge percentage, time remaining, health, and cycle count

    Power Monitoring — System power draw with CPU/GPU breakdown

    Process Tracking — Processes sorted by energy impact with color-coded severity

    Historical Graphs — Track battery and power trends over time

    Themes — 10+ built-in themes with dark/light auto-detection

    Background Daemon — Collect historical data even when the TUI isn't running

    Process Management — Kill energy-hungry processes directly

    Brian #3: Markdown code formatting with ruff

    Suggested by Matthias Schoettle

    ruff can now format code within markdown files

    Will format valid Python code in code blocks marked with python, py, python3 or py3.

    Also recognizes pyi as Python type stub files.

    Includes the ability to turn off formatting with comment [HTML_REMOVED] , [HTML_REMOVED] blocks.

    Requires preview mode

    [tool.ruff.lint]
    preview = true

    Michael #4: act - run your GitHub actions locally

    Run your GitHub Actions locally! Why would you want to do this? Two reasons:

    Fast Feedback - Rather than having to commit/push every time you want to test out the changes you are making to your .github/workflows/ files (or for any changes to embedded GitHub actions), you can use act to run the actions locally. The environment variables and filesystem are all configured to match what GitHub provides.

    Local Task Runner - I love make. However, I also hate repeating myself. With act, you can use the GitHub Actions defined in your .github/workflows/ to replace your Makefile!

    When you run act it reads in your GitHub Actions from .github/workflows/ and determines the set of actions that need to be run.

    Uses the Docker API to either pull or build the necessary images, as defined in your workflow files and finally determines the execution path based on the dependencies that were defined.

    Once it has the execution path, it then uses the Docker API to run containers for each action based on the images prepared earlier.

    The environment variables and filesystem are all configured to match what GitHub provides.

    Extras

    Michael:

    Winter is coming: Frozendict accepted

    Django ORM stand-alone

    Command Book app announcement post

    Joke: Plug ‘n Paste
  • Python Bytes

    #469 Commands, out of the terminal

    2026-02-09 | 33 min.
    Topics covered in this episode:

    Command Book App

    uvx.sh: Install Python tools without uv or Python

    Ending 15 years of subprocess polling

    monty: A minimal, secure Python interpreter written in Rust for use by AI

    Extras

    Joke

    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Our courses at Talk Python Training

    The Complete pytest Course

    Patreon Supporters
    Connect with the hosts

    Michael: @[email protected] / @mkennedy.codes (bsky)

    Brian: @[email protected] / @brianokken.bsky.social

    Show: @[email protected] / @pythonbytes.fm (bsky)
    Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too.
    Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

    Michael #1: Command Book App

    New app from Michael

    Command Book App is a native macOS app for developers, data scientists, AI enthusiasts and more.

    This is a tool I've been using lately to help build Talk Python, Python Bytes, Talk Python Training, and many more applications.

    It's a bit like advanced terminal commands or complex shell aliases, but hosted outside of your terminal. This leaves the terminal there for interactive commands, exploration, short actions.

    Command Book manages commands like "tail this log while I'm developing the app", "Run the dev web server with true auto-reload", and even "Run MongoDB in Docker with exactly the settings I need"

    I'd love it if you gave it a look, shared it with your team, and send me feedback.

    Has a free version and paid version.

    Build with Swift and Swift UI

    Check it out at https://commandbookapp.com

    Brian #2: uvx.sh: Install Python tools without uv or Python

    Tim Hopper

    Michael #3: Ending 15 years of subprocess polling

    by Giampaolo Rodola

    The standard library's subprocess module has relied on a busy-loop polling approach since the timeout parameter was added to Popen.wait() in Python 3.3, around 15 years ago

    The problem with busy-polling

    CPU wake-ups: even with exponential backoff (starting at 0.1ms, capping at 40ms), the system constantly wakes up to check process status, wasting CPU cycles and draining batteries.

    Latency: there's always a gap between when a process actually terminates and when you detect it.

    Scalability: monitoring many processes simultaneously magnifies all of the above.

    + L1/L2 CPU cache invalidations

    It’s interesting to note that waiting via poll() (or kqueue()) puts the process into the exact same sleeping state as a plain time.sleep() call. From the kernel's perspective, both are interruptible sleeps.

    Here is the merged PR for this change.

    Brian #4: monty: A minimal, secure Python interpreter written in Rust for use by AI

    Samuel Colvin and others at Pydantic

    Still experimental

    “Monty avoids the cost, latency, complexity and general faff of using a full container based sandbox for running LLM generated code. “

    “Instead, it lets you safely run Python code written by an LLM embedded in your agent, with startup times measured in single digit microseconds not hundreds of milliseconds.”

    Extras

    Brian:

    Expertise is the art of ignoring - Kevin Renskers

    You don’t need to master the language. You need to master your slice.

    Learning everything up front is wasted effort.

    Experience changes what you pay attention to.

    I hate fish - Rands (Michael Lopp)

    Really about productivity systems

    And a nice process for dealing with email

    Michael:

    Talk Python now has a CLI

    New essay: It's not vibe coding - Agentic engineering

    GitHub is having a day

    Python 3.14.3 and 3.13.12 are available

    Wall Street just lost $285 billion because of 13 markdown files

    Joke: Silence, current side project!

Fler podcasts i Nyheter

Om Python Bytes

Python Bytes is a weekly podcast hosted by Michael Kennedy and Brian Okken. The show is a short discussion on the headlines and noteworthy news in the Python, developer, and data science space.
Podcast-webbplats

Lyssna på Python Bytes, Nyhetsshowen och många andra poddar från världens alla hörn med radio.se-appen

Hämta den kostnadsfria radio.se-appen

  • Bokmärk stationer och podcasts
  • Strömma via Wi-Fi eller Bluetooth
  • Stödjer Carplay & Android Auto
  • Många andra appfunktioner
Sociala nätverk
v8.8.0 | © 2007-2026 radio.de GmbH
Generated: 3/17/2026 - 3:37:05 AM