WEBVTT

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

00:00:05.880 --> 00:00:11.020
This is episode 388, recorded June 18th, 2024.

00:00:11.020 --> 00:00:12.200
I am Michael Kennedy.

00:00:12.200 --> 00:00:13.240
And I'm Brian Okken.

00:00:13.240 --> 00:00:16.060
And this episode is brought to you by Scout APM.

00:00:16.060 --> 00:00:17.300
Check them out.

00:00:17.300 --> 00:00:20.260
We'll tell you more about them as we get further into the show.

00:00:20.260 --> 00:00:27.360
Brian, you, me, the podcast, we're all Fosstodonians and folks who want to come hang out on Mastodon.

00:00:27.360 --> 00:00:28.640
Doesn't have to be Fosstodon.

00:00:28.640 --> 00:00:29.900
Talked about that last week.

00:00:30.700 --> 00:00:32.380
That's the whole idea of Fosstodon.

00:00:32.380 --> 00:00:35.700
Go wherever you want, but we're happy to invite you to Fosstodon if you want.

00:00:35.700 --> 00:00:42.000
Yeah, find the links to connect us over there or even on X these days as well if you wish.

00:00:42.000 --> 00:00:44.620
A lot of people are still just hanging out over there.

00:00:44.620 --> 00:00:51.380
And listen, watch, participate live in AM Pacific Time on Tuesdays, typically.

00:00:51.380 --> 00:00:54.380
Links in the show notes or on the website.

00:00:54.380 --> 00:01:05.640
Finally, if you want a handcrafted, artisanal Brian Okken special summary and set of links of whatever we talk about, even if you don't listen to that episode, pythonbytes.fm.

00:01:05.640 --> 00:01:06.640
Click on the newsletter.

00:01:06.640 --> 00:01:07.720
Put in your information.

00:01:07.720 --> 00:01:08.740
We won't share it.

00:01:09.020 --> 00:01:11.680
Just want to tell you about what we're up to and keep in touch with you.

00:01:11.680 --> 00:01:12.660
So that's pretty awesome.

00:01:12.660 --> 00:01:14.900
That list keeps growing and people are enjoying it.

00:01:14.900 --> 00:01:16.140
So good work on that, Brian.

00:01:16.140 --> 00:01:17.740
There is a newsletter link.

00:01:17.740 --> 00:01:18.420
That's cool.

00:01:18.420 --> 00:01:18.960
Yeah.

00:01:18.960 --> 00:01:19.460
How about that?

00:01:19.460 --> 00:01:20.060
Nice.

00:01:20.400 --> 00:01:25.560
We also kind of put it under the Friends of the Show thing, but that's a little more indirect, you know?

00:01:25.560 --> 00:01:27.340
Like, okay, you want to sign up for the newsletter?

00:01:27.340 --> 00:01:28.300
Click the newsletter button.

00:01:28.300 --> 00:01:31.560
You can sign up for the newsletter even if you don't like us.

00:01:31.560 --> 00:01:32.200
That's fine.

00:01:32.200 --> 00:01:33.040
Yeah, that's true.

00:01:33.040 --> 00:01:36.300
Yeah, you can just mock the links we put in there everywhere.

00:01:36.300 --> 00:01:37.720
It's pretty much like that.

00:01:37.720 --> 00:01:38.020
The show, too.

00:01:38.020 --> 00:01:38.980
Everyone's welcome.

00:01:38.980 --> 00:01:41.460
There probably are, actually.

00:01:41.460 --> 00:01:43.040
All right.

00:01:43.040 --> 00:01:45.440
Well, what have you brought today?

00:01:45.440 --> 00:01:46.420
All right.

00:01:46.420 --> 00:01:49.060
I want to talk about the PSF election.

00:01:49.060 --> 00:01:51.980
So the Python Software Foundation has elections every year.

00:01:51.980 --> 00:01:56.060
In order to vote, we're going to talk about a little bit around what's going on with this.

00:01:56.060 --> 00:02:03.520
But I want to highlight that you, even if you voted last year, you can't just vote again without doing something.

00:02:03.520 --> 00:02:04.480
And it's not difficult.

00:02:04.480 --> 00:02:06.940
You just have to affirm your membership status.

00:02:06.940 --> 00:02:09.520
So we've got a link in the show notes.

00:02:09.520 --> 00:02:11.060
You just head up.

00:02:11.060 --> 00:02:12.900
We'll talk about the dates a little bit.

00:02:12.900 --> 00:02:14.640
I think maybe the dates are here.

00:02:14.640 --> 00:02:16.640
No, there's another link.

00:02:16.640 --> 00:02:18.520
We have lots of links for you for this.

00:02:18.520 --> 00:02:21.820
But there is the, what are we doing?

00:02:21.820 --> 00:02:23.060
What are we voting on?

00:02:23.060 --> 00:02:25.760
We're voting on the new board of directors.

00:02:25.760 --> 00:02:28.460
And then there's a few bylaws changes.

