WEBVTT

00:00:00.001 --> 00:00:04.780
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:00:04.780 --> 00:00:11.440
your earbuds. This is episode 314, recorded December 13th, 2022. I'm Michael Kennedy.

00:00:11.440 --> 00:00:12.500
And I'm Brian Okken.

00:00:12.500 --> 00:00:18.000
And it's just us this time. Very nice to be together to share some fun Python news.

00:00:18.000 --> 00:00:19.440
Yeah, we got some good stuff.

00:00:19.440 --> 00:00:22.880
I think we do. Why don't you kick it off? Before you do, actually, real quick,

00:00:22.880 --> 00:00:25.800
I just want to say thank you to Microsoft for startups for sponsoring this show.

00:00:25.800 --> 00:00:27.160
Tell you more about them later. Go.

00:00:27.160 --> 00:00:32.200
Well, first up, we've got something from Will McCoogan. Surprise, surprise.

00:00:32.200 --> 00:00:41.300
But he's got this cool project called Factory. F-A-Q-T-O-R-Y. Factory. Cute joke.

00:00:41.300 --> 00:00:51.020
But it's a tool to generate an FAQ page, a markdown page specifically for a GitHub project or something.

00:00:51.020 --> 00:00:52.780
I mean, you could use it for anything, really.

00:00:52.780 --> 00:00:57.060
But one of the fun things about it is it uses it itself.

00:00:57.060 --> 00:01:01.640
So you can, I mean, not. There's an example there, but the questions are fun.

00:01:01.640 --> 00:01:10.780
So the idea is you've got a lot of questions maybe that come in about your project and you want to keep track of them.

00:01:11.500 --> 00:01:16.420
So what you do is you stick your questions in a question directory.

00:01:16.420 --> 00:01:20.980
And then they're like just these little markdown snippets.

00:01:20.980 --> 00:01:24.280
And let's look at the raw format.

00:01:24.280 --> 00:01:30.420
It's just like this title. There's a title block and that's the question.

00:01:30.420 --> 00:01:34.200
And then maybe some information. You can cite things maybe.

00:01:35.020 --> 00:01:41.300
It's really pretty easy. I'm going to go actually to the read me again to talk about that.

00:01:41.300 --> 00:01:42.800
You're not going to go to the FAQ?

00:01:42.800 --> 00:01:44.700
Oh, yeah, we could.

00:01:44.700 --> 00:01:45.560
I'm just kidding.

00:01:45.560 --> 00:01:48.940
Just the, I wanted to make sure that we talked about alt titles.

00:01:48.940 --> 00:01:55.940
So you had, you have a title for a question and then an alt title maybe for different kinds of questions that are really the same question.

00:01:55.940 --> 00:02:02.160
And then an answer. That's the simple form of what to do in these little markdown files, these little question files.

00:02:02.160 --> 00:02:04.700
And then you just use do factory build.

00:02:04.700 --> 00:02:09.080
And what it does is takes all those and creates a markdown page.

00:02:09.080 --> 00:02:16.240
And then you can see what it looks like on there, the FAQ.md in this project.

00:02:16.240 --> 00:02:19.320
But it's nice. It's got frequently asked questions at the top.

00:02:19.320 --> 00:02:21.100
It's got links to all the questions.

00:02:21.100 --> 00:02:25.840
And then, and then you, you know, you, you go down and you can see what the answer is.

00:02:26.000 --> 00:02:32.960
Yeah. Even like a table of contents with the hash, you know, the hash inner page navigation within GitHub, which is interesting, right?

00:02:32.960 --> 00:02:36.960
Yeah, it is interesting. And links to each question.

00:02:36.960 --> 00:02:42.880
So if you want to like email somebody a link to it, you can link to the question, which is nice.

00:02:42.880 --> 00:02:45.640
There's some funny ones in there as examples.

00:02:45.640 --> 00:02:47.740
Just correct me up. I got to bring them up.

00:02:47.740 --> 00:02:53.740
Like, in fact, most frequently asked questions have never and perhaps will never be asked.

00:02:54.280 --> 00:02:58.320
And then a quote, 89% of statistics are made up on the spot.

00:02:58.320 --> 00:03:04.400
These are, these are pretty funny, but it's kind of cool.

00:03:04.400 --> 00:03:05.960
And that's not all it.

00:03:05.960 --> 00:03:07.120
So you generate it.

00:03:07.120 --> 00:03:13.460
This would be enough, actually, if it just generated this FAQ page, it might be worthwhile taking a look at.

00:03:13.660 --> 00:03:15.660
But it also has templates.

00:03:15.660 --> 00:03:19.620
So it builds like a template so that you can have like a dot FAQ.

00:03:19.620 --> 00:03:26.280
In the dot FAQ, there's templates and you can tweak these to have a different, you know, it's a different look to them if you want.

00:03:26.280 --> 00:03:27.320
You can add some more code.

00:03:27.320 --> 00:03:28.260
Oh, nice.

00:03:28.260 --> 00:03:37.300
And then there's this suggestion, which we got to talk about these suggestions because it has a template for what to do and a suggestion.

00:03:37.300 --> 00:03:45.900
And why this is important is it comes with this hook that you can put into GitHub Actions.

00:03:46.300 --> 00:03:50.340
So there's a built-in thing with actions.

00:03:50.340 --> 00:03:51.840
You can suggest something.

00:03:51.840 --> 00:04:02.620
So if you suggest a question, it tries to figure out what the question might be using some like fuzzy, what does it say, fuzzy matching or something, which is kind of a neat idea.

00:04:02.620 --> 00:04:05.660
And then there's an example right in there.

00:04:05.660 --> 00:04:06.540
Let's see.

00:04:06.540 --> 00:04:07.580
GitHub workflows.

00:04:07.580 --> 00:04:10.080
You can look at the new issues.

00:04:10.080 --> 00:04:12.540
And it's calling this factory.

00:04:12.540 --> 00:04:20.720
So if somebody files an issue that's really just a question and it figures out that there's something it can answer with, it'll answer for you.

00:04:20.720 --> 00:04:26.620
So if you get, if you have, you know, I don't have any projects that have that many issues, but I'm sure Will does.

00:04:26.620 --> 00:04:29.760
And some people do have like these huge projects.

00:04:29.760 --> 00:04:34.880
And having a little thing that goes, hey, this question's already in the FAQ or something similar.

00:04:34.880 --> 00:04:36.220
Just go look there.

00:04:36.220 --> 00:04:38.120
Or here's the answer.

00:04:38.120 --> 00:04:38.560
Maybe.

00:04:38.560 --> 00:04:40.080
That's pretty cool.

00:04:40.080 --> 00:04:41.940
I haven't tried this, but it looks like fun.

00:04:41.940 --> 00:04:43.940
I think that's really excellent.

00:04:43.940 --> 00:04:51.620
Even for my limited small number of small projects, I still get things like, have you considered this or why is it different than that?

00:04:51.620 --> 00:04:52.700
It seems like it's the same.

00:04:52.700 --> 00:04:54.120
It's not the same.

00:04:54.120 --> 00:04:54.980
It's similar.

00:04:54.980 --> 00:04:55.940
It's not the same.

00:04:56.360 --> 00:05:03.280
Here's the huge long discussion on the issue that somebody filed that's closed because we're not resolving it and we don't leave it as an open issue.

00:05:03.280 --> 00:05:07.220
But you go look in the closed issues and you'll see the discussion and you can participate there.

00:05:07.220 --> 00:05:07.400
Right.

00:05:07.400 --> 00:05:09.800
That kind of just point them in the right direction.

00:05:09.800 --> 00:05:10.320
Yeah.

00:05:10.320 --> 00:05:11.100
That's really cool.

00:05:11.100 --> 00:05:13.540
I think there's a lot of stuff like this.

00:05:13.600 --> 00:05:23.920
I actually talked with Ned Batchelder last week, seven days ago, it says, on an episode that's coming out on Talk Python called Tools for Readme Creation and Maintenance.

00:05:23.920 --> 00:05:24.540
Oh, yeah.

00:05:24.760 --> 00:05:28.180
As well as FAQs and changelogs and those sorts of things.

00:05:28.180 --> 00:05:32.460
Remember, I did a shout out for, give me all the tools for Readmes on here.

00:05:32.460 --> 00:05:38.540
And so this is the episode we ended up doing because like three of the tools out of the eight or nine we covered were written by Ned.

00:05:38.540 --> 00:05:43.700
We're like, we should just, I should just have Ned on the show because it seems like he's a major topic here.

00:05:43.700 --> 00:05:44.280
Nice.

00:05:44.280 --> 00:05:47.320
Anyway, there's a lot of other tools that do that.

00:05:47.320 --> 00:05:52.640
But what I think is relevant here is this automation and this suggest feature.

00:05:52.780 --> 00:05:54.660
This is what makes it really stand out as being different.

00:05:54.660 --> 00:05:55.120
Yeah.

00:05:55.120 --> 00:06:03.560
So even on some of my small projects, I'm going to go ahead and turn it on and then probably issue questions myself and play with it and see how it works.

