WEBVTT

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

00:00:05.260 --> 00:00:09.200
This is episode 431, recorded May 5th, 2025.

00:00:10.100 --> 00:00:11.120
And I am Brian Okken.

00:00:11.280 --> 00:00:12.040
And I am Michael Kennedy.

00:00:12.500 --> 00:00:15.200
And this episode is sponsored by NordLayer.

00:00:15.480 --> 00:00:17.300
Listen to their spot later in the show.

00:00:17.640 --> 00:00:31.640
And if you'd like to connect with us, you can, or suggest topics, please feel free to send us an email or head on over to either Mastodon or BlueSky and the links to both of us and the show are in the show notes.

00:00:32.180 --> 00:00:39.040
And you can join this episode live or join it live usually Mondays at 10, but sometimes other times.

00:00:39.520 --> 00:00:45.040
But head on over to pythonbytes.fm/live to sign up and see the schedule for the next one.

00:00:45.400 --> 00:00:49.720
But also you can, that's on YouTube, so you can watch them later if you'd like.

00:00:50.060 --> 00:00:53.080
And I'd also like to encourage people to sign up for the newsletter.

00:00:53.500 --> 00:00:57.280
We send out a weekly email with all the links from the show.

00:00:57.360 --> 00:00:58.460
plus background information.

00:00:58.780 --> 00:00:59.520
It's a lot of fun.

00:00:59.780 --> 00:01:00.560
So check that out.

00:01:00.840 --> 00:01:04.540
Also, I think it'd be cool to have a cool first topic, Michael.

00:01:04.960 --> 00:01:05.260
What you got?

00:01:06.260 --> 00:01:11.040
This was a nice, easy one, easy to adopt, easy to appreciate, I think.

00:01:11.360 --> 00:01:20.040
So you and I, we spend a lot of time talking about, here's the new things for this, and here's the new thing for Python, and here's the new features, the next version, and test the alpha, test the beta.

00:01:20.560 --> 00:01:24.460
And we also talk about when they go out of support, but I don't know how you feel.

00:01:24.640 --> 00:01:26.980
I often, that sneaks up on me.

00:01:27.280 --> 00:01:29.760
I mean, the fact that 3.8 is out of support seems wrong.

00:01:30.360 --> 00:01:31.600
But it is, you know what I mean?

00:01:32.040 --> 00:01:32.120
Yeah.

00:01:32.400 --> 00:01:35.840
And so you might be sitting at your terminal just going, what's that status again?

00:01:36.260 --> 00:01:40.440
And so I present to you Pyrel, P-I-R-E-L.

00:01:41.000 --> 00:01:45.220
And what it is, is it's the release cycle of Python at your fingertips.

00:01:45.800 --> 00:01:45.980
Ooh,

00:01:46.400 --> 00:01:46.460
cool.

00:01:46.460 --> 00:01:46.740
Yeah, so

00:01:46.740 --> 00:01:49.080
there's a little graphic here, I suppose.

00:01:49.920 --> 00:01:51.940
I could open up the image full size, perhaps.

00:01:52.600 --> 00:01:56.380
And you just type whatever, doesn't matter how you have Python active.

00:01:56.460 --> 00:02:06.540
if it's the system one or if it's a virtual environment one, you can write Pyrelle check and it'll give you a nice summary of what's going on here.

00:02:06.560 --> 00:02:13.280
You can say you're using Python 3.13, which is actively maintained, and it will be this good for this long.

00:02:13.620 --> 00:02:22.580
You can say Pyrelle list and it'll give you a list of all of the last 10 or so versions when they came and when they went.

00:02:23.100 --> 00:02:24.600
So it's pretty cool.

00:02:24.780 --> 00:02:30.960
I mean, that's more or less what it does, but it tells you that you can get, you know, go get a new Python version if yours is getting older.

00:02:31.200 --> 00:02:34.060
And the status as well, is it still getting feature updates?

00:02:34.640 --> 00:02:35.740
Is it in bug fix level?

00:02:36.060 --> 00:02:38.320
Is it security fixes or is it YOLO?

00:02:38.780 --> 00:02:39.720
I just can't be bothered.

00:02:41.480 --> 00:02:42.880
Anyway, that's what this is.

00:02:43.240 --> 00:02:43.520
What do you think?

00:02:43.800 --> 00:02:44.840
I think that's pretty fun.

00:02:45.220 --> 00:02:45.300
Yeah.

00:02:45.560 --> 00:02:46.020
Also,

00:02:46.440 --> 00:02:46.520
yeah.

00:02:46.760 --> 00:02:47.120
Yeah.

00:02:47.320 --> 00:02:51.360
And it uses the rocket emoji, which will make a reappearance, right?

00:02:51.760 --> 00:02:51.840
Yeah.

00:02:52.300 --> 00:02:53.240
I do like the rocket emoji.

00:02:54.080 --> 00:02:54.280
Indeed.

00:02:54.660 --> 00:03:02.040
So there's a little bit else you can do with it, though it does not particularly interest me as a tool, nonetheless.

00:03:03.260 --> 00:03:12.420
You can also type Pyroguess, and it will do things like give you various trivia about the release history of Python.

00:03:12.880 --> 00:03:15.660
So, for example, it might ask, when was Python 3.11 released?

00:03:15.770 --> 00:03:17.640
Or who is the release manager for 3.6?

