WEBVTT

00:00:00.020 --> 00:00:04.960
<v Brian Okken>Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:00:05.400 --> 00:00:09.660
<v Brian Okken>This is episode 459, recorded November 24th, 2025.

00:00:10.400 --> 00:00:11.240
<v Brian Okken>And I am Brian Okken.

00:00:11.480 --> 00:00:12.280
<v Brian Okken>And I am Michael Kennedy.

00:00:12.660 --> 00:00:18.960
<v Brian Okken>And we want to thank everybody that supports us through the stuff we sell to you guys

00:00:19.260 --> 00:00:23.900
<v Brian Okken>and provide services like the courses at Talk Python Training, the Complete pytest course,

00:00:24.960 --> 00:00:26.780
<v Brian Okken>our Patreon supporters, of course, we love you.

00:00:26.880 --> 00:00:30.220
<v Brian Okken>and also like everybody that buys books and stuff.

00:00:31.600 --> 00:00:33.100
<v Brian Okken>Connect with us if you'd like to,

00:00:33.270 --> 00:00:34.680
<v Brian Okken>like to send us some topic ideas

00:00:35.000 --> 00:00:36.780
<v Brian Okken>or have a comment about what we said on the show.

00:00:37.420 --> 00:00:38.420
<v Brian Okken>Feel free to connect with us.

00:00:38.860 --> 00:00:43.459
<v Brian Okken>There's a contact us form on pythonbytes.fm,

00:00:45.400 --> 00:00:47.860
<v Brian Okken>but you can also reach us on Bluesky or Mastodon

00:00:48.360 --> 00:00:49.620
<v Brian Okken>and those links are in the show notes.

00:00:50.000 --> 00:00:51.460
<v Brian Okken>If you are listening to us

00:00:51.460 --> 00:00:54.939
<v Brian Okken>and occasionally would like to maybe see what we look like

00:00:54.960 --> 00:00:58.220
<v Brian Okken>or see the topics that we're putting on the screen,

00:00:58.510 --> 00:01:03.360
<v Brian Okken>you can join us on YouTube at pythonbytes.fm/live.

00:01:03.720 --> 00:01:06.920
<v Brian Okken>And there you can also subscribe to the show

00:01:07.030 --> 00:01:11.680
<v Brian Okken>and also get notified when the upcoming ones are going on.

00:01:12.500 --> 00:01:15.100
<v Brian Okken>Usually Monday at, we need to change this,

00:01:15.390 --> 00:01:16.240
<v Brian Okken>usually Monday at 11,

00:01:16.640 --> 00:01:18.440
<v Brian Okken>but all the older versions are there too.

00:01:18.880 --> 00:01:20.980
<v Brian Okken>And if we ever change it for personal reasons,

00:01:20.980 --> 00:01:22.260
<v Brian Okken>you can get notified there.

00:01:22.880 --> 00:01:24.800
<v Brian Okken>And of course, please sign up for the newsletter.

00:01:24.840 --> 00:01:31.220
<v Brian Okken>We love to send you all of the links of the things we talked about in the show are sent to you right to your inbox.

00:01:31.780 --> 00:01:33.040
<v Brian Okken>And we don't spam you.

00:01:33.160 --> 00:01:34.500
<v Brian Okken>It's just the show notes, really.

00:01:35.220 --> 00:01:36.720
<v Brian Okken>What do you got for us up first, Michael?

00:01:36.920 --> 00:01:38.860
<v Brian Okken>Actually, we have some pre-topics.

00:01:39.760 --> 00:01:42.180
<v Brian Okken>We have a topic zero topic.

00:01:42.420 --> 00:01:43.080
<v Michael Kennedy>How about that?

00:01:43.420 --> 00:01:43.540
<v Michael Kennedy>Yeah.

00:01:43.740 --> 00:01:44.200
<v Michael Kennedy>Topic zero.

00:01:44.440 --> 00:01:45.880
<v Michael Kennedy>So I don't know if people notice.

00:01:46.500 --> 00:01:53.240
<v Michael Kennedy>I mean, if you've read your email or listened to the radio or anything like that, you might know that it is the week of Black Friday.

00:01:53.480 --> 00:01:57.720
<v Michael Kennedy>And I think there's a lot of restraint on our end, Brian, by keeping it to the week.

00:01:57.960 --> 00:02:01.840
<v Michael Kennedy>Like I was getting Black Friday sales in October and this is wrong.

00:02:02.160 --> 00:02:05.060
<v Michael Kennedy>This is disrespecting Halloween amongst other things.

00:02:05.340 --> 00:02:05.580
<v Michael Kennedy>Yeah.

00:02:06.700 --> 00:02:10.479
<v Michael Kennedy>Anyway, Black Friday, I launched the Black Friday sale over at Talk Python.

00:02:10.520 --> 00:02:11.980
<v Michael Kennedy>And this year is different than the last year.

00:02:12.260 --> 00:02:15.380
<v Michael Kennedy>Traditionally, I just sort of done, hey, get the everything bundle, get all the courses

00:02:16.060 --> 00:02:16.840
<v Michael Kennedy>on in forever sort of thing.

00:02:17.280 --> 00:02:19.380
<v Michael Kennedy>But I wanted to do a couple of different deals.

00:02:19.580 --> 00:02:21.900
<v Michael Kennedy>So now there's three options you can pick from.

00:02:21.960 --> 00:02:27.720
<v Michael Kennedy>you can pick i have what's called the ai python bundle so two of our most popular courses agentic

00:02:27.760 --> 00:02:34.300
<v Michael Kennedy>ai programming with python the one that i wrote and that's if you want to use things like water

00:02:34.560 --> 00:02:41.240
<v Michael Kennedy>cursor or junior or whatever to build applications with alongside you and we have llm building blocks

00:02:41.240 --> 00:02:48.559
<v Michael Kennedy>in python by vincent mormonam which is uh basically if i'm going to build something that uses an llm

00:02:48.680 --> 00:02:52.800
<v Michael Kennedy>as an API kind of really cool stuff in both courses they're both really well reviewed and

00:02:53.000 --> 00:02:57.960
<v Michael Kennedy>received you can get that for like half off as a special mini bundle then the whole library thing

00:02:58.060 --> 00:03:02.900
<v Michael Kennedy>is still on you can get it at at super discounts and I'm also offering the talk python in production

00:03:03.080 --> 00:03:08.340
<v Michael Kennedy>book it's doing really well for a while it's been a good while at number one in software engineering

00:03:08.600 --> 00:03:14.960
<v Michael Kennedy>on Amazon which is amazing it's nice it's got pure five star reviews on gumroad at least as of

00:03:14.940 --> 00:03:19.240
<v Michael Kennedy>yesterday. I haven't looked today, but I think that's still true. So really well received.

00:03:19.480 --> 00:03:24.040
<v Michael Kennedy>That's also on sale at a discount. So that's Black Friday at Talk Python. talkpython.fm

00:03:24.240 --> 00:03:31.060
<v Michael Kennedy>slash Black-Friday. Check it out, please. It's, as you said, at the top brain, it's a really

00:03:31.140 --> 00:03:34.280
<v Michael Kennedy>great way to support a show. Make sure that we keep doing what we're doing here on the podcast.

00:03:34.960 --> 00:03:40.320
<v Brian Okken>And with that, how about you? Well, I was actually not planning on doing a Black Friday thing,

00:03:40.440 --> 00:03:45.680
<v Brian Okken>but I saw your topic in there. So I thought, yeah, why not? I'll do a Black Friday thing too.

00:03:46.280 --> 00:03:51.600
<v Brian Okken>So the complete pytest course bundle, I put that on sale. And if you go, so you have to use a coupon

00:03:51.820 --> 00:03:57.820
<v Brian Okken>code, the coupon code, if you go to the, if you just say, yeah, I want to get this. If you type

00:03:57.860 --> 00:04:04.759
<v Brian Okken>in Black Friday, hit apply, then it's a 20% discount. But yeah, I don't think that looks

00:04:04.780 --> 00:04:10.760
<v Brian Okken>big enough um i think i think we'll also do a save 50 so if you do save 50 um and apply that

00:04:11.140 --> 00:04:16.720
<v Brian Okken>that's better that's 29 bucks now um so you get half off um 20 off or half off your choice