00:02:28.460 --> 00:02:30.980
So head over to the first link.

00:02:30.980 --> 00:02:32.640
Make sure you're either signed up.

00:02:32.640 --> 00:02:34.400
So the deadlines are right around the corner.

00:02:34.400 --> 00:02:35.520
So it's 25th.

00:02:35.520 --> 00:02:44.620
June 25th is when you have to either sign up to be a member or, if you already are, affirm that you're going to vote.

00:02:44.620 --> 00:02:46.980
So that's the 25th.

00:02:46.980 --> 00:02:56.620
The board election, if you go to the board election, there's a blog post called, it's time to make nominations for the PSF board election.

00:02:56.780 --> 00:02:57.940
It has the timeline.

00:02:57.940 --> 00:03:01.940
This is a great, it's got mostly all that I'm talking about here.

00:03:01.940 --> 00:03:04.080
Their nominations are open.

00:03:04.080 --> 00:03:05.360
They opened on the 11th.

00:03:05.360 --> 00:03:11.040
If you'd like to be nominated or nominate somebody, that is up until the 25th of June.

00:03:11.300 --> 00:03:14.120
So the 25th of June is the close of board nominations.

00:03:14.120 --> 00:03:19.800
It's also the cutoff date to affirm that you're going to vote or eligible to vote or whatever.

00:03:19.800 --> 00:03:21.300
So that's June 25th.

00:03:21.300 --> 00:03:25.440
Then we don't know who's in it because the candidate, it's still open.

00:03:25.440 --> 00:03:26.960
Other people might enter.

00:03:27.840 --> 00:03:35.500
And there's link, there's information in here on like what to include because you'll want some information about like who you are and stuff like that.

00:03:35.500 --> 00:03:37.900
If you want to nominate yourself.

00:03:37.900 --> 00:03:42.900
So the candidates are announced June 27th.

00:03:42.900 --> 00:03:49.000
And then voting starts, voting is from July 2nd to July 16th.

00:03:49.120 --> 00:03:53.380
So voting's in July, but we need to get everything ready in the end of June.

00:03:53.380 --> 00:03:54.940
So that's what's going on here.

00:03:54.940 --> 00:03:58.500
So there's, it's the nominations for the board of directors.

00:03:58.500 --> 00:04:02.000
And there's links about what's going on.

00:04:02.000 --> 00:04:04.540
Oh, there's, there's one other data I wanted to highlight.

00:04:04.540 --> 00:04:09.320
Can't remember where I found this, but there is a, here it is.

00:04:09.320 --> 00:04:13.460
Thinking about running for the board of directors, let's talk.

00:04:13.460 --> 00:04:19.700
There is a June 18th session that you can, office hours where you can find out more information.

00:04:19.700 --> 00:04:24.080
If you, if you're just curious and you'd like to know more, that's a great place to go.

00:04:24.080 --> 00:04:28.400
There is, and then, so it's for the board of directors.

00:04:28.400 --> 00:04:35.680
And then there's, there's also three bylaw changes proposed.

00:04:35.680 --> 00:04:41.060
I think they make sense, but I'm not going to get into the depths of them, but there's a link here.

00:04:41.380 --> 00:04:44.680
Go ahead and check that out about the three things.

00:04:44.680 --> 00:04:47.520
So one of the things that I'm really kind of excited about is this.

00:04:47.520 --> 00:04:52.400
The first one is merging, contributing and managing member classes.

00:04:52.400 --> 00:04:57.600
And I think that's, I think it makes sense because I sometimes have forgot which is which,

00:04:57.600 --> 00:05:00.160
what contributing and managing means.

00:05:00.160 --> 00:05:04.420
And it, I think there's, there's, there's text on all of these.

00:05:04.420 --> 00:05:05.660
So go ahead.

00:05:05.660 --> 00:05:08.180
And then there's discussions going on around this too.

00:05:08.340 --> 00:05:13.180
So anyway, elections coming up, make sure that you've affirmed your voter status.

00:05:13.180 --> 00:05:14.500
If you'd like to vote.

00:05:14.500 --> 00:05:14.980
So.

00:05:14.980 --> 00:05:15.560
Okay.

00:05:15.560 --> 00:05:16.080
Interesting.

00:05:16.080 --> 00:05:20.680
Some of these shed some light on messages I've seen on social media.

00:05:20.680 --> 00:05:22.480
What are, why are people talking about this?

00:05:22.480 --> 00:05:22.940
Oh, okay.

00:05:22.940 --> 00:05:23.300
I see.

00:05:23.300 --> 00:05:24.020
Propose changes.

00:05:24.020 --> 00:05:24.480
Got it.

00:05:24.480 --> 00:05:24.720
Yeah.

00:05:27.460 --> 00:05:29.920
So you know what I would propose, Brian?

00:05:29.920 --> 00:05:30.700
What?

00:05:30.700 --> 00:05:37.240
If you were working for a company and you were having HR issues, let's say, what would you

00:05:37.240 --> 00:05:39.240
say exactly you do here?

