WEBVTT

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

00:00:04.980 --> 00:00:08.620
This is episode 360, recorded November 7th, 2023.

00:00:08.620 --> 00:00:10.080
I'm Michael Kennedy.

00:00:10.080 --> 00:00:11.500
And I am Brian Okken.

00:00:11.500 --> 00:00:14.660
This episode is brought to you by Scout APM.

00:00:14.660 --> 00:00:17.280
Once again, we'll tell you more about them later.

00:00:17.280 --> 00:00:19.340
Thank you, Scout APM, for sponsoring the show.

00:00:19.340 --> 00:00:21.760
Connect with us on Mastodon.

00:00:21.760 --> 00:00:25.560
All three of our entities are on fosstodon.org,

00:00:25.560 --> 00:00:28.500
@mkennedy, @brianokken, and at Python Bytes.

00:00:28.500 --> 00:00:30.060
Want to be part of the live show?

00:00:30.060 --> 00:00:31.580
It's open to everyone.

00:00:31.580 --> 00:00:33.880
We typically record on Tuesdays.

00:00:33.880 --> 00:00:35.400
More on that in just a second.

00:00:35.400 --> 00:00:39.360
Tuesdays at 11 Pacific Time, pythonbytes.fm/live.

00:00:39.360 --> 00:00:45.080
Click on the banner, the image there, and it'll take you over and get notified about when we're doing the live show

00:00:45.080 --> 00:00:46.500
or just find the one going right there.

00:00:46.500 --> 00:00:51.180
Speaking of that, next Tuesday, Brian, there will not be a Python Bytes.

00:00:51.180 --> 00:00:52.040
Oh, no.

00:00:52.040 --> 00:00:56.620
I am going straight from a vacation directly to a conference.

00:00:57.620 --> 00:01:03.820
Somehow, with all that mayhem, I think it's just going to be too much to try to make it happen.

00:01:03.820 --> 00:01:05.980
It'll give people a chance to catch up.

00:01:05.980 --> 00:01:08.840
If anyone's behind, they can catch up on all the things.

00:01:08.840 --> 00:01:13.680
If not, it'll give them more time to gather up ideas to send to us to say,

00:01:14.140 --> 00:01:17.360
you know, you all didn't cover it last week, which would be true even.

00:01:17.360 --> 00:01:19.780
I can tell you that even now, no matter what it is.

00:01:19.780 --> 00:01:22.220
And they sit in and say you should check this out.

00:01:22.220 --> 00:01:28.260
We always appreciate when cool things we didn't quite know were out there that got sent in to us.

00:01:28.260 --> 00:01:28.840
Yes.

00:01:28.840 --> 00:01:29.520
Indeed.

00:01:29.820 --> 00:01:30.340
Happy birthday.

00:01:30.340 --> 00:01:31.380
Happy birthday, Brian.

00:01:31.380 --> 00:01:32.300
Happy birthday?

00:01:32.300 --> 00:01:33.000
Yes.

00:01:33.000 --> 00:01:33.560
Happy birthday.

00:01:33.560 --> 00:01:34.180
Look at this.

00:01:34.180 --> 00:01:37.180
I go to Python Bytes and I go to episodes.

00:01:37.180 --> 00:01:38.660
I go way to the end.

00:01:38.660 --> 00:01:41.980
2016, November 7th.

00:01:41.980 --> 00:01:43.180
Oh, nice.

00:01:43.180 --> 00:01:43.760
Yeah.

00:01:43.760 --> 00:01:46.220
We are seven years old today.

00:01:46.220 --> 00:01:47.160
Wow.

00:01:47.160 --> 00:01:48.700
How awesome is that?

00:01:49.000 --> 00:01:49.220
Yeah.

00:01:49.220 --> 00:01:51.560
We'd be like in second grade if we were a child.

00:01:51.560 --> 00:01:52.580
I know.

00:01:52.580 --> 00:01:54.280
We're working on our writing.

00:01:54.280 --> 00:01:55.760
We're doing basic arithmetic.

00:01:55.760 --> 00:01:56.840
No, this is really awesome.

00:01:56.840 --> 00:01:59.620
I mean, I don't know what my expectations were when we started the show.

00:01:59.620 --> 00:02:01.100
I thought it would be a cool format.

00:02:01.100 --> 00:02:02.180
I thought people would enjoy it.

00:02:02.180 --> 00:02:05.160
But seven years together, that's a long time.

00:02:05.160 --> 00:02:06.880
It doesn't seem like that long.

00:02:06.880 --> 00:02:08.100
This has just been a blast.

00:02:08.100 --> 00:02:09.440
Yeah, it sure has.

00:02:09.440 --> 00:02:09.840
Yeah.

00:02:09.840 --> 00:02:14.080
So thank you to everyone for listening and encouraging us and so on.

00:02:14.080 --> 00:02:17.020
If you didn't, obviously, it would make a lot of sense to keep going.

00:02:17.020 --> 00:02:17.380
No, would it?

00:02:17.380 --> 00:02:18.040
No.

00:02:18.040 --> 00:02:18.520
No.

00:02:18.760 --> 00:02:19.060
All right.

00:02:19.060 --> 00:02:19.280
Great.

00:02:19.280 --> 00:02:20.020
Take it away.

00:02:20.020 --> 00:02:24.100
Well, this is a story about coverage.

00:02:24.100 --> 00:02:29.300
So Python coverage, we're covering, trying to see if your test suite hits all of your code.

00:02:29.300 --> 00:02:35.240
So this story comes from a thread on Mastodon.

00:02:35.240 --> 00:02:39.180
So Pamela Fox, we've had her on, a great person.

00:02:39.180 --> 00:02:45.020
She just asked about coverage testing and covering stuff.

00:02:45.020 --> 00:02:48.700
Apparently, with abstract-based classes, there's a weird thing where the normal

00:02:48.700 --> 00:02:50.600
thing is to say if false.

00:02:50.600 --> 00:02:52.040
Now, whatever.

00:02:52.040 --> 00:02:53.840
That's not what this topic is about.

00:02:53.840 --> 00:02:58.680
But how do we, that's clearly never going to run within your code.

00:02:58.680 --> 00:03:02.060
So how do you tell coverage to not worry about that?

00:03:02.440 --> 00:03:06.620
She said, normally, this is a way to do it.

00:03:06.620 --> 00:03:07.620
You can add a lot of code.

00:03:07.620 --> 00:03:07.620
I'm going to add a lot of code.

00:03:07.620 --> 00:03:07.620
I'm going to add a lot of code.

00:03:07.620 --> 00:03:08.620
I'm going to add a lot of code.

00:03:08.620 --> 00:03:09.620
I'm going to add a lot of code.

00:03:09.620 --> 00:03:10.620
I'm going to add a lot of code.

00:03:10.620 --> 00:03:11.620
I'm going to add a lot of code.

00:03:11.620 --> 00:03:12.620
I'm going to add a lot of code.

00:03:12.620 --> 00:03:16.540
So Hugo, I can't remember his last name.

00:03:16.540 --> 00:03:23.800
Hugo mentions, Hugo VK on Mastodon said, hey, look at the configuration docs.

00:03:23.800 --> 00:03:26.440
You can hide it away in a config file.

00:03:26.580 --> 00:03:29.600
So I went and looked at that because I knew you could do that.

00:03:29.600 --> 00:03:31.500
But I was curious what he recommended.

00:03:31.500 --> 00:03:39.420
And it points right to this coverage RC example with a exclude also.

00:03:39.420 --> 00:03:41.540
Now, this was a new thing to me.

00:03:41.540 --> 00:03:43.840
I hadn't noticed this.

00:03:43.840 --> 00:03:45.760
Apparently, it came out in February.

00:03:45.760 --> 00:03:47.260
And I somehow missed it.

00:03:47.260 --> 00:03:48.500
But February of 2023.

00:03:48.500 --> 00:03:50.200
So it hasn't been out forever.

00:03:50.300 --> 00:03:51.760
I've been using coverage for many years.

00:03:51.760 --> 00:03:56.260
And it lists, there was a exclude lines.

00:03:56.260 --> 00:03:59.920
But it also, it like overrode other stuff.

00:03:59.920 --> 00:04:02.900
So the recommendation now is to use exclude also.

