WEBVTT

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

00:00:05.280 --> 00:00:11.040
This is episode 376, recorded March 26, 2024.

00:00:11.040 --> 00:00:12.160
I'm Michael Kennedy.

00:00:12.160 --> 00:00:13.600
And I am Brian Okken.

00:00:13.600 --> 00:00:18.400
And this episode is brought to you all by Scout APM.

00:00:18.400 --> 00:00:19.720
I'll tell you more about them later.

00:00:19.720 --> 00:00:20.840
We appreciate the support.

00:00:20.840 --> 00:00:27.260
Connect with all of us, Brian, me, and the podcast over on fastidon.org,

00:00:27.260 --> 00:00:28.600
or Mastodon more broadly.

00:00:29.000 --> 00:00:31.100
Links at the top of your podcast player show notes.

00:00:31.100 --> 00:00:33.000
Join us live if you like.

00:00:33.000 --> 00:00:37.580
We typically do this on Tuesdays at 10 a.m. Pacific time.

00:00:37.580 --> 00:00:38.880
Why is time so hard, Brian?

00:00:38.880 --> 00:00:39.880
Why is it so hard?

00:00:39.880 --> 00:00:43.980
Just go to Pythonbytes.fm slash live to be part of the audience.

00:00:43.980 --> 00:00:45.040
See the older shows.

00:00:45.040 --> 00:00:46.720
All the older ones are there.

00:00:46.720 --> 00:00:49.120
And they are typically the same thing we ship.

00:00:49.120 --> 00:00:54.140
We don't really overly edit it or anything other than we do clean them up, tighten them up a little.

00:00:54.140 --> 00:00:58.800
So if you like the ones with bloopers included, you can check that out there.

00:00:58.800 --> 00:01:05.040
I wonder if I was a search engine and I was trying to find bloopers, would there be a way to not let me find them?

00:01:05.040 --> 00:01:05.760
What do you think, Brian?

00:01:05.760 --> 00:01:07.180
Well, I hope.

00:01:07.180 --> 00:01:08.260
We're trying.

00:01:09.440 --> 00:01:11.480
Actually, yeah, I was thinking about this.

00:01:11.480 --> 00:01:17.320
I kind of think that the AI stuff should have the best content out there to read from.

00:01:17.320 --> 00:01:19.620
But companies are making money from that.

00:01:19.620 --> 00:01:22.520
And I'm not making my blog posts.

00:01:22.520 --> 00:01:23.960
I'm not getting any money from that.

00:01:24.440 --> 00:01:27.400
If I care about that, how do I stop them?

00:01:27.400 --> 00:01:30.740
So Jeff Triplett is thinking about that, too.

00:01:30.740 --> 00:01:34.540
So he wrote up a blog post called onrobots.txt.

00:01:34.540 --> 00:01:40.640
So the idea was robots.txt is to stop search engines and stuff like that.

00:01:40.640 --> 00:01:43.040
But I don't actually want to stop search engines.

00:01:43.040 --> 00:01:44.880
I want search engines to find my stuff.

00:01:44.980 --> 00:01:47.100
I just don't want the AI stuff.

00:01:47.100 --> 00:01:50.220
So Jeff's been thinking about this.

00:01:50.220 --> 00:01:51.720
I've been thinking about it also.

00:01:51.720 --> 00:01:54.360
So he collected a few links around this.

00:01:54.360 --> 00:01:59.220
And one of the things here is I spent a lot of time thinking about robots.txt.

00:01:59.620 --> 00:02:05.220
In theory, it helps control what search engines and AI scrapers are allowed to visit.

00:02:05.220 --> 00:02:12.500
But I need more confidence in its effectiveness in this post-AI apocalyptic world.

00:02:12.500 --> 00:02:13.120
I love that.

00:02:13.120 --> 00:02:18.900
Anyway, so there's a bunch of these cropping up.

00:02:18.900 --> 00:02:21.600
There's a lot of new stuff going on.

00:02:21.600 --> 00:02:24.860
So Jeff has decided to use Django robots.

00:02:24.860 --> 00:02:27.180
But let's look at some of the links that he included.

00:02:27.180 --> 00:02:28.100
So thanks, Jeff.

00:02:28.760 --> 00:02:35.160
So there's block the bots that feed AI models by scraping your website.

00:02:35.160 --> 00:02:41.960
So there's an article by Neil Clark that has an example robots.txt.

00:02:41.960 --> 00:02:48.120
And the idea is almost all of these different AI bots, you've got to block them individually.

00:02:48.120 --> 00:02:52.180
So you've got to set up these different rules there.

00:02:52.180 --> 00:02:54.780
So it'd be good to keep track of some of these places.

00:02:54.780 --> 00:02:56.980
Hopefully he keeps this up.

00:02:57.160 --> 00:03:03.360
But there's also an article, go ahead and block rub callers, discussing why you might.

00:03:03.880 --> 00:03:05.620
And then a dark visitors.

00:03:05.620 --> 00:03:11.520
I think this is going to be one to keep track of, that it might hopefully they keep it up.

00:03:11.520 --> 00:03:16.240
But there's a big list of known AI bots to block.

00:03:16.240 --> 00:03:20.300
And so maybe keeping up on this might be a good idea if you care about it.

00:03:20.300 --> 00:03:25.960
Jeff's note was that he added it to the website.

00:03:25.960 --> 00:03:26.420
Django.

00:03:26.640 --> 00:03:31.300
There's a couple different articles about adding robots.txt to a Django website.

00:03:31.300 --> 00:03:38.200
There's one by Will Vincent and one by Adam Johnson, both biggies in the Django community.

00:03:38.600 --> 00:03:39.800
So we'll link to those.

00:03:39.800 --> 00:03:50.120
And like I said at the beginning, Jeff said he went with a plugin called Django robots to populate that and control it through his admin interface.

00:03:50.120 --> 00:03:51.640
So there's a lot there.

00:03:51.640 --> 00:03:56.860
One of the things not included is my blog is run by Hugo or run with Hugo.

00:03:57.200 --> 00:04:04.780
Anyway, so I'm going to also link to a how to add robots.txt to your Hugo site if you want to do that.

00:04:04.780 --> 00:04:05.380
Oh, nice.

00:04:05.380 --> 00:04:08.500
I don't think I've messed with my Hugo robots.txt.

00:04:08.500 --> 00:04:10.620
I have not yet, but I think I might.

00:04:10.620 --> 00:04:14.080
And I guess I wanted to ask some questions before we moved on.

00:04:14.080 --> 00:04:20.520
One is as a community, I think that there should be an easier way to say don't scrape this if you're an AI.

00:04:20.520 --> 00:04:23.860
Other than listing each one, we should have a standard for that.

00:04:23.860 --> 00:04:25.200
But what do you think of this?

00:04:25.200 --> 00:04:29.220
Should, as a content creator, should I care about that?

00:04:29.220 --> 00:04:30.580
Should I mean, would you?

00:04:30.580 --> 00:04:33.360
You know, it's such an interesting question.

00:04:33.360 --> 00:04:35.880
I think it's pretty fraught, right?

