WEBVTT

00:00:00.020 --> 00:00:05.100
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:00:05.720 --> 00:00:12.580
This is episode 442, recorded July 28, 2025. I'm Michael Kennedy.

00:00:12.970 --> 00:00:13.740
And I'm Brian Okken.

00:00:14.080 --> 00:00:19.140
You can connect with us and the show over on Mastodon or on Bluesky.

00:00:19.780 --> 00:00:26.360
You can find the links at the top of the show notes to all the different accounts for me, Brian, and the show on those various places.

00:00:26.440 --> 00:00:36.600
If you want to be part of the live show, as I know some of you I can see now are, then join us usually Monday, 10 a.m. Pacific time on YouTube, pythonbytes.fm/live.

00:00:37.080 --> 00:00:37.520
That'll take you there.

00:00:37.980 --> 00:00:42.640
And if there's a live episode going there and even like point out, hey, we're live right now and here's how you find us.

00:00:42.940 --> 00:00:45.080
So we appreciate all the live interactions.

00:00:45.440 --> 00:00:47.120
It makes the show better, we think.

00:00:47.760 --> 00:00:54.300
And yeah, so support all of our work, Brian, through his three courses.

00:00:54.340 --> 00:00:55.920
You got three courses right now?

00:00:56.240 --> 00:00:56.340
Yeah.

00:00:56.380 --> 00:00:57.740
pythontest.com?

00:00:58.540 --> 00:01:00.160
Yeah, three or four, something like that.

00:01:00.620 --> 00:01:00.780
Beautiful.

00:01:01.240 --> 00:01:04.580
And obviously the course is over at Talk Python, got a bunch of them.

00:01:05.160 --> 00:01:08.140
And I have more to say about that later, actually.

00:01:08.300 --> 00:01:10.180
So some very cool things coming there.

00:01:10.640 --> 00:01:11.260
What's our first item?

00:01:11.580 --> 00:01:16.480
Well, I was going to talk about, which button do we push?

00:01:16.700 --> 00:01:17.020
That one?

00:01:17.440 --> 00:01:17.560
Okay.

00:01:17.880 --> 00:01:20.240
I wanted to talk about open source security.

00:01:20.460 --> 00:01:23.240
Actually, security with respect to open source projects.

00:01:23.700 --> 00:01:26.780
And this is something that Seth Larson likes to talk about.

00:01:26.900 --> 00:01:29.380
He's the security dude at, isn't he?

00:01:30.020 --> 00:01:31.240
Does some security for.

00:01:31.480 --> 00:01:34.180
Yeah, this is official title is security dude at the PSF.

00:01:35.060 --> 00:01:35.580
Security dude.

00:01:36.840 --> 00:01:41.980
So he's got an article, open source security work isn't special,

00:01:42.560 --> 00:01:44.700
but it kind of is, but it's kind of not.

00:01:44.940 --> 00:01:48.540
So the discussion is around how we,

00:01:48.980 --> 00:01:52.120
one of the amazing things about open source work is you can,

00:01:52.200 --> 00:01:57.300
you can have contributors from around around different places you can have community can

00:01:57.600 --> 00:02:03.620
people helping with the community building people helping with development docs tests uh funding

00:02:04.050 --> 00:02:12.120
all sorts of stuff people can help out uh security is one of those things and um but um but one of the

00:02:12.300 --> 00:02:17.260
the one of the topics really is that seth brought up is that people kind of think of security as

00:02:17.260 --> 00:02:22.660
different because it's so important. It's, it's, you don't, you want, you don't like if somebody

00:02:22.720 --> 00:02:26.480
just randomly came in and like implemented a cool feature, you can look at the code and go,

00:02:26.520 --> 00:02:30.980
oh yeah, and that's kind of neat. Maybe we'll take it. Maybe we won't. But if somebody wants

00:02:30.980 --> 00:02:37.640
to modify the security settings or do something around security with your project, either of the

00:02:37.840 --> 00:02:43.579
project, the code project code itself, or just the community around the project and maybe the website

00:02:43.600 --> 00:02:50.740
or something. That would be a little scarier, but maybe it shouldn't be. One of the things he

00:02:50.920 --> 00:02:55.520
brought up, which is really important, is we kind of want the core maintainers to be like the people

00:02:55.660 --> 00:03:01.740
that only can muck with the security stuff, but they might not have the skills necessary. So

00:03:01.820 --> 00:03:07.460
maintainers, especially for smaller projects, are almost always experts in the domain of the project,

00:03:07.800 --> 00:03:12.959
but not necessarily security experts. And that's definitely the case for me. I could see myself

00:03:12.980 --> 00:03:19.660
working on like the test code or some other like, you know, application, but I'm not going to be the

00:03:19.940 --> 00:03:24.340
security expert. So I would love to have somebody help out, but there's issues around that, right?

