WEBVTT

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

00:00:05.060 --> 00:00:09.560
<v Brian Okken>This is episode 461, recorded December 9th, 2025.

00:00:10.180 --> 00:00:11.120
<v Brian Okken>And I am Brian Okken.

00:00:11.300 --> 00:00:12.300
<v Brian Okken>And I am Michael Kennedy.

00:00:12.700 --> 00:00:17.100
<v Brian Okken>And this episode is sponsored by yours truly and Michael.

00:00:17.280 --> 00:00:19.680
<v Brian Okken>So both of us Talk Python Training.

00:00:20.180 --> 00:00:22.060
<v Brian Okken>Always some great stuff.

00:00:22.080 --> 00:00:29.080
<v Brian Okken>I just finished the AI, the recent AI agent course.

00:00:29.340 --> 00:00:29.720
<v Brian Okken>Oh, you did?

00:00:29.820 --> 00:00:36.120
<v Brian Okken>great yeah thank you yeah awesome really enjoyed it uh some great content there and um so but

00:00:36.240 --> 00:00:40.260
<v Brian Okken>there's plenty of other stuff to do there's even a py test course there but if you'd like a really

00:00:40.560 --> 00:00:46.080
<v Brian Okken>complete py test course head on over to python test.com we have uh there's the complete course

00:00:46.320 --> 00:00:52.680
<v Brian Okken>there uh thanks to patreon supporters also there's um a new book out from michael and uh and a book

00:00:52.780 --> 00:00:58.079
<v Brian Okken>that i'm working on so lots of ways you can support us and if you don't if you just want to support us

00:00:58.100 --> 00:00:59.040
<v Brian Okken>by sending us topics.

00:00:59.400 --> 00:01:00.120
<v Brian Okken>We'd like that too.

00:01:00.660 --> 00:01:01.680
<v Brian Okken>You can connect with us.

00:01:02.020 --> 00:01:03.860
<v Brian Okken>There's a contact form on the website

00:01:04.120 --> 00:01:05.280
<v Brian Okken>on pythonbytes.fm

00:01:05.400 --> 00:01:08.200
<v Brian Okken>or you can reach us on Bluesky or Mastodon.

00:01:08.560 --> 00:01:10.180
<v Brian Okken>And if you'd like to, if you're listening,

00:01:10.620 --> 00:01:11.480
<v Brian Okken>we love you.

00:01:11.860 --> 00:01:14.360
<v Brian Okken>But we also would like you to check out

00:01:14.540 --> 00:01:16.280
<v Brian Okken>our video stuff every once in a while.

00:01:16.640 --> 00:01:18.820
<v Brian Okken>Head on over to pythonbytes.fm/live

00:01:18.820 --> 00:01:20.180
<v Brian Okken>and you can be part of the audience

00:01:20.300 --> 00:01:21.480
<v Brian Okken>or just watch it afterwards.

00:01:22.360 --> 00:01:25.319
<v Brian Okken>And finally, please subscribe to our newsletter

00:01:25.340 --> 00:01:29.620
<v Brian Okken>or essentially it's occasionally we send out little news bits,

00:01:29.840 --> 00:01:32.920
<v Brian Okken>but mostly it's the show notes from the show.

00:01:32.980 --> 00:01:36.020
<v Brian Okken>So we send out, after we get it all done,

00:01:36.140 --> 00:01:38.080
<v Brian Okken>we send out a newsletter that has all the links

00:01:38.240 --> 00:01:40.180
<v Brian Okken>so you don't have to take notes while you're listening.

00:01:40.520 --> 00:01:42.240
<v Brian Okken>Now for our first topic, Michael.

00:01:42.480 --> 00:01:45.660
<v Michael Kennedy>Our first topic is going to be a tour of peps,

00:01:45.880 --> 00:01:49.340
<v Michael Kennedy>a brand new PEP in a PEP that we spent a fair amount of time talking about.

00:01:49.660 --> 00:01:54.460
<v Michael Kennedy>The first one is PEP 798, Unpacking in Comprehensions.

00:01:55.280 --> 00:01:58.340
<v Michael Kennedy>So this one is a little bit funky.

00:01:58.400 --> 00:02:01.980
<v Michael Kennedy>It's currently in draft stage targeting Python 3.15.

00:02:02.480 --> 00:02:07.900
<v Michael Kennedy>It's pretty minor, but I think it brings some consistency to it.

00:02:07.900 --> 00:02:09.759
<v Michael Kennedy>So I linked to the conversation here.

00:02:09.759 --> 00:02:14.040
<v Michael Kennedy>And the idea is right now, if I have a function that

00:02:14.220 --> 00:02:17.300
<v Michael Kennedy>takes an arbitrary number of positional keywords,

00:02:17.880 --> 00:02:20.360
<v Michael Kennedy>you would say star args, right?

00:02:20.500 --> 00:02:25.240
<v Michael Kennedy>Star args, star kwa args is like a pretty common theme

00:02:25.260 --> 00:02:37.180
<v Michael Kennedy>So if I had something that said star args, and I wanted to push a tuple of values as those positional parameters, I would say star tuple in the function call.

00:02:37.500 --> 00:02:41.060
<v Michael Kennedy>Kind of like you say star star for a dictionary to say keyword arguments, right?

00:02:41.230 --> 00:02:52.200
<v Michael Kennedy>So the idea here is that that works for function calls, but it doesn't work for comprehensions, list comprehensions, set comprehensions, and so on, if you have an iterable.

00:02:52.500 --> 00:02:56.480
<v Michael Kennedy>Right now what we have, and this is super confusing to me, I always get the order wrong,

00:02:56.570 --> 00:03:04.020
<v Michael Kennedy>or at least I'm always uncertain of the order, is I can say, you know, basically X for X in Y,

00:03:04.920 --> 00:03:11.300
<v Michael Kennedy>Y for Y in thing, if I've got a set of lists or intervals and I want to turn them into

00:03:11.830 --> 00:03:15.440
<v Michael Kennedy>like one big list as a comprehension, you can basically do like a double comprehension

00:03:15.980 --> 00:03:21.420
<v Michael Kennedy>in one thing. And I'm always like, which one is the collection and which one is the item,

00:03:21.640 --> 00:03:24.740
<v Michael Kennedy>you know, so this kind of solves that.

00:03:24.960 --> 00:03:27.680
<v Michael Kennedy>It says you can just say in the comprehension,

00:03:27.780 --> 00:03:32.260
<v Michael Kennedy>you say star iterable for iterable in some list of iterables.

00:03:32.620 --> 00:03:33.920
<v Michael Kennedy>And it makes it real simple, right?

00:03:34.040 --> 00:03:37.860
<v Michael Kennedy>So you can do that for, pulled up official pep.

00:03:37.980 --> 00:03:41.800
<v Michael Kennedy>You can do it for list comprehensions, set comprehensions,

00:03:42.340 --> 00:03:43.460
<v Michael Kennedy>dictionary comprehensions.

00:03:43.540 --> 00:03:47.260
<v Michael Kennedy>If you have a list, if you have an iterable of dictionaries,

00:03:47.340 --> 00:03:48.840
<v Michael Kennedy>you can create a dictionary comprehension.

00:03:49.340 --> 00:03:50.720
<v Michael Kennedy>And you can do it for generators.

00:03:50.800 --> 00:03:53.720
<v Michael Kennedy>if your generator generates iterables.

00:03:54.220 --> 00:03:54.560
<v Michael Kennedy>Does that make sense?

00:03:55.180 --> 00:03:55.320
<v Brian Okken>Yeah.

00:03:55.800 --> 00:03:58.040
<v Michael Kennedy>So that's pretty much it.

00:03:58.040 --> 00:03:58.440
<v Michael Kennedy>What do you think?

00:03:59.360 --> 00:03:59.700
<v Brian Okken>That's cool.

00:03:59.760 --> 00:04:01.340
<v Brian Okken>So that's not something you do now?

