WEBVTT

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

00:00:04.900 --> 00:00:10.540
This is episode 393, recorded July 23rd, and I am Brian Okken.

00:00:10.540 --> 00:00:11.680
And I'm Michael Kennedy.

00:00:11.680 --> 00:00:15.360
If you'd like to watch the show live, you can catch us.

00:00:15.360 --> 00:00:18.460
You can go to pythonbytes.fm/live and you can watch it live.

00:00:18.460 --> 00:00:21.180
We'd love to have you on board.

00:00:21.180 --> 00:00:24.760
Usually it's Pacific time, Tuesdays at 10 a.m.

00:00:24.760 --> 00:00:26.380
Sometimes it changes.

00:00:26.900 --> 00:00:35.320
And if you'd like to connect with us or offer, if you've got a topic that you'd like to have us cover, you can find out how to contact us on pythonbytes.fm.

00:00:35.320 --> 00:00:40.460
Or you can follow all of us on Mastodon and Fosstodon.

00:00:40.460 --> 00:00:42.500
So check out those links in the show notes.

00:00:42.500 --> 00:00:43.040
Yeah.

00:00:43.040 --> 00:00:44.040
Should we jump in?

00:00:44.040 --> 00:00:44.980
Let's jump.

00:00:44.980 --> 00:00:51.660
I think the first thing I want to talk about comes to us from Matt Wilkie.

00:00:51.660 --> 00:00:55.820
And so Matt Wilkie suggested this cool project called Marimo.

00:00:55.820 --> 00:00:56.500
Have you heard of it?

00:00:56.780 --> 00:00:57.080
No.

00:00:57.080 --> 00:00:59.980
Think Jupyter, as in Jupyter notebooks.

00:00:59.980 --> 00:01:02.600
I feel like I'm on a vibe lately.

00:01:02.600 --> 00:01:08.380
Last time I talked about Saturn, the Mac desktop application that was like a minimalist Jupyter notebook.

00:01:08.380 --> 00:01:10.060
This is not that.

00:01:10.060 --> 00:01:13.320
This is a what's called a reactive notebook.

00:01:13.320 --> 00:01:18.280
And this actually solves one of the big pet peeves of mine about notebooks.

00:01:18.740 --> 00:01:26.360
And notebooks are basically human selected go to statements, which is a little bit sus in the end.

00:01:26.360 --> 00:01:27.620
I mean, it's great.

00:01:27.620 --> 00:01:34.700
But I can go and say, I can go and run cell one, two, three, four, go back and edit cell two, but not run it.

00:01:34.700 --> 00:01:35.920
Edit cell three.

00:01:36.100 --> 00:01:38.200
And then run cell three.

00:01:38.340 --> 00:01:39.520
And then you look at it.

00:01:39.520 --> 00:01:43.960
And you have cell one, which ran cell two, which has data and it never ran.

00:01:43.960 --> 00:01:47.700
And then old three, four, five, and then new three.

00:01:47.700 --> 00:01:49.440
How do you visually know about that?

00:01:49.440 --> 00:01:54.520
I mean, I guess there's a little number on the side that says one, two, three, four, five, right?

00:01:54.520 --> 00:01:55.580
As you go back up.

00:01:55.580 --> 00:02:01.040
But the ones that are not the latest numbers, those are not knowable effectively to you, right?

00:02:01.040 --> 00:02:08.920
And so this concept of a reactive notebook is it understands the relationships of the cells and the pieces of data in the cells.

00:02:08.920 --> 00:02:12.220
And so probably the best way here is to look at an example.

00:02:12.220 --> 00:02:12.760
Okay.

00:02:12.760 --> 00:02:15.680
If you go and look, let's see this one.

00:02:15.680 --> 00:02:16.520
I'm going to see.

00:02:16.520 --> 00:02:17.820
Come on, show me somewhere.

00:02:18.080 --> 00:02:21.900
So for example, if I go, I don't know where I would find a good example for you.

00:02:21.900 --> 00:02:25.780
Anyway, if I go and say in that cell three there, yeah, here we go.

00:02:25.780 --> 00:02:27.660
They've got a cool example on their page.

00:02:27.660 --> 00:02:34.160
If you go in there and you make some kind of change to a data cell, for example, if you say the number of items is 100,

00:02:34.160 --> 00:02:38.560
and then you print out that number of items says, I'm sorry, a thousand, then it'll say, well, it's a thousand.

00:02:38.560 --> 00:02:46.960
But if you go and edit, say, cell three, which then cell four is using some of the outputs from, and you make changes to it, it knows that.

00:02:47.040 --> 00:02:50.760
And it automatically re-renders and re-executes that Python code that is in there.

00:02:50.760 --> 00:02:54.860
And then you even have UI widgets, which you can put in and slide them around.

00:02:54.860 --> 00:02:59.460
And every cell that depends upon that slider bound to that piece of data runs.

00:02:59.460 --> 00:03:00.580
Oh, that's cool.

00:03:00.580 --> 00:03:01.900
That's how I want it to work anyway.

00:03:01.900 --> 00:03:02.520
Yeah.

00:03:02.520 --> 00:03:02.920
Exactly.

00:03:03.200 --> 00:03:03.460
Yeah.

00:03:03.460 --> 00:03:13.160
Another big change here is there's some other things that are worth talking about here is it's also Git friendly in the sense that the notebook format.

00:03:13.160 --> 00:03:17.200
So the notebook format for Jupyter, just keep contrasting it, right?

00:03:17.200 --> 00:03:24.380
Is a JSON file that has the cell definition and then the cell output embedded in the JSON file.

00:03:24.380 --> 00:03:31.880
And specifically because of the cell output, it can get pretty ugly in Git if you're not careful about clearing out the cell output every time.

00:03:32.080 --> 00:03:42.220
Because if it just uses something like call an API and get the current data and that data changes, the output changes, and then you get weird merge conflicts like this graph conflicted with the old graph.

00:03:42.220 --> 00:03:43.220
You're like, that's just the output.

00:03:43.220 --> 00:03:44.260
What is going on here, right?

00:03:44.260 --> 00:03:44.680
Yeah.

00:03:44.920 --> 00:03:46.500
So this is a pure Python.

00:03:46.500 --> 00:03:56.000
The notebook itself is stored as a pure Python thing that when you put into GitHub or any form of Git, honestly, it diffs like Python, right?

00:03:56.000 --> 00:03:56.540
Okay.

00:03:56.540 --> 00:04:06.160
So yeah, Python first design, reproducible by default because they're always executed in a deterministic order without hidden state.

00:04:06.160 --> 00:04:09.620
The editor comes with GitHub Copilot, autocomplete.

00:04:10.040 --> 00:04:10.400
Mm-hmm.

00:04:10.400 --> 00:04:11.140
Mm-hmm.

00:04:11.140 --> 00:04:15.440
Remember, Git, Jupyter Lab and Jupyter Notebooks.