00:03:25.640 --> 00:03:31.720
So the article goes into discussing things like trust and different things. One of the benefits,

00:03:31.890 --> 00:03:36.840
like let's say we had security specialists that work on lots of different open source projects.

00:03:37.220 --> 00:03:46.780
They could, because they are understanding multiple projects, they can see how other projects are triaging vulnerabilities and learn from different projects.

00:03:47.020 --> 00:03:50.360
So we kind of want to spread that knowledge around between projects.

00:03:50.750 --> 00:03:53.720
And having security experts bounce around would be good.

00:03:53.860 --> 00:03:59.500
Just like we might have people that are good at pytest jump around and help out with the test code on different projects.

00:03:59.550 --> 00:04:00.760
We could have security experts.

00:04:01.120 --> 00:04:02.120
But how do we trust them?

00:04:02.420 --> 00:04:04.580
And he does talk about trust.

00:04:05.000 --> 00:04:09.140
And one of the great things about how to trust people is to meet them, like actually go to

00:04:09.300 --> 00:04:14.220
go to project, go to like conferences and stuff and meet people in person.

00:04:15.240 --> 00:04:16.680
And I think that's important.

00:04:16.940 --> 00:04:22.780
But I would say like for a project of mine, I would if somebody said they wanted to help

00:04:22.820 --> 00:04:28.140
out with the with the security aspect of it, I would if they had a portfolio, like, you

00:04:28.140 --> 00:04:32.940
know, if they're already a contributor to like Flask, I'd be like, oh, yeah, they do

00:04:33.060 --> 00:04:33.900
security for Flask.

00:04:34.060 --> 00:04:35.280
They totally can work on this.

00:04:36.160 --> 00:04:39.600
So building, and I think that's kind of where Seth is going,

00:04:39.740 --> 00:04:43.320
is to try to build up a community of trusted security people

00:04:43.500 --> 00:04:45.500
within the Python open source community.

00:04:45.780 --> 00:04:46.900
And I think that'd be really cool.

00:04:47.220 --> 00:04:48.220
So cool article.

00:04:48.640 --> 00:04:49.960
Yeah, it's a neat idea.

00:04:50.020 --> 00:04:51.500
Like, why should it be special, right?

00:04:51.780 --> 00:04:55.260
You don't restrict the looping aspects of your project to like,

00:04:55.460 --> 00:04:56.600
these are the loop specialists.

00:04:57.880 --> 00:05:03.279
Yeah, well, he did talk about like the scary bit of like that XZ thing

00:05:03.300 --> 00:05:08.620
or whatever, where somebody kind of pushes into a project to help with something else.

00:05:08.820 --> 00:05:14.660
And then they maybe are one of the fears is also is if a security person changes something,

00:05:15.160 --> 00:05:20.200
I don't know if it's bad or good. Right. Because I'm not the security expert. So,

00:05:21.300 --> 00:05:27.100
yeah, dealing with that. But Seth is like saying that that's not as big of a problem as

00:05:27.280 --> 00:05:32.980
as we might think. And and part of the, you know, trusted people around it would help.

00:05:33.380 --> 00:05:50.660
Yeah, I would say diverging slightly from Seth's article, it might be worth just asking your favorite code AI agent like, hey, don't make any changes, but please do a security review of my code and explain the issues and see if it finds anything.

00:05:50.820 --> 00:05:56.400
Or if somebody makes a change, you could say, hey, AI, what is the security impact of this change?

00:05:57.420 --> 00:06:05.080
It's, you know, it's not necessarily 100% perfect, but it's sort of like double input accounting sort of thing, right?

00:06:05.360 --> 00:06:06.580
Yeah, but right.

00:06:06.890 --> 00:06:07.660
Yeah, that'd be cool.

00:06:08.520 --> 00:06:16.420
Also things like, for instance, if you've already hooked up Bandit to a project to do a Bandit testing for security,

00:06:17.560 --> 00:06:19.220
like adding that to another product.

00:06:19.360 --> 00:06:21.120
If you see another project that you work with,

00:06:21.720 --> 00:06:22.500
it doesn't make sense.

00:06:23.500 --> 00:06:24.100
One of the,

00:06:24.820 --> 00:06:26.980
the one of the advice, Brian, I don't know.

00:06:27.200 --> 00:06:29.560
If someone or something is named Bandit,

00:06:29.580 --> 00:06:31.220
do you really want to put them in charge of security?

00:06:31.940 --> 00:06:33.780
That sounds a little sus, honestly.

00:06:34.180 --> 00:06:35.820
No, Bandit's a cool tool. Sorry.

00:06:36.660 --> 00:06:41.620
The other topic that he brought up that I appreciated was,

00:06:42.540 --> 00:06:47.180
we do talk about companies utilizing open source projects a lot.