00:05:39.240 --> 00:05:39.760
Bob?

00:05:39.760 --> 00:05:40.400
No.

00:05:41.080 --> 00:05:42.640
You're having HR issues.

00:05:42.640 --> 00:05:44.040
I'm a people person.

00:05:44.040 --> 00:05:45.320
I talk to the people.

00:05:45.320 --> 00:05:46.560
Then you just can't talk to the people.

00:05:46.560 --> 00:05:47.080
No.

00:05:47.080 --> 00:05:47.600
Yeah.

00:05:47.600 --> 00:05:48.100
Something like that.

00:05:48.100 --> 00:05:53.640
But anyway, if you were having issues with work and you got fired and you wanted to give

00:05:53.640 --> 00:05:55.460
them the big middle finger on the way out.

00:05:55.460 --> 00:06:00.400
One thing I don't recommend is going to all the GitHub repositories and permanently deleting

00:06:00.400 --> 00:06:06.680
them or deleting the logs or then replacing them with code that mocks the existing employees

00:06:06.680 --> 00:06:07.640
or anything like that.

00:06:07.640 --> 00:06:12.180
There's this character and boys, he seemed like a piece of work.

00:06:12.180 --> 00:06:12.860
Let me tell you.

00:06:12.860 --> 00:06:16.140
Mick Lewis, Daniel Brody, a real, real piece of work.

00:06:16.140 --> 00:06:17.320
Cloud, cloud engineer.

00:06:17.320 --> 00:06:18.600
I don't know what a cloud engineer is.

00:06:18.600 --> 00:06:20.360
I don't know what software developers are.

00:06:20.360 --> 00:06:20.840
I know what.

00:06:20.840 --> 00:06:22.960
Anyway, he's a cloud engineer.

00:06:22.960 --> 00:06:28.880
He was sentenced to two years in prison and a restitution of over half a million dollars

00:06:28.880 --> 00:06:34.560
for wiping the code repositories of his former employer in retaliation to being fired from

00:06:34.560 --> 00:06:35.640
First Republic Bank.

00:06:35.640 --> 00:06:36.260
Wow.

00:06:36.260 --> 00:06:37.680
Wow.

00:06:37.680 --> 00:06:42.000
So probably some kind of discrimination thing or something.

00:06:42.000 --> 00:06:43.840
He really had a reason to be upset.

00:06:43.840 --> 00:06:44.300
No.

00:06:44.300 --> 00:06:45.740
Why was this guy fired?

00:06:45.740 --> 00:06:50.840
The court documents state that Brody's employment was terminated after he violated company policies

00:06:50.840 --> 00:06:55.500
by connecting a USB drive containing pornography to the company computers.

00:06:55.500 --> 00:06:58.660
And then when they tried to get the work computer back.

00:06:58.660 --> 00:07:03.420
You know, after he's done all this stuff to it, like deleted all the things and so on.

00:07:03.420 --> 00:07:06.840
He then reported the laptop stolen.

00:07:06.840 --> 00:07:08.620
Wouldn't give it back.

00:07:08.620 --> 00:07:08.960
Huh.

00:07:08.960 --> 00:07:12.540
Anyway, he may be not having a great time.

00:07:12.540 --> 00:07:14.040
A couple of things he did.

00:07:14.040 --> 00:07:22.960
He ran a malicious script named dar.sh to wipe the FRB servers, deleted Git logs, and Git commit history for that particular script.

00:07:23.220 --> 00:07:26.520
You know, props to him for a little covering of the tracks there with the Git history.

00:07:26.520 --> 00:07:27.440
That was clever.

00:07:28.440 --> 00:07:30.700
I don't know how they figured that out, given that he-

00:07:30.700 --> 00:07:31.900
Not too clever.

00:07:31.900 --> 00:07:33.200
Nah, exactly.

00:07:33.200 --> 00:07:34.000
Exactly.

00:07:34.000 --> 00:07:36.920
I mean, you delete the repo and you still get that figured out somehow.

00:07:36.920 --> 00:07:37.400
Anyway.

00:07:37.400 --> 00:07:41.320
He accessed the GitHub repositories and deleted hosted code.

00:07:41.320 --> 00:07:43.160
He inserted taunts in the code.

00:07:45.200 --> 00:07:45.640
Yeah.

00:07:45.640 --> 00:07:48.960
Anyway, I just thought this was, one, an amusing story.

00:07:48.960 --> 00:07:50.480
A little bit of schadenfreude.

00:07:50.480 --> 00:07:54.780
But also, people, if you're upset with your company, it is not worth it.

00:07:54.780 --> 00:07:56.840
Two years of prison, half a million dollars.

00:07:56.840 --> 00:07:58.620
Just walk away.

00:07:58.620 --> 00:07:59.640
Just walk.

00:07:59.640 --> 00:08:00.480
Just let it be.

00:08:00.480 --> 00:08:01.620
It's not worth the revenge.

00:08:01.620 --> 00:08:03.900
Anyway, let me leave you with that, huh, Brian?

