WEBVTT

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

00:00:05.080 --> 00:00:11.260
This is episode 386, recorded June 4th, 2024.

00:00:11.260 --> 00:00:12.860
I am Michael Kennedy.

00:00:12.860 --> 00:00:14.360
And I am Brian Okken.

00:00:14.360 --> 00:00:18.100
This episode is brought to you by Mailtrap.

00:00:18.100 --> 00:00:20.180
I want to tell you more about them later.

00:00:20.180 --> 00:00:24.740
And I also want to let you know that you can find us over on Fosstodon.

00:00:24.740 --> 00:00:27.560
We are Fosstodonians, as we've said before.

00:00:27.560 --> 00:00:32.120
If you want to talk to us on Mastodon, the links are in the top of your podcast player show notes.

00:00:32.120 --> 00:00:36.720
We're also on X, but do a little bit more stuff on Mastodon.

00:00:36.720 --> 00:00:37.500
So check us out there.

00:00:37.500 --> 00:00:43.840
Also, you can find us streaming live at exactly this time right now, Brian.

00:00:43.840 --> 00:00:49.180
Finally, which is usually 10 a.m. Pacific time on a Tuesday.

00:00:49.180 --> 00:00:52.600
So just pythonbytes.fm/live and you can be part of the live show.

00:00:52.600 --> 00:00:56.740
If you want, watch the older videos there if you like, or just subscribe in your podcast player.

00:00:56.740 --> 00:00:57.620
We really appreciate that.

00:00:57.620 --> 00:01:00.500
Finally, interest in our email that you've been writing.

00:01:00.500 --> 00:01:02.420
There's a lot of people signing up for it, Brian.

00:01:02.420 --> 00:01:08.340
So if you want an artisanal handcrafted digest of the show in written form, just visit pythonbytes.fm.

00:01:08.340 --> 00:01:13.540
Click on newsletter right there in the center and enter your email address.

00:01:13.540 --> 00:01:18.260
We won't share it, but we will send you an email after every show about what we covered.

00:01:18.260 --> 00:01:19.340
So you have it saved if you like.

00:01:19.340 --> 00:01:19.820
Yeah.

00:01:20.040 --> 00:01:20.240
Yeah.

00:01:20.240 --> 00:01:20.740
All right.

00:01:20.740 --> 00:01:21.940
You want to kick us off, Brian?

00:01:21.940 --> 00:01:22.760
I will.

00:01:22.760 --> 00:01:28.280
So this comes as a suggestion from somebody and I am sorry I didn't write the name down.

00:01:28.280 --> 00:01:29.700
So thanks.

00:01:29.700 --> 00:01:30.400
We do love it.

00:01:30.400 --> 00:01:37.120
I love it when people share important news with us and say, hey, you really should cover this because it's important.

00:01:37.120 --> 00:01:38.160
Thank you for that.

00:01:38.380 --> 00:01:39.840
So what am I talking about today?

00:01:39.840 --> 00:01:41.740
I'm talking about NumPy 2.0.

00:01:41.740 --> 00:01:44.020
And I don't, I was searching for it.

00:01:44.020 --> 00:01:48.400
I thought we'd covered some of the changes in NumPy 2.0, but I don't know if we have.

00:01:48.400 --> 00:01:52.220
So NumPy 2.0 has been in the works for a long time.

00:01:52.220 --> 00:01:56.940
And the reason why I'm bringing it up right now is because the release date is June 16th.

00:01:56.940 --> 00:02:02.660
It's right around the corner and NumPy is both, even you're probably using it.

00:02:02.660 --> 00:02:15.240
I guess I'll just say that you're, if, even if you're using any data science or any, any machine learning or something, you're probably using it, even if you don't use it directly, but you probably are using it directly.

00:02:15.240 --> 00:02:18.020
Anyway, lots of changes to the 2.0.

00:02:18.020 --> 00:02:20.140
We're linking to an announcement.

00:02:20.140 --> 00:02:24.240
We've got the main page, numpy.org announces it.

00:02:24.240 --> 00:02:25.580
You can just go there if you want.

00:02:25.860 --> 00:02:29.580
But there's also a news item for the release for the June 16th.

00:02:29.580 --> 00:02:31.760
There is some cool migration guide.

00:02:31.760 --> 00:02:37.700
So I'm not going to go over some, a lot of the details, but there are some breaking changes with this.

00:02:37.700 --> 00:02:40.300
So I'll go over a few things.

00:02:40.300 --> 00:02:43.220
First off, went over and looked at the migration guide.