00:04:35.880 --> 00:04:39.360
On one hand, I don't want to feed the AIs either, necessarily.

00:04:39.360 --> 00:04:45.480
I think that it's super awesome that you could go to ChatGPT and say things like, you know, what does Python bias?

00:04:45.480 --> 00:04:47.340
What does Talk Python think about this?

00:04:47.340 --> 00:04:52.820
Or, you know, write me a summary of this in the style of a Talk Python interview.

00:04:52.820 --> 00:04:54.720
Like, is that harming me?

00:04:54.940 --> 00:04:56.040
No, probably not.

00:04:56.040 --> 00:05:00.820
Is it creating some cool aspect, like Halo, of the content creation side?

00:05:00.820 --> 00:05:04.780
The fact that ChatGPT knows about those kind of things, that's kind of cool.

00:05:04.780 --> 00:05:06.300
Kind of on the plus side.

00:05:06.300 --> 00:05:07.400
I don't know.

00:05:07.400 --> 00:05:08.240
I mean, we have...

00:05:08.240 --> 00:05:12.100
For you, a lot of your content is, I mean, your open content is open.

00:05:12.100 --> 00:05:16.460
But a lot of your content's behind a paywall with Talk Python training.

00:05:16.780 --> 00:05:20.880
If somebody were to throw all of those trainings into an AI model...

00:05:20.880 --> 00:05:22.680
Yeah, that would be different, right?

00:05:22.680 --> 00:05:23.140
Yeah.

00:05:23.520 --> 00:05:24.120
So, yeah.

00:05:24.120 --> 00:05:31.020
I mean, I certainly have a no robot, no index settings on certain aspects of the site there.

00:05:31.020 --> 00:05:33.280
It's also behind accounts and logins.

00:05:33.280 --> 00:05:39.120
So, somebody would have to be kind of maliciously doing that, which I imagine that's probably already been done.

00:05:39.340 --> 00:05:40.140
But it is...

00:05:40.140 --> 00:05:42.080
Yeah, that's a different kind of deal.

00:05:42.080 --> 00:05:42.540
You know what I mean?

00:05:42.540 --> 00:05:55.480
Maybe the biggest case of this is the link tax that Australia, Spain, and Canada all tried to put onto the search engines and Facebook and social platforms.

00:05:55.880 --> 00:05:56.080
Right?

00:05:56.080 --> 00:05:58.540
Like, I'm getting this right.

00:05:58.540 --> 00:05:59.340
I think it's Canada.

00:05:59.340 --> 00:06:01.180
They all blur together.

00:06:01.180 --> 00:06:04.180
But, you know, Canada is the most recent one of these, for sure.

00:06:04.180 --> 00:06:11.580
And they passed a law saying, well, if one of these big American companies wants to send traffic...

00:06:11.580 --> 00:06:12.400
We talked about this.

00:06:12.400 --> 00:06:17.080
Want to send traffic to one of our news sites, then they have to pay them for the ride of doing that.

00:06:17.080 --> 00:06:18.800
Maybe it is.

00:06:18.800 --> 00:06:20.160
Well, it's kind of like Google News.

00:06:20.160 --> 00:06:20.740
Maybe it's Australia.

00:06:20.740 --> 00:06:22.320
I think it's Australia.

00:06:22.320 --> 00:06:23.820
I think it was Facebook.

00:06:24.200 --> 00:06:26.620
I'm sorry, folks, if I'm like crossing over companies and stuff.

00:06:26.620 --> 00:06:33.700
But I think Facebook just declined to renew their agreements with the Australian newspapers and saying, you know what?

00:06:33.700 --> 00:06:37.200
We're not going to send any more traffic and we're not going to allow any links to you whatsoever.

00:06:37.200 --> 00:06:40.600
And that's going to be a negative for those news companies as well, right?

00:06:40.600 --> 00:06:46.120
The fact that, I mean, they kind of had this shady deal where Facebook would summarize a little bit.

00:06:46.120 --> 00:06:48.580
So, like, maybe you don't need to click the link to go to it.

00:06:48.580 --> 00:06:50.260
But now they're going to have no links whatsoever.

00:06:50.260 --> 00:06:52.740
And they're not going to be in a better place because of that either.

00:06:52.920 --> 00:06:58.020
So, it's really this, you know, damned if you do, damned if you don't type of thing is what I'm trying to get at.

00:06:58.020 --> 00:07:03.680
And, like, the biggest example that play now is with these news organizations and the social media and search engines.

00:07:03.680 --> 00:07:04.260
Yeah.

00:07:04.260 --> 00:07:04.800
Yeah.

00:07:04.800 --> 00:07:09.100
Except for, I don't know, the AIs aren't, I don't think they're linking back to the original content.

00:07:09.100 --> 00:07:15.560
No, you got a good point there that at least search engines and stuff and social media, they credit you.

00:07:15.560 --> 00:07:17.300
They send traffic to you.

00:07:17.300 --> 00:07:21.880
Whereas, we're going to have to reckon with the AI stuff in some way because it just says, here's the answer.

00:07:21.880 --> 00:07:22.940
And how did I get it?

00:07:22.940 --> 00:07:23.320
I don't know.

00:07:23.320 --> 00:07:25.760
Maybe that's your answer, repurposed.

00:07:25.760 --> 00:07:26.300
Yeah.

00:07:26.360 --> 00:07:27.960
But you get zero credit for that.

00:07:27.960 --> 00:07:28.360
Right.

00:07:28.360 --> 00:07:28.840
Anyway.

00:07:28.840 --> 00:07:29.320
That's a good point.

00:07:29.320 --> 00:07:31.400
We're probably going to solve that today.

00:07:31.400 --> 00:07:32.440
Maybe next week.

00:07:32.440 --> 00:07:33.640
Want to come back and solve it next week?

00:07:33.640 --> 00:07:34.240
Yeah, sure.

00:07:34.520 --> 00:07:41.840
Well, if you were to be automating requests to these websites, what is the most popular way to do that?

00:07:41.840 --> 00:07:43.380
Well, it's right in the name, requests.

00:07:43.380 --> 00:07:48.240
And requests by Kenneth Wrights has been migrated over.

00:07:48.240 --> 00:07:50.080
It's, like, so popular.

00:07:50.080 --> 00:07:52.800
It's migrated over to the PSF itself, right?

00:07:52.800 --> 00:07:54.780
I don't remember where it said.

00:07:54.780 --> 00:07:55.000
Yeah.

00:07:55.000 --> 00:07:56.320
It actually still has it says.

00:07:56.320 --> 00:08:02.120
Request is one of the most downloaded Python packages today, pulling in around 30 million downloads a week.

00:08:02.860 --> 00:08:06.000
And it's used by over a million repositories on GitHub.

00:08:06.000 --> 00:08:07.820
You can probably trust it.

00:08:07.820 --> 00:08:09.300
But there are things that it doesn't do.

00:08:09.300 --> 00:08:14.960
Things that it's not necessarily wanting to, like, lead the pleading edge on.

00:08:14.960 --> 00:08:18.040
I mean, just with that amount of usage, you've got to be careful, right?