00:08:03.900 --> 00:08:04.780
What do you think of this?

00:08:04.780 --> 00:08:05.280
Is this crazy?

00:08:05.280 --> 00:08:22.540
I think it is, but I also, one of the things I really, okay, I'm not like taking sides here or anything, but something that drives me nuts is a thing that some companies do that say that, like, there's standard non-disclosure agreements for exit interviews.

00:08:22.540 --> 00:08:31.280
And some of them are generally, you can't talk about what you worked on at this company for, say, like a period of six months or a year or something like that.

00:08:31.280 --> 00:08:34.360
Just because you might have proprietary information.

00:08:34.740 --> 00:08:49.620
The thing that drives me nuts is things that say, we're not going to give you any of your severance or a portion of your severance unless you promise to not ever disparage the company forever in the future.

00:08:49.620 --> 00:08:55.540
Things like that are just insidious and like a blight on free speech.

00:08:55.540 --> 00:08:56.580
It's disgusting.

00:08:56.580 --> 00:08:57.120
Yeah.

00:08:57.120 --> 00:08:58.300
I don't like it.

00:08:58.300 --> 00:09:00.800
I know it's a standard practice, but I don't like it.

00:09:00.800 --> 00:09:02.340
I don't like it either.

00:09:02.340 --> 00:09:06.200
I am really happy to hear the non-compete stuff getting shot down.

00:09:06.200 --> 00:09:09.780
I know it's not the same as NDA, but it's in the same category, I feel like.

00:09:09.780 --> 00:09:12.440
Do they do that for people getting fired?

00:09:12.440 --> 00:09:20.240
No, no, no, not for, but, you know, when you get hired, there's traditionally been a lot of non-competes.

00:09:20.240 --> 00:09:25.680
And I think it was getting kind of out of control, like bakery workers or something silly like that, right?

00:09:25.920 --> 00:09:30.420
You know, like really, really stuff that you wouldn't think would be under that purview.

00:09:30.420 --> 00:09:34.840
But I believe that that got federally shot down or is it just California?

00:09:34.840 --> 00:09:35.380
I can't remember.

00:09:35.380 --> 00:09:38.980
But yeah, anyway, maybe this kind of stuff you're talking about, Bill, as well.

00:09:38.980 --> 00:09:41.460
But I don't have a ton of sympathy for this character.

00:09:41.460 --> 00:09:42.140
Yeah.

00:09:42.500 --> 00:09:50.520
Reminds me a little bit of the guy who took down all the JavaScript folks with the npm left pad.

00:09:50.520 --> 00:09:51.160
Yeah.

00:09:51.160 --> 00:09:53.000
And then later was arrested for making bombs.

00:09:53.000 --> 00:09:54.840
You know, it's like, oh, there's that theme here, I see.

00:09:54.840 --> 00:09:57.200
Yeah, not good.

00:09:57.200 --> 00:09:58.560
Yeah, I'm pretty sure that's the same person.

00:09:58.560 --> 00:10:00.600
There's definitely a person with the same name in the same area.

00:10:00.800 --> 00:10:01.020
Okay.

00:10:01.020 --> 00:10:01.520
Hey.

00:10:01.520 --> 00:10:04.880
You know what is awesome and is not going to get you into trouble?

00:10:04.880 --> 00:10:06.080
Scout APM.

00:10:06.080 --> 00:10:06.780
Let's talk about it.

00:10:06.780 --> 00:10:12.980
So if you are tired of spending hours trying to find the root cause of issues impacting your performance,

00:10:12.980 --> 00:10:15.820
then you owe it to yourself to check out Scout APM.

00:10:15.820 --> 00:10:20.300
They're a leading Python application performance monitoring tool, APM,

00:10:20.300 --> 00:10:25.080
that helps you identify and solve performance abnormalities faster and easier.

00:10:25.080 --> 00:10:30.380
Scout APM ties bottlenecks such as memory leaks, slow database queries, background jobs,

00:10:30.500 --> 00:10:36.000
and the dreaded N plus one queries that you can end up if you do lazy loading in your ORM.

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

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

00:10:40.740 --> 00:10:42.180
So you can find out things like that.

00:10:42.180 --> 00:10:44.020
And it links it back directly to source code.

00:10:44.020 --> 00:10:49.580
So you can spend less time in the debugger and healing logs and just finding the problems and moving on.

00:10:49.580 --> 00:10:52.680
And you'll love it because it's built for developers by developers.

00:10:52.680 --> 00:10:54.340
It makes it easy to get set up.

00:10:54.340 --> 00:10:56.860
Seriously, you can do it in less than four minutes.

00:10:56.860 --> 00:10:57.700
So that's awesome.

00:10:58.000 --> 00:11:00.760
And the best part is the pricing is straightforward.

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

00:11:06.220 --> 00:11:08.720
And I just learned this, Brian.

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

00:11:13.860 --> 00:11:18.400
So if you're an open source maintainer and you want to have Scout APM for that project,

