Talk Python To Me
Talk Python To Me

Talk Python to Me is a weekly podcast hosted by developer and entrepreneur Michael Kennedy. We dive deep into the popular packages and software developers, data scientists, and incredible hobbyists doing amazing things with Python. If you're new to Python, you'll quickly learn the ins and outs of the community by hearing from the leaders. And if you've been Pythoning for years, you'll learn about your favorite packages and the hot new ones coming out of open source.

What if your database worked more like Git? Every change captured as an immutable event you can replay, instead of a single mutating row that quietly forgets its own history. That's event sourcing, and Chris May is back on Talk Python, fresh off our Datastar panel, to walk us through what it actually looks like in Python. We'll cover the core patterns, the libraries to reach for, when not to use it, and why event sourcing turns out to be a surprisingly good fit for AI-assisted coding. Episode sponsors Sentry Error Monitoring, Code talkpython26 Temporal Talk Python Courses Links from the show Guest Chris May: everydaysuperpowers.dev Intro to event sourcing e-book: everydaysuperpowers.gumroad.com Domain-Driven Design: The Power of CQRS and Event Sourcing: How CQRS/ES Redefine Building Scalable System: ricofritzsche.me DDD: www.amazon.com Understanding Eventsourcing (Martin Dilger): www.amazon.com Event Sourcing Explained using Football Video: www.youtube.com Why I finally embraced event sourcing and why you should too article: everydaysuperpowers.dev valkey: valkey.io diskcache: talkpython.fm eventsourcing package: github.com eventsourcing docs: eventsourcing.readthedocs.io John Bywater: github.com Datastar: data-star.dev Microconf: microconf.com Event Modeling & Event Sourcing Podcast: podcast.eventmodeling.org Python Package Guides for AI Agents: github.com Iodine tablets AI joke: x.com KurrentDb: www.kurrent.io Watch this episode on YouTube: youtube.com Episode #548 deep-dive: talkpython.fm/548 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
When OpenAI trained GPT-3, they didn't roll their own orchestration layer. They used Ray, an open source Python framework born out of the same Berkeley research lab lineage that gave us Apache Spark. And here's the twist: Ray was originally built for reinforcement learning research, then quietly faded as RL hit a wall. Until ChatGPT showed up. Suddenly reinforcement learning was back, as the post-training step that turns a raw language model into something genuinely useful. Edward Oakes and Richard Liaw, two founding engineers behind Ray and Anyscale, join me on Talk Python to tell that story. We'll trace Ray from its RISE Lab origins at UC Berkeley to powering some of the largest training runs in the world. We'll talk about what Ray actually is, a distributed execution engine for AI workloads, and how a few lines of Python become work running across hundreds of GPUs. We'll cover Ray Data for multimodal pipelines, the dashboard, the VS Code remote debugger, KubRay for Kubernetes, and where Ray fits alongside Dask, multiprocessing, and asyncio. If you've ever stared at a single-machine Python script and thought, "there has to be a better way to scale this", this one's for you Episode sponsors Sentry Error Monitoring, Code talkpython26 AgentField AI Talk Python Courses Links from the show Guests Richard Liaw: github.com Edward Oakes: github.com Ray: www.ray.io Example code (we used for walk-through): docs.ray.io Getting Started with Ray: docs.ray.io Ray Libraries: docs.ray.io kuberay: github.com Watch this episode on YouTube: youtube.com Episode #547 deep-dive: talkpython.fm/547 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
The cloud is convenient until it isn't. You upload your photos, sync your contacts, click through the cookie banners. Then prices go up again or you read about a family that lost their entire Google account over a medical photo sent to a doctor. At some point, the question shifts from "why would I run this myself?" to "why aren't I?" My guest this week is Alex Kretzschmar, head of DevRel at Tailscale, longtime host of the Self-Hosted podcast, and co-founder of Linuxserver.io. We cover what self-hosting really means in 2026, the apps worth running yourself like Immich and Home Assistant, why Docker Compose ties it all together, and how Tailscale lets you reach any of it from anywhere, without opening a single port. If you've been thinking about pulling your digital life back behind your own walls, this is your roadmap. Episode sponsors Temporal Talk Python Courses Links from the show Guest Alex Kretzschmar: alex.ktz.me Bitflip podcast: bitflip.show Self-Hosted podcast (Alex's previous show): selfhosted.show Perfect Media Server: perfectmediaserver.com KTZ Systems on YouTube: youtube.com/@ktzsystems Linuxserver.io (co-founded by Alex): linuxserver.io "How Tailscale Works" blog post: tailscale.com/blog/how-tailscale-works https://tailscale.com/: tailscale.com Self-hosted apps discussed Awesome Self-Hosted (GitHub list): github.com Immich (Google Photos alternative): immich.app Home Assistant: home-assistant.io Open Home Foundation: openhomefoundation.org Plausible Analytics: plausible.io Umami Analytics: umami.is Python integration for umami: pypi.org Pi-hole: pi-hole.net AdGuard Home: adguard.com NextDNS: nextdns.io Coolify: coolify.io Docker + ufw: docs.docker.com Storage, backup & filesystem OpenZFS: openzfs.org ZFS.rent (offsite ZFS replication): zfs.rent Backblaze: backblaze.com Hetzner Storage Box: hetzner.com DigitalOcean: digitalocean.com Secrets management mentioned OpenBao (open-source Vault fork): openbao.org HashiCorp Vault: hashicorp.com Bitwarden: bitwarden.com 1Password: 1password.com Hardware mentioned Proxmox VE: proxmox.com Minisforum MS01: minisforum.com Zima Board / Zima OS: zimaspace.com Other references Cory Doctorow on "enshittification" (Cory's blog where he coined the term): pluralistic.net Linus Tech Tips' WAN Show (Linus mentioned NAS-building going mainstream): linustechtips.com Watch this episode on YouTube: youtube.com Episode #546 deep-dive: talkpython.fm/546 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
The OWASP Top 10 just got a fresh update, and there are some big changes: supply chain attacks, exceptional condition handling, and more. Tanya Janca is back on Talk Python to walk us through every single one of them. And we're not just talking theory, we're going to turn Claude Code loose on a real open source project and see what it finds. Let's do it. Episode sponsors Temporal Talk Python Courses Links from the show DevSec Station Podcast: www.devsecstation.com SheHacksPurple Newsletter: newsletter.shehackspurple.ca owasp.org: owasp.org owasp.org/Top10/2025: owasp.org from here: github.com Kinto: github.com A01:2025 - Broken Access Control: owasp.org A02:2025 - SecuA02 Security Misconfiguration: owasp.org ASP.NET: ASP.NET A03:2025 - Software Supply Chain Failures: owasp.org A04:2025 - Cryptographic Failures: owasp.org A05:2025 - Injection: owasp.org A06:2025 - Insecure Design: owasp.org A07:2025 - Authentication Failures: owasp.org A08:2025 - Software or Data Integrity Failures: owasp.org A09:2025 - Security Logging and Alerting Failures: owasp.org A10 Mishandling of Exceptional Conditions: owasp.org https://github.com/KeygraphHQ/shannon: github.com anthropic.com/news/mozilla-firefox-security: www.anthropic.com generalpurpose.com/the-distillation/claude-mythos-what-it-means-for-your-business: www.generalpurpose.com Python Example Concepts: blobs.talkpython.fm Watch this episode on YouTube: youtube.com Episode #545 deep-dive: talkpython.fm/545 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
When you pip install a package with compiled code, the wheel you get is built for CPU features from 2009. Want newer optimizations like AVX2? Your installer has no way to ask for them. GPU support? You're on your own configuring special index URLs. The result is fat binaries, nearly gigabyte-sized wheels, and install pages that read like puzzle books. A coalition from NVIDIA, Astral, and QuanSight has been working on Wheel Next: A set of PEPs that let packages declare what hardware they need and let installers like uv pick the right build automatically. Just uv pip install torch and it works. I sit down with Jonathan Dekhtiar from NVIDIA, Ralf Gommers from Quansight and the NumPy and SciPy teams, and Charlie Marsh, founder of Astral and creator of uv, to dig into all of it. Episode sponsors Sentry Error Monitoring, Code talkpython26 Temporal Talk Python Courses Links from the show Guests Charlie Marsh: github.com Ralf Gommers: github.com Jonathan Dekhtiar: github.com CPU dispatcher: numpy.org build options: numpy.org Red Hat RHEL: www.redhat.com Red Hat RHEL AI: www.redhat.com RedHats presentation: wheelnext.dev CUDA release: developer.nvidia.com requires a PEP: discuss.python.org WheelNext: wheelnext.dev Github repo: github.com PEP 817: peps.python.org PEP 825: discuss.python.org uv: docs.astral.sh A variant-enabled build of uv: astral.sh pyx: astral.sh pypackaging-native: pypackaging-native.github.io PEP 784: peps.python.org Watch this episode on YouTube: youtube.com Episode #544 deep-dive: talkpython.fm/544 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
When you type a question into ChatGPT, the model only has what you typed to work with. But tools like Claude Code can plan, iterate, test, and recover from mistakes. They work more like we do. The difference is the agent harness: Planning tools, file system access, sub-agents, and carefully crafted system prompts that turn a raw LLM into something genuinely capable. Sydney Runkle is back on Talk Python representing LangChain and their new open source library, Deep Agents: A framework for building your own deep agents with plain Python functions, middleware hooks, and MCP support. This is how the magic works under the hood. Episode sponsors Sentry Error Monitoring, Code talkpython26 Agentic AI Course Talk Python Courses Links from the show Guest Sydney Runkle: github.com Claude Code uses: x.com Deep Research: openai.com Manus: manus.im Blog post announcement: blog.langchain.com Claudes system prompt: github.com sub agents: docs.anthropic.com the quick start: docs.langchain.com CLIs: github.com Talk Python's CLI: talkpython.fm custom tools: docs.langchain.com DeepAgents Examples: github.com Custom Middleware: docs.langchain.com Built in middleware: docs.langchain.com Improving Deep Agents with harness engineering: blog.langchain.com Prebuilt middleware: docs.langchain.com Watch this episode on YouTube: youtube.com Episode #543 deep-dive: talkpython.fm/543 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
If you've built documentation in the Python ecosystem, chances are you've used Martin Donath's work. His Material for MKDocs powers docs for FastAPI, uv, AWS, OpenAI, and tens of thousands of other projects. But when MKDocs 2.0 took a direction that would break Material and 300 ecosystem plugins, Martin went back to the drawing board. The result is Zensical: A new static site generator with a Rust core, differential builds in milliseconds instead of minutes, and a migration path designed to bring the whole community along. Episode sponsors Sentry Error Monitoring, Code talkpython26 Talk Python Courses Links from the show Guest Martin Donath: github.com Zensical: zensical.org Material for MkDocs: squidfunk.github.io Getting Started: zensical.org Github pages: docs.github.com Cloudflare pages: pages.cloudflare.com Michaels Example: gist.github.com Material for MkDocs: zensical.org gohugo.io/content-management/shortcodes: gohugo.io a sense of size of the project: blobs.talkpython.fm Zensical Spark: zensical.org Watch this episode on YouTube: youtube.com Episode #542 deep-dive: talkpython.fm/542 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
When LLMs write code to accomplish a task, that code has to actually run somewhere. And right now, the options aren't great. Spin up a sandboxed container and you're paying a full second of cold start overhead plus the complexity of another service. Let the LLM loose on your actual machine and... well, you'd better be watching. On this episode, I sit down with Samuel Colvin, creator of Pydantic, now at 10 billion downloads, to explore Monty, a Python interpreter written from scratch in Rust, purpose-built to run LLM-generated code. It starts in microseconds, is completely sandboxed by design, and can even serialize its entire state to a database and resume later. We dig into why this deliberately limited interpreter might be exactly what the AI agent era needs. Episode sponsors Talk Python Courses Python in Production Links from the show Guest Samuel Colvin: github.com CPython: github.com IronPython: ironpython.net Jython: www.jython.org Pyodide: pyodide.org monty: github.com Pydantic AI: pydantic.dev Python AI conference: pyai.events bashkit: github.com just-bash: github.com Narwhals: narwhals-dev.github.io Polars: pola.rs Strands Agents: aws.amazon.com Subscribe Running Pydantic’s Monty Rust sandboxed Python subset in WebAssembly: simonwillison.net Rust Python: github.com Valgrind: valgrind.org Cod Speed: codspeed.io Watch this episode on YouTube: youtube.com Episode #541 deep-dive: talkpython.fm/541 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
Monorepos -- you've heard the talks, you've read the blog posts, maybe you've seen a few tantalizing glimpses into how Google or Meta organize their massive codebases. But it's often in the abstract and behind closed doors. What if you could crack open a real, production monorepo, one with over a million lines of Python and over 100 of sub-packages, and actually see how it's built, step by step, using modern tools and standards? That's exactly what Apache Airflow gives us. On this episode, I sit down with Jarek Potiuk and Amogh Desai, two of Airflow's top contributors, to go inside one of the largest open-source Python monorepos in the world and learn how they manage it with uv, pyproject.toml, and the latest packaging standards, so you can apply those same patterns to your own projects. Episode sponsors Agentic AI Course Python in Production Talk Python Courses Links from the show Guests Amogh Desai: github.com Jarek's GitHub: github.com definition of a monorepo: monorepo.tools airflow: airflow.apache.org Activity: github.com OpenAI: airflowsummit.org Part 1. Pains of big modular Python projects: medium.com Part 2. Modern Python packaging standards and tools for monorepos: medium.com Part 3. Monorepo on steroids - modular prek hooks: medium.com Part 4. Shared “static” libraries in Airflow monorepo: medium.com PEP-440: peps.python.org PEP-517: peps.python.org PEP-518: peps.python.org PEP-566: peps.python.org PEP-561: peps.python.org PEP-660: peps.python.org PEP-621: peps.python.org PEP-685: peps.python.org PEP-723: peps.python.org PEP-735: peps.python.org uv: docs.astral.sh uv workspaces: blobs.talkpython.fm prek.j178.dev: prek.j178.dev your presentation at FOSDEM26: fosdem.org Tallyman: github.com Watch this episode on YouTube: youtube.com Episode #540 deep-dive: talkpython.fm/540 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
You're adding type hints to your Python code, your editor is happy, autocomplete is working great. But then you switch tools and suddenly there are red squiggles everywhere. Who decides what a float annotation actually means? Or whether passing None where an int is expected should be an error? It turns out there's a five-person council dedicated to exactly these questions -- and two brand-new Rust-based type checkers are raising the bar. On this episode, I sit down with three members of the Python Typing Council -- Jelle Zijlstra, Rebecca Chen, and Carl Meyer -- to learn how the type system is governed, where the spec and the type checkers agree and disagree, and get the council's official advice on how much typing is just enough. Episode sponsors Sentry Error Monitoring, Code talkpython26 Agentic AI Course Talk Python Courses Links from the show Guests Carl Meyer: github.com Jelle Zijlstra: jellezijlstra.github.io Rebecca Chen: github.com Typing Council: github.com typing.python.org: typing.python.org details here: github.com ty: docs.astral.sh pyrefly: pyrefly.org conformance test suite project: github.com typeshed: github.com Stub files: mypy.readthedocs.io Pydantic: pydantic.dev Beartype: github.com TOAD AI: github.com PEP 747 – Annotating Type Forms: peps.python.org PEP 724 – Stricter Type Guards: peps.python.org Python Typing Repo (PRs and Issues): github.com Watch this episode on YouTube: youtube.com Episode #539 deep-dive: talkpython.fm/539 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
Digital humanities sounds niche, until you realize it can mean a searchable archive of U.S. amendment proposals, Irish folklore, or pigment science in ancient art. Today I’m talking with David Flood from Harvard’s DARTH team about an unglamorous problem: What happens when the grant ends but the website can’t. His answer, static sites, client-side search, and sneaky Python. Let’s dive in. Episode sponsors Sentry Error Monitoring, Code talkpython26 Command Book Talk Python Courses Links from the show Guest David Flood: davidaflood.com DARTH: digitalhumanities.fas.harvard.edu Amendments Project: digitalhumanities.fas.harvard.edu Fionn Folklore Database: fionnfolklore.org Mapping Color in History: iiif.harvard.edu Apatosaurus: apatosaurus.io Criticus: github.com github.com/palewire/django-bakery: github.com sigsim.acm.org/conf/pads/2026/blog/artifact-evaluation: sigsim.acm.org Hugo: gohugo.io Water Stories: waterstories.fas.harvard.edu Tsumeb Mine Notebook: tmn.fas.harvard.edu Dharma and Punya: dharmapunya2019.org Pagefind library: pagefind.app django_webassembly: github.com Astro Static Site Generator: astro.build PageFind Python Lib: pypi.org Frozen-Flask: frozen-flask.readthedocs.io Watch this episode on YouTube: youtube.com Episode #538 deep-dive: talkpython.fm/538 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
You love building web apps with Python, and HTMX got you excited about the hypermedia approach -- let the server drive the HTML, skip the JavaScript build step, keep things simple. But then you hit that last 10%: You need Alpine.js for interactivity, your state gets out of sync, and suddenly you're juggling two unrelated libraries that weren't designed to work together. What if there was a single 11-kilobyte framework that gave you everything HTMX and Alpine do, and more, with real-time updates, multiplayer collaboration out of the box, and performance so fast you're actually bottlenecked by the monitor's refresh rate? That's Datastar. On this episode, I sit down with its creator Delaney Gillilan, core maintainer Ben Croker, and Datastar convert Chris May to explore how this backend-driven, server-sent-events-first framework is changing the way full-stack developers think about the modern web. Episode sponsors Sentry Error Monitoring, Code talkpython26 Command Book Talk Python Courses Links from the show Guests Delaney Gillilan: linkedin.com Ben Croker: x.com Chris May: everydaysuperpowers.dev Datastar: data-star.dev HTMX: htmx.org AlpineJS: alpinejs.dev Core Attribute Tour: data-star.dev data-star.dev/examples: data-star.dev github.com/starfederation/datastar-python: github.com VSCode: marketplace.visualstudio.com OpenVSX: open-vsx.org PyCharm/Intellij plugin: plugins.jetbrains.com data-star.dev/datastar_pro: data-star.dev gg: discord.gg HTML-ivating your Django web app's experience with HTMX, AlpineJS, and streaming HTML - Chris May: www.youtube.com Senior Engineer tries Vibe Coding: www.youtube.com 1 Billion Checkboxes: checkboxes.andersmurphy.com Game of life example: example.andersmurphy.com Watch this episode on YouTube: youtube.com Episode #537 deep-dive: talkpython.fm/537 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
You've built your FastAPI app, it's running great locally, and now you want to share it with the world. But then reality hits -- containers, load balancers, HTTPS certificates, cloud consoles with 200 options. What if deploying was just one command? That's exactly what Sebastian Ramirez and the FastAPI Cloud team are building. On this episode, I sit down with Sebastian, Patrick Arminio, Savannah Ostrowski, and Jonathan Ehwald to go inside FastAPI Cloud, explore what it means to build a "Pythonic" cloud, and dig into how this commercial venture is actually making FastAPI the open-source project stronger than ever. Episode sponsors Command Book Python in Production Talk Python Courses Links from the show Guests Sebastián Ramírez: github.com Savannah Ostrowski: github.com Patrick Arminio: github.com Jonathan Ehwald: github.com FastAPI labs: fastapilabs.com quickstart: fastapicloud.com an episode on diskcache: talkpython.fm Fastar: github.com FastAPI: The Documentary: www.youtube.com Tailwind CSS Situation: adams-morning-walk.transistor.fm FastAPI Job Meme: fastapi.meme Migrate an Existing Project: fastapicloud.com Join the waitlist: fastapicloud.com Talk Python CLI Talk Python CLI Announcement: talkpython.fm Talk Python CLI GitHub: github.com Command Book Download Command Book: commandbookapp.com Announcement post: mkennedy.codes Watch this episode on YouTube: youtube.com Episode #536 deep-dive: talkpython.fm/536 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
Building on the web is like working with the perfect clay. It’s malleable and can become almost anything. But too often, frameworks try to hide the web’s best parts away from us. Today, we’re looking at PyView, a project that brings the real-time power of Phoenix LiveView directly into the Python world. I'm joined by Larry Ogrodnek to dive into PyView. Episode sponsors Talk Python Courses Python in Production Links from the show Guest Larry Ogrodnek: hachyderm.io pyview.rocks: pyview.rocks Phoenix LiveView: github.com this section: pyview.rocks Core Concepts: pyview.rocks Socket and Context: pyview.rocks Event Handling: pyview.rocks LiveComponents: pyview.rocks Routing: pyview.rocks Templating: pyview.rocks HTML Templates: pyview.rocks T-String Templates: pyview.rocks File Uploads: pyview.rocks Streams: pyview.rocks Sessions & Authentication: pyview.rocks Single-File Apps: pyview.rocks starlette: starlette.dev wsproto: github.com apscheduler: github.com t-dom project: github.com Watch this episode on YouTube: youtube.com Episode #535 deep-dive: talkpython.fm/535 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
Your cloud SSD is sitting there, bored, and it would like a job. Today we’re putting it to work with DiskCache, a simple, practical cache built on SQLite that can speed things up without spinning up Redis or extra services. Once you start to see what it can do, a universe of possibilities opens up. We're joined by Vincent Warmerdam to dive into DiskCache. Episode sponsors Talk Python Courses Python in Production Links from the show diskcache docs: grantjenks.com LLM Building Blocks for Python course: training.talkpython.fm JSONDisk: grantjenks.com Git Code Archaeology Charts: koaning.github.io Talk Python Cache Admin UI: blobs.talkpython.fm Litestream SQLite streaming: litestream.io Plash hosting: pla.sh Watch this episode on YouTube: youtube.com Episode #534 deep-dive: talkpython.fm/534 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
Today on Talk Python, the creators behind FastAPI, Flask, Django, Quart, and Litestar get practical about running apps based on their framework in production. Deployment patterns, async gotchas, servers, scaling, and the stuff you only learn at 2 a.m. when the pager goes off. For Django, we have Carlton Gibson and Jeff Triplet. For Flask, we have David Lord and Phil Jones, and on team Litestar we have Janek Nouvertné and Cody Fincher, and finally Sebastián Ramírez from FastAPI is here. Let’s jump in. Episode sponsors Talk Python Courses Python in Production Links from the show Guests David Lord Janek Nouvertné Cody Fincher Philip Jones Jeff Triplett Carlton Gibson Carlton Gibson - Django: github.com Sebastian Ramirez - FastAPI: github.com David Lord - Flask: davidism.com Phil Jones - Flask and Quartz(async): pgjones.dev Yanik Nouvertne - LiteStar: github.com Cody Fincher - LiteStar: github.com Jeff Triplett - Django: jefftriplett.com Django: www.djangoproject.com Flask: flask.palletsprojects.com Quart: quart.palletsprojects.com Litestar: litestar.dev FastAPI: fastapi.tiangolo.com Coolify: coolify.io ASGI: asgi.readthedocs.io WSGI (PEP 3333): peps.python.org Granian: github.com Hypercorn: github.com uvicorn: uvicorn.dev Gunicorn: gunicorn.org Hypercorn: hypercorn.readthedocs.io Daphne: github.com Nginx: nginx.org Docker: www.docker.com Kubernetes: kubernetes.io PostgreSQL: www.postgresql.org SQLite: www.sqlite.org Celery: docs.celeryq.dev SQLAlchemy: www.sqlalchemy.org Django REST framework: www.django-rest-framework.org Jinja: jinja.palletsprojects.com Click: click.palletsprojects.com HTMX: htmx.org Server-Sent Events (SSE): developer.mozilla.org WebSockets (RFC 6455): www.rfc-editor.org HTTP/2 (RFC 9113): www.rfc-editor.org HTTP/3 (RFC 9114): www.rfc-editor.org uv: docs.astral.sh Amazon Web Services (AWS): aws.amazon.com Microsoft Azure: azure.microsoft.com Google Cloud Run: cloud.google.com Amazon ECS: aws.amazon.com AlloyDB for PostgreSQL: cloud.google.com Fly.io: fly.io Render: render.com Cloudflare: www.cloudflare.com Fastly: www.fastly.com Watch this episode on YouTube: youtube.com Episode #533 deep-dive: talkpython.fm/533 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
Python in 2025 is in a delightfully refreshing place: the GIL's days are numbered, packaging is getting sharper tools, and the type checkers are multiplying like gremlins snacking after midnight. On this episode, we have an amazing panel to give us a range of perspectives on what matter in 2025 in Python. We have Barry Warsaw, Brett Cannon, Gregory Kapfhammer, Jodie Burchell, Reuven Lerner, and Thomas Wouters on to give us their thoughts. Episode sponsors Seer: AI Debugging, Code talkpython26 Talk Python Courses Links from the show Python Software Foundation (PSF): www.python.org PEP 810: Explicit lazy imports: peps.python.org PEP 779: Free-threaded Python is officially supported: peps.python.org PEP 723: Inline script metadata: peps.python.org PyCharm: www.jetbrains.com JetBrains: www.jetbrains.com Visual Studio Code: code.visualstudio.com pandas: pandas.pydata.org PydanticAI: ai.pydantic.dev OpenAI API docs: platform.openai.com uv: docs.astral.sh Hatch: github.com PDM: pdm-project.org Poetry: python-poetry.org Project Jupyter: jupyter.org JupyterLite: jupyterlite.readthedocs.io PEP 690: Lazy Imports: peps.python.org PyTorch: pytorch.org Python concurrent.futures: docs.python.org Python Package Index (PyPI): pypi.org EuroPython: tickets.europython.eu TensorFlow: www.tensorflow.org Keras: keras.io PyCon US: us.pycon.org NumFOCUS: numfocus.org Python discussion forum (discuss.python.org): discuss.python.org Language Server Protocol: microsoft.github.io mypy: mypy-lang.org Pyright: github.com Pylance: marketplace.visualstudio.com Pyrefly: github.com ty: github.com Zuban: docs.zubanls.com Jedi: jedi.readthedocs.io GitHub: github.com PyOhio: www.pyohio.org Watch this episode on YouTube: youtube.com Episode #532 deep-dive: talkpython.fm/532 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
Have you ever thought about getting your small product into production, but are worried about the cost of the big cloud providers? Or maybe you think your current cloud service is over-architected and costing you too much? Well, in this episode, we interview Michael Kennedy, author of "Talk Python in Production," a new book that guides you through deploying web apps at scale with right-sized engineering. Episode sponsors Seer: AI Debugging, Code talkpython26 Agntcy Talk Python Courses Links from the show Christopher Trudeau - guest host: www.linkedin.com Michael's personal site: mkennedy.codes Talk Python in Production Book: talkpython.fm glances: github.com btop: github.com Uptimekuma: uptimekuma.org Coolify: coolify.io Talk Python Blog: talkpython.fm Hetzner (€20 credit with link): hetzner.cloud OpalStack: www.opalstack.com Bunny.net CDN: bunny.net Galleries from the book: github.com Pandoc: pandoc.org Docker: www.docker.com Watch this episode on YouTube: youtube.com Episode #531 deep-dive: talkpython.fm/531 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
For years, building interactive widgets in Python notebooks meant wrestling with toolchains, platform quirks, and a mountain of JavaScript machinery. Most developers took one look and backed away slowly. Trevor Manz decided that barrier did not need to exist. His idea was simple: give Python users just enough JavaScript to unlock the web’s interactivity, without dragging along the rest of the web ecosystem. That idea became anywidget, and it is quickly becoming the quiet connective tissue of modern interactive computing. Today we dig into how it works, why it has taken off, and how it might change the way we explore data. Episode sponsors Seer: AI Debugging, Code talkpython26 PyCharm, code STRONGER PYTHON Talk Python Courses Links from the show Trevor on GitHub: github.com anywidget GitHub: github.com Trevor's SciPy 2024 Talk: www.youtube.com Marimo GitHub: github.com Myst (Markdown docs): mystmd.org Altair: altair-viz.github.io DuckDB: duckdb.org Mosaic: uwdata.github.io ipywidgets: ipywidgets.readthedocs.io Tension between Web and Data Sci Graphic: blobs.talkpython.fm Quak: github.com Walk through building a widget: anywidget.dev Widget Gallery: anywidget.dev Video: How do I anywidget?: www.youtube.com PyCharm + PSF Fundraiser: pycharm-psf-2025 code STRONGER PYTHON Watch this episode on YouTube: youtube.com Episode #530 deep-dive: talkpython.fm/530 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
A lot of people building software today never took the traditional CS path. They arrived through curiosity, a job that needed automating, or a late-night itch to make something work. This week, David Kopec joins me to talk about rebuilding computer science for exactly those folks, the ones who learned to program first and are now ready to understand the deeper ideas that power the tools they use every day. Episode sponsors Sentry Error Monitoring, Code talkpython26 NordStellar Talk Python Courses Links from the show David Kopec: davekopec.com Classic Computer Science Book: amazon.com Computer Science from Scratch Book: computersciencefromscratch.com Computer Science from Scratch at NoStartch (CSFS30 for 30% off): nostarch.com Watch this episode on YouTube: youtube.com Episode #529 deep-dive: talkpython.fm/529 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
In this episode, I’m talking with Vincent Warmerdam about treating LLMs as just another API in your Python app, with clear boundaries, small focused endpoints, and good monitoring. We’ll dig into patterns for wrapping these calls, caching and inspecting responses, and deciding where an LLM API actually earns its keep in your architecture. Episode sponsors Seer: AI Debugging, Code talkpython26 NordStellar Talk Python Courses Links from the show Vincent on X: @fishnets88 Vincent on Mastodon: @koaning LLM Building Blocks for Python Co-urse: training.talkpython.fm Top Talk Python Episodes of 2024: talkpython.fm LLM Usage - Datasette: llm.datasette.io DiskCache - Disk Backed Cache (Documentation): grantjenks.com smartfunc - Turn docstrings into LLM-functions: github.com Ollama: ollama.com LM Studio - Local AI: lmstudio.ai marimo - A Next-Generation Python Notebook: marimo.io Pydantic: pydantic.dev Instructor - Complex Schemas & Validation (Python): python.useinstructor.com Diving into PydanticAI with marimo: youtube.com Cline - AI Coding Agent: cline.bot OpenRouter - The Unified Interface For LLMs: openrouter.ai Leafcloud: leaf.cloud OpenAI looks for its "Google Chrome" moment with new Atlas web browser: arstechnica.com Watch this episode on YouTube: youtube.com Episode #528 deep-dive: talkpython.fm/528 Episode transcripts: talkpython.fm Theme Song: Developer Rap 🥁 Served in a Flask 🎸: talkpython.fm/flasksong ---== Don't be a stranger ==--- YouTube: youtube.com/@talkpython Bluesky: @talkpython.fm Mastodon: @talkpython@fosstodon.org X.com: @talkpython Michael on Bluesky: @mkennedy.codes Michael on Mastodon: @mkennedy@fosstodon.org Michael on X.com: @mkennedy
See the full show notes for this episode on the website at talkpython.fm/527
See the full show notes for this episode on the website at talkpython.fm/526
See the full show notes for this episode on the website at talkpython.fm/525
See the full show notes for this episode on the website at talkpython.fm/524
See the full show notes for this episode on the website at talkpython.fm/523
See the full show notes for this episode on the website at talkpython.fm/522
See the full show notes for this episode on the website at talkpython.fm/521
See the full show notes for this episode on the website at talkpython.fm/520
See the full show notes for this episode on the website at talkpython.fm/519
See the full show notes for this episode on the website at talkpython.fm/518
See the full show notes for this episode on the website at talkpython.fm/517
See the full show notes for this episode on the website at talkpython.fm/516
See the full show notes for this episode on the website at talkpython.fm/515
See the full show notes for this episode on the website at talkpython.fm/514
See the full show notes for this episode on the website at talkpython.fm/513
See the full show notes for this episode on the website at talkpython.fm/512
See the full show notes for this episode on the website at talkpython.fm/511
See the full show notes for this episode on the website at talkpython.fm/510
See the full show notes for this episode on the website at talkpython.fm/509
See the full show notes for this episode on the website at talkpython.fm/508
See the full show notes for this episode on the website at talkpython.fm/507
See the full show notes for this episode on the website at talkpython.fm/506
See the full show notes for this episode on the website at talkpython.fm/505
See the full show notes for this episode on the website at talkpython.fm/504
See the full show notes for this episode on the website at talkpython.fm/503
See the full show notes for this episode on the website at talkpython.fm/502
See the full show notes for this episode on the website at talkpython.fm/501
See the full show notes for this episode on the website at talkpython.fm/500
See the full show notes for this episode on the website at talkpython.fm/499
See the full show notes for this episode on the website at talkpython.fm/498
See the full show notes for this episode on the website at talkpython.fm/497
See the full show notes for this episode on the website at talkpython.fm/496
See the full show notes for this episode on the website at talkpython.fm/495
See the full show notes for this episode on the website at talkpython.fm/494
See the full show notes for this episode on the website at talkpython.fm/493
See the full show notes for this episode on the website at talkpython.fm/492
See the full show notes for this episode on the website at talkpython.fm/491
See the full show notes for this episode on the website at talkpython.fm/490
See the full show notes for this episode on the website at talkpython.fm/489
See the full show notes for this episode on the website at talkpython.fm/488
See the full show notes for this episode on the website at talkpython.fm/487
See the full show notes for this episode on the website at talkpython.fm/486
See the full show notes for this episode on the website at talkpython.fm/485
See the full show notes for this episode on the website at talkpython.fm/484
See the full show notes for this episode on the website at talkpython.fm/483
See the full show notes for this episode on the website at talkpython.fm/482
See the full show notes for this episode on the website at talkpython.fm/481
See the full show notes for this episode on the website at talkpython.fm/480
See the full show notes for this episode on the website at talkpython.fm/479
See the full show notes for this episode on the website at talkpython.fm/478
See the full show notes for this episode on the website at talkpython.fm/477
See the full show notes for this episode on the website at talkpython.fm/476
See the full show notes for this episode on the website at talkpython.fm/475
See the full show notes for this episode on the website at talkpython.fm/474
See the full show notes for this episode on the website at talkpython.fm/473
See the full show notes for this episode on the website at talkpython.fm/472
See the full show notes for this episode on the website at talkpython.fm/471
See the full show notes for this episode on the website at talkpython.fm/470
See the full show notes for this episode on the website at talkpython.fm/469
See the full show notes for this episode on the website at talkpython.fm/468
See the full show notes for this episode on the website at talkpython.fm/467
See the full show notes for this episode on the website at talkpython.fm/466
See the full show notes for this episode on the website at talkpython.fm/465
See the full show notes for this episode on the website at talkpython.fm/464
See the full show notes for this episode on the website at talkpython.fm/463
See the full show notes for this episode on the website at talkpython.fm/462
See the full show notes for this episode on the website at talkpython.fm/461
See the full show notes for this episode on the website at talkpython.fm/460
See the full show notes for this episode on the website at talkpython.fm/459
See the full show notes for this episode on the website at talkpython.fm/458
See the full show notes for this episode on the website at talkpython.fm/457
See the full show notes for this episode on the website at talkpython.fm/456
See the full show notes for this episode on the website at talkpython.fm/455
See the full show notes for this episode on the website at talkpython.fm/454
See the full show notes for this episode on the website at talkpython.fm/453
See the full show notes for this episode on the website at talkpython.fm/452
See the full show notes for this episode on the website at talkpython.fm/451
See the full show notes for this episode on the website at talkpython.fm/450
See the full show notes for this episode on the website at talkpython.fm/449
See the full show notes for this episode on the website at talkpython.fm/448
See the full show notes for this episode on the website at talkpython.fm/447
See the full show notes for this episode on the website at talkpython.fm/446
See the full show notes for this episode on the website at talkpython.fm/445
See the full show notes for this episode on the website at talkpython.fm/444
See the full show notes for this episode on the website at talkpython.fm/443
See the full show notes for this episode on the website at talkpython.fm/442
See the full show notes for this episode on the website at talkpython.fm/441
See the full show notes for this episode on the website at talkpython.fm/440
See the full show notes for this episode on the website at talkpython.fm/439
See the full show notes for this episode on the website at talkpython.fm/438
See the full show notes for this episode on the website at talkpython.fm/437
See the full show notes for this episode on the website at talkpython.fm/436
See the full show notes for this episode on the website at talkpython.fm/435
See the full show notes for this episode on the website at talkpython.fm/434
See the full show notes for this episode on the website at talkpython.fm/433
See the full show notes for this episode on the website at talkpython.fm/432
See the full show notes for this episode on the website at talkpython.fm/431
See the full show notes for this episode on the website at talkpython.fm/430
See the full show notes for this episode on the website at talkpython.fm/429
See the full show notes for this episode on the website at talkpython.fm/428
See the full show notes for this episode on the website at talkpython.fm/427
See the full show notes for this episode on the website at talkpython.fm/426
See the full show notes for this episode on the website at talkpython.fm/425
See the full show notes for this episode on the website at talkpython.fm/424
See the full show notes for this episode on the website at talkpython.fm/423
See the full show notes for this episode on the website at talkpython.fm/422
See the full show notes for this episode on the website at talkpython.fm/421
See the full show notes for this episode on the website at talkpython.fm/420
See the full show notes for this episode on the website at talkpython.fm/419
See the full show notes for this episode on the website at talkpython.fm/418
See the full show notes for this episode on the website at talkpython.fm/417
See the full show notes for this episode on the website at talkpython.fm/416
See the full show notes for this episode on the website at talkpython.fm/415
See the full show notes for this episode on the website at talkpython.fm/414
See the full show notes for this episode on the website at talkpython.fm/413
See the full show notes for this episode on the website at talkpython.fm/412
See the full show notes for this episode on the website at talkpython.fm/411
See the full show notes for this episode on the website at talkpython.fm/410
See the full show notes for this episode on the website at talkpython.fm/409
See the full show notes for this episode on the website at talkpython.fm/408
See the full show notes for this episode on the website at talkpython.fm/407
See the full show notes for this episode on the website at talkpython.fm/406
See the full show notes for this episode on the website at talkpython.fm/405
See the full show notes for this episode on the website at talkpython.fm/404
See the full show notes for this episode on the website at talkpython.fm/403
See the full show notes for this episode on the website at talkpython.fm/402
See the full show notes for this episode on the website at talkpython.fm/401
See the full show notes for this episode on the website at talkpython.fm/400
See the full show notes for this episode on the website at talkpython.fm/399
See the full show notes for this episode on the website at talkpython.fm/398
See the full show notes for this episode on the website at talkpython.fm/397
See the full show notes for this episode on the website at talkpython.fm/396
See the full show notes for this episode on the website at talkpython.fm/395
See the full show notes for this episode on the website at talkpython.fm/394
See the full show notes for this episode on the website at talkpython.fm/393
See the full show notes for this episode on the website at talkpython.fm/392
See the full show notes for this episode on the website at talkpython.fm/391
See the full show notes for this episode on the website at talkpython.fm/390
See the full show notes for this episode on the website at talkpython.fm/389
See the full show notes for this episode on the website at talkpython.fm/388
See the full show notes for this episode on the website at talkpython.fm/387
See the full show notes for this episode on the website at talkpython.fm/386
See the full show notes for this episode on the website at talkpython.fm/385
See the full show notes for this episode on the website at talkpython.fm/384
See the full show notes for this episode on the website at talkpython.fm/383
See the full show notes for this episode on the website at talkpython.fm/382
See the full show notes for this episode on the website at talkpython.fm/381
See the full show notes for this episode on the website at talkpython.fm/380
See the full show notes for this episode on the website at talkpython.fm/379
See the full show notes for this episode on the website at talkpython.fm/378
See the full show notes for this episode on the website at talkpython.fm/377
See the full show notes for this episode on the website at talkpython.fm/376
See the full show notes for this episode on the website at talkpython.fm/375
See the full show notes for this episode on the website at talkpython.fm/374
See the full show notes for this episode on the website at talkpython.fm/373
See the full show notes for this episode on the website at talkpython.fm/372
See the full show notes for this episode on the website at talkpython.fm/371
See the full show notes for this episode on the website at talkpython.fm/370
See the full show notes for this episode on the website at talkpython.fm/369
See the full show notes for this episode on the website at talkpython.fm/368
See the full show notes for this episode on the website at talkpython.fm/367
See the full show notes for this episode on the website at talkpython.fm/366
See the full show notes for this episode on the website at talkpython.fm/365
See the full show notes for this episode on the website at talkpython.fm/364
See the full show notes for this episode on the website at talkpython.fm/363
See the full show notes for this episode on the website at talkpython.fm/362
See the full show notes for this episode on the website at talkpython.fm/361
See the full show notes for this episode on the website at talkpython.fm/360
See the full show notes for this episode on the website at talkpython.fm/359
See the full show notes for this episode on the website at talkpython.fm/358
See the full show notes for this episode on the website at talkpython.fm/357
See the full show notes for this episode on the website at talkpython.fm/356
See the full show notes for this episode on the website at talkpython.fm/355
See the full show notes for this episode on the website at talkpython.fm/354
See the full show notes for this episode on the website at talkpython.fm/353
See the full show notes for this episode on the website at talkpython.fm/352
See the full show notes for this episode on the website at talkpython.fm/351
See the full show notes for this episode on the website at talkpython.fm/350
See the full show notes for this episode on the website at talkpython.fm/349
See the full show notes for this episode on the website at talkpython.fm/348
See the full show notes for this episode on the website at talkpython.fm/347
See the full show notes for this episode on the website at talkpython.fm/346
See the full show notes for this episode on the website at talkpython.fm/345
See the full show notes for this episode on the website at talkpython.fm/344
See the full show notes for this episode on the website at talkpython.fm/343
See the full show notes for this episode on the website at talkpython.fm/342
See the full show notes for this episode on the website at talkpython.fm/341
See the full show notes for this episode on the website at talkpython.fm/340
See the full show notes for this episode on the website at talkpython.fm/339
See the full show notes for this episode on the website at talkpython.fm/338
See the full show notes for this episode on the website at talkpython.fm/337
See the full show notes for this episode on the website at talkpython.fm/336
See the full show notes for this episode on the website at talkpython.fm/335
See the full show notes for this episode on the website at talkpython.fm/334
See the full show notes for this episode on the website at talkpython.fm/333
See the full show notes for this episode on the website at talkpython.fm/332
See the full show notes for this episode on the website at talkpython.fm/331
See the full show notes for this episode on the website at talkpython.fm/330
See the full show notes for this episode on the website at talkpython.fm/329
See the full show notes for this episode on the website at talkpython.fm/328
See the full show notes for this episode on the website at talkpython.fm/327
See the full show notes for this episode on the website at talkpython.fm/326
See the full show notes for this episode on the website at talkpython.fm/325
See the full show notes for this episode on the website at talkpython.fm/324
See the full show notes for this episode on the website at talkpython.fm/323
See the full show notes for this episode on the website at talkpython.fm/322
See the full show notes for this episode on the website at talkpython.fm/321
See the full show notes for this episode on the website at talkpython.fm/320
See the full show notes for this episode on the website at talkpython.fm/319
See the full show notes for this episode on the website at talkpython.fm/318
See the full show notes for this episode on the website at talkpython.fm/317
See the full show notes for this episode on the website at talkpython.fm/316
See the full show notes for this episode on the website at talkpython.fm/315
See the full show notes for this episode on the website at talkpython.fm/314
See the full show notes for this episode on the website at talkpython.fm/313
See the full show notes for this episode on the website at talkpython.fm/312
See the full show notes for this episode on the website at talkpython.fm/311
See the full show notes for this episode on the website at talkpython.fm/310
See the full show notes for this episode on the website at talkpython.fm/309
See the full show notes for this episode on the website at talkpython.fm/308
See the full show notes for this episode on the website at talkpython.fm/307
See the full show notes for this episode on the website at talkpython.fm/306
See the full show notes for this episode on the website at talkpython.fm/305
See the full show notes for this episode on the website at talkpython.fm/304
See the full show notes for this episode on the website at talkpython.fm/303
See the full show notes for this episode on the website at talkpython.fm/302
See the full show notes for this episode on the website at talkpython.fm/301
See the full show notes for this episode on the website at talkpython.fm/300
See the full show notes for this episode on the website at talkpython.fm/299
See the full show notes for this episode on the website at talkpython.fm/298
See the full show notes for this episode on the website at talkpython.fm/297
See the full show notes for this episode on the website at talkpython.fm/296
See the full show notes for this episode on the website at talkpython.fm/295
See the full show notes for this episode on the website at talkpython.fm/294
See the full show notes for this episode on the website at talkpython.fm/293
See the full show notes for this episode on the website at talkpython.fm/292
See the full show notes for this episode on the website at talkpython.fm/291
See the full show notes for this episode on the website at talkpython.fm/290
See the full show notes for this episode on the website at talkpython.fm/289
See the full show notes for this episode on the website at talkpython.fm/288
See the full show notes for this episode on the website at talkpython.fm/287
See the full show notes for this episode on the website at talkpython.fm/286
See the full show notes for this episode on the website at talkpython.fm/285
See the full show notes for this episode on the website at talkpython.fm/284
See the full show notes for this episode on the website at talkpython.fm/283
See the full show notes for this episode on the website at talkpython.fm/282
See the full show notes for this episode on the website at talkpython.fm/281
See the full show notes for this episode on the website at talkpython.fm/280
See the full show notes for this episode on the website at talkpython.fm/279
See the full show notes for this episode on the website at talkpython.fm/278
See the full show notes for this episode on the website at talkpython.fm/277
See the full show notes for this episode on the website at talkpython.fm/276
See the full show notes for this episode on the website at talkpython.fm/275
See the full show notes for this episode on the website at talkpython.fm/274
See the full show notes for this episode on the website at talkpython.fm/273
See the full show notes for this episode on the website at talkpython.fm/272
See the full show notes for this episode on the website at talkpython.fm/271
See the full show notes for this episode on the website at talkpython.fm/270
See the full show notes for this episode on the website at talkpython.fm/269
See the full show notes for this episode on the website at talkpython.fm/268
See the full show notes for this episode on the website at talkpython.fm/267
See the full show notes for this episode on the website at talkpython.fm/266
See the full show notes for this episode on the website at talkpython.fm/265
See the full show notes for this episode on the website at talkpython.fm/264
See the full show notes for this episode on the website at talkpython.fm/263
See the full show notes for this episode on the website at talkpython.fm/262
See the full show notes for this episode on the website at talkpython.fm/261
See the full show notes for this episode on the website at talkpython.fm/260
See the full show notes for this episode on the website at talkpython.fm/259
See the full show notes for this episode on the website at talkpython.fm/258
See the full show notes for this episode on the website at talkpython.fm/257
See the full show notes for this episode on the website at talkpython.fm/256
See the full show notes for this episode on the website at talkpython.fm/255
See the full show notes for this episode on the website at talkpython.fm/254
See the full show notes for this episode on the website at talkpython.fm/253
See the full show notes for this episode on the website at talkpython.fm/252
See the full show notes for this episode on the website at talkpython.fm/251
See the full show notes for this episode on the website at talkpython.fm/250
See the full show notes for this episode on the website at talkpython.fm/249
See the full show notes for this episode on the website at talkpython.fm/248
See the full show notes for this episode on the website at talkpython.fm/247
See the full show notes for this episode on the website at talkpython.fm/246
See the full show notes for this episode on the website at talkpython.fm/245
See the full show notes for this episode on the website at talkpython.fm/244
See the full show notes for this episode on the website at talkpython.fm/243
See the full show notes for this episode on the website at talkpython.fm/242
See the full show notes for this episode on the website at talkpython.fm/241
See the full show notes for this episode on the website at talkpython.fm/240
See the full show notes for this episode on the website at talkpython.fm/239
See the full show notes for this episode on the website at talkpython.fm/237
See the full show notes for this episode on the website at talkpython.fm/236
See the full show notes for this episode on the website at talkpython.fm/235
See the full show notes for this episode on the website at talkpython.fm/234
See the full show notes for this episode on the website at talkpython.fm/233
See the full show notes for this episode on the website at talkpython.fm/232
See the full show notes for this episode on the website at talkpython.fm/231
See the full show notes for this episode on the website at talkpython.fm/230
See the full show notes for this episode on the website at talkpython.fm/229
See the full show notes for this episode on the website at talkpython.fm/228
See the full show notes for this episode on the website at talkpython.fm/227
See the full show notes for this episode on the website at talkpython.fm/226
See the full show notes for this episode on the website at talkpython.fm/225
See the full show notes for this episode on the website at talkpython.fm/224
See the full show notes for this episode on the website at talkpython.fm/223
See the full show notes for this episode on the website at talkpython.fm/222
See the full show notes for this episode on the website at talkpython.fm/221
See the full show notes for this episode on the website at talkpython.fm/220
See the full show notes for this episode on the website at talkpython.fm/219
See the full show notes for this episode on the website at talkpython.fm/218
See the full show notes for this episode on the website at talkpython.fm/217
See the full show notes for this episode on the website at talkpython.fm/216
See the full show notes for this episode on the website at talkpython.fm/215
See the full show notes for this episode on the website at talkpython.fm/214
See the full show notes for this episode on the website at talkpython.fm/213
See the full show notes for this episode on the website at talkpython.fm/212
See the full show notes for this episode on the website at talkpython.fm/211
See the full show notes for this episode on the website at talkpython.fm/210
See the full show notes for this episode on the website at talkpython.fm/209
See the full show notes for this episode on the website at talkpython.fm/208
See the full show notes for this episode on the website at talkpython.fm/207
See the full show notes for this episode on the website at talkpython.fm/206
See the full show notes for this episode on the website at talkpython.fm/205
See the full show notes for this episode on the website at talkpython.fm/204
See the full show notes for this episode on the website at talkpython.fm/203
See the full show notes for this episode on the website at talkpython.fm/202
See the full show notes for this episode on the website at talkpython.fm/201
See the full show notes for this episode on the website at talkpython.fm/200
See the full show notes for this episode on the website at talkpython.fm/199
See the full show notes for this episode on the website at talkpython.fm/198
See the full show notes for this episode on the website at talkpython.fm/197
See the full show notes for this episode on the website at talkpython.fm/196
See the full show notes for this episode on the website at talkpython.fm/195
See the full show notes for this episode on the website at talkpython.fm/194
See the full show notes for this episode on the website at talkpython.fm/193
See the full show notes for this episode on the website at talkpython.fm/192
See the full show notes for this episode on the website at talkpython.fm/191
See the full show notes for this episode on the website at talkpython.fm/190
See the full show notes for this episode on the website at talkpython.fm/189
See the full show notes for this episode on the website at talkpython.fm/188
See the full show notes for this episode on the website at talkpython.fm/187
See the full show notes for this episode on the website at talkpython.fm/186
See the full show notes for this episode on the website at talkpython.fm/185
See the full show notes for this episode on the website at talkpython.fm/184
See the full show notes for this episode on the website at talkpython.fm/183
See the full show notes for this episode on the website at talkpython.fm/182
See the full show notes for this episode on the website at talkpython.fm/181
See the full show notes for this episode on the website at talkpython.fm/180
See the full show notes for this episode on the website at talkpython.fm/179
See the full show notes for this episode on the website at talkpython.fm/178
See the full show notes for this episode on the website at talkpython.fm/177
See the full show notes for this episode on the website at talkpython.fm/176
See the full show notes for this episode on the website at talkpython.fm/175
See the full show notes for this episode on the website at talkpython.fm/174
See the full show notes for this episode on the website at talkpython.fm/173
See the full show notes for this episode on the website at talkpython.fm/172
See the full show notes for this episode on the website at talkpython.fm/171
See the full show notes for this episode on the website at talkpython.fm/170
See the full show notes for this episode on the website at talkpython.fm/169
See the full show notes for this episode on the website at talkpython.fm/168
See the full show notes for this episode on the website at talkpython.fm/167
See the full show notes for this episode on the website at talkpython.fm/166
See the full show notes for this episode on the website at talkpython.fm/165
See the full show notes for this episode on the website at talkpython.fm/164
See the full show notes for this episode on the website at talkpython.fm/163
See the full show notes for this episode on the website at talkpython.fm/162
See the full show notes for this episode on the website at talkpython.fm/161
See the full show notes for this episode on the website at talkpython.fm/160
See the full show notes for this episode on the website at talkpython.fm/159
See the full show notes for this episode on the website at talkpython.fm/158
See the full show notes for this episode on the website at talkpython.fm/157
See the full show notes for this episode on the website at talkpython.fm/156
See the full show notes for this episode on the website at talkpython.fm/155
See the full show notes for this episode on the website at talkpython.fm/154
See the full show notes for this episode on the website at talkpython.fm/153
See the full show notes for this episode on the website at talkpython.fm/152
See the full show notes for this episode on the website at talkpython.fm/151
See the full show notes for this episode on the website at talkpython.fm/150
See the full show notes for this episode on the website at talkpython.fm/149
See the full show notes for this episode on the website at talkpython.fm/148
See the full show notes for this episode on the website at talkpython.fm/147
See the full show notes for this episode on the website at talkpython.fm/146
See the full show notes for this episode on the website at talkpython.fm/145
See the full show notes for this episode on the website at talkpython.fm/144
See the full show notes for this episode on the website at talkpython.fm/143
See the full show notes for this episode on the website at talkpython.fm/141
See the full show notes for this episode on the website at talkpython.fm/140
See the full show notes for this episode on the website at talkpython.fm/139
See the full show notes for this episode on the website at talkpython.fm/138
See the full show notes for this episode on the website at talkpython.fm/137
See the full show notes for this episode on the website at talkpython.fm/136
See the full show notes for this episode on the website at talkpython.fm/135
See the full show notes for this episode on the website at talkpython.fm/134
See the full show notes for this episode on the website at talkpython.fm/133
See the full show notes for this episode on the website at talkpython.fm/132
See the full show notes for this episode on the website at talkpython.fm/131
See the full show notes for this episode on the website at talkpython.fm/130
See the full show notes for this episode on the website at talkpython.fm/129
See the full show notes for this episode on the website at talkpython.fm/128
See the full show notes for this episode on the website at talkpython.fm/127
See the full show notes for this episode on the website at talkpython.fm/126
See the full show notes for this episode on the website at talkpython.fm/125
See the full show notes for this episode on the website at talkpython.fm/124
See the full show notes for this episode on the website at talkpython.fm/123
See the full show notes for this episode on the website at talkpython.fm/122
See the full show notes for this episode on the website at talkpython.fm/121
See the full show notes for this episode on the website at talkpython.fm/120
See the full show notes for this episode on the website at talkpython.fm/119
See the full show notes for this episode on the website at talkpython.fm/118
See the full show notes for this episode on the website at talkpython.fm/117
See the full show notes for this episode on the website at talkpython.fm/116
See the full show notes for this episode on the website at talkpython.fm/115
See the full show notes for this episode on the website at talkpython.fm/114
See the full show notes for this episode on the website at talkpython.fm/113
See the full show notes for this episode on the website at talkpython.fm/112
See the full show notes for this episode on the website at talkpython.fm/111
See the full show notes for this episode on the website at talkpython.fm/110
See the full show notes for this episode on the website at talkpython.fm/109
See the full show notes for this episode on the website at talkpython.fm/108
See the full show notes for this episode on the website at talkpython.fm/107
See the full show notes for this episode on the website at talkpython.fm/106
See the full show notes for this episode on the website at talkpython.fm/105
See the full show notes for this episode on the website at talkpython.fm/104
See the full show notes for this episode on the website at talkpython.fm/103
See the full show notes for this episode on the website at talkpython.fm/102
See the full show notes for this episode on the website at talkpython.fm/101
See the full show notes for this episode on the website at talkpython.fm/100
See the full show notes for this episode on the website at talkpython.fm/99
See the full show notes for this episode on the website at talkpython.fm/98
See the full show notes for this episode on the website at talkpython.fm/97
See the full show notes for this episode on the website at talkpython.fm/96
See the full show notes for this episode on the website at talkpython.fm/95
See the full show notes for this episode on the website at talkpython.fm/94
See the full show notes for this episode on the website at talkpython.fm/93
See the full show notes for this episode on the website at talkpython.fm/92
See the full show notes for this episode on the website at talkpython.fm/91
See the full show notes for this episode on the website at talkpython.fm/90
See the full show notes for this episode on the website at talkpython.fm/89
See the full show notes for this episode on the website at talkpython.fm/88
See the full show notes for this episode on the website at talkpython.fm/87
See the full show notes for this episode on the website at talkpython.fm/86
See the full show notes for this episode on the website at talkpython.fm/85
See the full show notes for this episode on the website at talkpython.fm/84
See the full show notes for this episode on the website at talkpython.fm/83
See the full show notes for this episode on the website at talkpython.fm/82
See the full show notes for this episode on the website at talkpython.fm/81
See the full show notes for this episode on the website at talkpython.fm/80
See the full show notes for this episode on the website at talkpython.fm/79
See the full show notes for this episode on the website at talkpython.fm/78
See the full show notes for this episode on the website at talkpython.fm/77
See the full show notes for this episode on the website at talkpython.fm/76
See the full show notes for this episode on the website at talkpython.fm/75
See the full show notes for this episode on the website at talkpython.fm/74
See the full show notes for this episode on the website at talkpython.fm/73
See the full show notes for this episode on the website at talkpython.fm/72
See the full show notes for this episode on the website at talkpython.fm/71
See the full show notes for this episode on the website at talkpython.fm/70
See the full show notes for this episode on the website at talkpython.fm/69
See the full show notes for this episode on the website at talkpython.fm/68
See the full show notes for this episode on the website at talkpython.fm/67
See the full show notes for this episode on the website at talkpython.fm/66
See the full show notes for this episode on the website at talkpython.fm/65
See the full show notes for this episode on the website at talkpython.fm/64
See the full show notes for this episode on the website at talkpython.fm/63
See the full show notes for this episode on the website at talkpython.fm/62
See the full show notes for this episode on the website at talkpython.fm/61
See the full show notes for this episode on the website at talkpython.fm/60
See the full show notes for this episode on the website at talkpython.fm/59
See the full show notes for this episode on the website at talkpython.fm/58
See the full show notes for this episode on the website at talkpython.fm/57
See the full show notes for this episode on the website at talkpython.fm/56
See the full show notes for this episode on the website at talkpython.fm/55
See the full show notes for this episode on the website at talkpython.fm/54
See the full show notes for this episode on the website at talkpython.fm/53
See the full show notes for this episode on the website at talkpython.fm/52
See the full show notes for this episode on the website at talkpython.fm/51
See the full show notes for this episode on the website at talkpython.fm/50
See the full show notes for this episode on the website at talkpython.fm/49
See the full show notes for this episode on the website at talkpython.fm/48
See the full show notes for this episode on the website at talkpython.fm/47
See the full show notes for this episode on the website at talkpython.fm/46
See the full show notes for this episode on the website at talkpython.fm/45
See the full show notes for this episode on the website at talkpython.fm/44
See the full show notes for this episode on the website at talkpython.fm/43
See the full show notes for this episode on the website at talkpython.fm/42
See the full show notes for this episode on the website at talkpython.fm/41
See the full show notes for this episode on the website at talkpython.fm/40
See the full show notes for this episode on the website at talkpython.fm/39
See the full show notes for this episode on the website at talkpython.fm/38
See the full show notes for this episode on the website at talkpython.fm/37
See the full show notes for this episode on the website at talkpython.fm/36
See the full show notes for this episode on the website at talkpython.fm/35
See the full show notes for this episode on the website at talkpython.fm/34
See the full show notes for this episode on the website at talkpython.fm/33
See the full show notes for this episode on the website at talkpython.fm/32
See the full show notes for this episode on the website at talkpython.fm/31
See the full show notes for this episode on the website at talkpython.fm/30
See the full show notes for this episode on the website at talkpython.fm/29
See the full show notes for this episode on the website at talkpython.fm/28
See the full show notes for this episode on the website at talkpython.fm/27
See the full show notes for this episode on the website at talkpython.fm/26
See the full show notes for this episode on the website at talkpython.fm/25
See the full show notes for this episode on the website at talkpython.fm/24
See the full show notes for this episode on the website at talkpython.fm/23
See the full show notes for this episode on the website at talkpython.fm/22
See the full show notes for this episode on the website at talkpython.fm/21
See the full show notes for this episode on the website at talkpython.fm/20
See the full show notes for this episode on the website at talkpython.fm/19
See the full show notes for this episode on the website at talkpython.fm/18
See the full show notes for this episode on the website at talkpython.fm/17
See the full show notes for this episode on the website at talkpython.fm/16
See the full show notes for this episode on the website at talkpython.fm/15
See the full show notes for this episode on the website at talkpython.fm/14
See the full show notes for this episode on the website at talkpython.fm/13
See the full show notes for this episode on the website at talkpython.fm/12
See the full show notes for this episode on the website at talkpython.fm/11
See the full show notes for this episode on the website at talkpython.fm/10
See the full show notes for this episode on the website at talkpython.fm/9
See the full show notes for this episode on the website at talkpython.fm/8
See the full show notes for this episode on the website at talkpython.fm/7
See the full show notes for this episode on the website at talkpython.fm/6
See the full show notes for this episode on the website at talkpython.fm/5
See the full show notes for this episode on the website at talkpython.fm/4
See the full show notes for this episode on the website at talkpython.fm/3
See the full show notes for this episode on the website at talkpython.fm/2
See the full show notes for this episode on the website at talkpython.fm/1
See the full show notes for this episode on the website at talkpython.fm/0