00:03:18.240 --> 00:03:22.160
And it gives you a multi-choice select, and you can pick, and it'll tell you if you're right or wrong.

00:03:22.200 --> 00:03:27.460
So if you like Python release history and seeing the details, you can do that.

00:03:27.780 --> 00:03:30.540
But I think the payroll list and the payroll check is pretty cool.

00:03:31.160 --> 00:03:32.140
Yeah, I like it.

00:03:32.480 --> 00:03:32.660
Neat.

00:03:32.960 --> 00:03:33.620
Yeah, that's it.

00:03:33.900 --> 00:03:34.120
All right.

00:03:34.520 --> 00:03:38.700
Well, I want to cover something that we've covered before, kind of.

00:03:39.180 --> 00:03:40.720
Back to the future.

00:03:41.140 --> 00:03:43.100
Back to, we're going to go back in time.

00:03:43.640 --> 00:03:46.740
This is episode 123, which, when was that?

00:03:46.820 --> 00:03:50.020
That was like in May 26, 2019.

00:03:50.330 --> 00:03:53.060
We recorded it and it came out on the 29th.

00:03:53.540 --> 00:03:53.780
Right.

00:03:53.780 --> 00:03:54.640
And we had no idea.

00:03:55.070 --> 00:03:56.840
Things were different back then, 2019.

00:03:57.320 --> 00:03:58.720
2019, different world.

00:03:59.520 --> 00:04:09.560
But one of the things that started in that was when we announced, well, we didn't announce it, but we covered it on the show way back in 2019.

00:04:09.870 --> 00:04:12.060
The introduction of FastAPI.

00:04:12.110 --> 00:04:13.340
So we talked about it.

00:04:13.480 --> 00:04:15.840
This new cool web framework called FastAPI.

00:04:16.200 --> 00:04:23.680
Well, FastAPI has been growing and it's now the number one web framework, not just across Python, but across everything.

00:04:24.120 --> 00:04:28.900
So it's been an incredible thing to watch and some great work out there.

00:04:29.420 --> 00:05:30.360
Well, today, Sebastian Ramirez, the dude that created FastAPI in the first place, he announced that he is forming FastAPI Labs, a new company, and that they are, the FastAPI Labs is a new company and they're building a fast api cloud so we're going to take a look what does this mean it kind of means that you just get to build your fast if you do this the promise is you build a fast api application and you can just deploy it with um fast api deploy just a single line and and then they'll they'll host it on their um like a subdomain of the fast api cloud.dev so um kind of interesting. I'm intrigued. So I've definitely joined the wait list. There is an announcement blog post of by the same team behind FastAPI. So this is, this is kind of an incredible, he's built FastAPI up and it's not just, not just Sebastian. Now there's other people working on it.

00:05:30.550 --> 00:05:43.020
It's built on top of Pydantic and a couple of cool things that I can't remember. But, But the team is, the blog post talks about the problems of deploying to the cloud.

00:05:43.060 --> 00:05:46.200
Now, there is documentation on the FastAPI.

00:05:47.360 --> 00:05:51.400
We've often commented that the FastAPI documentation is excellent.

00:05:51.680 --> 00:05:53.280
They've done a great job with documentation.

00:05:53.880 --> 00:06:00.680
But it is not trivial to really deploy anything anymore, aside from maybe a static site.

00:06:01.080 --> 00:06:07.240
But you have to get concerned with a lot of stuff, especially if you start growing with security.

00:06:07.430 --> 00:06:10.020
And so they are looking at that security bit.

00:06:11.620 --> 00:06:23.700
So it's so far, it looks like Patrick Armino, Alejandro Sanchez, Sophie Van Langen, sorry, and Sebastian.

00:06:25.240 --> 00:06:26.780
And probably more.

00:06:27.290 --> 00:06:30.060
I'm not sure if that's part of the team or if that's just anyway.

00:06:30.560 --> 00:06:36.600
They might be, I don't know how many people are in the company right now, but he's promising to keep FastAPI open source.

00:06:37.160 --> 00:06:44.120
And to also, interesting in this is that he doesn't want to have vendor lock-in.

00:06:44.340 --> 00:06:52.740
So whatever processes they build up, it won't make it so that you're stuck with FastAPI with their hosting.

00:06:53.220 --> 00:06:55.180
So essentially this is hosting for FastAPI.

00:06:55.380 --> 00:06:56.200
So kind of neat.

00:06:56.440 --> 00:06:56.540
Yeah,

00:06:56.740 --> 00:06:59.300
congratulations, Sebastian and crew.

00:06:59.440 --> 00:06:59.740
That's awesome.

00:07:00.140 --> 00:07:00.280
Yeah.

00:07:00.360 --> 00:07:01.040
It

00:07:01.040 --> 00:07:02.480
is a hassle to deploy things.

00:07:02.660 --> 00:07:06.960
And presumably these folks know the best way to host FastAPI.

00:07:07.240 --> 00:07:11.600
FastAPI might be tuned for the infrastructure that they choose over time.

00:07:12.080 --> 00:07:13.760
You know, I'll have to look more into this.

00:07:13.980 --> 00:07:16.160
Like how do you host a database and things like that.

00:07:16.340 --> 00:07:26.800
But presumably you can do things like use a CNAME for your app at fastapicloud.com and you'll get your own domain name and all that sort of stuff.

00:07:26.980 --> 00:07:27.700
But very interesting.