00:06:03.560 --> 00:06:04.080
Yeah.

00:06:04.080 --> 00:06:04.380
Yeah.

00:06:04.380 --> 00:06:04.880
That'd be awesome.

00:06:04.880 --> 00:06:05.340
Yeah.

00:06:05.340 --> 00:06:05.700
Cool.

00:06:05.700 --> 00:06:06.020
Yeah.

00:06:06.020 --> 00:06:09.580
Steve in the audience, what's the answer to what's the difference between a duck?

00:06:09.580 --> 00:06:10.240
I must know.

00:06:10.240 --> 00:06:11.220
What's the difference?

00:06:11.220 --> 00:06:11.400
Oh.

00:06:11.400 --> 00:06:12.560
It's an FAQ, yeah.

00:06:12.560 --> 00:06:14.660
We'll put it on the FAQ, Steve.

00:06:14.660 --> 00:06:15.500
We'll help you out there.

00:06:15.500 --> 00:06:15.760
Yeah.

00:06:15.760 --> 00:06:16.360
All right.

00:06:16.360 --> 00:06:17.780
Should we go off to the next one?

00:06:17.780 --> 00:06:18.240
Yes.

00:06:18.240 --> 00:06:18.760
All right.

00:06:18.760 --> 00:06:21.840
So way back in, let's see.

00:06:22.040 --> 00:06:24.960
We have a pretty cool search engine here.

00:06:24.960 --> 00:06:27.780
Search for Kagi, live with it.

00:06:27.780 --> 00:06:35.220
Way back here, when we had Gina Häußge on the show, I talked about this Kagi thing.

00:06:35.220 --> 00:06:35.680
Yeah.

00:06:35.680 --> 00:06:36.480
Or was it, right?

00:06:36.480 --> 00:06:37.580
Like a paid search thing?

00:06:37.580 --> 00:06:38.240
Yeah.

00:06:38.240 --> 00:06:39.260
There it is.

00:06:39.260 --> 00:06:41.080
That was suggested by Daniel.

00:06:41.080 --> 00:06:44.840
I said, you know, look, I'll give this a try and I'll give you all a report.

00:06:44.840 --> 00:06:45.720
That was in June.

00:06:46.020 --> 00:06:47.360
Well, it's December now.

00:06:47.360 --> 00:06:49.260
So maybe not just one month, which was my idea.

00:06:49.260 --> 00:06:55.980
But I finally got around to writing up a report on Kagi and, you know, TLDR.

00:06:55.980 --> 00:06:56.860
I'm still using it.

00:06:56.860 --> 00:06:57.820
I still really like it.

00:06:57.820 --> 00:07:05.260
So for those of you who don't have a six month perfect memory of the extras, I don't doubt that it's, you know, faded.

00:07:05.740 --> 00:07:11.220
Kagi is a paid search engine that is super privacy respecting and very customizable.

00:07:11.840 --> 00:07:17.700
So instead of being the product, you can pay for a product, which is search, which is pretty rare, actually.

00:07:17.700 --> 00:07:18.000
Right.

00:07:18.000 --> 00:07:19.400
There's not many others that do that.

00:07:19.400 --> 00:07:25.280
So what I did is I went through and did a little write up here.

00:07:25.280 --> 00:07:28.660
And it's really kind of the what are my thoughts on this?

00:07:28.660 --> 00:07:30.160
Why did I go through this whole process?

00:07:30.160 --> 00:07:33.540
But I entitled it paying for search in 2022.

00:07:33.540 --> 00:07:34.420
Am I crazy?

00:07:34.420 --> 00:07:35.860
Which we'll see.

00:07:35.860 --> 00:07:40.160
So some of the highlights of the things I'm really enjoying it.

00:07:40.240 --> 00:07:45.440
I laid out some of the reasons I think it matters, like surveillance capitalism is net, net bad for society.

00:07:45.440 --> 00:07:55.080
That is you being the product by being tracked and having all of that information tracked across different sources, grouped together and resold through data brokers.

00:07:55.080 --> 00:07:55.940
Not good.

00:07:55.940 --> 00:07:58.060
Most search engines, that's their business.

00:07:58.060 --> 00:07:58.740
Right.

00:07:58.740 --> 00:07:59.760
Which is not great.

00:07:59.760 --> 00:08:00.200
Right.

00:08:00.200 --> 00:08:03.940
And also, if you support small companies, we all win.

00:08:03.940 --> 00:08:04.400
Right.

00:08:04.400 --> 00:08:07.000
Even if you don't use it, people are supporting small companies.

00:08:07.000 --> 00:08:07.720
We have many choices.

00:08:07.720 --> 00:08:09.540
There's just there's just more choice.

00:08:09.540 --> 00:08:09.740
Right.

00:08:09.760 --> 00:08:14.760
We don't nobody wants a world where there's like one giant or two giant tech companies that make all the decisions.

00:08:14.760 --> 00:08:20.200
And search happens to kind of live in that intersection of all of these things.

00:08:20.200 --> 00:08:20.480
Right.

00:08:20.480 --> 00:08:25.080
So when you go to do search, you know, you're kind of supporting some giant tech company.

00:08:25.080 --> 00:08:28.560
But at the same time, you're also being tracked and resold.

00:08:28.960 --> 00:08:34.120
I classified it as like some things are on the neutral good side, like DuckDuckGo.

00:08:34.120 --> 00:08:35.080
Like they're mostly good.

00:08:35.080 --> 00:08:41.440
But there's also that sneaky behind the scenes thing with like only Microsoft can track our users.

00:08:41.440 --> 00:08:42.260
No one else can.

00:08:42.260 --> 00:08:43.680
We won't talk about it.

00:08:43.680 --> 00:08:44.560
A link to that.

00:08:44.560 --> 00:08:46.300
Others, fully on the dark side.

00:08:46.300 --> 00:08:46.700
Right.

00:08:46.780 --> 00:08:49.920
So a link to an article about how to retarget your customers.

00:08:50.920 --> 00:08:58.080
So just some of the highlights here for Kaggy is it's totally privacy perspective, respecting because you pay for it.

00:08:58.080 --> 00:08:58.460
Right.

00:08:58.460 --> 00:09:03.820
There's no ads which don't lead to these in perverse incentives, these counter incentives.

00:09:03.820 --> 00:09:07.000
One of the things I really like is you can block websites.

00:09:07.200 --> 00:09:13.480
Like I just unblocked all the things that I had previously blocked and I did a search for HTML for div tag event.

00:09:13.480 --> 00:09:14.920
What was the first result?

00:09:14.920 --> 00:09:15.960
W3 schools.

00:09:15.960 --> 00:09:16.520
I don't know.

00:09:16.520 --> 00:09:17.960
Do you ever run across W3 schools?

00:09:17.960 --> 00:09:18.700
Do you like this?

00:09:18.700 --> 00:09:19.100
Yes.

00:09:19.100 --> 00:09:19.600
No.

00:09:19.600 --> 00:09:21.060
And there's a few.

00:09:21.060 --> 00:09:24.300
There's a few of these that are just they just turn out questions and answers.

00:09:24.300 --> 00:09:26.300
You're just like, could this just stop?

00:09:26.300 --> 00:09:27.400
Could I just never?

00:09:27.400 --> 00:09:31.800
Like, how are they so good at SEO and so bad at answers?

00:09:31.800 --> 00:09:32.180
Right.

00:09:32.180 --> 00:09:38.260
And so for those things, there's like a little Globy looking icon looking thing next to this.

00:09:38.260 --> 00:09:40.140
And you can press it and just say block.

00:09:40.140 --> 00:09:42.600
I will never, ever see W3 schools.

00:09:42.600 --> 00:09:44.780
Now, some people may have extensions.

00:09:44.780 --> 00:09:49.380
There's like a W3 school blocker extension you can get for Chrome and other browsers.

00:09:49.380 --> 00:09:55.220
But I also really don't want to install like any more extensions in my browser than necessary.

00:09:55.220 --> 00:09:59.480
There's plenty of examples of like, oh, this extension became unmaintained.

00:09:59.480 --> 00:10:02.800
And so some company bought it and put some tracking into it.

00:10:02.800 --> 00:10:07.040
So not only your search is tracked, everything you do ever is like now, right?

00:10:07.040 --> 00:10:08.700
Like, I just don't want to install those things.

00:10:08.700 --> 00:10:09.540
It's just not worth it.

00:10:09.540 --> 00:10:13.300
But here you can just say block these four or five domains or just lower them if you kind

00:10:13.300 --> 00:10:14.620
of want them to sort.

00:10:14.620 --> 00:10:15.020
Yeah.

00:10:15.020 --> 00:10:16.260
Oh, you muted.

00:10:16.260 --> 00:10:17.160
How did I mute?

00:10:17.160 --> 00:10:17.400
Sorry.

00:10:17.400 --> 00:10:19.340
Check this out, Brian.

00:10:19.340 --> 00:10:24.360
If you do a search for CNN, see how this globe turns reddish orange?

00:10:24.360 --> 00:10:24.880
Yeah.