00:11:18.400 --> 00:11:21.320
just shoot them a message or something on their pricing page about that.

00:11:21.660 --> 00:11:25.200
So you can start your free trial and get instant insights today.

00:11:25.200 --> 00:11:27.880
Visit pythonbytes.fm/scout.

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

00:11:30.140 --> 00:11:31.560
And please use that link.

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

00:11:35.520 --> 00:11:37.120
And then they'd stop supporting the show.

00:11:37.120 --> 00:11:39.680
So please use our link pythonbytes.fm/scout.

00:11:39.680 --> 00:11:40.620
Check them out.

00:11:40.620 --> 00:11:42.580
It really supports the show.

00:11:42.580 --> 00:11:43.240
Indeed.

00:11:43.240 --> 00:11:45.300
Brian, what's your second one?

00:11:45.800 --> 00:11:49.400
I'd like to talk about imports right now.

00:11:49.400 --> 00:11:53.260
So if we're just importing a package.

00:11:53.260 --> 00:11:54.500
Is this like tariffs and stuff?

00:11:54.500 --> 00:11:54.960
What are we talking?

00:11:54.960 --> 00:11:55.980
No, no, no.

00:11:55.980 --> 00:11:57.720
Importing code into your own code.

00:11:57.720 --> 00:11:59.940
So imports are normally difficult.

00:11:59.940 --> 00:12:02.420
You just say import and the package name you want to import.

00:12:02.420 --> 00:12:03.060
No, no, no.

00:12:03.060 --> 00:12:07.980
The package has to be installed already or a standard library thing, of course, like import

00:12:07.980 --> 00:12:10.440
or math or something.

00:12:10.440 --> 00:12:11.960
I'm blanking right now.

00:12:11.960 --> 00:12:12.520
It's terrible.

00:12:14.520 --> 00:12:21.060
There is a blog post called Adam Johnson, which is talking about like, what if you don't

00:12:21.060 --> 00:12:22.000
want to just use the import?

00:12:22.000 --> 00:12:23.880
If you want to import it as an object or something.

00:12:23.880 --> 00:12:28.180
And let's say you have a string to describe the package that you want to import.

00:12:28.180 --> 00:12:34.400
There's a thing that I didn't know about called the packageutil.resolve name.

00:12:34.400 --> 00:12:37.700
And this is actually pretty cool.

00:12:37.700 --> 00:12:42.020
So what you do is it's in packageutil is part of the standard library.

00:12:42.020 --> 00:12:44.660
And you say packageutil.resolve name.

00:12:44.660 --> 00:12:45.660
And then you give it a string.

00:12:45.660 --> 00:12:51.040
And it's got it's like it's like a package name that is also something that's installed

00:12:51.040 --> 00:12:57.900
or in something in it, like a top level item, like the example is path lib and capital

00:12:57.900 --> 00:12:59.320
path, the path object.

00:12:59.320 --> 00:13:04.500
But I tried it on one of my own projects of just like, let's say I've got some third party

00:13:04.500 --> 00:13:07.000
code that I want to import just something from it.

00:13:07.000 --> 00:13:08.920
But I don't want to import it into the namespace.

00:13:08.920 --> 00:13:12.160
I want to just import one thing out of there into an object.

00:13:12.160 --> 00:13:13.280
And this is really cool.

00:13:13.280 --> 00:13:15.440
The whole thing resolves and it's from a string.

00:13:15.440 --> 00:13:21.060
So you give it a string with this colon in the middle and it creates it.

00:13:21.060 --> 00:13:23.180
It creates you've got an object.

00:13:23.180 --> 00:13:25.020
Why is this helpful?

00:13:25.020 --> 00:13:31.120
Well, I don't know how other people are using it, but I'm using it for things like testing

00:13:31.120 --> 00:13:33.720
and stuff that I don't want to like clutter the entire namespace.

00:13:33.720 --> 00:13:35.440
I just want one object from something.

00:13:35.440 --> 00:13:36.960
So so there's that.

00:13:36.960 --> 00:13:40.460
Now, there's a note here that says the thing that you're you're importing.

00:13:40.460 --> 00:13:46.240
Importing can be it can be a class from the package or a function or module or really any

00:13:46.240 --> 00:13:50.060
top level thing object within the package.

00:13:50.060 --> 00:13:52.280
You can just resolve that and bring it in.

00:13:52.280 --> 00:13:57.720
If you're doing if you're going to grab the whole module, you can also use import lib import

00:13:57.720 --> 00:14:01.300
module, of course, you can use that as well to import a thing.

00:14:01.300 --> 00:14:03.260
And it's a little bit different syntax.

00:14:03.260 --> 00:14:05.880
You just give it the give it the name of the package.

00:14:05.880 --> 00:14:13.620
So there was a note at the top that says Django and some other frameworks allow you to do things

00:14:13.620 --> 00:14:15.760
like this to configure something based on a string.

00:14:15.760 --> 00:14:18.160
And I think this is pretty cool.