00:04:18.479 --> 00:04:24.820
<v Brian Okken>um so uh doing that it'll be in the show notes uh but i kind of want okay so i was trying to match

00:04:25.100 --> 00:04:29.080
<v Brian Okken>michael because he was doing 20 on some of the stuff so i did i did the black friday for 20

00:04:28.980 --> 00:04:39.220
<v Brian Okken>But then I read my newsletter from Pragmatic, and Pragmatic is doing a 50% off for Black Friday.

00:04:39.320 --> 00:04:42.980
<v Brian Okken>So you can get all Pragmatic books.

00:04:43.320 --> 00:04:45.520
<v Brian Okken>If you save 50, you get 50% off.

00:04:45.720 --> 00:04:47.880
<v Brian Okken>And that includes Python testing with pytest.

00:04:48.160 --> 00:04:52.160
<v Brian Okken>So you can grab the video course or the book or both.

00:04:53.040 --> 00:04:55.440
<v Brian Okken>So those are my Black Friday deals.

00:04:55.780 --> 00:04:56.020
<v Michael Kennedy>Awesome.

00:04:56.100 --> 00:05:09.020
<v Michael Kennedy>And yeah, I don't, I mean, I know sometimes it feels overly salesy, but I did not do Black Friday one year and I got a ton of email like, Michael, where's your Black Friday sales? I've been hoping that you would do one. So I know at least a subset of people genuinely look forward to it.

00:05:09.120 --> 00:05:15.980
<v Brian Okken>And I personally, if there's something I really want for my learning path, I try to get it whenever I get it.

00:05:16.979 --> 00:05:20.160
<v Brian Okken>But there's some things that are like, it depends on your budget.

00:05:20.270 --> 00:05:24.160
<v Brian Okken>And there's some things that I don't need to have right away and I'd like to use.

00:05:24.160 --> 00:05:28.120
<v Brian Okken>And there's a lot of stuff that I've purchased on Black Friday sales.

00:05:28.420 --> 00:05:35.980
<v Brian Okken>And I appreciate that independent retailers and independent people like you and me do the Black Friday thing.

00:05:36.280 --> 00:05:40.980
<v Brian Okken>people that the full price is just a smidge out of their price range that's good yeah absolutely

00:05:41.660 --> 00:05:45.360
<v Michael Kennedy>all right let's talk about python stuff i mean that was python stuff but you know other stuff

00:05:45.590 --> 00:05:52.620
<v Michael Kennedy>yeah pure python and i'm talking a language level python okay there's a lot more to python than just

00:05:52.700 --> 00:05:57.900
<v Michael Kennedy>the language i think some people get confused i saw this comment on reddit of all places somebody

00:05:57.950 --> 00:06:02.300
<v Michael Kennedy>said hey what podcast should i listen to to learn python like why would you do that that's stupid

00:06:02.410 --> 00:06:06.240
<v Michael Kennedy>why would you listen to a podcast like just it's a simple language just go here and take the

00:06:06.260 --> 00:06:07.660
<v Michael Kennedy>I was like, a little bit broader.

00:06:07.810 --> 00:06:10.320
<v Michael Kennedy>But today, no, actually, we're talking built-ins.

00:06:10.370 --> 00:06:11.140
<v Michael Kennedy>We're talking runtime.

00:06:13.479 --> 00:06:18.880
<v Michael Kennedy>So PEP 814, this one is a really natural addition now that Python 3.14 came out.

00:06:19.380 --> 00:06:22.480
<v Michael Kennedy>This is add frozen dict as a built-in type.

00:06:22.920 --> 00:06:26.880
<v Michael Kennedy>Comes from Victor Stinner, who does a ton of performance stuff as a core developer.

00:06:27.300 --> 00:06:28.020
<v Michael Kennedy>Thank you for that, Victor.

00:06:28.500 --> 00:06:34.920
<v Michael Kennedy>And the idea is that when you have a frozen type, you get a lot of guarantees that you

00:06:34.860 --> 00:06:40.020
<v Michael Kennedy>can work against that make your life easier, your bugs, et cetera, right? With a regular dictionary,

00:06:40.150 --> 00:06:43.520
<v Michael Kennedy>you might say, oh, I need to return this dictionary to a thing. And you don't do a copy,

00:06:43.640 --> 00:06:47.060
<v Michael Kennedy>you just hand it over. And then somebody changes it. You're like, wait, you aren't supposed to

00:06:47.180 --> 00:06:51.280
<v Michael Kennedy>change it. I'm just trying to give you some data, right? So these frozen types are great for if you

00:06:51.380 --> 00:06:55.480
<v Michael Kennedy>don't want something to change, it's not going to change. Also, in the code that would try to change

00:06:55.490 --> 00:06:58.820
<v Michael Kennedy>it would get an error, right? So you're like, no, you're not supposed to do this. Figure something

00:06:58.910 --> 00:07:02.840
<v Michael Kennedy>else out, right? The intention is sort of conveyed through the exceptions, I guess, of a cause.

00:07:03.560 --> 00:07:07.800
<v Michael Kennedy>But also, it's really good for concurrency, which is the link back to 3.14.

00:07:08.300 --> 00:07:12.880
<v Michael Kennedy>Now that we have true parallelism, we, I don't know how many people are doing this,

00:07:13.060 --> 00:07:17.980
<v Michael Kennedy>but find yourself a re-entered lock and use it in your code if you're writing true parallel code, right?

00:07:18.060 --> 00:07:22.800
<v Michael Kennedy>Because race conditions, deadlocks, well, it starts with race conditions, ends with deadlocks, and hopefully fix.

00:07:23.620 --> 00:07:26.940
<v Michael Kennedy>Anyway, you want to do that, and you've got to lock mutable code.

00:07:26.940 --> 00:07:30.480
<v Michael Kennedy>But if you're reading, two things are reading from the same data structure, and it's not changing,

00:07:30.900 --> 00:07:32.040
<v Michael Kennedy>well, there ain't no problem with that.

00:07:32.180 --> 00:07:35.980
<v Michael Kennedy>You can read with a hundred threads in parallel and they're all going to get the same answers

00:07:36.620 --> 00:07:37.840
<v Michael Kennedy>deterministically, right?

00:07:37.890 --> 00:07:43.680
<v Michael Kennedy>So having frozen dict adds dictionaries in as a type that is basically purely thread safe

00:07:43.790 --> 00:07:45.980
<v Michael Kennedy>if you use a frozen dict instead of a regular one.

00:07:46.180 --> 00:07:46.460
<v Brian Okken>Cool, right?

00:07:46.700 --> 00:07:47.240
<v Brian Okken>That is cool.

00:07:47.490 --> 00:07:51.200
<v Brian Okken>I wonder if this will ripple up into other data types like classes and stuff.

00:07:51.440 --> 00:07:52.740
<v Michael Kennedy>That is a very good question.

00:07:53.000 --> 00:07:54.480
<v Michael Kennedy>So I have an answer for you as well.

00:07:54.860 --> 00:07:55.920
<v Michael Kennedy>So there's some interesting things.

00:07:56.110 --> 00:07:57.660
<v Michael Kennedy>I linked to the discussion, not the pep.

00:07:57.810 --> 00:08:01.780
<v Michael Kennedy>And there's like a really thoughtful conversation by lots of people that you know from the show.

00:08:01.960 --> 00:08:04.140
<v Michael Kennedy>It's like, well, okay, that's cool.

00:08:04.540 --> 00:08:07.740
<v Michael Kennedy>Can I equate a dictionary with a frozen dict?

00:08:08.120 --> 00:08:13.100
<v Michael Kennedy>Because what you'll see from the  PEP is frozen dict actually derives from something that is not a dictionary.

00:08:13.350 --> 00:08:16.740
<v Michael Kennedy>So it's not, if you said, is instance a dictionary frozen dict, it would say no.

00:08:17.400 --> 00:08:20.520
<v Michael Kennedy>I'm not so sure how I feel about that, but that's how it is.

00:08:20.860 --> 00:08:22.760
<v Michael Kennedy>So the question is, well, can you say equal, equal?

00:08:23.560 --> 00:08:25.120
<v Michael Kennedy>And is it ordered and so on?