00:04:15.440 --> 00:04:20.140
In order to get the autocomplete to render, you've got to hit like a cord of keys.

00:04:20.140 --> 00:04:21.280
It's not just typing.

00:04:21.280 --> 00:04:22.180
That'll make it come up.

00:04:22.180 --> 00:04:23.460
So pretty cool.

00:04:23.460 --> 00:04:24.840
This one's for you, Brian.

00:04:24.840 --> 00:04:26.060
Vim key bindings.

00:04:26.060 --> 00:04:26.820
Yay.

00:04:26.820 --> 00:04:28.240
Yeah, yeah.

00:04:28.240 --> 00:04:29.120
And a VS Code extension.

00:04:29.120 --> 00:04:31.300
So anyway, I think this is pretty neat.

00:04:31.300 --> 00:04:35.940
And it is open source under the Apache 2 license.

00:04:35.940 --> 00:04:38.100
It has 5.5,000 stars.

00:04:38.460 --> 00:04:40.600
I don't mean to sound super negative on notebooks.

00:04:40.600 --> 00:04:43.760
I think they've been transformative for data science.

00:04:43.760 --> 00:04:51.800
But I do think some of the drawbacks, like I laid out at the beginning of basically like human selected go-to statements is really tricky.

00:04:51.800 --> 00:04:55.780
And I definitely like the idea of a little bit more cohesion between the pieces.

00:04:55.780 --> 00:04:56.300
Yeah.

00:04:56.300 --> 00:05:00.900
And also just different takes on stuff that people build on each other.

00:05:00.900 --> 00:05:06.260
I'm sure that if some of these ideas take off, maybe Jupyter will pick them up.

00:05:06.440 --> 00:05:06.580
Sure.

00:05:06.580 --> 00:05:08.820
And Christopher out there does have a valid point.

00:05:08.820 --> 00:05:10.860
Wonder how it handles computationally heavy stuff.

00:05:10.860 --> 00:05:13.320
Sometimes you don't want a cell to rerun quite yet.

00:05:13.320 --> 00:05:13.720
Right?

00:05:13.720 --> 00:05:19.900
You know, if it takes 10 seconds for something to rerender, re-update, and you're just trying to edit that code.

00:05:20.480 --> 00:05:26.700
But I don't believe it rerenders until you render the cell that affects it.

00:05:26.700 --> 00:05:26.840
Yeah.

00:05:26.840 --> 00:05:28.320
But I mean, it still might be valid.

00:05:28.320 --> 00:05:31.500
There might be times for both behaviors.

00:05:31.500 --> 00:05:39.320
I can imagine like a time when, though, like if you're doing a demo where having it redo it automatically would be awesome.

00:05:39.320 --> 00:05:40.060
Yeah.

00:05:40.060 --> 00:05:40.540
Yeah.

00:05:40.540 --> 00:05:42.640
Anyway, take it or leave it.

00:05:42.640 --> 00:05:43.360
But there it is.

00:05:43.360 --> 00:05:43.840
Mario.

00:05:43.840 --> 00:05:44.580
Cool.

00:05:44.580 --> 00:05:45.580
Reactive notebook for Python.

00:05:45.580 --> 00:05:49.100
I want to talk about change a little bit.

00:05:49.100 --> 00:05:51.460
Mostly a change log.

00:05:51.460 --> 00:05:55.200
So wait, that wasn't really a good transition.

00:05:55.200 --> 00:05:57.600
But yeah, whatever.

00:05:57.600 --> 00:06:00.620
pytest has a new update.

00:06:00.620 --> 00:06:01.140
Yay.

00:06:02.280 --> 00:06:05.980
So pytest updates fairly regularly anyway.

00:06:05.980 --> 00:06:14.000
But I'm really excited about 8.3 that came out just the other day because there was a flag that I worked on.

00:06:14.000 --> 00:06:19.740
So there was in 8.0, there was in the 8.0 release.

00:06:19.740 --> 00:06:21.260
I don't even remember when that was.

00:06:21.260 --> 00:06:28.120
There was a change that I helped put in place that was to turn on tracebacks for X fails.

00:06:28.120 --> 00:06:30.160
So this is sort of inside baseball stuff.

00:06:30.160 --> 00:06:35.480
But if you expect a test to fail, it normally didn't produce a traceback.

00:06:35.480 --> 00:06:41.280
But I added or I and a few other people worked on a feature to turn on tracebacks.

00:06:41.280 --> 00:06:47.020
If you had the dash RX flag on, which means extra reporting for X fails.

00:06:47.020 --> 00:06:48.440
I thought that made sense.

00:06:48.440 --> 00:06:50.500
But it turned out that broke a whole bunch of people.

00:06:50.500 --> 00:06:51.000
Sorry.

00:06:51.000 --> 00:06:53.340
But it's fixed now again.

00:06:53.340 --> 00:06:55.400
It's back to the normal behavior by default.

00:06:55.400 --> 00:07:01.960
However, now there's a new flag called X fail dash TB that will turn those on.

00:07:01.960 --> 00:07:05.220
So it turns on independent of the dash RX flag.

00:07:05.220 --> 00:07:06.460
Those are separate now.

00:07:06.460 --> 00:07:09.480
So I like the way this is here.

00:07:09.480 --> 00:07:12.020
The other thing that I want to talk about.

00:07:12.020 --> 00:07:13.840
So that's one of the features.

00:07:13.840 --> 00:07:15.640
There's a bunch of new stuff also.

00:07:15.640 --> 00:07:19.600
There's a change to keywords and markers.

00:07:19.600 --> 00:07:24.700
And this is a little hard to quite get your head around, except for if you'd look at an example.

00:07:25.020 --> 00:07:31.860
So the idea is that you used to be able to do a marker run, run a marker test or a marked test.

00:07:31.860 --> 00:07:36.720
But you couldn't sometimes markers have parameters to them and you couldn't.

00:07:36.720 --> 00:07:43.600
But the now basically just the just is now if there's a parameterized marker, you can specify that.

00:07:43.600 --> 00:07:47.380
And there's a few, not all types, but a bunch of types are supported.

00:07:47.380 --> 00:07:51.660
So I think we've got ints, strings, bulls and none.

00:07:51.660 --> 00:07:52.720
So cool.

00:07:52.720 --> 00:07:54.160
Yeah, very cool.

00:07:54.160 --> 00:07:55.220
That's a cool feature.

00:07:55.220 --> 00:07:57.900
And then the no fold skipped.

00:07:57.900 --> 00:08:02.520
So apparently this was something that I didn't think I needed.

00:08:02.520 --> 00:08:05.120
But now that I see it, I really am happy about it.

00:08:06.160 --> 00:08:12.800
The idea was when you used to skip a test, it would tell you the file and line number.

00:08:12.800 --> 00:08:13.940
I guess I didn't realize that.

00:08:13.940 --> 00:08:18.760
But it wouldn't in the reporting, but short summary, but wouldn't tell you the name of the test.