00:14:18.160 --> 00:14:20.720
I'm one of the places where I'm considering.

00:14:20.720 --> 00:14:21.300
Yeah.

00:14:21.300 --> 00:14:24.560
Anyway, I've got lots of places and tests that I'm considering using this.

00:14:24.560 --> 00:14:27.040
But but I guess I didn't know about it.

00:14:27.040 --> 00:14:27.660
It's pretty neat.

00:14:27.660 --> 00:14:31.800
So, you know, one area that might be useful that comes to mind outside of testing or in

00:14:31.800 --> 00:14:35.880
addition to testing would be some kind of like plug in extension system.

00:14:35.880 --> 00:14:42.000
So you say any any package that gets listed in this JSON file, we want it to be available.

00:14:42.000 --> 00:14:44.740
And if you configure the app, it'll actually import it and use it.

00:14:44.740 --> 00:14:46.260
But it might not import them.

00:14:46.260 --> 00:14:47.620
The app doesn't know about them.

00:14:47.620 --> 00:14:48.920
That can't be coded into it.

00:14:48.920 --> 00:14:53.800
So you could just sort of parse that thing, pry it or, you know, even scan all the packages

00:14:53.800 --> 00:14:56.600
somehow and see if they exist or whatever.

00:14:56.600 --> 00:14:56.840
Right.

00:14:56.840 --> 00:14:59.080
So some sort of dynamic thing like that as well.

00:14:59.080 --> 00:14:59.560
Yeah.

00:14:59.560 --> 00:15:00.100
Yeah.

00:15:00.100 --> 00:15:04.700
Pulling dock strings out of a bunch of stuff to do a list of that.

00:15:04.700 --> 00:15:05.340
Yeah.

00:15:05.340 --> 00:15:05.580
Nice.

00:15:06.060 --> 00:15:07.200
Lots of stuff you could do.

00:15:07.200 --> 00:15:08.240
And you sure could.

00:15:08.240 --> 00:15:11.940
Now, this last item from me here comes from Alex.

00:15:11.940 --> 00:15:17.000
Monaghan just gave us a shout out and said, you know, that DuckDB thing, right?

00:15:17.000 --> 00:15:24.880
DuckDB is a little bit like SQLite-ish type stuff and in process based on files rather than

00:15:24.880 --> 00:15:26.640
separate servers, all those sort of things.

00:15:26.880 --> 00:15:31.500
Well, that thing's getting some traction, up to 4 million downloads a month off of PyPI.

00:15:31.500 --> 00:15:37.520
But the news is it's released version 1.0 of DuckDB.

00:15:37.520 --> 00:15:42.360
And by the way, the cloud-hosted product, Mother Duck, also opened up general availability.

00:15:42.360 --> 00:15:47.180
But the news is the announcing a 1.0.0.

00:15:47.180 --> 00:15:51.720
And interesting, there's a lot of conversations like, well, we could have just called it 1.0

00:15:51.720 --> 00:15:56.520
as soon as we made it public on GitHub, you know, 10 years ago or whatever it was, or not

00:15:56.520 --> 00:15:57.700
quite 10 years ago, 8 years ago.

00:15:57.700 --> 00:16:02.080
But focus is really on we want to make it super clear.

00:16:02.080 --> 00:16:05.620
They want to make it super clear that they're focused on stability.

00:16:05.620 --> 00:16:08.200
What's here is kind of what's going to stay.

00:16:08.200 --> 00:16:14.480
So examples that they give, you know, as that thing has evolved, as DuckDB has evolved, they've

00:16:14.480 --> 00:16:16.520
changed the file format around.

00:16:16.520 --> 00:16:19.960
And that's created incompatibilities from different versions.

00:16:19.960 --> 00:16:25.260
And so, for example, they're now committing to more stable back and forth

00:16:25.260 --> 00:16:28.300
stability on the file system and things like that.

00:16:28.300 --> 00:16:29.560
So very cool.

00:16:29.560 --> 00:16:36.820
If you're looking for an interesting SQL-like database to include into your projects, this

00:16:36.820 --> 00:16:38.980
one, you know, is quite popular.

00:16:38.980 --> 00:16:40.060
20,000 stars.

00:16:40.060 --> 00:16:46.400
A really analytical and process database rather than relational database focused, right?

00:16:46.400 --> 00:16:51.200
You can do cool stuff like integrate it with pandas and other things like that, which is

00:16:51.200 --> 00:16:51.560
pretty cool.

00:16:51.700 --> 00:16:51.820
Yeah.

00:16:51.820 --> 00:16:55.740
Like, for example, select star from a parquet file or a CSV file and so on.

00:16:55.740 --> 00:17:00.980
So not meant to replace SQLite, but that's kind of the mental model people should have.

00:17:00.980 --> 00:17:02.460
But more on data science.

00:17:03.260 --> 00:17:04.880
Select star from a CSV file.

00:17:04.880 --> 00:17:05.980
That sounds fun.

00:17:05.980 --> 00:17:06.340
Anyway.