00:08:25.130 --> 00:08:28.480
<v Michael Kennedy>It is ordered, but is that order dependent and the equals and so on, right?

00:08:28.670 --> 00:08:30.360
<v Michael Kennedy>So there's a lot of stuff coming along.

00:08:30.600 --> 00:08:32.440
<v Michael Kennedy>And here you can go see all the conversation there.

00:08:32.700 --> 00:08:35.520
<v Michael Kennedy>So I also, just like you, Brian, like, well, what else is frozen in Python?

00:08:35.719 --> 00:08:36.860
<v Michael Kennedy>Like, what do we already have?

00:08:37.000 --> 00:08:38.360
<v Michael Kennedy>You know, if we didn't have a frozen dictionary.

00:08:39.200 --> 00:08:43.500
<v Michael Kennedy>So I put together a list of existing frozen types and structures in Python.

00:08:44.300 --> 00:08:45.420
<v Michael Kennedy>Tuple, frozen set.

00:08:45.600 --> 00:08:47.440
<v Michael Kennedy>Frozen set was the motivation for frozen dict.

00:08:47.480 --> 00:08:50.000
<v Michael Kennedy>Like, well, if we got a frozen set, why can't we have a frozen dictionary?

00:08:50.300 --> 00:08:50.700
<v Michael Kennedy>You know what I mean?

00:08:51.200 --> 00:08:53.820
<v Michael Kennedy>String, obviously, bytes, ranges, memory views.

00:08:54.220 --> 00:08:58.140
<v Michael Kennedy>Memory views are interesting to put over like a buffer, but you don't want it to be written to.

00:08:58.540 --> 00:09:05.640
<v Michael Kennedy>but you've also got mapping proxy types you've got a record class in the form of data classes

00:09:05.920 --> 00:09:09.760
<v Michael Kennedy>and then data classes you can say frozen is true so this is as close as you're going to get probably

00:09:09.860 --> 00:09:17.360
<v Michael Kennedy>to what you're asking for right frozen classes you technically could more or less do that if you had

00:09:17.480 --> 00:09:22.260
<v Michael Kennedy>private variables and only read-only properties but that's a lot of work you might as well just

00:09:22.440 --> 00:09:26.240
<v Michael Kennedy>create a frozen data class i don't know but yeah so there's a whole bunch of stuff that i put in

00:09:26.220 --> 00:09:28.080
<v Michael Kennedy>here that people can check out.

00:09:28.120 --> 00:09:31.480
<v Michael Kennedy>I put a little extra data sheet because I'm like, huh,

00:09:31.800 --> 00:09:32.700
<v Michael Kennedy>I also want to know this.

00:09:33.240 --> 00:09:33.640
<v Michael Kennedy>Yeah.

00:09:34.020 --> 00:09:34.860
<v Michael Kennedy>Yeah. All right.

00:09:35.260 --> 00:09:38.080
<v Michael Kennedy>I'm looking forward to Python 3.15 being more frozen.

00:09:38.200 --> 00:09:38.580
<v Michael Kennedy>How about that?

00:09:39.100 --> 00:09:40.040
<v Brian Okken>More frozen. Yeah.

00:09:40.340 --> 00:09:41.100
<v Michael Kennedy>More frozen.

00:09:41.360 --> 00:09:42.340
<v Brian Okken>Might be faster too.

00:09:42.620 --> 00:09:44.980
<v Michael Kennedy>Yeah. It definitely has a possibility for faster,

00:09:45.300 --> 00:09:46.200
<v Michael Kennedy>safer code more easily.

00:09:46.760 --> 00:09:47.040
<v Michael Kennedy>Yeah.

00:09:47.180 --> 00:09:47.660
<v Michael Kennedy>Document it though.

00:09:48.120 --> 00:09:49.100
<v Brian Okken>Yeah, got to document it.

00:09:49.720 --> 00:09:54.880
<v Brian Okken>I'm bringing up an interesting topic that this was suggested by John Hagen.

00:09:55.120 --> 00:09:55.420
<v Brian Okken>Thanks, John.

00:09:56.640 --> 00:09:57.540
<v Brian Okken>Material for MakeDocs.

00:09:57.820 --> 00:10:01.320
<v Brian Okken>So I use MakeDocs and I use Material for MakeDocs.

00:10:01.440 --> 00:10:04.460
<v Brian Okken>Material for MakeDocs is a theme for MakeDocs,

00:10:04.460 --> 00:10:07.120
<v Brian Okken>but it also adds some cool stuff to it.

00:10:07.270 --> 00:10:09.820
<v Brian Okken>So it's like a theme++ or something.

00:10:11.800 --> 00:10:17.080
<v Brian Okken>And I use it for both personal projects and for at work

00:10:17.880 --> 00:10:20.140
<v Brian Okken>because it's just as easy to work with.

00:10:20.200 --> 00:10:22.020
<v Brian Okken>Anyway, there's some news about Material.

00:10:22.360 --> 00:10:26.740
<v Brian Okken>So the news that came out is that the team behind it

00:10:26.790 --> 00:10:32.280
<v Brian Okken>is putting the Material for MakeDocs project in maintenance mode.

00:10:32.720 --> 00:10:38.020
<v Brian Okken>So for new updates, I don't know because I didn't really fully read this,

00:10:40.400 --> 00:10:44.700
<v Brian Okken>but I'm guessing that they're going to, let's see, changes the issue tracker.

00:10:46.620 --> 00:10:49.160
<v Brian Okken>Are they encouraged to open bug reports following?

00:10:49.700 --> 00:10:52.820
<v Brian Okken>okay, they'll fix critical bugs and security vulnerabilities.

00:10:53.320 --> 00:10:53.680
<v Brian Okken>That's right.

00:10:53.860 --> 00:10:55.160
<v Brian Okken>That's a good, that's fair.

00:10:56.200 --> 00:10:58.260
<v Brian Okken>Because a lot of people use it, including me.

00:10:58.900 --> 00:10:59.640
<v Brian Okken>So I care about that.

00:11:00.020 --> 00:11:02.620
<v Brian Okken>But why are they putting it in maintenance mode?

00:11:02.800 --> 00:11:04.820
<v Brian Okken>It's because the efforts that they're putting in this,

00:11:04.940 --> 00:11:08.140
<v Brian Okken>they're switching over to a new project called Zensical.

00:11:09.600 --> 00:11:10.040
<v Brian Okken>Zensical?

00:11:10.380 --> 00:11:11.860
<v Brian Okken>Anyway, interesting name.

00:11:12.480 --> 00:11:15.500
<v Brian Okken>Modern static site generator built on material for MakeDocs team,

00:11:15.780 --> 00:11:17.380
<v Brian Okken>built by the material for MakeDocs team.

00:11:17.600 --> 00:11:27.380
<v Brian Okken>So it's a backwards compatibility, and we're going to link to a post that is actually all the, it's like a four post series talking about the transition because it affects a lot of people.

00:11:27.980 --> 00:11:41.020
<v Brian Okken>So they're transforming Material for MakeDocs, they're starting Zensical, and they've got a Material for MakeDocs insiders program, and they're closing down GitHub discussions on Material for MakeDocs.

00:11:41.960 --> 00:11:47.820
<v Brian Okken>So it doesn't seem like it's profit-driven

00:11:48.120 --> 00:11:49.700
<v Brian Okken>because they were actually making a decent amount

00:11:49.730 --> 00:11:53.240
<v Brian Okken>off of GitHub sponsorships for this,

00:11:53.920 --> 00:11:54.960
<v Brian Okken>but maybe that's part of it.

00:11:55.180 --> 00:11:57.600
<v Brian Okken>But the gist of it is at the top,

00:11:57.740 --> 00:12:00.080
<v Brian Okken>they said they want Zensical

00:12:00.340 --> 00:12:03.360
<v Brian Okken>to overcome technical limitations of MakeDocs.

00:12:03.620 --> 00:12:05.400
<v Brian Okken>There's so many people that were using it, though,

00:12:05.580 --> 00:12:07.600
<v Brian Okken>and not using any other form of MakeDocs,

00:12:07.740 --> 00:12:11.139
<v Brian Okken>but in part of this discussion they were talking about

00:12:11.180 --> 00:12:19.960
<v Brian Okken>that a lot of the stuff in the forum and a lot of stuff in just GitHub issues were really not their problem.

