WEBVTT

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

00:00:05.360 --> 00:00:11.380
This is episode 334, recorded May 3rd, 2023.

00:00:11.380 --> 00:00:12.380
I'm Michael Kennedy.

00:00:12.380 --> 00:00:13.400
And I'm Brian Ecken.

00:00:13.400 --> 00:00:16.320
This episode is brought to you this time by us.

00:00:16.320 --> 00:00:19.900
Support our work through our courses over at Talk Python Training.

00:00:19.900 --> 00:00:21.400
Check out Brian's pytest course.

00:00:21.400 --> 00:00:23.520
Check out a lot of the other courses I did there.

00:00:23.520 --> 00:00:25.340
Check out the Test and Code podcasts.

00:00:25.340 --> 00:00:27.440
And we have Patreon supporters as well.

00:00:27.440 --> 00:00:29.800
Link on the episode pages on the website.

00:00:30.140 --> 00:00:34.660
Connect with us over on Fosstodon, @mkennedy, @brianokken, at Python Bytes over there.

00:00:34.660 --> 00:00:43.740
And if you're not part of the YouTube live stream and you want to be, we generally do this on Tuesdays at 11 Pacific time in the morning.

00:00:43.740 --> 00:00:45.440
But today we had to move it.

00:00:45.440 --> 00:00:47.380
So plus one, plus 23 hours.

00:00:47.380 --> 00:00:47.860
Yep.

00:00:47.860 --> 00:00:48.440
All right.

00:00:48.440 --> 00:00:49.360
Yeah, Brian.

00:00:49.360 --> 00:00:50.280
Sometimes life happens.

00:00:50.280 --> 00:00:51.780
Life does happen.

00:00:51.780 --> 00:00:53.340
And sometimes PyCons happen.

00:00:53.340 --> 00:00:53.780
Yeah.

00:00:53.780 --> 00:00:55.780
Yeah, that was a lot of fun to see you there.

00:00:55.780 --> 00:00:57.220
It was a blast.

00:00:57.360 --> 00:01:00.240
Did you, I guess, I had a great time.

00:01:00.240 --> 00:01:01.580
How about you?

00:01:01.580 --> 00:01:02.520
You got a lot of work done.

00:01:02.520 --> 00:01:04.340
I got a lot of recording done.

00:01:04.340 --> 00:01:06.700
I'm looking forward to releasing some of those episodes.

00:01:06.700 --> 00:01:08.200
Met a bunch of great people.

00:01:08.200 --> 00:01:09.460
Saw some old friends.

00:01:09.460 --> 00:01:10.480
Got to hang out with you.

00:01:10.780 --> 00:01:20.300
You brought the Python staff of power and battled the snake, which was the episode album art from last time, which was a lot of fun.

00:01:20.300 --> 00:01:23.220
So yeah, it's starting to come back, isn't it?

00:01:23.220 --> 00:01:28.580
I mean, but still quite as many people or as vendors, but it's good to see it coming back to life.

00:01:28.580 --> 00:01:29.040
Yeah.

00:01:29.040 --> 00:01:29.640
Yeah.

00:01:29.640 --> 00:01:30.660
I really enjoyed it.

00:01:30.660 --> 00:01:32.220
So should we kick in?

00:01:32.220 --> 00:01:33.420
Let's do it.

00:01:33.420 --> 00:01:33.980
Yeah.

00:01:33.980 --> 00:01:34.500
Jump in.

00:01:34.660 --> 00:01:41.600
Well, I was actually talking with one of our friends from PyCon that I'm blanking right now.

00:01:41.600 --> 00:01:44.020
So somebody from PyCon.

00:01:44.020 --> 00:01:44.760
So thank you.

00:01:44.760 --> 00:01:47.440
And apologies for forgetting your name right now.

00:01:48.140 --> 00:01:56.020
What I came across actually from several people mentioned Rai because we had talked about Hwak.

00:01:56.020 --> 00:01:57.700
I think Hwak.

00:01:57.700 --> 00:01:59.280
Anyway, H-U-A-K.

00:01:59.280 --> 00:02:03.940
And I think I got corrected that the intended pronunciation is Hwak.

00:02:03.940 --> 00:02:05.200
I think.

00:02:05.200 --> 00:02:05.800
Anyway.

00:02:05.800 --> 00:02:07.680
I'm on board with that.

00:02:07.680 --> 00:02:08.120
Let's do it.

00:02:09.560 --> 00:02:12.320
So a similar, so that's what it is.

00:02:12.320 --> 00:02:16.540
It was, was a Rust-based Python project workflow tool.

00:02:16.540 --> 00:02:17.880
So now we have another one.

00:02:17.880 --> 00:02:18.900
This one's called Rai.

00:02:18.900 --> 00:02:24.060
And I don't know what came first, but actually this doesn't look that old.

00:02:24.060 --> 00:02:26.380
This is from Armin Roeniker.

00:02:26.380 --> 00:02:27.140
Roenicher?

00:02:27.140 --> 00:02:27.560
Roeniker.

00:02:27.560 --> 00:02:28.440
I'm okay.

00:02:28.440 --> 00:02:29.780
I got to practice this stuff.

00:02:29.780 --> 00:02:32.180
The dude from Flask that started Flask.

00:02:32.180 --> 00:02:36.980
So I was curious about it because he usually kind of knows what he's doing.

00:02:36.980 --> 00:02:40.200
And this is a really pretty interesting project.

00:02:40.200 --> 00:02:42.040
So I tried it out this morning.

00:02:42.040 --> 00:02:47.320
Rai, it says it's Armin's personal one-stop shop for all of his Python needs.

00:02:47.320 --> 00:02:52.320
So that, and there's a video, which I didn't watch, but it's a nine-minute intro video.

00:02:52.320 --> 00:02:55.960
So what, what, what, what am I excited about with this?

00:02:55.960 --> 00:03:00.560
So it's, it's, it's more than just project.toml workflow tools.

00:03:00.560 --> 00:03:01.300
It does that.

00:03:01.300 --> 00:03:06.260
So you can do things like initializing a project, adding a dependency, removing, you can, you

00:03:06.260 --> 00:03:07.140
can remove a dependency.

00:03:07.140 --> 00:03:08.200
That's kind of a neat trick.

00:03:08.200 --> 00:03:13.700
And then build a wheel and even add lock files, which is kind of nice.

00:03:13.700 --> 00:03:20.040
The, so the other thing that, one of the things that I thought was really kind of cool is it

00:03:20.040 --> 00:03:25.700
also manages, I'm not going to find all the details here, but it manages Python.

00:03:25.700 --> 00:03:30.420
So you can, what, what are people using for PyEnv or something to install Python?

00:03:30.420 --> 00:03:31.380
To install Python.

00:03:31.380 --> 00:03:33.080
This installs Python also.

00:03:33.080 --> 00:03:42.040
So you can say, you can say what, Rai fetch and then give it like 3.9 and it'll, it'll download

00:03:42.040 --> 00:03:46.640
and install Python 3.9 for you, which like, wow, that's kind of cool.

00:03:46.640 --> 00:03:48.960
And it, it does it in an interesting way.