00:10:24.880 --> 00:10:25.940
Just in the search results.

00:10:25.940 --> 00:10:26.920
This is on Kaggy, right?

00:10:26.920 --> 00:10:28.100
On the right next to it.

00:10:28.100 --> 00:10:28.880
And you're like, wait a minute.

00:10:28.980 --> 00:10:29.620
Why is it red?

00:10:29.620 --> 00:10:33.000
If you go over to it, it has a big red warning.

00:10:33.000 --> 00:10:33.660
There you can click it.

00:10:33.660 --> 00:10:34.420
It'll give you more information.

00:10:34.420 --> 00:10:35.260
It has a big red warning.

00:10:35.260 --> 00:10:37.500
There's 43 trackers detected on this page.

00:10:37.500 --> 00:10:40.400
So if you click on it, you're getting 43 trackers put on you.

00:10:40.400 --> 00:10:41.160
It's like jump.

00:10:41.160 --> 00:10:42.640
It's like that pool is full of leeches.

00:10:42.640 --> 00:10:43.400
Don't go in it.

00:10:43.400 --> 00:10:44.620
You're going to go in it.

00:10:44.620 --> 00:10:45.080
Warning.

00:10:45.080 --> 00:10:49.220
And it even gives you the categorization of it has fingerprinting, advertising, has Google

00:10:49.220 --> 00:10:51.440
as a tracking category and email.

00:10:51.440 --> 00:10:52.180
Isn't that nuts?

00:10:52.180 --> 00:10:52.740
And cool.

00:10:52.740 --> 00:10:53.400
Yeah.

00:10:53.400 --> 00:10:54.120
I mean, cool.

00:10:54.120 --> 00:10:55.500
It tells you not cool that it is.

00:10:55.500 --> 00:10:55.860
Yeah.

00:10:55.860 --> 00:11:00.380
But then just to be fair, things like Vivaldi and stuff can block most of that stuff.

00:11:00.380 --> 00:11:01.360
Yes, exactly.

00:11:01.360 --> 00:11:03.140
And so if you want to block it, you can.

00:11:03.140 --> 00:11:03.580
Right.

00:11:03.580 --> 00:11:06.100
Certainly you should be blocking it, I think.

00:11:06.100 --> 00:11:10.260
But anyway, it's also nice that the search engine has kind of like got your back in that

00:11:10.260 --> 00:11:10.560
regard.

00:11:10.560 --> 00:11:12.160
Like, you know, here's.

00:11:12.160 --> 00:11:12.480
Yeah.

00:11:12.660 --> 00:11:14.720
This is the category of the site.

00:11:14.720 --> 00:11:15.000
Yeah.

00:11:15.000 --> 00:11:16.900
So are the results good, though?

00:11:16.900 --> 00:11:21.600
That is a super important question because if they're not, then all this doesn't matter.

00:11:21.600 --> 00:11:21.840
Right.

00:11:21.840 --> 00:11:22.260
Right.

00:11:22.260 --> 00:11:24.940
I would say they're pretty close to Google.

00:11:24.940 --> 00:11:28.480
I'm pretty sure that the cost, which is $10 a month.

00:11:28.480 --> 00:11:31.880
I think the cost mostly because that's that can't be compute.

00:11:31.880 --> 00:11:33.840
There's just no way that costs that much.

00:11:33.840 --> 00:11:36.300
I think the results are there.

00:11:36.300 --> 00:11:39.820
I'm pretty sure they're buying search as a service from Google and Bing.

00:11:39.820 --> 00:11:40.340
OK.

00:11:40.340 --> 00:11:45.260
I haven't been able to verify it, but there's they talk about enhancing their search results

00:11:45.260 --> 00:11:48.440
with open source and other results.

00:11:48.440 --> 00:11:51.760
So it's like we've got those results plus, you know what I mean?

00:11:51.760 --> 00:11:52.220
Yeah.

00:11:52.320 --> 00:11:54.000
And so as far as I can tell, they're pretty.

00:11:54.000 --> 00:11:56.000
It's quite similar to Google, actually.

00:11:56.000 --> 00:12:00.020
I think with the extra features that be able to block sites you don't ever want to see.

00:12:00.020 --> 00:12:01.040
So that's cool.

00:12:01.040 --> 00:12:01.640
Exactly.

00:12:01.640 --> 00:12:02.000
Yeah.

00:12:02.000 --> 00:12:04.720
So here's the follow up to live with it, Kagi.

00:12:04.720 --> 00:12:06.760
I give it a solid thumbs up.

00:12:06.760 --> 00:12:09.900
The only really the only downside is that it costs money.

00:12:09.900 --> 00:12:14.320
Are you interested in paying another subscription, another $10 a month for something?

00:12:14.320 --> 00:12:15.820
For me, it makes me happy.

00:12:15.820 --> 00:12:18.560
I search for stuff just constantly all day.

00:12:18.560 --> 00:12:21.260
And every time I'm like, yep, still not being tracked.

00:12:21.260 --> 00:12:21.940
Feels pretty good.

00:12:22.140 --> 00:12:23.200
And so for me, it's worth it.

00:12:23.200 --> 00:12:24.960
People can can decide.

00:12:24.960 --> 00:12:25.620
All right.

00:12:25.620 --> 00:12:34.220
Well, I have to say this is a random comment from Vincent is I don't know how I I don't

00:12:34.220 --> 00:12:34.940
know how to read this.

00:12:34.940 --> 00:12:36.700
Once again, I'm rocking my baby to sleep.

00:12:36.700 --> 00:12:39.360
And once again, y'all voices aid me in doing so.

00:12:39.360 --> 00:12:41.080
So we're so boring.

00:12:41.080 --> 00:12:42.200
You're putting your kid to sleep.

00:12:42.200 --> 00:12:43.120
I'm not sure what.

00:12:43.120 --> 00:12:44.420
No.

00:12:44.420 --> 00:12:45.540
Yeah, I'm not sure.

00:12:45.540 --> 00:12:46.580
No, that's awesome.

00:12:46.580 --> 00:12:48.320
Hey, Vincent, great to have you here.

00:12:48.320 --> 00:12:51.960
As somebody who had one of those baby carriers when I had twins, I

00:12:51.960 --> 00:12:55.400
would hook them both on me and I would sit there and like work on my keyboard because

00:12:55.400 --> 00:12:58.780
like in the middle of the night because they would sleep if they were stuck to me, but not

00:12:58.780 --> 00:13:00.280
if I was like trying to lay them down.

00:13:00.280 --> 00:13:00.880
Oh, God, no.

00:13:00.880 --> 00:13:02.300
So hopefully we're just.

00:13:02.300 --> 00:13:02.680
I feel you.

00:13:02.680 --> 00:13:03.040
I feel you.

00:13:03.040 --> 00:13:03.920
I feel you.

00:13:03.920 --> 00:13:04.180
Yeah.

00:13:04.180 --> 00:13:04.980
Oh, a newborn.

00:13:04.980 --> 00:13:05.660
He has a newborn.

00:13:05.880 --> 00:13:07.320
So they're not listening anyway.

00:13:07.320 --> 00:13:08.760
They're just our voices.

00:13:08.760 --> 00:13:09.640
So cool.

00:13:09.640 --> 00:13:10.860
Or are they?

00:13:10.860 --> 00:13:13.760
And are they going to grow up to know Python by the time they're five?

00:13:13.760 --> 00:13:14.380
Yeah.

00:13:14.380 --> 00:13:14.980
Yeah.

00:13:15.200 --> 00:13:20.060
And know how to properly protect themselves against search engines.

00:13:20.060 --> 00:13:21.160
That's right.

00:13:21.160 --> 00:13:21.580
That's right.

00:13:21.580 --> 00:13:22.420
All right, Brian.

00:13:22.420 --> 00:13:26.920
Before we move on, let me tell folks about our sponsor, Microsoft for Startups.

00:13:26.920 --> 00:13:30.780
You know, Microsoft for Startups has been a great support of the show and it's really good

00:13:30.780 --> 00:13:31.960
to have them on board.

00:13:31.960 --> 00:13:34.060
Make sure that we can keep this going strong.

00:13:34.060 --> 00:13:36.680
You know what they don't have in this ad, by the way, Brian?

00:13:36.680 --> 00:13:37.620
Retargeting.

00:13:37.620 --> 00:13:39.240
We don't have any retargeting for you.

00:13:39.520 --> 00:13:43.180
So I'm sorry about that, but you do have some really great offers if you go visit it.

00:13:43.180 --> 00:13:46.060
If you start a business, obviously it's hard to get started.

00:13:46.060 --> 00:13:51.400
A lot, 90% or more businesses go out of business within the first year.

00:13:51.400 --> 00:13:56.200
And so Microsoft for Startups set out to understand what are some of the challenges and what are

00:13:56.200 --> 00:13:59.040
some of the assets that they can bring to bear to help that.

00:13:59.040 --> 00:14:04.260
So Microsoft for Startups Founders Hub was created and it has a bunch of free resources

00:14:04.260 --> 00:14:09.420
or once you're accepted into the program, a lot of included resources that are just