00:06:47.440 --> 00:06:49.660
So this is where it really makes sense.

00:06:49.710 --> 00:06:52.200
A company is probably going to have some security experts, right?

00:06:52.400 --> 00:06:53.500
A larger company.

00:06:54.020 --> 00:06:55.540
Those people could look at the dependencies

00:06:56.100 --> 00:06:57.660
and contribute to those projects

00:06:57.940 --> 00:07:00.440
that don't live up to their security standards.

00:07:01.560 --> 00:07:04.820
Go ahead and contribute to help make them better.

00:07:05.460 --> 00:07:06.160
Yeah, that's a good point.

00:07:06.350 --> 00:07:08.340
Instead of saying this thing's not secure enough for us,

00:07:08.580 --> 00:07:10.700
and we'll do a few PRs, and then it will be.

00:07:10.920 --> 00:07:11.780
Yeah, exactly.

00:07:12.660 --> 00:07:12.940
Exactly.

00:07:13.470 --> 00:07:16.800
You know what probably is up to most people's standards is uv.

00:07:17.300 --> 00:07:17.480
Yes.

00:07:17.980 --> 00:07:19.460
Yeah, so uv is killing it.

00:07:19.580 --> 00:07:22.980
And a major release has been released of uv.

00:07:23.320 --> 00:07:24.940
And so I want to give a shout out to that.

00:07:25.340 --> 00:07:29.280
However, between the time I noticed that, there have been three more releases.

00:07:29.540 --> 00:07:36.200
So there's actually 0.8.3 and.2 and.1 and so on.

00:07:36.880 --> 00:07:38.240
There's a smaller change for those.

00:07:38.280 --> 00:07:43.020
But one that's notable is you can now get Python 3.14, which I know you're going to give a little shout out to.

00:07:43.380 --> 00:07:49.200
The release candidate, you can get that through uv, Python, or just V and V and say that, right?

00:07:49.580 --> 00:07:55.520
But the real notable one here is the big changes from 0.8.0.

00:07:55.940 --> 00:08:02.160
So they say, hey, since 7, v7 back in April, I'm just going to like stomp on the 0 version.

00:08:02.480 --> 00:08:03.940
What's this version 7? No, just kidding.

00:08:04.780 --> 00:08:10.460
0.7 back in April, they've got a bunch of changes and improvements, but they could break some workflows.

00:08:10.780 --> 00:08:16.860
they've been kind of holding those all back and they're letting them loose in 0.8. So for example,

00:08:17.360 --> 00:08:22.620
some, this is the one I'm most excited about the stabilization of a couple of uv Python install

00:08:23.260 --> 00:08:28.840
features, which is also uv venv if you don't have that version of Python installed, right? Like

00:08:28.920 --> 00:08:36.079
that's sort of implicitly happens. So one that I was asking for, and the soon as I saw that uv would

00:08:36.099 --> 00:08:41.320
install and manage Python. I'm like, is there a way that one of these could somehow become

00:08:42.080 --> 00:08:47.120
the Python instead of being stashed in some crazy path, right? Like, could it be in

00:08:47.640 --> 00:08:54.740
tilde dot local slash bin, for example, right? Well, yes, now. So the new change is it will

00:08:55.020 --> 00:09:00.680
install Python executables into a directory on the path. So you can basically manage your system Python

00:09:01.320 --> 00:09:04.360
sort of via uv Python install. I think that's pretty cool.

00:09:04.520 --> 00:09:07.020
Okay. Is that what that default flag does?

00:09:07.680 --> 00:09:08.080
Yes.

00:09:08.520 --> 00:09:14.880
Yeah. If you put, well, it used to have, so it says if you uv Python install,

00:09:15.160 --> 00:09:19.220
now it's installs a version of Python into a directory on the path by default.

00:09:20.600 --> 00:09:21.060
Oh, okay.

00:09:21.460 --> 00:09:21.580
Yeah.

00:09:22.060 --> 00:09:23.100
It does it.

00:09:23.340 --> 00:09:23.480
Yeah.

00:09:23.880 --> 00:09:24.020
All right.

00:09:24.020 --> 00:09:26.120
I think it just does it, which is pretty interesting.

00:09:26.200 --> 00:09:27.200
I'm pretty psyched about it.

00:09:27.440 --> 00:09:29.940
It registers Python versions with the Windows registry.

00:09:30.140 --> 00:09:32.440
I imagine that means like, you know, Python's, I'm sorry,

00:09:32.580 --> 00:09:33.680
Windows is all about the registry.

00:09:33.940 --> 00:09:37.480
So it probably means like other tools can discover that Python is installed and so on.

00:09:38.240 --> 00:09:41.620
It has a little bit of safety about removing virtual environments

00:09:41.820 --> 00:09:43.820
if you're going to recreate them and things like that.