00:03:48.960 --> 00:03:56.360
So it uses these Indiegreg Python build standalone releases, which I was not familiar with.

00:03:56.360 --> 00:04:01.500
But so there's these, these different standalone distributions builds of Python.

00:04:01.500 --> 00:04:02.380
So neat.

00:04:02.380 --> 00:04:06.620
I forgot to add, this is not a windows thing yet.

00:04:06.620 --> 00:04:08.320
It's just Linux and macOS.

00:04:08.420 --> 00:04:09.340
So I tried it on Mac.

00:04:09.340 --> 00:04:13.140
So installing a bunch of stuff, but where does it install it?

00:04:13.140 --> 00:04:14.760
It doesn't install it in the normal place.

00:04:14.760 --> 00:04:20.320
It installs it in, in your home directory under dot Rai, Rye.

00:04:20.760 --> 00:04:25.400
And that, that was surprising to me at first, but it's kind of neat that everything's there.

00:04:25.400 --> 00:04:26.220
So, okay.

00:04:26.220 --> 00:04:29.140
So it does PyEnv sort of stuff.

00:04:29.140 --> 00:04:32.460
It can install Pythons for you, which is kind of cool with a command line.

00:04:32.460 --> 00:04:33.920
You can install a Python.

00:04:33.920 --> 00:04:35.380
And it's pretty fast.

00:04:35.720 --> 00:04:37.340
It also handles virtual environments.

00:04:37.340 --> 00:04:43.000
So you can do things like add, run, run within your virtual environment.

00:04:43.000 --> 00:04:45.160
You can run a command without actually going into it.

00:04:45.160 --> 00:04:49.620
You can say like Rai run black and it'll run black on your project.

00:04:49.620 --> 00:04:56.700
You can say sync and it'll take all of the dependencies in your project.toml and install them in your virtual environment.

00:04:56.700 --> 00:04:57.440
That's kind of neat.

00:04:57.440 --> 00:05:00.060
And also it's kind of like PipX also.

00:05:00.060 --> 00:05:09.480
So you can do things like install a global tool, like, you know, PipX install cards or PipX install really whatever you want.

00:05:09.480 --> 00:05:11.940
Or black, for instance, if you wanted to.

00:05:11.940 --> 00:05:17.560
If you're going to like have any global tools on, on your, you know, on your machine.

00:05:17.560 --> 00:05:23.140
It confused me at first because I tried it and I couldn't get it in the thing to run.

00:05:23.140 --> 00:05:26.160
But it doesn't really, it doesn't, it isn't invasive.

00:05:26.160 --> 00:05:32.160
So it's not modifying your .zhrc or your RC files itself.

00:05:32.160 --> 00:05:33.300
You have to do that.

00:05:33.300 --> 00:05:38.500
So it's all going into a home directory .ri.

00:05:38.500 --> 00:05:45.060
And then I think there's a, there's a bin directory in there or something like that, that you just add to your path.

00:05:45.060 --> 00:05:46.340
So it's doing that.

00:05:46.340 --> 00:05:55.560
The kind of neat thing about that, that all that isolation in the .ri directory is that if you decide you don't like it, you can just, you can just delete it.

00:05:55.560 --> 00:05:58.060
And then delete that directory and all that stuff's gone.

00:05:58.060 --> 00:05:59.700
So kind of cool.

00:05:59.700 --> 00:06:00.260
Yeah.

00:06:00.260 --> 00:06:05.680
I do like that it just blow away the directory and it's gone or it's reset, you know, that's pretty cool.

00:06:05.680 --> 00:06:12.980
It's also interesting to see that this is not a package or tool within Python, but outside of Python.

00:06:12.980 --> 00:06:13.500
Yeah.

00:06:13.500 --> 00:06:13.740
Right.

00:06:14.060 --> 00:06:22.940
I mean, it does, it says it uses like uses virtual environment and it uses actually uses virtual end, which is a third party package.

00:06:22.940 --> 00:06:25.340
That's a little faster than the V and V.

00:06:25.900 --> 00:06:30.000
But it also uses a pip, but it doesn't expose any of those.

00:06:30.000 --> 00:06:32.200
So it is kind of interesting that it's outside.

00:06:32.200 --> 00:06:37.560
I kind of like that it's outside because you can do things like, like pip X and, and pie and V.

00:06:37.560 --> 00:06:40.240
And for me, it like just worked better.

00:06:40.340 --> 00:06:46.580
I, I've still had trouble getting pie, pie, pie, and V is a cool idea, but it mucks with everything in your environment.

00:06:46.580 --> 00:06:48.080
And I don't like that.

00:06:48.080 --> 00:06:48.520
Exactly.

00:06:48.520 --> 00:06:49.220
Yeah.

00:06:49.220 --> 00:06:49.960
I don't like that either.

00:06:50.520 --> 00:06:58.620
So, I think the trend I've been talking, you know, we, I did the Python packaging discussion on talk Python a while ago.

00:06:58.620 --> 00:07:14.500
And there's, there's been a lot of talk about this, talked, to Ofec about a hatch and it's looking like there's a little more, a little more interest in saying like, okay, what if we had a tool that actually not just manages environments and packages, but actually manages Python.

00:07:14.820 --> 00:07:21.560
Python, like it, for example, like this one, like install the version of Python you want and do a bunch of other things along those lines.

00:07:21.560 --> 00:07:23.680
So, yeah, it's, it's interesting.

00:07:23.680 --> 00:07:29.500
another, just a side note, Simon Willison wrote up some notes on his, when he tried Rye.

00:07:29.500 --> 00:07:31.480
So we're, we'll link that article as well.

00:07:31.480 --> 00:07:31.920
Okay.

00:07:31.920 --> 00:07:32.440
Excellent.

00:07:32.440 --> 00:07:33.140
All right.

00:07:33.140 --> 00:07:34.580
What is next?

00:07:34.580 --> 00:07:35.960
PyPI is next.

00:07:35.960 --> 00:07:37.000
Okay.

00:07:37.000 --> 00:07:37.700
Okay.

00:07:37.700 --> 00:07:45.220
So remarkably, PyPI has 452,000 packages.

00:07:45.220 --> 00:07:46.600
That is insane.

00:07:46.600 --> 00:07:50.060
But what is more insane is the traffic, right?

00:07:50.060 --> 00:07:57.120
So there's some, one of the themes from PyCon this year was about sustainability and kind of building for the future.

00:07:57.120 --> 00:08:09.780
Carol Willing gave a great keynote talking about, you know, let's make sure that, we're investing in the front end story for Python, investing in a mobile and deployment story for Python.

00:08:09.780 --> 00:08:15.200
And, you know, PyPI and the Python packaging authority, it's kind of there as well, right?

00:08:15.260 --> 00:08:27.080
Like as we grow in traffic, we need things like somebody to over watch over the security and some, you know, somebody to make sure all this stuff is developed and polished.

00:08:27.080 --> 00:08:30.600
And people have been doing that, but to a large degree in a volunteer way.

00:08:30.600 --> 00:08:31.080
Right.

00:08:31.080 --> 00:08:34.760
But how does Python pay somebody to work on this?

00:08:34.760 --> 00:08:38.780
Well, there's been some grants, I think, I don't want to say the wrong company.