00:08:18.040 --> 00:08:20.900
So I'm going to point you at a fork of requests.

00:08:20.900 --> 00:08:22.020
And I quests?

00:08:22.020 --> 00:08:22.920
I'm not sure.

00:08:22.920 --> 00:08:25.700
Hopefully, N-I quests instead of requests.

00:08:25.700 --> 00:08:26.320
N-I.

00:08:26.320 --> 00:08:29.620
I'm not sure I'm getting the reference here.

00:08:29.620 --> 00:08:31.040
There's probably some cleverness to the name.

00:08:31.100 --> 00:08:32.820
I'm sorry for not getting it there, Java.

00:08:32.820 --> 00:08:34.880
So anyway, it says requests.

00:08:34.880 --> 00:08:39.240
But with HTTP 3, HTTP 2, multiplexed connections.

00:08:39.240 --> 00:08:42.880
So if you're downloading, you could create multiple connections to the server and download multiple streams.

00:08:42.880 --> 00:08:43.880
I think that's what that means.

00:08:43.880 --> 00:08:47.260
System certificate authorities, certificate revocation.

00:08:47.480 --> 00:08:57.040
So if you want to control what certificates you trust, maybe there's some that have been known to be doing bad things or you just don't want to allow access to certain parts of the internet.

00:08:57.040 --> 00:09:00.320
You can revoke those certificates and their authorities and so on.

00:09:00.320 --> 00:09:03.500
DNS over HTTPS, TLS, and quick.

00:09:04.260 --> 00:09:15.460
So if you want to have better control over how DNS works, if you want to escape what DNS is happening on your server and explicitly control it from your application, you can do that securely, which is awesome.

00:09:15.460 --> 00:09:20.340
It has async and await, DNS security, and does much pain removed, which is cool.

00:09:20.860 --> 00:09:23.080
So anyway, this is a pretty interesting thing.

00:09:23.080 --> 00:09:27.780
If you know requests, you basically know this, except for that it also has async versions, which is kind of cool.

00:09:27.780 --> 00:09:32.720
But yeah, it's got like a great long feature list and why they did this.

00:09:32.720 --> 00:09:33.580
Yeah.

00:09:33.580 --> 00:09:35.640
So worth looking at, I think.

00:09:35.640 --> 00:09:36.880
Yeah, definitely.

00:09:36.880 --> 00:09:37.780
That's pretty cool.

00:09:38.220 --> 00:09:46.280
Yeah, but a lot of those things like the certificate stuff or DNS over HTTPS or DNS security are areas you're like, if we really need that, most people probably don't.

00:09:46.280 --> 00:09:47.880
But if you do, this looks pretty cool.

00:09:47.880 --> 00:09:48.360
Yeah.

00:09:48.360 --> 00:09:53.200
I think it's, I think, my guess is that the name is based on the Knights of Knee.

00:09:53.200 --> 00:09:55.120
So it'd be KneeQuest, I think.

00:09:55.120 --> 00:09:56.100
KneeQuest.

00:09:56.100 --> 00:09:56.920
All right, let's go with it.

00:09:56.920 --> 00:09:57.260
KneeQuest.

00:09:57.260 --> 00:09:59.200
Yeah, because of course we have those themes, right?

00:09:59.200 --> 00:10:00.080
Yeah.

00:10:00.080 --> 00:10:01.380
Of course we do.

00:10:01.380 --> 00:10:05.480
Now, Brian, we do have a sponsor for this episode, right?

00:10:05.480 --> 00:10:06.280
Yay.

00:10:06.280 --> 00:10:07.160
Yay.

00:10:07.160 --> 00:10:10.840
Let me tell you real quick about Scout APM.

00:10:10.840 --> 00:10:14.500
They're big supporters of Python Bytes, so we appreciate that very much.

00:10:14.500 --> 00:10:23.720
So if you are tired of spending hours trying to find the root cause of issues impacting your performance, then you owe it to yourself to check out Scout APM.

00:10:23.720 --> 00:10:32.940
They're a leading Python application performance monitoring tool, APM, that helps you identify and solve performance abnormalities faster and easier.

00:10:33.520 --> 00:10:44.000
Scout APM ties bottlenecks such as memory leaks, slow database queries, background jobs, and the dreaded N plus one queries that you can end up if you do lazy loading in your ORM.

00:10:44.200 --> 00:10:46.400
And then you say, oh, no, why is it so slow?

00:10:46.400 --> 00:10:48.740
Why are you doing 200 database queries for what should be one?

00:10:49.280 --> 00:10:52.500
So you can't do it so you can't do it so you can do it so you can do it so you can do it in less than four minutes.

00:10:52.500 --> 00:11:05.460
So you can do it in less than four minutes.

00:11:05.460 --> 00:11:06.280
So that's awesome.

00:11:06.560 --> 00:11:09.400
And the best part is the pricing is straightforward.

00:11:09.400 --> 00:11:14.880
You only pay for the data that you use with no hidden overage fees or per seat pricing.

00:11:14.880 --> 00:11:17.380
And I just learned this, Brian.

00:11:17.380 --> 00:11:22.520
They also have they provide the pro version for free to all open source projects.

00:11:22.520 --> 00:11:29.960
So if you're an open source maintainer and you want to have Scout APM for that project, just shoot them a message or something on their pricing page about that.

00:11:30.580 --> 00:11:36.500
So you can start your free trial and get instant insights today visit by them by set of him slash Scout.

00:11:36.500 --> 00:11:38.740
The link is in your podcast player show notes as well.

00:11:38.740 --> 00:11:40.120
And please use that link.

00:11:40.120 --> 00:11:44.080
Don't just search for them because otherwise they don't think you came from us.

00:11:44.080 --> 00:11:45.680
And then they'd stop supporting the show.

00:11:45.680 --> 00:11:48.240
So please use our link by them by set of him slash Scout.

00:11:48.240 --> 00:11:49.160
Check them out.

00:11:49.160 --> 00:11:51.140
It really supports the show.

00:11:51.140 --> 00:11:51.800
Indeed.

00:11:51.800 --> 00:11:52.060
Indeed.

00:11:52.060 --> 00:11:53.040
Thank you, Brian.

00:11:53.040 --> 00:11:53.680
Yeah.

00:11:53.680 --> 00:11:57.780
Let's talk about underscore has some underscore has some funky meanings in Python.

00:11:57.780 --> 00:11:58.500
It's good.

00:11:58.500 --> 00:11:58.880
We love it.

00:11:58.880 --> 00:11:59.740
We love the underscore.

00:11:59.740 --> 00:12:00.480
Yeah.

00:12:00.500 --> 00:12:03.160
Like I'm going to get a new keyboard where I like on my keyboard here.

00:12:03.160 --> 00:12:06.080
It has two independent buttons for the space key.

00:12:06.080 --> 00:12:07.500
I'm going to make this one just the underscore.

00:12:07.500 --> 00:12:10.560
Okay.

00:12:10.560 --> 00:12:12.020
Sure.

00:12:12.020 --> 00:12:12.880
You can do that.

00:12:12.880 --> 00:12:14.660
And you'll probably need it.