00:09:44.160 --> 00:09:45.300
There's a bunch of other changes here.

00:09:45.360 --> 00:09:47.960
So this is like pretty serious release.

00:09:48.460 --> 00:09:51.760
I guess the last one that's pretty interesting here, maybe two even.

00:09:52.480 --> 00:09:58.040
One is that uv build is now the default backend of uv init,

00:09:58.220 --> 00:10:01.280
which creates a project in a pyproject.toml and those kinds of things, right?

00:10:01.600 --> 00:10:03.320
Remember it was hatchling and then we were like,

00:10:03.460 --> 00:10:04.240
well, is it hatchling?

00:10:04.480 --> 00:10:06.740
Like how is the build back in specified and so on?

00:10:07.020 --> 00:10:08.420
Well, now it's uv build.

00:10:08.720 --> 00:10:09.140
That's cool.

00:10:09.460 --> 00:10:09.900
Yeah, it's very cool.

00:10:09.960 --> 00:10:11.620
I've been using uv build for a long time,

00:10:11.670 --> 00:10:14.300
but just typing uv space build instead of, you know,

00:10:15.290 --> 00:10:15.840
run that or whatever.

00:10:16.070 --> 00:10:16.180
Okay.

00:10:16.510 --> 00:10:20.500
And then it also sets the uv tool bin directory on Docker images.

00:10:21.040 --> 00:10:23.800
This is kind of a pain because if you install stuff,

00:10:23.950 --> 00:10:26.140
a lot of times the Docker images don't have access.

00:10:26.420 --> 00:10:27.280
So if you're not paying attention,

00:10:27.880 --> 00:10:29.140
you'll like try to build a Docker image.

00:10:29.170 --> 00:10:31.560
And then the next step in the build is run,

00:10:31.880 --> 00:10:35.880
run one of the tools you've installed to make something happen.

00:10:36.020 --> 00:10:37.280
And it'll say, can't find this tool.

00:10:37.400 --> 00:10:38.220
You're like, where is it?

00:10:38.220 --> 00:10:38.640
You know what I mean?

00:10:39.200 --> 00:10:40.940
So you got to set the path and so on.

00:10:41.160 --> 00:10:42.680
So now you can, that's a little easier.

00:10:42.920 --> 00:10:43.700
And so on and so on.

00:10:43.740 --> 00:10:47.060
Like, look at all these changes for just 0.7 to 0.8.

00:10:48.820 --> 00:10:51.840
It's the second digit may as well be the major digit.

00:10:52.300 --> 00:10:54.360
Yeah, that's why I was calling it version 7 and version 8.

00:10:54.360 --> 00:10:55.620
I'm like, these are just major versions.

00:10:55.780 --> 00:10:58.720
They're just not committed to majorness.

00:10:59.800 --> 00:11:01.020
Anyway, fun stuff.

00:11:01.220 --> 00:11:01.420
All right.

00:11:01.820 --> 00:11:02.160
Back to you.

00:11:02.580 --> 00:11:02.940
Okay.

00:11:03.240 --> 00:11:04.080
I've got a bunch.

00:11:04.940 --> 00:11:05.740
I couldn't decide.

00:11:06.120 --> 00:11:07.580
So I'm going to do a bunch of extras.

00:11:09.320 --> 00:11:12.440
So first up, Python 3.14, release candidate.

00:11:12.980 --> 00:11:13.600
One is a go.

00:11:13.910 --> 00:11:15.180
This is from Hugo.

00:11:16.360 --> 00:11:17.820
So, yeah, I guess that's it.

00:11:17.940 --> 00:11:19.120
I guess this was six days ago.

00:11:19.290 --> 00:11:22.380
So we may have already covered it last year or last week.

00:11:22.560 --> 00:11:23.020
I don't remember.

00:11:23.780 --> 00:11:24.340
So 3.14.

00:11:24.340 --> 00:11:25.120
I don't think we covered it.

00:11:25.120 --> 00:11:26.680
I think this is new news.

00:11:27.070 --> 00:11:27.840
And this is a big deal.

00:11:27.930 --> 00:11:31.660
The release candidate means, I mean, beta is supposed to mean that it's,

00:11:31.900 --> 00:11:32.020
Yeah.

00:11:32.500 --> 00:11:33.700
No features, no changes.

00:11:34.100 --> 00:11:38.140
But now it's very, very close to what we're going to see in October

00:11:38.360 --> 00:11:39.140
or whenever it comes out.

00:11:39.320 --> 00:11:41.580
So people could maybe start testing with it.

00:11:41.980 --> 00:11:44.660
Yeah, so that's where the call to action comes,

00:11:45.040 --> 00:11:49.800
is we strongly encourage maintainers of third-party Python projects

00:11:49.840 --> 00:11:52.320
to prepare their projects for 3.14.