00:08:38.880 --> 00:08:48.420
It was from, some of the big tech companies are hiring people to do specifically security work, like a supply chain type of security for PyPI, which is great.

00:08:48.420 --> 00:08:48.860
Right.

00:08:48.860 --> 00:08:51.380
But those are year by year things.

00:08:51.380 --> 00:08:53.360
So what, what could be done?

00:08:53.360 --> 00:09:04.660
Well, right now, if I go over here on PyPI and I search for like VotoCore, this is the way to talk to, AWS basically, from Python to a large degree.

00:09:04.660 --> 00:09:05.520
Who's it run by?

00:09:05.620 --> 00:09:08.880
Oh, it's Garnat amongst others.

00:09:08.880 --> 00:09:09.860
Wait a minute.

00:09:09.860 --> 00:09:12.400
This is like the official AWS thing.

00:09:12.400 --> 00:09:16.100
Shouldn't this somehow be kind of more official than that?

00:09:16.100 --> 00:09:19.280
And how do I find the other AWS projects?

00:09:19.280 --> 00:09:21.520
I can like email the person or something.

00:09:21.520 --> 00:09:22.280
I don't know.

00:09:22.280 --> 00:09:32.300
I guess I could go over here and see this, this, the projects if I go to their user account, but it's kind of just, you know, AWS sort of hacked the system by creating an account named AWS.

00:09:32.300 --> 00:09:33.880
But it's not really official.

00:09:34.120 --> 00:09:37.720
You don't get like a branded, sort of story.

00:09:37.720 --> 00:09:37.940
Right.

00:09:37.940 --> 00:09:39.280
You just get a, you know, use your profile.

00:09:39.280 --> 00:09:41.460
So GitHub has something like this.

00:09:41.460 --> 00:09:46.120
Like if you went to GitHub.com slash talk Python, this is the official organization.

00:09:46.120 --> 00:09:48.520
We have 47 repositories.

00:09:48.520 --> 00:09:50.620
We have six people involved.

00:09:50.620 --> 00:09:52.300
And you can sort of see, right?

00:09:52.300 --> 00:09:57.460
You can, you can put this together officially as, as not Michael, but like this group.

00:09:57.460 --> 00:09:57.720
Right.

00:09:57.720 --> 00:10:03.680
So the big announcement is introducing PyPI organizations by Ederbin.

00:10:03.680 --> 00:10:07.500
So today we are rolling out today being a few days ago.

00:10:07.500 --> 00:10:22.060
Today we are rolling out the first step in our plan to build financial support and long-term sustainability for the Python packaging index, while simultaneously giving our users one of the most requested features, organization accounts.

00:10:22.060 --> 00:10:26.920
So these are self-managed teams with their own exclusive branded web addresses.

00:10:27.480 --> 00:10:35.560
And the goal is to make PyPI easier for large community projects, organizations, and companies manage multiple sub teams and multiple packages.

00:10:35.560 --> 00:10:36.240
Right.

00:10:36.340 --> 00:10:42.580
So much like the GitHub org that I was talking about, you can say, okay, this person is an admin of it.

00:10:42.580 --> 00:10:45.880
And this person can have right access to that thing, but not this thing.

00:10:45.880 --> 00:10:46.220
Right.

00:10:46.220 --> 00:10:55.740
So kind of, kind of those types of things instead of, Hey, everyone in the company, here's the one and only username and password for PyPI Go.

00:10:55.740 --> 00:10:56.860
Interesting.

00:10:56.860 --> 00:10:57.840
yeah.

00:10:57.840 --> 00:10:57.940
Yeah.

00:10:57.940 --> 00:10:58.540
Yeah.

00:10:58.540 --> 00:11:03.520
And it's like, I opened this conversation, increase the idea is to increase sustainability.

00:11:03.620 --> 00:11:15.320
This last year, PyPI served 235 billion downloads for those packages and saw 57% year over year growth on download counts and bandwidth alike.

00:11:15.320 --> 00:11:16.260
That's great.

00:11:16.260 --> 00:11:22.040
But it also means costs and effort and infrastructure and all of that is just going up.

00:11:22.040 --> 00:11:24.660
Also, these organizations are not required.

00:11:24.660 --> 00:11:26.380
AWS can still manage it.

00:11:26.380 --> 00:11:28.240
However they are now they want.

00:11:28.240 --> 00:11:30.720
So these are opt-in and it does cost.

00:11:30.720 --> 00:11:32.100
It says a small fee.

00:11:32.100 --> 00:11:36.700
I would love to see small fee equals a hundred dollars a month or a dollar a month.

00:11:36.700 --> 00:11:37.700
I don't know what this is.

00:11:37.700 --> 00:11:39.940
maybe it says somewhere, maybe I got to go.

00:11:39.940 --> 00:11:40.720
It's a sliding scale.

00:11:40.720 --> 00:11:41.860
Yes, exactly.

00:11:41.860 --> 00:11:44.020
If you got to ask, no, just kidding.

00:11:44.020 --> 00:11:44.860
It says small fee.

00:11:44.860 --> 00:11:47.380
If you got to ask, it's not for you.

00:11:47.380 --> 00:11:52.700
Anyway, PyPI organizations, coming now, check it out.

00:11:52.700 --> 00:11:53.160
Okay.

00:11:53.160 --> 00:11:57.900
So is it just, oh, we don't know this yet, but is it just for things like,

00:11:57.940 --> 00:12:01.960
things like, companies or is it, could it be for, like,

00:12:01.960 --> 00:12:03.560
pytest or something like that?

00:12:03.560 --> 00:12:03.820
Sure.

00:12:03.820 --> 00:12:04.780
It could be, like, for pytest.

00:12:04.780 --> 00:12:08.880
I mean, you talked about, it says for large community projects, for example.

00:12:08.880 --> 00:12:09.380
Yeah.

00:12:09.380 --> 00:12:11.080
Like, you talked about Flask.

00:12:11.080 --> 00:12:14.440
well, you talked about Armin, who was the original creator of Flask.

00:12:14.680 --> 00:12:20.100
But that's now under the pallets project, which runs a bunch of different projects and has a bunch of contributors.

00:12:20.100 --> 00:12:24.480
Like, I think a pallets organization would be potentially reasonable, you know?

00:12:24.480 --> 00:12:24.940
Yeah.

00:12:24.940 --> 00:12:25.440
Yeah.

00:12:25.440 --> 00:12:29.340
It's going to be tough to come up with, like, pricing for something like this because, like we said,

00:12:29.340 --> 00:12:34.440
some of it is a bunch of volunteer organizations and some of it is, yeah, companies.

00:12:34.440 --> 00:12:35.600
so, yeah.

00:12:35.600 --> 00:12:36.020
Interesting.

00:12:36.020 --> 00:12:36.580
yeah.

00:12:36.580 --> 00:12:37.200
I don't know.

00:12:37.200 --> 00:12:42.280
I, it probably says somewhere, but I didn't see it in this article on the PyPI.

00:12:42.280 --> 00:12:42.940
Nice.

00:12:42.940 --> 00:12:43.380
Cool.

00:12:43.380 --> 00:12:47.740
Well, should we jump into the next topic?