00:04:02.900 --> 00:04:08.500
And the example for her would have been, well, there's an example of if zero.

00:04:08.500 --> 00:04:10.340
You just say if false instead.

00:04:10.340 --> 00:04:16.820
But I often have like, if I've got like some debug stuff at the bottom of the library,

00:04:16.820 --> 00:04:19.600
I might have an if name equals main just for the heck of it.

00:04:19.600 --> 00:04:23.040
Just to run some test code or some debugging code.

00:04:23.040 --> 00:04:27.780
That's not really, I don't care if that's covered by my tests.

00:04:27.780 --> 00:04:29.340
So and it's not going to be.

00:04:29.340 --> 00:04:31.140
So excluding that is cool.

00:04:31.140 --> 00:04:33.060
So I'm using this in a bunch of projects now.

00:04:33.060 --> 00:04:36.160
So anyway, the exclude also going on the story.

00:04:36.160 --> 00:04:37.200
This is neat.

00:04:37.200 --> 00:04:41.160
And I said, oh my god, nice.

00:04:41.160 --> 00:04:43.040
The exclude also seems brilliant.

00:04:43.040 --> 00:04:48.900
And apparently, Hugo was pointing to that coverage doc, but didn't know about.

00:04:48.900 --> 00:04:50.580
No about exclude also yet.

00:04:50.580 --> 00:04:52.720
Even though that's what that's how I learned.

00:04:52.720 --> 00:04:53.620
It was from him.

00:04:53.620 --> 00:05:02.240
And so anyway, a couple of the reminders of, you know, it the exclude tells you what line,

00:05:02.240 --> 00:05:05.120
but it's really the top of a like a if block.

00:05:05.120 --> 00:05:05.960
Like an if statement.

00:05:05.960 --> 00:05:09.480
It's going to it's going to exclude the entire block that comes after it.

00:05:09.540 --> 00:05:10.500
That's how you do that.

00:05:10.500 --> 00:05:10.560
Nice.

00:05:10.560 --> 00:05:11.140
That's cool.

00:05:11.140 --> 00:05:18.320
And so Hugo went off and went ahead and just wrote an article saying, hey, exclude also with coverage.py is pretty cool.

00:05:18.320 --> 00:05:21.620
And so he shows an example of how to use that.

00:05:21.620 --> 00:05:23.060
So we're linking to all of that.

00:05:23.760 --> 00:05:27.860
It's kind of just a fun story how we all like lined up with that.

00:05:27.860 --> 00:05:28.380
So anyway.

00:05:28.380 --> 00:05:29.760
That's excellent.

00:05:29.760 --> 00:05:32.020
And again, happened on Mastodon.

00:05:32.020 --> 00:05:33.320
Everyone come join us.

00:05:33.320 --> 00:05:33.700
Yeah.

00:05:33.700 --> 00:05:34.440
All right.

00:05:34.440 --> 00:05:34.920
Great.

00:05:34.920 --> 00:05:35.660
Yeah.

00:05:35.660 --> 00:05:36.040
Very cool.

00:05:36.040 --> 00:05:36.520
Very cool.

00:05:36.520 --> 00:05:37.960
All right.

00:05:38.100 --> 00:05:39.300
On to the next one.

00:05:39.300 --> 00:05:42.820
And for me, this is a bit of a JetBrains type of episode.

00:05:42.820 --> 00:05:44.900
I got a couple of topics on there.

00:05:44.900 --> 00:05:46.600
Not sponsored by JetBrains.

00:05:46.600 --> 00:05:47.220
Just a fan.

00:05:47.220 --> 00:05:48.180
Things I think you would like.

00:05:48.180 --> 00:05:50.120
This one is really unique.

00:05:50.120 --> 00:05:52.600
So, Brian, have you heard of WriterSide?

00:05:52.600 --> 00:05:53.200
No.

00:05:53.200 --> 00:05:54.440
I bet you've heard of PyCharm.

00:05:54.440 --> 00:05:55.580
Yeah.

00:05:55.580 --> 00:05:56.260
I use it every day.

00:05:56.260 --> 00:05:56.780
Yeah.

00:05:56.780 --> 00:05:57.220
Same.

00:05:57.220 --> 00:05:58.100
And WebStorm.

00:05:58.100 --> 00:05:58.640
Yeah.

00:05:58.640 --> 00:05:59.040
Right.

00:05:59.040 --> 00:05:59.920
WebStorm.

00:05:59.920 --> 00:06:05.120
And I use the full on IntelliJ to build the Flutter stuff and Android Studio.

00:06:05.400 --> 00:06:09.780
All these are like variations of basically the same foundational IDE core.

00:06:09.780 --> 00:06:13.620
And then they have, you know, focuses, a bunch of plugins and other features built in.

00:06:13.620 --> 00:06:13.980
Right.

00:06:13.980 --> 00:06:14.960
PyCharm's about PyCharm.

00:06:14.960 --> 00:06:19.420
So WriterSide is something that's really new to me in terms of a concept.

00:06:19.420 --> 00:06:21.340
So I wanted to cover it.

00:06:21.340 --> 00:06:22.420
It's in early access.

00:06:22.420 --> 00:06:23.200
Right now it's free.

00:06:23.200 --> 00:06:27.660
Eventually there'll be a free plus paid version like PyCharm Community, PyCharm Pro.

00:06:27.660 --> 00:06:33.660
And WriterSide says write, test, build, and publish the best tutorials, API documentation,

00:06:34.180 --> 00:06:35.220
API references.

00:06:35.220 --> 00:06:38.020
Basically it's an IDE for documentation.

00:06:38.020 --> 00:06:38.740
Ooh.

00:06:38.740 --> 00:06:39.640
Cool, huh?

00:06:39.640 --> 00:06:40.420
And then look at this.

00:06:40.420 --> 00:06:40.800
Test.

00:06:40.800 --> 00:06:42.020
You can even test your docs.

00:06:42.020 --> 00:06:42.760
Okay.

00:06:42.760 --> 00:06:43.220
That's cool.

00:06:43.220 --> 00:06:43.700
Okay.

00:06:43.700 --> 00:06:46.500
So the way it works is you come in and it says, I want a new project.

00:06:46.500 --> 00:06:49.840
You can go and create a new write side project.

00:06:49.840 --> 00:06:53.820
And let me see if I can quick get it to say what.

00:06:53.820 --> 00:06:56.220
Oh, I don't have it installed on this computer.

00:06:57.180 --> 00:06:58.740
Anyway, so you get different kinds.

00:06:58.740 --> 00:06:59.820
It supports Markdown.

00:06:59.820 --> 00:07:03.760
And it also has this cool like semantic concept.

00:07:03.760 --> 00:07:13.440
So clean Markdown is I just write, you know, bracket, URL name, parentheses, URL link, so on.

00:07:13.440 --> 00:07:22.200
But if you have a section like table of contents or some other section you want to put in multiple places, it has a way to import those.

00:07:22.200 --> 00:07:26.700
So you can write them in certain areas and make sure you pull them in.

00:07:26.780 --> 00:07:31.240
It has supports for diagrams, LaTeX, a bunch of cool things, right?

00:07:31.240 --> 00:07:34.800
Even gives you like drop downs out of like existing stuff in there.

00:07:34.800 --> 00:07:36.260
So super cool.

00:07:36.260 --> 00:07:38.480
100 plus on the fly inspections.

00:07:38.480 --> 00:07:39.720
I think this is cool.

00:07:39.720 --> 00:07:42.900
It has the whole docs as code pipeline.

00:07:42.900 --> 00:07:46.860
That's a word I've not heard or as a thing I've not heard.

00:07:46.860 --> 00:07:47.880
But yeah, pretty cool.

00:07:47.880 --> 00:07:50.700
It does rest API docs generation, et cetera.

00:07:50.700 --> 00:07:51.420
What do you think?

00:07:51.420 --> 00:07:53.000
I think I want to try it out.

00:07:53.000 --> 00:07:53.760
That's pretty cool.

00:07:53.760 --> 00:07:54.780
So here's the thing.

00:07:54.780 --> 00:07:59.780
If you use PyCharm, you can just go and install it as a plugin into PyCharm.

00:07:59.780 --> 00:08:01.640
And you don't even have to have a separate ID.