00:08:18.760 --> 00:08:27.440
And now you can turn on a no fold and it'll show you, I guess, more information and a bunch of other features.

00:08:27.440 --> 00:08:34.840
I'm thinking a lot of this stuff came out of the, there was a recent pytest sprint that happened in Austria.

00:08:34.840 --> 00:08:37.980
And I'm thinking maybe a lot of these features came out of there.

00:08:37.980 --> 00:08:40.220
So cool, cool progress on pytest.

00:08:40.220 --> 00:08:41.880
Oh, that's a big news.

00:08:41.880 --> 00:08:42.680
Very big news.

00:08:42.680 --> 00:08:44.540
So love to see it moving along.

00:08:44.540 --> 00:08:45.560
Yeah.

00:08:45.560 --> 00:08:48.780
Would you say it's the de facto testing framework for Python?

00:08:48.780 --> 00:08:50.260
Are you still all about unit tests?

00:08:50.260 --> 00:08:53.700
I'm all about pytest.

00:08:53.700 --> 00:08:55.480
I don't hear much.

00:08:55.480 --> 00:09:00.320
There are some other fun ones coming up that I've looked at a little bit.

00:09:00.320 --> 00:09:02.680
But pytest is the big behemoth now.

00:09:02.680 --> 00:09:03.460
Yeah, for sure.

00:09:03.460 --> 00:09:06.560
It's not a big piece of code.

00:09:06.560 --> 00:09:09.180
It's just most people are using it as far as I can tell.

00:09:09.180 --> 00:09:10.580
Yes, indeed.

00:09:10.580 --> 00:09:11.740
Awesome.

00:09:11.740 --> 00:09:12.060
All right.

00:09:12.060 --> 00:09:13.620
First of all, a bit of real time follow up.

00:09:13.620 --> 00:09:15.240
Chris answering his own questions.

00:09:15.400 --> 00:09:16.320
Oh, look in the docs there.

00:09:16.320 --> 00:09:18.560
It's a way to mark sales as stale if they're too expensive.

00:09:18.560 --> 00:09:19.300
Oh, cool.

00:09:19.300 --> 00:09:19.820
Nice.

00:09:19.820 --> 00:09:20.020
Yeah.

00:09:20.020 --> 00:09:20.940
Excellent.

00:09:20.940 --> 00:09:27.580
Now let's move on to Pittsburgh, Austria, where we can talk about the Python Language Summit

00:09:27.580 --> 00:09:28.260
2024.

00:09:28.260 --> 00:09:32.600
This happened at PyCon 2024 in the US.

00:09:33.040 --> 00:09:35.520
And this happens every year.

00:09:35.520 --> 00:09:44.740
It occurs just before PyCon US happens because this is the biggest gathering of core devs and other core dev influencers, if you will.

00:09:44.740 --> 00:09:50.620
People who have projects that influence Python significantly like Pydantic or FastAPI have, I believe, in the past.

00:09:50.620 --> 00:09:55.400
So there were 45 people in attendance, which is a lot.

00:09:55.400 --> 00:09:56.040
Yeah.

00:09:56.040 --> 00:09:57.480
I think of the core devs.

00:09:57.480 --> 00:09:58.120
That's quite a few.

00:09:58.120 --> 00:09:59.680
So what was covered?

00:09:59.680 --> 00:10:04.820
So this year we had, you previously talked about the calendar version.

00:10:04.820 --> 00:10:11.300
So they discussed whether or not they should adopt calendar version name for Python.

00:10:11.300 --> 00:10:20.580
And it actually had more pushback than maybe you would imagine, basically around like, hey, there's a lot of systems that read the version and make meaning out of it already.

00:10:21.020 --> 00:10:24.120
And they might get freaked out, I think, is one of the takeaways.

00:10:24.120 --> 00:10:31.540
But my only pushback would be, come on, use the whole year, the 2024, not just 2024.

00:10:31.540 --> 00:10:35.240
Anyway, but it doesn't affect me too much one way or the other.

00:10:35.240 --> 00:10:36.660
I'll be happy with whatever it goes.

00:10:36.660 --> 00:10:42.600
We're already incrementing by year on 3.13, 3.14, 3.15.

00:10:42.600 --> 00:10:47.120
If we just skip a few and then keep incrementing by year, I don't know.

00:10:47.120 --> 00:10:47.800
It's a huge difference.

00:10:47.800 --> 00:10:48.300
Yeah.

00:10:48.540 --> 00:10:53.840
Then we have Python's security model after the XZ-utils backdoor.

00:10:53.840 --> 00:10:57.500
That was one of the, wow, we dodged a huge bullet.

00:10:57.500 --> 00:11:05.600
That was a multi-year campaign to get into the XZ backdoor, into the XZ utility for Linux.

00:11:05.600 --> 00:11:07.940
I don't know if you'll remember hearing us talk about that.

00:11:07.940 --> 00:11:15.400
But basically they berated the beleaguered maintainer of this really important tool until they let them become a core contributor.

00:11:15.400 --> 00:11:18.020
And that core contributor turned out to be a malicious actor.

00:11:18.340 --> 00:11:19.160
So pretty insane.

00:11:19.160 --> 00:11:19.680
Yeah.

00:11:19.680 --> 00:11:20.240
It's crazy.

00:11:20.240 --> 00:11:21.100
Yeah.

00:11:21.100 --> 00:11:25.820
So Pablo Gallino Salgado gave a talk about Python security model after that.

00:11:25.820 --> 00:11:28.860
Like, what are we going to do about these kinds of things?

00:11:28.860 --> 00:11:34.400
There's also a talk on native interface and limited C APIs.

00:11:34.860 --> 00:11:40.080
We had free-threaded ecosystems on how to talk about that and how to consider this.

00:11:40.080 --> 00:11:46.040
Remember, the free-threaded Python is coming in 3.13 as a custom build output, not by default.

00:11:46.040 --> 00:11:47.820
And we'll see how that goes.

00:11:47.900 --> 00:11:56.280
Basically, it's got a big asterisk by the accepted on the PEP saying, we reserve the right to unaccept this, basically.

00:11:56.280 --> 00:12:00.320
Another one that is super exciting for me is Python Unmobile by Malcolm Smith.

00:12:01.000 --> 00:12:12.320
And talked about how Python is basically the foundations of it being built for macOS and Android ARM 64 and x86.

00:12:12.320 --> 00:12:14.020
64 almost.

00:12:14.020 --> 00:12:15.240
Almost there.

00:12:15.380 --> 00:12:18.980
They've got BuildBot coming along and, like, how they're making this work.

00:12:18.980 --> 00:12:26.880
But in Python, they've got tier three support accepted for making sure that CPython works on iOS and Android.

00:12:26.880 --> 00:12:30.200
And now it's up to, well, what are we going to do about it?

00:12:30.200 --> 00:12:34.640
Which I think would be awesome to be able to write mobile apps in Python, right?

00:12:34.900 --> 00:12:36.820
So the foundations are coming along.

