WEBVTT

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

00:00:05.520 --> 00:00:10.740
This is episode 340, recorded June 13th, 2023.

00:00:10.740 --> 00:00:11.780
I'm Michael Kennedy.

00:00:11.780 --> 00:00:12.980
And I'm Brian Okken.

00:00:12.980 --> 00:00:16.320
And this episode is brought to you by InfluxDB from Influx Data.

00:00:16.320 --> 00:00:20.420
Awesome real-time DB, so time series database.

00:00:20.420 --> 00:00:22.760
So we're excited to tell you about that later.

00:00:22.760 --> 00:00:26.360
If you want to connect with us, you can find us all on fosstodon.org,

00:00:26.360 --> 00:00:28.920
@mkennedy, @brianokken, and at Python Bytes.

00:00:29.240 --> 00:00:32.240
Join us for the live show at pythonbytes.fm/live.

00:00:32.240 --> 00:00:35.480
If you want to be part of the live stream and be in the audience,

00:00:35.480 --> 00:00:38.100
all the older video versions are there as well.

00:00:38.100 --> 00:00:45.560
And Brian, before we jump into your first topic, I've got some ideas, a request from the audience.

00:00:45.560 --> 00:00:46.200
Okay.

00:00:46.200 --> 00:00:46.880
Okay.

00:00:46.880 --> 00:00:51.700
So we are going to do an Ask Me Anything episode.

00:00:51.700 --> 00:00:54.120
And really, that should be Ask Us Anything.

00:00:54.120 --> 00:00:57.440
But the EWA is not typically how people announce it.

00:00:57.440 --> 00:00:58.240
It's the AMA.

00:00:58.480 --> 00:00:59.440
Not EWA.

00:00:59.440 --> 00:01:06.540
So following convention standard acronyms there, Ask Us Anything.

00:01:07.340 --> 00:01:09.000
I put together a Google form.

00:01:09.000 --> 00:01:10.140
It is super short.

00:01:10.140 --> 00:01:11.000
It says, what is your name?

00:01:11.000 --> 00:01:11.920
What is your question?

00:01:11.920 --> 00:01:16.420
And if you want, there's a few other fields for like second question, you know, and things like that.

00:01:16.420 --> 00:01:17.400
But they're optional.

00:01:17.400 --> 00:01:24.700
So if you're listening and you've ever wondered like, I wonder if Brian has a thought on an opinion on this.

00:01:24.700 --> 00:01:26.440
Does he have an opinion on pytest plugins?

00:01:26.580 --> 00:01:26.980
I don't know.

00:01:26.980 --> 00:01:30.360
Does Michael have a thought on podcasting?

00:01:30.360 --> 00:01:30.540
Whatever.

00:01:30.540 --> 00:01:33.220
You know, please take the time and put that in there.

00:01:33.220 --> 00:01:35.760
And, you know, we'll give you credit on the show as well.

00:01:35.760 --> 00:01:39.100
If you don't want to have your name in there, just put anonymous or something.

00:01:39.100 --> 00:01:41.340
So everyone check that out.

00:01:41.340 --> 00:01:45.720
It is at, I created a short URL for it.

00:01:45.720 --> 00:01:46.280
Let's see.

00:01:46.280 --> 00:01:49.280
Pythonbys.fm slash AMA 2023.

00:01:49.720 --> 00:01:52.960
So people can just go over there and check it out.

00:01:52.960 --> 00:01:54.620
So that's going to be a lot of fun, Brian.

00:01:54.620 --> 00:01:56.260
I don't know when we're scheduling it.

00:01:56.260 --> 00:01:58.860
Probably pretty much when we get enough questions.

00:01:58.860 --> 00:02:00.500
And that link will be in the show notes, right?

00:02:00.500 --> 00:02:01.120
Absolutely.

00:02:01.120 --> 00:02:02.320
Let's talk GUIs.

00:02:02.320 --> 00:02:04.240
We haven't been on a GUI rant for a while.

00:02:04.240 --> 00:02:04.800
Yeah.

00:02:04.800 --> 00:02:07.180
I don't know if we've ever talked about GUIs.

00:02:07.180 --> 00:02:08.480
I think maybe we have.

00:02:08.480 --> 00:02:09.940
Perhaps.

00:02:09.940 --> 00:02:10.960
It's been a while.

00:02:10.960 --> 00:02:12.120
It has.

00:02:12.120 --> 00:02:16.340
So I ran across this website called Python GUIs.

00:02:16.340 --> 00:02:19.820
And it's like a whole website dedicated to Python GUIs.

00:02:19.820 --> 00:02:24.840
And it's from a fellow named Martin Fitzpatrick.

00:02:24.840 --> 00:02:27.160
He does consulting and some other stuff.

00:02:27.160 --> 00:02:29.660
And this is pretty kind of cool.

00:02:29.660 --> 00:02:31.280
This is fairly comprehensive.

00:02:31.280 --> 00:02:37.220
There's, he has tutorials and references to books and everything like that.

00:02:37.220 --> 00:02:40.620
But it's kind of a neat walkthrough, just the website itself.

00:02:40.620 --> 00:02:42.760
Like, for instance, where do I begin?

00:02:42.760 --> 00:02:49.000
His recommendation is doing PyQT 6 to start with if you don't have a preference.

00:02:49.000 --> 00:02:53.080
However, there's, so let's like walk through a couple.

00:02:53.080 --> 00:02:58.180
So if you just kind of walk through and he talks about what you should look about,

00:02:58.180 --> 00:03:00.620
look, learn what tutorials are available.

00:03:01.660 --> 00:03:04.720
And then it says continue.

00:03:04.720 --> 00:03:13.780
So if you continue on with the PyQT 6, you just sort of walk through a tutorial around how to get QT Designer up and everything.

00:03:13.780 --> 00:03:16.480
But there's a lot more than just QT here.

00:03:16.480 --> 00:03:23.660
He's got tutorials on PyQT 6, QT 5, PySide, TK Ender.

00:03:23.660 --> 00:03:31.220
There's even a tutorial, most recent tutorial I saw was getting started with Kivy for GUI development.

00:03:31.220 --> 00:03:34.700
And it's a pretty lengthy getting started with Kivy thing.

00:03:34.700 --> 00:03:38.060
So, and it covers Mac, Windows, Linux.

00:03:38.060 --> 00:03:40.540
So it's pretty comprehensive.

00:03:40.540 --> 00:03:41.320
It's kind of nice.

00:03:41.320 --> 00:03:42.800
Yeah, this looks really nice.

00:03:43.520 --> 00:03:46.880
I think choosing, I always feel like there's this paradox of choice.