00:02:43.220 --> 00:02:44.320
Let's see the release note.

00:02:44.320 --> 00:02:45.160
Migration guide.

00:02:45.160 --> 00:02:46.580
I thought this was super cool.

00:02:46.580 --> 00:02:55.740
So the migration guide is around to help you go through, navigate some of the changes that might be, might be the most,

00:02:55.740 --> 00:02:56.640
problematic.

00:02:56.640 --> 00:03:00.340
But one of the cool things is rough is helping out.

00:03:00.340 --> 00:03:11.020
So if you're using rough greater than version 0.2.0, you added a rule for NPY 201.

00:03:11.020 --> 00:03:14.620
So, but you can just look at the migration guide and find this.

00:03:14.980 --> 00:03:24.140
And you select this rule and run ruff and it will, and they can just run check or you can just run ruff to correct.

00:03:24.140 --> 00:03:34.680
Rough is around to help you with a lot of the stuff in this migration guide to try to change, modify your code from older NumPy to the NumPy 2.0.

00:03:34.940 --> 00:03:37.140
So that's really cool.

00:03:37.140 --> 00:03:38.540
I would probably start there.

00:03:38.540 --> 00:03:44.160
Also making sure you have tests around your code to make sure your code is working before and after the migration.

00:03:44.160 --> 00:03:49.380
And then the release notes gets down to a lot of the nitty gritty stuff.

00:03:49.640 --> 00:03:51.420
There's, there's new string stuff.

00:03:51.420 --> 00:03:55.360
There's performance improvements, but there's also hopping down.

00:03:55.360 --> 00:03:57.460
There's a lot of breaking changes.

00:03:57.460 --> 00:04:02.240
And, and, you know, we need to, we need to allow projects to do this.

00:04:02.240 --> 00:04:06.860
So I think this is a good thing that they're, they're moving towards some changes in NumPy.

00:04:07.120 --> 00:04:07.560
Yeah.

00:04:07.560 --> 00:04:10.660
Quite a big deal for a 2.0 of NumPy.

00:04:10.660 --> 00:04:11.160
Yeah.

00:04:11.160 --> 00:04:15.420
You know, it's been around a super long time, 15 years or something like that.

00:04:15.420 --> 00:04:17.940
So they must take it seriously.

00:04:17.940 --> 00:04:19.480
And that was released in 2006.

00:04:19.480 --> 00:04:20.840
Yeah.

00:04:20.840 --> 00:04:32.100
And like I said, this 2.0 migration to make sure that they were making, doing the right deprecations and omissions and changes necessary for the breaking,

00:04:32.100 --> 00:04:36.620
breaking some backwards compatibility, but for good reasons.

00:04:36.620 --> 00:04:40.400
I think it's, yeah, just, just heads up everybody.

00:04:40.400 --> 00:04:42.680
So.

00:04:42.680 --> 00:04:43.160
Yeah.

00:04:43.160 --> 00:04:43.740
Awesome.

00:04:43.740 --> 00:04:45.200
Well, that's a good one to cover for sure.

00:04:45.200 --> 00:04:46.880
I have another exciting one.

00:04:46.880 --> 00:04:48.420
Let's jump over to that.

00:04:48.420 --> 00:04:59.680
So if you are a fan of UVicorn, so UVicorn is one of the ways you can run ASGI, ASGI web app.

00:04:59.680 --> 00:05:04.460
So things like court, FastAPI, many others.

00:05:04.460 --> 00:05:06.300
You can use UVicorn.

00:05:06.300 --> 00:05:14.540
And it's definitely sort of the recommended way or the, at least suggested way that you run FastAPI or development.

00:05:14.540 --> 00:05:18.940
But then when you go into production, well, you've got challenges.

00:05:18.940 --> 00:05:27.480
So for example, you want your web server to look and see if your web app crashes for whatever reason, like something went wrong.

00:05:27.480 --> 00:05:28.520
Excuse me.

00:05:28.520 --> 00:05:29.540
Something went wrong with it.

00:05:29.540 --> 00:05:32.780
Something, maybe it ran out of memory.

00:05:32.780 --> 00:05:33.420
I don't know.

00:05:33.420 --> 00:05:34.080
All these things.

00:05:34.080 --> 00:05:34.300
Right.

00:05:34.860 --> 00:05:42.280
You need the app to sort of look at that and say, well, we're going to restart it because it looks like it's hung up or it looks like it crashed.

00:05:42.280 --> 00:05:43.160
Bring it back.