00:12:20.380 --> 00:12:25.880
<v Brian Okken>There were like really issues with MakeDocs or issues with some other dependencies that they were using.

00:12:26.010 --> 00:12:28.440
<v Brian Okken>So Zensical is going to just wrap up.

00:12:29.080 --> 00:12:33.540
<v Brian Okken>It's going to be a replacement for MakeDocs and MakeDocs, material for MakeDocs.

00:12:33.800 --> 00:12:47.080
<v Brian Okken>And I think a few of the other plugins that used to work with all of this, they're pulling those in to have a support model so that they can actually support everything that matters to people that use it.

00:12:48.420 --> 00:12:52.100
<v Brian Okken>The new website, Zensical.org, is just fun to look at.

00:12:52.680 --> 00:12:54.240
<v Brian Okken>There's this cool animation thing.

00:12:56.900 --> 00:12:58.440
<v Brian Okken>Yeah, it's really cool.

00:12:58.530 --> 00:13:00.200
<v Brian Okken>So for people listening, you got to check it out.

00:13:00.360 --> 00:13:01.120
<v Brian Okken>Zensical.org.

00:13:01.380 --> 00:13:08.420
<v Brian Okken>It's a black background with this kind of a yellow light laser thing going around in circles.

00:13:09.860 --> 00:13:11.340
<v Brian Okken>I don't know what that shape is.

00:13:12.120 --> 00:13:12.600
<v Brian Okken>Like a donut.

00:13:15.240 --> 00:13:16.860
<v Brian Okken>Thank you, Henry Schreiner.

00:13:17.760 --> 00:13:19.440
<v Brian Okken>It's also a...

00:13:20.420 --> 00:13:21.520
<v Brian Okken>Henry jumped in the show.

00:13:21.840 --> 00:13:24.500
<v Brian Okken>It's also a rust rewrite, and it's five times faster.

00:13:25.000 --> 00:13:25.860
<v Brian Okken>So a lot faster.

00:13:26.760 --> 00:13:28.360
<v Brian Okken>I'm pretty excited to try that out.

00:13:28.420 --> 00:13:36.020
<v Brian Okken>I haven't tried this yet, but since I'm a heavy material for MakeDocs user, I'll definitely be checking this out.

00:13:36.800 --> 00:13:44.920
<v Brian Okken>So one of the things I was curious about is the whole, like, how does this work for, like, is it going to go away or what's the open source model?

00:13:45.400 --> 00:13:49.760
<v Brian Okken>It's still going to be open source and MIT licensed.

00:13:50.400 --> 00:13:52.520
<v Brian Okken>And there's a compatibility back.

00:13:52.880 --> 00:13:54.340
<v Brian Okken>They're trying to make it backwards compatible.

00:13:54.420 --> 00:13:58.980
<v Brian Okken>So when you switch over, you can use your make ducks YAML file just as is.

00:13:59.300 --> 00:14:00.060
<v Brian Okken>And hopefully it works.

00:14:00.140 --> 00:14:01.000
<v Brian Okken>I haven't tried this yet.

00:14:01.260 --> 00:14:04.000
<v Brian Okken>And I, you know, I actually haven't like customized it too much.

00:14:04.120 --> 00:14:05.740
<v Brian Okken>So it's probably going to work fine for me.

00:14:06.580 --> 00:14:11.460
<v Brian Okken>But I do want to check out this, this compatible backwards compatibility thing to switch it over.

00:14:11.860 --> 00:14:16.740
<v Brian Okken>I like some of the cool features that they're, they're trying to build in and faster is great.

00:14:17.860 --> 00:14:22.020
<v Brian Okken>The other, the other thing I was, so how are they making money?

00:14:22.160 --> 00:14:24.120
<v Brian Okken>is the Zensical Spark model.

00:14:24.620 --> 00:14:25.940
<v Brian Okken>So this is going to be,

00:14:26.620 --> 00:14:28.160
<v Brian Okken>so what's Zensical Spark?

00:14:29.440 --> 00:14:30.560
<v Brian Okken>It's for basically,

00:14:31.260 --> 00:14:33.240
<v Brian Okken>actually, I think it's more than this,

00:14:33.280 --> 00:14:36.780
<v Brian Okken>but part of it is companies that use it

00:14:37.080 --> 00:14:39.060
<v Brian Okken>or groups, teams that use it, even startups.

00:14:39.460 --> 00:14:41.120
<v Brian Okken>It's not just for enterprise people,

00:14:41.760 --> 00:14:46.000
<v Brian Okken>but groups can go ahead and sign up for this

00:14:46.080 --> 00:14:47.440
<v Brian Okken>and have better support model.

00:14:47.760 --> 00:14:50.280
<v Brian Okken>So they can prioritize supporting people

00:14:50.460 --> 00:14:52.020
<v Brian Okken>that are paying them, which makes sense.

00:14:52.320 --> 00:14:55.280
<v Brian Okken>But those fixes will help everybody.

00:14:55.720 --> 00:14:56.120
<v Brian Okken>So that's good.

00:14:57.460 --> 00:15:02.180
<v Brian Okken>One of the cool things that they're doing also during the transition is material for

00:15:02.260 --> 00:15:08.140
<v Brian Okken>MakeDocs, one of the ways they made money is they had both an open version that's just

00:15:08.200 --> 00:15:08.760
<v Brian Okken>free for everybody.

00:15:09.180 --> 00:15:13.160
<v Brian Okken>And then they would release new features to an insiders group.

00:15:13.460 --> 00:15:15.160
<v Brian Okken>So you could get new features right away.

00:15:15.620 --> 00:15:19.620
<v Brian Okken>And then they would sort of trickle into the general population features.

00:15:19.780 --> 00:15:25.100
<v Brian Okken>they're getting um i don't know if there's going to be something similar for the spark thing but

00:15:25.400 --> 00:15:29.740
<v Brian Okken>for material for make docs they've just opened up the floodgates anything that was in the insiders

00:15:29.820 --> 00:15:35.120
<v Brian Okken>is now part of uh the open source thing so if you want to stick to that you get all the features

00:15:35.640 --> 00:15:43.280
<v Brian Okken>so anyway just news for people that use make docs yeah nice i'm i'm optimistic here if their website's

00:15:43.400 --> 00:15:49.040
<v Michael Kennedy>anything to go by no it's i'm optimistic i think it will it's the kind of thing that'll make it

00:15:49.020 --> 00:15:52.560
<v Michael Kennedy>really polished and really nice if they get a decent number of customers.

00:15:52.730 --> 00:15:53.380
<v Brian Okken>So good.

00:15:53.660 --> 00:15:59.120
<v Brian Okken>And I do like that they're just actually putting the people on the people with their pictures.

00:15:59.470 --> 00:16:01.060
<v Brian Okken>She just, these are the people behind it.

00:16:01.270 --> 00:16:07.460
<v Brian Okken>It's not something just no faceless people making your money off you.

00:16:07.780 --> 00:16:08.260
<v Brian Okken>Exactly.

00:16:08.770 --> 00:16:08.940
<v Brian Okken>Cool.

00:16:09.220 --> 00:16:09.600
<v Brian Okken>That's right.

00:16:09.980 --> 00:16:10.980
<v Michael Kennedy>Keep Python independent.

00:16:11.110 --> 00:16:11.260
<v Michael Kennedy>Okay.

00:16:11.960 --> 00:16:17.800
<v Michael Kennedy>So I want to talk about something that was sent in to us by Gerber Decken.

00:16:18.340 --> 00:16:21.000
<v Michael Kennedy>And this is sort of the hat trick, if you will, Brian.

00:16:21.400 --> 00:16:26.160
<v Michael Kennedy>Two weeks ago, you talked about pip-dep-tree and UV-pip-tree, right?

00:16:26.520 --> 00:16:29.020
<v Michael Kennedy>And then the last week, you talked about dep-tree.

00:16:29.899 --> 00:16:32.900
<v Michael Kennedy>This time, I want to talk about a couple of things.

00:16:33.000 --> 00:16:34.620
<v Michael Kennedy>I want to talk about uv.

00:16:35.520 --> 00:16:36.740
<v Michael Kennedy>I mean, I got to look at this.