00:03:46.880 --> 00:03:51.440
And when I'm thinking about Python GUIs and it's like, well, there's no real clear answer.

00:03:51.440 --> 00:03:55.220
And they're all kind of got their own oddities into them or their own restrictions.

00:03:55.220 --> 00:04:00.620
But this is really cool to see them put all side by side and different tutorials helping you get started.

00:04:00.620 --> 00:04:01.380
Yeah.

00:04:01.380 --> 00:04:04.140
And yeah, I kind of like it.

00:04:04.140 --> 00:04:06.800
I think a lot of people start with like TK Enter.

00:04:06.800 --> 00:04:08.460
It's not TK in there.

00:04:08.460 --> 00:04:11.720
It's a, you know, whatever, Tinker?

00:04:11.940 --> 00:04:13.540
I forget what they call it with Python.

00:04:13.540 --> 00:04:18.340
But it's not, I don't think that's a great place to start.

00:04:18.340 --> 00:04:24.840
If you want something to look really nice, if you're going to support it, I think I kind of agree with them.

00:04:24.840 --> 00:04:27.740
Maybe starting with Qt or Qt, sorry.

00:04:27.740 --> 00:04:34.480
I grew up using Qt without knowing how to pronounce it.

00:04:34.480 --> 00:04:37.300
People do pronounce it Qt, but yeah.

00:04:37.300 --> 00:04:37.640
Anyway.

00:04:38.420 --> 00:04:42.800
So if you want to learn about Python GUIs, maybe check out pythonguies.com.

00:04:42.800 --> 00:04:45.100
So what do you got for us?

00:04:45.100 --> 00:04:46.280
Oh, you're muted.

00:04:46.280 --> 00:04:57.060
Before we move on, Brian, I do want to also just sort of second that, that I think Qt, those look like native applications that belong on your platform, right?

00:04:57.100 --> 00:05:03.500
When you're not going to go like, oh, what, clearly some funky cross-platform API is what we're working with here right now.

00:05:03.500 --> 00:05:05.140
This stuff looks pretty solid, right?

00:05:05.140 --> 00:05:05.680
Yeah.

00:05:05.680 --> 00:05:07.120
But it is TK Enter.

00:05:07.120 --> 00:05:09.060
Why do we call it TK Enter?

00:05:09.060 --> 00:05:10.200
Or TK Enter?

00:05:10.200 --> 00:05:10.960
I don't know.

00:05:10.960 --> 00:05:12.140
Because it's not TK.

00:05:12.140 --> 00:05:13.960
Oh, because it's from the TK toolkit.

00:05:13.960 --> 00:05:14.700
Got it.

00:05:14.700 --> 00:05:15.760
Makes sense.

00:05:15.760 --> 00:05:16.460
Got it.

00:05:16.460 --> 00:05:17.020
That makes sense.

00:05:17.020 --> 00:05:17.840
All right.

00:05:17.840 --> 00:05:20.980
I have something for all the data scientists out there.

00:05:20.980 --> 00:05:21.540
How about that?

00:05:21.540 --> 00:05:22.020
Okay.

00:05:22.020 --> 00:05:31.900
JupyterLab, which is the more capable, the more IDE-like experience for Jupyter Notebooks, 4.0 is here.

00:05:31.900 --> 00:05:33.900
And it looks like a pretty mega release.

00:05:33.900 --> 00:05:43.740
So they say, they being Jason Weil, say the next major release of the full feature development environment for Jupyter is here.

00:05:43.740 --> 00:05:48.320
It is available for install right off PyPI in Conda Forge.

00:05:48.320 --> 00:05:55.360
So if you have it, all you got to do is pip install --upgrade JupyterLab or Conda install dash C Conda Forge JupyterLab.

00:05:55.360 --> 00:05:58.220
And it'll just upgrade in place for you.

00:05:58.220 --> 00:05:59.020
So that's pretty excellent.

00:05:59.020 --> 00:06:01.840
That's low maintenance, low effort upgrade.

00:06:01.840 --> 00:06:05.180
I suspect there's a lot of stuff happening when you run those commands.

00:06:05.180 --> 00:06:08.120
One of the big deals is JupyterLab is now faster.

00:06:08.120 --> 00:06:11.660
There's a bunch of different ways in which they made that happening.

00:06:11.660 --> 00:06:13.700
They made that happen where that's happening.

00:06:13.700 --> 00:06:27.340
Notebook windowing is one of them where for a long notebook, instead of trying to process and load the whole thing, it'll just show the web browser viewport in terms of rendering, which will make some of the rendering faster.

00:06:27.340 --> 00:06:29.840
Got CSS rule optimizations.

00:06:29.840 --> 00:06:31.200
CodeMirror.

00:06:31.420 --> 00:06:34.800
CodeMirror is the editor, text editor of the cell.

00:06:34.800 --> 00:06:38.360
So CodeMirror 6 is out and MathJax 2 as well.

00:06:38.360 --> 00:06:45.560
So if you're working with large notebooks, it should be much more efficient than JupyterLab 3, they say.

00:06:45.560 --> 00:06:46.060
Awesome.

00:06:46.060 --> 00:06:46.840
That's encouraging, right?

00:06:46.840 --> 00:06:47.120
Yeah.

00:06:47.120 --> 00:06:47.420
Yeah.

00:06:47.840 --> 00:06:48.220
Yeah.

00:06:48.220 --> 00:06:49.080
So cool.

00:06:49.080 --> 00:06:49.080
Cool.

00:06:49.080 --> 00:06:50.380
Let's see what else.

00:06:50.380 --> 00:06:54.620
There's additional performance improvements, but you have to turn these on.

00:06:54.780 --> 00:07:04.140
So you can get faster tab switching on Chromium-based browsers, which is unfortunately almost all of them, but that's the world we live in.

00:07:04.660 --> 00:07:05.660
So you can do it.

00:07:05.660 --> 00:07:05.960
So you can do it.

00:07:05.960 --> 00:07:11.940
But you've got to go settings, JupyterLab shell, switch hidden mode to content visibility.

00:07:11.940 --> 00:07:20.400
And for even more better performance with long notebooks, you've got to go settings, notebooks, switch on a windowing mode to full.

00:07:20.400 --> 00:07:22.060
So those are all options.

00:07:22.060 --> 00:07:23.880
I told you there's a new CodeMirror.

00:07:24.420 --> 00:07:27.340
That's the text editor for cells and file editors.

00:07:27.340 --> 00:07:32.340
And it's upgraded to CodeMirror 6, which has a bunch of accessibility and performance improvements.

00:07:32.340 --> 00:07:34.080
So people can check that out.

00:07:34.080 --> 00:07:35.160
Let's change there.