00:17:06.620 --> 00:17:10.040
And by the way, this guy, Alex, Alex Monahan is in the audience.

00:17:10.040 --> 00:17:12.820
Here's a backwards compatibility for the files.

00:17:12.820 --> 00:17:17.040
So you can just leave those files around and not have to like manage the upgrades of them

00:17:17.040 --> 00:17:22.140
and so on, which is especially tricky if they're just local files associated with an app rather

00:17:22.140 --> 00:17:26.540
than a single server that all the apps talk to where you can just manage that one thing,

00:17:26.540 --> 00:17:27.400
you know, through an API.

00:17:27.400 --> 00:17:27.920
Yeah.

00:17:27.920 --> 00:17:28.440
Pretty cool.

00:17:28.440 --> 00:17:28.840
Cool.

00:17:29.100 --> 00:17:29.340
All right.

00:17:29.340 --> 00:17:31.160
Thanks for sending that in, Alex.

00:17:31.160 --> 00:17:33.220
And good job, DuckDB folks.

00:17:33.220 --> 00:17:34.620
Brian, what else you got?

00:17:34.620 --> 00:17:36.200
I've got a couple extras.

00:17:36.200 --> 00:17:37.620
Let's hear.

00:17:37.620 --> 00:17:43.680
One of the extras that I wanted to talk about was just like, I guess, a shout out to everybody

00:17:43.680 --> 00:17:45.560
that sends us topics.

00:17:45.560 --> 00:17:46.840
I really appreciate it.

00:17:46.840 --> 00:17:48.780
We appreciate hearing what's new.

00:17:48.780 --> 00:17:52.640
Don't assume that we've heard about it just because we do pay attention to a lot of stuff,

00:17:52.640 --> 00:17:54.160
but there's a lot to pay attention to.

00:17:54.260 --> 00:17:56.400
So if you think it's important, let us know.

00:17:56.400 --> 00:18:00.640
Yeah, Brian, I would say a lot of times people start messages like, I'm sure you've heard

00:18:00.640 --> 00:18:01.000
of this.

00:18:01.000 --> 00:18:02.840
And we're like, I have no idea what this is.

00:18:02.840 --> 00:18:03.120
No.

00:18:03.120 --> 00:18:05.320
I'm sure we have not heard of this.

00:18:05.320 --> 00:18:06.960
I'm sure we have not covered it either.

00:18:06.960 --> 00:18:12.740
But also it helps if like three or four people send in to say, this is exciting, then that

00:18:12.740 --> 00:18:15.080
also helps us know that it is exciting.

00:18:15.080 --> 00:18:15.420
Yeah.

00:18:15.420 --> 00:18:17.300
It's pretty much guaranteed to be in on the show.

00:18:17.300 --> 00:18:19.440
You can send it in anytime.

00:18:19.920 --> 00:18:25.080
But the one request is if it's timely and it really needs to go in this week, if it

00:18:25.080 --> 00:18:30.660
shows up at all, try to send it before Tuesday because, you know, sometimes we already have

00:18:30.660 --> 00:18:32.180
our topics anyway.

00:18:32.180 --> 00:18:32.540
That's right.

00:18:32.540 --> 00:18:33.200
Yes.

00:18:33.200 --> 00:18:36.980
So right after Tuesday, a Wednesday is a fantastic day for recommendations.

00:18:36.980 --> 00:18:41.540
Really, anytime is great for me.

00:18:41.540 --> 00:18:46.480
But anyway, so a couple new 2.0 releases I just wanted to shout out.

00:18:46.480 --> 00:18:50.240
We talked about this last week, but NumPy 2.0 is out now.

00:18:50.240 --> 00:18:51.360
So NumPy 2.0.

00:18:51.360 --> 00:18:55.660
So and there's a scientific on the scientific Python blog.

00:18:55.660 --> 00:18:58.120
There's a discussion about it.

00:18:58.120 --> 00:19:00.360
So you can read up on all the NumPy 2.0.

00:19:00.360 --> 00:19:02.240
And this is kind of exciting.

00:19:02.240 --> 00:19:03.500
I just heard about this yesterday.

00:19:03.500 --> 00:19:05.060
HTMX 2.0.

00:19:05.060 --> 00:19:05.480
I don't.

00:19:05.480 --> 00:19:06.860
Oh, you have my attention.

00:19:07.220 --> 00:19:14.320
So I haven't read any of this, but it should be so there's major changes and we'll see.

00:19:14.320 --> 00:19:16.460
I'm not sure what broke or what.

00:19:16.460 --> 00:19:17.140
Wait a minute.

00:19:17.140 --> 00:19:18.200
Why the 2.0?

00:19:18.200 --> 00:19:20.000
But I'm not sure I can switch to this.

00:19:20.000 --> 00:19:22.440
This release ends the support for Internet Explorer.

00:19:22.440 --> 00:19:23.400
Oh, my gosh.

00:19:23.400 --> 00:19:24.340
Just kidding.