00:12:14.660 --> 00:12:15.460
What can I do with it?

00:12:15.460 --> 00:12:18.260
You could because of all of the Dunder methods.

00:12:18.260 --> 00:12:24.820
We have so many underscores that we call two underscores Dunders in Python.

00:12:24.820 --> 00:12:28.080
So and what are all these Dunder methods for?

00:12:28.260 --> 00:12:32.960
So Trey Hunter has actually put together this really cool resource.

00:12:32.960 --> 00:12:35.340
Every Dunder method in Python.

00:12:36.140 --> 00:12:39.720
And actually, I mean, I thought I knew quite a few.

00:12:39.720 --> 00:12:49.340
And I use probably rep and stir probably the most to make sure that my objects are representable or convertible to strings.

00:12:49.840 --> 00:12:51.840
But there's quite a few more.

00:12:51.840 --> 00:12:56.380
And so he goes through, like, here's their essentials for a repper.

00:12:56.380 --> 00:13:00.420
And, oh, you know, he calls equality essential.

00:13:00.420 --> 00:13:06.800
But I don't really, I guess maybe I don't make my own custom data types as often as maybe I should.

00:13:06.800 --> 00:13:10.760
But there's the equal, EQ, that does equality.

00:13:10.760 --> 00:13:13.180
And then repper that converts to rep.

00:13:13.180 --> 00:13:17.820
And it's also used with stir if you didn't have a stir method.

00:13:17.880 --> 00:13:19.040
But you can have those be separate.

00:13:19.040 --> 00:13:33.560
So the other one that's common is Dunder init for how you initialize classes, which, you know, to be honest, I use probably adders and data classes more than custom data classes.

00:13:33.700 --> 00:13:41.220
So I don't really write that myself a lot, but I often use it in initializing another class if I derive from something else.

00:13:41.220 --> 00:13:42.940
Anyway, moving on.

00:13:42.940 --> 00:13:44.060
There's tons.

00:13:44.060 --> 00:13:46.700
He's got equality and hashability.

00:13:46.700 --> 00:13:53.340
Hashability is important if you're creating an object that should be hashable.

00:13:53.340 --> 00:13:54.680
That way you can create.

00:13:54.680 --> 00:13:55.780
Why do you care about that?

00:13:55.780 --> 00:13:59.220
You care about hashability because that means your objects can be used.

00:13:59.220 --> 00:14:01.680
If they're hashable, they can be used for.

00:14:01.980 --> 00:14:06.420
I think there's some other rules, too, but you can use them for keys to dictionaries.

00:14:06.420 --> 00:14:08.740
And there's tons of dictionaries in Python.

00:14:08.740 --> 00:14:09.800
So we've got-

00:14:09.800 --> 00:14:10.560
Maybe also sets.

00:14:10.560 --> 00:14:11.140
I'm not sure.

00:14:11.140 --> 00:14:12.380
I can't remember about sets.

00:14:12.380 --> 00:14:12.600
Maybe.

00:14:12.600 --> 00:14:13.100
Maybe.

00:14:13.100 --> 00:14:13.660
Yeah, probably.

00:14:13.660 --> 00:14:14.260
Yeah.

00:14:14.260 --> 00:14:17.540
But you also need to equal it.

00:14:17.540 --> 00:14:19.480
I think there's less than you need also.

00:14:19.480 --> 00:14:21.580
Anyway, there's orderability.

00:14:21.580 --> 00:14:23.880
So you've got less than or greater than and all that.

00:14:23.880 --> 00:14:25.500
Type conversions and formatting.

00:14:25.500 --> 00:14:27.380
Tons around that.

00:14:27.380 --> 00:14:29.960
You don't think about type conversions that much, right?

00:14:30.000 --> 00:14:33.820
Because you don't think about testing and all that stuff in Python as much.

00:14:33.820 --> 00:14:34.400
Right.

00:14:34.400 --> 00:14:35.560
But it is kind of cool.

00:14:35.560 --> 00:14:36.220
I didn't know that.

00:14:36.220 --> 00:14:39.800
I guess I knew you could do this, but I kind of forgot that you can.

00:14:39.800 --> 00:14:55.800
So if you say like int of something or bool of something, if that makes sense for your data type, you can write your own dunder method so that people can just use the built-in type conversion, which is pretty cool.

00:14:56.440 --> 00:15:04.440
I didn't know about this format thing so that you can use the f-strings appropriately if you've got the format.

00:15:04.440 --> 00:15:07.540
I think you can pass modifiers from the S string.

00:15:07.540 --> 00:15:11.440
So like with a floating point number, you can say like for the modifier.

00:15:12.000 --> 00:15:16.460
I think you can use the 0.2 F and I'll be like comma separated.

00:15:16.460 --> 00:15:20.480
I think you can take your own format specifier there.

00:15:20.480 --> 00:15:21.540
I think that's what that's for.

00:15:21.540 --> 00:15:21.960
Okay.

00:15:21.960 --> 00:15:23.440
I'll have to research that a little bit more.

00:15:23.440 --> 00:15:30.520
Anyway, the dunder methods around context managers, which is actually kind of a funny thing.

00:15:30.580 --> 00:15:38.060
I think that I've read a lot of tutorials around context managers and sometimes they like try to tell you how to build one up from scratch.

00:15:38.060 --> 00:15:40.320
I've never built one up from scratch.

00:15:40.320 --> 00:15:45.600
I always use like some of the wrappers and stuff to do context managers.

00:15:45.600 --> 00:15:47.440
Anyway, containers and collections.

00:15:47.440 --> 00:15:56.420
If you're going to do a container that you want length to work with or to iterate through, you need some dunder methods for that.

00:15:56.420 --> 00:15:59.080
Callability is one I've used frequently.

00:15:59.620 --> 00:16:09.900
You can create an object that's callable if your class has a call method, which is kind of fun to make callable objects.

00:16:09.900 --> 00:16:13.800
A bunch of arithmetic operators so you can overload things.

00:16:13.800 --> 00:16:20.480
In place, built-in function, built-in math functions, attribute access, all sorts of dunder methods for you.

00:16:20.480 --> 00:16:28.980
So anyway, if you're thinking of overloading a class so that it can deal with different built-in operators,

00:16:28.980 --> 00:16:30.640
check out Trey's article.

00:16:30.640 --> 00:16:31.620
Yeah, that's pretty nuts.

00:16:31.620 --> 00:16:35.080
Actually, I kind of am coming away from this the same feeling.

00:16:35.080 --> 00:16:36.120
It's like, I think I knew these.

00:16:36.120 --> 00:16:37.720
Like, actually, no, there's more stuff.

00:16:37.720 --> 00:16:39.140
There's more that I realized.

00:16:39.540 --> 00:16:41.200
Yeah, there's a lot.

00:16:41.200 --> 00:16:43.240
I like the orderability, though.

00:16:43.240 --> 00:16:47.020
It's because I often, at the very least, I want to be able to sort things.

00:16:47.020 --> 00:16:48.820
Yeah, yeah, indeed.

00:16:48.820 --> 00:16:50.060
Sorting is good.