00:08:01.640 --> 00:08:03.960
It just becomes a new feature and so on.

00:08:03.960 --> 00:08:04.500
Okay.

00:08:04.500 --> 00:08:06.720
I'll try to resist thurge to go do that right now.

00:08:06.720 --> 00:08:08.280
But you should.

00:08:08.280 --> 00:08:09.180
Yeah.

00:08:09.180 --> 00:08:10.700
So installs all those different things.

00:08:10.700 --> 00:08:15.520
It's like I said, it's free, free for now, even the premium features.

00:08:15.520 --> 00:08:17.760
But eventually the premium features will go paid.

00:08:17.760 --> 00:08:19.720
I don't know what constitutes premium or not.

00:08:19.720 --> 00:08:23.460
It has Markdown and XML support.

00:08:23.460 --> 00:08:26.380
How do you build and publish your docs?

00:08:26.380 --> 00:08:30.580
It lets you build your documentation locally, produce a zip file, and upload it to GitHub

00:08:30.580 --> 00:08:33.260
pages, AWS, Netlify, and other hosting services.

00:08:33.260 --> 00:08:38.980
If you're using a CI CD server, you can provide a builder script as a Docker container.

00:08:38.980 --> 00:08:39.880
Okay.

00:08:39.880 --> 00:08:41.920
That really is docs as code.

00:08:42.100 --> 00:08:44.300
So anyway, I think this is pretty interesting.

00:08:44.300 --> 00:08:45.620
It'll be cool to see where it goes.

00:08:45.620 --> 00:08:46.560
Yeah.

00:08:46.560 --> 00:08:47.100
Nice.

00:08:47.100 --> 00:08:50.260
Well, I'm currently using PyCharm for writing my blog.

00:08:50.260 --> 00:08:51.140
Okay.

00:08:51.400 --> 00:08:51.600
Yeah.

00:08:51.600 --> 00:08:52.520
And maybe.

00:08:52.520 --> 00:08:53.020
Yeah.

00:08:53.020 --> 00:08:58.880
It already had like some like Markdown preview support and it would launch Hugo before me.

00:08:58.880 --> 00:08:59.920
So yeah.

00:08:59.920 --> 00:09:00.380
Okay.

00:09:00.380 --> 00:09:02.220
It'll be fun to try this out.

00:09:02.220 --> 00:09:02.640
Nice.

00:09:02.640 --> 00:09:02.840
Yeah.

00:09:02.840 --> 00:09:05.500
We both have our blogs on Hugo.

00:09:05.500 --> 00:09:07.440
What's the extension there?

00:09:07.440 --> 00:09:08.080
Dot IO.

00:09:08.080 --> 00:09:09.620
GoHugo.io.

00:09:09.620 --> 00:09:10.520
Super, super good.

00:09:10.520 --> 00:09:15.560
I used Hypora for writing it online, which is a really nice Markdown editor.

00:09:15.560 --> 00:09:17.600
Super clean, but really, really good.

00:09:17.600 --> 00:09:20.120
So either, either of those work, but yeah.

00:09:20.120 --> 00:09:20.580
Yeah.

00:09:20.580 --> 00:09:22.200
Well, I think this documentation thing is cool.

00:09:22.200 --> 00:09:25.440
I can't use anything that doesn't allow Vim syntax.

00:09:25.440 --> 00:09:25.820
So.

00:09:25.820 --> 00:09:27.980
I see you're, you're partly broken.

00:09:27.980 --> 00:09:29.200
I'm partly broken.

00:09:29.200 --> 00:09:30.680
I can appreciate that.

00:09:30.680 --> 00:09:32.100
I can appreciate that.

00:09:32.100 --> 00:09:33.220
All right.

00:09:33.220 --> 00:09:37.440
How about we take a moment and thank our sponsor and tell everyone about Scout APM.

00:09:37.440 --> 00:09:38.420
Yes, let's.

00:09:38.420 --> 00:09:39.640
Let's do it.

00:09:40.160 --> 00:09:41.300
So yeah.

00:09:41.300 --> 00:09:43.400
Thank you to them for supporting this episode.

00:09:43.400 --> 00:09:45.360
They're supporting a good chunk of them.

00:09:45.360 --> 00:09:50.260
So please check them out because supporting them supports us as one of the major ways.

00:09:50.260 --> 00:09:54.920
So if you're tired of spending hours to find the root cause of issues impacting your performance,

00:09:54.920 --> 00:09:58.500
then you owe it to yourself to check out our sponsor, Scout APM.

00:09:58.500 --> 00:10:04.420
Scout APM is the leading, a leading Python application performance monitor tool that helps you identify

00:10:04.420 --> 00:10:07.440
and solve performance abnormalities faster and easier.

00:10:07.440 --> 00:10:19.040
It ties bottlenecks such as memory leaks, slow database queries, background jobs, and the dreaded N plus one query problem that is common in ORMs with lazy loading and more directly to source code.

00:10:19.040 --> 00:10:22.740
So you can spend less time debugging and more time building, especially when it's not errors.

00:10:22.740 --> 00:10:23.940
It's just slow, right?

00:10:23.940 --> 00:10:24.820
That's extra tricky.

00:10:24.820 --> 00:10:29.320
You'll love Scout APM because it's built for developers by developers.

00:10:29.320 --> 00:10:32.380
It makes it easy to set up and deliver insights in less than four minutes.

00:10:32.380 --> 00:10:36.380
Just pause this episode, pop over there, set it up real quick, and you'll be right back.

00:10:36.380 --> 00:10:38.920
And it'll be like you barely miss a beat.

00:10:39.200 --> 00:10:42.560
So start your free trial and get instant insights today.

00:10:42.560 --> 00:10:45.180
Visit pythonbytes.fm/scout.

00:10:45.180 --> 00:10:50.900
And please use the link because that lets them know you came from us and not from the Google.

00:10:50.900 --> 00:10:52.340
More about Google later, actually.

00:10:52.340 --> 00:10:52.940
Yeah.

00:10:52.940 --> 00:10:54.420
So pythonbytes.fm/scout.

00:10:54.420 --> 00:10:55.900
Links in your podcast player show notes.

00:10:55.900 --> 00:10:59.240
Thank you to Scout APM for supporting the show.

00:10:59.240 --> 00:10:59.860
Awesome.

00:10:59.860 --> 00:11:00.300
Thank you.

00:11:00.300 --> 00:11:00.680
Yeah.

00:11:00.680 --> 00:11:01.120
Yep.

00:11:01.120 --> 00:11:01.680
Off to you.

00:11:01.680 --> 00:11:03.920
Brian, what's what you got for your final one?

00:11:04.160 --> 00:11:06.560
I've got actually multiple final ones.

00:11:06.560 --> 00:11:08.400
I've got extra, extra, extra.

00:11:08.400 --> 00:11:09.280
Yeah.

00:11:09.280 --> 00:11:10.340
I love extra, extra, extra.

00:11:10.340 --> 00:11:10.840
Okay.

00:11:10.840 --> 00:11:14.280
So a few little-ish topics.

00:11:14.280 --> 00:11:17.460
Not little-ish to the people involved, of course.

00:11:17.460 --> 00:11:24.100
PSF has announced on October 27th a new community communications manager.

00:11:24.100 --> 00:11:26.980
And what was her name again?

00:11:26.980 --> 00:11:28.080
Marie Norton.

00:11:28.080 --> 00:11:29.640
So congrats, Marie.

00:11:29.640 --> 00:11:34.440
And we look forward to seeing what you're up to as a communication manager.

00:11:34.440 --> 00:11:35.760
So kind of neat.

00:11:35.760 --> 00:11:36.940
I liked it.

00:11:36.940 --> 00:11:38.840
I'm liking that the, I don't know.

00:11:38.840 --> 00:11:41.520
I just like to pay attention to what's going on with the PSF.

00:11:41.520 --> 00:11:45.880
And all those people involved with Python help out a lot.

00:11:45.880 --> 00:11:46.740
So thank you.

00:11:46.740 --> 00:11:51.540
The next extra is there's another podcast.

00:11:51.540 --> 00:11:53.400
We love podcasts.

00:11:53.400 --> 00:11:55.100
We have a few ourselves.

00:11:55.100 --> 00:11:59.340
And the new one that I want to talk about is core.py.

