Python Bytes - #466 PSF Lands $1.5 million
Episode Date: January 19, 2026Topics covered in this episode: Better Django management commands with django-click and django-typer PSF Lands a $1.5 million sponsorship from Anthropic How uv got so fast PyView Web Framework Extr...as Joke Watch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 11am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Brian #1: Better Django management commands with django-click and django-typer Lacy Henschel Extend Django <code>manage.py</code> commands for your own project, for things like data operations API integrations complex data transformations development and debugging Extending is built into Django, but it looks easier, less code, and more fun with either <code>django-click</code> or <code>django-typer</code>, two projects supported through Django Commons Michael #2: PSF Lands a $1.5 million sponsorship from Anthropic Anthropic is partnering with the Python Software Foundation in a landmark funding commitment to support both security initiatives and the PSF's core work. The funds will enable new automated tools for proactively reviewing all packages uploaded to PyPI, moving beyond the current reactive-only review process. The PSF plans to build a new dataset of known malware for capability analysis The investment will sustain programs like the Developer in Residence initiative, community grants, and infrastructure like PyPI. Brian #3: How uv got so fast Andrew Nesbitt It’s not just be cause “it’s written in Rust”. Recent-ish standards, PEPs 518 (2016), 517 (2017), 621 (2020), and 658 (2022) made many uv design decisions possible And uv drops many backwards compatible decisions kept by pip. Dropping functionality speeds things up. “Speed comes from elimination. Every code path you don’t have is a code path you don’t wait for.” Some of what uv does could be implemented in pip. Some cannot. Andrew discusses different speedups, why they could be done in Python also, or why they cannot. I read this article out of interest. But it gives me lots of ideas for tools that could be written faster just with Python by making design and support decisions that eliminate whole workflows. Michael #4: PyView Web Framework PyView brings the Phoenix LiveView paradigm to Python Recently interviewed Larry on Talk Python Build dynamic, real-time web applications using server-rendered HTML Check out the examples. See the Maps demo for some real magic How does this possibly work? See the LiveView Lifecycle. Extras Brian: Upgrade Django, has a great discussion of how to upgrade version by version and why you might want to do that instead of just jumping ahead to the latest version. And also who might want to save time by leapfrogging Also has all the versions and dates of release and end of support. The Lean TDD book 1st draft is done. Now available through both pythontest and LeanPub I set it as 80% done because of future drafts planned. I’m working through a few submitted suggestions. Not much feedback, so the 2nd pass might be fast and mostly my own modifications. It’s possible. I’m re-reading it myself and already am disappointed with page 1 of the introduction. I gotta make it pop more. I’ll work on that. Trying to decide how many suggestions around using AI I should include. It’s not mentioned in the book yet, but I think I need to incorporate some discussion around it. Michael: Python: What’s Coming in 2026 Python Bytes rewritten in Quart + async (very similar to Talk Python’s journey) Added a proper MCP server at Talk Python To Me (you don’t need a formal MCP framework btw) Example one: latest-episodes-mcp.png Example two: which-episodes-mcp.webp Implmented /llms.txt for Talk Python To Me (see talkpython.fm/llms.txt ) Joke: Reverse Superman
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 466 recorded Monday, January 19th, 2026.
I'm Michael Kennedy.
And I'm Brian Rannocken.
This episode is brought you by us, all of our things.
I know Brian is very lean these days with his TDD and would like to tell you about it more on that later,
but he's got his upcoming book and course.
And I've got my Talk Python and Production book, which is still good.
and strong. I love that. Of course, all of our courses, things like that. Also, connect with us on
social media links for most of the places that you might do so in the episode show notes,
your podcast player and Sean. So, and finally, subscribe to the new letter, newsletter.
We're putting awesome things in there. Lots more than just the show notes. So it's kind of a
nice reinforcement, a few extra resources if you like them. Yeah, mostly put together by Brian.
So we appreciate that, Brian. Thanks. Yeah, you bet.
I also appreciate a good web framework with a solid community.
What do you got in that realm?
Well, we're going to talk about Django.
So get this up here.
Django, I ran across this article about,
that's six months old from the RevSys.
It's from June of 2025.
But I headed in my queue and I'm going to cover it.
So better Django management commands with Django Click and Django Typer.
And this is from Lacey Henshel.
And so let's look at the management commands.
If anybody that's used Django, you know there's management commands.
There's a bunch of them.
So there's, you just say like, man, if you go, if you're in the Django thing, you can go
manage.
comend or you can do Django admin command or Python.m.
Jango, then the command, there's a bunch of built-in ones.
And since there are things like just the maintenance around your website stuff.
and other things.
But there's a lot of stuff there,
and it's so convenient that it'd be cool
if you could add your own.
And there is built-in stuff.
You can create custom commands,
but you do it by deriving.
You have to derive from a base command class
and then have self everywhere.
And there's this, there's the, you know, object-oriented part of that that's weird.
But there's other, there's better ways to do.
There's at least different ways.
If this doesn't jive with you, there's better ways.
And that's what we're talking about.
This is with Django Click and Django Typer.
So first off, one of the cool things is she runs down why you would want to add your own management commands.
And there's a lot of great reasons like data operations importing, like she has an example of importing CSV file from clients, exporting data for reports.
Those are great things.
You're doing it on the system, but you can just, you know, you're doing it on the system, but you can just, you.
you go use the same internals of Django to be able to pull things out.
That's great.
Also, development and debugging, one of my favorite reasons.
Okay, so the first off, Django Click, and Django Click is just based on Click, of course,
and Click is a great way to do CLI tools, too.
And so it's just an integration of Click and Django to get these management commands.
And you end up just creating a file with, and it's a lot shorter with some, you do click options and stuff.
And it's just that integration of click.
And then again, Typer is also, is built on Click also.
But if you're used to Typer, grab Typer.
But one of the cool things about Typer is the coloring and the different, the output.
You can do more structured output.
So they have an example where you can, where you have like better things like.
like emoji support and tables and things like that.
So if you want to do cool,
and that's,
the article goes in and says,
says,
hey,
well,
which one should you use?
I'm not going to scroll the bottom,
but which one should you use?
And it's basically,
she says,
she usually reaches for click,
Django Click,
but when she wants to do nice reports and stuff,
do Django,
type her.
And they're both,
I wrote this down,
but they're both,
they're,
they're supported under, what is it, the Django Commons and a group on GitHub supports both of
these extra plugins or whatever.
So pretty cool.
Yeah, it was really nice.
Click and typeer are obviously super popular.
And if you're like, I know one of those, but I want to add a custom Django command.
Like, let's just do it.
You know, I imagine I say this, as I say this, I'm sure it's out there, but I have no awareness of its existence.
it would also be cool to have a text tool sort of UI if you could just type manage pie-ish,
manage TX or whatever, and you get like a UI for all these managed Django commands.
That would be pretty neat, including your custom ones.
Probably out there.
I have no idea about it, so maybe someone will send us a message where you can do a follow-up.
You know, it's the age-old question, Brian.
What would you do if you had a million dollars?
Think of a million dollars.
You never have to be subservient to society again.
Well, maybe it's not quite that way.
But do we have really...
I think I'd need a one and a half.
You would need one and a half because inflation.
You would actually need more than one and a half probably.
But you could sure make a dent with $1.5 million.
And that is really good news because Anthropic has just invested $1.5 million in the PSF in open source security.
That's awesome.
I want to take a minute and just, you know, thank you.
Anthropic.
People hate on AI companies.
There's discussion today above.
Folks that bring us Claude, right?
Yeah, Claude, Opus, Claude Sonnet, CloudCode.
And honestly, I've been using Claude.
Just cloud, I think is Cloud.
AI as like the chat GPT alternative.
Chat GPT's gotten really less good lately,
and I don't understand.
It's weird.
Like, I was just writing a blog post,
which I'll talk about later.
And it's just doing weird things.
And I found, like, Cloud is doing a lot.
So I think it's honestly one of the better AIs.
And if all these companies are going to make all this money and exchange it around,
I really like to see Anthropic putting this money back into Python.
You know, they're, they're, it's not just Python too.
They just bought Bun, which is like, as far as I understand it, kind of like a node alternative.
Certainly a Java script runtime thing for a ton of money as well.
So they're doing, I mean, they're not, they did buy the PSF.
They just gave money.
So this is over two years.
So what is that?
PSF isn't for sale.
It's not like Greenland or anything.
Well, I mean, I think we know that.
because they're turning down of that probably not a coincidence, $1.5 million offered by the recent U.S. government of strings attached.
This one comes without strings, more or less.
I'm sure there are strings, but not to the same degree.
But it's really $750,000 a year.
And it has, let me see, I took some notes on exactly the goals of this.
But it's basically mostly for Python security from YRSA, but also to fund things like,
the developer and residence initiative.
Community grants, which remember there was a big kerfuffle about grants being paused or canceled.
Yeah.
Because they ran out of money, right?
I mean, it sucks.
And maybe they promised it and then didn't deliver it.
I don't remember.
I feel like there was something like that.
But even if you promised it, if the money's gone, it's not like, well, you work for the PSF.
Let me have your 401k so we can keep our promise.
You know, at some point, if the money's not there, the money's not there.
So this is really awesome about this is back infrastructure, like Pi Pi, like,
I say this every now and then, but I'm not sure how many people understand how expensive Pi
is to run. If it were not for fast, fast at leave, the CDN giving free bandwidth. It's $100,000 or more a month
amount of something like that. I mean, it's a lot of money, right, compared to the overall budget.
And this is a lot of money compared to the overall budget. I feel like the budget of the PSF is
around $7 million. I mean, I haven't checked in the last couple years, but last time I heard it was
something like that. So this is a significant portion of that.
anything else yeah so the current cdn cost uh last article i found is 1.5 million a month a month
that that can't be right no i feel like that's high i mean i know it's high but i feel like even
that's high but it might be a year but i don't know i could be wrong there's actually a really nice
article written up somewhere that i didn't make any part of our news that um about the stats of
the PSF but i just heard it indirectly so i don't have have it to pull up anyway so one of the
goals is to fund new automated tools for proactively reviewing all packages uploaded to
PPI moving beyond a reactive only review process. Remember a few weeks ago I talked about,
hey, here's how you set up like Python supply chain security. And one of the main ways,
honestly, is wait a little while to install it and then check if a problem has been reported.
It's kind of the reactive thing. It's like, well, probably somebody, if something happens
to a major package, we'll figure it out within a few days and
react to it. So wouldn't it be nice if that didn't have, if it didn't have to happen that way,
it would. You know, that is how it happens. Right. And they, the PSF plans to build a new
data set of known malware for capabilities analysis. So all sorts of good stuff. I just wanted to
shine a light on this. Say, thank you, Anthropic. And yeah, it's really great for PSF and,
and everyone, I think. Well, I, um, we got this, I did notice this, but I also a couple people mentioned
it to us, an article by Andrew Nesbitt, how UV got so fast. And there's a lot of reasons why I like this
article. First off, just right off the top of the bat that says, says, hey, usual explanation is
it's written in Rust. And that's kind of what we think is, right? Is like, you can take Python tools
and rewrite them in Rust and they'll be faster. But it's a lot more than that. The Rust part is contributing, of course,
And the, but there's, there's, there's, there's some tweaks around it and also some design decisions that make it a lot faster.
And it's interesting read.
So one of the things is around the standards.
So there's a bunch of standards that came in to make this possible.
There's 518 that created private project automol.
So UV reads pieproject.tomel.
It doesn't read set up dot pie.
You can't do any other stuff.
You have to do wheels.
That's what UV looks for.
Also, PEP, actually, I could be wrong.
I think I'm overstating that.
I think it does do backwards compatible stuff,
and it just falls back to different modes.
Well, I'll have to double check that, but I think so.
Anyway, PEP 517, or is, was came in in 2017,
which is separate build front ends and back ends.
So now even PEP doesn't need to understand set up tools internals.
There's PEP 621 that standardized the bracket project table within the Tommel file and reading at tables, Tomles.
And then there's the PEPs 658, which was package metadata directly in the simple repository API.
Essentially, the tools on the back, when you do install something, they don't have to grab a whole bunch of data.
They just have to grab like this dependency information, which they used to.
to have to, there's more of a story here about how PIP used to have to go out and just really
download, try stuff and then try to run it. If it didn't work, try something else. There's a
bunch of stuff there. There's more than that, though. There's these, having these in place,
basically it says, you know, UV could not have shipped in 2020 because these, all these
weren't in place. So it relied on everything. PIP, PEP 658 went live in PIP in May of 2020.
and UV launched February of 2024.
So it's building on top of all those things.
Also, UV drops a bunch of stuff.
PIP still supports a lot of old stuff, which UV just doesn't.
Like egg support.
PipConf doesn't support that.
There's no bytecode compilation by default.
I didn't realize this.
So, yeah, when you PIP install something,
it by default goes through and does PIC converts byte code to,
or converts code to P.O.C. bytecode objects.
UV doesn't do this.
Apparently you can turn it on,
but it doesn't do it by default.
Requires virtual environments.
It seems like it could be cached, you know?
Yeah.
But I guess I don't know how UV pairs that to Python versions
and maybe it gets cached differently.
You run like Python 313 to compile them.
Maybe it's just like not worth it, you know?
Yeah.
I'll just run through these quick, stricter.
Speck enforcement,
ignoring the upper bound on Python
because projects say, you know,
I haven't tested on 4-0, so don't do that.
But it usually works anyway.
So I didn't realize they ignored that.
Also, first index wins.
I don't know why PIP checks all of the indices
before it grabs one, but UV stops.
So there's at the top,
it talks about speed comes from elimination.
Basically every code path you don't have
to go down is code you don't have to wait for.
And also, it's a new project, so you're not breaking backwards compatibility.
If UV doesn't work, use PIP.
Like Semposs mentioned, there are many things a new project can afford to drop or work
around when building from ground up, which is good.
It shows, as it shows that we can, what we can have.
Yeah, basically, you could start from scratch, which is great.
The other interesting things is there's a bunch of optimizations that don't,
that don't rely on Rust, which are interesting.
Like there's a, there's using, because it's only looking at wheels,
it can, wheels or zip archives,
you can look at the end of the wheel first to grab the directory list,
things like that.
Parallel downloads.
That says, you know, any language you can do that.
Pip could do parallel downloads, but it doesn't.
The global clash, we've seen this with UV a lot is when you download something
or PIP install something from UV with you,
it caches it somewhere.
So if you create another virtual environment,
it's going to be there already.
It doesn't have to download it again, which is great.
Anyway, a bunch of cool things here.
So one of the reasons why I like the article,
but also I like the idea of thinking,
I can't speed it up because I'm going to stick with Python for now.
There are tradeoffs that you can do.
You can make some changes in projects,
especially ones you completely control,
that you can say, well, you know what?
I'm going to take away some of the assumptions and some of the use models that I used to support
and just to make it faster.
Henry points out there makes the first import slower for not having PYC, I think.
Yeah.
It's an actual savings if you don't use the entire package.
Though I guess it's the, it depends when this is happening, right?
Like if this is happening on V&VM on your machine, like, yeah, it doesn't really matter.
Like after the first run, it's fast.
If it's happening on startup on a Docker thing or every time it starts, it's,
uses the new Docker container? Well, then it happens every time and it's not great.
Yeah, it's making me wonder if maybe I can get better startup speed by running a script
to pre-compile everything installed in the V&V if UV is not doing it.
I'll let you know. Interesting. I didn't understand why PIP looks at all of the indices.
Henry Schreiner says, looking at all the indices, is important when you have a newer version
on a different index, which sometimes you need to do. Sometimes you do need to, but it is
slower to look at all of them. So yeah, you can, when you have multiple, yeah, this is sort of like
inside baseball, but you can't set up your PIP configuration so you have multiple places where
you're grabbing things like an internal and stuff. Yeah. There are opportunities though for PIP
to speed up without breaking any of its historical compatibility. Like it theoretically could say,
you asked me to install 10 things when you said dash R requirements or high project at Tomlin or
whatever. Let's go get those in parallel. Let's run the install in parallel, right? Like,
we all have 10, 14, 20, whatever cores, right? Like, don't run it on one. And we probably
have faster internet. Don't just run it on one connection. So on. Yeah. Also, the caching is
I love that part of like just cashing it and having a machine local cache for, for people like me
that create, I create virtual environments all the time. So do I. It just seem free. So, yeah.
Especially with UV.
And finally, Henry out in the audience,
throws out dash, dash compile, dash bytecode.
I'm assuming that's a command to UV.
And if it is, it's getting set on some of my installs here soon.
Awesome.
All right, let's switch gears here to the PiVue web framework.
Okay, so PiVue.
Now, there have been other things like this recently out there.
Something called PiWebView.
Not that.
PiWebView was a thing where you could embed,
basically a browser kind of like electron would.
So this is not that.
This is a totally separate web framework that's super interesting.
I just interviewed Larry, who's behind the project over on Talk Python.
It's on YouTube as a live stream.
It is not yet out as a podcast episode.
So coming soon to a podcast player near you,
it's based on this thing called Phoenix Live View,
which is written in Elixir of All Things.
But the idea is we want to have very reactive front-end code, right?
Kind of like React, the name, or view or something like that.
But we would rather have Python code controlling it and have it more done on the server,
a little bit like an HTMLX vibe.
Okay.
So what this does is it's based on this more popular, because it's been around a lot longer,
Phoenix Live View, which people may have heard.
So what you do is you write code on the server as if it could,
it could update the front end directly.
When you launch your app,
what happens is it actually,
this whole framework sets up a web socket connection
from the back end and sends events to you that happen
as if they were JavaScript events,
but they happen on the server.
When those events happen,
you just re-render the page,
and there's a diffing engine that figures out,
like, okay, you sent the whole page,
but actually it's just this div
and that div that need to go down,
and it sends them over.
So let me show you an example,
Ryan, before you're like, I don't know, Michael, this sounds weird.
Does sound weird.
It does sound weird. It's cool.
So check this out.
Let's, I link to these examples.
Examples.pivu.orgs.
There's a bunch of, but there's a maps example, okay?
I'm going to show you the example.
Then I'm going to show you the code and I want your reaction, okay?
And I'll narrate for listeners.
So if I zoom out, what we have is on the left, we've got a list of U.S.
National Parks.
And on the right, we have a open street map map, right?
So you see on the left, it has the selected
park selected. And if I click on one over here in the map, it then updates the thing on the left,
right, to say like, okay, that was a, this is a JavaScript map component that's loaded here.
And as you interact with it, you can see the details view, or the list view, rather, I don't know,
I lost my window, is updating, right? They're staying in sync. That's cool. It's cool. Now, also,
when I click on the left, it moves the map. So if I click on Yellowstone, the map jumps over there.
like the Joshua Tree.
It's over there.
If I bring something closer to home, like Olympic National Park,
the National Forest, that pops up.
This is a pretty neat app, and it's clearly interactive, right?
It's not refreshing the page.
It feels complicated.
But if I go back here and I go to the maps and I show you the code,
I'll describe this for everyone, there's a CSS file.
That's fine.
There's a, hold on, let's do it this way.
There's a Parks PY file, and it literally is just a list of dictionaries of like,
here's the name of the parks, here's a ladder,
Here's the description, here's a icon.
It's just like a flat data data file, yeah?
Go back.
The Map.
NotPY, it says we're gonna create a data class.
And the data class has a list of parks
and a selected park, okay?
When somebody clicks on it,
it just does a dictionary comprehension
or sort of thing to search for the park that matches.
It sets the selected park name on its data class,
and it says there's an event to highlight the park.
That's the entire application.
That's pretty amazing.
Is that nuts?
right? And if you look at the HTML, it's just a bunch of ginger with tailwind that just says,
you know, bind to this value. Instead of just saying the value equals, you say Phoenix value equals,
and you just pull out the context from the name. So this is a super interesting web framework that
has not got a lot of light shine on it yet. It's got 63 stars. So it's basically a re-implementation
of the Phoenix Live View. And yeah, I think it's pretty neat. Larry says he's been using it for some
projects at work and just starting to get it out in the public. So it's probably more tested than it
feels. And finally, if you want to understand a link to this in the show notes, if you want to understand
like how is this even possible, you need to read the Live View Life Cycle section of the docs.
And it talks about, okay, how it first renders the template. And then once it's done that,
it's connected a web socket, then it listens for events and then the Diffing Engine and all that
kind of stuff and how real-time events, real-time updates happen and so on. Anyway, what do you think?
Neat, right?
I think it's pretty cool, yeah.
Yeah, cool.
Well, that is that, I think we're out of topics.
Yeah.
Any extras?
Yeah, I got a couple extras.
All right, let's throw it over to you to check out the extras you got.
Okay, so we did, I was just talking about the article I brought, talked about earlier about the Django management commands.
That was on the RevSys blog, and there's another cool thing that RevS has that I
want to show. So first off, we did, I'm pretty sure we announced this, but Django 6 was released on
December 3rd and there was a bug fix 601, which came out on January 6th. Oh, my birthday.
Give me a birthday present. And then, but, so should you upgrade and how to upgrade? And that's
what I want to talk about is there's a, there's a website called Upgradejango.com. And this is put out
by RevSys, and it's pretty cool. It has all the, has the, the LTS versions, and it has basically
the current supported version of Django. We've got latest version and initial release and
support dates. Then they have future versions scheduled so far. There's only 6.1 plan so far in
August. And then a whole bunch of old unsupported releases. Now, if you're on an unsupported version,
you're probably how to upgrade, but how do you do that?
And that's one of the things I like is they have a section on why to upgrade,
and they also have how to upgrade.
And I actually was not expecting this.
Their recommendation is unless you really know what's in all the Django releases,
you probably had to do it version by version.
Luckily, there's usually just one or two big versions that come out a year.
So you're probably not behind too much,
But so it discusses doing it one release at a time or a few at a time or just jumping all the way.
And then, of course, you know, it's from Roses.
It's fine that they say, you could pay somebody to do it like maybe us, which is cool.
But I do like the discussion around it.
The discussion about going one release at a time.
If you really, you can go by the release notes then of like what changed.
And you can just, you know, try to run it and run your test suite and save everything's working.
And if it's not, then you can check the release notes to figure out why.
And it might be the slower way to do it, but it might not be that bad.
You could just sort of chug through it in a day or so maybe.
I don't know.
It depends on how many of the features you're using that have been changed.
Yeah.
But that's cool.
You might even be able to say, hey, Claude, I'm on this version of Django.
I want to be on that version.
Here's the release notes.
Help?
Yeah.
Yeah.
And also, you could even tell it this stuff.
You know, I run my test.
bump up one version of time, run the test.
Read this guide.
Sketch it out and let's figure it out.
Yeah, I think it's more important,
before we move on this topic, Brian, really quickly,
is it's more important than perhaps
some people realize to upgrade Django.
Django does much more than most
Python web frameworks, right?
It's got admin sections and all sorts of things.
And every now and then there's like,
there's some kind of security issue we should fix around
X, Y, and Z.
You don't see that as much with Flasker.
Yeah, you don't see it was Flasker.
fast API because the security problems are the one you write, adding those features to your app yourself.
There's no CVEs for those, right? But because Django comes with all that functionality,
there's more of a surface area. And sometimes you want to be on top of it. So don't sleep on it.
Stay ahead. That's also another reason to choose Django as well, because it's used by so many people,
the security fixes get fixed pretty fast.
Yeah. The way your one-off web app gets security tested is not fun.
Yeah. Yeah, also performance and yeah, just keeping up with newer versions.
Yeah.
That's good reasons.
Next up, I wanted to talk about the book.
We recorded last Monday and on Tuesday, I was like, I just want to get the first release done.
So I just spent a lot of time Monday night just writing and finished up the first edition.
And there's a bunch of downloads.
There's six because I've had people ask about it.
So there's really the full book.
And then there's part two and part three are individual downloads if you've already read part of it.
Anyway, I think there's, what do we got?
17 chapters or something like that now.
But I am, so now what I'm doing?
What am I doing now is I'm going through and cleaning it up.
There's some people that have submitted issues to my page, which is cool.
some things to think about.
So I am looking at feedback, but there's not that many.
So I think I might get the second edition pretty good quickly.
And then I'm going to go through and read it all and do the third edition or the third, not
additions, third, I guess, the third pass through it, the third draft by reading it.
So that's my process.
I also put it up for, it's available on PythonTest.com, but you can also get it at Leanpub.com now.
I made it available there.
And I don't think I've gotten anybody buy it from Lean Pub yet.
So, yeah, you can, it's got like the cool set your own price slider.
Yeah, the UI is fun.
Yeah, I like it.
So that's, those are my extras.
Sweet.
All right.
I have a few, actually.
Nice article over at the new stack.
They wrote up a long article on a recent podcast episode I did called Python.
What's Coming in 2026?
So I did a nice episode of, you know, where are we, where are we going with Python,
with a bunch of folks, three core developers, steering council members, other celebrities
and professors and so on.
And so they wrote this up and it's just, I thought it was really nice.
Like they really put together a, like, here's what Brett Cannon said.
Here's what Barry Warsaw.
Tom It Worthers wrote our Judy Bertrand, Virtual and so on.
So really nice.
and people can check that out.
So I'm just going to link to that.
I'm going this way.
So Brian, you didn't even know this.
This happened.
And to my knowledge, it is not a problem, which is miraculous.
I completely rewrote Python bytes over the weekend.
It was in Pyramid using all synchronous code.
And I rewrote it in the same way that I did Talk Python into court, which is Async Flask,
and converted it all to async database queries and API calls and stuff like that.
Nice.
And guess what?
It seems to still be working.
Hooray!
Big changes like that make me nervous.
I mean, it was like 5,000 lines of code or change.
But anyway, that's really good.
So what was the reason?
Is it just to try to get it faster?
No, no, it's not a performance thing.
It's a everything that I'm building these days,
I'm building in Quart or Fast API,
some async framework that supports types and that is actually being used.
And if you read this blog post that I like to for Talk Python,
basically that was why.
Like I don't want it just hanging around on a framework that hasn't had a release in like four years
and just getting older.
You know what I mean?
Because what if something does come up with it?
They say, oh, there's a security vulnerability.
Well, how well do you think that's going to get fixed?
You know what I mean?
Maybe.
But maybe not, right?
It just makes me nervous to have old, not abandoned as a bit of a harsh word,
but basically no longer maintained code.
And so I was just sitting there on Saturday.
and like, whoa, it's kind of hanging out here on the couch.
What can I do?
Let me see if I can just, I only have a few more apps to move over to something more
modern.
So I thought I'll give it a go.
And it went pretty well.
So there it is.
It eases up on your mental load, too, if you don't have to think about lots of different
frameworks.
Exactly.
If I write some cool little library that works on one, I'm like, I would actually
be cool to use on all these things.
If I want to add a new feature or something, I'm like, yeah, but it's not the same.
You know what I mean?
It is exactly.
It's nice to have it basically the same.
as well. Once I kind of had my head around Pye test, I was like, should I go try to become
an expert at unit test also? Nah, I don't want to. Yeah, I mean, the equivalent would be like,
you've got, you know, 2,000 tests and unit tests, and you'd, like, it should be so much
easier to do this feature in PIT test because fixtures, but it's not, right? Like, you don't have
to rewrite it. It's not like it would make it run that much better, but if you're going to
continue to work on it on add features, you're like, I would rather not write against a thing that
is kind of done in a nod.
Actually, that's one of the things I would totally throw Claude at, too, to be able to say,
you know, just rewrite these.
I've already got the logic there.
I just want it different.
Yeah, that's what I did.
For rewriting Talk Python, I did it by hand, and I wrote about it, and it took weeks.
So what I did is I loaded a project with both Talk Python and Python bytes, and I said,
I want to do this transformation.
Here's the docs for Quartz, and here is Talk Python, which is a very similar to codebase
that has been migrated over.
So anytime you see an issue,
see how we handle it over there,
and it went well.
Oh, wow.
Yeah.
That's a good one.
Yeah.
Cool.
So anyway, hopefully we never speak of that again,
because if I do,
that probably means something broke.
All right.
Another thing I did over the weekend
is I created an MCP server for Talk Python.
And maybe I'll do this for Python bytes
that people want as well.
So we, I mean, we just talked about Tailwind, right?
And how basically the concept of making AIs more,
friendly for your app or your project was the match that got struck within the
tinderbox of what was going on at tail end right so this is kind of the opposite i'm like hey let's make
it easier for people who are asking questions about talk python to get good answers not hallucinated
junk answers or out-of-date answers about our podcast right people are already asking hey chat tell me
about this for talk python or they'll just ask a question about python it'll it'll give them an
episode and tell them about it, right? So what this does is it lets AIs access fast, real-time
information at the time of asking, not at the time of training, right? So that's really cool.
So you can say, like, well, what are the last, you know, I'll even check this out. I did this on
Claude. Hey, I have a question. What are the last five episodes on Talk Python? Let me use Talk
Python's MCP server for this retrieval. Getting recent episodes. Boom. Here they are. Discash.
January 12. Web frameworks impraud by their creators. January 5th. You're in review. This is the
article they just wrote up, the one they wrote up. And it's that, if I publish a new episode,
wait 10 seconds and ask this question again, it will put that episode in there, 10 seconds later.
So do you have to, okay, so maybe I missed this and you said it, do you have to, like,
once you do you do an MCP server, do you have to, like, register it somewhere, or do you,
I can't figure out a great place? So what I've done is I have a page up here called MCP
that says, hey, if you want to integrate this, and LLMs will read this, right? There's
things I've done. So there's a full documentation on how this works, right, and so on.
And that's for the LLM, you know, the AI agents to read and use. You can then take that,
take this URL here, Talk by Thundadadadfm slash API slash MCP, and put that in Claude,
Claude code, cursor in other places. But chat GPT won't work with it. I don't know why.
It's, they just don't. It's really weird, I can follow up on that later.
So like a user could say, hey, you know, look at this.
Yes, exactly.
And then the other thing I did, well, hold on.
Let me just show you one more thing really quick while we're on the MCP side.
So you can ask more complicated questions like, let's zoom out a little, which episodes
did Sebastian Ramirez appear on and which was the latest?
You can see it's like, oh, Claude goes and uses the MCP to search for guests.
Then it found Sebastian, and that guest tells them what episodes are on.
So then it searched for the episodes based on the IDs of the episodes that found.
It's great.
I found it.
Let me get all the episode details.
Okay.
I found this.
And it goes here and says, here, Sebastian Ramirez appeared on five episodes of Talk Pythonomy.
And it lists out all five of them and their dates.
The most recent one was just a couple of weeks ago where he joined to talk about Django Flask, Cortlight Star, and fast API and so on.
Isn't that cool?
That is cool.
I think, uh, actually, uh, people, guests might use this to say, like, when was I on Talk Pi?
Yeah.
actually one of one of the one of the long ago guest from like eight years ago
Sergio when I announced this on one of the social media said I just asked like
what did Sergio say you know put his whole name what did Sergio say and it actually
said he appeared on this episode here's what he you know pulled up the transcripts
and analyzed and said here's what he said and this was his main thesis of his
appearance and so on like geez so it's it's pretty cool so you ask like well if you
don't have an MCP support for your AI, what do you do? Well, this other thing I did is I added
something called LLMs.TXT, which is a idea by Jeremy Howard of fast AI, fast mail, many other things,
I think also fast HTML. Anyway, a bunch of stuff is doing. And the idea is it's kind of like
robots.txti. It's a place where you put stuff. I think I just load it up here, don't have
to type. It's like a robot's dot TXT, but it's there for to describe what to do for LLM.
So it gives you a little bit of background information and so on that says, actually, here's how you can use our LLM API or MCP server, even if you didn't register it, long as the thing knows to look for this.
So I'm actually writing a blog post about all this soon.
Cool.
Yeah, pretty wild, right?
Yeah.
I think it would be nice for Python bytes.
And also really quickly, probably come back to this, and I know this is going long, there's a lot of, there's a lot of pushback to say I want to block AI from getting my content because AI is just,
stealing my copyright content. And I have a lot of sympathy for that feeling. But if you are not going
so far as to block it, you probably should make the AI experience as good as possible, right? Rather than
having, when I asked what was that episode about Sebastian, if it could have said, well, my
training data goes back to summer 2025. So from that information, I have, you know, like a year ago,
he was on the show or something, right, rather than up to the minute information. So either you block it
completely. Or try to make it.
it as good as possible. And I have no intention of blocking it. I feel like these might be the new search engines of five years in the future.
And I'm concerned that if you block it, you will just vanish. You know what I mean? So make it as good as possible. That's my thinking and that's why I put those there.
I think there's valid choices on both ends of it and even in the middle of just like not doing anything.
Yeah, yeah. You don't have to do anything. But I mean, if you care about getting people come in and find it, right?
I do think it's a valid point to say I don't want it. I'm going to block all the AIs. I just think that.
is it for something that needs to be publicly well known,
it's going to be a risky bet.
Yeah, I see the both sides, but I agree with you.
Yeah, I mean, we as creators and people, like content creators,
writers, et cetera, it's a tough place to be right.
But my bet is that it's better to not be invisible,
even if it's detracting from people visiting our content.
I'm not going to say someone else is wrong if they choose otherwise.
All right.
Let's see.
Just because it's long, I'm going to skip that last one.
Let's just go straight to the joke.
How about that?
Yeah, I could use some levity.
Yeah.
And I think this is a good follow-up for this AI, I think we just talked about.
So, God, it's on LinkedIn.
Just, LinkedIn is so cringe, just all of it.
I mean, I have some...
It's mostly AI articles right there.
Yes, I was just listening to this guy who's like I, who's on an entrepreneur podcast.
And it's like how, I don't know, I built something like a podcast player or something like that.
It's like, I'm a really, I got such a good idea.
I'm going to, like, we're going to completely revolutionize things.
And it's going to be so much better.
So what I'm going to do is I'm creating a really smart AI system
that will automatically write LinkedIn posts for all of my clients.
And you can just pay $100 a month for, like, automated LinkedIn.
I'm like, God, it's so bad.
Anyway, I don't know.
I feel like, though, this joke.
But why bother?
Because all the readers are AI bots also.
Most of the comments obviously didn't read it.
know it's so bad but this still there's a funny joke here and it has to do with AI and
vibe coding okay okay so everyone's a vibe coder these days right and you don't need to
have real developers anymore developers are useless we could just survive our way look
our project manager is now written everything it's all good and so this is like I
named this joke reverse Superman so there's a vibe coder walking around dressed in a
Superman outfit sees production on fire runs into the phone booth puts regular
close on and goes whoo-hoo nothing for me to solve here reverse superman of vibe coding how about that
yeah yeah exactly yeah well um yeah so speaking speaking of um yeah i was talking bringing up revsus
i think i think it was um the dude from revsus that mentioned um that like vibe coding is awesome
because he gets a lot of work of people building a MVP and then they scale and then it crashes
and then they need to pay somebody to fix it.
You know, honestly, we're talking negative about it.
If you've got an idea and you can't code
and you can get AI to make something
that looks pretty much like you want,
you could give that to a professional
and say, I want this, but nice, so it lasts.
That is so much farther than,
here's my idea on a napkin.
Can we build this?
You know what I mean?
Like, that isn't accelerant and that's useful,
but the problem is when you're like,
and we'll put it in production.
But, well, yeah, but also,
So just I can see both sides.
If you have scaling problems, that means you've got customers.
And that's a good thing.
You validated your idea.
Exactly.
Yeah, it's so easy as a developer to think the hard part is the build the thing.
Oh, no.
No, no, no.
The hard part is to get anyone to care, anyone to use it, anyone to validate it, to find
an idea that is good.
And then even if it is to get attention for it, like, yeah, if you can solve that
problem, then the coding part is like, you know, it's,
It's an automatable process.
And it ought to be, I mean, like, you know you grind this way until code comes out and it works.
And it's got to look kind of like that.
I hope that writing software becomes such that we get more problems solved.
That used to be problems that aren't large enough to have a market.
And now hopefully with single or two developer teams or something, we can get things done quicker and solve some of these small problems for people.
100%.
That's going to happen.
It's absolutely going to happen.
probably probably maybe uh well it's good talking to you again uh thanks everybody that showed up
lots of great conversations in the chat this week indeed by all bye