00:16:50.060 --> 00:16:56.340
The one that I think is news to me, maybe the casting ones, but also the string formatting one.

00:16:56.340 --> 00:16:56.740
Yeah.

00:16:56.740 --> 00:16:58.520
You could have a user object.

00:16:58.520 --> 00:17:00.880
You could say, like, colon E for their email.

00:17:00.880 --> 00:17:03.940
I mean, not necessarily would do that exactly, but just weird, right?

00:17:03.940 --> 00:17:05.220
Yeah, I'll have to play with that.

00:17:05.220 --> 00:17:05.580
Yeah.

00:17:05.580 --> 00:17:06.060
All right.

00:17:06.060 --> 00:17:08.620
Let's talk about this next one, a lockbox.

00:17:08.620 --> 00:17:10.820
I don't think this is Python exactly.

00:17:11.260 --> 00:17:12.060
Oh, wait, I take it back.

00:17:12.060 --> 00:17:13.480
It is Python, 100%.

00:17:13.480 --> 00:17:21.200
But also, even if it weren't, it's the kind of thing that you would use as a Python person, not necessarily make it part of your app.

00:17:21.200 --> 00:17:25.200
So this takes a bit of, it takes a moment to get your head around.

00:17:25.200 --> 00:17:30.700
So lockbox is a forward proxy for making third-party API calls.

00:17:30.700 --> 00:17:33.020
And you're like, okay, keep talking.

00:17:33.020 --> 00:17:34.640
Maybe it'll make sense eventually.

00:17:34.640 --> 00:17:36.340
So here's the deal.

00:17:36.400 --> 00:17:44.200
If you're going to integrate with some third-party thing, think Zapier, if that, if this, then that, et cetera, et cetera.

00:17:44.200 --> 00:17:47.960
And those things are making API calls on your behalf.

00:17:47.960 --> 00:17:53.920
You have to give them the API calls for the destination thing they're integrating with.

00:17:53.920 --> 00:18:05.360
So the example they give is if you want to do a Zapier thing over to Slack or Jira or whatever, you give Zapier your Slack API key or your Jira API key.

00:18:05.760 --> 00:18:07.220
Which may be fine.

00:18:07.220 --> 00:18:09.200
I mean, Zapier is certainly a trustworthy company.

00:18:09.200 --> 00:18:12.140
I've had the CEO on Talk Python a few times.

00:18:12.140 --> 00:18:12.660
He's great.

00:18:12.660 --> 00:18:15.560
But just on principle, you might not want to do that.

00:18:15.560 --> 00:18:16.620
You know what I mean?

00:18:16.620 --> 00:18:17.140
Yeah.

00:18:17.140 --> 00:18:19.040
So that's what this thing is for.

00:18:19.040 --> 00:18:26.880
So instead of giving that third-party, like Zapier, if this, then that, your tokens, what you can do is you can set up this lockbox thing.

00:18:26.880 --> 00:18:30.320
And it's like an intermediary for this whole process.

00:18:30.680 --> 00:18:37.480
So you can register an app in your lockbox and it gets its own just for this one purpose API key.

00:18:37.480 --> 00:18:38.920
You give that to Zapier.

00:18:38.920 --> 00:18:44.380
So Zapier calls lockbox, lockbox calls Slack or lockbox calls Jira or whatever.

00:18:44.600 --> 00:18:46.740
And it has a couple of advantages.

00:18:46.740 --> 00:18:53.020
So you can do things like you can audit what actual traffic is being done.

00:18:53.020 --> 00:18:59.720
So you can see exactly what, let's just keep with Zapier, what Zapier is doing on your behalf, exactly what data is passed.

00:18:59.720 --> 00:19:01.420
And if something's going wrong, you could see that.

00:19:01.420 --> 00:19:02.500
It's still playing.

00:19:02.740 --> 00:19:06.120
Zapier is charging you for too many zaps, you can say, I didn't use this many.

00:19:06.120 --> 00:19:07.180
Exactly.

00:19:07.180 --> 00:19:09.180
Here's how many zaps exactly you used.

00:19:09.180 --> 00:19:09.940
Yeah.

00:19:09.940 --> 00:19:11.080
Some of these are planned.

00:19:11.080 --> 00:19:15.720
So you should be able to restrict access to external APIs in a more fine-grained manner.

00:19:15.720 --> 00:19:16.400
You know.

00:19:16.400 --> 00:19:17.820
Ooh, rate limiting.

00:19:17.820 --> 00:19:18.340
Yeah.

00:19:18.340 --> 00:19:20.340
Rate limiting on third-party API calls.

00:19:20.340 --> 00:19:25.240
But the primary purpose of it is that the API keys are not exposed to anyone else.

00:19:25.240 --> 00:19:27.980
They just live in this lockbox thing that you control.

00:19:27.980 --> 00:19:30.220
And then you can, of course, throw them away.

00:19:30.220 --> 00:19:30.680
Right.

00:19:30.680 --> 00:19:32.620
Drawbacks are, well, you got to run your lockbox.

00:19:32.620 --> 00:19:34.300
Basically.

00:19:34.300 --> 00:19:35.900
And so on.

00:19:35.900 --> 00:19:38.760
But yeah, it's pip install lockbox-proxy.

00:19:38.760 --> 00:19:41.180
And you set the sucker up and off it goes.

00:19:41.180 --> 00:19:42.040
I think it's pretty cool.

00:19:42.040 --> 00:19:42.580
Yeah.

00:19:42.580 --> 00:19:43.080
Yeah.

00:19:43.080 --> 00:19:43.560
Interesting.

00:19:43.560 --> 00:19:44.240
Yeah.

00:19:44.240 --> 00:19:51.320
For, especially, even if I didn't use this all the time, to be able to add it later if I needed to, to intercept that.

00:19:51.320 --> 00:19:54.560
And especially for some monitoring purposes.

00:19:54.560 --> 00:19:55.380
Yeah.

00:19:55.380 --> 00:19:56.560
It's an interesting idea.

00:19:56.560 --> 00:19:57.360
Yeah.

00:19:57.360 --> 00:19:59.560
Andrew out in the audience says, nothing against Zapier.

00:19:59.700 --> 00:20:04.520
But that kind of feels like an indication that maybe it isn't a type of thing you should be handing off to third parties.

00:20:04.520 --> 00:20:06.780
I may agree with you.

00:20:06.780 --> 00:20:11.220
Although, I think in practice, a lot of people pass their keys all over the place to get stuff done.

00:20:11.220 --> 00:20:11.500
You know?

00:20:11.500 --> 00:20:13.380
Especially the less developer-y.

00:20:13.380 --> 00:20:18.420
The less developer-y you are, the more you're like, just click these things together and do it for me.

00:20:18.420 --> 00:20:18.820
Yeah.

00:20:19.020 --> 00:20:20.060
What could go wrong?

00:20:20.060 --> 00:20:22.320
YOLO.

00:20:22.320 --> 00:20:22.800
Come on.

00:20:22.800 --> 00:20:24.420
My password's the letter A.

00:20:24.420 --> 00:20:25.480
I don't see any problem here.

00:20:25.480 --> 00:20:26.760
This is way more secure than that.