00:07:28.100 --> 00:07:28.920
Yeah, it is.

00:07:29.080 --> 00:07:34.860
Also, like for, interestingly, that was the first thing I thought is like, well, I probably don't want to use their domain.

00:07:35.340 --> 00:07:40.440
But for, you know, for an API endpoint for some internal tools and stuff, I might not care.

00:07:42.540 --> 00:07:43.780
So I think some people.

00:07:43.800 --> 00:07:44.300
That's a good point.

00:07:44.719 --> 00:07:45.560
You would care a

00:07:45.560 --> 00:07:46.580
whole lot less, right?

00:07:46.660 --> 00:07:47.680
If it's just an API

00:07:47.680 --> 00:07:48.720
and it's not

00:07:48.720 --> 00:07:51.140
like your landing page or whatever.

00:07:51.680 --> 00:07:51.860
Yeah.

00:07:52.170 --> 00:07:52.300
Yeah.

00:07:52.880 --> 00:07:53.060
Anyway.

00:07:53.240 --> 00:07:53.380
Cool.

00:07:53.700 --> 00:07:53.960
Cool stuff.

00:07:54.659 --> 00:07:55.020
Absolutely.

00:07:55.580 --> 00:07:56.840
Well, what else is cool, Brian?

00:07:57.600 --> 00:07:57.700
What?

00:07:57.780 --> 00:08:43.960
NordLayer. Let me tell everyone about our sponsor and NordLayer here. So NordLayer is actually a pretty neat product. And this episode of Python Bytes is brought to you by NordLayer. So it's a toggle ready network security platform for modern businesses and combines VPNs like you would expect, of course, from the parent company, Nord. However, it's also access control, threat protection, visibility into what's happening in case you spot some sort of malware. All of those in one easy use platform. There's no hardware, no complex setup, just secure connections and full control in less than 10 minutes. So it's easy to start with quick deployment, step-by-step onboarding 24-7 support. It's easy to combine. It works with existing setups in all major platforms.

00:08:44.500 --> 00:09:44.260
And NordLater is easy to scale. Just add users, features, servers in a few clicks. SSO and provisioning included. If you want zero trust network access, you got it. It provides those network zero trust solutions. It adds threat protection to keep malware, ransomware, and phishing from reaching your endpoints, including servers. How cool is that? Increases your threat intelligence to spot threats before they escalate and helps businesses achieve like HIPAA compliance and stuff. So if you're responsible for security of your software or data science team, you should definitely give NordLayer a look. As Python Bytes listeners, you get an exclusive offer of up to 22% off NordLayer yearly plans plus 10% off the top with a coupon. And that coupon is Python Bytes dash 10. If you visit the link in your show notes, there's a landing page and it gives you the code right there. So Python Bytes dash 10. Try NordLayer risk-free with their 14-day money-back guarantee.

00:09:44.360 --> 00:09:47.500
Visit pythonbytes.fm/nordlayer to get started.

00:09:48.020 --> 00:09:49.400
Link is in your podcast player show notes.

00:09:49.780 --> 00:09:51.700
Thank you to Nordlayer for supporting the show.

00:09:51.980 --> 00:09:52.300
All right.

00:09:52.920 --> 00:09:57.600
Next, we, you know, going back in time, a little less in time.

00:09:58.440 --> 00:10:01.500
This is just a couple episodes ago in episode 428.

00:10:02.420 --> 00:10:04.240
We covered t-strings.

00:10:04.560 --> 00:10:08.580
So t-strings are going to come in 3.14 in the Py release.

00:10:09.340 --> 00:10:14.080
So there is one of the authors, Dave Beck, or Dave Peck, sorry, Dave.

00:10:14.500 --> 00:10:18.420
wrote an article about the Python's new t-strings.

00:10:18.480 --> 00:10:24.820
And I'm kind of excited about it because when we talked about it on the show, I'm excited about them, but I also, they're like template strings.

00:10:25.060 --> 00:10:27.220
But how are they different than f-strings?

00:10:28.180 --> 00:10:29.600
When would I use one over the other?

00:10:30.060 --> 00:10:34.640
And I got all these answers in this blog post.

00:10:35.040 --> 00:10:39.240
So he talks about what's the big idea of t-strings.

00:10:39.720 --> 00:10:45.600
And interestingly enough, We've loved f-strings so much that they're used inappropriately.

00:10:46.200 --> 00:10:48.780
And I didn't really realize that there's security problems.

00:10:49.460 --> 00:11:00.300
So there's like comments on using f-strings to take user data, user input, and fill in like maybe a SQL statement.

00:11:00.980 --> 00:11:01.800
Don't do that.

00:11:02.800 --> 00:11:05.260
You want to clean your user input first.

00:11:06.200 --> 00:11:11.880
So people have been using it and or possibly to use it to generate a web page.

00:11:12.000 --> 00:11:24.360
So you've got a possibility of somebody inserting cross-site scripting or other bad things that you don't expect by just sticking user data into HTML.

00:11:24.970 --> 00:11:29.520
So misusing f-strings is one of the reasons why t-strings are kind of a cool thing.

00:11:29.920 --> 00:11:35.340
So the template strings are a generalization of f-strings, and they keep things separate.

00:11:35.520 --> 00:11:46.120
So f strings actually create a string, but t strings don't create, when you create a t string, you don't get a t string, you get a, or a string, you get a template object.

00:11:46.580 --> 00:11:49.420
And this template object has these two separate things.