00:11:54.220 --> 00:11:58.160
And so if you've got CI pipelines for testing,

00:11:58.700 --> 00:11:59.760
now's the time to turn it on.

00:11:59.840 --> 00:12:02.540
if your project doesn't work with 3.14,

00:12:03.120 --> 00:12:04.700
this is now that, I mean,

00:12:04.950 --> 00:12:06.480
actually you should have brought it up sooner,

00:12:06.720 --> 00:12:08.320
but you can bring it up now to say,

00:12:08.440 --> 00:12:09.840
hey, there's an issue.

00:12:10.170 --> 00:12:12.060
And so there's a link to the Python bug tracker

00:12:13.160 --> 00:12:16.120
and then a list of all the different features

00:12:16.460 --> 00:12:19.420
and whatnot, build changes, incompatibilities on here.

00:12:19.760 --> 00:12:20.820
So that's first.

00:12:21.190 --> 00:12:22.720
So yeah, please test everything.

00:12:24.380 --> 00:12:26.720
And okay, so that's my first item.

00:12:26.860 --> 00:12:29.240
Second item is f-strings, WTF.

00:12:29.820 --> 00:12:33.680
So this is brought to us by Armin Ronecker,

00:12:34.380 --> 00:12:37.140
encouraged by Lucas Lange and Yuri.

00:12:39.220 --> 00:12:42.300
So this is, I took this, have you taken this yet, Michael?

00:12:42.640 --> 00:12:43.460
No, I haven't.

00:12:43.460 --> 00:12:46.100
And by the way, fstrings.wtf is the domain name.

00:12:46.360 --> 00:12:46.740
Yes.

00:12:48.180 --> 00:12:48.380
Yeah.

00:12:49.400 --> 00:12:53.580
So this must, the top level domain of WTF, gotta love it.

00:12:54.240 --> 00:12:56.200
So it's just a little quiz thing.

00:12:56.560 --> 00:12:57.900
The first question is awesome.

00:12:58.800 --> 00:13:02.200
So if you print F hello world, what do you get?

00:13:02.470 --> 00:13:03.580
It really doesn't matter what you answer.

00:13:04.440 --> 00:13:05.840
No, what you get is a linting error.

00:13:09.280 --> 00:13:10.900
So it's, you know, correct.

00:13:11.130 --> 00:13:13.500
f-strings are working exactly as you'd expect anything.

00:13:13.860 --> 00:13:16.180
But you got to go through, there's 26 questions.

00:13:17.590 --> 00:13:21.460
And it's a little, it's tricky right off the bat.

00:13:21.780 --> 00:13:25.760
Like I know that the ellipses object is a thing.

00:13:26.150 --> 00:13:27.340
So what happens if I do that?

00:13:27.420 --> 00:13:32.500
well there's no there's no curly braces so of course it's just anyway um it's a fun thing i

00:13:32.590 --> 00:13:37.400
thought i was going to do great since i do f strings all the time and i got like half of them

00:13:37.540 --> 00:13:42.700
right so i learned a lot in uh going through this so i highly recommend well you're going to make me

00:13:42.800 --> 00:13:49.380
have to do it now as well yeah um so this is uh this is good plus some of the um some of the

00:13:49.520 --> 00:13:55.319
descriptions and uh and you know no phone funny business here we just a literal string with three

00:13:55.360 --> 00:14:01.120
dots there's there's some good commentary within the within the quiz also so i highly recommend

00:14:01.640 --> 00:14:07.940
django turns 20 uh happy birthday django um so we're going to link to birthday 20 django project

00:14:08.080 --> 00:14:14.460
dot com uh this there's a whole bunch of celebrations planned uh and it's uh so this

00:14:14.460 --> 00:14:19.740
is kind of fun there's a there's a map event of like if there's a party near you kind of fun to

00:14:19.880 --> 00:14:20.980
go for a Django person.

00:14:21.640 --> 00:14:23.340
Where's the closest one to me?

00:14:23.980 --> 00:14:26.960
Looks like in October 17th,

00:14:27.100 --> 00:14:29.600
I could go down to San Francisco if I wanted to.

00:14:29.940 --> 00:14:30.700
So at PyBay.

00:14:31.060 --> 00:14:31.200
Nice.

00:14:31.480 --> 00:14:32.980
So anyway, there's that.

00:14:34.300 --> 00:14:35.100
MakeDocs redirect.

00:14:35.400 --> 00:14:37.660
I've been using MakeDocs lately a lot

00:14:37.840 --> 00:14:40.000
for documenting a bunch of stuff.

00:14:40.380 --> 00:14:41.220
I like MakeDocs.

00:14:41.500 --> 00:14:43.200
But sometimes, and I'm actually doing

00:14:43.540 --> 00:14:44.820
some fairly big websites,