00:05:43.160 --> 00:05:49.400
The other thing you need to be able to do is you need to be able to potentially scale out across processes.

00:05:49.400 --> 00:05:51.980
So maybe I've, well, not maybe.

00:05:51.980 --> 00:05:54.840
At Python Bice, we have an eight CPU server.

00:05:54.840 --> 00:06:01.220
If we just create one process, you know, because of the GIL and other things, it might be kind of blocked up.

00:06:01.440 --> 00:06:06.760
If it's processing some slow requests, we don't want it to have to just queue up behind it.

00:06:06.760 --> 00:06:14.020
You want to be able to say, well, this one is busy, but there's three other processes that are clones of this thing running and handed off to one of them.

00:06:14.020 --> 00:06:14.200
Right.

00:06:14.200 --> 00:06:22.020
Typically that's done in production by using Gunicorn with uvicorn workers, which is like, why am I using two servers?

00:06:22.020 --> 00:06:23.900
Like to kind of manage the CEO.

00:06:23.900 --> 00:06:26.920
So like Gunicorn manages uvicorn running this stuff.

00:06:26.920 --> 00:06:27.540
Like what a mess.

00:06:27.540 --> 00:06:27.780
Right.

00:06:28.000 --> 00:06:34.740
So the news of this item is uvicorn now does all of that stuff itself.

00:06:34.740 --> 00:06:36.680
It no longer needs Gunicorn.

00:06:36.680 --> 00:06:39.200
And this news comes from us from John Hagan.

00:06:39.200 --> 00:06:40.780
So thanks for shooting this our way.

00:06:40.780 --> 00:06:45.600
So this is filed under the new multi-process manager.

00:06:45.600 --> 00:06:53.060
And it says the multi-process manager introduced by this includes a process, keep alive and process on detection.

00:06:53.280 --> 00:07:00.340
It also imitates Gunicorn and uses a bunch of different types of signals to control the child processes.

00:07:00.340 --> 00:07:04.300
And there's even, I haven't opened it up yet, but I will.

00:07:04.300 --> 00:07:04.960
There we go.

00:07:04.960 --> 00:07:08.400
I'll include a link to how you use this in production.

00:07:08.860 --> 00:07:10.440
So it's pretty easy.

00:07:10.440 --> 00:07:16.420
You just say uvicorn and then the module name and then the variable name of the app.

00:07:16.420 --> 00:07:18.600
So like main colon app, super common.

00:07:18.600 --> 00:07:21.000
But then the new thing is --workers.

00:07:21.000 --> 00:07:23.440
And you can specify how many workers you want.

00:07:23.440 --> 00:07:25.640
The documentation has four.

00:07:25.640 --> 00:07:31.480
It says unlike Gunicorn, uvicorn does not use pre fork, but uses spawn, which allows UV

00:07:31.480 --> 00:07:35.980
and a corn's multi-process manager to work well on windows as well.

00:07:35.980 --> 00:07:39.840
The default process manager monitors the status of child processes.

00:07:39.840 --> 00:07:42.500
Those are actually the things handling your web requests.

00:07:42.500 --> 00:07:46.600
And it automatically restarts child processes that die unexpectedly.

00:07:46.600 --> 00:07:47.860
That's a little morbid.

00:07:47.860 --> 00:07:53.560
Not only that, it'll also monitor the status of child processes through the pipeline.

00:07:53.780 --> 00:07:58.120
And if it gets stuck, it'll be killed off and restarted and so on.

00:07:58.120 --> 00:08:00.320
So that's the new thing.

00:08:00.320 --> 00:08:05.980
And if you're already using uvicorn, especially if you're using uvicorn workers with Gunicorn,

00:08:05.980 --> 00:08:08.820
this might be a pretty awesome way to simplify things.

00:08:08.820 --> 00:08:16.080
Not only it might be, you kind of need to because the uvicorn workers have been deprecated as well.

00:08:16.080 --> 00:08:18.140
Oh, the Gunicorn workers, you mean?

00:08:18.140 --> 00:08:19.820
Oh, yeah.

00:08:19.820 --> 00:08:20.780
Oh, yeah, that's right.

00:08:20.780 --> 00:08:24.420
It is deprecated and will be removed in a future release.

00:08:24.420 --> 00:08:26.020
So I guess get busy, people.

00:08:26.020 --> 00:08:29.060
Yeah.

00:08:29.060 --> 00:08:31.280
So exciting news.

00:08:31.280 --> 00:08:32.180
Yeah, indeed.