00:12:47.740 --> 00:12:48.480
Yeah, go.

00:12:48.480 --> 00:12:49.060
Okay.

00:12:49.060 --> 00:12:54.480
Well, I just, we, I like this article by Bob Belderbos.

00:12:54.480 --> 00:12:58.500
It's, five tips to learn any new Python library faster.

00:12:58.500 --> 00:13:04.520
and this is, actually near and dear to my heart because we do this on a weekly basis.

00:13:04.520 --> 00:13:08.680
you know, trying something, trying something new.

00:13:08.680 --> 00:13:12.700
and, I think I have a condensed version of this,

00:13:12.700 --> 00:13:16.800
but let's kind of walk through, these are pretty good tips on, if you're, if you're thinking

00:13:16.800 --> 00:13:20.780
about using something, or just want to learn, you hear, here's something cool.

00:13:20.780 --> 00:13:22.760
You want to want to learn, learn about it.

00:13:22.760 --> 00:13:23.460
What do you do?

00:13:23.460 --> 00:13:28.220
so his first step is, quickly read the main docs.

00:13:28.220 --> 00:13:30.960
So read the manual, RTFM.

00:13:31.240 --> 00:13:36.840
especially I like things like if they have a quick start or getting started,

00:13:36.840 --> 00:13:39.320
uh, like I like to read that.

00:13:39.320 --> 00:13:41.240
If there's a video, go ahead and watch it.

00:13:41.240 --> 00:13:44.840
especially if it's a short video, go ahead and try that.

00:13:44.920 --> 00:13:45.580
So, okay.

00:13:45.580 --> 00:13:47.200
So, so you, so you know what it does great.

00:13:47.200 --> 00:13:51.560
And you kind of know how it works and then install number two is install it.

00:13:51.560 --> 00:13:53.180
I think this is funny.

00:13:53.180 --> 00:13:56.860
I mean, obviously you have to install it in order to play with it, but okay.

00:13:56.860 --> 00:13:57.520
Install it.

00:13:58.200 --> 00:14:00.860
number three is explore the library.

00:14:00.860 --> 00:14:02.180
Essentially play with it.

00:14:02.180 --> 00:14:05.020
play around, see what you do.

00:14:05.020 --> 00:14:10.760
Bob has a great idea of, of doing this within, Jupyter notebooks, to just kind

00:14:10.760 --> 00:14:12.420
of explore what it does.

00:14:12.420 --> 00:14:13.360
That's pretty great.

00:14:13.360 --> 00:14:16.860
and then, and then you have to kind of make it more deliberate.

00:14:16.860 --> 00:14:21.600
So instead of just playing around with like maybe the things it does try to do something

00:14:21.600 --> 00:14:22.860
with it, try to have a task.

00:14:22.860 --> 00:14:28.020
And this, and this is a deliberate called deliberate practice, but,

00:14:28.020 --> 00:14:30.640
this is where I think you're really going to start learning.

00:14:30.640 --> 00:14:36.640
Something is, actually trying to get something done because often there'll be extra features

00:14:36.640 --> 00:14:37.700
you don't need right away.

00:14:37.700 --> 00:14:43.420
with a lot of projects, most people use 20% of the functionality.

00:14:43.420 --> 00:14:46.280
So don't learn a hundred percent of the functionality.

00:14:46.280 --> 00:14:49.520
You learn the 20% that you need to get something done.

00:14:49.520 --> 00:14:55.320
So, deliberate exercise, and then maybe actually build something or change something.

00:14:55.320 --> 00:14:57.340
So, number five is build something.

00:14:57.340 --> 00:15:02.760
So, going into to a deeper level is actually incorporate this library in a project of yours,

00:15:02.760 --> 00:15:07.440
or if it's similar to a, another project that you're already using, and you're just thinking

00:15:07.440 --> 00:15:09.220
about switching, go ahead and try switching it.

00:15:09.220 --> 00:15:14.660
you might not stick with it, but kind of feel how, how, how easy it is to change over

00:15:14.660 --> 00:15:16.760
to this new, new project.

00:15:16.760 --> 00:15:19.420
And you might not publish it, but you might, it might be great.

00:15:19.420 --> 00:15:24.560
build, building something small is a good idea to, to just kind of get your hands dirty.

00:15:24.560 --> 00:15:30.600
And then, the bonus number six, I always like it when the people lie about how many tips

00:15:30.600 --> 00:15:30.980
there are.

00:15:30.980 --> 00:15:34.400
the real bonus is teaching it.

00:15:34.400 --> 00:15:37.400
and this, this is like massive, massive.

00:15:37.400 --> 00:15:43.840
and it just ties a bow on the whole learning process is trying to teach it back to somebody.

00:15:43.840 --> 00:15:50.160
And this could be a today I learned thing on your blog or an actual longer blog post, or maybe a little

00:15:50.160 --> 00:15:54.840
tutorial video or something, or actually just sit down and with somebody and try to talk to them

00:15:54.840 --> 00:15:55.240
about it.

00:15:55.240 --> 00:16:02.740
one of the things that I find even just for ourselves from, for this podcast, trying

00:16:02.740 --> 00:16:06.260
to look at it and go, if I was trying to teach this to somebody or tell somebody why they should

00:16:06.260 --> 00:16:06.700
use it.

00:16:06.780 --> 00:16:07.180
Why?

00:16:07.180 --> 00:16:08.600
I mean, what are the different points?

00:16:08.600 --> 00:16:11.960
So like just earlier when I was talking about Rye, what's different about that?

00:16:11.960 --> 00:16:17.540
Well, it's, it's different because it's, it handles the Python installs also.

00:16:17.540 --> 00:16:19.160
And it also kind of works like Pipex.

00:16:19.160 --> 00:16:23.200
I mean, the different things about it and then think about like, and then actually try it.

00:16:23.200 --> 00:16:23.940
So I tried it out.

00:16:23.940 --> 00:16:29.600
I went through, set up a, an extra little project directory and tried it

00:16:29.600 --> 00:16:32.860
out a few times and saw what it did, looked at the project Toml output.

00:16:32.860 --> 00:16:34.000
so yeah.

00:16:34.000 --> 00:16:36.460
And then, just doing that.

00:16:36.460 --> 00:16:38.720
So, some great things.

00:16:38.720 --> 00:16:39.320
Yeah.

00:16:39.320 --> 00:16:42.440
I, I think, you know, teach it is, is really cool.

00:16:42.440 --> 00:16:46.400
You don't have to be an expert at something to give a presentation on it.

00:16:46.400 --> 00:16:49.780
If you structure, as long as you're genuine about it, right?

00:16:49.780 --> 00:16:54.140
Like if you, you said, Hey, I'm going to teach you everything you need to know and how awesome

00:16:54.140 --> 00:16:54.940
this thing is.

00:16:54.940 --> 00:16:58.840
And really you just learned it last week at a conference talk.

00:16:58.840 --> 00:16:59.860
People might call you out.

00:16:59.860 --> 00:17:02.400
Like you don't seem to really know as much as you came.

00:17:02.400 --> 00:17:07.220
If you say, no, I'm, I'm excited about this thing.