00:07:35.160 --> 00:07:42.360
Also, JupyterLab, I'm not sure I knew this, comes with a real-time collaboration, a.k.a. Google Docs style of collaboration.

00:07:42.360 --> 00:07:43.040
Okay.

00:07:43.040 --> 00:07:44.760
I didn't know that they'd do that.

00:07:44.760 --> 00:07:45.940
I did not either.

00:07:45.940 --> 00:07:49.540
I knew there were some notebook platforms that did, but I didn't realize JupyterLab did.

00:07:49.540 --> 00:07:55.160
So they moved this RTC, real-time collaboration, to a separate package, Jupyter collaboration.

00:07:55.160 --> 00:07:56.540
And that's available.

00:07:56.540 --> 00:07:58.280
It's its own sort of thing.

00:07:58.280 --> 00:08:01.120
Includes support for multiple cursors and selections.

00:08:01.120 --> 00:08:03.300
New shared types.

00:08:03.300 --> 00:08:04.260
And, yeah.

00:08:04.260 --> 00:08:08.420
There's also a new extension manager for JupyterLab extensions.

00:08:08.420 --> 00:08:10.180
Improved document search.

00:08:10.180 --> 00:08:11.600
UI enhancements.

00:08:11.600 --> 00:08:14.860
Like, more hotkeys and other styles.

00:08:14.860 --> 00:08:16.360
Accessibility improvements.

00:08:16.360 --> 00:08:17.840
Dev tool updates.

00:08:17.840 --> 00:08:20.180
You know, like, how they build JupyterLab.

00:08:20.180 --> 00:08:22.920
So TypeScript v5 and React v18.

00:08:22.920 --> 00:08:24.400
Most people won't care about that.

00:08:24.400 --> 00:08:30.400
But if you work on or try to customize the JupyterLab itself, then, like, you create an extension or something.

00:08:30.400 --> 00:08:31.280
You probably care.

00:08:31.280 --> 00:08:38.080
And finally, finally, finally, more than 100 bugs have been addressed and resolved, making it more stable and faster.

00:08:38.080 --> 00:08:39.800
So that sounds like a pretty big deal, doesn't it?

00:08:39.800 --> 00:08:40.820
Yeah.

00:08:40.820 --> 00:08:41.940
Yes.

00:08:41.940 --> 00:08:46.880
I think addressed means fixed and not just said hello to.

00:08:46.880 --> 00:08:48.060
Exactly.

00:08:48.060 --> 00:08:49.140
Hello, bug.

00:08:49.140 --> 00:08:50.680
How shall I address you?

00:08:50.680 --> 00:08:54.220
You shall call me a CVE, remote code executioner.

00:08:54.220 --> 00:08:54.580
Oh, hey.

00:08:54.580 --> 00:08:55.240
Nice to meet you.

00:08:55.240 --> 00:08:57.100
No, probably not like that, right?

00:08:57.100 --> 00:08:57.560
Yeah.

00:08:57.560 --> 00:08:58.360
So that's cool.

00:08:58.360 --> 00:08:58.700
Yeah.

00:08:59.400 --> 00:09:00.380
Yeah, that is cool.

00:09:00.380 --> 00:09:03.120
Getting some thumbs up from the audience as well.

00:09:03.120 --> 00:09:09.120
Now, before we move on, I want to just talk about our sponsor real quick, InfluxDB.

00:09:09.460 --> 00:09:13.180
So thanks to Influx for supporting the show.

00:09:13.180 --> 00:09:18.980
So this episode of Python Bytes is brought to you by Influx Data, the makers of InfluxDB.

00:09:18.980 --> 00:09:25.960
InfluxDB is the database purpose built for handling time series data at a massive scale for real-time analytics.

00:09:25.960 --> 00:09:32.940
And developers can ingest, store, and analyze all types of time series data, metrics, events, traces in a single platform.

00:09:32.940 --> 00:09:38.740
So how would boundless cardinality and lightning-fast SQL queries impact the way you develop real-time applications?

00:09:38.740 --> 00:09:40.140
Check out Influx.

00:09:40.140 --> 00:09:52.400
InfluxDB processes large time series data sets and provides low-latency SQL queries, making it the go-to choice for developers building real-time apps and seeking crucial insights.

00:09:52.400 --> 00:10:00.860
For developer efficiency, InfluxDB helps you create IoT, analytics, and cloud applications using timestamped data rapidly and at scale.

00:10:00.860 --> 00:10:06.540
It's designed to ingest billions of data points in real-time with unlimited cardinality.

00:10:06.540 --> 00:10:14.460
InfluxDB streamlines building ones and deploying across the various platforms and environments from the edge, on-premises, and to the cloud.

00:10:14.460 --> 00:10:18.600
So try them for free at pythonbytes.fm/InfluxDB.

00:10:18.600 --> 00:10:20.780
The link is in your podcast player show notes.

00:10:20.780 --> 00:10:24.240
Thank you to Influx Data for supporting the show.

00:10:24.240 --> 00:10:25.680
Yeah, thank you.

00:10:25.680 --> 00:10:33.220
I would like to talk about data, but not databases, but data types.

00:10:33.220 --> 00:10:40.860
So this is kind of early to talk about, but hey, Brett Cannon can write about it on his blog.

00:10:40.860 --> 00:10:42.680
I think it's fair game to talk about.

00:10:43.360 --> 00:10:51.140
Brett Cannon had a proposal for a new kind of data type in Python called a struct.

00:10:51.140 --> 00:10:53.620
Structs are new things.

00:10:53.620 --> 00:10:58.580
We've lived with them in C for a long time, and other languages have other types.

00:10:59.420 --> 00:11:06.760
I want to take a slight detour before I talk about the struct proposal from Brett.

00:11:06.760 --> 00:11:09.480
And by proposal, I don't mean it's a PEP.

00:11:09.480 --> 00:11:10.680
I don't think it's a PEP yet.

00:11:10.680 --> 00:11:12.580
I think it's just an idea that he had.

00:11:12.580 --> 00:11:14.440
But I think it's a cool idea.

00:11:14.700 --> 00:11:18.040
But one of the things he talked about was algebraic data types.

00:11:18.040 --> 00:11:25.220
And I got to admit, I haven't run across that term, algebraic data types, before like a week ago or so.

00:11:25.220 --> 00:11:27.540
And then I've read two articles referring to it.

00:11:27.540 --> 00:11:35.240
I'm used to ADTs being abstract data types, which are user-defined data types.

00:11:36.660 --> 00:11:39.000
I don't know what the abstract means.

00:11:39.000 --> 00:11:44.140
But anyway, algebraic ones are things that you can compose.