00:14:09.420 --> 00:14:10.340
given to you.

00:14:10.340 --> 00:14:12.120
And they come in two categories.

00:14:12.120 --> 00:14:17.600
They come in a bunch of cloud credits so you can run your infrastructure and code for no

00:14:17.600 --> 00:14:20.440
money out of it, you know, probably for free for a couple of years.

00:14:20.440 --> 00:14:23.720
And they also come in the form of mentorship and connections and information.

00:14:23.720 --> 00:14:27.340
So you get a bunch of free GitHub credits.

00:14:27.340 --> 00:14:29.780
You get a bunch of Microsoft cloud credits.

00:14:29.780 --> 00:14:35.860
You get many from OpenAI, a global leader in AI research and development as well.

00:14:35.860 --> 00:14:38.580
And it's also not just about who you know.

00:14:38.820 --> 00:14:41.520
Like it is so often for companies out there on their own.

00:14:41.520 --> 00:14:45.640
You get access to their mentorship network and giving you access to a pool of hundreds

00:14:45.640 --> 00:14:51.040
of mentors across a range of disciplines like idea validation, fundraising, management, coaching,

00:14:51.040 --> 00:14:52.620
sales and marketing.

00:14:53.020 --> 00:14:57.460
That's definitely an important one as well as a bunch of specific technical aspects.

00:14:57.460 --> 00:15:01.380
So you can even book a one-on-one meeting with these mentors, many of whom are founders

00:15:01.380 --> 00:15:01.940
themselves.

00:15:01.940 --> 00:15:06.480
So make your idea a reality today with a critical support you'll get from Microsoft for Startups

00:15:06.480 --> 00:15:06.960
Founders Hub.

00:15:06.960 --> 00:15:10.920
Visit pythonbytes.fm/founders hub 2022.

00:15:10.920 --> 00:15:12.200
The link is in your show notes.

00:15:12.200 --> 00:15:14.080
Thank you, Microsoft, for supporting the show.

00:15:14.080 --> 00:15:14.520
Yeah.

00:15:14.520 --> 00:15:15.100
Thanks a lot.

00:15:15.100 --> 00:15:16.040
Mm hmm.

00:15:16.040 --> 00:15:18.640
Well, is it time to rewrite some code, Brian?

00:15:19.000 --> 00:15:21.180
Yeah, we, this was fun.

00:15:21.180 --> 00:15:26.480
So I ran across an article called Tools for Rewriting Python Code by Luke Plant.

00:15:26.480 --> 00:15:33.020
And it's also like, by the way, it's kind of a gorgeous blog formatting.

00:15:33.020 --> 00:15:34.380
It looks like a book almost.

00:15:34.380 --> 00:15:40.200
But anyway, beside the point, we've covered a lot of these things, these tools on the podcast,

00:15:40.200 --> 00:15:44.280
things like black and eyesort and linters and things like that.

00:15:44.360 --> 00:15:47.840
But it's kind of fun to see them a whole bunch of things listed together.

00:15:47.840 --> 00:15:53.900
So what by rewriting, we mean like hopefully tools that change your code, but hopefully

00:15:53.900 --> 00:15:54.460
for the better.

00:15:54.460 --> 00:16:00.160
So we've got things like formatting, formatting and style guides like black.

00:16:00.160 --> 00:16:07.260
And another popular one is that I don't know if we've covered is YAPF or yet another Python

00:16:07.260 --> 00:16:08.180
formatter, I think.

00:16:08.780 --> 00:16:13.900
And it's, it's similar ethos to black, but it's more customizable.

00:16:13.900 --> 00:16:16.420
So black, you can't, there's only a few options.

00:16:16.420 --> 00:16:23.580
But YAPF is often used by companies that have their own style guide to be able to customize

00:16:23.580 --> 00:16:23.980
it.

00:16:23.980 --> 00:16:25.720
So it, but it's a little more tweaky.

00:16:25.720 --> 00:16:30.540
So you have to kind of get in there and set it up so that it follows your style guide.

00:16:30.540 --> 00:16:31.480
So there's that.

00:16:31.480 --> 00:16:32.500
There's auto pepate.

00:16:32.500 --> 00:16:35.540
I sort, which I really like, which reorders Python imports.

00:16:36.280 --> 00:16:39.900
And so there's things like this table format.

00:16:39.900 --> 00:16:41.140
I have to play with this.

00:16:41.140 --> 00:16:43.720
Makes it easy to align columns in your Python source code.

00:16:43.720 --> 00:16:49.460
I kind of want to try this out because it's, that's something I don't like about black and

00:16:49.460 --> 00:16:52.320
other formatters sometimes is they muck up my tables.

00:16:52.320 --> 00:16:56.320
But anyway, there's upgrade things like by upgrade and Flint.

00:16:56.320 --> 00:16:58.060
You've mentioned Flint a couple of times.

00:16:58.060 --> 00:16:59.680
I'm a big fan of Flint.

00:17:00.200 --> 00:17:04.740
I run it on Python Bytes website code on talk Python on the train site.

00:17:04.740 --> 00:17:05.720
And it's, it's great.

00:17:05.720 --> 00:17:06.220
Yeah.

00:17:06.220 --> 00:17:10.100
And actually, I just got a pull request on one of my projects.

00:17:10.100 --> 00:17:12.580
And I'm pretty sure they just ran Flint over.

00:17:12.580 --> 00:17:16.240
They're just going through and finding some projects and doing running Flint and then doing

00:17:16.240 --> 00:17:17.120
PRs against them.

00:17:17.120 --> 00:17:21.360
And I was slightly kind of annoyed by that, but also like, I didn't have to do it.

00:17:21.360 --> 00:17:22.160
So yeah, thanks.

00:17:22.160 --> 00:17:23.520
I grabbed it.

00:17:23.520 --> 00:17:27.360
Type hints, which I'm, I didn't know about this stuff.

00:17:27.360 --> 00:17:29.600
So I'm, I'm kind of have to look at this.

00:17:29.600 --> 00:17:36.660
So things like pyannotate and monkey type to add, and there's a few others to add type

00:17:36.660 --> 00:17:37.460
hints to your.

00:17:37.460 --> 00:17:38.680
This is super interesting.

00:17:38.680 --> 00:17:42.440
Adding type hints based on instrumented test suite runs.

00:17:42.440 --> 00:17:47.060
So instrumented, I mean, it watches what functions get called and it says, Hey, this parameter

00:17:47.060 --> 00:17:47.840
was always a string.

00:17:47.840 --> 00:17:49.800
This one was always a user object.

00:17:49.800 --> 00:17:52.280
So here's your type parameter, colon string, colon user.

00:17:52.280 --> 00:17:53.020
That's awesome.

00:17:53.020 --> 00:17:53.420
Yeah.

00:17:53.420 --> 00:17:56.280
If you ever, and then I guess you know, I need to do this.

00:17:56.280 --> 00:17:57.140
Try it.

00:17:57.140 --> 00:17:57.960
Yeah.

00:17:57.960 --> 00:17:58.340
Yeah.

00:17:58.340 --> 00:17:59.720
So I'm going to try these.

00:17:59.720 --> 00:18:00.580
There's a few of them.

00:18:00.580 --> 00:18:02.980
So anyway, interesting.

00:18:02.980 --> 00:18:10.500
Some refactoring stuff is a, that I, it mostly talks about how a lot of these refactoring

00:18:10.500 --> 00:18:12.000
tools are built into IDEs.

00:18:12.120 --> 00:18:17.740
And I'll have to say when I'm, I usually use an IDE assisted thing like pylance or pyrate

00:18:17.740 --> 00:18:22.820
to, to, to do some refactoring, but, and I actually don't use them as much as I probably

00:18:22.820 --> 00:18:23.240
should.

00:18:23.240 --> 00:18:26.060
I usually do manual refactorings, but anyway.

00:18:26.280 --> 00:18:28.400
And then some standalone ones like rope and Jedi.

00:18:28.400 --> 00:18:36.060
And then, and then the other category includes things like shed, which, which I still have

00:18:36.060 --> 00:18:36.660
yet to try.

00:18:36.660 --> 00:18:37.540
I need to try that.

00:18:37.540 --> 00:18:39.300
That combines a whole bunch of the tools.

00:18:39.440 --> 00:18:43.980
But the part that one of the parts that I was really excited about is I didn't know

00:18:43.980 --> 00:18:45.440
about lib CST.

00:18:46.000 --> 00:18:49.160
So it talks about, this article talks about writing your own.

00:18:49.160 --> 00:18:55.980
There's a project called lib CST that apparently you can use to, to write your own.

00:18:55.980 --> 00:19:03.760
It does a syntax tree thing and, and you can hopefully write your own reformatter.

00:19:03.760 --> 00:19:05.080
So that might be fun.

00:19:05.080 --> 00:19:05.640
Okay.

00:19:05.640 --> 00:19:06.160
Nice.

00:19:06.160 --> 00:19:10.240
And one of the recommendations is the documentation is a little overwhelming for

00:19:10.240 --> 00:19:10.800
lib CST.