00:16:36.760 --> 00:16:38.980
<v Michael Kennedy>This is a bit of a statement here.

00:16:39.200 --> 00:16:39.960
<v Michael Kennedy>I know it's rough.

00:16:40.560 --> 00:16:42.000
<v Michael Kennedy>Rough, analyze, graph.

00:16:42.500 --> 00:16:47.659
<v Michael Kennedy>And you give it a virtual environment and some place to start or file

00:16:47.700 --> 00:16:52.740
<v Michael Kennedy>or something like that. And it will generate basically an architectural layer diagram.

00:16:53.390 --> 00:16:59.180
<v Michael Kennedy>This portion of your application depends on these other modules, which depend on those modules. And

00:16:59.540 --> 00:17:03.440
<v Michael Kennedy>is there any form of circular weirdness or whatever, right? So if you want to understand

00:17:03.590 --> 00:17:09.180
<v Michael Kennedy>how that works, this is like, it'll give you just a list. So this thing tech, which I'm covering,

00:17:09.250 --> 00:17:14.819
<v Michael Kennedy>he sent in is a Python tool to visualize and enforce dependencies using this architecture.

00:17:14.839 --> 00:17:17.839
<v Michael Kennedy>and it basically takes that output that I described

00:17:18.020 --> 00:17:20.260
<v Michael Kennedy>and then turns it into a UI, okay?

00:17:20.680 --> 00:17:20.880
<v Brian Okken>Okay.

00:17:21.199 --> 00:17:25.280
<v Michael Kennedy>So there's a little graph that shows how it works,

00:17:25.329 --> 00:17:27.620
<v Michael Kennedy>but basically you just create a TOML file

00:17:28.060 --> 00:17:30.220
<v Michael Kennedy>and then you run a command and it will scheme your code.

00:17:30.640 --> 00:17:33.440
<v Michael Kennedy>It will generate basically that, more or less, that output.

00:17:33.810 --> 00:17:37.380
<v Michael Kennedy>And then you can upload that, not your code,

00:17:37.640 --> 00:17:40.060
<v Michael Kennedy>just this little TOML file that basically has module names

00:17:40.110 --> 00:17:40.940
<v Michael Kennedy>and nothing else in it,

00:17:41.500 --> 00:17:43.760
<v Michael Kennedy>to this service that will turn that into a graph, okay?

00:17:43.880 --> 00:17:49.940
<v Michael Kennedy>So I did that by creating one for a project that I'm not talking about yet, but I'm working on here.

00:17:50.330 --> 00:17:56.060
<v Michael Kennedy>And you can see we've got this cool little thing and it shows like, how are you, how is it put together?

00:17:56.210 --> 00:17:57.740
<v Michael Kennedy>What pieces depend on what, right?

00:17:57.900 --> 00:17:59.320
<v Michael Kennedy>What depends on services?

00:17:59.450 --> 00:18:02.860
<v Michael Kennedy>And then as you interact with it, you can click on like, I want to see what views depend upon.

00:18:03.100 --> 00:18:03.860
<v Michael Kennedy>Oh, that's a lot.

00:18:04.360 --> 00:18:08.140
<v Michael Kennedy>But if I click on view models, you can see there's a nice layered architecture, right?

00:18:08.280 --> 00:18:15.580
<v Michael Kennedy>view models depend on services infrastructure modules and db models but it doesn't depend on

00:18:15.680 --> 00:18:20.000
<v Michael Kennedy>the stuff above it that depends on it so you don't get these weird cycles and other things and there's

00:18:20.040 --> 00:18:24.820
<v Michael Kennedy>like a little cms component it's used by the views it's used by the services and nothing else so you

00:18:24.880 --> 00:18:29.860
<v Michael Kennedy>can get this like cool little understanding of different parts of your app what do you think

00:18:30.340 --> 00:18:36.299
<v Brian Okken>this is cool so this is um maybe because we were talking about pipped up tree before this is not

00:18:36.380 --> 00:18:42.680
<v Michael Kennedy>the third-party stuff is just this is your yeah this is your own code so how does your own code

00:18:42.760 --> 00:18:48.220
<v Michael Kennedy>within itself like a set of sub modules depend upon each other because if you look at this um

00:18:48.540 --> 00:18:53.440
<v Michael Kennedy>you actually look at the code this view model section probably has 30 or 50 classes in it

00:18:53.760 --> 00:18:59.520
<v Michael Kennedy>this infrastructure bit has maybe 20 different things like utilities for web stuff urls and so

00:18:59.520 --> 00:19:04.840
<v Michael Kennedy>on and text parsing and um numeric converting libraries and you know stuff like that this dv

00:19:04.800 --> 00:19:08.700
<v Michael Kennedy>Everything has, I think, five database models and a helper class or something.

00:19:09.180 --> 00:19:10.720
<v Michael Kennedy>But they just show up as these blocks.

00:19:10.880 --> 00:19:13.600
<v Michael Kennedy>So you can kind of get a sense of like, how do these things interact?

00:19:14.180 --> 00:19:17.360
<v Michael Kennedy>The lines are drawn by analyzing all the individual files, I believe,

00:19:17.920 --> 00:19:20.300
<v Michael Kennedy>and seeing which ones point to things from other categories.

00:19:20.900 --> 00:19:22.200
<v Brian Okken>Oh, nice. This is cool.

00:19:22.560 --> 00:19:24.940
<v Michael Kennedy>Yeah. So I uploaded this picture.

00:19:25.900 --> 00:19:27.520
<v Michael Kennedy>I shared this. I create these shareable graphs.

00:19:27.620 --> 00:19:29.740
<v Michael Kennedy>So you can actually play with this graph yourself as well.

00:19:30.040 --> 00:19:33.340
<v Michael Kennedy>Yes. And then Christian asks, is this unmaintained?

00:19:33.380 --> 00:19:37.600
<v Michael Kennedy>Yes, I believe TAC has become unmaintained, but you can still run it.

00:19:37.610 --> 00:19:38.540
<v Michael Kennedy>It still looks like it's okay.

00:19:38.820 --> 00:19:39.840
<v Michael Kennedy>So that's a good point.

00:19:39.960 --> 00:19:46.280
<v Michael Kennedy>I did notice after I put this together that somewhere it's got like a, although the GitHub

00:19:46.530 --> 00:19:51.140
<v Michael Kennedy>repo, no, it's not TAC that is at least doesn't have an explicit statement that has gone into

00:19:51.260 --> 00:19:51.880
<v Michael Kennedy>maintenance mode or anything.

00:19:52.640 --> 00:19:56.620
<v Michael Kennedy>But if you look at TAC, it goes to gauge.sh.

00:19:56.640 --> 00:20:06.220
<v Michael Kennedy>And if you go to gauge.sh, this product is changed and it's becoming some AI thing that means nothing to me.

00:20:07.180 --> 00:20:08.160
<v Michael Kennedy>So I don't know.

00:20:08.360 --> 00:20:11.160
<v Michael Kennedy>But I imagine they'll probably keep it running.

00:20:11.500 --> 00:20:13.740
<v Michael Kennedy>And apparently it's also open source.

00:20:14.060 --> 00:20:16.380
<v Michael Kennedy>So you could go and fork it and just run it yourself or whatever.

00:20:16.650 --> 00:20:16.920
<v Michael Kennedy>I don't know.

00:20:17.230 --> 00:20:22.520
<v Michael Kennedy>So there is some component in this whole chain that is, it's the visualization of it, not the parsing.

00:20:22.820 --> 00:20:25.240
<v Michael Kennedy>I think TAC, which does the parsing, still works fine.

00:20:25.340 --> 00:20:26.480
<v Michael Kennedy>but then it uploads the gauge.

00:20:26.570 --> 00:20:28.320
<v Michael Kennedy>And the gauge thing is in question

00:20:28.630 --> 00:20:30.140
<v Michael Kennedy>about whether that will still work.

00:20:30.660 --> 00:20:32.160
<v Michael Kennedy>But, you know, you could always go

00:20:32.210 --> 00:20:33.800
<v Michael Kennedy>and make yourself, you know, fork it.

00:20:34.180 --> 00:20:35.280
<v Michael Kennedy>I mean, how hard would it be to make,