00:17:07.220 --> 00:17:08.180
I just learned it.

00:17:08.180 --> 00:17:12.360
I wanted to share my excitement and, and just, you know, show you a quick getting started

00:17:12.360 --> 00:17:12.660
thing.

00:17:12.660 --> 00:17:15.060
And then people won't go like, well, why does he know it?

00:17:15.060 --> 00:17:15.780
Like you just start out.

00:17:15.780 --> 00:17:17.780
Well, I just learned it, but I'm, I'm excited.

00:17:17.840 --> 00:17:22.020
And I think you'll be excited too, if you, you know, so I do think those presentations

00:17:22.020 --> 00:17:23.120
are awesome.

00:17:23.120 --> 00:17:24.120
I mean, there's plenty of places.

00:17:24.120 --> 00:17:29.900
There's user groups and meetups, regional conferences, like online meetups.

00:17:29.900 --> 00:17:31.960
Those people are always looking for presenters.

00:17:31.960 --> 00:17:35.180
They're like, gosh, it's a week away and we don't have a speaker yet.

00:17:35.180 --> 00:17:35.420
Right.

00:17:35.420 --> 00:17:36.100
So reach out.

00:17:36.100 --> 00:17:39.560
I mean, there's a ton of opportunity to do that or even brown bags at your company.

00:17:39.560 --> 00:17:39.960
Yeah.

00:17:40.380 --> 00:17:43.860
I like the, I like that you brought up that, be honest about it.

00:17:43.860 --> 00:17:49.500
that you like, you can even say, I just, I just got excited about this, learned

00:17:49.500 --> 00:17:52.220
a little bit and I want to show you what it is.

00:17:52.220 --> 00:17:56.920
don't, I, yeah, don't make yourself out to be an expert in the, in the field.

00:17:56.920 --> 00:17:58.920
but that's great.

00:17:59.020 --> 00:18:04.100
That's this, this process actually is like exactly how I got started, blogging about

00:18:04.100 --> 00:18:08.920
testing is just learning, learning something new, writing an article about it and then writing

00:18:08.920 --> 00:18:09.300
a bunch.

00:18:09.300 --> 00:18:15.280
So if you really want to deep dive into a, into a, module or a package, you can write

00:18:15.280 --> 00:18:16.040
a series of them.

00:18:16.040 --> 00:18:16.340
Great.

00:18:16.340 --> 00:18:17.100
You're getting started.

00:18:17.100 --> 00:18:22.740
One of my first thoughts and then move on to like, well, how do I do this other thing

00:18:22.740 --> 00:18:23.120
with it?

00:18:23.120 --> 00:18:24.460
how do I do authentication?

00:18:24.460 --> 00:18:26.300
We'll do a, do a little article on that.

00:18:26.580 --> 00:18:30.180
and it, and then the whole thing could end up being a book.

00:18:30.180 --> 00:18:32.960
I mean, you could make a book or a course or something out of it eventually.

00:18:32.960 --> 00:18:36.880
So, but if you just want to do a quick one, this is a great way to.

00:18:36.880 --> 00:18:37.420
Yeah.

00:18:37.420 --> 00:18:37.880
All right.

00:18:37.880 --> 00:18:42.800
And, and speaking of just like, he opened Bob open his conversation here with like, and

00:18:42.800 --> 00:18:47.160
some of the things I'm learning are PyScript, Flet, PySimple GUI, Pyright, HTMX, Reddit,

00:18:47.160 --> 00:18:47.700
Leaflet.

00:18:47.700 --> 00:18:49.180
Those are all awesome.

00:18:49.180 --> 00:18:51.160
So I can see why you would want to learn those.

00:18:51.160 --> 00:18:56.220
And Liz out there says, I'm an, I'm excited about this type of presentations tend to be more

00:18:56.220 --> 00:18:58.240
to the point, which is indeed.

00:18:58.240 --> 00:18:58.680
Yeah.

00:18:58.680 --> 00:18:59.280
All right.

00:18:59.280 --> 00:19:00.440
What's next.

00:19:00.440 --> 00:19:02.800
We have GPUs next.

00:19:02.800 --> 00:19:03.620
All right.

00:19:03.620 --> 00:19:08.620
I know you heard that, we can do all sorts of amazing things by programming GPUs.

00:19:08.620 --> 00:19:14.180
And if we want to process, you know, tons of data, maybe we're doing medical research

00:19:14.180 --> 00:19:19.320
on protein folding, we're running around a cluster of GPUs and we could, you know, solve

00:19:19.320 --> 00:19:23.580
some kind of huge computational biological problem and make a big impact.

00:19:23.580 --> 00:19:27.660
But if you're going to do that, you sure better hope that you, if you're gonna do something

00:19:27.660 --> 00:19:31.140
like CUDA, you better hope that you have not just GPUs.

00:19:31.140 --> 00:19:32.160
That's way too broad.

00:19:32.160 --> 00:19:32.660
No, no, no.

00:19:32.660 --> 00:19:34.800
You have Nvidia GPUs.

00:19:34.800 --> 00:19:38.500
And Nvidia GPUs are sometimes hard to come by.

00:19:38.500 --> 00:19:42.200
A couple of years ago, they were very hard to come by unless you're using the cloud where

00:19:42.200 --> 00:19:42.880
you can go get them.

00:19:42.880 --> 00:19:43.100
Right.

00:19:43.360 --> 00:19:45.180
I have an awesome Mac here.

00:19:45.180 --> 00:19:54.660
I've got my M two pro Mac mini now, and that thing has 16, GPU cores on it.

00:19:54.660 --> 00:19:57.180
Can I do CUDA or use PI CUDA on it?

00:19:57.180 --> 00:19:59.640
No, that's not an Nvidia one.

00:19:59.640 --> 00:20:06.320
And so like honest on Mac, especially it's been extremely hard to do any sort of GPU computation.

00:20:06.320 --> 00:20:06.720
Right.

00:20:06.720 --> 00:20:07.160
Okay.

00:20:07.160 --> 00:20:11.680
We had the afterburner cards and those like weird external graphics cards on the older

00:20:11.680 --> 00:20:15.280
Intel ones, but those are not even an option in the last four years.

00:20:15.280 --> 00:20:17.740
So, you know, that's, that's a drawback.

00:20:17.740 --> 00:20:24.440
And on Mac, the graphics language like direct X on windows or open GL and a lot of things

00:20:24.440 --> 00:20:25.640
is called metal.

00:20:25.640 --> 00:20:30.920
And so I want to introduce you to a library and an article called Python gets down to the

00:20:30.920 --> 00:20:33.620
metal, not like CPU, but GPU.

00:20:33.620 --> 00:20:36.140
And it says, are you a Mac and Python person?

00:20:36.140 --> 00:20:38.220
Do you have a trillion numbers to multiply together?

00:20:38.220 --> 00:20:39.900
You don't have all day to wait for them.

00:20:40.520 --> 00:20:42.420
It says, well, Python is quite slow.

00:20:42.420 --> 00:20:46.000
Although the person acknowledges, I've been a happy Python user for quite a while.

00:20:46.000 --> 00:20:52.300
you know, for pure number crunching, Python is not as fast as the compiled languages like