00:20:26.760 --> 00:20:28.720
Good thing we made all passwords password.

00:20:28.720 --> 00:20:29.480
Exactly.

00:20:29.480 --> 00:20:30.740
That way I never forget it.

00:20:30.740 --> 00:20:31.780
It just says, what's your password?

00:20:31.780 --> 00:20:34.000
And I'm like, well, you gave me the hint right there.

00:20:34.000 --> 00:20:34.220
Perfect.

00:20:34.220 --> 00:20:37.460
Well, that's our items, our main items.

00:20:37.460 --> 00:20:38.420
What else you got there?

00:20:38.420 --> 00:20:40.080
I got a couple extra.

00:20:40.080 --> 00:20:49.140
Since I covered Django a little bit earlier, I ran across Adam Johnson's Django Join the Community on Mastodon.

00:20:49.140 --> 00:20:51.100
I'm also working with Django a lot lately.

00:20:51.100 --> 00:20:55.940
So trying to follow some of the Django people on Mastodon is good.

00:20:55.940 --> 00:20:58.200
So he's got a good resource for people that want to.

00:20:58.200 --> 00:21:02.980
If you're a Django person, you want to get started on Mastodon, there's some good people to follow.

00:21:02.980 --> 00:21:06.120
Some projects, official accounts around Django.

00:21:07.320 --> 00:21:14.180
And reminders to do a welcome post, which I still have forgotten to do.

00:21:14.180 --> 00:21:17.120
So sorry, people out there that don't know who I am.

00:21:17.120 --> 00:21:20.040
Anyway, yeah, the introductory post is a good idea.

00:21:20.040 --> 00:21:21.660
And to hit through it.

00:21:21.660 --> 00:21:28.600
So the other one extra got sent in just this morning from Kim Van Wyk.

00:21:28.600 --> 00:21:34.800
And it's a website called unmaintained.tech.

00:21:35.160 --> 00:21:39.460
And essentially, the idea is there's a badge and there's some description.

00:21:39.660 --> 00:21:51.120
So basically, if you have some open source stuff that you're just kind of done with and nobody wants to take it over, you can just link to this to tell people that you're not intending to maintain it.

00:21:51.120 --> 00:21:56.820
People can still use it as a reference and read it, but no promises as to whether it's going to work because I'm done.

00:21:56.820 --> 00:21:57.720
So interesting.

00:21:57.720 --> 00:21:58.220
Yeah.

00:21:58.220 --> 00:21:59.260
Some things are done.

00:21:59.260 --> 00:22:00.120
They're just done.

00:22:00.340 --> 00:22:00.740
Yeah.

00:22:00.740 --> 00:22:01.680
Some things are done.

00:22:01.680 --> 00:22:02.300
And it's okay.

00:22:02.300 --> 00:22:03.560
So you don't have to take them down.

00:22:03.560 --> 00:22:05.680
Just tell people that you're not working on it anymore.

00:22:05.680 --> 00:22:06.420
Interesting.

00:22:06.420 --> 00:22:16.680
Wasn't there a thing with GitHub where they were going to either take down or charge very, very briefly for things that had no activity over a two-year period or something like that?

00:22:16.680 --> 00:22:19.120
And they quickly rolled it back because people are like, stuff can be done.

00:22:19.120 --> 00:22:19.800
Don't do that.

00:22:20.060 --> 00:22:20.300
Okay.

00:22:20.300 --> 00:22:20.780
Yeah.

00:22:20.780 --> 00:22:23.220
I think that was pre-Microsoft takeover.

00:22:23.220 --> 00:22:23.920
Yeah.

00:22:23.920 --> 00:22:24.500
That might have.

00:22:24.500 --> 00:22:25.160
You know what?

00:22:25.160 --> 00:22:27.720
I think it probably was when they were like, how are we going to pay for this stuff?

00:22:27.720 --> 00:22:32.780
We need to start getting rid of some of the storage of things that just abandoned.

00:22:32.780 --> 00:22:37.920
And now they don't want to do that because there's all that AI meat in there to eat.

00:22:37.920 --> 00:22:39.780
That's right.

00:22:39.780 --> 00:22:46.900
Well, speaking of takeovers, US sues Apple for illegal monopoly over smartphones, says The Verge.

00:22:47.240 --> 00:22:52.080
Now, I think the monopoly angle is a little bit of interesting here.

00:22:52.080 --> 00:22:54.600
I had some conversations on Mastodon.

00:22:54.600 --> 00:22:56.340
People were like, oh, they only have 20% of the market.

00:22:56.340 --> 00:23:02.260
In the US, they have over 60%, 68%, 60%, something like that.

00:23:02.260 --> 00:23:05.640
But I think the real problem is there's nowhere else to go.

00:23:05.640 --> 00:23:06.320
Where do you go?

00:23:06.320 --> 00:23:09.460
There's literally one other option in the entire world.

00:23:09.460 --> 00:23:14.320
I know technically there's some Kickstarter that somebody could have a hundred other phones.

00:23:14.500 --> 00:23:20.660
But in practice, as an adult, you need a smartphone to live these days to function in society.

00:23:20.660 --> 00:23:22.140
Like, well, you get this app to do this thing.

00:23:22.140 --> 00:23:24.620
Like, well, how do I get it on my phone?

00:23:24.620 --> 00:23:25.860
I have to hit to get C.

00:23:25.860 --> 00:23:27.040
I press number one three times.

00:23:27.040 --> 00:23:28.740
Like, oh, you can't do this part of the world.

00:23:28.740 --> 00:23:29.620
You're done.

00:23:29.620 --> 00:23:32.260
And I think Apple, I think it's, I don't know.

00:23:32.300 --> 00:23:45.840
It's a little bit, a little bit of a silly lawsuit in some senses that people don't really, the people writing the lawsuit seem to be not very connected technically or deeply understand the problems here.

00:23:45.840 --> 00:23:49.500
I think there's some really legitimate causes and I'm here for this.

00:23:49.580 --> 00:23:54.400
I hope this makes a change because Apple is just such a bully.

00:23:54.400 --> 00:24:05.140
I have had such insanely bad experiences working with them, getting apps in the app store, which is crazy because you're like, I spent, me and Lauren spent months writing the latest Talk Python app.

00:24:05.140 --> 00:24:10.800
To just try to make the iPhone a little bit better, to make people who want to do our stuff, enjoy doing it more on the iPhone.

00:24:10.800 --> 00:24:12.660
They're like, nope, we're rejecting that.

00:24:12.660 --> 00:24:14.080
And we have these rules.

00:24:14.080 --> 00:24:18.400
We need more money from you, even though you're already paying us a hundred dollars a month and making the platform better.

00:24:18.400 --> 00:24:25.700
You know, for example, I'm sure people think I'm cranky about this, but I just want to give a little background for people who haven't heard me rant about this.

00:24:25.700 --> 00:24:29.700
Like we submitted it and they said, well, it doesn't have in-app purchases.

00:24:29.700 --> 00:24:30.380
I said, that's okay.

00:24:30.380 --> 00:24:32.440
I don't really want to sell anything through here.