00:11:44.140 --> 00:11:53.400
They're like abstract data types, but they're the things that you can compose like a list is a nil plus I don't know what that means.

00:11:53.400 --> 00:11:59.480
But anyway, or tree is either is composed of empty or leaf or a node or something.

00:11:59.480 --> 00:12:04.420
I'm still not quite sure how this makes anything to do with it.

00:12:04.420 --> 00:12:05.740
Side diversion.

00:12:05.740 --> 00:12:06.740
Side diversion.

00:12:06.740 --> 00:12:10.040
Anyway, so what does this look like?

00:12:10.040 --> 00:12:11.740
And it's kind of a neat idea.

00:12:11.740 --> 00:12:22.720
So jumping down to an example, with a struct, you could just say a point is a struct that takes X and Y and they're both integers, say.

00:12:22.720 --> 00:12:28.920
And they have to be named or either positional or named, but they cannot be unnamed only.

00:12:28.920 --> 00:12:29.940
I don't know why.

00:12:29.940 --> 00:12:34.760
And then it'd be kind of like named classes or named tuples.

00:12:34.760 --> 00:12:38.520
So you just access the stuff.

00:12:38.520 --> 00:12:42.520
So you just declare this point.

00:12:42.520 --> 00:12:45.840
And then you can get at it with like, say, P dot X or P dot Y.

00:12:45.960 --> 00:12:46.960
And that's it, really.

00:12:46.960 --> 00:12:46.960
And that's it.

00:12:46.960 --> 00:12:46.960
And that's it.

00:12:46.960 --> 00:12:46.960
And that's it, really.

00:12:46.960 --> 00:12:46.960
And that's it.

00:12:46.960 --> 00:12:46.960
And that's it, really.

00:12:46.960 --> 00:12:46.960
And that's it.

00:12:46.960 --> 00:12:46.960
And that's it, really.

00:12:46.960 --> 00:12:46.960
And that's it.

00:12:46.960 --> 00:12:46.960
And that's it.

00:12:46.960 --> 00:12:46.960
And that's it, really.

00:12:46.960 --> 00:12:46.960
And that's it, really.

00:12:46.960 --> 00:12:49.340
So what is, what is this?

00:12:49.340 --> 00:12:50.340
Why would we need this?

00:12:50.340 --> 00:12:54.340
And I think it'd be really pretty cool to have something that simple.

00:12:54.340 --> 00:12:59.260
And these structs would be, they'd not allow inheritance.

00:12:59.260 --> 00:13:01.260
They would have no methods currently.

00:13:01.260 --> 00:13:03.260
No methods, no inheritance.

00:13:03.260 --> 00:13:05.260
And they're not mutable.

00:13:05.260 --> 00:13:07.020
So you can't change the thing in it.

00:13:07.020 --> 00:13:08.020
Why is that important?

00:13:08.020 --> 00:13:13.080
Well, you then you can, you can use these things for keys and dictionaries and things like that.

00:13:13.080 --> 00:13:27.360
And I just think this would be kind of cool because I use, I still with data types, even with data types and all the other goodies and attrs and other goodies we have within Python, I still use name tuple a lot.

00:13:27.360 --> 00:13:32.500
And I would totally use this for a lot of stuff and make it, especially if it was super fast.

00:13:32.500 --> 00:13:33.500
So that's the idea.

00:13:33.500 --> 00:13:34.820
Got any ideas?

00:13:34.820 --> 00:13:35.460
It looks interesting.

00:13:35.460 --> 00:13:54.380
And the defining syntax is kind of a one liner, a little bit, as you pointed out, like a named tuple, but it actually redefines class like thing with these optimizations, for example, dunder slots and kind of an data classes type thing with dunder equal and dunder hash.

00:13:54.380 --> 00:14:01.520
So for people listening, you just say all in one line struct point a capital P for the type parentheses X comma Y.

00:14:01.520 --> 00:14:02.740
That's the whole thing, right?

00:14:02.740 --> 00:14:03.160
Yeah.

00:14:04.160 --> 00:14:09.440
Tony out in the audience does wonder if it actually requires type annotations or if those are optional.

00:14:09.440 --> 00:14:12.300
I would guess they're optional, but I like them.

00:14:12.300 --> 00:14:13.160
So I don't know.

00:14:13.160 --> 00:14:21.440
No, Brett says in his article, he would propose that they'd be, that they would be optional if you, if you just had two elements in something.

00:14:21.440 --> 00:14:22.280
I mean, it's.

00:14:22.280 --> 00:14:22.420
Yeah.

00:14:22.420 --> 00:14:25.380
It seems consistent with Python that it would be optional, right?

00:14:25.380 --> 00:14:25.880
Yeah.

00:14:25.880 --> 00:14:30.140
And Tony also says, oh boy, I just started writing some Rust code at work.

00:14:30.140 --> 00:14:31.940
So I'm interested in this for Python.

00:14:32.720 --> 00:14:33.120
Yeah.

00:14:33.120 --> 00:14:33.160
Yeah.

00:14:33.160 --> 00:14:45.100
And that like the example that Brett gave of this, this point, he then showed the example of what, what would, what under the hood that would give you that you don't have to write.

00:14:45.100 --> 00:14:53.080
And this example of like being able to, to convert it to a dictionary and replace parameters and using slots.

00:14:53.080 --> 00:14:56.880
And I mean, there's a lot of code here that you don't need to write.

00:14:56.880 --> 00:15:08.980
And yes, we do kind of have a data type data classes that sort of do this, but data classes are not, they're not optimized for data for having lots and lots of them.

00:15:08.980 --> 00:15:16.860
So this would be like an optimization to have just like huge, huge data structure full of these things and have it still be fast.

00:15:16.860 --> 00:15:19.140
So I think it'd be cool.

00:15:19.460 --> 00:15:30.880
Having it be part of the language and maybe they could do optimizations around it for, for Python 3, 14 or whatever, you know, the faster CPython story.

00:15:30.880 --> 00:15:38.420
Like for example, if you know, it's immutable, could you, could you make it allocate on just the stack and not actually go to the heap or things like this?

00:15:38.420 --> 00:15:38.640
Right.

00:15:38.640 --> 00:15:39.480
It'd be interesting.

00:15:39.820 --> 00:15:56.980
Maybe that's a bridge too far, but I'm also interesting in how this, how this maps to like hardware because dealing with registers and, and hardware interfaces, there's in using C, we often have structs that we overlay over, over the top of like shared memory systems.

00:15:56.980 --> 00:16:01.040
And, and this might be great use for something like that.

00:16:01.040 --> 00:16:02.300
So, yeah.

00:16:02.300 --> 00:16:04.520
A few more thoughts out there.