00:08:32.180 --> 00:08:32.580
Changes.

00:08:32.580 --> 00:08:33.080
Very exciting.

00:08:33.080 --> 00:08:36.080
Now, do you know what else is exciting, Brian?

00:08:36.080 --> 00:08:37.120
Mailtrap.

00:08:37.120 --> 00:08:37.740
Yeah.

00:08:37.740 --> 00:08:38.460
Our sponsor.

00:08:38.460 --> 00:08:38.860
Yeah.

00:08:38.860 --> 00:08:40.920
Let's talk about them for just a second.

00:08:40.920 --> 00:08:45.520
This episode is sponsored by Mailtrap, an email delivery platform that developers love.

00:08:45.520 --> 00:08:57.680
An email sending solution with industry best analytics, SMTP and email API, as well as SDKs for major programming languages and 24 seven human support.

00:08:57.680 --> 00:09:00.640
Try for free at Mailtrap dot IO.

00:09:00.640 --> 00:09:01.380
Over to you.

00:09:01.380 --> 00:09:01.940
All right.

00:09:01.940 --> 00:09:02.280
Next.

00:09:02.280 --> 00:09:03.900
We got Pixie.

00:09:04.120 --> 00:09:08.140
This is I did write down who suggested this suggested by Vic Gelson.

00:09:08.140 --> 00:09:09.020
So thanks, Vic.

00:09:09.020 --> 00:09:13.120
Pixie is a package management made easy.

00:09:13.120 --> 00:09:15.020
So another package manager thing.

00:09:15.020 --> 00:09:21.660
This is a is this something that says Conda package management simplified.

00:09:21.660 --> 00:09:27.060
So this is not trying to replace pip, but really trying to and, you know, things like that.

00:09:27.060 --> 00:09:29.840
But it's trying to replace Conda or build on Conda.

00:09:29.840 --> 00:09:33.800
So I haven't really dug too much into this, but I think it's an interesting project.

00:09:33.800 --> 00:09:41.960
This is cross platform written in Rust, but it's also it's also not just about Python.

00:09:41.960 --> 00:09:44.800
It's about other other languages as well.

00:09:44.800 --> 00:09:52.240
So the highlights are supports multiple languages, including Python C++ are using Conda packages.

00:09:52.240 --> 00:09:58.980
And there's there's yeah, some exciting information around it.

00:09:58.980 --> 00:10:04.460
It's cargo like I think that it's built thinking, you know, trying to get Conda to kind of look like cargo.

00:10:04.460 --> 00:10:10.420
I like I said, I haven't tried this, but it looks looks exciting.

00:10:10.620 --> 00:10:17.120
There is a a Pixie tutorial for doing Python development with Pixie.

00:10:17.120 --> 00:10:24.300
This walks through creating creating a Pixie pie project, which creates a pie project tunnel.

00:10:24.300 --> 00:10:30.440
I found this interesting that it is using using setup tools as a back end.

00:10:30.440 --> 00:10:34.940
And then there's some extra Pixie project stuff around Conda forward.

00:10:34.940 --> 00:10:37.060
So I think this is a tool.

00:10:37.320 --> 00:10:45.800
If you're publishing to the Conda space, this might be a tool worth looking into to try to manage your Conda environments.

00:10:45.800 --> 00:10:47.000
So, yeah, definitely.

00:10:47.000 --> 00:10:49.100
It's a super cool project.

00:10:49.100 --> 00:10:56.280
I feel like there was some collaboration between them and maybe the uv folks.

00:10:56.280 --> 00:10:57.180
I can't remember.

00:10:57.180 --> 00:10:59.220
But yeah, it's a super cool project.

00:10:59.220 --> 00:11:06.200
I actually had Wolf Fulprec and Ruben Arts on last year in October to talk about this on Talk Python.

00:11:06.200 --> 00:11:10.480
So if you want to hear them dive into why they built it and all the plans there.

00:11:10.480 --> 00:11:13.880
And actually, we talked about some other stuff as well that they're doing.

00:11:13.880 --> 00:11:16.040
We talked about like Nix OS and so on.

00:11:16.040 --> 00:11:16.780
So, yeah.

00:11:16.780 --> 00:11:17.420
Interesting.

00:11:17.420 --> 00:11:17.760
Awesome.

00:11:17.760 --> 00:11:18.660
Yeah, it's awesome.

00:11:18.660 --> 00:11:22.240
You know, there's a thousand flowers blooming in the packaging space right now.