00:04:01.540 --> 00:04:02.360
<v Brian Okken>This is a proposal?

00:04:02.640 --> 00:04:03.300
<v Brian Okken>Is that right?

00:04:03.300 --> 00:04:05.660
<v Michael Kennedy>Yes, this is a draft for 3.15.

00:04:06.080 --> 00:04:06.300
<v Michael Kennedy>Okay.

00:04:06.800 --> 00:04:08.460
<v Michael Kennedy>And just shout out for a little bit of credit.

00:04:08.760 --> 00:04:11.200
<v Michael Kennedy>This is Adam Hartz and Eric Demain

00:04:12.040 --> 00:04:13.680
<v Michael Kennedy>for the people proposing it.

00:04:13.760 --> 00:04:16.900
<v Michael Kennedy>And the sponsor is Yelda Zilastra.

00:04:17.180 --> 00:04:18.579
<v Michael Kennedy>Sorry, if I messed that up,

00:04:18.640 --> 00:04:19.840
<v Michael Kennedy>I gave it my best shot, folks.

00:04:20.420 --> 00:04:23.060
<v Michael Kennedy>So anyway, that's my main topic here for this first one

00:04:23.260 --> 00:04:26.140
<v Michael Kennedy>is this unpacking in comprehensions.

00:04:26.360 --> 00:04:28.920
<v Michael Kennedy>We've had unpacking in other places, into variables.

00:04:29.180 --> 00:04:30.820
<v Michael Kennedy>We've had unpacking into function calls.

00:04:30.960 --> 00:04:32.260
<v Michael Kennedy>We have not had them in comprehensions.

00:04:32.370 --> 00:04:34.480
<v Michael Kennedy>And they've honestly, this double comprehension,

00:04:34.960 --> 00:04:36.240
<v Michael Kennedy>like double layered comprehension thing

00:04:36.270 --> 00:04:37.960
<v Michael Kennedy>has always been complicated.

00:04:38.460 --> 00:04:39.440
<v Michael Kennedy>And so I'm here for it.

00:04:39.620 --> 00:04:41.620
<v Michael Kennedy>I mean, it does add another thing to language

00:04:41.800 --> 00:04:43.480
<v Michael Kennedy>and everything you add to a language

00:04:43.820 --> 00:04:44.980
<v Michael Kennedy>just makes it more complicated.

00:04:45.820 --> 00:04:48.720
<v Michael Kennedy>But in this case, I think it's well worth it.

00:04:49.040 --> 00:04:50.260
<v Michael Kennedy>Now, go ahead.

00:04:50.460 --> 00:04:59.940
<v Brian Okken>Oh, I just wanted to say, speaking of the unpacking, use the star or asterisk, but one of my favorite names for that character is splat.

00:05:00.500 --> 00:05:00.860
<v Brian Okken>Splat.

00:05:01.180 --> 00:05:01.440
<v Brian Okken>Splat.

00:05:01.660 --> 00:05:03.600
<v Michael Kennedy>Let's call them splatted comprehensions.

00:05:04.060 --> 00:05:04.380
<v Michael Kennedy>Here, hold on.

00:05:04.830 --> 00:05:06.700
<v Michael Kennedy>I'll just edit this and we'll fix this real quick.

00:05:07.700 --> 00:05:12.360
<v Michael Kennedy>I'm going to change the, you know what, my screen is too small.

00:05:12.580 --> 00:05:13.680
<v Michael Kennedy>I was going to edit the text, right?

00:05:13.780 --> 00:05:15.080
<v Michael Kennedy>Okay, so that's all good.

00:05:15.160 --> 00:05:19.440
<v Michael Kennedy>Now the next one is just a really quick follow-up on a PEP as well.

00:05:19.840 --> 00:05:21.680
<v Michael Kennedy>Before we move off of Focus on Me.

00:05:22.040 --> 00:05:26.280
<v Michael Kennedy>Remember how excited you were and I was about explicit lazy imports?

00:05:26.380 --> 00:05:28.260
<v Michael Kennedy>As in lazy...

00:05:29.199 --> 00:05:30.540
<v Michael Kennedy>Are they going to take it out?

00:05:30.840 --> 00:05:30.960
<v Michael Kennedy>No.

00:05:31.680 --> 00:05:34.680
<v Michael Kennedy>Dear Pep 810 authors, Barry Warsaw writes,

00:05:35.200 --> 00:05:41.900
<v Michael Kennedy>this steering council is happy, happy to unanimously accept Pep 810 explicit lazy imports.

00:05:42.040 --> 00:05:42.680
<v Michael Kennedy>Congratulations.

00:05:43.320 --> 00:05:44.520
<v Michael Kennedy>You now have a job to implement.

00:05:44.620 --> 00:05:45.960
<v Michael Kennedy>And it's, yeah.

00:05:46.400 --> 00:05:48.600
<v Michael Kennedy>The same is true for all the other alternative keywords

00:05:48.800 --> 00:05:49.620
<v Michael Kennedy>we come up with.

00:05:49.820 --> 00:05:51.060
<v Michael Kennedy>So lazy it is.

00:05:51.600 --> 00:05:51.860
<v Michael Kennedy>I know.

00:05:52.120 --> 00:05:53.220
<v Michael Kennedy>That's anyway, a little bit of background

00:05:53.380 --> 00:05:55.700
<v Michael Kennedy>on some of the thinking the steering council put out there.

00:05:55.900 --> 00:05:57.780
<v Michael Kennedy>But yeah, unanimously and happy.

00:05:58.180 --> 00:05:58.480
<v Brian Okken>Yay.

00:05:59.000 --> 00:05:59.060
<v Michael Kennedy>Good.

00:05:59.340 --> 00:06:00.700
<v Michael Kennedy>Yeah, that's pretty good.

00:06:00.900 --> 00:06:02.120
<v Michael Kennedy>So happy to see that.

00:06:02.200 --> 00:06:03.960
<v Michael Kennedy>And by the way, just a little shout out

00:06:04.260 --> 00:06:05.120
<v Michael Kennedy>for the live stream folks.

00:06:05.520 --> 00:06:07.880
<v Michael Kennedy>I'm going to have Barry Warsaw and a bunch of other folks

00:06:08.420 --> 00:06:10.980
<v Michael Kennedy>on to do a year in review three hours,

00:06:11.680 --> 00:06:13.880
<v Michael Kennedy>two hours and 40 minutes from now on Talk Python.

00:06:14.520 --> 00:06:16.680
<v Michael Kennedy>So that's going to be fun.

00:06:16.780 --> 00:06:19.460
<v Michael Kennedy>We'll hear from Barry over there, but probably not about the path.

00:06:19.680 --> 00:06:20.260
<v Michael Kennedy>All right, over to you, Brian.

00:06:21.240 --> 00:06:22.160
<v Brian Okken>What am I talking about?

00:06:22.360 --> 00:06:29.160
<v Brian Okken>I'm going to talk about another new release or an upcoming release, Pandas 3.0.

00:06:29.520 --> 00:06:33.480
<v Brian Okken>So the Pandas 3.0.0, so 3.0.0.

00:06:33.780 --> 00:06:38.140
<v Brian Okken>There's a release candidate zero that's been out since sometime last week.

00:06:40.060 --> 00:06:44.100
<v Brian Okken>And then apparently there's going to be an official 3.0 released in a few weeks.

00:06:44.640 --> 00:06:48.520
<v Brian Okken>but that was a week ago so maybe a couple weeks from now not sure um so what do we got in here

00:06:48.680 --> 00:06:54.140
<v Brian Okken>i'm pretty excited about this actually uh we've got um what's new there's a there's a dedicated

00:06:54.440 --> 00:07:00.980
<v Brian Okken>string data type by default and this is just kind of great so if uh normally in things that with

00:07:01.200 --> 00:07:05.820
<v Brian Okken>strings in them they would show up as objects but clearly they're strings so there's a new string