00:16:04.520 --> 00:16:07.520
Grant says this is in line with what Mojo expresses.

00:16:07.520 --> 00:16:08.980
We recently spoke about them.

00:16:09.160 --> 00:16:13.780
I would love, love to have a struct in Python and blaze points out waiting for Hennick's opinion.

00:16:13.780 --> 00:16:14.740
Maybe something like this.

00:16:14.740 --> 00:16:15.460
We'll get into attrs.

00:16:15.460 --> 00:16:15.780
Yeah.

00:16:15.780 --> 00:16:16.080
We'll see.

00:16:16.080 --> 00:16:17.800
Yeah.

00:16:17.800 --> 00:16:18.240
Yeah.

00:16:18.240 --> 00:16:23.860
So, you know, sometimes Brian, it's about putting new stuff, new things into Python.

00:16:23.860 --> 00:16:27.200
Sometimes, however, it's about ripping it out.

00:16:27.200 --> 00:16:27.920
Yes.

00:16:27.920 --> 00:16:33.080
So my next item is the realization of PEP 594.

00:16:33.080 --> 00:16:38.380
So PEP 594, for those of you who don't know, I interviewed,

00:16:38.500 --> 00:16:42.540
um, in Himes and Brett Cannon.

00:16:42.540 --> 00:16:51.100
Speaking of Brett Cannon, it gets a back to back mention here about removing Python's dead batteries and this PEP 594.

00:16:51.100 --> 00:16:55.260
And the idea is there is stuff in Python that makes no sense to be in Python.

00:16:55.260 --> 00:17:05.640
It made sense when we had a world without the internet, when there was no concept of pip install and you really needed to kind of have Python come with a lot of its capabilities.

00:17:05.640 --> 00:17:10.620
But now, if you go over to pypi.org, what is the current number?

00:17:10.820 --> 00:17:18.360
We have 460,000 packages that are evolving like a larger definition of what Python is really, really fast.

00:17:18.360 --> 00:17:18.740
Right.

00:17:18.740 --> 00:17:19.180
Yeah.

00:17:19.180 --> 00:17:28.080
So, for example, do you think it would make sense potentially to have an implementation of an async chat client built into the standard library of Python?

00:17:28.860 --> 00:17:29.800
Maybe not.

00:17:29.800 --> 00:17:31.220
I didn't know we had that.

00:17:31.220 --> 00:17:32.980
Well, apparently we did.

00:17:32.980 --> 00:17:35.220
We did until 3.12.

00:17:35.220 --> 00:17:38.820
So that's not actually out yet, but it's gone.

00:17:38.820 --> 00:17:43.020
Or like an SMTP daemon built into Python.

00:17:43.020 --> 00:17:43.460
Right.

00:17:43.540 --> 00:17:49.000
Do we, who is going to, who should be running their own mail client as part of Python itself?

00:17:49.000 --> 00:17:50.840
You know, not even a separate package.

00:17:50.840 --> 00:17:57.000
But more importantly, as was discussed over on the podcast, like this is overhead for all the core devs.

00:17:57.000 --> 00:18:02.840
Do we want them working on things like the struct or do we want them still managing AIFC?

00:18:02.840 --> 00:18:03.660
Yeah.

00:18:03.660 --> 00:18:04.340
Yeah.

00:18:04.340 --> 00:18:07.800
Like audio parsing for expired.

00:18:07.960 --> 00:18:15.660
Nobody uses any more audio formats or CGI or telnet libraries or, you know, like chat clients.

00:18:15.660 --> 00:18:29.660
So this basically is the announcement by Victor Stinner, I believe, saying we just removed 19 modules from Python 3.13 standard library.

00:18:29.660 --> 00:18:34.660
These are the ones that have already been deprecated in 3.11 by PEP 5.9.4.

00:18:34.660 --> 00:18:37.080
So, yeah, it's a big long list of them.

00:18:37.400 --> 00:18:42.800
Like I said, like you pointed out some CGI image header, you know, mail stuff.

00:18:42.800 --> 00:18:46.580
Also talks a little bit about the 3.12 and 3.11 ones, which are gone.

00:18:46.580 --> 00:18:50.900
And then finally, it does say like, if this affects you, here's what you can do.

00:18:50.900 --> 00:18:51.660
Do nothing.

00:18:51.660 --> 00:18:53.080
Just stay on 3.11.

00:18:53.080 --> 00:18:57.020
It says, in my opinion, it is a dangerous long-term choice.

00:18:57.020 --> 00:18:58.860
However, you can do nothing.

00:19:00.120 --> 00:19:03.640
You could create a group of volunteers to give life to this module, right?

00:19:03.640 --> 00:19:09.440
The module is open source in the sense that Python's standard library is open source.

00:19:10.320 --> 00:19:17.360
So, you go in there, you copy the files out, you make a PyPI package for it, and you find people who want to keep it going.

00:19:17.360 --> 00:19:18.560
Yeah.

00:19:18.560 --> 00:19:20.060
Or you vendor it.

00:19:20.060 --> 00:19:24.320
You could copy the removed module just into your code itself, right?

00:19:24.320 --> 00:19:26.500
Often it's just a .py file.

00:19:26.500 --> 00:19:28.160
So you just vendor it in if you have to.

00:19:28.520 --> 00:19:36.440
Honestly, that kind of seems like a pretty decent idea if you're like going low-key and you don't want to take on an open source project to remain, to maintain CGI.

00:19:36.440 --> 00:19:37.860
You're just like, I just need this to run.

00:19:37.860 --> 00:19:39.200
So you can copy that over.

00:19:39.200 --> 00:19:43.300
And then there's a whole discussion on stuff around this, right, if you want.

00:19:43.300 --> 00:19:47.240
So, anyway, 20 standard lib modules, they're out.

00:19:47.240 --> 00:19:47.720
Yeah.

00:19:47.720 --> 00:19:48.880
I think it's a good thing.

00:19:48.880 --> 00:19:50.220
Just like, yeah.

00:19:50.220 --> 00:19:53.860
Changing your batteries, kind of like your smoke detectors.

00:19:53.860 --> 00:19:55.620
Yeah, exactly.

00:19:55.620 --> 00:19:58.200
One more audience comment on this before we move on.

00:19:58.200 --> 00:20:01.340
Grant says, happy for the Python core devs to kill all these modules.

00:20:01.340 --> 00:20:06.020
Nothing makes senior engineers happier than calling bodies of code that aren't worth their weight.

00:20:06.020 --> 00:20:06.820
I totally agree.

00:20:06.820 --> 00:20:07.720
Right.

00:20:07.720 --> 00:20:15.180
I would be happy, honestly, to see even a thinner, smaller Python standard library and then have more of these as pip installed.