00:24:32.440 --> 00:24:40.820
My main, it's not like people are coming to the app and then they're becoming, I just, this is for people who are already customers of mine, already taking courses.

00:24:40.820 --> 00:24:42.120
I just want them to be able to do that better.

00:24:42.120 --> 00:24:43.800
Like no apps rejected.

00:24:43.800 --> 00:24:44.460
Interesting.

00:24:44.460 --> 00:24:48.280
But you have this clause 4.3.1 called reader apps.

00:24:48.280 --> 00:24:54.040
It says, if you bought material on the web, like a book, audio, or video, you're allowed to consume that on the phone.

00:24:54.040 --> 00:24:55.880
And there's no in-app purchase required.

00:24:55.880 --> 00:24:56.840
Like we don't care.

00:24:56.840 --> 00:24:58.100
You don't count as that.

00:24:58.100 --> 00:24:58.820
You're something else.

00:24:58.820 --> 00:25:00.260
You're not as big as Amazon.

00:25:00.260 --> 00:25:01.160
So you can't.

00:25:01.160 --> 00:25:01.240
Yeah.

00:25:01.240 --> 00:25:02.280
You don't get any special treatment.

00:25:02.280 --> 00:25:14.120
So what you're going to do is you're going to spend two weeks for two people full-time developing the in-app purchase so that you can sell a couple of courses a month, even though it costs you thousands and thousands of dollars to do it.

00:25:14.120 --> 00:25:15.220
Or you can't be part of this.

00:25:15.220 --> 00:25:19.560
The majority of your customers in the United States can't have your app, right?

00:25:19.560 --> 00:25:28.340
And just that we're going to, you know, grind it out on these little companies to get a couple hundred bucks and cost them tons of effort.

00:25:28.480 --> 00:25:29.840
Now it's harder to maintain the app.

00:25:29.840 --> 00:25:35.400
If I add a new course, I've got to like do more work and release new versions of the app just because of that.

00:25:35.400 --> 00:25:39.520
Like it's incredibly frustrating how they're just doing this.

00:25:39.520 --> 00:25:40.660
Well, does this even talk about that?

00:25:40.660 --> 00:25:45.760
Because when I read this, I was thinking, I was thinking, I mean, I've felt this.

00:25:45.760 --> 00:25:46.760
I love Apple.

00:25:46.760 --> 00:25:49.540
I've got two or three computers.

00:25:49.540 --> 00:25:51.000
I got the phone watch.

00:25:51.320 --> 00:25:53.740
But I've thought, hey, I want to try a different watch.

00:25:53.740 --> 00:25:55.900
Oh, it doesn't work with anything else.

00:25:55.900 --> 00:25:57.800
I can't really.

00:25:57.800 --> 00:26:00.360
So I feel the customer lock-in part.

00:26:00.360 --> 00:26:02.720
I'm not really happy about that.

00:26:02.720 --> 00:26:05.000
But the other part that I, is that part.

00:26:05.000 --> 00:26:06.980
And I don't know if the lawsuit covers that.

00:26:06.980 --> 00:26:10.260
Is this whole 30% tax that they want to apply to everything?

00:26:10.260 --> 00:26:16.480
Yeah, I think it does cover the lack of ability of using other payment processors and stuff.

00:26:16.480 --> 00:26:19.420
Other payment processing, other delivery methods, all that kind of stuff.

00:26:19.420 --> 00:26:31.260
Like another really creepy thing that Apple is doing is they're going to allow only the big companies to install apps over the web directly and use their own payment processor directly.

00:26:31.260 --> 00:26:36.340
But only in Europe and only for companies that have had over a million downloads previously.

00:26:36.340 --> 00:26:38.200
So there's no way to get started ever.

00:26:38.200 --> 00:26:41.700
If you created a popular app now, you have to have done it last year.

00:26:41.700 --> 00:26:43.240
But if you don't have it yet, how do you?

00:26:43.240 --> 00:26:49.040
But then they're charging 27% for their fee for delivering your app.

00:26:49.040 --> 00:26:54.240
But if they're not doing the processing and it doesn't go over their servers, what is the 27% for again?

00:26:54.240 --> 00:26:56.280
It's just to give them money.

00:26:56.280 --> 00:26:56.920
It's bad.

00:26:57.520 --> 00:27:01.640
So anyway, there's a couple of videos from this guy called Theo Rants.

00:27:01.640 --> 00:27:08.200
They're actually quite good, both the lawsuit and another one.

00:27:08.200 --> 00:27:10.980
And then also the day after, this was yesterday, Brian.

00:27:10.980 --> 00:27:14.920
The EU rejects Apple's European App Store changes.

00:27:14.920 --> 00:27:18.760
This is the one I just talked about with some of those weird fees and other stuff, right?

00:27:18.760 --> 00:27:24.100
Company could be fined 10% of global revenue, 20% if they don't fix it after that.

00:27:24.100 --> 00:27:32.180
And so it's just one thing after another coming down on this company that's just, you know, they make 85% of their money off in-app purchases from games.

00:27:32.180 --> 00:27:35.640
They should just make the rest of it free and not even make it a hassle for people.

00:27:35.640 --> 00:27:36.260
You know what I mean?

00:27:36.260 --> 00:27:43.540
It's just like, why are they doing all of these things to just for that last little bit of stockholder value, you know?

00:27:43.940 --> 00:27:49.020
Yeah, but even the games part, why are they taking 30% cut?

00:27:49.020 --> 00:27:50.940
It's just, it's too high.

00:27:50.940 --> 00:27:51.400
Yeah.

00:27:51.400 --> 00:27:55.040
You know, and honestly, I don't even mind the 30%.

00:27:55.040 --> 00:28:06.800
What I mind is that they say that these kinds of apps can't exist or your app has to be completely rewritten so that you do start selling even if you don't want to or we won't accept it.

00:28:07.060 --> 00:28:07.260
Right.

00:28:07.260 --> 00:28:10.060
It's if I wanted to sell it, I'd be like, all right, look, 30%.

00:28:10.060 --> 00:28:12.880
It's, it's rough, but it's digital project products.

00:28:12.880 --> 00:28:13.380
I'll live.

00:28:13.380 --> 00:28:17.960
But the fact they're like, you can't even not, you can't even choose to not sell stuff.

00:28:17.960 --> 00:28:19.560
We're going to make you sell stuff.

00:28:19.560 --> 00:28:24.700
And that kind of, that kind of stuff is just, that's where I think like, okay, this is over the line.

00:28:24.700 --> 00:28:30.400
When you're, when, when it's that high of a percentage and you treat people like that, it's, it's, it's bad news bears.

00:28:30.400 --> 00:28:33.100
That said, I have like five apples to so I says, just in this room.

00:28:33.200 --> 00:28:34.280
So I'm very conflicted.

00:28:34.280 --> 00:28:36.360
Yeah, definitely.

00:28:36.360 --> 00:28:37.500
So yeah.

00:28:37.500 --> 00:28:37.980
Yeah.

00:28:37.980 --> 00:28:39.080
Okay.

00:28:39.080 --> 00:28:39.840
I have a few more things.