00:07:06.020 --> 00:07:12.879
<v Brian Okken>type um and it does change things a bit um if you have any the any missing things it'll be an uh

00:07:13.080 --> 00:07:16.400
<v Brian Okken>N-A-N, sentinel, to say that there's nothing there.

00:07:17.240 --> 00:07:21.540
<v Brian Okken>What's great about this is once you have this str type, D type,

00:07:22.300 --> 00:07:26.160
<v Brian Okken>or str D type, you can only put strings or nans in it.

00:07:26.280 --> 00:07:27.980
<v Brian Okken>There's nothing else allowed.

00:07:29.260 --> 00:07:30.880
<v Brian Okken>So nothing weird shows up.

00:07:31.140 --> 00:07:32.460
<v Brian Okken>It's not just a generic object.

00:07:33.160 --> 00:07:35.200
<v Brian Okken>There's a lot of other implications around this.

00:07:36.170 --> 00:07:40.120
<v Brian Okken>The str can only hold strings in the sentinel, of course.

00:07:40.220 --> 00:07:43.780
<v Brian Okken>The missing values are sentinel inferred by default for string data.

00:07:45.580 --> 00:07:50.960
<v Brian Okken>Anyway, check out the PEP 14 to get a little more information.

00:07:51.340 --> 00:07:54.520
<v Brian Okken>There will, there's other implications around this, but I think it's a really good thing.

00:07:54.880 --> 00:07:59.020
<v Brian Okken>Copy on write also is kind of a really exciting thing that hopefully nobody will really notice.

00:07:59.420 --> 00:08:08.200
<v Brian Okken>But the idea is really anything that results in an indexing operation will return essentially a copy of things.

00:08:08.520 --> 00:08:10.600
<v Brian Okken>So you don't, there's not, or not, not a copy.

00:08:10.720 --> 00:08:11.300
<v Brian Okken>It'll be a reference.

00:08:12.100 --> 00:08:16.420
<v Brian Okken>It's, and it only, only makes a copy of actually modify something.

00:08:16.780 --> 00:08:20.980
<v Brian Okken>So, so pandas will keep track of whether or not you've changed it.

00:08:20.980 --> 00:08:23.300
<v Brian Okken>And if you haven't changed it, it's just a copy of the data there.

00:08:23.420 --> 00:08:26.220
<v Brian Okken>This will say, this should save a lot of time and space.

00:08:26.610 --> 00:08:29.760
<v Michael Kennedy>So I think that's going to save a ton of, especially memory.

00:08:30.260 --> 00:08:35.060
<v Michael Kennedy>Because if I remember correctly, I'm not a pandas expert by any stretch of the imagination.

00:08:35.180 --> 00:08:42.340
<v Michael Kennedy>But when you call operations like filter operations or other transform operations, it doesn't in place modify it.

00:08:42.460 --> 00:08:43.580
<v Michael Kennedy>It returns a new data frame.

00:08:43.860 --> 00:08:50.440
<v Michael Kennedy>Like if I add a column to a data frame with the operation, I get an entire copy of that data frame plus the column.

00:08:50.700 --> 00:08:51.660
<v Michael Kennedy>You know, one of the new column.

00:08:52.020 --> 00:08:57.420
<v Michael Kennedy>If you've got five million rows loaded and you call those five or ten times, like you're all of a sudden, it's piling up fast.

00:08:57.740 --> 00:08:57.920
<v Brian Okken>Yeah.

00:08:58.140 --> 00:09:02.440
<v Brian Okken>And it says the main goal is to change the user API to be more consistent and predictable.

00:09:02.660 --> 00:09:06.280
<v Brian Okken>And I think this is right because, I mean, we're doing like matrix operations and stuff,

00:09:06.620 --> 00:09:11.220
<v Brian Okken>and we'd really like it to be kind of like math where you don't really care about the

00:09:12.500 --> 00:09:14.280
<v Brian Okken>size or timing implications.

00:09:14.600 --> 00:09:15.900
<v Brian Okken>You're just, this is what I want to do.

00:09:16.460 --> 00:09:20.200
<v Brian Okken>And having that be more consistent and hidden behind the scenes, I think it's going to be

00:09:20.340 --> 00:09:20.460
<v Brian Okken>great.

00:09:20.720 --> 00:09:22.660
<v Brian Okken>It's going to make this a lot easier to learn.

00:09:23.300 --> 00:09:25.160
<v Brian Okken>They're cleaning up a lot of the API and stuff.

00:09:25.600 --> 00:09:26.440
<v Brian Okken>It's really cool.

00:09:27.120 --> 00:09:30.180
<v Brian Okken>We had covered this in one of the other episodes that was coming.

00:09:30.620 --> 00:09:37.000
<v Brian Okken>PD call syntax can now be used in data frame assign and location.

00:09:37.500 --> 00:09:40.320
<v Brian Okken>And this idea is that basically you could just say,

00:09:40.570 --> 00:09:44.600
<v Brian Okken>I want to assign a new column with the addition of like two other columns or something,

00:09:44.690 --> 00:09:45.520
<v Brian Okken>or some operation.

00:09:45.940 --> 00:09:48.300
<v Brian Okken>And it just does it right there.

00:09:48.640 --> 00:09:51.480
<v Brian Okken>Like instead of having to do a lambda expression inside,

00:09:51.550 --> 00:09:52.760
<v Brian Okken>you can just do the expression.

00:09:52.890 --> 00:09:54.580
<v Brian Okken>It's really kind of a great syntax.

00:09:55.020 --> 00:09:58.500
<v Brian Okken>We've got a copy of the syntax in the show notes, but that's pretty great.

00:09:58.700 --> 00:10:06.780
<v Brian Okken>Some changes to deprecation policy, probably because of some of these changes that they're doing a three-stage deprecation thing.

00:10:07.730 --> 00:10:08.800
<v Brian Okken>But I think this is good.

00:10:08.810 --> 00:10:12.560
<v Brian Okken>I think that basically open source projects are being used more.

00:10:12.810 --> 00:10:20.360
<v Brian Okken>The ones that they have to think about this, how to keep track, keep it fun to maintain, but also moving with the times.

00:10:20.700 --> 00:10:21.700
<v Brian Okken>And I think these are good calls.

00:10:22.360 --> 00:10:24.580
<v Brian Okken>A bunch of other enhancements as well, so check those out.

00:10:24.860 --> 00:10:26.880
<v Brian Okken>But I think this is a really good direction.

00:10:26.960 --> 00:10:29.240
<v Brian Okken>and I can't wait to see 3.0 pandas come out.

00:10:29.540 --> 00:10:29.920
<v Brian Okken>This will be great.

00:10:30.220 --> 00:10:31.220
<v Michael Kennedy>Yeah, that's pretty exciting.

00:10:31.340 --> 00:10:32.220
<v Michael Kennedy>That's a pretty major change.

00:10:33.640 --> 00:10:34.060
<v Michael Kennedy>All right.

00:10:34.920 --> 00:10:35.460
<v Michael Kennedy>What's up next?

00:10:35.840 --> 00:10:37.520
<v Michael Kennedy>This episode has typos in it, Brian.

00:10:37.900 --> 00:10:38.320
<v Michael Kennedy>Oh, no.

00:10:38.860 --> 00:10:39.480
<v Michael Kennedy>I'll try to fix it.

00:10:39.780 --> 00:10:40.120
<v Michael Kennedy>I know.

00:10:41.100 --> 00:10:43.140
<v Michael Kennedy>Well, remember I spoke about code spell,

00:10:43.950 --> 00:10:44.980
<v Michael Kennedy>all one word, code spell,

00:10:45.580 --> 00:10:47.920
<v Michael Kennedy>and it was a misspelling finder,

00:10:48.400 --> 00:10:50.180
<v Michael Kennedy>not a spell checker, right?