00:20:15.180 --> 00:20:23.040
But then when you install Python, it could kind of come pre-installed with 20 or 30 packages that if you want to upgrade them separately or I don't know.

00:20:23.040 --> 00:20:28.940
So for things like if I want to run this on MicroPython, I wouldn't run it on WebAssembly under PyScript.

00:20:28.940 --> 00:20:32.920
Like those situations are like you don't, the whole huge standard library is a problem.

00:20:32.920 --> 00:20:34.000
So I don't know.

00:20:34.000 --> 00:20:36.300
I feel like there's interesting stuff happening here.

00:20:36.300 --> 00:20:37.140
But this is a good start.

00:20:37.140 --> 00:20:38.580
Yeah, definitely.

00:20:38.580 --> 00:20:40.580
I think it is.

00:20:40.580 --> 00:20:41.100
So.

00:20:41.100 --> 00:20:42.520
It is.

00:20:42.520 --> 00:20:44.160
And is that all of our items?

00:20:44.240 --> 00:20:45.160
I believe it is, isn't it?

00:20:45.160 --> 00:20:45.980
It is.

00:20:45.980 --> 00:20:56.760
And so some of these decisions are made by some of the core Python people on the, maybe on the Python board have something to do with some of this, perhaps.

00:20:56.760 --> 00:21:14.500
So if the elections for, so one of our extras, I'd like to mention that the PSF announced that you need, if you are, if you care about elections, you kind of need to affirm your PSF membership voting status before the 15th.

00:21:14.500 --> 00:21:16.740
So the cutoff is only a couple of days from now.

00:21:16.740 --> 00:21:21.320
So, and I'm glad somebody, somebody mentioned this.

00:21:21.320 --> 00:21:27.260
I can't remember where I saw it because it sort of went in my email box, email inbox and forgot, I forgot to look.

00:21:27.260 --> 00:21:31.320
So I just affirmed my voting status this morning.

00:21:31.320 --> 00:21:32.200
Excellent.

00:21:32.200 --> 00:21:36.480
Well, I definitely affirmed mine a couple of days ago.

00:21:36.480 --> 00:21:37.540
So nice.

00:21:37.540 --> 00:21:38.100
It's all good.

00:21:38.100 --> 00:21:39.540
But yeah, thanks for pointing out here.

00:21:39.540 --> 00:21:39.960
This is great.

00:21:39.960 --> 00:21:40.400
Okay.

00:21:40.400 --> 00:21:41.200
Do you have any extras?

00:21:41.200 --> 00:21:42.540
I do.

00:21:42.540 --> 00:21:49.980
I just released a video collab with Julian Siqueira and Bob Belderbos from the PyBytes guys.

00:21:49.980 --> 00:21:58.620
About five tips for budding Python developers, five career tips for budding Python developers as a 25 minute YouTube video.

00:21:58.620 --> 00:22:00.480
So people can check that out.

00:22:00.480 --> 00:22:02.280
That link is in your show notes.

00:22:02.280 --> 00:22:03.800
If that sounds interesting to you.

00:22:03.800 --> 00:22:06.940
It looks like Julian and Iron Man are looking at the same thing.

00:22:06.940 --> 00:22:08.320
They are.

00:22:08.700 --> 00:22:14.480
Julian has an Iron Man painting in the background behind him and they've got the same basic expression.

00:22:14.480 --> 00:22:15.140
Pretty awesome.

00:22:15.140 --> 00:22:16.880
So people can check that out.

00:22:16.880 --> 00:22:21.280
Also, PyCon US 2023.

00:22:21.280 --> 00:22:22.160
Remember that, Brian?

00:22:22.160 --> 00:22:22.880
It was a while ago.

00:22:22.880 --> 00:22:23.520
Yeah.

00:22:23.520 --> 00:22:24.760
All the videos are out.

00:22:24.760 --> 00:22:25.840
The videos are out.

00:22:25.840 --> 00:22:26.480
Yay.

00:22:26.480 --> 00:22:27.200
Yay.

00:22:27.200 --> 00:22:30.040
So there are some that are unavailable that are hidden.

00:22:30.300 --> 00:22:36.320
I'm wondering if that's intentional or if that's like they were uploaded and hidden and they just forgot to be set to public.

00:22:36.320 --> 00:22:40.840
So whoever is in charge of this might want to look why there's hidden videos published to this playlist.

00:22:40.840 --> 00:22:42.960
But I don't know how many there are.

00:22:42.960 --> 00:22:48.120
There's 142 videos, possibly some others as well that are hidden on this playlist.

00:22:48.120 --> 00:22:49.300
So people can check it out.

00:22:49.300 --> 00:22:57.740
This is basically all of PyCon, including the tutorials, if you want to go and kind of be part of that side of PyCon, which is excellent.

00:22:58.140 --> 00:22:58.380
Nice.

00:22:58.380 --> 00:23:01.540
So some are white and some are kind of this gray color.

00:23:01.540 --> 00:23:03.120
Do you know what the difference is?

00:23:03.120 --> 00:23:04.080
No.

00:23:04.080 --> 00:23:04.820
No idea.

00:23:04.820 --> 00:23:10.700
I think it's just the font, just the opening slide they use for their presentation.

00:23:10.700 --> 00:23:13.480
I don't know if there's more to read into it than that.

00:23:13.480 --> 00:23:20.760
I would like to maybe, I don't know if the people who are organizing next year's PyCon are listening.

00:23:21.100 --> 00:23:31.400
I would like to propose just some kind of suggestion that might make this a little easier for them because this seems to be like a huge challenge from what I can tell.

00:23:31.400 --> 00:23:31.760
Right.

00:23:31.760 --> 00:23:33.460
PyCon was in April.

00:23:33.460 --> 00:23:35.040
It's the middle of June.

00:23:35.040 --> 00:23:36.940
And now the videos have come out.

00:23:36.940 --> 00:23:41.720
So somebody has spent, you know, like a month and a half working on these videos.

00:23:41.860 --> 00:23:45.120
And the community has been waiting a month and a half to get them, right?

00:23:45.120 --> 00:23:48.620
Brian, how quickly is our video for Python Bytes out when we're done with it?

00:23:48.620 --> 00:23:50.680
Like right when we're done.

00:23:50.680 --> 00:23:54.760
I mean, like literally you could seek around in it as you like part of the stream.

00:23:54.760 --> 00:23:55.420
Right.

00:23:55.460 --> 00:23:58.180
We're just live streaming this using something like StreamYard.

00:23:58.180 --> 00:24:01.580
And I know that there's a pay to attend virtually.