00:20:36.140 --> 00:20:38.500
<v Michael Kennedy>given the file, which I don't have it easy,

00:20:38.560 --> 00:20:39.060
<v Michael Kennedy>I can pull it up,

00:20:39.200 --> 00:20:40.900
<v Michael Kennedy>but given a file that lists these relationships,

00:20:41.420 --> 00:20:42.620
<v Michael Kennedy>how hard is it to graph it, right?

00:20:42.700 --> 00:20:44.420
<v Michael Kennedy>You could AI your way to something

00:20:44.490 --> 00:20:46.340
<v Michael Kennedy>that draws your pictures out of tech

00:20:46.990 --> 00:20:48.600
<v Michael Kennedy>in like an afternoon if you really had to.

00:20:49.400 --> 00:20:51.800
<v Brian Okken>This visualization left is an exercise for the reader.

00:20:52.140 --> 00:20:52.460
<v Michael Kennedy>Exactly.

00:20:52.710 --> 00:20:53.799
<v Michael Kennedy>Like you could visualize it

00:20:54.020 --> 00:20:57.020
<v Michael Kennedy>if you knew the right series of prompts, I don't know, or you wanted to write it or something.

00:20:57.340 --> 00:21:00.460
<v Michael Kennedy>No, anyway, that's a good point, Christian. Thank you. Over to you, Brian.

00:21:00.880 --> 00:21:08.400
<v Brian Okken>Well, I wanted to talk about upcoming speedups in Python. So there's a couple news articles that

00:21:08.520 --> 00:21:15.280
<v Brian Okken>came by that I noticed talking about some efforts to speed up Python in the future. So we're at

00:21:15.460 --> 00:21:22.300
<v Brian Okken>Python 3.14 right now. 3.15 is in the works and 3.16 later, right? So one of the things,

00:21:22.400 --> 00:21:30.140
<v Brian Okken>This is a post by Ken Jin, a plan for 5% to 10% faster free-threaded JIT by Python 3.16.

00:21:30.560 --> 00:21:36.480
<v Brian Okken>And the highlight is 5% faster for 3.15, 10% faster for 3.16.

00:21:37.480 --> 00:21:42.060
<v Brian Okken>And some of the names popped out as why I should pay attention to this.

00:21:42.600 --> 00:21:48.100
<v Brian Okken>This was brought up during the Python Core Dev Sprint in Cambridge hosted by ARM.

00:21:48.860 --> 00:21:50.160
<v Brian Okken>They planned this project.

00:21:50.520 --> 00:22:06.260
<v Brian Okken>The planners of the project that were present is Savannah Ostrowski, Mark Shannon, Ken Jen, this person, Diego Russo, and Brent Butcher, accompanied by other CPython core team members as well.

00:22:07.620 --> 00:22:12.060
<v Brian Okken>And also, I'm like, well, 5% to 10%, that's not that big of a deal.

00:22:12.400 --> 00:22:15.020
<v Brian Okken>It says, you might wonder, 5% seems awfully conservative.

00:22:15.280 --> 00:22:18.520
<v Brian Okken>However, note that this figure is a geometric mean.

00:22:18.540 --> 00:22:21.840
<v Brian Okken>the number can range from slower to significantly faster.

00:22:22.210 --> 00:22:24.760
<v Brian Okken>All numbers are high performance figures.

00:22:26.050 --> 00:22:29.080
<v Brian Okken>So I think that means they're optimistically thinking

00:22:29.360 --> 00:22:30.960
<v Brian Okken>it's going to be a lot faster.

00:22:32.880 --> 00:22:36.440
<v Brian Okken>So it's interesting that the LLM involvement here

00:22:36.560 --> 00:22:37.160
<v Brian Okken>is a little interesting.

00:22:37.880 --> 00:22:43.520
<v Brian Okken>Plan for 3.15 profiling support via LLVM21.

00:22:43.800 --> 00:22:44.740
<v Brian Okken>Oh, not LLVM.

00:22:44.740 --> 00:22:48.340
<v Brian Okken>That's probably performance-driven compiler optimization.

00:22:48.400 --> 00:22:50.040
<v Michael Kennedy>stuff. Yeah. Yeah.

00:22:50.350 --> 00:22:51.940
<v Michael Kennedy>Where you profile it and then the

00:22:52.640 --> 00:22:54.260
<v Michael Kennedy>compiler says let me look at the profiler

00:22:54.680 --> 00:22:56.340
<v Michael Kennedy>output and then actually re-optimize

00:22:56.640 --> 00:22:58.340
<v Michael Kennedy>based on how you actually ran. You know, like

00:22:58.350 --> 00:22:59.840
<v Michael Kennedy>that sort of fact. I bet it's something like that.

00:23:00.260 --> 00:23:02.460
<v Brian Okken>Yeah, but it's also looking forward to

00:23:03.180 --> 00:23:04.420
<v Brian Okken>some support from

00:23:05.280 --> 00:23:06.400
<v Brian Okken>LLVM20 and then LLVM21.

00:23:07.780 --> 00:23:08.500
<v Brian Okken>So some

00:23:08.950 --> 00:23:10.540
<v Brian Okken>of those lower

00:23:10.670 --> 00:23:12.140
<v Brian Okken>level parsing improvements

00:23:12.550 --> 00:23:14.240
<v Brian Okken>are going to help with the JIT. So

00:23:14.290 --> 00:23:15.980
<v Brian Okken>trace recording, better machine code,

00:23:16.360 --> 00:23:18.660
<v Brian Okken>Register allocation, top of stack caching,

00:23:19.140 --> 00:23:20.080
<v Brian Okken>reference count elimination.

00:23:20.800 --> 00:23:21.660
<v Brian Okken>That's an interesting one.

00:23:22.370 --> 00:23:25.380
<v Brian Okken>More constant promotion and basic free threading support.

00:23:26.480 --> 00:23:30.180
<v Brian Okken>So I'm looking forward to seeing there's some graphs

00:23:30.430 --> 00:23:33.480
<v Brian Okken>and some more information that's really above my pay grade.

00:23:35.620 --> 00:23:36.500
<v Michael Kennedy>That just-

00:23:36.500 --> 00:23:37.940
<v Michael Kennedy>Bars and stuff, they must be in things.

00:23:37.940 --> 00:23:39.580
<v Brian Okken>We don't know.

00:23:39.580 --> 00:23:41.000
<v Brian Okken>Yeah, it looks like,

00:23:41.000 --> 00:23:44.300
<v Brian Okken>it's got like those bar graphs with the eyes,

00:23:44.300 --> 00:23:45.240
<v Brian Okken>like max admin and stuff.

00:23:45.960 --> 00:23:46.740
<v Brian Okken>Oh, wow.

00:23:47.000 --> 00:23:48.540
<v Brian Okken>Yeah, so the potential.

00:23:48.940 --> 00:23:49.420
<v Brian Okken>Yeah, anyway.

00:23:50.260 --> 00:23:50.620
<v Brian Okken>Interesting.

00:23:50.840 --> 00:23:54.220
<v Brian Okken>I'm glad that we're getting some JIT speed up.

00:23:54.260 --> 00:23:54.840
<v Brian Okken>So this is cool.

00:23:55.360 --> 00:23:58.880
<v Brian Okken>Another speed up is, this is from Emma's blog.

00:24:00.540 --> 00:24:04.440
<v Brian Okken>I forgot to grab what Emma's last name is, but Emma's blog.

00:24:05.180 --> 00:24:09.920
<v Brian Okken>Decompression is up to 30% faster in CPython 3.15.

00:24:11.040 --> 00:24:11.900
<v Brian Okken>This is cool.

00:24:12.000 --> 00:24:21.660
<v Brian Okken>So, you know, and this is based on the Z standard being added to the standard library.

00:24:22.160 --> 00:24:27.140
<v Brian Okken>So really, I didn't really get why we cared about the Z standard before.

00:24:27.390 --> 00:24:30.820
<v Brian Okken>But hey, if we can decompress that much faster, that's great.

00:24:31.340 --> 00:24:37.000
<v Brian Okken>There's compression and decompression happening all over the place that you don't even really know is going on.