00:19:25.800 --> 00:19:39.580
The interesting bit about this, though, is they're not marking 2.0 as the latest on npm until January of 2025 because they'd like to have everybody, you know, have a smooth transition to there.

00:19:39.580 --> 00:19:42.240
So anyway, any extras on your side?

00:19:42.240 --> 00:19:43.520
A few.

00:19:43.980 --> 00:19:46.980
First of all, partnered with the folks over at PyCharm.

00:19:46.980 --> 00:19:53.540
And now if you are taking a course at Talk Python Training, you can get six months of PyCharm Pro for free.

00:19:53.540 --> 00:19:55.560
That even works for our free courses.

00:19:55.560 --> 00:19:58.780
So if you just come over and take a course, sign up and check that out.

00:19:58.780 --> 00:20:01.500
Only works for new accounts at JetBrains.

00:20:01.500 --> 00:20:02.860
It doesn't work for renewals.

00:20:02.860 --> 00:20:05.600
So this is the best I can do, folks.

00:20:05.600 --> 00:20:10.240
But it's still pretty awesome to be able to get a good chunk of the users free access to PyCharm Pro.

00:20:11.080 --> 00:20:17.140
Also, other item is we have a awesome new course on data science coming to Talk Python.

00:20:17.140 --> 00:20:18.800
Its release is imminent.

00:20:18.800 --> 00:20:21.660
It awaits a marketing landing page, basically.

00:20:21.660 --> 00:20:22.780
And then it's out.

00:20:22.780 --> 00:20:28.040
So we have a new course called Reactive Web Dashboards with Shiny.

00:20:28.040 --> 00:20:30.840
Shiny for Python, not Shiny for R.

00:20:30.840 --> 00:20:34.280
So partnered with Posit folks to put this course together.

00:20:34.280 --> 00:20:41.080
And it's super cool to build interactive dashboards and web apps for your data science things with Shiny.

00:20:41.080 --> 00:20:42.660
Shiny, of course.

00:20:42.660 --> 00:20:44.200
Very cool.

00:20:44.200 --> 00:20:44.500
Indeed.

00:20:44.500 --> 00:20:46.180
It's a Shiny brand new course.

00:20:46.180 --> 00:20:46.520
All right.

00:20:46.520 --> 00:20:49.440
It will be Shiny for a while.

00:20:49.440 --> 00:20:51.220
How about a joke?

00:20:51.220 --> 00:20:51.960
Are you up for it?

00:20:51.960 --> 00:20:52.560
Yes.

00:20:52.560 --> 00:20:53.220
Okay.

00:20:53.220 --> 00:20:55.920
So we all, you know, you're sitting around, you're in a relationship.

00:20:55.920 --> 00:20:59.160
You have these thoughts that just kind of run through your head and you always don't know.

00:20:59.160 --> 00:21:01.100
So here's a young couple laying in bed.

00:21:01.100 --> 00:21:04.220
The woman is thinking, I bet he's thinking about another woman.

00:21:04.220 --> 00:21:05.520
That guy is just laying there.

00:21:05.520 --> 00:21:09.100
What would happen if I add a gitignore into the gitignore file?

00:21:09.100 --> 00:21:12.440
She's like, she's giving him way too much credit.

00:21:12.440 --> 00:21:14.900
What would happen?

00:21:14.900 --> 00:21:17.980
I know the title is I Can't Ignore the gitignore.

00:21:17.980 --> 00:21:20.580
What would happen if I add the gitignore to the gitignore file?

00:21:20.580 --> 00:21:22.320
No.

00:21:22.320 --> 00:21:28.440
Well, there's the joke.

00:21:28.440 --> 00:21:30.960
This is what I got for you, Brian, this week.

00:21:30.960 --> 00:21:32.140
I don't know what to tell you.

00:21:32.140 --> 00:21:33.880
Now I've got to try it to see.

00:21:33.880 --> 00:21:34.440
Exactly.

00:21:34.440 --> 00:21:35.260
I don't know.

00:21:35.260 --> 00:21:37.480
If you do that, you might take GitHub down.

00:21:37.480 --> 00:21:39.200
I wouldn't, I don't know if I'd check that in.

00:21:39.200 --> 00:21:41.160
Well, not GitHub, but local.

00:21:41.160 --> 00:21:42.840
Well, I mean, it has automation.

00:21:42.840 --> 00:21:44.060
It could explode.

00:21:44.060 --> 00:21:44.540
It could.

00:21:44.540 --> 00:21:47.500
Dependabot will just stop working for everyone after that.

00:21:47.500 --> 00:21:48.580
Yeah.

00:21:48.580 --> 00:21:49.580
All right.

00:21:49.580 --> 00:21:49.840
All right.

00:21:49.840 --> 00:21:51.020
Well, that's it.

00:21:51.020 --> 00:21:54.480
Well, everyone, thank you for listening.

00:21:54.480 --> 00:21:56.680
Scout APM, thank you for supporting the show.

00:21:56.680 --> 00:21:58.200
And Brian, thanks as always.