00:11:49.520 --> 00:11:57.220
You've got, it's got a, I'm going to scroll down, it's got a strings section and a values.

00:11:57.580 --> 00:12:03.740
And so it keeps, they're both tuples of things, of what's inside of it.

00:12:04.080 --> 00:12:05.280
And you can iterate through them.

00:12:05.460 --> 00:12:08.920
There's all sorts of cool stuff you can do with templates, these template strings.

00:12:09.620 --> 00:12:14.940
But this is a nice, really good walkthrough of kind of what's inside and why they're different than f-strings.

00:12:15.000 --> 00:12:16.000
They're very different now.

00:12:16.620 --> 00:12:22.800
And but talking about there's inside, there's a what's the value?

00:12:23.100 --> 00:12:26.680
There's a interpolations are a thing that's in there.

00:12:26.700 --> 00:12:29.720
So you might have it might be a string.

00:12:29.760 --> 00:12:30.300
It might be other.

00:12:30.540 --> 00:12:31.400
It might be something else.

00:12:32.600 --> 00:12:35.180
And the interpolations have all the pieces in place.

00:12:35.810 --> 00:12:50.440
And you can even dive really deep into it and have things like what's the value of the variable that you passed in, the expression name, the conversion, the format specifier, even if you've got format specifiers on it.

00:12:51.420 --> 00:12:54.000
And this is all sorts of nitty gritty detail.

00:12:54.150 --> 00:12:58.360
But the gist I'm taking away is they're just really kept separate.

00:12:58.560 --> 00:13:03.880
So you've got like the template and the things you're passing into the template as completely separate things.

00:13:04.460 --> 00:13:05.120
Why is that great?

00:13:05.360 --> 00:13:17.660
Well, one of the great things about that is you can, like in the example of SQL or HTML, you can take the user data and check all of that and run things over it.

00:13:17.760 --> 00:13:24.640
So if you've got user data and you expected a string, you expected people to not be nefarious about it.

00:13:24.960 --> 00:13:38.840
You can do like a safe HTML or something, convert like the brackets into something else, strip out SQL statements so that they're not, it's not a, you know, escape things, escaping things and making them cleaner.

00:13:39.320 --> 00:13:41.560
One fun example in this, I love this.

00:13:42.080 --> 00:13:47.460
A fun example is how to create PigLatin using template strings.

00:13:48.660 --> 00:13:52.740
And so there's like this PigLatin converter that takes a template and returns a string.

00:13:53.020 --> 00:14:03.900
So you're able to have like a hello world and then you run PigLatin on the template and it converts the template into, we've got these converter functions.

00:14:04.310 --> 00:14:06.600
You can convert into actual string.

00:14:07.220 --> 00:14:18.240
And I kind of, okay, I went down a rabbit hole on this because this example says to convert, I kind of forgot the rules of PigLatin because it's been a while since I've been a kid.

00:14:18.800 --> 00:14:30.280
But it says essentially if the first character is a vowel, if the words in the word, the first character is a vowel, then you append yay on the end.

00:14:30.500 --> 00:14:38.260
But if it's not a vowel, you take the rest of the word and take the first character and put it at the end and say a.

00:14:38.620 --> 00:14:40.000
And I don't think that's correct.

00:14:40.140 --> 00:14:42.920
Or I think it might be correct, but I forgot the rules.

00:14:43.420 --> 00:14:44.360
So I looked it up.

00:14:45.639 --> 00:14:53.000
And Pig Latin, sorry about this, but Pig Latin, it says that it's not just the first constant, but it's the first constant cluster.

00:14:53.240 --> 00:14:55.160
So I don't think this is the correct implementation.

00:14:57.399 --> 00:14:57.800
Well,

00:14:57.800 --> 00:14:59.620
it might be one that fits on one screen.

00:15:00.140 --> 00:15:00.380
Yeah.

00:15:01.020 --> 00:15:06.300
So Brian would translate into Ian Bray, not Ryan Bay.

00:15:07.380 --> 00:15:08.020
You know, anyway.

00:15:08.680 --> 00:15:08.840
Okay.

00:15:09.160 --> 00:15:09.620
The diversion.

00:15:10.060 --> 00:15:10.420
But anyway.

00:15:11.100 --> 00:15:24.760
So there's some great ideas for when we finally have t-strings and we ship Python 3.14, we can do things like possibly having everything more safer and more flexible.

00:15:25.340 --> 00:15:29.060
One of the things that's coming up possibly is, oh, where'd it go?

00:15:30.540 --> 00:15:30.900
787.

00:15:31.290 --> 00:15:38.960
So there's a proposal for safer subprocess usage with like Schlex and Subpros, which I love Schlex.

00:15:39.580 --> 00:15:45.400
But you could use a, if those could be implemented with t-strings, they'd be a lot safer.

00:15:45.590 --> 00:15:48.720
So there are some security vulnerabilities in these things.

00:15:49.000 --> 00:15:51.040
So it could simplify the implementation.

00:15:51.040 --> 00:15:55.560
You don't want to ampersand, ampersand, do other thing as part of your command, right?

00:15:55.840 --> 00:15:56.120
Yeah.

00:15:56.420 --> 00:16:14.640
So this, and then, so having a lot of things that to take user input and create other things, Having them use t-strings might, and having like some quick, safe conversions, instead of having to convert user data ahead of time, you just grab the user data and stick it in a template string.