00:20:52.300 --> 00:20:53.800
C and rest, which is totally true.

00:20:53.800 --> 00:20:55.880
Is it plenty fast to drive your web API?

00:20:55.880 --> 00:20:56.580
Probably.

00:20:56.580 --> 00:20:57.920
It's probably really fast for that.

00:20:57.920 --> 00:21:01.240
But if you literally have a trillion numbers, you want to just crunch them in a loop.

00:21:01.520 --> 00:21:03.580
The advice is not to do that, right?

00:21:03.580 --> 00:21:09.660
The advice is to use something like pandas or numpy or desk or something like that, which

00:21:09.660 --> 00:21:10.660
are really all C base.

00:21:10.660 --> 00:21:18.060
Or if you had a NVIDIA Jeep, graphics card, maybe you could use some kind of thing

00:21:18.060 --> 00:21:18.780
like PyCuda.

00:21:19.000 --> 00:21:23.940
But again, on the super powerful computer, it is just, you can't do it.

00:21:23.940 --> 00:21:26.020
There's no way to get an NVIDIA graphics card.

00:21:26.020 --> 00:21:32.200
However, if you could somehow program this metal, it says metal does have a way to program it.

00:21:32.200 --> 00:21:34.200
It's just, there's not a lot of things for it.

00:21:34.420 --> 00:21:40.400
And it says there's a language to do on GPU computation that looks very C++ like.

00:21:40.400 --> 00:21:44.960
And it says on a, on an M2, this is not the pro, but the regular one has eight GP cores,

00:21:44.960 --> 00:21:49.280
which means let's see, that gives some numbers here.

00:21:49.280 --> 00:21:49.820
Yeah.

00:21:49.820 --> 00:21:55.600
It says, on the eight GP, GPU core version, you could do about a trillion floating point

00:21:55.600 --> 00:21:56.620
operations a second.

00:21:56.620 --> 00:21:59.460
And that's the base version, right?

00:21:59.460 --> 00:22:04.300
And so the bigger models like mine closer up towards 10 trillion.

00:22:04.300 --> 00:22:04.700
Right.

00:22:04.700 --> 00:22:10.180
So mine's probably like six or seven trillion, but, you know, the high, the ultra

00:22:10.180 --> 00:22:13.040
max, I don't know, whatever the bigger ones can do even more than that.

00:22:13.040 --> 00:22:13.240
Right.

00:22:13.240 --> 00:22:16.160
So that is a ton of power.

00:22:16.160 --> 00:22:19.060
And so we introduce metal compute.

00:22:19.060 --> 00:22:21.340
So pip install metal compute.

00:22:21.340 --> 00:22:28.400
And with this, it's a little bit like doing SQL, like raw SQL database stuff in that you define

00:22:28.400 --> 00:22:32.040
a thing that you want to run on the graphics card.

00:22:32.040 --> 00:22:35.580
That looks a lot like a lot like C++.

00:22:35.580 --> 00:22:37.820
I think you would imagine Brian, what do you say?

00:22:37.820 --> 00:22:38.300
Yeah.

00:22:38.300 --> 00:22:38.820
Yeah.

00:22:38.820 --> 00:22:44.580
It's just hash include metal standard lib using namespace metal, write a function, do the

00:22:44.580 --> 00:22:44.940
operations.

00:22:44.940 --> 00:22:48.000
There's a lot of const device float star buffer.

00:22:48.000 --> 00:22:50.520
I mean, it's not easy, right?

00:22:50.520 --> 00:22:55.620
But it's also not that easy on, on CUDA and other things as well, generally speaking.

00:22:55.780 --> 00:22:58.960
So they come up and say, all right, what we're going to do is going to come up with a bunch

00:22:58.960 --> 00:23:01.280
of, you know, a vector and a matrix.

00:23:01.280 --> 00:23:04.460
And we're going to multiply them and do a bunch of work and get the answers out.

00:23:04.460 --> 00:23:06.340
And boom, off it goes.

00:23:06.340 --> 00:23:07.360
Print out the answer.

00:23:07.360 --> 00:23:08.260
Very cool.

00:23:09.260 --> 00:23:12.860
It's kind of cool that you don't have to, you don't have to compile it or anything though.

00:23:12.860 --> 00:23:15.680
I mean, or it is cool or have it in a separate file.

00:23:15.680 --> 00:23:16.760
It's just a string there.

00:23:16.760 --> 00:23:18.020
That's, that's neat.

00:23:18.020 --> 00:23:18.580
It is.

00:23:18.580 --> 00:23:23.020
And if I was a, if this was my job and someone said, Michael, you're writing this program,

00:23:23.020 --> 00:23:28.320
I would not do what they are doing in this example and put triple quotes and put metal

00:23:28.320 --> 00:23:30.480
code, which is like C++ in there.

00:23:30.480 --> 00:23:37.200
I would write a metal file or a C, call it CPP or whatever's going to give you the best

00:23:37.200 --> 00:23:39.520
autocomplete and color syntax highlighting.

00:23:39.520 --> 00:23:45.160
And then just do, you know, path read text and get that, you know, in one line, get that

00:23:45.160 --> 00:23:47.180
out, but have that in a separate file.

00:23:47.180 --> 00:23:49.920
So you could sort of more, more properly reason about it.

00:23:49.920 --> 00:23:56.720
But anyway, it says, look, we run this together and did a whole bunch of work, took 70 milliseconds

00:23:56.720 --> 00:23:57.980
to do 10 multiplications.

00:23:57.980 --> 00:24:00.100
Not that impressive because there's a startup cost.

00:24:00.100 --> 00:24:05.800
What if we gave it a billion, a billion multiplications to multiply that vector in that matrix?

00:24:05.800 --> 00:24:08.600
Oh, that takes 0.3 seconds, a billion times.

00:24:08.600 --> 00:24:09.280
That's a lot.

00:24:09.280 --> 00:24:09.720
Yeah.

00:24:09.720 --> 00:24:11.340
So, so that's pretty good.

00:24:11.340 --> 00:24:16.520
It does say though, look like part of the speed or part of the challenge is moving

00:24:16.520 --> 00:24:19.580
data into memory and then out of memory.

00:24:19.580 --> 00:24:23.980
And so the more you move stuff in and out rather than kind of loaded up with the data and then

00:24:23.980 --> 00:24:25.480
do operations on it, it will be slower.

00:24:25.480 --> 00:24:30.040
So it talks a bit about some of the performance things that you can do to make it faster.

00:24:30.040 --> 00:24:31.660
It gives some examples on how to do that.

00:24:31.660 --> 00:24:36.800
There's probably some interesting trade-offs with the Apple Silicon having a shared memory

00:24:36.800 --> 00:24:40.040
between memory memory and, and GPU memory, right?

00:24:40.040 --> 00:24:43.820
You don't actually have to copy it between there, but I suspect that you're going from Python

00:24:43.820 --> 00:24:48.060
to C++ memory and back through some kind of serialization, right?

00:24:48.060 --> 00:24:49.960
That that's going to have some kind of cost.

00:24:49.960 --> 00:24:50.300
Who knows?