00:14:46.260 --> 00:14:47.780
documentation websites with MakeDocs.

00:14:48.480 --> 00:14:49.440
It works pretty good.

00:14:49.860 --> 00:14:55.880
but sometimes I put things in the wrong place right um you and with Hugo I've been used to um

00:14:56.340 --> 00:15:00.920
used to being able to to like move things around and have both links work like if you move it

00:15:01.020 --> 00:15:05.620
somewhere else but have the old link still work that doesn't work right off out of the box

00:15:05.860 --> 00:15:11.460
with make docs there's not a thing so there's a make docs redirects plug-in that allows you to

00:15:11.720 --> 00:15:16.459
have the old name and the new name so I haven't actually tried this yet but I need it so I'm

00:15:16.480 --> 00:15:22.200
going to try it today yeah and my my last extra that i wanted to bring up is just an article that

00:15:22.200 --> 00:15:30.000
i enjoyed um called uh by patty carver saying i'm tired of talking about ai and um and actually

00:15:30.450 --> 00:15:35.500
even if you're not tired of tech talking about ai i think this is a good thing to like read through

00:15:35.720 --> 00:15:40.400
because there's some things that i think that a lot of people are feeling like should i

00:15:40.630 --> 00:15:45.279
because i've heard a lot of there's a lot of comments in here and reactions to comments like

00:15:45.920 --> 00:15:51.600
if you don't start now, you won't be able to find work soon. That's scary, especially if I don't

00:15:51.660 --> 00:15:56.700
have time to work on this right now. And I know that the commentary often is, well, you don't have

00:15:56.840 --> 00:16:06.160
time because you're not using AI to free up your time. That's a tedious discussion. But there's a,

00:16:06.460 --> 00:16:11.600
I think there's a, there's a, some of the cool reaction here is this just doesn't make sense.

00:16:11.880 --> 00:16:15.480
We're telling people that AI is going to help them.

00:16:16.260 --> 00:16:19.320
Pretty soon, anybody off the street can be a coder with AI.

00:16:19.780 --> 00:16:22.960
Well, if that's true, then why is it so important for me to learn it today?

00:16:23.280 --> 00:16:26.080
Can't I learn it next week when I really need it?

00:16:26.360 --> 00:16:31.720
I don't agree with everything in this article, but there's some great logic in here.

00:16:31.920 --> 00:16:32.360
I like it.

00:16:32.900 --> 00:16:33.700
Plus, great writing.

00:16:34.580 --> 00:16:35.720
That's all of my extras.

00:16:36.120 --> 00:16:36.420
Awesome.

00:16:36.920 --> 00:16:37.020
Awesome.

00:16:38.100 --> 00:16:38.420
All right.

00:16:38.560 --> 00:16:39.600
What have I got?

00:16:39.920 --> 00:16:42.680
So I want to talk about Toad the Wet Sprocket.

00:16:45.260 --> 00:16:46.340
Yeah, Toad the Wet Sprocket.

00:16:46.460 --> 00:16:48.820
By the way, one of the best bands from the 90s.

00:16:48.920 --> 00:16:49.880
Come on, Toad the Wet Sprocket.

00:16:50.050 --> 00:16:51.120
It was amazing.

00:16:51.780 --> 00:16:54.660
So this one comes to us from Will McGuggan.

00:16:54.770 --> 00:17:00.480
I see out in the audience, Will is providing the perfect transition here for us.

00:17:00.780 --> 00:17:01.980
AI fatigue is very real.

00:17:02.180 --> 00:17:02.780
Yes, I agree.

00:17:03.120 --> 00:17:04.140
I agree, Will.

00:17:04.319 --> 00:17:08.260
But he is also helping, contributing both to this.

00:17:08.980 --> 00:17:09.520
Thank you, Will.

00:17:09.540 --> 00:17:10.220
Yeah, thanks a lot, Will.

00:17:10.850 --> 00:17:12.459
Yeah, this project's called Toad,

00:17:12.890 --> 00:17:18.520
which originally was going to be called Textual Code,

00:17:18.880 --> 00:17:20.020
but became Toad,

00:17:20.079 --> 00:17:26.000
is an improvement on the terminal-based agentic AI

00:17:26.720 --> 00:17:27.900
sort of programming story.

00:17:28.100 --> 00:17:31.080
So Claude Code and Gemini and all those types of things,

00:17:31.330 --> 00:17:34.120
they've got really pretty poor terminal experiences,

00:17:34.580 --> 00:17:36.500
even though that's their only user interface,

00:17:36.790 --> 00:17:37.640
which is interesting.

00:17:38.040 --> 00:17:41.460
Like, for example, if you resize the terminal after you get an output,

00:17:41.540 --> 00:17:44.500
it can, like, screw up the formatting and stuff, which is weird.