00:28:39.840 --> 00:28:40.260
They're quicker.

00:28:40.260 --> 00:28:40.840
I promise.

00:28:40.840 --> 00:28:46.800
The PSF is looking to hire somebody, which is awesome for PyPI support specialist.

00:28:46.800 --> 00:28:47.560
How cool is that?

00:28:47.560 --> 00:28:48.420
That is cool.

00:28:48.420 --> 00:28:48.900
Yeah.

00:28:48.900 --> 00:28:49.240
I read about that.

00:28:49.240 --> 00:28:59.400
It's kind of nuts that all the PyPI with, you know, you think of the infrastructure, the amount of bandwidth flowing through that thing and how much traffic there is in that website and that there's nobody whose job is to keep it running.

00:28:59.700 --> 00:29:01.580
It's kind of nuts, but yeah.

00:29:01.580 --> 00:29:06.840
So a PyPI support specialist is a job, a person that are looking to join the team.

00:29:06.840 --> 00:29:08.740
So if you're interested in that, check it out.

00:29:08.740 --> 00:29:09.360
That'd be really cool.

00:29:09.360 --> 00:29:10.740
Let's see.

00:29:10.740 --> 00:29:13.320
Why is this looking like it looks here?

00:29:13.320 --> 00:29:14.120
There we go.

00:29:14.460 --> 00:29:16.620
We're going to do, this needs to go away.

00:29:16.620 --> 00:29:24.480
We're going to do a VS Code Ask Me Anything with Brian Clark, not Brian Okken, Brian Clark and Cecil Phillip and me in 21 days.

00:29:24.480 --> 00:29:30.060
So if you want to be part of that YouTube only event, then the link is in the show notes.

00:29:30.060 --> 00:29:30.640
Check that out.

00:29:30.640 --> 00:29:32.540
You can submit questions ahead of time.

00:29:32.540 --> 00:29:34.700
So if you've got one, please, please do that.

00:29:34.700 --> 00:29:37.800
And lastly, a quick conference thing.

00:29:37.800 --> 00:29:47.180
Gareth Thomas said, hey, just let you all know, PyData Eindhoven 2024 will take place on the 11th of July and there's a call for proposals open.

00:29:47.180 --> 00:29:49.060
So if you're interested in that, check it out.

00:29:49.060 --> 00:29:52.200
Okay, I've got one extra, extra thing.

00:29:52.200 --> 00:29:54.360
An extra, you have an extra, extra, extra, extra.

00:29:54.360 --> 00:29:56.500
And partly it's an apology.

00:29:56.500 --> 00:30:00.820
So I've been doing the emails for the show, but I kind of forgot last week.

00:30:00.820 --> 00:30:05.980
So I'll get the, this week you'll get two or we'll combine them into one or something like that.

00:30:05.980 --> 00:30:07.140
But how do you get the email?

00:30:07.140 --> 00:30:17.560
So if you go to Python Bytes and click on Friends, you can fill out your name there and get the show notes into your inbox if you want.

00:30:17.560 --> 00:30:20.740
So, plus we'll sell it and make lots of money.

00:30:20.740 --> 00:30:21.220
Yeah, that's...

00:30:21.220 --> 00:30:23.080
No, we don't sell your email or anything.

00:30:23.080 --> 00:30:25.120
We don't, we don't sell it.

00:30:25.120 --> 00:30:27.980
We don't even transfer it to other, other locations.

00:30:27.980 --> 00:30:28.760
It's pretty excellent.

00:30:28.760 --> 00:30:30.460
We got some good infrastructure set up.

00:30:30.460 --> 00:30:32.500
We don't even, I don't even look at them.

00:30:32.500 --> 00:30:33.240
So, yeah.

00:30:33.240 --> 00:30:34.520
Yeah, exactly.

00:30:34.520 --> 00:30:36.680
Only if something goes wrong, do I bother looking at it?

00:30:36.680 --> 00:30:36.920
All right.

00:30:36.920 --> 00:30:39.920
Well, that's, let's, let's wrap this up with a joke.

00:30:39.920 --> 00:30:40.480
Okay.

00:30:40.780 --> 00:30:46.760
So, you know, the Windows, some of these different operating systems and ecosystems have more certifications than others.

00:30:46.760 --> 00:30:52.360
Like there's the network certifications for network engineers and Windows has got a lot, right?

00:30:52.360 --> 00:30:54.620
So there's the Windows certified technician.

00:30:55.960 --> 00:30:57.920
Can you, it's a, it's a game.

00:30:57.920 --> 00:31:01.140
It's like a giant arcade that has a Windows on.

00:31:01.140 --> 00:31:02.560
It says, can you make it work?

00:31:02.560 --> 00:31:03.780
Can you make it work?

00:31:03.780 --> 00:31:11.060
Battle your way through driver updates and registry edits on your quest to defeat the dreaded blue screen of death.

00:31:11.140 --> 00:31:17.500
There's like a super excited guy with a toolbox ready to take on the Windows blue screen of death and hack the registry.

00:31:17.500 --> 00:31:19.900
Can you be a Windows certified engineer?

00:31:19.900 --> 00:31:24.640
It's the latest, it's the hottest game of Dave and Busters this year.

00:31:24.640 --> 00:31:25.220
Okay.

00:31:25.220 --> 00:31:26.780
But look, look at the controls.

00:31:26.780 --> 00:31:32.340
You got to be a Windows engineer with a trackpad and three buttons.

00:31:32.340 --> 00:31:33.200
Yeah.

00:31:33.200 --> 00:31:34.540
But look at the labels and the buttons.

00:31:34.540 --> 00:31:35.820
I didn't, there's four buttons.

00:31:35.820 --> 00:31:36.780
You missed an important one.

00:31:36.880 --> 00:31:41.200
There's a big giant rollerball, like trackpad.

00:31:41.200 --> 00:31:41.780
What is that?

00:31:41.780 --> 00:31:42.560
Trackball.

00:31:42.560 --> 00:31:43.200
Trackball.

00:31:43.200 --> 00:31:46.000
Then there's three buttons, control, alt, and delete.

00:31:46.000 --> 00:31:49.080
But down at the bottom, there's another one that says reboot.

00:31:49.080 --> 00:31:50.740
It's like the bonus button.

00:31:50.740 --> 00:31:51.700
Yeah.

00:31:51.700 --> 00:31:53.260
That's good.

00:31:53.260 --> 00:31:55.680
I'll make this the show, the chapter art.

00:31:55.680 --> 00:31:56.320
This is good.

00:31:56.320 --> 00:31:56.820
Yeah.

00:31:56.820 --> 00:31:57.380
Awesome.

00:31:57.380 --> 00:31:58.220
All right.

00:31:58.220 --> 00:31:59.460
Well, always fun.

00:31:59.460 --> 00:32:00.460
Thanks for being here, Brian.

00:32:00.460 --> 00:32:01.080
Thank you.

00:32:01.080 --> 00:32:01.540
Yeah.

00:32:01.540 --> 00:32:02.560
Thanks to everyone for listening.

00:32:02.560 --> 00:32:03.260
Catch y'all later.