00:24:37.240 --> 00:24:52.920
<v Michael Kennedy>So, you know, I actually ended up for the very first time, I think ever using compression in my Python app for a non, not because I somehow received a zip file or a tarball or something and wanted to process it, but like as a part of operation of the app.

00:24:52.920 --> 00:24:54.760
<v Michael Kennedy>So I'll run this by you, tell me what you think.

00:24:55.340 --> 00:25:06.740
<v Michael Kennedy>So this project that I'm working on that, that shall not be named has to store text and it has to store about 250 K of text per database record for like a certain thing.

00:25:07.040 --> 00:25:08.080
<v Michael Kennedy>But you never search it.

00:25:08.330 --> 00:25:09.280
<v Michael Kennedy>You never index it.

00:25:09.560 --> 00:25:12.300
<v Michael Kennedy>You mean you don't have a database index, like you find it through other

00:25:12.460 --> 00:25:13.700
<v Michael Kennedy>keys and you just want to process it.

00:25:13.700 --> 00:25:17.180
<v Michael Kennedy>And I'm like, well, how long does it take to compress and decompress that?

00:25:17.440 --> 00:25:18.780
<v Michael Kennedy>How much smaller does it get?

00:25:18.990 --> 00:25:23.720
<v Michael Kennedy>So I used XZ, which is also built in a Python and it goes down to about a

00:25:23.900 --> 00:25:24.640
<v Michael Kennedy>10th of the size.

00:25:24.920 --> 00:25:29.900
<v Michael Kennedy>So for caching and database records, it's instead of being 250 K it's like 25 K

00:25:30.300 --> 00:25:32.220
<v Michael Kennedy>and you want to process it as part of a web request.

00:25:32.340 --> 00:25:34.980
<v Michael Kennedy>You're like, yeah, let me just unzip it and send it back to you or whatever.

00:25:35.540 --> 00:25:36.780
<v Michael Kennedy>And yeah, I found it really useful.

00:25:36.880 --> 00:25:40.700
<v Michael Kennedy>So I'm all of a sudden super excited about fast decompression inside the, inside of CPython.

00:25:40.940 --> 00:25:41.320
<v Brian Okken>Yeah.

00:25:42.860 --> 00:25:45.080
<v Brian Okken>Little, little bits matter if you do the right ones.

00:25:45.620 --> 00:25:46.080
<v Brian Okken>So yeah.

00:25:47.300 --> 00:25:51.400
<v Michael Kennedy>And by the way, it's, it's like millisecond level type of time to do that.

00:25:51.600 --> 00:25:54.120
<v Michael Kennedy>So you might think, well, I mean, it's going to make your site slow, right?

00:25:54.360 --> 00:25:57.940
<v Michael Kennedy>You know, but if you can store 10 times as much data without running out of disk space

00:25:57.980 --> 00:26:00.240
<v Michael Kennedy>or cash or whatever, like that also helps a lot, you know?

00:26:00.480 --> 00:26:00.740
<v Brian Okken>Yeah.

00:26:00.780 --> 00:26:05.280
<v Brian Okken>It helps with your, your, how much you're paying for database services as well.

00:26:05.600 --> 00:26:05.820
<v Brian Okken>So yeah.

00:26:06.480 --> 00:26:06.720
<v Brian Okken>All right.

00:26:06.880 --> 00:26:09.240
<v Michael Kennedy>Oh, one more thing for Henry on the compression thing.

00:26:10.220 --> 00:26:12.360
<v Michael Kennedy>ZSTD is used by Python build standalone.

00:26:12.510 --> 00:26:14.920
<v Michael Kennedy>So having the ability to handle that without dependencies is great.

00:26:15.240 --> 00:26:16.260
<v Michael Kennedy>And faster next year too.

00:26:16.440 --> 00:26:17.500
<v Michael Kennedy>Yeah, thanks for the background info there.

00:26:17.900 --> 00:26:22.320
<v Michael Kennedy>And, you know, just shout out, like, I'm such a fan of Python build standalone as a way to,

00:26:22.490 --> 00:26:25.820
<v Michael Kennedy>like getting Python on your, a computer, your computer, server, whatever,

00:26:26.100 --> 00:26:29.980
<v Michael Kennedy>is just ridiculous with uv plus Python build standalone now, right?

00:26:30.380 --> 00:26:32.280
<v Michael Kennedy>Seconds, not trouble, right?

00:26:32.380 --> 00:26:34.760
<v Michael Kennedy>You know, uv, make a virtual environment, desperation, Python.

00:26:35.060 --> 00:26:36.600
<v Brian Okken>Yeah, it just changed.

00:26:37.000 --> 00:26:39.720
<v Brian Okken>It's one of those things that changed everybody's workflow.

00:26:40.820 --> 00:26:45.120
<v Brian Okken>And I don't even think about having to install a different version anymore.

00:26:45.410 --> 00:26:46.020
<v Brian Okken>It just happens.

00:26:46.610 --> 00:26:47.180
<v Brian Okken>And just does.

00:26:47.840 --> 00:26:49.580
<v Brian Okken>All right, you got any extras while you got your screen up?

00:26:49.880 --> 00:26:50.200
<v Brian Okken>Sure.

00:26:51.210 --> 00:26:55.960
<v Brian Okken>The one extra I've got is that the Lean TDD book,

00:26:56.620 --> 00:27:00.500
<v Brian Okken>one of the things I'm putting it out while I'm writing it.

00:27:01.030 --> 00:27:02.980
<v Brian Okken>This week, I'm doing Thanksgiving prep,

00:27:03.200 --> 00:27:04.860
<v Brian Okken>so I'm not going to release a chapter this week.

00:27:04.940 --> 00:27:07.120
<v Brian Okken>but there'll probably be one next week.

00:27:08.020 --> 00:27:09.900
<v Brian Okken>And that one's on building on lean.

00:27:10.900 --> 00:27:12.720
<v Brian Okken>Last one was building on TDD.

00:27:13.820 --> 00:27:15.820
<v Brian Okken>What I wanted to talk about though

00:27:15.960 --> 00:27:17.140
<v Brian Okken>is I appreciate the issues.

00:27:17.460 --> 00:27:20.620
<v Brian Okken>So I decided to just use GitHub repo

00:27:21.120 --> 00:27:22.840
<v Brian Okken>as an issue tracker for this.

00:27:23.260 --> 00:27:26.400
<v Brian Okken>And I've gotten a couple so far,

00:27:26.640 --> 00:27:28.700
<v Brian Okken>not very many, but maybe that's a good thing.

00:27:29.420 --> 00:27:32.400
<v Brian Okken>A typo came in and actually it's one that like was,

00:27:32.640 --> 00:27:33.280
<v Brian Okken>I was just missing.

00:27:33.330 --> 00:27:34.340
<v Brian Okken>I was reading all the time.

00:27:34.440 --> 00:27:35.360
<v Brian Okken>And so I appreciate that.

00:27:36.200 --> 00:27:43.000
<v Brian Okken>And then one of the ones was, was that I really appreciate is like discussion of extra topics

00:27:43.100 --> 00:27:43.920
<v Brian Okken>I should build in.

00:27:43.940 --> 00:27:48.880
<v Brian Okken>So I had, one of the things I've done is like release the headings and subheadings

00:27:49.180 --> 00:27:53.400
<v Brian Okken>for different chapters and, and, and different parts of the chapter.

00:27:53.820 --> 00:27:58.320
<v Brian Okken>And I'm hoping in the hopes of that people will go, oh, you gotta make sure you don't

00:27:58.600 --> 00:27:59.720
<v Brian Okken>forget to talk about this.

00:28:00.160 --> 00:28:03.800
<v Brian Okken>And that's what I got from looks like Jonah.

00:28:04.600 --> 00:28:06.920
<v Brian Okken>I'm not going to try to pronounce that, but I'll say Jonah.

00:28:08.280 --> 00:28:14.000
<v Brian Okken>In the chapter on considering considerations for applications for applying Lean TDD,

00:28:14.880 --> 00:28:22.460
<v Brian Okken>talked about not just technical considerations, but what we're really doing to social considerations.

00:28:23.220 --> 00:28:24.380
<v Brian Okken>And I've faced this too.

00:28:24.540 --> 00:28:26.200
<v Brian Okken>I'm like, oh, yeah, I didn't even think about this.