00:11:22.280 --> 00:11:22.920
It's very exciting.

00:11:22.920 --> 00:11:23.440
Yeah.

00:11:23.440 --> 00:11:30.380
So this was mentioned by Vic, but he also gave us a little bit of what his take on it is.

00:11:30.380 --> 00:11:34.420
So I'm just going to quote from Vic right now.

00:11:34.420 --> 00:11:42.460
He says, Pixie is a project manager written in Rust that allows you to build Python projects without having Python previously installed.

00:11:42.460 --> 00:11:43.240
That's interesting.

00:11:43.240 --> 00:11:45.420
It's installable via Homebrew.

00:11:45.920 --> 00:11:51.200
There's support for supporting VS Code and PyCharm via plugins to deal with this.

00:11:51.200 --> 00:11:55.800
By default, Pixie fetches packages from Conda Forge.

00:11:55.800 --> 00:11:59.960
So you get the scientific stack in a pretty reliable and performant build.

00:11:59.960 --> 00:12:07.260
And if it's not there, it looks on PyPI or if there's a possibility to look on PyPI.

00:12:07.260 --> 00:12:10.100
So Vic tried to use it.

00:12:10.300 --> 00:12:18.380
He was really impressed and got his Jupyter environment with QPy using NVIDIA GPUs working really quickly.

00:12:18.380 --> 00:12:21.880
So at least one person says it's a pretty cool thing to try.

00:12:21.880 --> 00:12:23.620
Yeah.

00:12:23.620 --> 00:12:25.480
Scroll up on that screen you got there.

00:12:25.480 --> 00:12:27.320
Scroll up or the other one.

00:12:27.320 --> 00:12:27.660
Other up.

00:12:27.660 --> 00:12:28.040
Yeah.

00:12:28.040 --> 00:12:28.560
To the top.

00:12:28.560 --> 00:12:28.960
Yeah.

00:12:28.960 --> 00:12:31.460
2,100 people think it's a pretty good way.

00:12:31.460 --> 00:12:33.100
The number of stars there.

00:12:33.100 --> 00:12:33.380
Yeah.

00:12:33.380 --> 00:12:33.800
Yeah.

00:12:33.800 --> 00:12:34.460
Exactly.

00:12:34.460 --> 00:12:35.300
All right.

00:12:35.300 --> 00:12:39.220
Final one for me is Jupyter.

00:12:39.220 --> 00:12:46.340
So we already talked about NumPy, which also is the foundation of so many other data science projects.

00:12:46.340 --> 00:12:50.680
So here's maybe looking at it from the other direction of the data science space.

00:12:50.680 --> 00:12:52.760
Looking in from the top, from the UI.

00:12:52.760 --> 00:12:59.120
So JupyterLab 4.2 and Jupyter Notebook 7.2 are now available.

00:12:59.120 --> 00:13:00.700
So it's pretty awesome.

00:13:00.700 --> 00:13:04.000
JupyterLab includes three new features.

00:13:04.160 --> 00:13:05.920
I'll give you some shout outs on them.

00:13:05.920 --> 00:13:15.400
20 enhancements, 33 bug fixes, and 29 maintenance tasks included by 39 contributors, which is pretty awesome, right?

00:13:15.400 --> 00:13:15.920
Yeah.

00:13:16.000 --> 00:13:21.720
And Jupyter Notebook, I think, carries, you know, take some of these as forward as well.

00:13:21.720 --> 00:13:23.120
So also has a bunch of fixes.

00:13:23.120 --> 00:13:23.680
All right.

00:13:23.720 --> 00:13:25.140
So what are some of the features?

00:13:25.140 --> 00:13:28.600
Easier workspace management with the GUI.

00:13:28.600 --> 00:13:43.720
So you can, instead of using the CLI or just grabbing a URL, for example, if you want to have it open up a particular notebook when you launch it or something, you could create a workspace with that open, I believe, instead of just pointing to a URL to that particular notebook.

00:13:43.720 --> 00:13:44.160
Right.

00:13:44.160 --> 00:13:51.480
So now there's like a UI for workspaces that you can control, rename them, reset them, delete them, and so on.

00:13:51.480 --> 00:13:52.260
That's pretty cool.

00:13:52.260 --> 00:13:55.340
You have recently opened and closed files.

00:13:55.340 --> 00:14:02.380
So there used to be an extension called JupyterLab-recents to give you access to recent files and recent directories.

00:14:02.380 --> 00:14:04.140
And now that just comes built in.