00:24:01.580 --> 00:24:05.120
So maybe you don't want to have a public stream that people can use.

00:24:05.120 --> 00:24:13.000
Maybe there's, but there's kind of just live streaming it to YouTube, even if that's an unlisted URL that you then, when the conference is over, flip to public.

00:24:13.000 --> 00:24:23.500
Because I know that kind of you want to them, you don't necessarily don't want that to be going, have that whole live experience if you're not part of the, like I signed up for the virtual pass, which is great.

00:24:23.620 --> 00:24:30.900
It's fine. But I think we could get these videos in a lot quicker and help people a lot if you did something like, you know, just like kind of live streamed it.

00:24:30.900 --> 00:24:35.400
I know people might worry about the connectivity and it cutting out and the quality.

00:24:35.400 --> 00:24:38.640
But with like, for example, StreamYard, it records local video.

00:24:38.640 --> 00:24:40.340
It's like maximum quality.

00:24:40.340 --> 00:24:50.660
Right. So there's if you if they had a stream deck where they could switch to the views and they had this going and recording locally, like these videos would be out as quick as you could click from unlisted to public on YouTube.

00:24:51.060 --> 00:24:54.100
I do want to, I guess, disagree with you on that.

00:24:54.100 --> 00:24:54.780
OK.

00:24:55.420 --> 00:25:05.140
So so so PyCascades, for one, did the I don't know if it was available right away, but it was available soon after the entire day recordings.

00:25:05.140 --> 00:25:06.460
She had the day recordings.

00:25:06.460 --> 00:25:12.780
So if you if you wanted to find yours or something or find somebody's, you could kind of scroll through and find it.

00:25:12.780 --> 00:25:16.220
It was a little it was a little it was just sort of going.

00:25:16.220 --> 00:25:17.740
There was there wasn't any editing.

00:25:17.740 --> 00:25:19.460
So those it was kind of hard to deal with.

00:25:19.460 --> 00:25:21.840
I don't know how many people really watch those.

00:25:21.840 --> 00:25:25.500
But the PyCon U.S.

00:25:25.500 --> 00:25:27.940
videos, I didn't realize this at first.

00:25:27.940 --> 00:25:29.380
Somebody corrected me.

00:25:29.380 --> 00:25:36.960
They were available to people that either attended live or attended virtually and but didn't get to go to all this.

00:25:37.280 --> 00:25:45.740
All the videos you're the online experience included being able to go in and watch videos, the other videos that you missed.

00:25:45.740 --> 00:25:47.840
So those were available right away.

00:25:47.840 --> 00:25:50.300
I didn't know about it.

00:25:50.300 --> 00:25:51.600
So maybe advertising it more.

00:25:51.600 --> 00:25:54.060
And also, it was a little hard to get to.

00:25:54.060 --> 00:25:56.280
I got to say, it wasn't it wasn't easy.

00:25:56.280 --> 00:26:03.520
I kind of would like to have like the schedule that you go into if you're logged in and you can see the schedule.

00:26:03.520 --> 00:26:10.120
Why not have that be able to just link to the video that you missed or something like that?

00:26:10.120 --> 00:26:10.480
I don't know.

00:26:10.480 --> 00:26:13.340
There's there's better ways to make it a little bit easier.

00:26:13.340 --> 00:26:16.120
It was a little hard to deal with, but it was available.

00:26:16.520 --> 00:26:20.980
And I also think like, for instance, I'm going back to Pike Cascades.

00:26:20.980 --> 00:26:29.700
I did a talk that the recording, the full day one had like glitches and had me up there at the beginning trying to get the audio ready.

00:26:29.700 --> 00:26:35.840
And, you know, there's this getting started stuff, whereas having somebody be able to clean that up a bit would be good.

00:26:35.840 --> 00:26:37.000
It's just I do also.

00:26:37.000 --> 00:26:42.980
But I don't think that this is a long time from from when PyCon really was to now.

00:26:42.980 --> 00:26:44.700
That's that's what?

00:26:44.700 --> 00:26:44.960
Month.

00:26:44.960 --> 00:26:45.560
I think it's too long.

00:26:45.860 --> 00:26:46.400
That's too long.

00:26:46.400 --> 00:26:46.800
I think it's too long.

00:26:46.800 --> 00:26:50.480
So last year, 2022 was three three months, I believe.

00:26:50.480 --> 00:26:51.620
I mean, it's a long time.

00:26:51.620 --> 00:27:01.780
And I know it's a lot of work, but maybe maybe we could do something either either having rough cut ones out there initially or maybe have some of us volunteer.

00:27:01.780 --> 00:27:08.200
I mean, I think we could have some volunteers to help clean them, clean them up for like good enough for now or sort of things.

00:27:08.200 --> 00:27:09.180
I don't know.

00:27:09.180 --> 00:27:09.520
Something.

00:27:09.920 --> 00:27:10.820
Yeah, yeah, I agree.

00:27:10.820 --> 00:27:13.280
We should have made this a whole item, I suppose, if we're talking this much.

00:27:13.280 --> 00:27:15.980
The final thought is like with StreamYard, I don't know about the other ones.

00:27:15.980 --> 00:27:17.820
You can literally go in before you hit publish.

00:27:17.820 --> 00:27:19.660
You can just say trim this and go to click, click.

00:27:19.660 --> 00:27:20.040
Okay.

00:27:20.040 --> 00:27:21.500
Put it on YouTube now.

00:27:21.500 --> 00:27:23.300
And then like that would be.

00:27:23.300 --> 00:27:23.760
Yeah.

00:27:23.760 --> 00:27:24.760
You know, not very much.

00:27:24.760 --> 00:27:26.600
I agree that you don't want all the setup in that junk.

00:27:26.600 --> 00:27:27.360
You want to like, welcome.

00:27:27.640 --> 00:27:28.440
I'm Brian.

00:27:28.440 --> 00:27:30.400
I'm talking about extensions, et cetera.

00:27:30.400 --> 00:27:30.880
Right.

00:27:30.880 --> 00:27:31.520
Like straight away.

00:27:31.520 --> 00:27:33.220
And I can't get the slides to work.

00:27:33.220 --> 00:27:33.940
And you know.

00:27:33.940 --> 00:27:34.500
Yeah, exactly.

00:27:34.500 --> 00:27:34.860
I know.

00:27:34.860 --> 00:27:35.940
You want to skip all that crap.

00:27:35.940 --> 00:27:36.460
Okay.

00:27:36.460 --> 00:27:38.480
But good news.

00:27:38.480 --> 00:27:40.860
The videos are out and people can check them out.

00:27:40.860 --> 00:27:41.300
Okay.

00:27:41.300 --> 00:27:41.860
Next.