00:11:59.340 --> 00:12:02.500
This, I've listened, it has two episodes out so far.

00:12:02.500 --> 00:12:04.240
And it's two of our favorite people.

00:12:04.240 --> 00:12:04.680
Pablo.

00:12:04.680 --> 00:12:05.480
Okay.

00:12:05.480 --> 00:12:06.580
I'm not going to try to pronounce.

00:12:06.580 --> 00:12:07.840
Do you know how to pronounce that name?

00:12:07.840 --> 00:12:08.340
Pablo.

00:12:08.340 --> 00:12:09.740
Pablo Galindo.

00:12:09.740 --> 00:12:10.660
Okay.

00:12:10.660 --> 00:12:11.140
Pablo.

00:12:11.140 --> 00:12:12.920
And Lucas Lenga.

00:12:12.920 --> 00:12:14.060
Or Luke, Luke Cash.

00:12:14.060 --> 00:12:14.720
Lucas.

00:12:14.720 --> 00:12:15.340
Okay.

00:12:15.340 --> 00:12:16.500
I'm doing bad today.

00:12:16.500 --> 00:12:24.820
So very core contributors and really doing a lot of great work for the Python community.

00:12:24.820 --> 00:12:26.900
So hearing from them is nice.

00:12:27.020 --> 00:12:27.960
The first two episodes.

00:12:27.960 --> 00:12:34.440
The first one was talking about what the first core sprint was in, in Burno.

00:12:34.440 --> 00:12:34.940
Burnio.

00:12:34.940 --> 00:12:35.540
Burno.

00:12:35.540 --> 00:12:36.260
Okay.

00:12:36.260 --> 00:12:36.640
Names.

00:12:36.640 --> 00:12:37.380
Names hard.

00:12:37.380 --> 00:12:41.460
Talking about the first sprint for 313.

00:12:41.460 --> 00:12:42.780
So that was kind of interesting.

00:12:42.780 --> 00:12:45.020
All the, all the neat stuff they're working on for 313.

00:12:45.420 --> 00:12:51.480
And then the second episode is a complete episode dedicated to talking about the PEP 703,

00:12:51.480 --> 00:12:52.320
removing the GIL.

00:12:52.320 --> 00:12:54.280
I think we talked about this last week.

00:12:54.280 --> 00:12:59.480
It was either last week or the week before, but, removing the gill, kind of going

00:12:59.480 --> 00:13:01.460
on as a flag.

00:13:01.460 --> 00:13:07.700
so an optional thing for 313, but, there's a lot of, there's a lot of information around

00:13:07.700 --> 00:13:07.880
there.

00:13:07.960 --> 00:13:11.220
There's a, and it's kind of neat that these, these are long.

00:13:11.220 --> 00:13:13.540
So these, the first one's an hour and 11 minutes.

00:13:13.540 --> 00:13:15.340
The second one's an hour and 14 minutes.

00:13:15.340 --> 00:13:19.180
Kind of a deep dive into some core nitty gritty Python topics.

00:13:19.500 --> 00:13:24.120
And it's kind of, it's, it's nice to hear right from, right from the horse's mouth sort

00:13:24.120 --> 00:13:24.460
of a thing.

00:13:24.460 --> 00:13:24.760
So.

00:13:24.760 --> 00:13:25.580
Yeah, it's awesome.

00:13:25.580 --> 00:13:29.180
Pablo and Lucas are both awesome developers, massive contributors.

00:13:29.180 --> 00:13:30.460
So they'll have good insights.

00:13:30.460 --> 00:13:31.040
Yeah.

00:13:31.040 --> 00:13:33.540
This is news to me as well, but, yeah.

00:13:33.540 --> 00:13:34.100
Very, very cool.

00:13:34.100 --> 00:13:34.640
It's fun.

00:13:34.640 --> 00:13:41.020
the, the last one we talked about, I talked about, a, or I showed

00:13:41.020 --> 00:13:43.520
a regular expression crossword puzzle last week.

00:13:43.520 --> 00:13:48.280
and, Kim, I'm going to, I practiced his name cause it's cool.

00:13:48.420 --> 00:13:49.480
Kim fun week.

00:13:49.480 --> 00:13:50.840
No, I did it wrong.

00:13:50.840 --> 00:13:52.840
Kim fun week there.

00:13:52.840 --> 00:13:55.040
Kim, pass this in.

00:13:55.040 --> 00:13:58.220
It's at reg regex crossword.com.

00:13:58.220 --> 00:14:00.860
And, it's kind of awesome.

00:14:00.860 --> 00:14:06.420
So, I played with it for a while and it actually is, it's serious.

00:14:06.420 --> 00:14:07.280
It's not a joke.

00:14:07.280 --> 00:14:11.920
It's trying to teach you how to do regular expressions through starting with simple and

00:14:11.920 --> 00:14:15.580
then complicated, crossword puzzles around regular expressions.

00:14:15.840 --> 00:14:18.920
And it's, it's like actually kind of fun.

00:14:18.920 --> 00:14:22.860
So I was, I wasted like 20 minutes the other day playing with this.

00:14:22.860 --> 00:14:25.540
So nice.

00:14:25.540 --> 00:14:27.400
And Kim is in the audience.

00:14:27.400 --> 00:14:28.340
Have to say spot on Brian.

00:14:28.340 --> 00:14:28.960
Nicely said.

00:14:28.960 --> 00:14:29.680
Well done.

00:14:29.680 --> 00:14:30.240
Awesome.

00:14:30.240 --> 00:14:33.040
that's, those are my extra, extra, extras.

00:14:33.040 --> 00:14:35.840
Can we go back to the PSF one real quick?

00:14:35.840 --> 00:14:36.280
Yeah.

00:14:36.280 --> 00:14:37.400
PSF.

00:14:37.400 --> 00:14:37.760
Okay.

00:14:37.760 --> 00:14:38.000
Yeah.

00:14:38.000 --> 00:14:40.740
So I also want to say welcome Marie.

00:14:40.740 --> 00:14:41.300
That's awesome.

00:14:41.300 --> 00:14:42.720
Very cool to have you here.

00:14:42.720 --> 00:14:46.300
I think, building out the communications is a big deal.

00:14:46.420 --> 00:14:53.020
We pointed out that the PSF, is now on Mastodon with actually a huge number of followers

00:14:53.020 --> 00:14:53.580
straight away.

00:14:53.580 --> 00:14:54.860
So that's really, really cool.

00:14:54.860 --> 00:14:58.900
And probably, probably something to do, with her work.

00:14:58.900 --> 00:15:01.100
Maybe, you know, the timing lines up anyway.

00:15:01.100 --> 00:15:04.860
If she's looking for a project, Brian, what's your domain name?

00:15:04.860 --> 00:15:06.420
What's your, for your blog?

00:15:06.420 --> 00:15:08.580
python test.com.

00:15:08.580 --> 00:15:10.860
Mine's mkennedy.codes.

00:15:10.860 --> 00:15:11.640
Which is cool.

00:15:11.880 --> 00:15:16.180
What do you think the PSF should be blogspot.com?

00:15:16.180 --> 00:15:17.100
Like as in Google?

00:15:17.100 --> 00:15:22.920
Oh, maybe they should, maybe you should like look at getting that a little more like, you

00:15:22.920 --> 00:15:26.200
know, python.org slash blog or blog.python.org.

00:15:26.200 --> 00:15:26.600
I don't know.

00:15:26.600 --> 00:15:28.480
Like just seems like it would give it some more.

00:15:28.480 --> 00:15:29.380
Blogspot.

00:15:29.380 --> 00:15:29.900
Yeah.

00:15:29.900 --> 00:15:31.300
I mean, that's a blast from the past.

00:15:31.300 --> 00:15:33.020
I do appreciate the blast from the past.

00:15:33.020 --> 00:15:35.560
Like it's that and the geocities.

00:15:35.560 --> 00:15:36.520
Pretty awesome.

00:15:36.520 --> 00:15:37.680
Got my blog roll.

00:15:37.680 --> 00:15:39.320
You're just making all kinds of friends.

00:15:39.320 --> 00:15:40.960
I know.

00:15:41.080 --> 00:15:42.080
No, I mean, I'm serious.

