<strong>Topics covered in this episode:</strong><br>
<ul>
<li><strong><a href="https://dev.to/aws/3-things-i-wish-i-knew-before-setting-up-a-uv-workspace-30j6?featured_on=pythonbytes">Setting up a Python monorepo with uv workspaces</a></strong></li>
<li><strong><a href="https://catt.rs/en/stable/?featured_on=pythonbytes">cattrs</a>: Flexible Object Serialization and Validation</strong></li>
<li><strong><a href="https://jblanca.net/edu/learning_programming_in_ai_age/?featured_on=pythonbytes">Learning to program in the AI age</a></strong></li>
<li><strong><a href="https://www.linkedin.com/posts/savannahostrowski_hey-you-are-you-using-fastapi-well-activity-7432877782914977793-2ayP/?featured_on=pythonbytes">VS Code extension</a> for FastAPI and friends</strong></li>
<li><strong>Extras</strong></li>
<li><strong>Joke</strong></li>
</ul><a href='https://www.youtube.com/watch?v=eeT0gRrQVmU' style='font-weight: bold;'data-umami-event="Livestream-Past" data-umami-event-episode="472">Watch on YouTube</a><br>
<p><strong>About the show</strong></p>
<p>Sponsored by us! Support our work through:</p>
<ul>
<li>Our <a href="https://training.talkpython.fm/?featured_on=pythonbytes"><strong>courses at Talk Python Training</strong></a></li>
<li><a href="https://courses.pythontest.com/p/the-complete-pytest-course?featured_on=pythonbytes"><strong>The Complete pytest Course</strong></a></li>
<li><a href="https://www.patreon.com/pythonbytes"><strong>Patreon Supporters</strong></a></li>
</ul>
<p><strong>Connect with the hosts</strong></p>
<ul>
<li>Michael: <a href="https://fosstodon.org/@mkennedy">@
[email protected]</a> / <a href="https://bsky.app/profile/mkennedy.codes?featured_on=pythonbytes">@mkennedy.codes</a> (bsky)</li>
<li>Brian: <a href="https://fosstodon.org/@brianokken">@
[email protected]</a> / <a href="https://bsky.app/profile/brianokken.bsky.social?featured_on=pythonbytes">@brianokken.bsky.social</a></li>
<li>Show: <a href="https://fosstodon.org/@pythonbytes">@
[email protected]</a> / <a href="https://bsky.app/profile/pythonbytes.fm">@pythonbytes.fm</a> (bsky)
Join us on YouTube at <a href="https://pythonbytes.fm/stream/live"><strong>pythonbytes.fm/live</strong></a> to be part of the audience. Usually <strong>Monday</strong> at 11am PT. Older video versions available there too.
Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to <a href="https://pythonbytes.fm/friends-of-the-show">our friends of the show list</a>, we'll never share it.</li>
</ul>
<p><strong>Brian #1: <a href="https://dev.to/aws/3-things-i-wish-i-knew-before-setting-up-a-uv-workspace-30j6?featured_on=pythonbytes">Setting up a Python monorepo with uv workspaces</a></strong></p>
<ul>
<li>Dennis Traub</li>
<li>The 3 things
<ul>
<li>Give the Root a Distinct Name</li>
<li>Use workspace = true for Inter-Package Deps</li>
<li>Use importlib Mode for pytest</li>
</ul></li>
</ul>
<p><strong>Michael #2: <a href="https://catt.rs/en/stable/?featured_on=pythonbytes">cattrs</a>: Flexible Object Serialization and Validation</strong></p>
<ul>
<li><strong>cattrs</strong> is a Swiss Army knife for (un)structuring and validating data in Python.</li>
<li>A natural alternative/follow on from <a href="https://github.com/rnag/dataclass-wizard?featured_on=pythonbytes">DataClass Wizard</a></li>
<li>Converts to ←→ from dictionaries</li>
<li><em>cattrs</em> also focuses on <strong>functional composition</strong> and <strong>not coupling</strong> your data model to its serialization and validation rules.</li>
<li>When you’re handed unstructured data (by your network, file system, database, …), <em>cattrs</em> helps to convert this data into trustworthy structured data.</li>
<li>Batteries Included: cattrs comes with pre-configured converters for a number of serialization libraries, including JSON (standard library, orjson, UltraJSON), msgpack, cbor2, bson, PyYAML, tomlkit and msgspec (supports only JSON at this time).</li>
</ul>
<p><strong>Brian #3: <a href="https://jblanca.net/edu/learning_programming_in_ai_age/?featured_on=pythonbytes">Learning to program in the AI age</a></strong></p>
<ul>
<li>Jose Blanca</li>
<li>“I teach a couple of introductory Python courses and I've been thinking about which advice to give to my students, that are studying how to program for the first time. I have collected my ideas in these blog posts”
<ul>
<li><a href="https://jblanca.net/blog/2026/03/06/learning-to-code-in-the-ai-age/?featured_on=pythonbytes">Why</a> learning to program is as useful as ever, even with powerful AI tools available.</li>
<li><a href="https://jblanca.net/blog/2026/03/07/the-art-of-learning-in-the-ai-age/?featured_on=pythonbytes">How</a> to use AI as a tutor rather than a shortcut, and why practice remains the key to real understanding.</li>
<li><a href="https://jblanca.net/blog/2026/03/08/programming-what-to-learn/?featured_on=pythonbytes">What</a> the real learning objectives are: mental models, managing complexity, and thinking like a software developer.</li>
</ul></li>
</ul>
<p><strong>Michael #4: <a href="https://www.linkedin.com/posts/savannahostrowski_hey-you-are-you-using-fastapi-well-activity-7432877782914977793-2ayP/?featured_on=pythonbytes">VS Code extension</a> for FastAPI and friends</strong></p>
<ul>
<li>Enhances the FastAPI development experience in Visual Studio Code</li>
<li><strong>Path Operation Explorer</strong>: Provides a hierarchical tree view of all FastAPI routes in your application.</li>
<li><strong>Search for routes</strong>: Use the Command Palette and quickly search for routes by path, method, or name.</li>
<li><strong>CodeLens links appear above HTTP client calls</strong> like client.get('/items'), letting you jump directly to the matching route definition.</li>
<li><strong>Deploy your application</strong> directly to <a href="https://fastapicloud.com/?featured_on=pythonbytes">FastAPI Cloud</a> from the status bar with zero config.</li>
<li>View <strong>real-time logs from your FastAPI Cloud</strong> deployed applications directly within VS Code.</li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode&featured_on=pythonbytes">Install from Marketplace</a>.</li>
</ul>
<p><strong>Extras</strong></p>
<p>Brian:</p>
<ul>
<li><a href="https://gvanrossum.github.io/interviews/index.html?featured_on=pythonbytes">Guido van Rossum interviews key Python developers from the first 25 years</a>
<ul>
<li><a href="https://gvanrossum.github.io/interviews/BrettCannon.html?featured_on=pythonbytes"><strong>Interview with Brett Cannon</strong></a></li>
<li><a href="https://gvanrossum.github.io/interviews/ThomasWouters.html?featured_on=pythonbytes"><strong>Interview with Thomas Wouters</strong></a>
Michael:</li>
</ul></li>
<li><a href="https://www.youtube.com/watch?v=Kourq_Lz03U">IntelliJ IDEA: The Documentary | An origin story</a> video</li>
<li>Cursor Joined <a href="https://www.jetbrains.com/acp/?featured_on=pythonbytes">the ACP Registry</a> and Is <a href="https://blog.jetbrains.com/ai/2026/03/cursor-joined-the-acp-registry-and-is-now-live-in-your-jetbrains-ide/?lidx=0&wpid=685326&mkt_tok=NDI2LVFWRC0xMTQAAAGgXJQdteprtfw26Lw-urwLQEjJcm8qYIOseeX-9jODplxTohhXyxl11ZbYr2ehMl__lEyRq0YT8B-mqpzj-fMmOeHXBN0Lz1o9_QOCmx7qSij-fDKY&featured_on=pythonbytes">Now Live in Your JetBrains IDE</a></li>
<li><a href="https://mkennedy.codes/posts/what-hyper-personal-software-looks-like/?featured_on=pythonbytes">What hyper-personal software looks like</a></li>
<li>I’m doing in-person training again (limited scope):
<ul>
<li><a href="https://mkennedy.codes/agentic-ai-enablement/?featured_on=pythonbytes">On-site, hands-on AI engineering enablement for software teams with Michael</a></li>
</ul></li>
</ul>
<p>Joke: <a href="https://www.reddit.com/r/SaasDevelopers/comments/1rcdzrk/saas_is_dead/?share_id=Zi4lrnVSFkytCUnpfYIMo&featured_on=pythonbytes">Saas is dead</a></p>