00:10:50.360 --> 00:10:51.640
<v Michael Kennedy>The spell checker looks for words

00:10:51.820 --> 00:10:53.320
<v Michael Kennedy>that it knows are good and says,

00:10:53.380 --> 00:10:54.120
<v Michael Kennedy>I don't know that word.

00:10:54.190 --> 00:10:55.060
<v Michael Kennedy>That must be misspelled.

00:10:55.420 --> 00:10:58.700
<v Michael Kennedy>In programming, obviously, there's all these symbols and all sorts of stuff.

00:10:59.220 --> 00:11:05.440
<v Michael Kennedy>One of the things that drives me crazy is when my editor suggests that a library that I'm importing is misspelled,

00:11:05.740 --> 00:11:07.860
<v Michael Kennedy>but it's the library's name correctly.

00:11:08.000 --> 00:11:10.600
<v Michael Kennedy>I'm like, hmm, well, I can't write it any other way.

00:11:10.720 --> 00:11:11.600
<v Michael Kennedy>This is the only way it works.

00:11:11.780 --> 00:11:16.460
<v Michael Kennedy>I'm sorry, spellchecker, but do I really got to go through and tell you that this is the name of the library I'm using?

00:11:16.840 --> 00:11:17.680
<v Michael Kennedy>Yes, apparently I do.

00:11:18.320 --> 00:11:27.980
<v Michael Kennedy>So this like code spell, this thing called typos, also looks for known misspellings like ADN for a common misspelling of and and so on.

00:11:28.240 --> 00:11:28.620
<v Michael Kennedy>Super good.

00:11:28.980 --> 00:11:29.960
<v Michael Kennedy>Why are we back?

00:11:30.220 --> 00:11:36.620
<v Michael Kennedy>Well, Sky Cosco wrote and said, code spell is cool, but you should check out typos.

00:11:36.780 --> 00:11:39.620
<v Michael Kennedy>So typos, I believe it is written in Rust.

00:11:39.780 --> 00:11:41.660
<v Michael Kennedy>Yes, 99.9%.

00:11:41.780 --> 00:11:42.720
<v Michael Kennedy>That's three nines Rust.

00:11:43.040 --> 00:11:43.400
<v Michael Kennedy>Pretty good.

00:11:43.700 --> 00:11:45.740
<v Michael Kennedy>And 0.0% Python, but it's still mentioned.

00:11:45.960 --> 00:11:49.980
<v Michael Kennedy>So it must be less than one-tenth of 1%.

00:11:50.080 --> 00:11:52.520
<v Michael Kennedy>But it's a little more full-featured for people that like this.

00:11:52.700 --> 00:11:57.360
<v Michael Kennedy>So, for example, it has a GitHub action that you could just put into all of your PRs.

00:11:57.580 --> 00:11:58.600
<v Michael Kennedy>That's kind of cool, if you want.

00:11:58.760 --> 00:12:01.780
<v Michael Kennedy>It's like a gated thing for PRs and commits and so on.

00:12:02.020 --> 00:12:04.660
<v Michael Kennedy>But the best thing about it, I guess two things.

00:12:05.100 --> 00:12:12.040
<v Michael Kennedy>One is it uses the concrete syntax tree rather than actually just searching text.

00:12:12.540 --> 00:12:17.160
<v Michael Kennedy>So what it can do is it can find partial bits of words that are misspelled.

00:12:17.520 --> 00:12:20.980
<v Michael Kennedy>Maybe this is actually not related to that, but it does find partial misspellings.

00:12:21.420 --> 00:12:27.000
<v Michael Kennedy>So for example, if you write connecton string instead of connection string with snake casing,

00:12:27.490 --> 00:12:28.800
<v Michael Kennedy>whatever, it says, hey, guess what?

00:12:28.830 --> 00:12:33.320
<v Michael Kennedy>The word connection and connection underscore string without the I is a misspell.

00:12:33.400 --> 00:12:38.360
<v Michael Kennedy>Maybe you should change, you know, connecton to connection or connector or whatever.

00:12:38.860 --> 00:12:40.160
<v Michael Kennedy>And it gives you a nice little UI for that.

00:12:40.430 --> 00:12:41.020
<v Michael Kennedy>So that's one.

00:12:41.270 --> 00:12:41.920
<v Michael Kennedy>I really like that.

00:12:41.960 --> 00:12:48.520
<v Brian Okken>But like that's super cool that it can detect misspellings within, you know, snake case words.

00:12:48.830 --> 00:12:50.900
<v Michael Kennedy>So, yeah, yeah, this is a it's a big improvement.

00:12:51.220 --> 00:12:53.680
<v Michael Kennedy>And PyCharm does this as well, by the way, which is really nice.

00:12:53.710 --> 00:12:58.140
<v Michael Kennedy>But I believe PyCharm is a built checker, not a misspelling finder or whatever.

00:12:58.880 --> 00:12:59.280
<v Michael Kennedy>Pretty sure.

00:12:59.600 --> 00:13:01.680
<v Michael Kennedy>Anyway, this is really nice that it does this.

00:13:01.960 --> 00:13:05.660
<v Michael Kennedy>The other thing that's super cool, and this is why Sky wrote to us,

00:13:06.060 --> 00:13:12.100
<v Michael Kennedy>is it actually has a VS Code in Friends extension in language server.

00:13:12.520 --> 00:13:16.600
<v Michael Kennedy>So what you can do is basically install this as an extension in VS Code

00:13:16.820 --> 00:13:22.320
<v Michael Kennedy>or Cursor or Google Antigravity or, you know, you name all the others, right?

00:13:22.820 --> 00:13:25.260
<v Michael Kennedy>Because it's also in the OpenVSX registry.

00:13:25.620 --> 00:13:26.380
<v Michael Kennedy>So you can install that there.

00:13:26.420 --> 00:13:29.639
<v Michael Kennedy>And then just as you're writing code, you get little squigglies

00:13:29.740 --> 00:13:32.220
<v Michael Kennedy>and you hit get alt enter actions to fix it.

00:13:32.460 --> 00:13:33.920
<v Michael Kennedy>So you don't even have to run the client

00:13:34.020 --> 00:13:35.160
<v Michael Kennedy>or the GitHub thing and so on,

00:13:35.420 --> 00:13:38.220
<v Michael Kennedy>which the code spell has no editor integration.

00:13:38.760 --> 00:13:40.720
<v Michael Kennedy>So it's really the fact that this is like that,

00:13:41.000 --> 00:13:43.440
<v Michael Kennedy>a little better, runs in editors.

00:13:43.900 --> 00:13:44.320
<v Brian Okken>That's cool.

00:13:44.600 --> 00:13:44.720
<v Brian Okken>Yeah.

00:13:44.980 --> 00:13:46.280
<v Brian Okken>Actually, I don't remember the last time

00:13:46.280 --> 00:13:48.600
<v Brian Okken>I actually ran a spell checker independently.

00:13:49.000 --> 00:13:51.580
<v Brian Okken>I just rely on those in-editor things.

00:13:52.180 --> 00:13:52.660
<v Brian Okken>So do I.

00:13:53.220 --> 00:13:53.680
<v Michael Kennedy>So do I.

00:13:53.800 --> 00:13:57.940
<v Michael Kennedy>So yeah, it's also got LSB for other things, I guess.

00:13:58.600 --> 00:14:03.960
<v Michael Kennedy>Yeah, that means you can even use it in NeoVim or Vim or Zed or whatever, right?

00:14:04.030 --> 00:14:06.080
<v Michael Kennedy>So it's not just even the extensions.

00:14:06.660 --> 00:14:09.000
<v Michael Kennedy>It's actually because the LSP even goes farther than that.

00:14:09.240 --> 00:14:09.420
<v Michael Kennedy>Cool.

00:14:09.720 --> 00:14:09.800
<v Michael Kennedy>Yeah.

00:14:10.120 --> 00:14:13.700
<v Michael Kennedy>Anyway, thank you, Sky, for the follow-up and good suggestion.