00:14:04.140 --> 00:14:08.640
So I guess if you have the extension still installed, you'll really know what recent files you had.

00:14:08.760 --> 00:14:10.980
But now it probably disables it or something.

00:14:10.980 --> 00:14:15.040
It has full notebook windowing mode by default.

00:14:15.040 --> 00:14:17.900
And that's not like a screen layout type thing.

00:14:17.900 --> 00:14:22.460
Suppose you have a notebook with a thousand cells and their output.

00:14:22.460 --> 00:14:26.980
And those outputs have interactive notebook widgets and Jupyter widgets.

00:14:26.980 --> 00:14:29.080
And they've got a bunch of graphs and stuff.

00:14:29.080 --> 00:14:33.460
If you open that thing up and it just goes, well, we're going to render all thousand items.

00:14:33.460 --> 00:14:35.640
You know, it might take a moment, right?

00:14:35.640 --> 00:14:36.080
Yeah.

00:14:36.280 --> 00:14:46.840
So instead what it does is it basically renders only the cells visible on the window, which should be for as it gets larger and larger, should be more important for performance.

00:14:46.840 --> 00:14:49.260
Improved shortcut editor.

00:14:49.260 --> 00:14:51.780
So you can do a bunch of different better things.

00:14:51.780 --> 00:14:54.800
In fact, like even change default bindings and stuff.

00:14:54.800 --> 00:14:57.220
Dark high contrast theme.

00:14:57.220 --> 00:15:00.380
More keyboard shortcuts are putting some of them back.

00:15:00.680 --> 00:15:05.120
Like control D has been restored to allow users to delete a line and that type of stuff.

00:15:05.120 --> 00:15:06.640
So there you have it.

00:15:06.640 --> 00:15:13.340
If you are a notebook person, go forth and get the new one for you, whether JupyterLab or Jupyter Notebook.

00:15:13.340 --> 00:15:14.240
That's pretty exciting.

00:15:14.240 --> 00:15:18.240
I'm glad to see this is continuing with new releases.

00:15:18.240 --> 00:15:19.220
Yeah.

00:15:19.220 --> 00:15:23.240
It's a really nice, really nice way to work with Python and data science and all the things.

00:15:23.240 --> 00:15:24.300
All the things.

00:15:24.620 --> 00:15:26.340
How extra are you feeling today?

00:15:26.340 --> 00:15:27.880
I got a few extras.

00:15:27.880 --> 00:15:28.600
All right.

00:15:28.600 --> 00:15:28.900
Do it.

00:15:28.900 --> 00:15:29.340
Okay.

00:15:29.340 --> 00:15:29.800
Tell us about them.

00:15:29.800 --> 00:15:30.240
Okay.

00:15:30.240 --> 00:15:30.980
This was this.

00:15:30.980 --> 00:15:34.240
A couple of things came from Hugo von Ken.

00:15:34.240 --> 00:15:36.300
I practiced this earlier.

00:15:36.300 --> 00:15:38.040
Hugo von Kemenada.

00:15:39.040 --> 00:15:41.200
Sorry if I messed this up, Hugo.

00:15:41.200 --> 00:15:46.740
But anyway, some encouragement for us to test Python 3.13.

00:15:46.740 --> 00:15:51.620
So Python 3.13 is in the betas out.

00:15:51.620 --> 00:15:52.700
And we're trying to.

00:15:52.700 --> 00:15:57.620
It's got some interesting stuff in it, like the free threaded mode.

00:15:57.620 --> 00:16:01.140
So a couple links here to encourage people to help test.

00:16:01.140 --> 00:16:06.500
And some blog posts to help you know how to test it.

00:16:06.500 --> 00:16:08.620
So help test Python 3.13.

00:16:08.820 --> 00:16:13.060
There's an announcement here, strongly encouraging people to test.

00:16:13.060 --> 00:16:18.080
And then a specific test around the free threading Python without the GIL.

00:16:18.080 --> 00:16:23.420
And a reminder that some people call this no gill, but we don't like to say that anymore.

00:16:23.420 --> 00:16:25.640
So the free threading mode.

00:16:25.640 --> 00:16:27.720
And how to test that.

00:16:27.720 --> 00:16:30.400
And that one's a little tricky because you've got to.

00:16:30.400 --> 00:16:34.500
There are some official installers, but you can build it yourself as well.

00:16:34.500 --> 00:16:37.120
And it's available as well and get dead snakes.

00:16:37.800 --> 00:16:40.540
There's a question mark around GitHub actions.