00:15:42.080 --> 00:15:45.620
I think it would be like if, if she's looking, she's going to be busy, of course.

00:15:45.620 --> 00:15:50.400
But if like, one of the things I think would be nice is to have like a more like focused,

00:15:50.400 --> 00:15:54.400
proper at home on Python somewhere, somehow blog domain.

00:15:54.400 --> 00:15:55.580
But yeah, maybe not.

00:15:55.580 --> 00:15:57.740
Like blog.psf.org or something.

00:15:57.740 --> 00:15:58.340
Yeah, exactly.

00:15:58.340 --> 00:15:59.140
Something like that.

00:15:59.140 --> 00:15:59.320
Right.

00:15:59.320 --> 00:16:01.440
You probably could set up the custom domains in blogspot.

00:16:01.440 --> 00:16:02.480
Like I know you can't have WordPress.

00:16:02.480 --> 00:16:03.000
Yeah.

00:16:03.000 --> 00:16:05.460
So pretty small, but I think it would be cool.

00:16:05.460 --> 00:16:07.960
I've always thought it should be something like that to learn.

00:16:07.960 --> 00:16:10.700
Just like when you see this stuff posted, it's not always some random blog.

00:16:10.780 --> 00:16:12.740
It's like, this is the official PSF blog.

00:16:12.740 --> 00:16:14.080
I don't mean that as a criticism.

00:16:14.080 --> 00:16:15.640
I mean, it's like, Hey, this is encouragement.

00:16:15.640 --> 00:16:18.020
Like maybe something that shouldn't be too hard.

00:16:18.020 --> 00:16:18.400
Yeah.

00:16:18.400 --> 00:16:18.900
All right.

00:16:18.900 --> 00:16:19.940
You ready for it?

00:16:19.940 --> 00:16:20.820
Now I'm back to criticism.

00:16:20.820 --> 00:16:21.820
You ready for my next one?

00:16:21.820 --> 00:16:22.280
Yeah.

00:16:22.680 --> 00:16:23.180
All right.

00:16:23.180 --> 00:16:23.220
All right.

00:16:23.220 --> 00:16:30.460
So I've said this before, but Google seems to just have, especially the Chrome team in particular,

00:16:30.460 --> 00:16:34.540
but I know this is like intertwined deeply with their ad team.

00:16:34.540 --> 00:16:36.840
And you know, those two things largely make up Google.

00:16:36.840 --> 00:16:42.940
So they have this premise that I think is really just not the right way to think about the internet.

00:16:42.940 --> 00:16:50.040
And the premise is the internet should be constructed so that users can be identified, tracked and retargeted and hence resold.

00:16:50.040 --> 00:16:52.620
That is the, that is how the internet should be.

00:16:52.620 --> 00:16:53.780
But you know what?

00:16:53.780 --> 00:16:54.620
Privacy is important.

00:16:54.620 --> 00:16:56.620
So how do we make those two things congruent?

00:16:56.620 --> 00:17:10.840
And I just strongly disagree with the fact that the internet should be constructed in a way to sell people on purpose to, to resell information about people, to retarget them, to track them, to create like shadow profiles of them.

00:17:10.840 --> 00:17:11.380
All right.

00:17:11.380 --> 00:17:23.140
But there's now been three separate ways in which the web team have tried to reimagine how the web fundamentally works so that that premise holds so that that holds true.

00:17:23.140 --> 00:17:23.640
Right.

00:17:23.820 --> 00:17:32.160
So they started out with, we talked about it way back when was flock federated learning of cohorts, which went nowhere.

00:17:32.160 --> 00:17:35.340
Cause people are like, do I really want to be grouped into these?

00:17:35.340 --> 00:17:40.060
Be told that I'm in this, this group or that group, like, Hey, here comes the divorced guys.

00:17:40.060 --> 00:17:41.340
Let's see what they can do.

00:17:41.340 --> 00:17:42.640
Or, you know, right.

00:17:42.640 --> 00:17:44.700
You name it, whatever a group it is.

00:17:44.700 --> 00:17:45.420
That's not ideal.

00:17:45.420 --> 00:17:45.700
Right.

00:17:45.700 --> 00:17:52.140
And then they came up with something called privacy sandbox, which also went nowhere, but it was based on the same basic premise.

00:17:52.140 --> 00:17:58.740
Like we're going to get rid of cookies, but how do we set up things when cookies are gone so that we can still retarget and track you.

00:17:58.740 --> 00:18:06.560
Now, the last attempt was this thing called web integrity, and it's been kind of sold as DRM for the web.

00:18:06.780 --> 00:18:17.300
So what they can do is they can say, we only are going to this website will only allow browsers that like integrate with this web integrity thing and can prove who they are.

00:18:17.300 --> 00:18:21.620
And we accept that browser to visit our website to show the HTML.

00:18:21.620 --> 00:18:29.700
Otherwise it'll say, no, you're using Vivaldi and we don't think Vivaldi belongs on your page or you're using this phone browser or whatever.

00:18:29.700 --> 00:18:30.020
Right.

00:18:30.020 --> 00:18:34.120
And the idea was, it was not terrible.

00:18:34.120 --> 00:18:38.920
It was like trying to prevent people from, scraping sites illegally.

00:18:38.920 --> 00:18:44.960
It was trying to prevent them, like robots from doing other bad things, phishing scams and, and so on.

00:18:44.960 --> 00:18:53.800
But it also was like, we need to individually fingerprint and identify every single user with like a unique ID.

00:18:53.800 --> 00:18:54.640
That'd be nice.

00:18:54.640 --> 00:18:55.000
Wouldn't it?

00:18:55.000 --> 00:18:55.800
We can just have that.

00:18:55.800 --> 00:19:00.200
I mean, other companies don't get the third party cookie, but we get this global one.

00:19:00.200 --> 00:19:00.480
Right.

00:19:00.480 --> 00:19:02.420
And so guess what?

00:19:02.420 --> 00:19:08.380
The third attempt has been like fought off and defended and it's no.

00:19:08.380 --> 00:19:16.440
So Chrome, the news is Chrome will not be proceeding with web integrity, integrity API being by many to be or a DRM.

00:19:16.440 --> 00:19:27.720
And if you go and check out, like, sort of not the cancellation announcement, but just the analysis of this over on Ars Technica, it's, not ideal.

00:19:27.860 --> 00:19:34.040
Like some of the quotes are, user, one user calls the idea absolutely unethical and against the open web.

00:19:34.040 --> 00:19:37.300
Another one says they cannot believe this is even being proposed.

00:19:37.300 --> 00:19:43.640
A third still says, have you ever stopped to consider speaking to Google or Chrome team that you're the bad guys?

00:19:43.640 --> 00:19:45.520
Like it's crazy.

00:19:45.520 --> 00:19:48.220
So anyway, three strikes.

00:19:48.220 --> 00:19:49.180
Are they out at Google?

00:19:49.180 --> 00:19:50.120
Will they, will they stop?

00:19:50.120 --> 00:19:51.260
Come up with something else.

00:19:51.260 --> 00:19:51.860
Yeah.

00:19:51.860 --> 00:19:55.860
But all of these attempts are because of that, that core assumption of the web.

00:19:55.860 --> 00:19:58.660
You must be able to track and target people.

00:19:58.660 --> 00:20:00.360
So now how can we make privacy?

00:20:00.360 --> 00:20:04.320
Like, wait, wait, wait, let's, can we just not like, let's not do that.

00:20:04.320 --> 00:20:04.820
Yeah.

00:20:04.820 --> 00:20:10.820
Like the way we sell ads is we have, we have content and we sell ads that are related to that content.

00:20:10.820 --> 00:20:11.800
We don't track people.

00:20:11.800 --> 00:20:12.700
We don't retarget them.

00:20:12.700 --> 00:20:15.920
And Google could just as they know what is on pages.

00:20:16.080 --> 00:20:18.820
They have like the biggest search index in the world.

00:20:18.820 --> 00:20:25.400
They could sell ads based on the content of the videos of the, of what's on the page.

00:20:25.400 --> 00:20:36.640
But instead they keep trying to like take their biggest browser and turn them into like super spy machines so that they can get like, you know, a few more percent ad revenue by retargeting and selling that stuff.

00:20:36.640 --> 00:20:39.120
So it's, I, for one, like it.