00:14:14.020 --> 00:14:14.380
<v Brian Okken>All right.

00:14:15.280 --> 00:14:18.440
<v Brian Okken>Apparently, I'm missing having a testing podcast.

00:14:18.960 --> 00:14:23.780
<v Brian Okken>So I've got two topics that I'd like to talk about, a couple of testing topics.

00:14:24.520 --> 00:14:25.380
<v Brian Okken>First one came in.

00:14:25.560 --> 00:14:26.540
<v Brian Okken>It's called Slowlify.

00:14:26.880 --> 00:14:27.960
<v Brian Okken>It came in from Brian Skin.

00:14:28.260 --> 00:14:32.880
<v Brian Okken>So thank you, Brian, for sending in this idea.

00:14:33.540 --> 00:14:35.540
<v Brian Okken>So here's an interesting idea.

00:14:35.640 --> 00:14:42.940
<v Brian Okken>So this is a project to simulate overloaded, slow, resource-constrained machines.

00:14:43.600 --> 00:14:47.720
<v Brian Okken>So basically to make your tests flakier or something.

00:14:48.120 --> 00:14:49.120
<v Brian Okken>Nice flaky tests.

00:14:49.900 --> 00:14:55.640
<v Brian Okken>But the idea around it is a test is working fine locally,

00:14:55.940 --> 00:14:58.900
<v Brian Okken>but you throw it up in CI and it fails for some reason.

00:14:59.300 --> 00:15:05.340
<v Brian Okken>And it might be because you've got a CI image that is more constrained.

00:15:05.680 --> 00:15:10.820
<v Brian Okken>So this allows you to do things like muck with how much memory is around

00:15:11.280 --> 00:15:14.360
<v Brian Okken>and how many CPUs are available and stuff.

00:15:14.600 --> 00:15:21.880
<v Brian Okken>It requires you to run it on a Linux machine with Cgroups V2 around

00:15:22.180 --> 00:15:24.940
<v Brian Okken>because that's how it throttles the CPU and memory and stuff.

00:15:25.360 --> 00:15:28.500
<v Brian Okken>But it shouldn't be hard to come by, hopefully.

00:15:29.080 --> 00:15:34.480
<v Brian Okken>And yeah, then you can check to muck with things to find out,

00:15:35.100 --> 00:15:38.260
<v Brian Okken>to try to simulate locally a failure that's happening in CI.

00:15:38.660 --> 00:15:39.520
<v Brian Okken>So really nice there.

00:15:40.500 --> 00:15:44.280
<v Brian Okken>The other topic I'd like to talk about testing-related is,

00:15:45.250 --> 00:15:46.660
<v Brian Okken>this comes from Ned Batchelder.

00:15:47.380 --> 00:15:51.320
<v Brian Okken>Actually, it's his article, Why Your Mock Breaks Later.

00:15:52.339 --> 00:15:55.200
<v Brian Okken>And actually, I think it should be stronger than this.

00:15:55.240 --> 00:16:03.460
<v Brian Okken>basically don't the don'ts and do's of uh mocking and the gist of it is uh overly aggressive

00:16:03.720 --> 00:16:09.200
<v Brian Okken>mocks can can work fine at first but then break later recently a lot of people were doing uh

00:16:09.640 --> 00:16:15.720
<v Brian Okken>all this pop down if you've like let's say you're reading a file and you want you want to pat you

00:16:16.000 --> 00:16:19.780
<v Brian Okken>when the file gets opened you don't really actually want to file the muck with the file you

00:16:19.780 --> 00:16:25.660
<v Brian Okken>want to be able to to mock that or patch it so one of the things that some people do is to patch the

00:16:25.820 --> 00:16:32.240
<v Brian Okken>open function and one of the ways people do it is patching built-ins open this is not how you want

00:16:32.240 --> 00:16:38.040
<v Brian Okken>to do it this is the don't do this version and uh let's just zoom in a bit don't do the built-ins

00:16:38.160 --> 00:16:45.759
<v Brian Okken>open because it it like patches everything and it's causing problems in uh it was causing problems

00:16:45.800 --> 00:16:51.420
<v Brian Okken>of coverage because coverage also wants to open something and you're basically patching open for

00:16:51.760 --> 00:16:56.440
<v Brian Okken>everything in your app in your program including coverage when it's running on top of it so you

00:16:56.560 --> 00:17:02.420
<v Brian Okken>don't want to do that you only want to patch where where you are so the proper way is wherever

00:17:02.840 --> 00:17:09.000
<v Brian Okken>like if you're in a the example is you've got a user um file you want to patch right there in my

00:17:08.959 --> 00:17:12.680
<v Brian Okken>product.user, the dot following of where it is.

00:17:13.020 --> 00:17:13.860
<v Brian Okken>Exactly where it is.

00:17:15.220 --> 00:17:16.620
<v Brian Okken>That's the gist of it is,

00:17:17.780 --> 00:17:20.380
<v Brian Okken>don't mock the thing you're importing

00:17:20.990 --> 00:17:22.500
<v Brian Okken>after you've imported it, mock it there.

00:17:22.900 --> 00:17:24.360
<v Brian Okken>And it's a good lesson.

00:17:24.709 --> 00:17:25.740
<v Brian Okken>I didn't think that this,

00:17:26.040 --> 00:17:29.620
<v Brian Okken>I thought that was fairly widely known,

00:17:29.810 --> 00:17:31.560
<v Brian Okken>so I didn't realize it was an issue.

00:17:31.870 --> 00:17:36.000
<v Brian Okken>He went ahead and did a search for Python.

00:17:37.260 --> 00:17:49.660
<v Brian Okken>In GitHub, you can search for built-ins open with tests in there and patches and stuff, either patches or whatever, monkey patching or patching or mock patching.

00:17:49.940 --> 00:17:54.560
<v Brian Okken>Found 44,000 files that were doing the bad one within GitHub.

00:17:54.860 --> 00:17:57.460
<v Brian Okken>So this is all naughty.

00:17:57.560 --> 00:18:07.500
<v Michael Kennedy>I don't know what kind of GitHub badge you get for 44,000 PRs getting accepted, but Ned's got himself a real opportunity here to get a 100% sort of badge.

00:18:07.500 --> 00:18:09.700
<v Brian Okken>I don't think he wants to fix them all, but yeah.

00:18:10.300 --> 00:18:12.660
<v Michael Kennedy>No, that's an interesting way, an interesting metric.

00:18:12.980 --> 00:18:20.940
<v Brian Okken>Yeah, and actually at the end of the article, also I'd like to point out, he talks about some mocking practices.

00:18:21.520 --> 00:18:26.680
<v Brian Okken>Make sure you use autospec equals true to make sure that your mocks strictly behave like the original.

00:18:27.180 --> 00:18:29.620
<v Brian Okken>I wholeheartedly agree with that.

00:18:30.220 --> 00:18:32.280
<v Brian Okken>Make assertions about how your mock is called.

00:18:32.440 --> 00:18:35.940
<v Brian Okken>Actually, the rest of this is stuff that I actually want to go check out

00:18:36.100 --> 00:18:39.120
<v Brian Okken>because I do remember this functional core imperative shell talk

00:18:40.040 --> 00:18:42.040
<v Brian Okken>and some of these other things, dependency injection.

00:18:42.280 --> 00:18:45.020
<v Brian Okken>I'm not sure if I agree with all of Ned's stuff, but that's all right.

00:18:45.440 --> 00:18:47.920
<v Brian Okken>Some other interesting things to read about with mocking.

00:18:48.340 --> 00:18:52.240
<v Brian Okken>And I imagine he knows more than I do because I don't usually mock.

00:18:52.460 --> 00:18:53.380
<v Brian Okken>I don't mock very much.

00:18:53.740 --> 00:18:55.020
<v Brian Okken>It's not very nice to do, honestly.