00:16:15.040 --> 00:16:18.240
And then later in your pipeline, clean up the user data.

00:16:18.580 --> 00:16:19.460
Those are pretty cool things.

00:16:20.000 --> 00:16:22.500
So there's also some attribute things.

00:16:23.140 --> 00:16:31.280
There's other ways you can, since they're separate, all the way until you do the conversion, you can do like some cool attribute things that he covers in the article too.

00:16:31.600 --> 00:16:32.160
So anyway.

00:16:32.400 --> 00:16:33.520
Yeah, looks like a great article.

00:16:33.920 --> 00:16:34.260
Thanks, Dave.

00:16:34.680 --> 00:16:34.800
Ryan.

00:16:35.240 --> 00:16:41.960
I'm going to have Paul Everett on Talk Python, not this week, next week, to talk about t-strings.

00:16:42.400 --> 00:16:43.160
Oh, perfect.

00:16:43.380 --> 00:16:43.440
Yeah.

00:16:43.680 --> 00:16:44.840
We're going to be diving into it some more.

00:16:44.920 --> 00:16:45.420
Yeah, it should be fun.

00:16:45.680 --> 00:16:45.900
Nice.

00:16:46.940 --> 00:16:47.160
Indeed.

00:16:47.760 --> 00:16:48.800
Let's go back to the terminal.

00:16:49.580 --> 00:16:56.660
And this one, I think, is also pretty interesting, especially if you're learning the terminal or you're just like, how do I do that again?

00:16:57.240 --> 00:16:57.520
Zev.

00:16:57.660 --> 00:16:58.500
Have you heard of Zev?

00:16:58.880 --> 00:16:59.120
No.

00:16:59.460 --> 00:17:03.140
It's a simple CLI tool that helps you remember terminal commands.

00:17:03.660 --> 00:17:08.900
So if you're sitting here and you're like, you know, I don't really know what I'm doing with this stuff.

00:17:09.230 --> 00:17:11.079
I can type Zev and it says, what do you want to do?

00:17:11.140 --> 00:17:15.040
It says, show all files in this directory with human readable sizes.

00:17:15.579 --> 00:17:16.740
And it says, okay, great.

00:17:16.959 --> 00:17:18.199
Here are a couple of things you could do.

00:17:18.470 --> 00:17:24.760
And it gives you a select list like ls-lh or I think it was find is one of the options.

00:17:25.160 --> 00:17:28.500
But basically it gives you a bunch of options to do those types of things.

00:17:28.920 --> 00:17:29.680
And up it goes.

00:17:30.010 --> 00:17:30.480
Pretty cool, right?

00:17:30.880 --> 00:17:31.040
Yeah.

00:17:31.720 --> 00:17:31.920
Yeah.

00:17:32.400 --> 00:17:40.800
So this project runs on top of LLM APIs like OpenAI, Google Gemini, or local Olama.

00:17:41.240 --> 00:17:45.020
So basically it sends that command over and then it looks at all the responses.

00:17:45.460 --> 00:17:47.520
But it probably does a bunch of work to format

00:17:47.520 --> 00:17:47.940
it for

00:17:47.940 --> 00:17:48.060
you.

00:17:48.140 --> 00:17:53.320
But more importantly, it puts it right there in your terminal where you can just select the answer and hit enter.

00:17:53.400 --> 00:17:57.800
You don't have to go to chat, copy it, move it back over, run it.

00:17:57.960 --> 00:17:59.480
You know, like that sort of round tripping.

00:17:59.820 --> 00:18:00.040
Yeah.

00:18:00.520 --> 00:18:00.640
Okay.

00:18:01.360 --> 00:18:15.240
Yeah, so suggestions that you might use are like show all running Python processes, find all Python files modified in the last 24 hours, show disk usage for the current directory, check if google.com is reachable, etc, etc.

00:18:15.620 --> 00:18:17.120
So yeah, pretty neat.

00:18:17.240 --> 00:18:21.360
It does say everything's generated by LLMs, so careful.

00:18:23.460 --> 00:18:25.880
Because you know how it goes, right?

00:18:25.900 --> 00:18:31.420
It could be delete all files like this in this directory, and in this directory part gets forgotten.

00:18:32.700 --> 00:18:34.780
rm-rf star, okay.

00:18:36.620 --> 00:18:38.620
Slash star, slash star.

00:18:39.160 --> 00:18:39.560
Anyway, super

00:18:39.560 --> 00:18:41.340
simple, but you set up an LLM provider.

00:18:41.580 --> 00:18:52.100
I recently wrote a really cool program that I'm, program, utility, simple tool, that I use that I'm thinking of making public somehow, but I also don't need another thing to babysit.

00:18:52.360 --> 00:19:04.400
But basically, if you're in a Git repository, you can just hit a command and it will look at all the new files, the change files, and then correlate that with a local LLM, coding-based LLM.

00:19:04.410 --> 00:19:12.960
It says, create me a Git summary of everything, like the header, and then actually a detailed summary, and what happened if you forgot all the things you did.

00:19:13.100 --> 00:19:14.920
A little bit like this, but that's not out yet.

00:19:15.140 --> 00:19:15.600
But this is cool.

00:19:15.600 --> 00:19:15.700
I

00:19:15.700 --> 00:19:16.280
like to see this.

00:19:16.500 --> 00:19:19.360
Like, what did I do on Friday to run on Monday?