00:17:44.820 --> 00:17:45.680
All sorts of things.

00:17:45.860 --> 00:17:51.020
So he came up with this cool project that has basically taken advantage of Textual

00:17:51.100 --> 00:17:53.680
to create a really nice terminal experience.

00:17:54.080 --> 00:17:59.960
And so, yeah, the idea is that it's supposed to be a universal front end for AI in the terminal.

00:18:00.280 --> 00:18:04.100
And you can even go and watch, like, a little demo that he's put together,

00:18:04.620 --> 00:18:06.800
UV Run Toad, which is pretty fun.

00:18:07.220 --> 00:18:09.500
And, you know, I think this is an agentic example.

00:18:09.540 --> 00:18:12.240
He says, write a Python code to display the Mandelbrot set.

00:18:12.380 --> 00:18:14.060
And then, boom, just off it goes.

00:18:14.380 --> 00:18:20.520
Write it in the terminal with code formatted nicely and syntax highlighting and all that.

00:18:20.840 --> 00:18:21.760
Then you can say, run it.

00:18:21.820 --> 00:18:22.940
You can say, explain it.

00:18:22.940 --> 00:18:23.780
You get the modal dialogues.

00:18:24.420 --> 00:18:26.180
All the things you would get from Textual, right?

00:18:26.440 --> 00:18:30.260
So Will says this is not yet a thing you can just go grab.

00:18:30.700 --> 00:18:34.880
But down at the bottom, you can say, code isn't quite ready for public release.

00:18:35.180 --> 00:18:36.500
It remains a tadpole for now,

00:18:36.800 --> 00:18:39.820
incubating in a private little pond of a repository.

00:18:40.400 --> 00:18:42.320
But you know, he's all about Voss.

00:18:42.350 --> 00:18:43.780
So it will be out soon enough.

00:18:43.790 --> 00:18:45.100
In the meantime, you can,

00:18:45.920 --> 00:18:47.220
there's ways to get early access to it.

00:18:47.300 --> 00:18:48.300
For example, sponsor him.

00:18:48.400 --> 00:18:49.700
So cool project, Will.

00:18:49.940 --> 00:18:50.920
I want to just give that a shout out.

00:18:51.140 --> 00:18:51.680
Yeah, definitely.

00:18:52.620 --> 00:18:54.140
I always pay attention if Will's doing something.

00:18:54.840 --> 00:18:55.160
Exactly.

00:18:55.800 --> 00:18:57.460
So I guess you probably don't have any extras

00:18:57.820 --> 00:18:59.300
since you just talked about your extras, right?

00:18:59.560 --> 00:19:00.060
I do.

00:19:00.240 --> 00:19:01.320
Yeah, I don't have any extras.

00:19:01.650 --> 00:19:02.840
You don't have an extra extras.

00:19:03.160 --> 00:19:03.580
Let's say that.

00:19:03.990 --> 00:19:04.780
No more extra extras.

00:19:05.000 --> 00:19:07.540
So I'm going to be releasing a new course really soon.

00:19:07.760 --> 00:19:09.780
So make sure you are a friend of the show.

00:19:10.240 --> 00:19:15.620
That could be Python Bytes or Talk Python gets a little bit,

00:19:15.860 --> 00:19:18.320
send a few more emails over there that might be talking about it.

00:19:18.320 --> 00:19:21.820
So if you go to talkpython.fm, click on newsletter,

00:19:22.320 --> 00:19:24.540
share your name and email, and I'll let you know.

00:19:24.760 --> 00:19:26.900
But very soon, I have an excellent course coming out

00:19:26.900 --> 00:19:28.440
that I think people are really going to enjoy.

00:19:28.840 --> 00:19:30.840
All right, with that, shall we joke, make a joke?

00:19:31.240 --> 00:19:31.380
Yes.

00:19:32.440 --> 00:19:34.740
If one joke were good, wouldn't two be better?

00:19:34.820 --> 00:19:42.040
sure you'd think yeah you would think that's true for for a while until at some point like okay

00:19:42.440 --> 00:19:46.540
either i'm tired of jokes or my my cheeks are whatever stop all right so here's the first one

00:19:46.920 --> 00:19:52.840
what are the heaviest objects in the universe and it's got this um like uh eisen um like general

00:19:53.060 --> 00:19:59.500
relativity sort of space-time curve continuum thing so we've got the sun and it it bends space-time a

00:19:59.480 --> 00:20:05.540
little the neutron star obviously super big much deeper than the sun the black hole is almost a

00:20:05.660 --> 00:20:12.860
singularity but what is more singularity than black holes node modules the node underscore modules

00:20:13.440 --> 00:20:18.380
folder from when you create a new project it's just like I tried to use two libraries in npm

00:20:18.620 --> 00:20:25.400
install them or yarn install them and why are there 250 things in node modules pretty fun this