00:12:36.820 --> 00:12:39.280
Yeah, this is all based on the Beware project, right?

00:12:39.280 --> 00:12:41.440
So Beware, Toga, those types of things.

00:12:41.440 --> 00:12:43.040
And I'll let it begin.

00:12:43.040 --> 00:12:56.720
Come on, that would be really, really great to be able to have some kind of cool UI framework that lets us publish native or any form of apps writing in Python that publish as something other than a web page sent to mobile.

00:12:56.720 --> 00:13:00.940
Keeping with the awesome but also controversial a little bit is Pyrepple.

00:13:01.080 --> 00:13:06.420
Pyrepple is the, when you type Python, the repl that you get from PyPy, P-Y-P-Y.

00:13:06.420 --> 00:13:10.920
And it's, we've talked about this before, there's a new repl for Python, regular Python.

00:13:10.920 --> 00:13:25.540
And they're borrowing that one, which is a lot nicer, has a better editing of things like blocks of code instead of just want to go back one line at a time for, you know, an embedded if statement or an indented if statement.

00:13:25.540 --> 00:13:26.500
Something weird like that.

00:13:26.500 --> 00:13:27.460
A lot nicer.

00:13:27.680 --> 00:13:32.080
The uncertainty was at the time, at least, it didn't work on Windows.

00:13:32.080 --> 00:13:36.680
So a lot of people were like, look, it's going to be really weird to ship this and tell people to use it.

00:13:36.680 --> 00:13:38.480
But then if they're on Windows, they can't use it.

00:13:38.940 --> 00:13:48.360
So one of the big efforts is to get it working on the new Windows terminal, not the old cmd.exe crummy thing, but the new Windows terminal people should be using anyway.

00:13:48.360 --> 00:13:51.880
But it's still going to cause probably some infusion, I guess.

00:13:51.880 --> 00:13:53.620
Should we make PDB better?

00:13:53.620 --> 00:13:55.140
Honestly, I don't know.

00:13:55.140 --> 00:13:57.120
Limiting yield and async generators.

00:13:57.340 --> 00:13:58.840
Also an interesting talk.

00:13:58.840 --> 00:14:07.160
Annotations as transforms and some lightning talks by some folks, for example, unsupported build warnings.

00:14:07.160 --> 00:14:13.100
Rust in Python, formalizing the PEP prototype by Emily Morehouse.

00:14:13.100 --> 00:14:14.880
Python on iOS.

00:14:14.880 --> 00:14:15.520
Finally.

00:14:15.520 --> 00:14:18.260
Now this sounds like what I talked about with the Beware in mobile.

00:14:18.260 --> 00:14:19.380
I don't believe it is.

00:14:19.440 --> 00:14:24.580
I think this is more of, how do we get basically the Python REPL running on iOS and Android?

00:14:24.580 --> 00:14:33.520
If I understand it correctly, there's things like Pythonista and others that let you run basically limited run of Python.

00:14:33.520 --> 00:14:45.740
So, but it could be, I might be misunderstanding whether that's about, making a search more meaningful and efficient data sharing between sub interpreters, which is actually what is, I think, most exciting.

00:14:45.740 --> 00:14:46.060
Right.

00:14:46.160 --> 00:14:52.140
Sub interpreters open up possibility of even without free threaded Python, basically multi-threaded Python computationally.

00:14:52.140 --> 00:14:56.140
And, but then if you can't share any data, then it gets a little bit funky.

00:14:56.140 --> 00:15:01.440
So this talks about things like, well, what if you had the ability to have immutable data shared across things like that?

00:15:01.440 --> 00:15:01.640
Right.

00:15:01.640 --> 00:15:03.080
So anyway, very cool.

00:15:03.080 --> 00:15:05.120
People can check all of that out.

00:15:05.120 --> 00:15:07.040
All of these are written up with, details.

00:15:07.040 --> 00:15:09.660
And I believe it was Seth Michael.

00:15:09.660 --> 00:15:09.880
Yeah.

00:15:09.880 --> 00:15:12.460
Seth Larson, wrote all these articles.

00:15:12.460 --> 00:15:13.960
So thank you, Seth as well.

00:15:13.960 --> 00:15:14.440
Yeah.

00:15:14.440 --> 00:15:14.800
Great.

00:15:14.800 --> 00:15:15.580
yeah.

00:15:15.580 --> 00:15:16.460
Good, good length.

00:15:16.460 --> 00:15:21.620
I mean, enough detail to really understand what's going on, but not so much that it's overwhelming.

00:15:21.620 --> 00:15:24.940
You can really, catch up really quickly on some of these topics.

00:15:24.940 --> 00:15:25.840
That's pretty cool.

00:15:25.840 --> 00:15:26.320
Yeah.

00:15:26.320 --> 00:15:26.980
Indeed.

00:15:26.980 --> 00:15:28.440
over to you.

00:15:28.440 --> 00:15:32.580
It's not like, just getting into a dungeon, which would be bad.

00:15:32.580 --> 00:15:34.680
That would be, that would be very bad.

00:15:34.680 --> 00:15:35.920
How would you get out of the dungeon?

00:15:35.920 --> 00:15:36.320
Yeah.

00:15:36.520 --> 00:15:42.760
Well, you, you, you might want to check out bash dungeon if you wanted to get out of, if it was like a Linux dungeon.

00:15:42.760 --> 00:15:43.760
Linux dungeon.

00:15:43.760 --> 00:15:44.160
Yeah.

00:15:44.160 --> 00:15:44.160
Yeah.

00:15:44.160 --> 00:15:44.380
Yeah.

00:15:44.380 --> 00:15:51.460
So, I can't remember where I saw this, but, came across a project called bash dungeon.

00:15:51.460 --> 00:15:54.500
it's on GitHub.

00:15:54.700 --> 00:15:58.880
We got a link to it and the, apparently it's built off a couple other ones.

00:15:58.880 --> 00:16:01.520
There was a dungeons and directories and a bash crawl.

00:16:01.520 --> 00:16:03.860
but I'm, I'm looking at this.

00:16:03.860 --> 00:16:04.840
It's a work in progress.

00:16:04.840 --> 00:16:14.460
The idea is it's a game that's intended, to teach new year, new users, how to use their shell in a fun and interactive way.

00:16:14.460 --> 00:16:19.280
And, there's a, there's some various, like how to play it.

00:16:19.280 --> 00:16:23.500
You can get, there's like a get pod account or Docker.

00:16:23.500 --> 00:16:27.860
That's weird that the way I recommend is you can just, you can just clone the thing.

00:16:27.860 --> 00:16:29.900
So, and it has instructions on that too.

00:16:29.900 --> 00:16:31.480
Just clone the repo and see.

00:16:31.480 --> 00:16:35.000
You can play it as Docker, or through Docker.

00:16:35.000 --> 00:16:35.600
Yeah.

00:16:35.600 --> 00:16:40.300
So, the, so I'm, I'm just going to cheat and look at the repo here.