00:20:39.120 --> 00:20:50.440
Now, as a content creator myself, the, there is some stuff that I kind of get, I don't want to track people, but I do want to know like which pages are popular and which ones are not.

00:20:50.440 --> 00:20:55.080
If a, if a blog post is does well or does not do well, which ones do better.

00:20:55.080 --> 00:20:57.880
And I'd like those numbers to be kind of valid.

00:20:57.880 --> 00:21:00.900
It would be great if there weren't bots and stuff like that.

00:21:00.900 --> 00:21:03.740
if there's a way to do that.

00:21:03.740 --> 00:21:08.300
So that, that premise of, can we figure out what's popular and what's not?

00:21:08.300 --> 00:21:12.300
That's, I think that's fine, but we don't need to track individual people.

00:21:12.300 --> 00:21:18.160
I mean, I was starting to imagine if, if this was in the rest of your life, like you're just walking down the street and you think about something.

00:21:18.260 --> 00:21:25.100
So you look up and, and then you get home and Google says, Hey, I noticed that you were looking at flags the other day.

00:21:25.100 --> 00:21:27.260
So here's a bunch of flags that you could buy.

00:21:27.260 --> 00:21:28.740
I'm like, I wasn't looking at it.

00:21:28.740 --> 00:21:30.460
I was just glancing in that direction.

00:21:30.460 --> 00:21:31.540
It was colorful.

00:21:31.540 --> 00:21:32.180
I'm sorry.

00:21:32.180 --> 00:21:34.400
You know?

00:21:34.400 --> 00:21:35.780
Yes, exactly.

00:21:35.780 --> 00:21:36.640
Exactly.

00:21:36.640 --> 00:21:37.480
It's yeah.

00:21:37.480 --> 00:21:38.740
That's a lot like that.

00:21:38.740 --> 00:21:45.500
And, Christian also out there points out in a pretty interesting angle from blogspot that, Google may kill it off at any time.

00:21:45.500 --> 00:21:46.000
Right.

00:21:46.060 --> 00:21:50.860
That's like one of, one of the Google things like reader it's out Gmail, old Gmail.

00:21:50.860 --> 00:21:51.240
It's out.

00:21:51.240 --> 00:21:52.480
We're going to give you our inbox.

00:21:52.480 --> 00:21:53.260
We're going to cancel that.

00:21:53.260 --> 00:21:53.860
Give you the new one.

00:21:53.860 --> 00:21:54.000
Right.

00:21:54.000 --> 00:21:58.860
There's just like, there's not a lot of long-term support to a lot of the Google projects.

00:21:58.860 --> 00:22:00.140
And so they might decide it.

00:22:00.140 --> 00:22:00.480
Yeah.

00:22:00.480 --> 00:22:02.080
It's not worth us to focus on anymore.

00:22:02.080 --> 00:22:02.940
So yeah.

00:22:02.940 --> 00:22:03.660
Proactive.

00:22:03.660 --> 00:22:04.340
It would be better.

00:22:04.340 --> 00:22:07.340
I'm sure they would give a pretty good runway, but still.

00:22:07.340 --> 00:22:08.040
Yeah.

00:22:08.040 --> 00:22:08.740
That's a good point.

00:22:08.740 --> 00:22:10.100
It is a good point.

00:22:10.700 --> 00:22:11.180
All right.

00:22:11.180 --> 00:22:13.380
You had your extra, extra, extra moment.

00:22:13.380 --> 00:22:15.000
Do you have more extras?

00:22:15.000 --> 00:22:16.360
I do have more extras.

00:22:16.360 --> 00:22:16.760
All right.

00:22:16.760 --> 00:22:17.440
Just a couple.

00:22:17.440 --> 00:22:17.980
Okay.

00:22:17.980 --> 00:22:24.500
So, I am working on the second phase of the complete pytest course, working with

00:22:24.500 --> 00:22:29.860
projects and I'm just, I just recorded all of the mocking, chapter and I should get

00:22:29.860 --> 00:22:32.820
have that, up, I'm going to edit it tonight.

00:22:32.820 --> 00:22:35.200
So it should be up shortly, either today or tomorrow.

00:22:35.200 --> 00:22:36.420
I'll have the mocking.

00:22:36.580 --> 00:22:39.700
And I know mocking is a hard thing to get your head around.

00:22:39.700 --> 00:22:41.180
So this was a fun one to record.

00:22:41.180 --> 00:22:42.380
So that'll be cool.

00:22:42.380 --> 00:22:45.960
I also wanted to, shout out to PyCharm.

00:22:45.960 --> 00:22:47.360
we talked about JetBrains.

00:22:47.360 --> 00:22:52.920
PyCharm is, helping promote this course by, giving me a whole bunch of, coupon

00:22:52.920 --> 00:22:55.060
codes so that people can try out PyCharm Pro.

00:22:55.060 --> 00:22:59.920
so if you're in the course, send me a note to say, Hey, I want to try PyCharm Pro

00:22:59.920 --> 00:23:04.300
and I'll send you a, a free code to try it out for a few months.

00:23:04.300 --> 00:23:04.800
Yeah, that's cool.

00:23:04.800 --> 00:23:09.980
the other thing with PyCharm is they're going to do, they invited me on their

00:23:09.980 --> 00:23:10.880
webinar series.

00:23:10.880 --> 00:23:17.520
I'm going to do, do, do enough testing by test to the rescue webinar on November 21st.

00:23:17.520 --> 00:23:22.320
So if you'd like to hang out with me even more than you do on Tuesdays, Hey, it's a Tuesday

00:23:22.320 --> 00:23:25.080
also, next Tuesday, you can hang out with me twice.

00:23:25.080 --> 00:23:30.600
so, or actually the Tuesday after the two Tuesdays, next Tuesday, hanging out with you

00:23:30.600 --> 00:23:31.300
zero times.

00:23:31.300 --> 00:23:31.540
Yeah.

00:23:31.540 --> 00:23:32.200
Zero times.

00:23:32.200 --> 00:23:33.300
And then we'll make up for it.

00:23:33.300 --> 00:23:34.160
So exactly.

00:23:34.320 --> 00:23:34.760
That's awesome.

00:23:34.760 --> 00:23:36.580
That's, it looks like a really good webcast.

00:23:36.580 --> 00:23:38.720
and Steven got my picture on it somewhere.

00:23:38.720 --> 00:23:39.560
There it is.

00:23:39.560 --> 00:23:40.100
Neat.

00:23:40.100 --> 00:23:41.340
Anyway.

00:23:41.340 --> 00:23:42.660
how about you?

00:23:42.660 --> 00:23:43.340
Do you have any extras?

00:23:43.340 --> 00:23:45.200
I do have some extras.

00:23:45.200 --> 00:23:46.220
Let's see.

00:23:46.220 --> 00:23:50.440
So just real time follow up, by the way, check out killed by google.com.

00:23:50.440 --> 00:23:51.940
Oh God.

00:23:51.940 --> 00:23:54.600
Google podcast was just killed.

00:23:54.600 --> 00:23:55.960
Google domains was killed.

00:23:55.960 --> 00:23:57.540
pixel pass was killed.

00:23:57.540 --> 00:24:00.080
let's see what else we got.

00:24:00.080 --> 00:24:02.140
YouTube stories, et cetera, et cetera.

00:24:02.140 --> 00:24:05.680
So there's just, you know, there's a, like, look at the size of that scroll bar, Brian.

00:24:05.680 --> 00:24:12.360
I mean, to be fair, they try out a lot of stuff, but some of the stuff like, like was going for a long time.

00:24:12.360 --> 00:24:15.400
Like Google bookmarks 2005 to 2021.

00:24:15.400 --> 00:24:17.640
And they're just like, yeah, we don't want to do it anymore.

00:24:17.640 --> 00:24:19.480
yeah, well, exactly.

00:24:19.480 --> 00:24:22.080
And I think it's, it's fair.

00:24:22.080 --> 00:24:37.540
there's a really interesting blog post by, the, somebody who was on the Google docs team who talked about how a lot of, a lot of big tech companies and being on the Google docs team was clearly inside Google.

00:24:37.680 --> 00:24:55.800
Said that, look, a lot of this stuff happens because the culture is about like value promoting and sort of giving raises and advances to folks when they create something new and powerful, not just maintaining and polishing something that's around.