00:18:55.380 --> 00:18:56.260
<v Brian Okken>It's not very nice.

00:18:56.840 --> 00:18:59.880
<v Michael Kennedy>So yeah, but sometimes it's necessary.

00:19:00.180 --> 00:19:01.200
<v Brian Okken>And sometimes it's necessary.

00:19:01.540 --> 00:19:02.260
<v Brian Okken>You know what is nice, though?

00:19:02.420 --> 00:19:02.700
<v Brian Okken>Extras.

00:19:03.180 --> 00:19:03.860
<v Brian Okken>Extras, yeah.

00:19:04.200 --> 00:19:05.320
<v Brian Okken>Yeah, I do have extras.

00:19:05.500 --> 00:19:06.580
<v Brian Okken>Should I go ahead and run through them?

00:19:07.220 --> 00:19:07.400
<v Brian Okken>All right.

00:19:07.680 --> 00:19:09.420
<v Brian Okken>So I've already got my stuff up.

00:19:09.640 --> 00:19:10.100
<v Brian Okken>Let's go.

00:19:10.760 --> 00:19:15.300
<v Brian Okken>This is a great, there was a great mini documentary of FastAPI,

00:19:16.540 --> 00:19:18.960
<v Brian Okken>The Rise and Fall, Rise and Rise, not The Rise and Fall,

00:19:19.060 --> 00:19:22.880
<v Brian Okken>The Rise and Rise of FastAPI with Sebastian Ramirez.

00:19:23.880 --> 00:19:25.960
<v Brian Okken>And it's like an eight-minute video.

00:19:26.320 --> 00:19:28.800
<v Brian Okken>It's a really fun video of him talking about it.

00:19:29.280 --> 00:19:32.200
<v Brian Okken>He's such a genuine, nice dude also.

00:19:33.100 --> 00:19:34.460
<v Brian Okken>Yeah, he really is.

00:19:35.360 --> 00:19:40.020
<v Brian Okken>I am still writing, Lean TDD, the e-book in progress.

00:19:41.200 --> 00:19:42.880
<v Brian Okken>You go to the table of content.

00:19:43.100 --> 00:19:44.320
<v Brian Okken>Oh, I made a couple of changes.

00:19:44.780 --> 00:19:47.760
<v Brian Okken>So somebody requested that not only do I,

00:19:48.080 --> 00:19:50.780
<v Brian Okken>when I release a new chapter to release the full thing,

00:19:51.240 --> 00:19:52.620
<v Brian Okken>but also the latest one.

00:19:52.780 --> 00:20:05.380
<v Brian Okken>And that way people can just like just throw the latest one on their Kindle and just have one chapter where they can either replace the whole thing or if they've taken notes on other stuff to just do the updates, the new chapters.

00:20:05.660 --> 00:20:08.280
<v Brian Okken>So I'm going to do that now or at least have started.

00:20:08.590 --> 00:20:10.740
<v Brian Okken>We'll see. It's a little extra work, but that's all right.

00:20:11.580 --> 00:20:16.820
<v Brian Okken>I got the building on lean done and it was long enough to talk about lean.

00:20:17.020 --> 00:20:19.820
<v Brian Okken>I think that it made sense to split it.

00:20:20.060 --> 00:20:25.580
<v Brian Okken>And I was going to do finding waste in test-driven development as part of that chapter, but I'm going to make it its own chapter now.

00:20:25.800 --> 00:20:26.720
<v Brian Okken>So I'm going to do that.

00:20:27.120 --> 00:20:28.320
<v Brian Okken>I wanted to do a sneak peek.

00:20:28.600 --> 00:20:29.400
<v Brian Okken>Oh, never mind.

00:20:30.179 --> 00:20:33.380
<v Brian Okken>Of the table of contents in progress so far.

00:20:33.560 --> 00:20:35.020
<v Brian Okken>So I'm making some good progress.

00:20:35.140 --> 00:20:37.140
<v Brian Okken>I've got an outline for where I'm going in the future.

00:20:37.800 --> 00:20:38.460
<v Brian Okken>Where are we now?

00:20:39.080 --> 00:20:41.940
<v Brian Okken>We're going to do finding waste in TDD next year.

00:20:43.039 --> 00:20:44.660
<v Brian Okken>It's not going to be a huge book.

00:20:45.080 --> 00:20:45.860
<v Brian Okken>Probably, I'm guessing.

00:20:46.020 --> 00:20:48.720
<v Brian Okken>So right now we're up to, what, 30 pages?

00:20:49.640 --> 00:20:50.520
<v Brian Okken>is a PDF.

00:20:51.740 --> 00:20:53.900
<v Brian Okken>I'm guessing it will be under 100 pages when I'm done.

00:20:54.160 --> 00:20:55.920
<v Brian Okken>So it's not a huge book, but it's also not expensive.

00:20:56.160 --> 00:20:56.420
<v Brian Okken>It's $10.

00:20:57.200 --> 00:21:02.360
<v Michael Kennedy>At least my experience is PDFs usually have more content per page than e-books,

00:21:02.940 --> 00:21:05.060
<v Michael Kennedy>at least if you ask Amazon how many pages is it.

00:21:05.700 --> 00:21:08.060
<v Brian Okken>Yeah, and even like way more.

00:21:08.400 --> 00:21:11.600
<v Brian Okken>Yeah, it's more content per page for e-book, but also per print book.

00:21:11.940 --> 00:21:15.060
<v Brian Okken>So print book isn't usually an 8.5 by 13 page.

00:21:15.410 --> 00:21:15.640
<v Brian Okken>So yeah.

00:21:16.800 --> 00:21:22.840
<v Brian Okken>Last one, my extra Python 3.14.2 was released December 5th.

00:21:24.059 --> 00:21:26.740
<v Brian Okken>We haven't had 3.14 around for that long,

00:21:26.920 --> 00:21:29.340
<v Brian Okken>but people are upgrading, which is great,

00:21:29.660 --> 00:21:30.840
<v Brian Okken>and they're not afraid to upgrade,

00:21:30.950 --> 00:21:32.080
<v Brian Okken>but they're finding a few things.

00:21:32.090 --> 00:21:33.920
<v Brian Okken>So there were a handful of fixes.

00:21:34.110 --> 00:21:36.780
<v Brian Okken>There were some exceptions in multiprocessing.

00:21:37.300 --> 00:21:40.020
<v Brian Okken>I didn't notice those, but some people noticed them.

00:21:40.800 --> 00:21:42.980
<v Brian Okken>Data classes without an NITs were throwing exceptions.

00:21:43.500 --> 00:21:46.140
<v Brian Okken>Anyway, they fixed some critical things in 3.14,

00:21:46.560 --> 00:21:49.200
<v Brian Okken>And I appreciate the core team being on top of it.

00:21:49.650 --> 00:21:50.120
<v Michael Kennedy>So that's great.

00:21:50.320 --> 00:21:50.760
<v Michael Kennedy>Yeah, awesome.

00:21:51.160 --> 00:21:52.820
<v Michael Kennedy>That one flew under my radar somehow.

00:21:52.870 --> 00:21:53.480
<v Michael Kennedy>I didn't notice it.

00:21:53.580 --> 00:21:54.120
<v Michael Kennedy>So very exciting.

00:21:54.490 --> 00:21:55.300
<v Michael Kennedy>Time to upgrade some stuff.

00:21:56.020 --> 00:21:56.220
<v Brian Okken>All right.

00:21:56.620 --> 00:21:57.420
<v Michael Kennedy>Do you have any extras?

00:21:58.120 --> 00:21:58.820
<v Michael Kennedy>Well, I do.

00:21:58.990 --> 00:22:00.760
<v Michael Kennedy>I have some repeat extras in a sense.

00:22:01.210 --> 00:22:04.780
<v Michael Kennedy>In that you and I both pulled this Sebastian Ramirez one out.