00:19:19.640 --> 00:19:20.060
Yeah, exactly.

00:19:20.400 --> 00:19:20.880
You could totally

00:19:20.880 --> 00:19:21.200
do it.

00:19:21.680 --> 00:19:23.120
And it improves it in this way.

00:19:23.180 --> 00:19:24.820
You're like, oh, gosh, I did improve it in that way.

00:19:25.000 --> 00:19:25.480
Look at this show.

00:19:25.600 --> 00:19:26.240
Aren't I smart?

00:19:29.200 --> 00:19:39.300
And before we carry on looping back to your topic, the t-strings, Henry Schreiner writes, I've been wondering if this could be supported in the logging module.

00:19:39.680 --> 00:19:41.640
Since it's an actual type, it could be detected.

00:19:41.980 --> 00:19:42.140
Yeah.

00:19:42.200 --> 00:19:42.420
That

00:19:42.420 --> 00:19:43.180
would be cool, right?

00:19:43.400 --> 00:19:47.860
maybe have a slightly different output with more information about the parts of the string.

00:19:48.380 --> 00:19:48.600
Yeah.

00:19:49.170 --> 00:19:49.300
Indeed.

00:19:49.920 --> 00:19:50.140
All right.

00:19:50.940 --> 00:19:52.960
Well, we're back to extras.

00:19:53.710 --> 00:19:55.040
I really should have put up.

00:19:55.160 --> 00:20:11.720
So one of the things I didn't cover about the t-strings, we'll get to my extra first or second, but in the T-string article, there is a link to a whole bunch of examples of other non-silly examples of t-strings.

00:20:12.120 --> 00:20:15.800
So he does Pig Latin in the article, but there's a bunch of others too.

00:20:16.140 --> 00:20:20.520
And one of them is a treatment of logging with t-strings.

00:20:20.820 --> 00:20:21.520
So check that out.

00:20:22.160 --> 00:20:32.140
My extra really is I kind of went – speaking of rabbit holes, found out Monty Python and the Holy Grail turns 50 this year.

00:20:32.360 --> 00:20:34.040
So 50 years ago, Monty Python.

00:20:34.120 --> 00:20:34.900
I can't believe that.

00:20:35.580 --> 00:20:36.940
Bring out the holy hand grenade.

00:20:39.020 --> 00:20:44.620
But one of the comments in here, which is, this is, I'm linking to an Ars Technica article.

00:20:46.020 --> 00:20:54.100
And I learned a new word today because there were, it says they were, Monty Python and the Holy Grail were nerd gassing before it was cool.

00:20:54.510 --> 00:20:56.460
So they were talking about nerd gassing.

00:20:57.120 --> 00:21:04.980
And one of the wonderful discussions in the movie is using coconuts.

00:21:05.720 --> 00:21:07.620
Because they're supposedly riding horses.

00:21:07.850 --> 00:21:08.700
They don't have, yeah.

00:21:09.340 --> 00:21:11.000
Yeah, there's just some guy banging coconuts.

00:21:11.740 --> 00:21:14.740
And somebody stops and says, like, where did you get the coconuts?

00:21:14.840 --> 00:21:15.760
Oh, we found them.

00:21:16.060 --> 00:21:19.420
No, you couldn't have found them because, like, they're not native to England.

00:21:19.700 --> 00:21:20.040
They're tropical.

00:21:21.220 --> 00:21:23.360
So great discussion about coconuts.

00:21:23.780 --> 00:21:25.640
And apparently that is nerd gassing.

00:21:25.840 --> 00:21:26.940
I didn't know the term.

00:21:27.840 --> 00:21:28.620
So I looked that up.

00:21:28.840 --> 00:21:37.180
Nerd gassing was coined in 2008 by John Scalzi, a sci-fi author and blogger.

00:21:38.240 --> 00:21:55.440
And nerd gassing is the venting nerd, venting, the venting that nerds emit when some often minor detail of a book or movie or TV show, comic book, et cetera, either conflicts with canon or hand waves through some suspect science.

00:21:56.100 --> 00:22:03.940
And so I was totally nerd gassing in the, in one of our topics when I went off on what the correct rules for pig Latin

00:22:03.940 --> 00:22:04.480
are.

00:22:04.770 --> 00:22:07.420
So, yes, that's, you were.

00:22:07.800 --> 00:22:14.140
And I do the same thing when people mess up that quote from Captain Picard about may the force be with you.

00:22:14.500 --> 00:22:16.020
Okay, so let's go on to the next.

00:22:17.720 --> 00:22:17.940
Nice.

00:22:18.680 --> 00:22:18.820
Okay.

00:22:18.960 --> 00:22:19.120
Please

00:22:19.120 --> 00:22:20.620
write us and tell me that that's wrong.

00:22:20.760 --> 00:22:20.940
All right.

00:22:21.180 --> 00:22:22.540
This is it for your extras?

00:22:22.900 --> 00:22:23.040
Yeah.

00:22:23.300 --> 00:22:30.540
I would like to also point out for those as a follow-up who don't know, because Python, the community has done a poor job of this.

00:22:30.880 --> 00:22:37.280
All the logos for Python are snakes, but the name Python came from Monty Python, which is why it's relevant on this show.

00:22:37.800 --> 00:22:38.000
yes

00:22:38.000 --> 00:22:42.620
yes and that's why we have wheels because they're wheels of cheese because