00:27:41.860 --> 00:27:44.120
Next, next, next.

00:27:44.120 --> 00:27:47.320
A couple of version updates for Python.

00:27:47.320 --> 00:27:53.820
Python 3.11.4, 3.10.12, 3.9.17, 3.8.17, 3.7.17.

00:27:53.820 --> 00:27:58.720
And importantly, 3.12.beta2 are all out.

00:27:58.720 --> 00:28:06.300
And you might be interested to know that both the 3.11 and 3.10, I suppose the others, include security fixes.

00:28:06.300 --> 00:28:08.600
So nice to meet you, Mr. CVE.

00:28:08.600 --> 00:28:15.500
For example, some problems that were solved in OpenSSL are now included.

00:28:15.500 --> 00:28:19.500
There's 1, 2, 3, 4, 5, 6, 7, 8, maybe.

00:28:19.500 --> 00:28:29.260
7 or 8 CVEs that were addressed on OpenSSL and some URL parsing and UUDecode and things that might look like you want to get fixed.

00:28:29.260 --> 00:28:31.560
So check that out and upgrade if you can.

00:28:31.560 --> 00:28:34.040
Python Bytes is already running 3.11.4.

00:28:34.040 --> 00:28:35.400
So hooray for that.

00:28:35.400 --> 00:28:36.100
Python Bytes.

00:28:36.100 --> 00:28:39.700
I had a friend say they were working on upgrading to 3.10.

00:28:39.700 --> 00:28:41.640
And I'm like, I don't even remember 3.10.

00:28:41.640 --> 00:28:43.540
I've been like on a 3.11 for so long.

00:28:43.540 --> 00:28:45.440
Yeah, absolutely.

00:28:45.860 --> 00:28:46.220
Absolutely.

00:28:46.220 --> 00:28:46.900
All right.

00:28:46.900 --> 00:28:48.280
And then final call.

00:28:48.280 --> 00:28:51.480
Just remember the Python Bytes AMA form.

00:28:51.480 --> 00:28:54.700
Please get out there and submit that one more time.

00:28:54.700 --> 00:28:55.560
Link's in the show notes.

00:28:55.560 --> 00:28:56.180
Yes.

00:28:56.180 --> 00:28:56.780
Yes.

00:28:56.780 --> 00:28:57.520
Right at the top.

00:28:57.520 --> 00:28:57.940
Yes.

00:28:57.940 --> 00:28:58.940
Ready for a joke?

00:28:58.940 --> 00:29:00.020
I am.

00:29:00.660 --> 00:29:03.560
This one comes to us from Ken Van Wick.

00:29:03.560 --> 00:29:07.020
And it's a follow on from the apple.com.

00:29:07.020 --> 00:29:08.600
Where's their?

00:29:08.600 --> 00:29:09.480
There it is.

00:29:09.480 --> 00:29:10.580
Their Vision Pro.

00:29:10.580 --> 00:29:13.020
Right?

00:29:13.020 --> 00:29:13.540
Yeah.

00:29:13.540 --> 00:29:14.660
This thing is super expensive.

00:29:14.660 --> 00:29:17.040
It looks really amazing.

00:29:17.040 --> 00:29:20.480
I just, I don't, I've not got faith that it's going to take off.

00:29:20.480 --> 00:29:30.060
But the ability to say like, I want to sit, I want to stand on the sideline right at the goal line at the Super Bowl and be able to look around and watch that as if I was there.

00:29:30.060 --> 00:29:31.320
Like that would be epic.

00:29:31.320 --> 00:29:34.900
Is that worth a $3,500 device?

00:29:34.900 --> 00:29:36.600
Now, Brian, it's expensive.

00:29:36.600 --> 00:29:44.080
But did you know, just like the Mac Pro, which was also recently announced, the Mac Pro, super expensive, $7,000 minimum.

00:29:44.080 --> 00:29:45.500
But it doesn't come with the wheels.

00:29:45.500 --> 00:29:48.840
If you buy it with the wheels, the wheels are $400 separate, right?

00:29:48.840 --> 00:29:50.560
To get the wheel for your case.

00:29:50.560 --> 00:29:52.040
So this is kind of like that.

00:29:52.360 --> 00:29:58.280
Here's your, this comes to us from Kim Benwick and he says, actually this is Paul Mason's thing.

00:29:58.280 --> 00:30:08.440
So you've got your $3,499 Vision Pro and it comes with the Apple branded $899 snorkel.

00:30:08.440 --> 00:30:10.880
What do you think of that?

00:30:10.880 --> 00:30:12.400
I think that's cool.

00:30:12.400 --> 00:30:14.600
And actually, no, yeah.

00:30:15.080 --> 00:30:24.420
If you could, if this would actually work, would work underwater so that you could go back out in your swimming pool and it would, you could look like you're actually on a coral reef.

00:30:24.420 --> 00:30:25.180
That'd be cool.

00:30:25.180 --> 00:30:26.900
That would be awesome.

00:30:26.900 --> 00:30:34.100
Imagine you were in here playing something like Subnautica, one of those types of games, which is just amazing.

00:30:34.100 --> 00:30:36.760
Like a game where you're underwater and exploring.

00:30:36.760 --> 00:30:37.320
Yeah.

00:30:37.320 --> 00:30:41.980
But in VR with your, with your Apple snorkel on, think how real that would be.

00:30:41.980 --> 00:30:42.380
Yeah.

00:30:42.380 --> 00:30:43.660
But actually underwater.

00:30:43.860 --> 00:30:45.380
Like, but they're probably not.

00:30:45.380 --> 00:30:45.820
Yes, exactly.

00:30:45.820 --> 00:30:46.560
Yeah.

00:30:46.560 --> 00:30:49.080
That'd be cool.

00:30:49.080 --> 00:30:49.740
Oh boy.

00:30:49.740 --> 00:30:51.600
Well, that's what I got for y'all.

00:30:51.600 --> 00:30:55.320
$899 Apple snorkel not included.

00:30:55.320 --> 00:30:56.460
Yeah.

00:30:56.460 --> 00:30:56.940
Cool.

00:30:56.940 --> 00:30:57.520
All right.

00:30:57.520 --> 00:30:57.760
Nice.

00:30:57.760 --> 00:30:59.180
Well, yeah, very fun.

00:30:59.180 --> 00:31:02.180
Thank you everyone for the active chat in the live stream.

00:31:02.180 --> 00:31:04.800
Thank you for everyone who listened, no matter how you listen.

00:31:04.800 --> 00:31:06.500
And Brian, thanks as always.

00:31:06.500 --> 00:31:07.280
Thank you.

00:31:07.280 --> 00:31:07.860
Bye.