00:22:05.020 --> 00:22:07.960
<v Michael Kennedy>And I don't really have much more to say other than I want to say for sure.

00:22:08.160 --> 00:22:09.320
<v Michael Kennedy>This is a super nice documentary.

00:22:09.580 --> 00:22:10.460
<v Michael Kennedy>It's super highly produced.

00:22:10.620 --> 00:22:12.000
<v Michael Kennedy>It's done by Cult Repo.

00:22:12.320 --> 00:22:12.800
<v Michael Kennedy>What a bad name.

00:22:12.850 --> 00:22:15.340
<v Michael Kennedy>The comments suggest like, what is this?

00:22:15.540 --> 00:22:16.620
<v Michael Kennedy>like a weird cult or something.

00:22:17.640 --> 00:22:20.720
<v Michael Kennedy>A much better channel name would be Repo Culture,

00:22:20.940 --> 00:22:23.240
<v Michael Kennedy>or Culture Repository, or Repository Culture.

00:22:23.520 --> 00:22:24.280
<v Michael Kennedy>It's something about like,

00:22:24.650 --> 00:22:26.420
<v Michael Kennedy>it covers open source basically, right?

00:22:26.520 --> 00:22:27.420
<v Michael Kennedy>But Cult Repo is weird.

00:22:27.840 --> 00:22:29.280
<v Michael Kennedy>Anyway, it's the same group

00:22:29.500 --> 00:22:32.280
<v Michael Kennedy>that did the one hour Python documentary

00:22:32.460 --> 00:22:33.680
<v Michael Kennedy>that's really highly produced.

00:22:33.770 --> 00:22:34.720
<v Michael Kennedy>So that's all I wanna say about that.

00:22:35.020 --> 00:22:36.520
<v Michael Kennedy>And with regard to the book, right?

00:22:36.600 --> 00:22:39.540
<v Michael Kennedy>For the Talk Python in production book,

00:22:39.880 --> 00:22:41.840
<v Michael Kennedy>I actually started keeping a changelog.

00:22:42.040 --> 00:22:43.780
<v Michael Kennedy>I think we talked to, I think even you brought this up.

00:22:43.840 --> 00:22:44.540
<v Michael Kennedy>Keep a changelog.

00:22:44.720 --> 00:22:46.900
<v Michael Kennedy>Don't let your friends dump Git logs into change logs.

00:22:47.120 --> 00:22:48.320
<v Michael Kennedy>Keep your change log.

00:22:48.720 --> 00:22:51.140
<v Michael Kennedy>And so I'm keeping this for people who are like,

00:22:51.320 --> 00:22:52.460
<v Michael Kennedy>what has changed about the book?

00:22:52.700 --> 00:22:55.000
<v Michael Kennedy>Because at least, well, on Amazon,

00:22:55.600 --> 00:22:59.000
<v Michael Kennedy>Amazon says they will release new versions as they feel like it

00:22:59.220 --> 00:23:00.420
<v Michael Kennedy>if I upload a new EPUB.

00:23:01.300 --> 00:23:01.640
<v Michael Kennedy>Really?

00:23:02.000 --> 00:23:04.540
<v Michael Kennedy>Yeah, but it doesn't say the timeframe of it.

00:23:04.840 --> 00:23:08.040
<v Michael Kennedy>And those should automatically show on people's devices as updates.

00:23:08.540 --> 00:23:11.140
<v Michael Kennedy>And then the Gumroad version, if you buy it directly from me,

00:23:11.420 --> 00:23:13.980
<v Michael Kennedy>obviously I push up new versions and have like numbers.

00:23:14.280 --> 00:23:19.160
<v Michael Kennedy>and my book has a version number in it right which is kind of fun anyway so i'm keeping a change log

00:23:19.320 --> 00:23:25.320
<v Michael Kennedy>following the keep change log style so people can see like do i care do i care about the change do

00:23:25.320 --> 00:23:33.000
<v Michael Kennedy>i need to go back whatever so yeah and i also want to tell people that um it's the it used to be like

00:23:33.140 --> 00:23:39.379
<v Brian Okken>you know several years ago when i did a my first ebook um it was a little little sketchier to

00:23:39.440 --> 00:23:45.900
<v Brian Okken>to figure out how to get a book onto your kindle without um like without going through amazon and

00:23:46.200 --> 00:23:52.100
<v Brian Okken>it's way easier now um if you just like if you grab a book like an ebook for me or from michael

00:23:52.380 --> 00:23:56.460
<v Brian Okken>you can just email it to yourself you can set up a an email address that you just email it to

00:23:56.460 --> 00:24:01.300
<v Michael Kennedy>yourself and it just shows up on your kindle yeah you your kindle gets an email so mine mine is

00:24:01.320 --> 00:24:06.939
<v Michael Kennedy>something with the word paper right in it i don't remember exactly what it is but yeah and it's it's

00:24:06.960 --> 00:24:12.540
<v Brian Okken>totally um you figure it out once and and i've got um yeah it's not bad it's not easy it's not easy

00:24:12.590 --> 00:24:18.080
<v Brian Okken>it is very easy it's not hard so yeah yeah and uh real time follow-up sky as in the same sky that

00:24:18.120 --> 00:24:25.080
<v Michael Kennedy>recommended um typos it looks like 3 14 2 came out just three days after 3 14 1. okay very interesting

00:24:25.400 --> 00:24:29.020
<v Michael Kennedy>all right a couple more extras for me i was on vanishing gradients so that i told you that's

00:24:29.020 --> 00:24:34.299
<v Michael Kennedy>gonna be there that's out that was a very fun episode i a fun chat with hugo bone anderson and

00:24:35.640 --> 00:24:37.800
<v Michael Kennedy>Django 6 is now officially released.

00:24:37.960 --> 00:24:39.400
<v Michael Kennedy>Last week I talked about what was coming,

00:24:39.840 --> 00:24:43.480
<v Michael Kennedy>but the day after we did that, it's now actually out.

00:24:43.740 --> 00:24:46.420
<v Michael Kennedy>So if you're waiting on that, Django 6 is out.

00:24:46.820 --> 00:24:47.600
<v Michael Kennedy>See what it holds for you.

00:24:47.890 --> 00:24:50.120
<v Michael Kennedy>Now, Brian, I think I have a pretty fun joke.

00:24:50.380 --> 00:24:52.800
<v Michael Kennedy>This is a little more elaborate than just a dad joke or something.

00:24:52.900 --> 00:24:53.140
<v Michael Kennedy>Are you ready?

00:24:53.470 --> 00:24:53.580
<v Brian Okken>Yeah.

00:24:56.520 --> 00:24:59.920
<v Michael Kennedy>There's these joke programming languages that actually compile and stuff.

00:24:59.970 --> 00:25:03.480
<v Michael Kennedy>And one that I really love is lolcats, L-O-L-Cats, all one word.

00:25:03.820 --> 00:25:04.480
<v Michael Kennedy>So good.

00:25:05.010 --> 00:25:05.360
<v Michael Kennedy>So good.

00:25:05.460 --> 00:25:08.980
<v Michael Kennedy>It actually has multiple implementations of it, and it's good.

00:25:09.540 --> 00:25:12.840
<v Michael Kennedy>But we don't live in the time of lolcats anymore.

00:25:13.270 --> 00:25:15.580
<v Michael Kennedy>That was like an early meme of the internet.

00:25:16.320 --> 00:25:23.340
<v Michael Kennedy>So we now live in a hyper-hyped, crazy headline, overdone age, as you know.

00:25:23.740 --> 00:25:26.320
<v Michael Kennedy>So I present to you the tabloid language.

00:25:26.840 --> 00:25:27.480
<v Brian Okken>Oh, my God.

00:25:27.900 --> 00:25:28.580
<v Michael Kennedy>Are you ready?

00:25:29.380 --> 00:25:30.060
<v Michael Kennedy>Oh, my God.

