
Sign up to save your podcasts
Or


About the show
Sponsored by us! Support our work through:
Michael #1: Nod: pause your Python program and open a notebook at any line
Nod (Notebooks-on-Demand) is a JupyterLab extension by Eric Rawn that drops a notebook into a running Python program. Add a notebook() call anywhere, run the program with nod, and execution pauses there with a notebook containing all variables at that point in the call stack. Edits go back to the source file with a button, with cells converted to code and markdown to comments via Jupytext.
Calvin #2: Polars 2.0 ships: streaming engine by default, spill-to-disk, and a row-order gotcha
Michael #3: django-cachalot caches your ORM queries and invalidates them for you
django-cachalot is a Django package that caches ORM queries and invalidates them automatically when the underlying data changes. Install it, add one line to INSTALLED_APPS, and read queries run through your cache backend with no code changes. The trick is that it caches whole tables, so any write flushes that table's cached queries, making it a strong fit for read-heavy sites and a poor one for frequently updated tables. It supports Django 4.2 through 6.1 and Python 3.8 to 3.14.
Calvin #4: Towards async transactions in Django
Extras
Calvin:
Joke: LGTM (Looks Good to Me) - Claude Opus 5.5 music video
About the show
Brian #1: A quick chat with Brian looking back
Nick #2: Jev and the Case for Boring ML
Vincent Warmerdam from marimo benchmarked Jev, a new "System 1" decision model from TypeSafe AI. In his video It handles classification without the latency or token cost of generative LLMs, which raises a practical question for data teams: where does this fit alongside traditional machine learning?
Brett #3: Announcing the 2026 Python Packaging Council Election Results!
The inaugural Python packaging council (PPC) has been elected and started meeting!
Calvin #4: Parsing JSON at tens of gigabytes per second in Python
Michael #5: Grinberg's annual benchmark says 3.15 is flat, but the JIT finally pays off
Miguel Grinberg ran his annual release-eve benchmark, comparing Python 3.15.0rc3 against every interpreter back to 3.10, plus PyPy, Node.js, and Rust, using his usual two CPU-bound programs: recursive Fibonacci and bubble sort. The standard 3.15 interpreter lands within noise of 3.14 on his workloads, while the experimental JIT build is roughly 20 to 28 percent faster and finally beats the standard interpreter, which has not happened before. The free-threaded build holds up well in the 4-thread tests. He is candid that the workloads are just Fibonacci and bubble sort, and the official release lands days after his measurements.
Carol #6: Transparent and trusted AI Our Way - Satyrn AI
Paul Everitt, Georgi Ker and I were discussing Python, its community and AI back in March at the JetBrains PyTV event. Python is the foundational language for data science and AI tools. We wanted something that reflects the Python community's strengths: language and learning.
Extras
Michael:
Calvin:
Nick:
Brett:
Joke:
About the show
Sponsored by us! Support our work through:
Connect with the hosts
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am 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: PEP 824 brings ?? and ??= to Python for None handling
PEP 824, a new draft from Marc Mueller sponsored by Guido van Rossum, proposes None-coalescing operators for Python 3.16. The ?? operator returns its left-hand side unless that value is None, and ??= assigns a fallback only when the target is None. It revives the long-deferred PEP 505 from over a decade ago, trimmed to just these two operators, with None-aware access split off into PEP 823. The goal is replacing verbose is None checks with something closer to or, but keyed on None instead of truthiness.
Calvin #2: Python 3.15 gets a surprise RC3, and Python 3.10 reaches end of life
Michael #3: asyncio.shield
In async Python, every await is a point where your coroutine can be stopped. If someone cancels the task, asyncio raises CancelledError at whichever await the coroutine is paused on, and nothing after that line runs.
That's reasonable for a slow page nobody is waiting on anymore. It's a problem for a handler that writes to the database in two steps:
A podcast app requests the MP3, gets what it needs, and hangs up. If it hangs up while step 2 is in flight, step 1 has already landed and step 2 never runs. Nothing is logged and nothing reaches Sentry, because a cancelled request isn't an error. The two collections just drift apart.
I ran this on Python 3.14. The "client" hangs up 15 ms into a pair of 10 ms writes:
The unshielded version loses the increment. The shielded version finishes it, even though the request was cancelled. The full script is in the scratchpad as shield_demo.py if you want it for the show.
shield(task) protects the inner task from a cancellation aimed at the outer one. The handler still gets CancelledError immediately, so nothing after that line runs, but the inner task keeps going until both writes finish. The traps:
Calvin #4: Pyxel: the retro game engine for Python
Extras
Calvin:
Joke: I was there.
About the show
Sponsored by us! Support our work through:
Connect with the hosts
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am 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.
Calvin #1: MemTensor / MemoryOS PyPI package hijacked via a malicious build backend
Michael #2: TinyMongo
Calvin #3: Jev: what to know
Michael #4: One innocent dict read makes attribute access permanently slower
Timofei Ivankov benchmarks a CPython internals surprise: since 3.11, attribute access skips the instance dict entirely. A specialized opcode reads the attri.bute at a fixed byte offset in the object's inline values array. Read obj.__dict__ once, though, and the dict gets materialized, the object loses that specialized path for the rest of its life, and a million-iteration loop goes from 33 ms to 51 ms on CPython 3.14. vars() and copy.copy() trigger the same thing, so a debugging print or a shallow copy in code touching your hot objects quietly makes every later attribute access roughly 1.5x slower.
Extras
Calvin:
Joke: Shipping a button in 2026…
Sponsored by Logfire from Pydantic: pythonbytes.fm/logfire
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am 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: Tachyon: A sampling profiler ships in Python 3.15's stdlib
Calvin #2: Python Workers are now generally available on Cloudflare
Calvin #3: Flet 1.0 - build cross-platform apps in Python
Michael #4: marimo-book: Build static books from marimo notebooks
marimo-book is a Jupyter-Book-style static site generator built specifically for marimo .py notebooks. It ships polished multi-page sites with Material for MkDocs theming, full-text search, dark mode, and code copy, plus a content-hashed incremental build cache that drops rebuilds from 100+ seconds to roughly 3 seconds on real books. Standout extras include anywidget rendering without a kernel, static reactivity for discrete sliders via pre-rendered lookup tables, an opt-in WASM/Pyodide mode per chapter, and per-chapter launch buttons.
Extras
Calvin:
Michael:
Joke: You have homework (no really ;) )
Watch Interview with Big Data engineer in 2026 by Kai Lentit
Sponsored by Logfire from Pydantic: pythonbytes.fm/logfire
Connect with the hosts
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am PT. Older video versions available there too.
Finally, if you want an artisanal 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.
Calvin #1: Pandas Should Go Extinct
Michael #2: Pydantic-pint puts real-world units in your Pydantic models
Pydantic-pint bridges Pydantic and Pint so models can validate physical quantities like 4m or 12 meters instead of bare floats. Fields annotated with PydanticPintQuantity parse user input, convert between compatible units, and serialize quantities back out as strings. That closes a real gap for anything consuming API payloads, config files, or sensor data with measurements, letting you enforce units at the validation boundary instead of hoping every caller remembered them.
Calvin #3: How Libraries Run Rust Inside Python (With PyO3)
Michael #4: AWS acquires DuckLabs
Thank you Dylan McConnell.
What does this mean for the DuckDB ecosystem?
DuckDB is the open-source in-process analytical SQL engine. MIT licensed. The IP is not owned by any company - it's held by the nonprofit DuckDB Foundation, which was created when the team spun out of CWI Amsterdam. Peter Boncz, the CWI representative on the Foundation board, describes it as the entity that holds all IP of open-source DuckDB.
DuckLabs (ducklabs.com) is the company, formerly branded DuckDB Labs. Founded a little over five years ago by Hannes Mühleisen and Mark Raasveldt to give the DuckDB team a stable long-term home, bootstrapped deliberately instead of taking VC, grown to 30+ people in Amsterdam, funded by support and feature-prioritization contracts. It employs the core devs. It does not own DuckDB.
DuckLake is one of three projects DuckLabs builds, what they call the Duck Stack: DuckDB, DuckLake, and Quack. DuckLake is the lakehouse format that puts catalog metadata in a SQL database instead of in files on object storage. Quack is newer - an RPC-style protocol that turns DuckDB into a client-server system where both ends are DuckDB instances, slated to stabilize in DuckDB v2.0 in September 2026.
MotherDuck is a separate Seattle company, Jordan Tigani's, selling serverless hosted DuckDB. It was started in partnership with DuckDB Labs and has worked closely with Hannes and Mark for four years. It contracted DuckLabs for engineering work and contributes heavily upstream - three of its engineers are among the top 10 outside contributors to DuckDB. It also sells its own DuckLake offering. Customer and collaborator, never owner.
What the AWS post changes. Amazon bought the company, not the project. DuckLabs joined AWS effective September 1, with the process concluding August 31, 2026. Hannes and Mark keep leading the team and the project's technical direction, the team stays in Amsterdam, and DuckDB stays MIT under the Foundation. AWS gets the people and a direct line to the roadmap. The license protects your code, not your priorities.
Three second-order effects worth tracking:
The Foundation board is the real question. It has three directors: Mühleisen, Raasveldt, and Boncz. Two now work for AWS. Commentary on the deal has focused on exactly this - the license protects the code, not the roadmap. The announced counterweight is governance: a technical advisory board on the Foundation, and opening the extension stack so extensions signed by other developers can run in DuckDB.
MotherDuck immediately moved into the business DuckLabs vacated. It now sells DuckDB enterprise support, which it had avoided because it didn't want to compete with DuckLabs' business model, and says it has explicit blessing from Hannes and Mark now that they're joining Amazon. It also bought Tower.dev the day before the AWS announcement.
Everyone expects an AWS DuckDB service. Tigani says Amazon will likely release one eventually, and welcomes the competition, citing Redshift's failure to slow Snowflake on AWS. The groundwork is already visible: Amazon Quick uses DuckDB to query S3 Tables and has processed over 2.5B queries with it since launching in October 2025.
The DuckLake angle is the one to watch. AWS is heavily committed to Iceberg through S3 Tables, and it just acquired the team behind a competing lakehouse format. The stated plan is to use DuckDB, DuckLake, and Quack together to power a new generation of data services, but which format wins internal priority is unannounced.
Extras
Calvin:
Michael:
Joke: We’re agentic now
Sponsored by us! Support our work through:
Connect with the hosts
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am PT. Older video versions available there too.
Finally, if you want an artisanal 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: EuroPython 2026 videos are online
The EuroPython Society has published all 117 recordings from EuroPython 2026 on the official EuroPython Conference YouTube channel. The conference ran July 13-19 in Krakow, Poland and celebrated the conference series' 25th anniversary. The playlist covers keynotes, panels, lightning talks, and full talk recordings across Python core, web, DevOps, data/ML, embedded, and other tracks.
Calvin #2: The State of Django 2026: Boring is so back
Michael #3: htmx 4.0.0 has been released
After 8 months of work, the htmx team shipped 4.0.0, a rewrite that moves internals from XMLHttpRequest to fetch() while keeping the API almost identical to htmx 2. Three changes may need action: attribute inheritance is now explicit via an :inherited suffix, event names follow a htmx:phase:action pattern, and history no longer caches pages in localStorage. Additions include built-in morph swaps, the new hx-partial tag, and many core extensions. htmx 2 stays supported and remains latest on npm until early 2027.
Calvin #4: 🐍 Functionally Zen
Extras
Calvin:
Michael:
Joke: Makes you look like this?
About the show
Sponsored by us!
Support our work through:
Connect with the hosts
Join us on YouTube at pythonbytes.fm/live to be part of the audience.
Finally, if you want an artisanal digest of every week of the show notes in email form?
Calvin #1: OpenAI's Python SDK has migrated to HTTPX2
Michael #2: TMOG - Native Task Manager for macOS, Windows, and Linux
A native, deeply instrumented system monitor for macOS, Windows, and Linux, now in public beta - from Plummers' Software, i.e. Dave Plummer, who wrote the original Windows Task Manager and donated it to Microsoft in 1995.
Calvin #3: wrapture - one wrapper for mocking, tracing, and observability
Michael #4: linkedin2md: turn your LinkedIn export into 40+ Markdown files
Via Juan Manuel Daza - a Python CLI that unpacks LinkedIn's data-export ZIP into clean, per-category Markdown you can drop straight into an LLM.
Extras
Calvin:
Michael:
Joke: Tao of Programming: Book 5 Maintenance
About the show
Sponsored by Logfire from Pydantic: pythonbytes.fm/logfire
Connect with the hosts
Michael #1: Web UIs for your reverse proxy
Traefik, nginx, and Caddy all sit in front of a lot of self-hosted infrastructure, and all three are configured by hand-editing files. Three active projects put a control plane on top: Traefik Manager (Python + Flask), Nginx UI (Go + Vue), and caddy/ui (React + Node). All three are additive rather than replacements - none of them take ownership of your config away from you - which is the part that matters when the thing has write access to production routing.
Calvin #2: Wagtail 8.0 is hot off the presses
Link: https://github.com/wagtail/wagtail/releases/tag/v8.0
Sponsor: Logfire from Pydantic
Your AI agent failed at 2am. Was it the model? A tool call? The database? Most observability tools can't tell you, because they only see part of your stack.
Calvin #3: RISC-V is now officially supported by CPython
Link: https://blog.python.org/2026/08/riscv-now-officially-supported/
Michael #4: Django’s annual releases make every version an LTS
Starting with Django 2028, Django will move to one January feature release per year, adopt calendar-based version numbers, and support every release for three years. The old distinction between standard and LTS releases disappears, giving teams a predictable annual upgrade path that aligns more closely with Python’s own release and support cadence.
Extras
Calvin:
Joke: The Tao of Programming - Book Seven: Corporate Wisdom
Sponsored by Logfire from Pydantic pythonbytes.fm/logfire
This episode is brought to you by Pydantic Logfire. It's observability for AI apps from the team behind Pydantic - agents, LLMs, APIs, database, and infrastructure in a single trace, queried with Postgres-compatible SQL. Your coding agent can query it too, through their MCP server. I'll tell you more later.
Connect with the hosts
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.
Calvin #1: Python 3.12.14, 3.11.16, 3.10.21 - security releases
https://blog.python.org/2026/08/python-31214-31116-31021/
Michael #2: Codeberg’s AI-code ban tests its role as a GitHub alternative
Sponsor: Logfire from Pydantic
Your AI agent failed at 2am. Was it the model? A tool call? The database? Most observability tools can't tell you, because they only see part of your stack.
Calvin #3: Brett Cannon: what's missing for reproducible builds on PyPI
Michael #4: Extra extra extra, hear all about it
Extras
Calvin:
Joke: Beware of dog
From the publisher's feed

286 Listeners

1,090 Listeners

1,388 Listeners

624 Listeners

581 Listeners

302 Listeners

338 Listeners

985 Listeners

958 Listeners

207 Listeners

140 Listeners

138 Listeners

106 Listeners

221 Listeners

681 Listeners