00:24:50.300 --> 00:24:57.020
Anyway, there's some cool examples of a Mandelbrot set being computed with this or Julia set rather.

00:24:57.020 --> 00:25:02.520
But yeah, people are been dreaming of doing GPU processing on their Macs.

00:25:02.640 --> 00:25:04.020
Well, this might be worth checking out.

00:25:04.020 --> 00:25:04.500
Nice.

00:25:04.500 --> 00:25:09.820
The other thing that's kind of cool about it is it doesn't, you know, it's not like a library

00:25:09.820 --> 00:25:16.160
that takes Python code and compiles it or transpiles it to run on the GPU, which would be awesome.

00:25:16.360 --> 00:25:20.580
But at the same time, if it doesn't quite get it right, how much control do you have?

00:25:20.580 --> 00:25:21.540
How useful is it?

00:25:21.540 --> 00:25:21.860
Right.

00:25:21.860 --> 00:25:22.860
You don't know.

00:25:22.860 --> 00:25:27.940
Like here, you can just, if you can just give it the data as an array, then you're just writing

00:25:27.940 --> 00:25:30.460
straight metal, which is a bit of a pain if you don't know it.

00:25:30.460 --> 00:25:35.760
But at the same time, it's, it means that it's, it's super flexible, kind of like a DB API.

00:25:35.760 --> 00:25:39.660
You open a connection, you say, here's a string, run that on the database.

00:25:39.660 --> 00:25:45.100
You can give it a selector, some kind of query or update, and it's, it kind of gets out of the way.

00:25:45.220 --> 00:25:47.000
So it seems pretty flexible in that regard.

00:25:47.000 --> 00:25:47.500
Yeah.

00:25:47.500 --> 00:25:47.980
Yeah.

00:25:47.980 --> 00:25:49.440
Interesting.

00:25:49.440 --> 00:25:50.800
And this Mac only, right?

00:25:50.800 --> 00:25:51.480
So this is.

00:25:51.480 --> 00:25:52.840
Yeah, it's Mac only.

00:25:52.840 --> 00:25:54.480
But take that NVIDIA.

00:25:54.480 --> 00:25:55.520
You can't run Mac.

00:25:55.520 --> 00:25:56.040
No, just kidding.

00:25:56.040 --> 00:26:00.660
I have both an NVIDIA card and this, but I don't really have, I would like to do more GPU

00:26:00.660 --> 00:26:03.720
stuff, but I just don't have a trillion numbers that need multiplying right now.

00:26:03.720 --> 00:26:06.480
Well, you know, it's not a bad thing.

00:26:06.480 --> 00:26:06.680
Someday.

00:26:06.680 --> 00:26:07.200
No.

00:26:07.200 --> 00:26:08.700
All right.

00:26:08.700 --> 00:26:09.120
Over to you.

00:26:09.120 --> 00:26:11.820
I've got, so we're onto extras.

00:26:12.920 --> 00:26:15.460
I've got just one extra that I wanted to bring up.

00:26:15.460 --> 00:26:18.160
And that was just the textual.

00:26:18.160 --> 00:26:25.780
So Will McGooghan posted like this picture and like with no explanation.

00:26:25.780 --> 00:26:30.860
Apparently it's the, it's the weird, I'm showing a weird bird with a large mouth.

00:26:30.860 --> 00:26:32.700
It's kind of an ugly thing, I think.

00:26:32.700 --> 00:26:35.880
But it's the logo for frog mouth.

00:26:35.880 --> 00:26:37.360
And what is frog mouth?

00:26:37.360 --> 00:26:43.140
Frog mouth is the first, apparently first of possibly more to come applications that the

00:26:43.140 --> 00:26:46.100
textual team is releasing that are built on textual.

00:26:46.100 --> 00:26:49.800
So frog mouth is a markdown viewer and browser for your terminal.

00:26:49.800 --> 00:26:52.580
And it looks pretty clean.

00:26:52.580 --> 00:26:53.860
I tried it out as well.

00:26:54.260 --> 00:26:59.260
I haven't been able to get like these, these, these menu bar thing or the tree things

00:26:59.260 --> 00:26:59.980
on the side.

00:26:59.980 --> 00:27:06.400
But it's like a, it's like a navigation thing with like, you can browse, browse your markdown

00:27:06.400 --> 00:27:08.160
with within textual.

00:27:08.160 --> 00:27:09.280
So it's kind of fun.

00:27:09.280 --> 00:27:10.020
Yeah.

00:27:10.020 --> 00:27:13.160
Continues to impress with what they can build with that stuff.

00:27:13.160 --> 00:27:13.600
Yeah.

00:27:13.600 --> 00:27:16.640
And this is the application that I tried when I was talking about Rye.

00:27:16.640 --> 00:27:21.940
I tried installing this as a global application and then it worked just fine.

00:27:21.940 --> 00:27:22.260
So.

00:27:22.260 --> 00:27:22.700
Yeah.

00:27:22.700 --> 00:27:22.920
Cool.

00:27:22.920 --> 00:27:23.500
All right.

00:27:23.500 --> 00:27:25.800
I would like to serenade the audience, Brian.

00:27:25.800 --> 00:27:26.940
Oh, yay.

00:27:26.940 --> 00:27:27.640
Yeah.

00:27:27.640 --> 00:27:29.320
I was going to talk about this as a main item.

00:27:29.320 --> 00:27:31.600
This thing called serenade at serenade.ai.

00:27:31.600 --> 00:27:34.120
And it's really neat.

00:27:34.120 --> 00:27:42.500
What it does is you install a plugin for your editor where your editor equals VS Code or Jetbrains

00:27:42.500 --> 00:27:42.900
IDs.

00:27:42.900 --> 00:27:43.940
None of them do.

00:27:43.940 --> 00:27:46.940
And then you run this in the background and you can speak to it.

00:27:46.940 --> 00:27:48.560
Like you hit a hot key or whatever.

00:27:48.980 --> 00:27:53.620
And you basically start speaking code oriented operations.

00:27:53.620 --> 00:27:59.400
So there's a cool example that it shows somewhere in here.

00:27:59.400 --> 00:28:00.040
Let's see.

00:28:00.040 --> 00:28:00.460
Yeah.

00:28:00.460 --> 00:28:05.540
If you go and click on the docs, you'll see a bit of a video thing here.

00:28:05.540 --> 00:28:12.820
And basically you can go into it and you can say, you know, teach it to do tests.

00:28:12.820 --> 00:28:14.360
You can navigate around.

00:28:14.360 --> 00:28:15.180
This is kind of cool.

00:28:15.180 --> 00:28:18.380
So if you're typing in the editor, you're kind of good.

00:28:18.380 --> 00:28:21.120
I mean, I know if you have RSI and stuff, that's not ideal.

00:28:21.120 --> 00:28:25.580
But one of the challenges is like, okay, I need to leave this and navigate over there.

00:28:25.580 --> 00:28:31.440
So you can say things like open some file name and it'll actually go through your editor

00:28:31.440 --> 00:28:33.320
and say, oh, that's over in this directory.

00:28:33.320 --> 00:28:35.460
You need to expand the section and it'll jump to it.

00:28:35.460 --> 00:28:40.180
Or you can say, go to this function or, you know, those kinds of things you can speak to