00:25:30.230 --> 00:25:30.720
<v Michael Kennedy>Here we go.

00:25:31.140 --> 00:25:34.300
<v Michael Kennedy>It's a minimal programming language inspired by clickbait headlines.

00:25:35.200 --> 00:25:39.320
<v Michael Kennedy>Shocking new programming language bewilders programmers at Google and Facebook.

00:25:39.690 --> 00:25:41.060
<v Michael Kennedy>GitHub new headline tutorial.

00:25:42.000 --> 00:25:43.420
<v Michael Kennedy>So let's look at an example here.

00:25:43.840 --> 00:25:45.180
<v Michael Kennedy>Discover how to Fibonacci.

00:25:45.220 --> 00:25:46.840
<v Michael Kennedy>This is import, basically.

00:25:47.540 --> 00:25:48.180
<v Michael Kennedy>Discover how to.

00:25:48.580 --> 00:25:49.980
<v Michael Kennedy>No, this is the function actually.

00:25:50.680 --> 00:25:53.460
<v Michael Kennedy>Discover how to Fibonacci with A, B, N.

00:25:53.900 --> 00:25:56.360
<v Michael Kennedy>Rumor, this is like a try or something.

00:25:56.900 --> 00:25:57.520
<v Michael Kennedy>Rumor has it.

00:25:57.770 --> 00:25:59.200
<v Michael Kennedy>What if N smaller than one?

00:25:59.560 --> 00:26:00.680
<v Michael Kennedy>Shocking development B.

00:26:01.180 --> 00:26:01.720
<v Michael Kennedy>Lies.

00:26:02.440 --> 00:26:03.320
<v Michael Kennedy>Rumor has it.

00:26:03.700 --> 00:26:05.180
<v Michael Kennedy>You won't want to miss B.

00:26:06.080 --> 00:26:06.780
<v Michael Kennedy>Shocking development.

00:26:07.220 --> 00:26:10.180
<v Michael Kennedy>Fibonacci of B, A plus B, N minus one.

00:26:10.400 --> 00:26:10.800
<v Michael Kennedy>End of story.

00:26:10.960 --> 00:26:11.300
<v Michael Kennedy>End of story.

00:26:11.880 --> 00:26:13.580
<v Michael Kennedy>Expert claims limit to be 10.

00:26:15.440 --> 00:26:17.680
<v Michael Kennedy>You won't want to miss first 10 Fibonacci numbers.

00:26:18.090 --> 00:26:18.720
<v Michael Kennedy>You won't want to miss.

00:26:18.900 --> 00:26:19.640
<v Michael Kennedy>Apparently it's print.

00:26:23.320 --> 00:26:25.120
<v Michael Kennedy>And then I don't know what this last one is.

00:26:25.760 --> 00:26:30.460
<v Michael Kennedy>Experts claim nothing to be Fibonacci of 101 limit.

00:26:30.640 --> 00:26:32.020
<v Michael Kennedy>I think that's like a test or an assert.

00:26:32.600 --> 00:26:33.380
<v Michael Kennedy>Please subscribe and like.

00:26:33.580 --> 00:26:33.860
<v Michael Kennedy>No output.

00:26:34.340 --> 00:26:34.820
<v Michael Kennedy>I'm going to run it.

00:26:34.820 --> 00:26:35.020
<v Michael Kennedy>Hold on.

00:26:35.110 --> 00:26:35.340
<v Michael Kennedy>Hold on.

00:26:35.400 --> 00:26:35.640
<v Michael Kennedy>Run this.

00:26:36.040 --> 00:26:36.500
<v Michael Kennedy>Oh my God.

00:26:36.610 --> 00:26:37.020
<v Michael Kennedy>It runs.

00:26:39.140 --> 00:26:39.920
<v Michael Kennedy>What about factorial?

00:26:40.420 --> 00:26:41.340
<v Michael Kennedy>You won't want to miss this.

00:26:41.670 --> 00:26:42.040
<v Michael Kennedy>Hello world.

00:26:42.360 --> 00:26:44.080
<v Michael Kennedy>Discover how to factorial with n.

00:26:44.460 --> 00:26:45.080
<v Michael Kennedy>Rumor has it.

00:26:45.220 --> 00:26:46.780
<v Michael Kennedy>What if n is actually zero?

00:26:47.160 --> 00:26:48.080
<v Michael Kennedy>Shocking development one.

00:26:48.580 --> 00:26:48.940
<v Michael Kennedy>Lies.

00:26:49.780 --> 00:26:51.580
<v Michael Kennedy>Shocking development n times back.

00:26:52.160 --> 00:26:52.560
<v Michael Kennedy>So good.

00:26:52.980 --> 00:26:53.300
<v Michael Kennedy>Oh no.

00:26:53.660 --> 00:26:54.580
<v Michael Kennedy>Lies is the else.

00:26:54.960 --> 00:26:55.100
<v Michael Kennedy>Yeah.

00:26:55.300 --> 00:26:55.740
<v Michael Kennedy>Lies is else.

00:26:56.020 --> 00:26:56.100
<v Michael Kennedy>Yeah.

00:26:56.700 --> 00:26:57.060
<v Michael Kennedy>Lies.

00:26:57.600 --> 00:26:59.060
<v Michael Kennedy>Because there's an assertion.

00:26:59.070 --> 00:26:59.820
<v Michael Kennedy>It goes lies.

00:27:00.340 --> 00:27:02.000
<v Michael Kennedy>That's like, no, not the assertion.

00:27:02.440 --> 00:27:03.360
<v Michael Kennedy>It's really good actually.

00:27:03.940 --> 00:27:10.280
<v Michael Kennedy>and notice it runs it runs it runs in the browser what is this built on i don't know i'm not sure

00:27:10.280 --> 00:27:16.660
<v Michael Kennedy>if it's WebAssembly or if it's just javascript implementation it's all javascript so okay this

00:27:16.720 --> 00:27:23.080
<v Brian Okken>is awesome it's so good isn't it yeah i think i think we need a uh but you know it used to be

00:27:23.220 --> 00:27:27.539
<v Brian Okken>that this would be difficult but we just have to have the spec for this and we could get like

00:27:27.560 --> 00:27:34.240
<v Brian Okken>clod or something to translate larger programs to uh to tablet i might rewrite python bites the

00:27:34.360 --> 00:27:42.820
<v Michael Kennedy>website in it i think lies exclamation it requires an exclamation mark for lies oh by the way people

00:27:42.820 --> 00:27:48.240
<v Michael Kennedy>were just listening this is all all the keywords the entire language is all caps of course lies

00:27:48.620 --> 00:27:54.580
<v Michael Kennedy>of course anyway i think it's pretty excellent this is old this is old i didn't realize i just

00:27:54.600 --> 00:28:00.300
<v Michael Kennedy>ran across it but uh it's four years old anyway well done well done whoever made this is

00:28:00.440 --> 00:28:08.180
<v Michael Kennedy>amazing this is awesome yeah oh yeah also um uh kiva in the out in the audience points out that

00:28:08.510 --> 00:28:12.960
<v Michael Kennedy>every time you print something it also ends in an exclamation mark even if the text itself doesn't

00:28:12.960 --> 00:28:20.940
<v Brian Okken>have an exclamation mark oh yeah obviously i mean like of course it has to lies this is the end of

00:28:20.760 --> 00:28:30.020
<v Michael Kennedy>the show lies we have more no this is really good it's good so also for people watching the video

00:28:30.340 --> 00:28:36.400
<v Brian Okken>I you'll notice a little less junk in my office I'm starting to clean up after Thanksgiving and

00:28:36.480 --> 00:28:41.520
<v Brian Okken>we'll get there yeah anyway great episode as always Michael thank you thank you everybody

00:28:41.760 --> 00:28:46.740
<v Brian Okken>for listening and we'll see you all next week what if actually this was the end now see you later

00:28:48.160 --> 00:28:48.620
<v Brian Okken>lies