00:19:10.800 --> 00:19:18.940
So maybe use GitHub or libraries.io to find other projects that are using it and then see how

00:19:18.940 --> 00:19:19.640
they're using it.

00:19:19.640 --> 00:19:23.340
And I love that way to understand how to use something.

00:19:23.340 --> 00:19:23.780
Yeah.

00:19:23.780 --> 00:19:27.220
I, I need pretty much what this does, but I want to change these two things.

00:19:27.220 --> 00:19:28.580
Let me copy that and go.

00:19:28.580 --> 00:19:29.020
Yeah.

00:19:29.020 --> 00:19:29.420
Yeah.

00:19:29.420 --> 00:19:30.760
I guess that'd be another way to do it.

00:19:30.760 --> 00:19:35.340
It's like fork black, like the people that forked black and made blue, which gotta love

00:19:35.340 --> 00:19:35.660
blue.

00:19:35.920 --> 00:19:40.460
it wasn't listed here, but, Oh, one of the things I wanted to, to bring up while

00:19:40.460 --> 00:19:46.980
we're right here is, there's, what there's, upgrades like PI upgrade and Flint.

00:19:46.980 --> 00:19:54.600
there was one of them that does, set up PI upgrade, which upgrades set up.py to set up.cfg.

00:19:54.600 --> 00:20:01.460
I'd really like someone to figure out how to take all of your setup stuff and create a PI project.tomo

00:20:01.460 --> 00:20:01.740
file.

00:20:01.740 --> 00:20:02.380
Yes.

00:20:02.380 --> 00:20:03.680
that'd be nice.

00:20:03.680 --> 00:20:04.960
That would be excellent.

00:20:05.420 --> 00:20:06.380
Anyway, cool stuff.

00:20:06.380 --> 00:20:09.260
Set up, set up PI tom alert something.

00:20:09.260 --> 00:20:10.200
Yeah.

00:20:10.200 --> 00:20:11.600
Set up.tomo.py.

00:20:11.600 --> 00:20:12.320
Okay, cool.

00:20:12.320 --> 00:20:12.480
Yeah.

00:20:12.480 --> 00:20:18.660
This looks really, it's a really nice taxonomy of ways to clean up your code and improve your

00:20:18.660 --> 00:20:19.820
code, modernize your code.

00:20:19.820 --> 00:20:20.240
Yeah.

00:20:20.240 --> 00:20:20.620
Yeah.

00:20:20.620 --> 00:20:21.100
Very cool.

00:20:21.280 --> 00:20:21.660
All right.

00:20:21.660 --> 00:20:21.680
All right.

00:20:21.680 --> 00:20:24.020
Let's go talk some web for a minute.

00:20:24.020 --> 00:20:29.520
zero who I know listen to the show because sometimes drops into the live chat and gives

00:20:29.520 --> 00:20:35.980
some, advice or, or feedback created this thing called socketify.py.

00:20:36.120 --> 00:20:42.200
So socketify, I suppose the name is inspired by trying to do web sockets really well, but it's

00:20:42.200 --> 00:20:47.600
a little more general web framework and server as far as I can tell.

00:20:47.600 --> 00:20:54.460
So the tagline or whatever is bringing web sockets, HTTPS high performance servers for

00:20:54.460 --> 00:20:55.760
PI PI three.

00:20:55.760 --> 00:21:00.480
That's the JIT version of Python, Python three, as well as CPython.

00:21:00.560 --> 00:21:03.500
So what's the website say for us?

00:21:03.500 --> 00:21:05.060
So it's, it's pretty interesting.

00:21:05.060 --> 00:21:10.440
it's, if you look through here, you'll see, I guess we see some of the features

00:21:10.440 --> 00:21:14.840
that has, web socket support with pub sub fast HTTPS.

00:21:14.840 --> 00:21:18.180
I think that's probably the biggest thing that people care about.

00:21:18.180 --> 00:21:20.820
It runs on all the versions.

00:21:20.820 --> 00:21:27.220
So, you know, think kind of micro whiskey or uvicorn or something like that with a little

00:21:27.220 --> 00:21:30.440
bit of flask type of stuff on top of it.

00:21:30.440 --> 00:21:30.700
Okay.

00:21:30.700 --> 00:21:31.160
Okay.

00:21:31.160 --> 00:21:35.100
it has URL routing sync and async function.

00:21:35.100 --> 00:21:41.260
So it's, it's kind of a mix of like a web server that is also a web framework, fast TLS.

00:21:41.260 --> 00:21:43.140
what else we got here?

00:21:43.140 --> 00:21:49.380
This one's interesting for the async story is max back pressure, max payload and timeouts.

00:21:49.380 --> 00:21:54.360
One of the problems that can happen if you have async code is your async code will just accept

00:21:54.360 --> 00:21:59.400
the request and it'll forward it on through an, an await some database call or wait some

00:21:59.400 --> 00:22:01.300
microservice other API call.

00:22:01.300 --> 00:22:06.040
And it can just way pile up on your server and then like slam the database.

00:22:06.040 --> 00:22:10.140
And you might say, look, we only want to have, you know, 20 database queries in flight at a

00:22:10.140 --> 00:22:10.500
time.

00:22:10.500 --> 00:22:10.800
Right.

00:22:10.800 --> 00:22:15.780
So you can limit how much pressure the web server is putting onto the database and it'll

00:22:15.780 --> 00:22:16.820
kind of slow it down.

00:22:16.820 --> 00:22:21.640
And say, instead of accepting more requests or doing more of this work, just queue up the

00:22:21.640 --> 00:22:22.120
response.

00:22:22.120 --> 00:22:24.560
Like a, a non async web server would do.

00:22:24.560 --> 00:22:25.000
Okay.

00:22:25.000 --> 00:22:31.160
It has async support, ASGI web server support, with extensions for Falcon, which is a, one

00:22:31.160 --> 00:22:35.580
of the web frameworks as well as a WSGI WSGI one and some new features coming.

00:22:35.580 --> 00:22:40.560
But the real selling point, the reason people might care to check this out is the performance.

00:22:40.560 --> 00:22:42.560
So Falcon is pretty fast.

00:22:42.560 --> 00:22:44.220
UV corn is pretty fast.

00:22:44.220 --> 00:22:49.720
But if you look at socket, if I talked to zero in, they're using the tech and power

00:22:49.720 --> 00:22:50.300
benchmarks.

00:22:50.300 --> 00:22:51.720
I'll pull those up in a second.

00:22:51.720 --> 00:22:52.940
I'll actually pull them up now.

00:22:52.940 --> 00:22:55.620
So over here on mass announces, follow up.

00:22:55.620 --> 00:22:57.520
We break a new record for Python.

00:22:57.520 --> 00:23:03.880
No other web frameworks able to reach 6.2 million requests per second in the tech and power benchmarks.

00:23:03.880 --> 00:23:08.040
As puts Python in the same ballpark is going rust and C++.

00:23:08.040 --> 00:23:09.080
So we pull this up.

00:23:09.080 --> 00:23:09.700
What do we get?

00:23:09.700 --> 00:23:11.060
We get waiting.

00:23:11.060 --> 00:23:11.740
Ironic.

00:23:11.740 --> 00:23:13.240
Isn't it waiting on that?

00:23:13.240 --> 00:23:15.020
But look at this.

00:23:15.020 --> 00:23:20.640
You've got socketify at a 6.2 million requests per second on the tech and power benchmark.

00:23:20.640 --> 00:23:22.200
And then vibora and gibranto.

00:23:22.880 --> 00:23:28.500
And what's really interesting is like down here at 10, we have 360,000 for uvicorn.

00:23:28.500 --> 00:23:29.940
But follow me down here.

00:23:29.940 --> 00:23:31.140
There's a couple of interesting ones.

00:23:31.140 --> 00:23:31.560
Pyramid.

00:23:31.560 --> 00:23:32.320
Go pyramid.

00:23:32.320 --> 00:23:33.000
I love pyramid.

00:23:33.000 --> 00:23:33.700
Python bites.

00:23:33.700 --> 00:23:35.280
Talk Python or pyramid at the moment.

00:23:35.280 --> 00:23:36.440
At a quarter million.

00:23:36.440 --> 00:23:40.200
we make our way down, down, down, down, down, down, down, down, down.

00:23:40.200 --> 00:23:42.600
Async flask is at 57,000.

00:23:42.600 --> 00:23:45.920
straight flask is at 8,000.

00:23:45.920 --> 00:23:46.820
And let's see.

00:23:46.820 --> 00:23:48.420
We've got tornado at 40,000.

00:23:48.420 --> 00:23:50.820
Here's another one at 50,000 for tornado.

00:23:50.820 --> 00:23:52.160
Turbo gears at 70.

00:23:52.480 --> 00:23:53.400
Another one at 90.

00:23:53.400 --> 00:23:59.360
And there's some variations on like some of the internal, like is it PyPy versus CPython versus whatever.

00:23:59.360 --> 00:24:00.700
There's a bunch of variations in here.

00:24:00.700 --> 00:24:03.820
But there's, some surprises there, huh?