00:16:40.300 --> 00:16:52.980
So, you, when you, so the instructions are to, CD into bash dungeon and then do an LS, then CD into enter and then LS and then cat for parchment, cat the parchment.

00:16:52.980 --> 00:16:54.020
So you're reading the parchment.

00:16:54.020 --> 00:16:56.680
So yeah, let's follow it a little bit.

00:16:56.680 --> 00:17:01.040
So I'm going to go in to go into enter and there's a parchment.

00:17:01.040 --> 00:17:08.320
And then when you do a cat, you cat is how to like read a text file or just print the whole thing on your screen.

00:17:08.320 --> 00:17:11.800
So it has this little parchment with like, Oh, here's what you should do.

00:17:11.800 --> 00:17:18.560
You could use LS and, and, it recommends doing LS dash F, to try to teach you about that.

00:17:18.800 --> 00:17:24.760
and then when you, you, you look, look around right away and the only thing you've got is a corridor.

00:17:24.760 --> 00:17:29.100
So if you CD into the corridor, then there's a couple more parchments that you can read.

00:17:29.100 --> 00:17:38.740
there's a spell you can cast that the spell is a spell, a hint that says, Hey, you can use head dash end one to look at a file.

00:17:38.840 --> 00:17:39.480
See at the top.

00:17:39.480 --> 00:17:49.160
And if it happens to be a script, it might be runnable with a warning that in this, this repository, you can trust it, but you should not just run random scripts that you find.

00:17:49.160 --> 00:17:50.240
good warning.

00:17:50.240 --> 00:17:59.020
but then if you cast this, if the, there's a chest that has a cast and then it always, it talk teaches a bunch of different things.

00:17:59.140 --> 00:18:01.780
one of the cool things I like it.

00:18:01.780 --> 00:18:02.440
Oh, what was that?

00:18:02.440 --> 00:18:09.000
Is the file, file spell, which, will tell you what kind of, what type of file it is.

00:18:09.000 --> 00:18:10.980
Actually, I totally forgot about file.

00:18:10.980 --> 00:18:13.820
So, that's why I think this is fun.

00:18:13.820 --> 00:18:27.600
It's if you've ever done dungeon crawler type games, this is kind of a neat way to brush up on, on your bash skills and, or, or learn them in a new, if you've, if you're a new to bash.

00:18:27.600 --> 00:18:31.200
And it's kind of, it's kind of a fun way to, to present this information.

00:18:31.200 --> 00:18:33.120
So it's actually super fun.

00:18:33.120 --> 00:18:36.340
And since I've been doing a lot with Docker, I just literally hit copy and paste.

00:18:36.340 --> 00:18:40.960
And within about like 15 seconds of seeing it could run in Docker, I was already like corridor.

00:18:40.960 --> 00:18:41.840
It's insane.

00:18:41.840 --> 00:18:43.720
So fun.

00:18:43.720 --> 00:18:46.320
There's some, some cool stuff like the chest, for instance.

00:18:46.320 --> 00:18:57.040
So in this first chamber, there's nothing there or the corridor, there's nothing until you, open the chest and it tell the LP, it says,

00:18:57.060 --> 00:19:04.420
find an amulet of color and that it, to use it, attach it to your torch with --color equals always.

00:19:04.420 --> 00:19:08.760
So basically it's telling you to do color with your LS and teaches about it.

00:19:08.760 --> 00:19:09.420
This is.

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

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

00:19:10.280 --> 00:19:10.520
Yeah.

00:19:10.520 --> 00:19:10.600
Yeah.

00:19:10.600 --> 00:19:11.440
And then hidden.

00:19:11.440 --> 00:19:13.340
So that's what's printing out, but hidden.

00:19:13.340 --> 00:19:14.720
There's a spoiler alert.

00:19:14.720 --> 00:19:17.700
It's going to move a hidden directory to non hidden.

00:19:17.980 --> 00:19:20.960
So our first chamber was dot moves it to.

00:19:20.960 --> 00:19:21.460
Yeah.

00:19:21.460 --> 00:19:22.460
So I love it.

00:19:22.460 --> 00:19:23.000
I love it.

00:19:23.000 --> 00:19:23.360
Yeah.

00:19:23.360 --> 00:19:28.700
Mark out in the audience wonders if at the end, they'll give you tree as a map spell.

00:19:28.700 --> 00:19:29.380
I love it.

00:19:29.380 --> 00:19:30.560
Oh, I bet.

00:19:30.560 --> 00:19:32.060
Mark has played some muds.

00:19:32.060 --> 00:19:33.040
It's a multi-user dungeon.

00:19:33.040 --> 00:19:33.900
I used to play.

00:19:33.900 --> 00:19:36.840
I used to play some, spend a lot of time over there.

00:19:36.840 --> 00:19:40.140
And this reminds me of that a little bit and it's making me smile.

00:19:40.140 --> 00:19:40.600
Yeah.

00:19:40.600 --> 00:19:41.300
Let's go shadow's edge.

00:19:41.300 --> 00:19:46.100
I've never done multi-user dungeons, but I totally was doing lots of dungeons back in my,

00:19:46.100 --> 00:19:48.140
uh, TRS 80 days.

00:19:48.140 --> 00:19:48.700
So.

00:19:48.700 --> 00:19:49.260
Yeah.

00:19:49.260 --> 00:19:50.520
I remember the dial up.

00:19:50.520 --> 00:19:51.500
You'd be like, oh yeah.

00:19:51.500 --> 00:19:55.700
You'd hear maybe like a 30, 32 K, 36 K connection.

00:19:55.700 --> 00:19:56.820
Oh, that's going to be a good day.

00:19:56.820 --> 00:19:59.660
None of that 9,600 business.

00:19:59.660 --> 00:20:01.880
I won't be able to read the texts that's coming down.

00:20:01.880 --> 00:20:03.000
Yeah.

00:20:03.000 --> 00:20:04.060
I love that stuff.

00:20:04.060 --> 00:20:04.720
Yeah.

00:20:04.720 --> 00:20:05.280
Anyway.

00:20:05.960 --> 00:20:06.120
Yeah.

00:20:06.120 --> 00:20:07.720
This is actually really, really cool.

00:20:07.720 --> 00:20:08.420
Really cute.

00:20:08.420 --> 00:20:09.840
all right.

00:20:09.840 --> 00:20:10.920
Those are our items.

00:20:10.920 --> 00:20:16.400
I want to remind everybody that, that we are sponsored this week by ourselves.

00:20:16.400 --> 00:20:22.680
So, please, if you enjoyed the show, check out, start with this pie test

00:20:22.680 --> 00:20:22.840
stuff.

00:20:22.840 --> 00:20:26.440
No, check out, Michael's, Talk Python Training.

00:20:26.440 --> 00:20:31.980
if you, if you go to python test.com, there's, pie test trainings as well.

00:20:31.980 --> 00:20:33.780
And you can have links to my pie test book.