00:22:42.620 --> 00:22:45.960
they used to the cheese shop for pipey and yeah the

00:22:45.960 --> 00:22:51.400
cheese skit i mean if you haven't seen the cheese skit from monty python you have to go watch the cheese skit because it's

00:22:51.400 --> 00:22:51.540
awesome

00:22:51.540 --> 00:22:52.100
the

00:22:52.100 --> 00:22:55.440
rabbit part is my favorite by far okay here's

00:22:55.440 --> 00:23:09.240
a quote this is not the joke this is actually a real thing so it has a picture of firefox and it says you either die a hero or you live long enough to see yourself become a villain. And underneath it, it shows the preferences in Firefox for website advertising.

00:23:10.060 --> 00:23:43.900
Allow websites to perform privacy preserving ad measurement. This helps the site understand how their ads perform, et cetera, et cetera. Like this is built into Firefox now. And there was like some terms and use changes about how the stuff you submit in Firefox is now being used and being shared and so on and oh right firefox was like one of the last bastions of privacy like real privacy the antithesis of chrome which is you know tracking and correlating and reselling everything

00:23:44.440 --> 00:23:44.960
so

00:23:44.960 --> 00:24:36.360
both you brian and me we care about these things and for example brian use vivaldi i use vivaldi quite a bit but i also started using zen zen browser that's what's actually on the screen right now. And I love Zen Browser because of it's such a clean, nice little layout. And it's based on Firefox as well. So when this stuff got announced 10 months ago or whenever it was, there was over on the Zen Browser GitHub repo, there was like, so what is Zen going to do about this? And at the time there wasn't a lot of clarity, but now Zen 1.2.1 is out and it's got some features. One of the things it says, if you go read the full release notes, it's got some new But in response to recent privacy concerns, bracket about Firefox, we've significantly strengthened Zen's privacy measures.

00:24:37.120 --> 00:24:40.840
Previously, we only disabled telemetry, but other things were being done.

00:24:41.240 --> 00:24:45.240
Now Firefox telemetry has been completely stripped out of this.

00:24:45.700 --> 00:24:56.040
Basically, they've, much like Vivaldi de-Google-ifies Chrome, Zen has had to go to the step of actually de-Mozilla-fying.

00:24:56.160 --> 00:24:57.960
I don't know, whatever, what is the term here?

00:24:58.200 --> 00:24:59.240
Extracting evil.

00:25:00.500 --> 00:25:05.620
Extracting the in poopification of, yeah.

00:25:06.040 --> 00:25:09.260
And I don't necessarily blame Firefox.

00:25:09.760 --> 00:25:10.600
They are in a tough spot.

00:25:10.820 --> 00:25:20.460
They've squandered their position quite badly for quite a long time, such that if the ruling against Google goes through, they lose 90% of their revenue overnight.

00:25:21.120 --> 00:25:21.600
That's a problem.

00:25:21.940 --> 00:25:26.940
But they're also doing good things like starting to create like docs alternatives that we've covered before.

00:25:27.360 --> 00:25:27.920
But, you know,

00:25:28.140 --> 00:25:28.660
I guess things

00:25:28.660 --> 00:25:33.260
must be, people must be resold and ads must be put upon people.

00:25:33.650 --> 00:25:35.120
And that's the way it seems to be.

00:25:35.150 --> 00:25:35.520
I don't know.

00:25:35.570 --> 00:25:36.900
I don't agree with it, but that's how it is.

00:25:37.160 --> 00:25:38.860
Anyway, I'm happy to see Zen Browser do this.

00:25:39.120 --> 00:25:39.400
Yeah.

00:25:39.720 --> 00:25:50.200
There's also a ton of cool, well, there are a handful, at least, of cool pytest plugins that I use that started in Mozilla.

00:25:50.680 --> 00:25:51.380
So, yeah.

00:25:51.740 --> 00:25:53.980
There's lots of great people that have worked there over the years.

00:25:54.340 --> 00:25:55.400
And I'm sure still do.

00:25:55.560 --> 00:25:55.720
A

00:25:55.720 --> 00:25:56.060
lot of people

00:25:56.060 --> 00:25:56.220
do.

00:25:56.410 --> 00:25:57.320
And I'm...

00:25:57.380 --> 00:26:01.380
suspect not all of them are super psyched about turning on all the ad stuff, right?

00:26:01.860 --> 00:26:08.000
Just like I'm sure there's people that still work at Google that don't think they should have removed don't be evil from their tagline.

00:26:08.750 --> 00:26:09.700
Yeah, but those people are evil.

00:26:09.910 --> 00:26:10.600
Okay, let's keep going.

00:26:11.580 --> 00:26:12.080
Just kidding.

00:26:12.440 --> 00:26:12.800
Just kidding.

00:26:13.010 --> 00:26:13.680
Please don't email me.

00:26:13.880 --> 00:26:14.540
Yeah, email him.

00:26:15.040 --> 00:26:16.340
It's Michael at...

00:26:20.220 --> 00:26:21.040
Testandcode.com.

00:26:21.120 --> 00:26:21.380
Okay.

00:26:23.420 --> 00:26:24.760
Next, or you go to jail.

00:26:24.900 --> 00:26:28.120
That was such a fun episode that we did last week.

00:26:28.400 --> 00:26:28.580
Yeah.

00:26:28.780 --> 00:26:35.420
But I pulled up this episode, not because I care about that, but I've changed the way that transcripts work.