00:24:55.800 --> 00:25:07.240
So there, apparently there's something about how, how credit is given for say maintaining Google inbox versus building some new other thing that would replace it.

00:25:07.240 --> 00:25:07.680
Right.

00:25:07.680 --> 00:25:11.920
that seems to be a little bit more value according to the guy from the inside, not me.

00:25:12.180 --> 00:25:12.340
Hmm.

00:25:12.340 --> 00:25:12.800
All right.

00:25:12.800 --> 00:25:14.540
But that's just, throwing that out there.

00:25:14.540 --> 00:25:15.520
Oh, what's up.

00:25:15.520 --> 00:25:15.800
Okay.

00:25:15.800 --> 00:25:17.540
So I got a bunch of small ones here.

00:25:17.540 --> 00:25:18.760
Let's talk about them real quick.

00:25:18.760 --> 00:25:20.660
This is just a shout out to century.

00:25:20.660 --> 00:25:23.080
You know, century, it's been a sponsor for on the show.

00:25:23.080 --> 00:25:27.060
He said, we just gave $500,000 to open source maintainers.

00:25:27.060 --> 00:25:30.920
So I just wanted to give them a little bit of a shout out and a little bit of credit.

00:25:30.920 --> 00:25:32.140
Say, awesome.

00:25:32.140 --> 00:25:34.300
Well done century century itself being open source.

00:25:34.300 --> 00:25:36.600
And then I'm also paying it for like this.

00:25:36.600 --> 00:25:37.520
So I think that's pretty cool.

00:25:37.520 --> 00:25:38.000
Yeah.

00:25:38.000 --> 00:25:38.640
That is neat.

00:25:38.640 --> 00:25:39.040
Yeah.

00:25:39.040 --> 00:25:39.760
That is quite neat.

00:25:39.760 --> 00:25:42.160
we talked about, you talked about,

00:25:42.160 --> 00:25:48.760
rough and the integration, the basically Ruff format and it being near, near ready.

00:25:48.760 --> 00:25:54.900
And I said, okay, well, what are the settings that actually give you all the features of reformat

00:25:54.900 --> 00:25:59.260
code and those types of things, but based on rough instead of what's just kind of built into

00:25:59.260 --> 00:26:01.940
PyCharm, which is fine, but it doesn't do Ruff formatting.

00:26:01.940 --> 00:26:06.340
So I'm going to share a link to a picture that shows you all the settings.

00:26:06.340 --> 00:26:11.720
So in PyCharm, if you get the rough extension and you say run ruff when code is reformatted,

00:26:12.140 --> 00:26:16.660
that is command alt L or control alt L. Like you hit that, that used to run PyCharm's

00:26:16.660 --> 00:26:21.000
formatter. Now it just runs rough slash space format on the file. Cool. Right.

00:26:21.000 --> 00:26:21.460
Yeah.

00:26:21.460 --> 00:26:25.820
Yeah. And you can also say show rule on code inspection, which like you hover over, it'll

00:26:25.820 --> 00:26:30.560
show you the rough rule that's violated. use Ruff format that when you have to check

00:26:30.560 --> 00:26:34.240
or it, it only inspects it, it doesn't actually do anything. And then you can specify the rough

00:26:34.240 --> 00:26:38.880
executable. it'll prefer to use the one in your virtual environment if you have one,

00:26:38.880 --> 00:26:42.840
but you can also like, you can see I have a global pip X rough installed. So if I don't

00:26:42.840 --> 00:26:46.300
have it in the project, I don't really care. It's just a format, you know? So anyway, if

00:26:46.300 --> 00:26:50.980
people want to get it going, that's the, that's the magic right there. Get the rough plugin and

00:26:50.980 --> 00:26:51.740
then check those boxes.

00:26:51.740 --> 00:26:55.540
How have I not thought to do a pip X on that yet? That's okay.

00:26:55.540 --> 00:26:57.400
Right. Cause you never import rough, right?

00:26:57.400 --> 00:27:03.280
No. Right. Yeah. Yeah. It's not a tight, like py test, you could pip exit, but you end

00:27:03.280 --> 00:27:08.740
up a lot of times wanting some feature of the actual library in yours, in your code. Right.

00:27:08.740 --> 00:27:13.020
But with rough, you just want to run it. So yeah. The only reason I can see to keep it in

00:27:13.020 --> 00:27:17.400
your virtual environment is if you want to maybe pin it to a lower version, like when it did

00:27:17.400 --> 00:27:21.420
not change at all for some reason, but other than that. Yeah. All right. What else we got?

00:27:21.420 --> 00:27:27.520
Back to PyCharm one more time. I told you this kind of the JetBrains episode, but in the pro

00:27:27.520 --> 00:27:33.040
version, have you ever noticed now that they have that little, like three stars AI helper thing,

00:27:33.040 --> 00:27:37.720
Brian? Yeah. Played with it. Played with it a little bit. One of the things I don't use it very

00:27:37.720 --> 00:27:41.700
much for coding. Surprisingly, it's like, I don't know. It seems like it should be awesome. And I just

00:27:41.700 --> 00:27:47.460
don't use it. But what I started, I noticed that there's one by the git commit message. So when you go,

00:27:47.460 --> 00:27:50.840
you make a bunch of changes and you could go type out what those changes were, or you just press that little

00:27:50.840 --> 00:27:55.680
button. It's kidding. It used to be like, we have changed these files. I'm like, okay, great. Well,

00:27:55.680 --> 00:27:59.060
I could, I could tell you that, like, that's not that useful, but it's getting really good. I'll

00:27:59.060 --> 00:28:05.760
give you two examples. I'm working on this project. That's doing some text to speech, sorry, speech to

00:28:05.760 --> 00:28:11.900
text processing. It's got like a background service thing. It's using assembly AI. And it was, it also has

00:28:11.900 --> 00:28:16.920
rough working on it. So two different commits. One, I made some changes to this background service thing

00:28:16.920 --> 00:28:20.760
that like just runs jobs because he's like creating transcript can take a while and other

00:28:20.760 --> 00:28:25.260
stuff. Right. Yeah. Which this background service, I should talk about it at some point. It's awesome.

00:28:25.260 --> 00:28:30.040
It's like a infinite loop that runs in the background on an asyncio event loop. So while true,

00:28:30.040 --> 00:28:34.880
but it's processing just async and await, not like threads or other processes or stuff. It's super cool.

00:28:34.880 --> 00:28:39.600
But anyway, the part where it was actually doing all the work, like get me a job, run the job and

00:28:39.600 --> 00:28:44.420
realize, oh, there's no really try accept on that. And if it crashes, it'll like take that event loop down.

00:28:44.420 --> 00:28:49.500
So I just put try accept around those and a few other pieces. And so I just hit, what did I do? And it said,

00:28:49.620 --> 00:28:54.120
the core commit message was add exception handling in the background service.py.

00:28:54.120 --> 00:28:59.500
And then it explained in a detailed message, part of the commit, introduce, try accept blocks to handle

00:28:59.500 --> 00:29:04.100
potential exceptions and pending jobs, start jobs processing and run pending job methods in the

00:29:04.100 --> 00:29:08.220
background service. This change enhances error handling and makes the service more robust by

00:29:08.220 --> 00:29:13.720
preventing crashes. If a job or episode cannot be fetched or if an unknown job action is encountered,

00:29:13.720 --> 00:29:19.660
job action is an, it's an enumeration that it has a match clause on. Wow. And the default case

00:29:19.660 --> 00:29:25.340
raises an exception. That's nuts, right? Yeah. Then another one, I added assembly AI to the

00:29:25.340 --> 00:29:30.900
requirements via pip-tools. And then pip-tools also updated rough while it did it back to that.

00:29:30.900 --> 00:29:35.720
And so that's what it says. That's the commit message basically. And then it says this commit

00:29:35.720 --> 00:29:41.420
includes the addition of assembly AI package as part of the requirements.txt file required to introduce

00:29:41.420 --> 00:29:46.460
new speech to text features in our application. Okay. I didn't tell it that that's awesome. Right.

00:29:46.660 --> 00:29:53.820
And then rough, the rough version is also updated from a 0.1.3 to 0.4 due to bug fixes and