00:20:34.060 --> 00:20:39.600
a new, new, new shorter pie test training coming up soon, but, all sorts of, there's

00:20:39.600 --> 00:20:43.300
always exciting new, courses on Talk Python Training.

00:20:43.300 --> 00:20:44.280
So check that out.

00:20:44.280 --> 00:20:44.440
So.

00:20:44.440 --> 00:20:44.620
Yeah.

00:20:44.620 --> 00:20:44.880
Indeed.

00:20:44.880 --> 00:20:45.360
Thanks.

00:20:45.360 --> 00:20:45.520
Yeah.

00:20:45.520 --> 00:20:46.160
Check them all out.

00:20:46.160 --> 00:20:48.000
Do you have any links to that stuff?

00:20:48.000 --> 00:20:48.440
I do.

00:20:48.440 --> 00:20:51.020
And links to all those things you mentioned are at the top of the show notes.

00:20:51.020 --> 00:20:51.600
Yeah.

00:20:51.720 --> 00:20:52.360
yes.

00:20:52.360 --> 00:20:55.880
So how about some drama that we always love some drama, right?

00:20:55.880 --> 00:20:57.080
Yeah.

00:20:57.080 --> 00:21:04.040
So David, the data script author, over on Fosstodon, Mastodon happens to be on Fosstodon.

00:21:04.040 --> 00:21:06.740
She sent us, sent us a post.

00:21:06.740 --> 00:21:09.420
I mentioned said, Hey, thoughts.

00:21:09.680 --> 00:21:16.920
And the thoughts are on a discuss over on python.org that says, py simple GUI now requires

00:21:16.920 --> 00:21:18.540
a paid license opinions.

00:21:18.540 --> 00:21:23.880
So there's this project called py simple GUI and I actually invited them to be on talk Python,

00:21:23.880 --> 00:21:25.020
but they never got back to me.

00:21:25.020 --> 00:21:26.880
So I guess I'm feeling better about that.

00:21:26.880 --> 00:21:31.060
Anyway, the post says, a rather popular GUI package.

00:21:31.060 --> 00:21:36.740
It's like a real simple way to specify like a quick way to specify a simple GUI in Python.

00:21:36.740 --> 00:21:36.960
Yeah.

00:21:36.960 --> 00:21:37.480
Yeah.

00:21:37.480 --> 00:21:43.300
Recently changed this policy now requires a paid license to go forward.

00:21:43.300 --> 00:21:44.500
You're doing the hobby stuff.

00:21:44.500 --> 00:21:46.840
You can use it for free, but if it's commercial, you got to pay for it.

00:21:46.840 --> 00:21:53.060
I don't know a whole lot of the details about it, but went so far as to go back and remove

00:21:53.060 --> 00:21:56.080
the older commits that had the older codes.

00:21:56.080 --> 00:21:58.860
You can't even roll back the repository to the code.

00:21:58.980 --> 00:22:01.280
Anyway, it's, it's interesting.

00:22:01.280 --> 00:22:05.340
And I think it's just, if you're thinking about an open source project, you're thinking

00:22:05.340 --> 00:22:07.120
about maybe charging for it.

00:22:07.120 --> 00:22:08.820
I'm certainly not against that.

00:22:08.820 --> 00:22:09.840
Like you put in a lot of effort.

00:22:09.840 --> 00:22:10.660
It's your project.

00:22:10.660 --> 00:22:14.840
If that's what you want to do to try to make a living from it and put more energy into it.

00:22:14.840 --> 00:22:15.160
Fine.

00:22:15.160 --> 00:22:20.840
I think the frustration here is that it, it was open source.

00:22:20.840 --> 00:22:23.120
It got a bunch of contributions from other people.

00:22:23.120 --> 00:22:28.380
And then it got switched to switched to commercial out of the blue with all those old commits getting

00:22:28.380 --> 00:22:28.960
blown away.

00:22:28.960 --> 00:22:29.380
And stuff.

00:22:29.380 --> 00:22:31.820
So anyway, people have thoughts.

00:22:31.820 --> 00:22:33.100
They can check out this conversation.

00:22:33.100 --> 00:22:33.680
That's interesting.

00:22:33.680 --> 00:22:34.280
Yeah.

00:22:34.280 --> 00:22:35.100
Yeah.

00:22:35.100 --> 00:22:41.540
Also just two other really quick things here is the code in a castle in Tuscany thing

00:22:41.540 --> 00:22:45.060
still has some, some spots available.

00:22:45.060 --> 00:22:46.780
So people can check that out.

00:22:46.780 --> 00:22:53.540
If they want to learn Python, FastAPI, basically build a high performance web app in Python,

00:22:53.540 --> 00:22:58.100
using some database stuff and Pydantic and all sorts of fun things and do load testing,

00:22:58.100 --> 00:22:59.900
but do that in the first half of the day.

00:22:59.900 --> 00:23:04.760
And the second half of the day, go to vineyards and other excursions in Tuscany with me and a bunch of other,

00:23:04.760 --> 00:23:06.640
I thought enthusiasts, check that out.

00:23:06.640 --> 00:23:13.120
And I just realized as we were talking, as I was talking about that Mario thing is real similar to shiny for Python as well,

00:23:13.120 --> 00:23:15.800
which is also one of these reactive web dashboards.

00:23:15.800 --> 00:23:24.260
So we have a 100% free, no strings attached reactive web dashboards with shiny course you can check out over at talk Python.

00:23:24.260 --> 00:23:26.360
So people can check that out in the show notes.

00:23:26.360 --> 00:23:28.020
And yeah, like I said, it's free.

00:23:28.020 --> 00:23:29.940
So if it sounds interesting, give it a try.

00:23:29.940 --> 00:23:30.500
How about you?

00:23:30.500 --> 00:23:31.780
A few extras.

00:23:31.780 --> 00:23:36.480
Last week we mentioned Python 3.13 beta 3.

00:23:36.480 --> 00:23:43.020
Now Python 3.13 beta 4 is out, came out a couple of days after we talked about 3.

00:23:43.960 --> 00:23:49.840
But this is the beta 4 is the final beta, last chance for bug fixes.

00:23:49.840 --> 00:23:56.520
So please, if you have a package that should be tested against new Pythons,

00:23:56.520 --> 00:24:00.980
which means if you have an open source package, Python package, you should go test it.

00:24:00.980 --> 00:24:02.600
Test it against 3.13.

00:24:02.600 --> 00:24:04.340
Make sure that it works.

00:24:04.340 --> 00:24:05.520
So there's that.

00:24:05.520 --> 00:24:11.200
Also, when I was there, there was a pop-up that I closed talking about new guidelines.

00:24:11.200 --> 00:24:12.920
So there's, I think these are new,

00:24:13.220 --> 00:24:17.920
but there's, if you want to hang out on discuss.python.org,

00:24:17.920 --> 00:24:19.680
please check out the community guidelines.

00:24:19.680 --> 00:24:23.400
These are some pretty easy to read, pretty standard stuff.