00:24:03.820 --> 00:24:04.360
Yeah.

00:24:04.360 --> 00:24:04.840
Huh.

00:24:04.840 --> 00:24:06.820
So here's the trade-off you got to make.

00:24:06.820 --> 00:24:07.760
You got to decide, right?

00:24:07.760 --> 00:24:09.300
Like this, this framework is cool.

00:24:09.300 --> 00:24:14.260
It's quite new with 230,000 stars, but it looks also quite promising.

00:24:14.680 --> 00:24:18.080
So for most people, you might not need something like this.

00:24:18.080 --> 00:24:25.260
it's kind of a low level, lower level programming, than say, your standard flask, right?

00:24:25.260 --> 00:24:31.540
And it doesn't have as many extensions, but it also, it has some, I mean, if, if you get that kind of performance and you need it, right?

00:24:31.540 --> 00:24:33.140
Here's a pretty cool option you could try out.

00:24:33.140 --> 00:24:35.720
So anyway, I encourage people to have a look at it.

00:24:35.720 --> 00:24:36.640
It looks pretty interesting.

00:24:36.640 --> 00:24:40.660
It's also quite new, you know, last, commit six, six days ago.

00:24:40.660 --> 00:24:42.200
So that's, that's encouraging, right?

00:24:42.440 --> 00:24:42.700
Yeah.

00:24:42.700 --> 00:24:54.700
And also one of the things I like about projects like this, that, that, you know, are, assuming they're doing something different to make things faster than, you know, let's think outside the box to do something a little bit different than everybody else is doing.

00:24:54.700 --> 00:24:56.500
other people pay attention.

00:24:56.500 --> 00:25:04.360
So the people that are there, you know, these other frameworks are paying attention to what's going on here and, and everybody learns from each other.

00:25:04.360 --> 00:25:15.520
So, having a speed up in one area, maybe, maybe we can have somebody that take this and, and make the interface as easy to work with as like FastAPI or last or something.

00:25:15.520 --> 00:25:16.680
And absolutely.

00:25:16.680 --> 00:25:22.280
And, or, get some of the learnings from here and build those into the other frameworks as well.

00:25:22.280 --> 00:25:33.920
So, yeah, maybe not, for everything you're doing, but if, if you have like some project, that's, that's some part or some part of your project that needs to be super high speed.

00:25:33.920 --> 00:25:35.760
this is a good thing to take a look at.

00:25:35.760 --> 00:25:36.540
Yeah, absolutely.

00:25:36.540 --> 00:25:37.040
I agree.

00:25:37.040 --> 00:25:42.560
So put it in the interesting category and, congrats zero on some pretty high end performance there.

00:25:42.560 --> 00:25:43.020
Yeah.

00:25:43.020 --> 00:25:43.560
Nice.

00:25:43.560 --> 00:25:46.360
Well, I think that's it for all of our items.

00:25:46.360 --> 00:25:47.460
Isn't it our main ones.

00:25:47.460 --> 00:25:48.220
Yeah.

00:25:48.220 --> 00:25:49.560
I got a couple extras.

00:25:49.560 --> 00:25:49.840
Yeah.

00:25:49.840 --> 00:25:50.440
Throw them in.

00:25:50.440 --> 00:25:51.760
yeah.

00:25:51.760 --> 00:25:56.260
So let's, I w I was, I was actually going to cover this, but I think it's a little early.

00:25:56.260 --> 00:26:00.320
So it's a project called mouse bender, from Brett Cannon.

00:26:00.320 --> 00:26:05.600
And, the ideas I think, is around producing and consuming.

00:26:05.600 --> 00:26:08.820
It says producing, consume dependency lock files for Python.

00:26:08.820 --> 00:26:16.060
And there's some, goals for the project, about, this project hopes to eventually

00:26:16.060 --> 00:26:22.300
provide a way to create reproducible installations for virtual and a virtual environment from a

00:26:22.300 --> 00:26:22.880
lock file.

00:26:22.980 --> 00:26:26.980
And so there's a lot of stuff going on here, but it's a little early in the project.

00:26:26.980 --> 00:26:32.000
So, I'm, I just want to point this out and I, if people really care about packaging,

00:26:32.000 --> 00:26:35.060
uh, maybe watch this, I'm going to be, I care about it.

00:26:35.060 --> 00:26:38.940
So I'm going to be watching this project and see if there's anywhere where I can contribute

00:26:38.940 --> 00:26:39.520
possibly.

00:26:39.520 --> 00:26:42.620
anyway, mouse bender, looks interesting.

00:26:42.620 --> 00:26:48.600
I don't think it's ready to use for anything yet, but, but yeah, it sounds, it looks a

00:26:48.600 --> 00:26:49.360
little interesting.

00:26:49.360 --> 00:26:50.100
Yeah, it does.

00:26:50.100 --> 00:26:50.460
Yeah.

00:26:50.460 --> 00:26:51.040
Nice work, right?

00:26:51.320 --> 00:26:54.380
and I think I got this from Brett too, but I can't remember.

00:26:54.380 --> 00:27:01.640
there's a, there's, there's a page called, at dev guide.python.org versions.

00:27:01.640 --> 00:27:07.880
We've got, status of Python versions and a graphic for all the release cycles.

00:27:07.880 --> 00:27:08.680
That's so cool.

00:27:08.680 --> 00:27:10.140
And we'll need to see this graphic.

00:27:10.140 --> 00:27:10.680
This is cool.

00:27:10.680 --> 00:27:11.240
Yeah.

00:27:11.240 --> 00:27:16.960
And, it's neat because it shows you all the old end of life ones, and how long

00:27:16.960 --> 00:27:21.280
they've been, you know, end of life for 2.6 was back.

00:27:21.280 --> 00:27:22.400
In 2013.

00:27:22.400 --> 00:27:24.360
So what are you guys doing?

00:27:24.360 --> 00:27:25.180
If you're still using that?

00:27:25.180 --> 00:27:28.680
They should put like a skull and crossbones on the 2.7 and 2.6 or something.

00:27:28.680 --> 00:27:31.780
but so you've got a whole bunch in end of life.

00:27:31.780 --> 00:27:36.080
You got some in the security zone, which means if there's security fixes, they'll add those.

00:27:36.340 --> 00:27:42.160
and then, but then they get like it, you only got like six months left of, 3.7.

00:27:42.160 --> 00:27:47.980
So if you're still using 3.7, it might be a good time to upgrade, but shows all the, you

00:27:47.980 --> 00:27:50.960
know, the only one that with feature is a 3.12 right now.

00:27:50.960 --> 00:27:52.480
Cause that's the one that's being worked on.

00:27:52.480 --> 00:27:54.740
and, it's kind of a neat visual.

00:27:54.740 --> 00:27:56.760
this page is pretty simple too.

00:27:56.760 --> 00:28:02.420
And, and at the bottom you've got more specifics of when things are end of life, but, at

00:28:02.420 --> 00:28:04.660
the bottom, the description of what all these mean.

00:28:04.660 --> 00:28:08.120
So what does feature versus, end of life mean things?

00:28:08.120 --> 00:28:09.480
Good thing.

00:28:09.480 --> 00:28:09.920
Neat.

00:28:09.920 --> 00:28:10.640
Yeah, that's cool.

00:28:10.640 --> 00:28:13.160
I switched our website to run 3.11 by the way.

00:28:13.160 --> 00:28:13.860
Nice.

00:28:14.120 --> 00:28:14.280
Yeah.

00:28:14.280 --> 00:28:16.260
Like a week ago and it's still running.

00:28:16.260 --> 00:28:16.760
So that's good.

00:28:16.760 --> 00:28:17.220
Yeah.

00:28:17.220 --> 00:28:24.440
I switched some of our test code at work to, to flip to 3.11 and, and, one of my

00:28:24.440 --> 00:28:26.400
team members says, Oh, I wonder if we're ready.

00:28:26.400 --> 00:28:27.900
And I'm like, Oh yeah, we've already switched.

00:28:27.900 --> 00:28:30.660
So, yeah, we better be.

00:28:30.660 --> 00:28:31.800
It's been doing it for a while.

00:28:31.800 --> 00:28:34.200
So, do you have any extras?

00:28:34.200 --> 00:28:35.480
of course.

00:28:35.480 --> 00:28:41.000
So I thought this would be the only thing that I would refer back to my website for, but then

00:28:41.000 --> 00:28:43.860
that writeup I did on Kagi, I'm going to try to do a video.

00:28:43.860 --> 00:28:45.880
version of that Kagi live with it thing.

00:28:45.880 --> 00:28:49.920
but I ended up realizing that that was going to take way more time than I have this

00:28:49.920 --> 00:28:50.080
week.

00:28:50.080 --> 00:28:50.800
So I just wrote it up.

00:28:50.800 --> 00:28:55.860
But another one I wrote up, people can just check this out as, sometimes you should

00:28:55.860 --> 00:28:56.520
build it yourself.

00:28:56.520 --> 00:29:00.380
and embracing your not, you're not built here.

00:29:00.380 --> 00:29:01.460
Maybe we should just build it.