00:28:40.180 --> 00:28:42.080
it and it'll do it.

00:28:42.080 --> 00:28:43.560
So anyway, it's really cool.

00:28:43.560 --> 00:28:45.180
Why is it not the main item?

00:28:45.180 --> 00:28:47.320
Because I'm super excited about these kinds of things.

00:28:47.320 --> 00:28:52.600
The reason it's not is it hasn't really been touched for coming up on a year.

00:28:52.600 --> 00:28:54.620
And that was just a merge of some PR.

00:28:54.620 --> 00:28:56.580
Is it still going?

00:28:56.680 --> 00:28:57.220
I don't know.

00:28:57.220 --> 00:29:02.560
It was kind of working pretty good, but then it was throwing errors when I, so I don't

00:29:02.560 --> 00:29:02.660
know.

00:29:02.660 --> 00:29:03.520
I love the idea.

00:29:03.520 --> 00:29:06.980
If this thing comes back to life, you know, someone out there, let us know.

00:29:06.980 --> 00:29:12.340
Cause this is super cool, but it doesn't quite seem to be getting kept up with the editors

00:29:12.340 --> 00:29:14.040
and tools and so on.

00:29:14.040 --> 00:29:16.220
I liked your comment in the show notes.

00:29:16.220 --> 00:29:19.200
Serenade has seemed to gone silent.

00:29:19.200 --> 00:29:20.420
It has gone silent.

00:29:20.420 --> 00:29:21.700
Oh, thank you.

00:29:21.700 --> 00:29:22.580
It sure has.

00:29:22.580 --> 00:29:24.680
But it's still worth checking out.

00:29:24.680 --> 00:29:25.140
It's kind of cool.

00:29:25.280 --> 00:29:31.940
And then Brian Skin is when I, we've been talking a lot about packaging on this episode

00:29:31.940 --> 00:29:38.920
and I did my packaging discussion and inspired by that, or maybe just the discussion that

00:29:38.920 --> 00:29:41.220
I was also inspired by.

00:29:41.220 --> 00:29:50.540
They're setting up a Python distribution packaging round table, not just of the people inside Python

00:29:50.540 --> 00:29:57.580
core devs world, but in the broader ecosystem for like Anaconda and data science and that.

00:29:57.580 --> 00:29:58.040
All right.

00:29:58.040 --> 00:30:06.020
Do they have 13 maintainers across nine projects lined up for Tuesday, May 9th and a link to

00:30:06.020 --> 00:30:06.720
go attend it.

00:30:07.020 --> 00:30:09.840
So if you're interested, you can go check that out.

00:30:09.840 --> 00:30:11.340
Yeah.

00:30:11.340 --> 00:30:13.780
So I'll put a link in the show notes.

00:30:13.780 --> 00:30:13.980
Yeah.

00:30:13.980 --> 00:30:14.320
Cool.

00:30:14.320 --> 00:30:14.760
Yeah.

00:30:14.760 --> 00:30:16.860
That's it for the extras on my end.

00:30:16.860 --> 00:30:18.060
How about a joke?

00:30:18.060 --> 00:30:19.100
Yeah.

00:30:19.100 --> 00:30:23.700
But before we go there, I just wanted to say, I just remembered the person that like told

00:30:23.700 --> 00:30:25.060
me about Ryan in the first place.

00:30:25.060 --> 00:30:26.220
And now I feel like a dork.

00:30:26.220 --> 00:30:27.500
It was Paul Everitt.

00:30:27.500 --> 00:30:29.440
So thanks Paul from JetBrains.

00:30:29.440 --> 00:30:30.520
Awesome.

00:30:30.520 --> 00:30:31.020
Yeah.

00:30:31.020 --> 00:30:37.000
Paul was quite the host at PyCon and did a bunch of awesome stuff for many people and much

00:30:37.000 --> 00:30:37.400
appreciated.

00:30:37.400 --> 00:30:38.340
All right.

00:30:38.340 --> 00:30:39.080
How about a joke?

00:30:39.080 --> 00:30:39.840
All right.

00:30:39.840 --> 00:30:42.280
Before I put this on the screen, I'll tell you about it.

00:30:42.280 --> 00:30:46.660
You know, sometimes programming is just amazing.

00:30:46.660 --> 00:30:48.980
You just get in the zone and you just go and look what I built.

00:30:48.980 --> 00:30:49.820
Boom, boom, boom, boom.

00:30:50.140 --> 00:30:54.300
Other times you end up with a bald patch where you've been tearing your hair out.

00:30:54.300 --> 00:30:55.680
You're like, no, why?

00:30:55.680 --> 00:30:58.200
You may end up yelling at the computer, right?

00:30:58.200 --> 00:30:59.320
There's just like a bunch of stuff.

00:30:59.320 --> 00:31:04.380
And this joke highlights the small wins you might make in this situation.

00:31:04.380 --> 00:31:04.760
Okay.

00:31:04.760 --> 00:31:12.300
So it's just a person with two monitors, a bunch of energy drinks crushed next to them,

00:31:12.300 --> 00:31:14.500
a bunch of wrappers, empty coffee.

00:31:14.500 --> 00:31:18.020
They've clearly been here for a while and the arms are up like, yes.

00:31:18.660 --> 00:31:20.360
Wow, a different error message.

00:31:20.360 --> 00:31:21.660
Finally, some progress.

00:31:21.660 --> 00:31:24.220
Yes.

00:31:24.220 --> 00:31:31.280
Have I mentioned I've been working with a guy named Lauren on a Flutter mobile app?

00:31:31.280 --> 00:31:34.220
Let me tell you, there are a lot of tools in that tool chain.

00:31:34.220 --> 00:31:39.240
And more than once here, I've been like, yes, that's not the same error.

00:31:39.240 --> 00:31:40.260
We're making progress.

00:31:40.260 --> 00:31:41.500
Yeah.

00:31:44.500 --> 00:31:47.720
This was me yesterday for half the day.

00:31:47.720 --> 00:31:47.960
Yeah.

00:31:47.960 --> 00:31:56.780
Working with a Docker compile that used Docker and Artifactory and a whole bunch of other C++ stuff.

00:31:56.780 --> 00:31:57.900
Indeed.

00:31:57.900 --> 00:31:59.480
All right.

00:31:59.480 --> 00:32:03.780
Well, let's hope for different error messages for anyone out there struggling.

00:32:03.780 --> 00:32:06.280
And then eventually, no more error messages.

00:32:06.280 --> 00:32:08.100
That's a good one.

00:32:08.520 --> 00:32:10.760
Like, may you have a different error message tomorrow.

00:32:10.760 --> 00:32:12.020
Exactly.

00:32:12.020 --> 00:32:16.380
May you live in interesting times and may you have different error messages.

00:32:16.380 --> 00:32:17.540
All right.

00:32:17.540 --> 00:32:18.340
Well, thanks for being here, Brian.

00:32:18.340 --> 00:32:18.940
Thank you.

00:32:18.940 --> 00:32:19.600
Thanks, everyone, for listening.

00:32:19.600 --> 00:32:20.380
All right.

00:32:20.380 --> 00:32:20.880
Bye.