00:24:23.400 --> 00:24:27.220
And if you're thinking, why do we need new community guidelines?

00:24:27.220 --> 00:24:29.700
Or why are we emphasizing this?

00:24:29.700 --> 00:24:36.160
There's a, there was some drama in the Python world a little bit a couple weeks ago.

00:24:36.160 --> 00:24:42.780
And there's an article called inclusive communications expectations in Python spaces put out by the,

00:24:42.780 --> 00:24:44.920
the steering council.

00:24:44.920 --> 00:24:47.040
I think that's who put that.

00:24:47.040 --> 00:24:47.280
Yeah.

00:24:47.280 --> 00:24:50.180
The steering council does not endorse bad behavior, essentially.

00:24:50.180 --> 00:24:52.420
So a decent read.

00:24:52.620 --> 00:24:58.200
So if you want to talk about, look about how to be a good citizen in Python, check this out.

00:24:59.080 --> 00:25:06.180
Last thing I wanted to bring up is we've talked about security in, in web browsers and stuff before.

00:25:06.400 --> 00:25:09.920
And there was some news I noticed on Forbes the other day.

00:25:09.920 --> 00:25:13.920
Google confirms bad news for 3 billion Chrome users.

00:25:13.920 --> 00:25:15.280
What's the bad news?

00:25:15.960 --> 00:25:22.100
They had, they were trying to do, do I like for four years or something like that,

00:25:22.100 --> 00:25:27.240
talking about killing, tracking cookies, but they're not going to kill those anymore.

00:25:27.240 --> 00:25:30.040
That, that effort has stopped.

00:25:30.040 --> 00:25:32.040
A quick summary.

00:25:32.040 --> 00:25:33.620
Maybe, maybe there's more details here.

00:25:33.620 --> 00:25:33.840
Sure.

00:25:33.840 --> 00:25:39.160
But yeah, it's a, it's just, I don't think, I don't think it's going anywhere.

00:25:39.160 --> 00:25:40.880
Chrome likes to make, I love it.

00:25:40.880 --> 00:25:45.940
So actually I think the title is, is, you know, 180 degrees.

00:25:45.940 --> 00:25:46.360
Wrong.

00:25:46.360 --> 00:25:50.680
I think this is good news for Chrome users and for people on the internet.

00:25:50.680 --> 00:25:51.220
All right.

00:25:51.220 --> 00:25:57.240
Because the alternative was our web browsers will have baked in fracking that is part of

00:25:57.240 --> 00:26:02.480
the execution of your environment, that it tracks you and has an ad engine that lets it

00:26:02.480 --> 00:26:08.480
think about you and then apply these for, and with, with third-party cookies, we have tools

00:26:08.480 --> 00:26:14.480
that are not in control of Google or Chrome that will basically neutralize the vast majority

00:26:14.480 --> 00:26:14.820
of them.

00:26:14.820 --> 00:26:15.240
Right.

00:26:15.480 --> 00:26:22.060
Nextiness, I whole ad blockers, Vivaldi or others, you know, other things that are more

00:26:22.060 --> 00:26:23.100
private focused browsers.

00:26:23.100 --> 00:26:28.700
And yeah, to me, I think we've talked about this before, Brian, we even talked about it

00:26:28.700 --> 00:26:29.880
before we hit record.

00:26:30.100 --> 00:26:36.480
I think there's a fundamentally wrong assumption or an axiom of what Google believes the internet

00:26:36.480 --> 00:26:37.280
should be.

00:26:37.280 --> 00:26:42.160
I think Google believes the internet should be, it must be that you can track people on

00:26:42.160 --> 00:26:42.580
the internet.

00:26:42.580 --> 00:26:43.980
Let's do that in a nice way.

00:26:43.980 --> 00:26:44.880
Like, no.

00:26:45.260 --> 00:26:49.740
I know neither of us think that the first assumption should be, of course, you have to track people.

00:26:49.740 --> 00:26:50.960
How can we do that nicely?

00:26:50.960 --> 00:26:53.920
Like, wait, why do we have to, of course, you have to be able to track people?

00:26:53.920 --> 00:26:54.680
No, you don't.

00:26:54.680 --> 00:27:00.900
You can have ads based on the content of the site, for example, you know, or the content

00:27:00.900 --> 00:27:01.440
of the article.

00:27:01.440 --> 00:27:04.820
It doesn't have to be Michael viewed this thing, then that thing, then that thing.

00:27:04.880 --> 00:27:11.120
And so now, now we're going to sell him shoes while he's trying to find hardware supplies

00:27:11.120 --> 00:27:12.380
or who knows whatever, right?

00:27:12.380 --> 00:27:12.840
Yeah.

00:27:12.840 --> 00:27:17.140
I mean, we already have, like, even without, I've done a little bit of work on, I know you

00:27:17.140 --> 00:27:21.160
have too, about how do you do, like, could you do targeted ads without tracking?

00:27:21.160 --> 00:27:22.700
And of course you can.

00:27:22.700 --> 00:27:28.660
There's, based on, I don't know how it does it, but based on the IP address or whatever,

00:27:28.660 --> 00:27:34.720
that's a little creepy, but basically even regions, you can find out.

00:27:34.720 --> 00:27:39.260
But essentially, like, based on the content, but also based on, like, you know, what country

00:27:39.260 --> 00:27:40.060
is the person in?

00:27:40.060 --> 00:27:44.840
I'm okay with people knowing what country I live in or, you know, which part of the country

00:27:44.840 --> 00:27:49.400
even, so that, you know, maybe there's a festival in Oregon that I might want to see.

00:27:49.400 --> 00:27:50.400
Throw me in there for that.

00:27:50.400 --> 00:27:50.900
That's fine.

00:27:50.900 --> 00:27:54.040
But, like, you don't need to track my personal stuff.

00:27:54.040 --> 00:27:55.020
No.

00:27:55.020 --> 00:27:56.000
Anyway.

00:27:56.000 --> 00:27:56.520
Yep.

00:27:56.520 --> 00:27:57.760
Indeed, indeed.

00:27:57.760 --> 00:28:00.720
Real, real quick, real-time follow-up.

00:28:00.720 --> 00:28:04.700
Mark also says, Ari, I said, well, GUI, it wasn't exactly open source.

00:28:04.700 --> 00:28:07.360
It was more source open before this change.

00:28:07.360 --> 00:28:11.680
The project had a warning that it does not accept user-submitted code nor user-submitted

00:28:11.680 --> 00:28:12.260
documentation.

00:28:12.260 --> 00:28:14.440
So it was more source open anyway.

00:28:14.440 --> 00:28:16.560
And with that.

00:28:16.560 --> 00:28:17.200
Don't.

00:28:17.200 --> 00:28:18.380
Yeah, exactly.

00:28:18.380 --> 00:28:19.320
I want to help.

00:28:19.320 --> 00:28:19.780
Yeah, no.

00:28:19.780 --> 00:28:20.980
All right.

00:28:20.980 --> 00:28:23.440
I want to go over to something funny.