00:16:40.540 --> 00:16:42.520
It'd be great if that works.

00:16:42.520 --> 00:16:44.700
Like to hear back from people.

00:16:44.700 --> 00:16:49.860
But we really want this to go well with this because it's a cool project.

00:16:49.860 --> 00:16:51.260
So help test that.

00:16:51.260 --> 00:16:53.920
So that's around the Python 3.13.

00:16:53.920 --> 00:16:55.400
That's probably the biggest change.

00:16:55.400 --> 00:17:03.260
The biggest change facing people using 3.13 and packages that you might be using that are on 3.13 and all those things.

00:17:03.260 --> 00:17:05.540
Because those were not built with this in mind.

00:17:05.540 --> 00:17:09.200
Whereas everything else is built, at least with the concept of backwards compatibility.

00:17:09.200 --> 00:17:09.600
Right.

00:17:09.700 --> 00:17:10.380
But this one.

00:17:10.380 --> 00:17:11.000
Right.

00:17:11.000 --> 00:17:11.620
But there's.

00:17:11.620 --> 00:17:12.160
Trying to break it.

00:17:12.160 --> 00:17:12.500
Break out.

00:17:12.500 --> 00:17:15.560
I'm sure there's places where they've had to change this.

00:17:15.560 --> 00:17:17.020
The normal stuff as well.

00:17:17.020 --> 00:17:17.660
Just to keep.

00:17:17.660 --> 00:17:18.960
Get that ready for that.

00:17:19.320 --> 00:17:28.660
So I encourage people, even if you're not planning on testing any part of the GIL versus with free threading, to test 3.13 anyway.

00:17:28.660 --> 00:17:32.920
Just to make sure that there are no surprises with your project and report them if there are.

00:17:32.920 --> 00:17:33.660
Last thing.

00:17:33.660 --> 00:17:38.180
I have been fairly quiet on the Python test podcast recently.

00:17:38.180 --> 00:17:41.280
But there is an episode that came out the other day.

00:17:41.280 --> 00:17:43.760
How to get pytest to import your code under test.

00:17:43.760 --> 00:17:45.480
So 2.21 is out.

00:17:45.480 --> 00:17:47.920
These are not going to come out very regularly.

00:17:47.920 --> 00:17:49.700
But occasionally they'll drop.

00:17:49.700 --> 00:17:50.780
So I'll mention them.

00:17:50.780 --> 00:17:52.380
And yeah.

00:17:52.380 --> 00:17:53.160
There's a new one.

00:17:53.160 --> 00:17:54.760
So those are my extras.

00:17:54.760 --> 00:17:55.300
Yeah.

00:17:55.300 --> 00:17:55.480
Cool.

00:17:55.480 --> 00:18:02.260
What's very excellent about podcast clients is even if something doesn't come out for six weeks,

00:18:02.260 --> 00:18:04.300
something that does boom, it just shows up right in your list.

00:18:04.300 --> 00:18:04.900
Yeah.

00:18:04.900 --> 00:18:06.240
People will know.

00:18:06.240 --> 00:18:07.560
Do you have extras?

00:18:07.560 --> 00:18:08.560
I do.

00:18:08.560 --> 00:18:11.480
I have just one quick bit of follow-up.

00:18:11.480 --> 00:18:14.780
So remember, Brian, we talked about the higher order company.

00:18:14.780 --> 00:18:20.900
We talked about Bend, a parallel programming language that is Python-like.

00:18:20.900 --> 00:18:23.180
It looks like Python, that sort of thing.

00:18:23.180 --> 00:18:27.160
I feel like I maybe gave the impression that it is Python.

00:18:27.160 --> 00:18:28.400
It's not Python.

00:18:28.400 --> 00:18:29.880
It's just Python-like.

00:18:30.900 --> 00:18:33.480
So you could look at code and say, yeah, that is Python.

00:18:33.480 --> 00:18:35.820
But you might not be able to import a bunch of things.

00:18:35.820 --> 00:18:37.500
Or there's certain things you can't do, right?

00:18:37.500 --> 00:18:39.680
So it's a big-time subset.

00:18:39.680 --> 00:18:42.660
And maybe not exactly even a subset, right?

00:18:42.660 --> 00:18:46.220
Anyway, I got some follow-up from Bernat Gabor.

00:18:46.220 --> 00:18:47.580
I just wanted to read you so.

00:18:47.580 --> 00:18:51.700
Because I think it sounds like he's got more experience than I do for sure.