00:29:01.460 --> 00:29:02.860
I know we could buy it, but let's build it.

00:29:02.860 --> 00:29:06.840
sort of talking about some of the things, I did at talk Python as well as Python bytes

00:29:06.840 --> 00:29:13.480
and like how, sometimes you sort of get into this cascade of things where

00:29:13.600 --> 00:29:15.620
new possibilities arise, right?

00:29:15.620 --> 00:29:18.560
So for example, one of the parts that says integrations abound.

00:29:18.560 --> 00:29:20.540
So for our live stream, right?

00:29:20.540 --> 00:29:23.720
We have our live stream here on YouTube at the moment.

00:29:23.720 --> 00:29:29.900
And then it becomes the podcast says, because the way we put all this stuff together is not

00:29:29.900 --> 00:29:33.520
only do we do our live stream, but I push a button on the stream deck that announces this

00:29:33.520 --> 00:29:37.360
on Twitter and also that on Mastodon, Mastodon puts the website into live stream mode.

00:29:37.360 --> 00:29:43.280
But then that platform will, you know, Python bytes will take the YouTube live stream,

00:29:43.280 --> 00:29:48.960
grab its carefully crafted thumbnail, pull that down to actually become the social share

00:29:48.960 --> 00:29:49.280
image.

00:29:49.280 --> 00:29:54.100
So if somebody shares the episode on Mastodon or Twitter, all the way back to the thing we

00:29:54.100 --> 00:29:58.500
did with the live stream is actually already producing the image.

00:29:58.500 --> 00:30:02.480
And so it just talks about like, you know, sometimes, because I always have had this

00:30:02.480 --> 00:30:04.260
tendency, like, well, don't build it yourself.

00:30:04.260 --> 00:30:06.560
Find something that works, find something that's out there.

00:30:06.560 --> 00:30:08.700
And you have to break down and build it yourself.

00:30:08.700 --> 00:30:09.240
And like, you know what?

00:30:09.240 --> 00:30:12.740
There's actually some really cool stuff that we've been able to accomplish because we built

00:30:12.740 --> 00:30:13.020
it ourselves.

00:30:13.020 --> 00:30:15.280
So here's a kind of a, an essay on that.

00:30:15.280 --> 00:30:15.740
I would say.

00:30:15.740 --> 00:30:16.220
Nice.

00:30:16.220 --> 00:30:16.620
Yeah.

00:30:16.620 --> 00:30:17.600
So people can check that out.

00:30:17.800 --> 00:30:20.040
Also back to the live with it side of things.

00:30:20.040 --> 00:30:28.440
I'm, I'm trying to support smaller companies and be less just integrated into like one big

00:30:28.440 --> 00:30:29.020
tech giant.

00:30:29.020 --> 00:30:35.020
So for my personal email, I've got a domain, mkennedy.tech.

00:30:35.020 --> 00:30:37.880
It's what I went with, which redirects to my other one for my blog.

00:30:37.880 --> 00:30:45.120
But, then that was hosted on Gmail on like a paid $6 a month, email docs, whatever.

00:30:45.300 --> 00:30:49.600
And I just got really tired of trying to juggle two Gmail accounts, two Google drive accounts,

00:30:49.600 --> 00:30:52.080
two Google calendars, you know, all these things.

00:30:52.080 --> 00:30:53.400
I'm like, why am I doing this?

00:30:53.400 --> 00:30:57.860
Why don't I get a dedicated cool place that is like even a little more on the privacy side

00:30:57.860 --> 00:30:58.360
as well.

00:30:58.360 --> 00:31:02.400
So I'm trying to try and go all in on, Proton.

00:31:02.400 --> 00:31:03.260
Do you have a Proton account?

00:31:03.260 --> 00:31:03.820
Use this.

00:31:03.820 --> 00:31:04.860
I don't.

00:31:04.860 --> 00:31:06.820
Well, for a long time, it was just email.

00:31:06.820 --> 00:31:10.600
And like, you can have like a Proton.me or a Proton.com or whatever.

00:31:10.880 --> 00:31:19.420
But I realized recently that they have other, features where, if you pay $7 a month,

00:31:19.420 --> 00:31:23.040
you get access to all of their things like their calendar and drive and VPN, but that doesn't

00:31:23.040 --> 00:31:23.520
matter to me.

00:31:23.520 --> 00:31:30.560
But you get three custom domains and 15 email addresses plus catch all email addresses and,

00:31:30.560 --> 00:31:32.360
uh, hide my email aliases.

00:31:32.660 --> 00:31:38.460
So I can have all of my different domains all have email addresses and that all basically

00:31:38.460 --> 00:31:40.920
resolve back to my personal email.

00:31:40.920 --> 00:31:41.980
Ooh, cool.

00:31:41.980 --> 00:31:42.480
Isn't that cool?

00:31:42.480 --> 00:31:46.460
And so I was at Google and I just changed the MX records and now I'm at Proton.

00:31:46.460 --> 00:31:47.800
And if I like it, I'll stay here.

00:31:47.800 --> 00:31:50.400
If not, I'll change my MX records again and I'll be somewhere else.

00:31:50.400 --> 00:31:52.820
But, you know, kind of try to take control of the email.

00:31:52.820 --> 00:31:57.200
So it's my thing, not something at gmail.com, no matter what you think about it.

00:31:57.200 --> 00:31:57.420
Right.

00:31:57.420 --> 00:31:57.840
Yeah.

00:31:58.080 --> 00:31:59.820
So anyway, people can check that out.

00:31:59.820 --> 00:32:03.940
I just want to mostly point out Proton looks like it has more to offer than it used to.

00:32:03.940 --> 00:32:05.400
And how about like support?

00:32:05.400 --> 00:32:10.620
Can you just use your, I mean, to the, like, use your normal email client to, to access

00:32:10.620 --> 00:32:11.400
all this stuff or?

00:32:11.400 --> 00:32:16.700
so Proton is like end to end encryption, which is a little tricky, but they have, what

00:32:16.700 --> 00:32:17.000
is it?

00:32:17.000 --> 00:32:19.600
It's called, Proton Bridge.

00:32:19.600 --> 00:32:22.140
So, let's go to the mail thing.

00:32:22.140 --> 00:32:23.500
So this is it.

00:32:23.500 --> 00:32:27.660
So what you can do is you can run this thing on Mac or Windows or Linux.

00:32:27.660 --> 00:32:32.820
And it's like a little, you connect to basically local host for your email client, for your

00:32:32.820 --> 00:32:33.400
email server.

00:32:33.400 --> 00:32:36.920
And it talks to Proton with the end to end encryption.

00:32:36.920 --> 00:32:40.340
And then it just does IMAP the last few, I don't know.

00:32:40.340 --> 00:32:42.760
It's not even the, not even the last step of the network, right?

00:32:42.760 --> 00:32:43.800
It's just, it's a loop back.

00:32:43.800 --> 00:32:47.200
And so, yes, you can connect your, your usual things to with that.

00:32:47.200 --> 00:32:47.600
Okay.

00:32:47.600 --> 00:32:48.020
Cool.

00:32:48.020 --> 00:32:48.180
Yeah.

00:32:48.180 --> 00:32:48.700
All right.

00:32:48.700 --> 00:32:49.820
another quick one.

00:32:49.820 --> 00:32:55.960
There was a court in Germany that, stand kind of the same theme that decided that,

00:32:55.960 --> 00:32:57.980
Google fonts usage of Google fonts.

00:32:57.980 --> 00:33:02.980
Like if you look at a lot of web pages, they'll internally have slash slash fonts.google.com.

00:33:02.980 --> 00:33:05.240
Some like open, whatever, right?

00:33:05.240 --> 00:33:10.400
Some, some font name and like the weights of it that exchanges a bunch of cookies and tells

00:33:10.400 --> 00:33:11.400
Google about the visitors.

00:33:11.400 --> 00:33:12.200
Yay.

00:33:12.420 --> 00:33:14.320
And so, of course it does.

00:33:14.320 --> 00:33:18.220
Cause even the YouTube thumbnail picture does, why wouldn't it?

00:33:18.220 --> 00:33:22.200
So, bunny, bunny.net, which is the awesome CD.

00:33:22.200 --> 00:33:26.280
And that we were, I talked about a couple of times ago, a couple episodes ago, they released

00:33:26.280 --> 00:33:27.960
this thing called bunny fonts.

00:33:27.960 --> 00:33:30.060
And so bunny fonts is epic.

00:33:30.060 --> 00:33:35.020
They even talk about like this, this court ruling and a GDPR and stuff, but the idea is

00:33:35.020 --> 00:33:42.100
it's a, the bunny fonts is a drop-in placement for Google, Google fonts for

00:33:42.100 --> 00:33:42.600
Google fonts.

00:33:42.600 --> 00:33:42.900
Yeah.

00:33:42.900 --> 00:33:47.680
So whatever URL you would put into your website to get the fonts from Google, you just change

00:33:47.680 --> 00:33:49.340
the word Google to bunny.

00:33:49.340 --> 00:33:50.180
Wow.