00:28:23.440 --> 00:28:25.040
I sure do.

00:28:25.040 --> 00:28:25.720
Okay.

00:28:25.880 --> 00:28:27.480
I got a few things.

00:28:27.480 --> 00:28:29.060
Anyway.

00:28:29.060 --> 00:28:36.420
So let's go to, there was a, I got this from, who did I get this from?

00:28:36.420 --> 00:28:40.860
VMBresser posted this on Mastodon, so I saw it.

00:28:40.860 --> 00:28:46.740
So this is a SMBC, Saturday morning breakfast cereal cartoon.

00:28:46.740 --> 00:28:49.540
There's a lot of text here.

00:28:49.540 --> 00:28:51.280
So, you know, bear with me.

00:28:51.280 --> 00:28:56.820
A woman looking at, looks like a, I don't know, desk with a microphone.

00:28:56.820 --> 00:28:58.700
Maybe she's being, anyway.

00:28:58.700 --> 00:29:00.780
It looks almost like a court situation.

00:29:01.040 --> 00:29:01.440
Kind of.

00:29:01.440 --> 00:29:04.720
And she says, ladies and gentlemen of Congress.

00:29:04.720 --> 00:29:05.940
Oh, she's speaking to Congress.

00:29:05.940 --> 00:29:08.980
Ladies and gentlemen of Congress, I have bad economic news.

00:29:08.980 --> 00:29:14.300
Historically, it has been very hard to measure whether or not our economy offers many good

00:29:14.300 --> 00:29:15.520
investment opportunities.

00:29:15.520 --> 00:29:18.680
However, new methods have been discovered.

00:29:18.680 --> 00:29:25.000
Economists can now determine how many good opportunities exist by seeing how much money we

00:29:25.000 --> 00:29:28.180
can raise for transparently idiotic startups.

00:29:28.180 --> 00:29:30.480
This is actually a decent idea.

00:29:30.480 --> 00:29:35.840
And one of the congresspersons says, how bad is it?

00:29:35.840 --> 00:29:42.380
She says, well, as of this morning, I myself secured $40 million in Series A funding for

00:29:42.380 --> 00:29:46.300
this balloon, which I have written AI on it with a Sharpie.

00:29:46.300 --> 00:29:47.760
Amazing.

00:29:47.760 --> 00:29:49.420
Wow, wow, wow.

00:29:49.420 --> 00:29:49.820
Amazing.

00:29:49.820 --> 00:29:51.280
When is the Series B?

00:29:51.280 --> 00:29:55.320
And may God have mercy on us all.

00:29:55.320 --> 00:30:00.460
I think that's a positive indicator, although it could be the sign of an impending crash.

00:30:00.460 --> 00:30:05.960
But there's so many businesses that are basically rappers around ChatGPT.

00:30:05.960 --> 00:30:07.940
And they're like, we're revolutionizing the world.

00:30:07.940 --> 00:30:09.880
If not, you're just...

00:30:09.880 --> 00:30:10.800
Until the API changes.

00:30:10.800 --> 00:30:11.380
Yeah.

00:30:11.380 --> 00:30:12.260
Or the cost changes.

00:30:12.260 --> 00:30:15.020
Or it's $19.99 all over again.

00:30:15.020 --> 00:30:16.200
Yeah.

00:30:16.320 --> 00:30:19.200
Cue the Prince and Will Smith songs.

00:30:19.200 --> 00:30:23.120
The last thing I wanted to bring up was PyJokes.

00:30:23.120 --> 00:30:24.940
PyJokes has...

00:30:24.940 --> 00:30:27.140
We've used jokes from PyJokes before.

00:30:27.140 --> 00:30:31.640
Last release was in 2019, but there was just a new release this month.

00:30:31.640 --> 00:30:32.080
Woo!

00:30:32.080 --> 00:30:34.040
Go back and install PyJokes.

00:30:34.040 --> 00:30:34.840
Let's go.

00:30:35.220 --> 00:30:40.180
So PyJokes, you can just pip install it and you can run PyJokes.

00:30:40.180 --> 00:30:42.860
I pulled out a few that I liked.

00:30:42.860 --> 00:30:45.940
If at first you don't succeed, call it version 1.0.

00:30:45.940 --> 00:30:49.800
Actually, that'll be 0.5.

00:30:49.800 --> 00:30:50.240
Anyway.

00:30:50.240 --> 00:30:50.900
Yeah, yeah, yeah.

00:30:50.900 --> 00:30:52.060
Okay.

00:30:52.060 --> 00:30:53.880
I'll skip one.

00:30:54.600 --> 00:30:55.700
Oh, that's pretty good though.

00:30:55.700 --> 00:30:58.640
A product manager walks into a bar, asks for a drink.

00:30:58.640 --> 00:31:01.740
The bartender says no, but he'll consider adding it later.

00:31:01.740 --> 00:31:03.260
Okay.

00:31:03.260 --> 00:31:04.040
The last one.

00:31:04.040 --> 00:31:09.640
Triumphantly, Beth removed Python 2.7 from her server in the year 2030.

00:31:09.640 --> 00:31:15.300
Finally, she said with glee, only to see the announcement for Python 4.4.1.

00:31:15.300 --> 00:31:16.220
No.

00:31:16.220 --> 00:31:17.100
No.

00:31:17.100 --> 00:31:22.320
Although, yeah, so 2030, if we went to Calver, that would just be Python 330.

00:31:23.260 --> 00:31:24.860
See, Calver's nice.

00:31:24.860 --> 00:31:26.100
Yes, it is nice.

00:31:26.100 --> 00:31:27.420
Yeah, you could understand.

00:31:27.420 --> 00:31:30.680
Yeah, I do think it's good that it links more clearly back to the year.

00:31:30.680 --> 00:31:31.560
Like how long ago?

00:31:31.560 --> 00:31:32.220
Oh, that was that.

00:31:32.220 --> 00:31:32.680
That's right.

00:31:32.680 --> 00:31:33.180
Yeah.

00:31:33.180 --> 00:31:37.520
Like what will we be in 2030 now?

00:31:37.520 --> 00:31:40.580
We'd have to do six plus whatever it is.

00:31:40.580 --> 00:31:42.120
Yeah, it's difficult.

00:31:42.120 --> 00:31:42.440
Yeah.

00:31:42.440 --> 00:31:43.140
Anyway.

00:31:43.140 --> 00:31:48.420
So, well, one more Python bytes in the bag.

00:31:48.420 --> 00:31:50.320
Thanks, Michael, for a wonderful time.

00:31:50.320 --> 00:31:50.800
Yeah.

00:31:50.800 --> 00:31:51.640
Thanks as always.

00:31:51.640 --> 00:31:52.180
Lots of fun.

00:31:52.180 --> 00:31:52.740
All right.

00:31:52.880 --> 00:31:54.240
And thank you to everyone for listening.

00:31:54.240 --> 00:31:55.080
See y'all later.