00:18:51.960 --> 00:18:57.740
So it says, Bend looks roughly like Python, but is nowhere there, actually.

00:18:57.740 --> 00:18:59.580
For example, it has no for loops.

00:18:59.580 --> 00:19:04.460
Instead, you're meant to use the Bend keyword, hence the language name, to expand calculations.

00:19:04.460 --> 00:19:06.620
And another keyword to join branches.

00:19:06.620 --> 00:19:12.760
So basically, think of something that resembles Python at a high level, but without being compatible with that.

00:19:12.760 --> 00:19:16.440
And without any of the standard library or packages that the Python language provides.

00:19:16.440 --> 00:19:20.140
That being said, it does an impressive job at parallelization.

00:19:20.140 --> 00:19:24.020
But essentially, it's a brand new language with new syntax and paradigms you'll have to learn.

00:19:24.020 --> 00:19:26.580
It just shares the first look similarities to Python.

00:19:26.580 --> 00:19:27.680
So, yeah.

00:19:27.680 --> 00:19:30.180
If you want to check that out, I'm sure it's awesome.

00:19:30.180 --> 00:19:32.500
But it's going to be its own kind of thing.

00:19:32.500 --> 00:19:32.940
Yeah.

00:19:32.940 --> 00:19:33.400
Yeah.

00:19:33.400 --> 00:19:34.280
That's not funny.

00:19:34.280 --> 00:19:35.320
But you know what is funny?

00:19:35.320 --> 00:19:37.440
What's funny?

00:19:37.440 --> 00:19:37.980
The wild loops.

00:19:37.980 --> 00:19:38.940
They're hilarious.

00:19:38.940 --> 00:19:40.500
The wild loops are hilarious.

00:19:40.500 --> 00:19:41.120
All right.

00:19:41.120 --> 00:19:43.760
Describe what's going on in this picture without maybe the words.

00:19:43.760 --> 00:19:45.160
Here for us, Brian.

00:19:45.160 --> 00:19:48.620
People dancing at a party with somebody in the corner looking at them?

00:19:48.620 --> 00:19:49.060
Yeah.

00:19:49.060 --> 00:19:57.080
So there's a couple, there's like a crowd of people dancing, having fun, just footloose, carefree, having a good time.

00:19:57.080 --> 00:20:03.160
And there's someone in the corner with a party hat and a drink, but the most serious look on their face as if the world is about to end.

00:20:03.160 --> 00:20:05.140
And the people in the room don't know it.

00:20:05.500 --> 00:20:07.500
And the quote says, they don't know today.

00:20:07.500 --> 00:20:11.440
I finally ran into a situation that required a do while.

00:20:11.440 --> 00:20:16.460
You're just going about it like life is normal.

00:20:16.460 --> 00:20:18.400
And here it is, the do while.

00:20:18.400 --> 00:20:21.380
Do we have do while in Python?

00:20:21.380 --> 00:20:22.480
I was just thinking that.

00:20:22.480 --> 00:20:28.920
I think no, but we have while else, which you could probably bend into some weird, I don't know.

00:20:28.920 --> 00:20:30.840
I don't really think you ever need a do while.

00:20:30.840 --> 00:20:32.500
I don't know why languages have this.

00:20:32.500 --> 00:20:34.060
Anyway.

00:20:34.060 --> 00:20:34.720
Okay.

00:20:34.720 --> 00:20:35.980
Amazing.

00:20:35.980 --> 00:20:37.840
But it's a funny joke nonetheless.

00:20:37.840 --> 00:20:39.060
Yeah, definitely.

00:20:39.060 --> 00:20:40.320
So.

00:20:40.320 --> 00:20:42.160
Nice.

00:20:42.160 --> 00:20:43.420
Yeah.

00:20:43.420 --> 00:20:44.880
Do you know what's not funny?

00:20:44.880 --> 00:20:46.240
It's the end of the podcast.

00:20:46.240 --> 00:20:48.700
Oh, it is the end of the podcast.

00:20:48.700 --> 00:20:51.260
I have to say goodbye, Brian, to everyone.

00:20:51.260 --> 00:20:52.520
Until next week.

00:20:52.520 --> 00:20:53.080
Yes.

00:20:53.080 --> 00:20:53.920
Until next week.

00:20:53.920 --> 00:20:55.660
Thank you everyone for listening.

00:20:55.660 --> 00:20:57.580
We always appreciate it.

00:20:57.580 --> 00:20:58.380
Thanks.

00:20:58.380 --> 00:20:58.860
Bye.