00:28:26.460 --> 00:28:34.400
<v Brian Okken>There's a lot of people just meant like just opposed to doing test-driven development or opposed to doing different kinds of tests for various reasons.

00:28:35.100 --> 00:28:38.880
<v Brian Okken>And I wasn't planning on talking about that, but I think it's very essential.

00:28:39.140 --> 00:28:41.200
<v Brian Okken>I'm glad that I'm getting people's feedback.

00:28:41.780 --> 00:28:42.480
<v Michael Kennedy>Could be the other way.

00:28:42.630 --> 00:28:46.700
<v Michael Kennedy>They only want to do TDD and they want to do integration tests because they're impure.

00:28:47.100 --> 00:28:47.480
<v Michael Kennedy>Yuck.

00:28:47.840 --> 00:28:50.900
<v Michael Kennedy>You know, I mean, there's a whole spectrum of things you probably got to speak to.

00:28:51.240 --> 00:28:51.460
<v Brian Okken>Yeah.

00:28:52.360 --> 00:28:52.800
<v Brian Okken>Go ahead.

00:28:52.880 --> 00:29:08.960
<v Brian Okken>And they even brought up some other things, like we don't have time to test. Testing makes it harder to refactor. Your tests are not compatible with our architecture. I did a release, even though the tests are failing because it's too important to get the code out there. Yeah, these are great things to talk about.

00:29:09.460 --> 00:29:21.900
<v Michael Kennedy>Yeah, for sure. I set up a issue tracker discussion board for the Talk Python in production book too. And it's been pretty active. I really appreciate it. There's a couple of things I could respond to. So if you're waiting on me, I'm forgotten, I'm forgotten.

00:29:21.960 --> 00:29:28.120
<v Michael Kennedy>And I told you that this was a follow-up to the dependency thing, but here's another.

00:29:28.190 --> 00:29:29.320
<v Michael Kennedy>This one's by Bob Belderbus.

00:29:29.330 --> 00:29:32.640
<v Michael Kennedy>I didn't think it was big enough to make its own thing, but check this out.

00:29:32.960 --> 00:29:37.780
<v Michael Kennedy>Bob says, I need to see which packages were pulling in a certain dependency instead of

00:29:38.320 --> 00:29:39.820
<v Michael Kennedy>what packages depend.

00:29:40.140 --> 00:29:45.400
<v Michael Kennedy>So you can actually go and do uv tree and give it a package and say --invert

00:29:45.910 --> 00:29:47.340
<v Michael Kennedy>to answer who depends upon this.

00:29:47.450 --> 00:29:48.220
<v Michael Kennedy>And look at this picture.

00:29:48.560 --> 00:29:49.560
<v Michael Kennedy>I see that's not really helpful.

00:29:50.040 --> 00:29:57.220
<v Michael Kennedy>But you look at it and it actually says six was pulled in by bleach, which was pulled in by Jenga bleach, which was pulled in PyBytes platform.

00:29:57.860 --> 00:29:59.120
<v Michael Kennedy>Also six pulled in Python.

00:29:59.620 --> 00:30:00.780
<v Michael Kennedy>DateUtil, why is that even there?

00:30:00.900 --> 00:30:03.740
<v Michael Kennedy>So it's like a reverse of your depth tree.

00:30:04.480 --> 00:30:10.420
<v Michael Kennedy>So you can focus it on a node and basically filter and restrict it just to the stuff that works with that leaf node, I guess.

00:30:10.740 --> 00:30:11.380
<v Michael Kennedy>So you'd look at it.

00:30:11.640 --> 00:30:11.780
<v Brian Okken>Yeah.

00:30:11.900 --> 00:30:16.360
<v Brian Okken>So if you're thinking about cleaning up your dependencies and say, well, I don't want to pull in six anymore.

00:30:16.540 --> 00:30:21.040
<v Brian Okken>it might not matter because a bunch of your dependencies are already pulling it in.

00:30:21.370 --> 00:30:21.900
<v Brian Okken>Right, exactly.

00:30:22.150 --> 00:30:25.520
<v Michael Kennedy>And so you could also ask the question like, well, do I really need that dependency?

00:30:26.260 --> 00:30:26.380
<v Michael Kennedy>Yeah.

00:30:26.640 --> 00:30:29.060
<v Michael Kennedy>Or could I find something else that would allow me to get rid of this thing,

00:30:29.420 --> 00:30:31.780
<v Michael Kennedy>this lower level dependency that's causing a problem?

00:30:32.060 --> 00:30:33.840
<v Michael Kennedy>You know, that's often a question to try and answer.

00:30:34.180 --> 00:30:34.380
<v Michael Kennedy>All right.

00:30:35.000 --> 00:30:37.380
<v Michael Kennedy>Well, that is it for...

00:30:37.380 --> 00:30:42.580
<v Brian Okken>Well, now I want an extra feature that says, hey, uv, can you tell me which packages

00:30:43.180 --> 00:30:45.860
<v Brian Okken>don't have any transitive, aren't transitive dependencies?

00:30:46.440 --> 00:30:54.020
<v Michael Kennedy>Hmm. Yeah. cool. So, okay. Let's talk a joke. So do you remember Brian last week,

00:30:54.260 --> 00:30:59.360
<v Michael Kennedy>it was like so many things went down. And one of the things that we had, we had AWS go down

00:30:59.960 --> 00:31:04.280
<v Michael Kennedy>two weeks ago and take out a huge chunk of the internet, I think for 14 hours because of DNS,

00:31:04.720 --> 00:31:08.240
<v Michael Kennedy>because of course it was, it was DNS to the database, which was the foundation of all the

00:31:08.260 --> 00:31:13.300
<v Michael Kennedy>other things. And then we had Azure go down in the beginning of the last week. And then was it Friday,

00:31:13.600 --> 00:31:19.240
<v Michael Kennedy>Thursday I don't know GitHub itself went down not the web page but all the git based operations

00:31:19.290 --> 00:31:25.800
<v Michael Kennedy>like git pull git push etc that talked to GitHub over the git CLI and other tools was failing for

00:31:25.940 --> 00:31:32.440
<v Michael Kennedy>hours and so my question or my question my joke is which is a question can GitHub even push fixes

00:31:32.530 --> 00:31:38.360
<v Michael Kennedy>to GitHub when GitHub is down like what do they do how do you fix GitHub if git is surely and I'm

00:31:38.320 --> 00:31:43.780
<v Michael Kennedy>oh my gosh surely there's a lot of ways that you deploy code within github by doing some kind of

00:31:43.940 --> 00:31:48.780
<v Michael Kennedy>git pull or get push with a web hook or something like that might have been a huge portion of the

00:31:48.840 --> 00:31:56.160
<v Brian Okken>problem yeah yeah the fix was probably instantaneously known but you can't roll back

00:31:56.660 --> 00:32:02.080
<v Michael Kennedy>or you know get rollbacks can't do that um exactly they're like how who is going to log in here and

00:32:01.920 --> 00:32:08.380
<v Brian Okken>fix this i cannot fix this oh no i'm curious how they did it then i mean this is this funny but

00:32:08.540 --> 00:32:14.640
<v Michael Kennedy>also it probably was an issue exactly so i thought we might have a um an educational joke this week

00:32:14.800 --> 00:32:20.960
<v Michael Kennedy>can github even push to github when github is down this looks like uh um who is the guy in the

00:32:21.040 --> 00:32:26.880
<v Michael Kennedy>matrix neo who's that actor keanu reeves yeah this looks like a young keanu reeves i'm not sure who

00:32:26.720 --> 00:32:33.700
<v Brian Okken>this actually is but from like bill and ted days yeah exactly whoa man how'd they even fix it

00:32:34.120 --> 00:32:38.420
<v Michael Kennedy>anyway i don't know how they fixed it but when it came back i was very excited that it was back

00:32:38.660 --> 00:32:45.380
<v Brian Okken>awesome all right well uh fun episode and i hope everybody everybody in the u.s or anybody that

00:32:45.580 --> 00:32:50.260
<v Brian Okken>celebrates turkey day outside of the u.s i hope you have a wonderful exgiving and um and everybody

00:32:50.400 --> 00:32:53.979
<v Brian Okken>else hope you have a great week also yeah thanks to you next week bye everyone bye