00:20:25.400 --> 00:20:26.520
This is good, this is a short little one.

00:20:27.700 --> 00:20:30.600
But even better, we have Azure's Cloud Appy.

00:20:32.620 --> 00:20:35.700
Cloud Architect, senior platform engineer.

00:20:37.080 --> 00:20:39.480
This is a very fun video.

00:20:40.100 --> 00:20:41.700
And I'm not sure if I got the right link,

00:20:41.700 --> 00:20:42.960
I have to update that potentially.

00:20:43.260 --> 00:20:44.160
Anyway, this comes from us,

00:20:44.560 --> 00:20:47.460
I believe this is from Programmers Are Also Human.

00:20:47.880 --> 00:20:51.500
And it is a six minute video that is just hilarious.

00:20:52.020 --> 00:20:54.260
- This dude is on fire, I love all those videos.

00:20:54.820 --> 00:20:57.880
Yeah, he's the same guy that did the vibe coding YouTube jokes.

00:20:58.020 --> 00:20:59.300
And so this is a YouTube video, obviously.

00:20:59.400 --> 00:21:00.680
We're not going to go through it.

00:21:00.780 --> 00:21:03.320
But if you need to laugh, watch it.

00:21:04.060 --> 00:21:07.840
Let's read the titles of the books on this desk, though.

00:21:08.060 --> 00:21:08.820
Go for it.

00:21:09.160 --> 00:21:13.300
So we've got how to do cloud and what?

00:21:13.580 --> 00:21:15.340
How to move back on-prem.

00:21:16.400 --> 00:21:17.160
Right next to each other.

00:21:17.240 --> 00:21:17.680
Right next to each other.

00:21:17.720 --> 00:21:18.140
Yeah, exactly.

00:21:18.200 --> 00:21:18.920
Right next to each other.

00:21:19.480 --> 00:21:22.220
We also have introduction to guesstimates.

00:21:22.940 --> 00:21:24.220
Introduction to guesstimates.

00:21:24.520 --> 00:21:26.540
And then he has a coffee cup that says,

00:21:27.140 --> 00:21:28.880
DevOps agile with root access.

00:21:30.040 --> 00:21:30.280
Yeah.

00:21:30.840 --> 00:21:31.640
But yeah, it's really good.

00:21:31.740 --> 00:21:36.180
He's like, and it's in this Einstein type of character

00:21:36.380 --> 00:21:38.560
that also has a bit of a Greek accent, I believe.

00:21:39.020 --> 00:21:39.640
It's really good.

00:21:39.680 --> 00:21:42.260
It says, they send us our cloud bills

00:21:42.340 --> 00:21:45.080
in scientific notation because they're so big.

00:21:45.300 --> 00:21:45.840
It's really good.

00:21:46.820 --> 00:21:48.540
He also gets a phone call during the interview

00:21:48.660 --> 00:21:50.040
and he answers it and he goes, what?

00:21:50.500 --> 00:21:51.860
No, no, it's probably DNS.

00:21:52.260 --> 00:21:53.220
Man, it's always DNS.

00:21:53.580 --> 00:21:54.620
He goes, yeah, this guy just called.

00:21:55.060 --> 00:21:57.380
Somehow he has root access, but I don't know who that was.

00:21:58.540 --> 00:21:58.920
Just kidding.

00:21:59.760 --> 00:21:59.960
Nice.

00:22:00.440 --> 00:22:01.120
It's really good.

00:22:01.620 --> 00:22:03.700
If you like one-liners, it's just like a stirring of them.

00:22:03.800 --> 00:22:04.020
It's great.

00:22:04.460 --> 00:22:05.200
Yeah, very good.

00:22:06.140 --> 00:22:07.600
Might be not safe for work.

00:22:07.740 --> 00:22:09.540
Not because there's anything explicit in there,

00:22:09.960 --> 00:22:14.620
but you're not going to be able to watch it and not laugh out loud.

00:22:15.500 --> 00:22:15.820
Exactly.

00:22:16.800 --> 00:22:16.900
Yeah.

00:22:17.140 --> 00:22:20.780
If you're in a serious environment, you might need to wait till lunch.

00:22:21.560 --> 00:22:21.640
Yeah.

00:22:22.240 --> 00:22:22.720
All right.

00:22:22.860 --> 00:22:24.880
They don't need to wait till lunch to listen to our show.

00:22:25.220 --> 00:22:26.600
No, we're not that funny.

00:22:29.120 --> 00:22:29.380
Fair enough.

00:22:29.620 --> 00:22:29.800
All right.

00:22:30.160 --> 00:22:31.740
Thank you everyone for watching, for being here.

00:22:32.080 --> 00:22:32.500
Talk to y'all later.

00:22:32.840 --> 00:22:33.100
Bye, Ryan.