00:26:35.510 --> 00:26:41.800
So previously we had transcripts are every word spoken for 30 minutes or however long the show is.

00:26:42.200 --> 00:26:43.940
And I thought, well, that should go on its own page.

00:26:44.050 --> 00:26:45.140
You can go and check it out.

00:26:45.320 --> 00:26:52.880
But I'd like you to be able to come to the page and hit Command-F and let you know what we said about, I don't know, AI or...

00:26:53.180 --> 00:26:56.020
We'll just pick the sponsor because it doesn't show up too many times.

00:26:56.240 --> 00:27:02.500
But now the transcripts show up on the main page just as a section farther down.

00:27:02.860 --> 00:27:03.040
You can

00:27:03.040 --> 00:27:03.620
collapse them

00:27:03.620 --> 00:27:03.980
if you like.

00:27:04.480 --> 00:27:08.160
But it lets you click on the time link anywhere and play it back

00:27:08.160 --> 00:27:08.900
as you go.

00:27:08.940 --> 00:27:13.720
So if you find something in the transcript and you're like, I just want to hear it, you just click right there and boom, off it goes.

00:27:14.000 --> 00:27:18.720
Put tons of effort into making these transcripts accurate and good.

00:27:18.800 --> 00:27:19.340
They're not perfect.

00:27:19.600 --> 00:27:20.860
Please, again, don't email me.

00:27:20.940 --> 00:27:22.160
There is an imperfection.

00:27:22.160 --> 00:27:23.680
I have discovered you were wrong.

00:27:24.040 --> 00:27:28.640
But we make a lot of effort to say things like PyPI are spelled correctly.

00:27:29.140 --> 00:27:33.760
And other words are correct in here so that when you search for them, they show up.

00:27:33.760 --> 00:27:39.140
It also powers our search engine that you can just search and even add to your browser that we've talked about before.

00:27:39.380 --> 00:27:40.700
But transcripts are slightly better.

00:27:41.100 --> 00:27:42.600
And the pages are slightly more useful.

00:27:42.820 --> 00:27:43.500
So visit the website.

00:27:43.820 --> 00:27:44.120
Yeah.

00:27:44.190 --> 00:27:50.080
And that helps us track every part of your life because we know we don't do that.

00:27:50.679 --> 00:27:54.060
just we need just one cookie to get it

00:27:54.060 --> 00:28:29.680
started no just kidding we have no cookies okay that's it for my extras joke yeah this is a this is a re-envisioning a re-envisioning of an old joke i think it's pretty good there's this person running a china shop and there's a big sign that says china shop and then above it my code base and there's a character here holding a giant angry looking bull by a nose ring. And the person holding it says, mind my friend comes in with me and the bull is labeled cursor. Welcome to the error of AI, huh? Just add that one feature.

00:28:29.960 --> 00:28:32.620
Sure. We only need 27 changes. You don't mind if we do, do we?

00:28:34.140 --> 00:28:34.980
Interesting. That's funny.

00:28:35.270 --> 00:28:47.600
So why is this a flashback? This joke actually comes from, this is the original one from when George W. Bush was president in the US and the China shop was not code-based. The China shop was social security.

00:28:48.120 --> 00:28:48.220
Okay.

00:28:48.660 --> 00:28:48.860
Yeah.

00:28:49.100 --> 00:28:49.740
Something like that.

00:28:50.020 --> 00:28:53.160
That's, I don't know, somewhere down here in this thread people talk about stuff.

00:28:53.260 --> 00:28:53.540
I don't know.

00:28:53.820 --> 00:28:55.280
Anyway, I think it's a pretty appropriate joke.

00:28:55.420 --> 00:28:55.800
It's pretty good.

00:28:56.060 --> 00:28:56.260
Yeah.

00:28:56.980 --> 00:28:57.060
Yeah.

00:28:57.460 --> 00:28:57.760
It's funny.

00:28:58.180 --> 00:28:59.100
Good, good, good point.

00:28:59.380 --> 00:28:59.460
Yeah.

00:28:59.880 --> 00:28:59.960
Indeed.

00:29:00.400 --> 00:29:00.700
Indeed.

00:29:01.340 --> 00:29:01.440
All right.

00:29:01.500 --> 00:29:02.440
Well, that's what I had for our joke.

00:29:03.000 --> 00:29:05.520
Not absolutely hilarious, but amusing, I think.

00:29:06.020 --> 00:29:09.680
If you want hilarious, you got to go back to 430, episode 430 last week.

00:29:09.880 --> 00:29:09.980
Yeah.

00:29:10.320 --> 00:29:10.480
Yeah.

00:29:10.900 --> 00:29:10.960
Yeah.

00:29:11.080 --> 00:29:13.980
And if you haven't listened to that, you have to watch that video because it's excellent.

00:29:13.980 --> 00:29:14.160
That's right.

00:29:14.820 --> 00:29:15.280
That's right.

00:29:15.860 --> 00:29:16.720
or you go to jail.

00:29:17.120 --> 00:29:17.720
Or you go

00:29:17.720 --> 00:29:18.080
to jail.

00:29:18.650 --> 00:29:19.840
Listen to it or you go to jail.

00:29:22.520 --> 00:29:23.900
Well, once again, wonderful episode.

00:29:24.320 --> 00:29:27.100
Thanks everybody for listening and we'll see everybody next week.