00:29:53.820 --> 00:29:57.400
still building improvements in the new version. I'm guessing it's getting that from the change log

00:29:57.400 --> 00:30:02.720
and it also adds, added new dependencies based on assembly AI that that's all just, I did work for

00:30:02.720 --> 00:30:08.180
half an hour and I pushed the button. Okay. So this is really pretty cool, but it reminds me of that comic

00:30:08.180 --> 00:30:14.240
where like there's one person that says I've got three bullet points and it expands it into these

00:30:14.240 --> 00:30:19.160
three paragraphs. Yes. And then you do it. The other, and then the person on the other end is like,

00:30:19.160 --> 00:30:23.300
saying this is so cool. I can take this, this long text and I can make it into three bullet points.

00:30:23.300 --> 00:30:28.920
Yeah. What you see on the screen, the bolded text, the short versions, that's what shows up in

00:30:28.920 --> 00:30:33.560
the git commit message. And then it has like, this is the, if you expand the commit for more details,

00:30:33.560 --> 00:30:38.820
this is what it says. Okay. Okay. That's pretty cool. It's not as in your face as it could have been,

00:30:38.980 --> 00:30:43.900
but I was super impressed. I'm like, dang, that's, that's pretty good. Yeah. Right. The fact

00:30:43.900 --> 00:30:48.140
that it knew there's going to be an exception raised if the enumeration called job action,

00:30:48.140 --> 00:30:52.720
a string is passed wrong. And then it says, that's why I added the exception block. Like that's,

00:30:52.720 --> 00:30:56.720
that's pretty good. And actually this is the part where I really am looking forward to playing with.

00:30:56.720 --> 00:31:02.180
I, I, I'm a lot of my work. I already know what I'm doing. I don't need to look up how to do stuff

00:31:02.180 --> 00:31:07.120
too much. I mean, yes. Yeah. I'm kind of with you on that, but yeah, but, but the,

00:31:07.120 --> 00:31:13.260
what did I do in the last day? What all did I do for, for like a, a commit message? That's,

00:31:13.260 --> 00:31:16.220
that's a great thing. I got, I got, can't wait to play with this.

00:31:16.220 --> 00:31:21.100
Yeah. That's a pretty cool. I just hit the thing by the commit message. All right. Carrying on with,

00:31:21.100 --> 00:31:28.120
carrying on with the LLM type stuff. So I talked about GPT for all, and I said, it's a really cool

00:31:28.120 --> 00:31:32.200
app that you can run. I already talked about it, but like, you know, run locally, it doesn't cost

00:31:32.200 --> 00:31:38.200
money. And also it doesn't share your data off your machine. All those things are cool. I miss this.

00:31:38.200 --> 00:31:44.560
And it's cool enough that I want to point it out because it's just pretty neat. So with GPT for all,

00:31:44.560 --> 00:31:49.820
one of the things that comes with that is not like in your face from the UI, it's barely visible from

00:31:49.820 --> 00:31:57.800
the UI is it comes with a, a, a rest API. So what you can do is it shows you how to create a fast

00:31:57.800 --> 00:32:05.060
API server and a Docker image that will run the selected model that you want in a Docker image

00:32:05.060 --> 00:32:11.380
and then become an API. So you can program against, if you wanted to use the GPT for all as an API for

00:32:11.380 --> 00:32:16.500
your code or your project or your home server or whatever, just run, create this and run the Docker

00:32:16.500 --> 00:32:23.720
container. And then you have a OpenAI compatible API, but it is running like locally on your system.

00:32:23.720 --> 00:32:24.520
That's pretty neat.

00:32:24.520 --> 00:32:25.520
Using this in that name.

00:32:25.520 --> 00:32:25.980
Yeah.

00:32:26.160 --> 00:32:30.020
So yeah, I won't say more than that, but I'll link to it. People can check it out. All right.

00:32:30.020 --> 00:32:37.240
I have some follow-up from last week on my comments about PyCon requiring masks. And I just, the more I've

00:32:37.240 --> 00:32:40.520
been thinking about this, Brian, you don't have to chime in if you don't want, I totally understand,

00:32:40.520 --> 00:32:46.880
but it just seems really incongruent with the way that things are kind of around us in general.

00:32:47.140 --> 00:32:50.940
And I'm just super disappointed because I've, I don't know. I already spelled out why I think it's

00:32:50.940 --> 00:32:57.340
tricky to go trying to do all the podcast stuff and networking. But you know, I, as I was thinking about

00:32:57.340 --> 00:33:02.800
like what other thing in, in day-to-day life these days requires you'd have a mask. And I couldn't think

00:33:02.800 --> 00:33:09.400
of one, not going to the doctor, not going to schools, not going to shopping. So I thought,

00:33:09.400 --> 00:33:13.720
well, okay, well maybe, maybe I'm, maybe I'm being silly. Maybe it's just like conferences and stuff

00:33:13.720 --> 00:33:18.000
were different. Right. So I Googled as many conferences as I could think of. You have universes

00:33:18.000 --> 00:33:23.560
running right now with some thousand number of attendees, no mask requirement. CES has, you know,

00:33:23.560 --> 00:33:27.500
people say, well, there's 2000 people coming. That's like a lot, right? That could be like a super

00:33:27.500 --> 00:33:33.760
spreader event. You got to not, we got to keep this in mind, Michael, right? CES, 180,000 attendees,

00:33:33.760 --> 00:33:40.620
no mask mandate. South by Southwest, 150,000, none. KubeCon just ran or is running now, 12,000,

00:33:40.620 --> 00:33:48.380
none. Adobe Summit, 10,000 attendees, none. Mobile World Conference in Barcelona, 110,000. Dev Week,

00:33:48.380 --> 00:33:55.240
developer week rather, 2000. Microsoft Ignite next week, 4,000. WWDC, not sure how many people went,

00:33:55.580 --> 00:34:01.480
but this is a many conferences as I could find that I Googled when I thought about this. Not one of them

00:34:01.480 --> 00:34:08.600
has the same policy. So it's worth considering. Again, I think it's, I think it's going to hurt

00:34:08.600 --> 00:34:14.820
attendance and by way of that hurt the support for the PSF. All right. Shall we lighten it up with a

00:34:14.820 --> 00:34:20.700
joke? Yeah. You already had your regular expression game, regular expressions. They're kind of,

00:34:20.700 --> 00:34:25.240
they're kind of magic when they work. It's like, they really are like magic. You're like these couple of

00:34:25.240 --> 00:34:31.840
symbols and it goes into a million word piece of text and it goes, pop, here, here are the seven

00:34:31.840 --> 00:34:37.140
things. And I've even named the little sections of it for you. You can grab it, right? But when you're

00:34:37.140 --> 00:34:41.520
done working on your regular expression and you want to make a change or you want to take someone else's,

00:34:41.520 --> 00:34:45.700
I don't know, I kind of think of them as, as right only. Yeah. How about, how about you?

00:34:45.700 --> 00:34:50.000
Well, I mean, I did learn them while I was writing Pearl. So it kind of goes with the territory.

00:34:50.340 --> 00:34:56.260
Yes. You probably know them better than I do. So the joke and, you know, take this lightheartedly

00:34:56.260 --> 00:35:03.180
as it is. The joke is what is the plural of reg X? Okay. Regrets. Regrets. Regrets.

00:35:03.180 --> 00:35:11.220
Regrets and regrets. They are, they are amazing, but they are also tough to debug. Regrets. I've had a few.

00:35:13.160 --> 00:35:18.840
Exactly. Exactly. Yeah. I got a few of them. All right. Well, that's it for our stuff. Yeah. You got

00:35:18.840 --> 00:35:24.260
anything else? I don't. I think that was a good episode. It was an excellent episode and happy

00:35:24.260 --> 00:35:30.020
birthday. Thanks everyone for seven years. Yeah. That's really incredible. It was pretty cool. We

00:35:30.020 --> 00:35:33.980
had thought about it sooner. I just got a notification like an hour ago that I'm like, Hey, it's the

00:35:33.980 --> 00:35:37.960
birthday. I'm like, Oh, we could have done more Brian, but I think there's plenty. I could wear a hat.

00:35:38.320 --> 00:35:43.320
Yes, exactly. Yeah. Well, great to see you as always. See everybody a couple of weeks.