00:33:50.180 --> 00:33:51.500
That's really a drop in.

00:33:51.500 --> 00:33:51.880
Yeah.

00:33:51.880 --> 00:33:52.160
Yeah.

00:33:52.160 --> 00:33:57.780
And it's the same API as just, you change the word and you get like super fast CDN backed

00:33:57.780 --> 00:34:01.180
zero privacy leaking fonts.

00:34:01.180 --> 00:34:03.020
So you can just, it's super easy to adopt.

00:34:03.020 --> 00:34:03.580
Right.

00:34:03.580 --> 00:34:04.080
It's pretty cool.

00:34:04.080 --> 00:34:06.500
So, not zero privacy, hyper.

00:34:06.500 --> 00:34:06.780
Yeah.

00:34:06.780 --> 00:34:08.780
Hyper zero privacy leaking.

00:34:08.780 --> 00:34:09.240
Yeah.

00:34:09.240 --> 00:34:11.540
Zero privacy trade offs or whatever.

00:34:11.780 --> 00:34:12.220
Where's there?

00:34:12.220 --> 00:34:13.000
here we go.

00:34:13.000 --> 00:34:13.700
Here's their fonts.

00:34:13.700 --> 00:34:15.520
But anyway, that's cool.

00:34:15.520 --> 00:34:16.380
Isn't that cool?

00:34:16.380 --> 00:34:16.840
Yeah.

00:34:16.840 --> 00:34:17.300
Yeah.

00:34:17.300 --> 00:34:19.200
So, super easy.

00:34:19.200 --> 00:34:19.480
Bunny.

00:34:19.480 --> 00:34:22.380
I mean, you don't even have to have an account and it's a cute bunny.

00:34:22.380 --> 00:34:22.940
I mean, they're bunny.

00:34:22.940 --> 00:34:25.660
They're, they're, iconography is really, really good.

00:34:25.740 --> 00:34:28.240
So there's a place where you go pick the font.

00:34:28.240 --> 00:34:33.280
So you come over here and say, I'm interested in a Homa or I don't know, whatever.

00:34:33.280 --> 00:34:34.380
I don't even know a font.

00:34:34.380 --> 00:34:35.560
Let's say you're interested in this one.

00:34:35.560 --> 00:34:37.380
Or you could just like say, I want to add it.

00:34:37.380 --> 00:34:42.200
And it gives you like the little, the little URL, which is just font.bunny instead of,

00:34:42.200 --> 00:34:44.440
uh, instead of the Google one.

00:34:44.440 --> 00:34:45.480
So yeah, it's pretty cool.

00:34:45.480 --> 00:34:46.880
Anyway, that's all I got for my extras.

00:34:46.880 --> 00:34:49.920
Well, that's a great, yeah, good stuff.

00:34:49.980 --> 00:34:50.700
All right.

00:34:50.700 --> 00:34:51.660
I have a joke for you.

00:34:51.660 --> 00:34:52.660
Oh, let's do a joke.

00:34:52.660 --> 00:34:52.860
Yeah.

00:34:52.860 --> 00:34:53.260
Are you ready?

00:34:53.260 --> 00:34:53.780
Yeah.

00:34:53.780 --> 00:34:56.240
You've heard of ChatGPT.

00:34:56.240 --> 00:34:57.060
I'm sure.

00:34:57.060 --> 00:34:58.960
I'm trying to not hear about it.

00:34:58.960 --> 00:35:04.160
I know I've, I logged out so I could, specifically, show the homepage.

00:35:04.160 --> 00:35:05.260
So I got to get back.

00:35:05.260 --> 00:35:06.260
Anyway, ChatGPT.

00:35:06.260 --> 00:35:07.960
I'm trying to not hear about it as well.

00:35:07.960 --> 00:35:10.020
My brother actually shared this with me.

00:35:10.020 --> 00:35:14.700
Him and his son, my nephew were playing with it, doing some coding stuff.

00:35:14.700 --> 00:35:17.000
So how they ran across this example.

00:35:17.400 --> 00:35:20.580
So this is a tweet from someone else that he shared with me.

00:35:20.580 --> 00:35:22.200
Riley, the tweet is not my brother.

00:35:22.200 --> 00:35:29.200
it says open AI is new ChatGPT explains the worst case timing complexity of the bubble

00:35:29.200 --> 00:35:29.820
sort algorithm.

00:35:29.820 --> 00:35:30.100
Okay.

00:35:30.100 --> 00:35:35.420
So what you can do is you can say, give me a step-by-step analysis of the worst case time

00:35:35.420 --> 00:35:38.860
complexity of the bubble sort algorithm with Python code examples.

00:35:38.860 --> 00:35:39.380
Right?

00:35:39.380 --> 00:35:41.200
So that, that's, that's not a joke, right?

00:35:41.200 --> 00:35:41.680
That's helpful.

00:35:41.680 --> 00:35:46.600
It could tell you here's the situation and it could like show you with Python code examples,

00:35:46.600 --> 00:35:48.480
but the next part makes it awesome.

00:35:48.480 --> 00:35:53.800
Give me the explanation with Python code examples, but write every sentence in the speaking style

00:35:53.800 --> 00:35:58.420
of a fast talking wise guy from a 1940s gangster movie.

00:35:58.420 --> 00:35:59.500
This is good.

00:35:59.500 --> 00:35:59.860
Are you ready?

00:35:59.860 --> 00:36:00.360
Yeah.

00:36:00.360 --> 00:36:00.960
Okay.

00:36:00.960 --> 00:36:01.780
All right, pal.

00:36:01.780 --> 00:36:02.260
Listen up.

00:36:02.260 --> 00:36:03.340
The bubble sort algorithm.

00:36:03.340 --> 00:36:06.900
She's a real simple one, but the worst case time complexity, that's a whole different

00:36:06.900 --> 00:36:07.340
story.

00:36:07.340 --> 00:36:10.860
You see, in the worst case, every element in the list got to be swapped.

00:36:10.860 --> 00:36:14.400
So the time complexity is going to be proportional to the square, the length of the list.

00:36:14.400 --> 00:36:14.920
Get it?

00:36:14.920 --> 00:36:16.660
Here's the Python code to help you out.

00:36:16.660 --> 00:36:17.900
See if you follow along.

00:36:17.900 --> 00:36:20.660
There's some Python code with comments, by the way.

00:36:20.660 --> 00:36:25.580
See, in the worst case, the while loop is going to keep looping until there ain't no more

00:36:25.580 --> 00:36:26.540
swaps to be made.

00:36:26.540 --> 00:36:29.160
The inner loop, it's going to go through every element in the list.

00:36:29.160 --> 00:36:31.900
So the time complexity is going to be proportional to the square of the list.

00:36:31.900 --> 00:36:32.400
Get it?

00:36:32.400 --> 00:36:33.360
What do you think?

00:36:33.360 --> 00:36:35.040
This is good.

00:36:35.040 --> 00:36:36.060
It's pretty fun, right?

00:36:36.060 --> 00:36:36.620
Yeah.

00:36:36.620 --> 00:36:37.140
So.

00:36:37.140 --> 00:36:37.680
All right.

00:36:37.680 --> 00:36:39.000
Anyway, well, I don't know.

00:36:39.000 --> 00:36:41.920
The chat GP stuff is interesting.

00:36:41.920 --> 00:36:44.600
It's kind of scary, but it's also funny.

00:36:44.600 --> 00:36:46.200
But does the algorithm work?

00:36:46.200 --> 00:36:49.360
I haven't read it, but I think so.

00:36:49.360 --> 00:36:52.620
It looks like the right kind of, at least first glance, it looks right.

00:36:53.540 --> 00:36:55.120
I don't know.

00:36:55.120 --> 00:36:58.680
I could always go and copy the code and try to run it.

00:36:58.680 --> 00:36:59.400
What do you think?

00:36:59.400 --> 00:37:02.360
It's like too much work.

00:37:02.360 --> 00:37:02.880
No.

00:37:02.880 --> 00:37:03.940
Oh, the indent.

00:37:03.940 --> 00:37:05.060
The indent is off.

00:37:05.060 --> 00:37:06.260
That's.

00:37:06.260 --> 00:37:06.620
Yeah.

00:37:06.620 --> 00:37:08.120
You know what?

00:37:08.120 --> 00:37:10.260
I'll run it and report for next time.

00:37:10.260 --> 00:37:12.860
See if the wise guy's code is actually any good.

00:37:12.860 --> 00:37:13.360
Yeah.

00:37:13.360 --> 00:37:16.280
I'm always up for volunteering you for work.

00:37:16.280 --> 00:37:18.820
Nice.

00:37:18.820 --> 00:37:19.500
Anyway.

00:37:19.500 --> 00:37:20.080
Thanks.

00:37:20.080 --> 00:37:20.880
Yeah.

00:37:20.880 --> 00:37:21.340
That was funny.

00:37:21.340 --> 00:37:21.980
Yeah, it was.

00:37:21.980 --> 00:37:22.300
All right.

00:37:22.300 --> 00:37:22.860
See you later.

