Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book


Transcript #362: You can deprecate a global variable?

Return to episode page view on github
Recorded on Tuesday, Nov 28, 2023.

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

00:05 This is episode 362, recorded November 28th, 2023.

00:10 I'm Michael Kennedy.

00:12 - And I'm Brian Akin.

00:13 - And this episode is brought to you by Scout APM.

00:16 We will tell you more about them later, but please check out what they're offering.

00:19 It really helps support the show.

00:20 And if you want to connect with us on the socials, the place we're all hanging out at is mastodon@fostedon.org specifically.

00:29 I'm Adam Kennedy, Brian is @brianakin, and the show is @pythonbytes.

00:33 Fostedon.org is invite only.

00:35 Of course, you can follow us from any place on Mastodon, but if you want to be part of it, just shoot one of us a message.

00:41 We can send you an invite.

00:42 Help you get over there to hang out a little bit closer to home for us.

00:46 And finally, if you want to be part of the live stream and see how the show is made, see what we're doing, even the real mistakes that we might edit out, check that out at pythonbytes.fm/live, usually Tuesdays at 11 p.m.

00:58 And older videos are there as well.

00:59 Let's kick it off.

01:01 What do you got?

01:02 - This is a gentle ease back into the show.

01:06 Over the Thanksgiving break, I was thinking a lot about kind of what I wanted to do for the next year, starting to think about plans for how to, where do I want to focus my time?

01:17 And I ran across this great post by Vadim, let's just say Vadim.

01:24 Habits of great software engineers.

01:27 And it's kind of, there's a lot of great stuff here.

01:32 So also nice index on the right, which is cool.

01:36 So focusing beyond the code.

01:38 So I'm not gonna go through all these.

01:40 I'm gonna go through, there's like 12 or 13 listed, but I'll go through a few of them.

01:45 Focus on the code.

01:46 So I don't know if I buy this, but he says as a developer, you code 20% of your time.

01:52 You should excel at coding nonetheless, but it won't be enough to be great.

01:56 I think I code more than 20% of the time.

01:58 - I would say too.

01:59 Well, define code, right?

02:00 Okay, so is coding, is that reading code?

02:04 Is that thinking about code?

02:05 Is that--

02:06 - Oh, the design part and--

02:07 - Right, or is it actually I'm hitting keys on keyboard?

02:11 You know what I mean?

02:12 - Yeah, that's true.

02:13 - Right, 'cause people say you code is read way more than it's written and stuff.

02:16 But I think for me, coding is like the act of being in the code and adding features or evolving it, even if I'm not keystroking it at that moment.

02:26 So unclear, but if that encompasses all, then 20% is way too low, agreed.

02:31 - Okay, well, I guess the point of this, regardless of the percentage, is focusing on the other parts of your job also.

02:39 And focusing on not just being a better software engineer, but also, well, being a better software engineer encompasses more than just coding well and knowing Python details and things like that.

02:50 Like communication skills and all that, design skills, learning to read other people's code, things like--

02:57 - Helping unblock your teammates who are having a challenge.

02:59 Instead of writing code yourself, I'm gonna help them get that problem fixed or something, right?

03:04 - Yeah, yep.

03:05 - All those things.

03:06 - Well, and okay, so number two was efficiency and anti-fragility.

03:11 Not really a fan of the anti-fragile word.

03:14 I don't even really know what it means, but I guess--

03:17 - I think it originally comes from Nassim Taleb and that whole philosophy, although I haven't read a whole lot of that either.

03:23 - Anyway.

03:24 - Yeah, but it's kind of about things that get better the more they kind of get abused, right?

03:30 Like they sort of build up a resilience.

03:31 - Well--

03:32 - I think it originally comes out of like economics.

03:34 - Okay.

03:35 Well, the next one is one I really agree with, is the joy, number three is the joy of tinkering.

03:41 Build projects, try out frameworks, build stuff on the side, keeps the spark alive.

03:47 And this is one I couldn't agree more.

03:49 It doesn't, I, for a while, I was often thinking about like what could I build that I could actually release or that I'd be proud of?

03:58 That's great.

03:59 You could try to at least do a side project that tries to make money or something.

04:04 But if you just wanna try out FastAPI, for instance, just build something with FastAPI.

04:09 Just come up with a toy project and build it and learn it.

04:11 And it's fun, even if you never apply it to other stuff.

04:15 I've had so many times in my career where I've had something that I tinkered with just as a toy that suddenly like I could use.

04:22 So I'm like, oh yeah, I've built wikis before and stuff like that.

04:25 I can go ahead and do that for a project or I've done a flask app on the side.

04:32 So if I need a flask app at work, it's gonna be pretty easy, things like that.

04:36 Tink, playing with toy projects.

04:38 I say, put that on top of your list for 2024, more toy projects.

04:43 I'll go through the rest of these pretty quick.

04:45 Number four is knowing the why.

04:47 Number five, thinking in systems.

04:49 Number six, tech detox.

04:52 Recharging away for the monitor is what makes you a better programmer.

04:56 Couldn't agree more.

04:58 The art of approximation.

04:59 I don't really know what this is about.

05:01 I didn't read this part.

05:02 Knowing important tech numbers.

05:04 Anyway.

05:05 - I actually have one, I wanna cover that as one of our items in the future.

05:11 There's a couple of posts or charts or whatever that somebody put up that I think would be really interesting.

05:17 So this is like, what is the relative speed of L2 cache versus RAM?

05:22 RAM versus disk?

05:23 What is the cost of a CPU core or a database operation on the cloud, et cetera, et cetera?

05:29 But I don't like some of the numbers there.

05:31 I think they're way skewed.

05:33 So I wanna come up with my own table and then put them both forward.

05:36 So that's why I haven't covered it yet.

05:37 But that's what this is about, I think.

05:39 - Okay.

05:40 Well, what's funny is that the teaser at the beginning of this post says, there's only eight, but there's more if you read it.

05:48 But there's a table of contents on the right.

05:50 So you can just look at the table of contents.

05:52 The one that I really, the last one I think is the most important for me is strong opinions loosely held.

05:59 And for this, for me, this means that I'm gonna have a default approach to test for a lot of problems and a default way to do things.

06:09 It just speeds things up.

06:10 It's like, if I don't care about it, just do it quickly.

06:13 You've got an opinion how things are done.

06:15 However, be open-minded enough to when somebody approaches you and says, hey, there's a better way to do this.

06:21 Or keeping your eyes open with the tinkering, trying new ways to do things.

06:26 Be willing to abandon your old strong opinion and go, oh, there's a better way.

06:31 Cool, my new opinion is this now.

06:33 - It pretty much summed up our podcast.

06:35 - Yeah, exactly, yes.

06:38 So yeah, nice post thinking about kind of planning for your time allotment for the upcoming year.

06:47 - Yeah, lots of feedback on this one.

06:50 Jeff out there says, tech numbers like LEET 1337.

06:54 Excuse me, yes, those are the important tech numbers.

06:57 - Those are the important ones, yeah.

06:58 - LEET, NOOB, all those things.

07:01 And then Grant following up on the anti-fragile says this number two speaks more to reactive principles that came about with the cloud.

07:08 It could be summed up as build with the expectation that your K8s pods can be nuked mid-task at any point.

07:13 Yeah, exactly.

07:14 That you might just use one VM, but it could die.

07:17 But if you know that it's always getting abused, you would build failover and those types of things into it, making it hence less fragile.

07:25 I think that's kind of that principle there.

07:26 - Yeah, okay.

07:28 But also, if it's a side project, if it's down once in a while, it's fine.

07:33 - Yeah, this is not a side project.

07:36 Maybe a habit of great software engineers, I don't know.

07:38 - I wonder how many blogs run on Kubernetes.

07:41 - I don't know what the answer is, but I bet the answer is too many.

07:44 - Too many.

07:45 (laughing)

07:46 - Too many run on Kubernetes.

07:47 - Okay, okay, what do you got for us?

07:49 - All right, I got eight nines uptime on my blog.

07:53 Okay, although we probably do, Brian, because ours runs on a CDN as a static file.

07:59 - Okay.

08:00 - That's pretty good uptime, right?

08:01 - Yeah.

08:02 - Then the database doesn't need to be migrated for that business, does it?

08:05 All right, moving on, we've covered this enough.

08:07 Let's talk about a new version of Flask.

08:09 So Flask obviously is a super important web framework.

08:13 Like everyone has heard of Flask.

08:14 It's kind of one of the two main pillars that I would think of, like the old guard pillars, right?

08:19 There's Flask and Django, and the debate for so many years has been like, do you use Flask or do you use Django?

08:24 What kind of web developer are you?

08:26 Well, Flask 3.0 was released just a little while ago.

08:31 Was that three weeks ago, something like that?

08:33 There's also a 3.0.1 that is currently unreleased, but has like very, very minor changes.

08:38 So anyway, the changes for a two to three release are not that huge.

08:42 Although I think the numbering probably comes from this removed previously deprecated code there.

08:49 That's probably what pushed it from a two to three rather than some mega new feature.

08:53 - Yeah.

08:54 - Right, because it's like, hey, it's not backwards compatible.

08:57 Miguel Greenberg actually wrote a interesting but controversial piece on that.

09:01 I'm not gonna link to it, but y'all can check that out.

09:03 I just wanna cover the release here.

09:05 But a lot of this, actually this first line, there's a lot of discussion about it, let's say.

09:10 Neutral there.

09:12 So some of the things that are interesting here though, Brian, are not so much interesting because they're Flask.

09:15 They're just like, wait, what?

09:17 You could do that?

09:18 So deprecated the dunder version attributes.

09:22 So frequently people will go to their dunder init.py for their package and put a dunder version global variable and set it to a string.

09:30 And then you can say, well, what version is the thing?

09:33 Well, it's Flask.dunderversion is the version and that's just a string, right?

09:37 - Yeah.

09:38 - Yeah, so the idea is that's deprecated.

09:41 And now the way you're supposed to get the version of Flask is using feature detection or with importlib.metadata.version of "Flask." - Okay.

09:53 - Which I had not, I'm like, okay, so cool that that might work, but how in the world do you make it possible for a package that that comes out of it?

10:03 If I wrote a package and I wanted to say dot version of my package in importlib, how do I put a number in there that makes it the version, right?

10:11 So do I have it here?

10:13 Yeah, basically you have to go, if you use a pyproject.toml, at least one way is, and you just set the metadata category, set the version to something and then that's that.

10:22 - Yeah.

10:23 - Okay, yeah, pretty cool.

10:24 And so that's where that value comes from when you say importlib.metadata.version, pretty cool.

10:30 What's more interesting is deprecated a global variable.

10:33 How do you deprecate a global variable?

10:35 I know how to deprecate a method, a class, but a variable?

10:39 - But just delete it.

10:41 (laughs)

10:41 - No, that's removing it.

10:43 You wanted to give a warning when you access the variable.

10:46 - Hmm, okay.

10:47 - And the variable's value is a string.

10:49 Like, okay, what?

10:51 So I'm like, I gotta see that.

10:53 So I went and I tracked down the changelog.

10:55 I checked down the PR that made this happen.

10:58 I'm like, I gotta see the code.

11:00 What is this?

11:01 So it says it deprecated dunder version and here you can see somewhere, you can just see they literally, like you said, they deleted the dunder version variable, but they added a function to the module called dunder get adder.

11:15 For some reason, I thought that only applied to classes, but no, apparently modules.

11:18 And given that it comes in and it asks for the version, it says no, there's a warning.

11:25 And then it calls the importlib.version thing on itself.

11:28 Interesting, huh?

11:29 - Yeah, actually this is a handy thing to keep around.

11:33 - Yes, exactly.

11:34 If you're asking for dunder version, it warns and then it does the new thing.

11:38 Otherwise it just says, no, we don't have one of them.

11:40 But yeah, that's wild, right?

11:42 - Yeah, huh.

11:43 I love how dynamic Python is.

11:45 - Yeah, it's nuts.

11:46 - It was a global variable.

11:48 Now it's a function or a--

11:50 - Now it's a function called to a dunder get adder method on the module.

11:53 Wow, yeah.

11:55 - I think I'm gonna replace all of my global, like function declarations as get adder.

12:00 - Exactly, that's gonna ride a hole.

12:01 Yeah, the whole function is just a bunch of dispatch to get adder.

12:04 It's gonna be awesome.

12:05 - Yeah.

12:06 - Restructured the code such that the Flask app and Blueprint classes have sans-io bases.

12:13 I don't know what sans-io bases are, but that moves things like a request and response over to wrapper sections and out of the app itself, things like that.

12:21 Requires a new version of verxoeg, and that's pretty much it.

12:26 So interesting.

12:27 So it's interesting that 3.0 is out, way to go, Palettes team, but it's this deprecated version attribute.

12:33 This is interesting to me.

12:35 - Yeah, and so the meta, I haven't played with it, but that import lib metadata version, you showed it working with a static version metadata, but it probably works with dynamic versions in PyProject Homo-based projects also.

12:51 - Yes, probably.

12:52 It's just my lack of experience with that kind of stuff to talk about it.

12:56 - No, interesting, cool.

12:59 - All right, you know what else is cool?

13:01 Our sponsor this week.

13:02 Let me take a moment and tell everyone about them once I find where I put my nose.

13:08 Okay, so this episode, as a couple of recent ones have been brought to you by Scout APM, Application Performance Monitoring, definitely a cool, cool service.

13:18 You know, there's a lot of profiling stuff you can do, Brian, and it's great to run your code in the profiler.

13:23 There's a bit of a Heisenberg type of thing as you observe it.

13:27 It changes the behavior of the performance, but you still get a sense, but it's nothing like my app is running in production.

13:34 Let's see how it did during Black Friday.

13:36 Oh, this was the part that was slow.

13:38 We could like save a ton of money, run fewer servers or Kubernetes pods or whatever it is you're doing.

13:44 Now, if we change it this way, right?

13:45 So having that data is awesome.

13:46 So if you're tired of spending hours trying to find the root cause of issues impacting your performance, then you need to check out Scout APM.

13:53 It's a leading Python application performance monitor monitoring tool that helps you identify and solve performance abnormalities faster and easier.

14:02 It ties bottlenecks such as memory leaks, slow database queries and background jobs, and of course the dreaded N plus one quorum query problem and more directly to source code so that you can spend less time debugging and more time building.

14:15 I don't know where that fits in the 20% of your code example, but I think this kind of stuff counts too.

14:21 You'll love Scout because it's built for developers by developers, makes it easy to get set up and deliver insights in less than four minutes.

14:27 Seriously, you could be done by the time you're done listening to this episode or live stream.

14:32 So start your free trial and get instant insights today.

14:34 Visit pythonbytes.fm/scout.

14:37 Please use our link because it really does support the show, right?

14:41 If they don't know you're coming from us, then they might not sponsor us anymore.

14:44 So please, pythonbytes.fm/scout to check it out.

14:47 Thank you to Scout APM for supporting Python Bytes.

14:50 Off to you, Brian, what's next?

14:51 - Well, next we've got something fun.

14:55 On real Python, there's a post, build Conway's Game of Life with Python from Leodanos Ramos.

15:04 And I just couldn't resist 'cause I think I have a feeling that maybe there's some new, like younger software folks that maybe aren't familiar with Game of Life.

15:12 - You gotta live a while to know about the Game of Life.

15:15 (laughing)

15:16 - Well, I hope everybody knows about it, but it's kind of fun.

15:20 And so this is just a fairly good walkthrough of if you were gonna build Game of Life.

15:26 And it's, one of the cool things about it is building on the command line.

15:31 It's using argpars, but also curses.

15:33 And you've got a curses version in the terminal of Game of Life.

15:37 And how cool is that?

15:38 It's pretty, just pretty fun.

15:40 Looking through, I've seen some rather awful implementations of Game of Life over the years.

15:47 Like a little bit of Pearl Golf going on sometimes.

15:50 But this one looks pretty good.

15:53 It walks through setting up an entire project using pyproject.toml, which is great.

16:00 And then talking about the different, splitting up the implementation into like a grid in one module, the patterns in another, different views, and then the CLI in another.

16:12 Just the split up looks good for modularizing the application.

16:17 And kind of, if you're, a lot of times people wanna play, like build games or something, and this is kind of a game that you don't actually have to play.

16:26 It just plays itself.

16:27 So it's, I just wanted to highlight it.

16:30 It's just a fun walkthrough of implementing Game of Life.

16:34 - Yeah, that's, you already talked about these little projects in your first thing, right?

16:38 Here's a cool little project that you can play around with.

16:41 And I think games are a good way to get into coding, not, you know, Doom, Half-Life, whatever.

16:47 I've been playing a ton of Small Lands, by the way.

16:49 Also not a good way to get into programming.

16:50 Seems like something that would take forever.

16:52 - Well-- - But Small Lands is awesome.

16:54 However, I think this is like little games, you know, they're easy.

16:57 You don't have to have a huge amount of domain knowledge.

16:59 You don't have to know about like databases and connection strings, and like how do I embed the password?

17:04 How do I make it run?

17:05 All that, like just have fun.

17:06 - Yeah, and so one of the fun things about this is like the hiding of, so it has like a life grid.

17:13 So one of the, of this project, almost all of the project is gonna be transferable to other stuff, except for the curses part.

17:20 Like I'm probably not gonna write a whole bunch of curses applications.

17:23 But that's the same thing with like most, a lot of games.

17:26 Unless you become a game developer, a lot of the game development, it's using some sort of, you know, user interface stuff that you're probably not gonna use for a lot of projects.

17:35 Unless you go into using game, writing more games, which is great. - Yeah.

17:38 - But having that isolated off to one little part was actually, it's pretty kind of nice to be able to set that.

17:46 Anyway, good implementation. - Yeah, it's really cool.

17:48 It is cool to see how you might create that little UI as well.

17:51 I mean, usually people are doing Unreal Engine, Unity, PyGame, Arcade.

17:57 One of these is like quite, you're quite deep down in those frameworks.

18:00 - Yeah. - And it's just a little bit.

18:02 - One of the things I wasn't sure about, and I, so I didn't see any disclaimer at the top.

18:07 I did not run through this, but was if I didn't know that you could use curses on Windows, for instance.

18:13 So is this a, maybe somebody in the audience knows if you could. - Yeah, maybe someone knows.

18:18 It might be because of Windows Terminal versus Command Prompt.

18:21 - Oh, okay. - Yeah.

18:22 - Yeah. - Possibly.

18:23 But I have, that's a guess.

18:25 Zero knowledge.

18:26 - All right. - All right, enough of this fun, Brian.

18:28 Let's get down to business. - Okay.

18:29 - Polar's business, that is.

18:31 This comes from Marco Gorelli.

18:33 And this is just a simple plugin for Polar's.

18:36 Now, if you don't know Polar's, Polar's is like Handa's with two major differences.

18:41 It has a lazy fluent API.

18:44 So you can kind of chain commands together and it doesn't actually execute until you kind of work through them, kind of like generators and those sorts of things.

18:51 And it's written in REST to B super, super fast.

18:54 So this is a plugin for Polar's.

18:56 And the idea is it lets you answer questions like how many business days between now and then.

19:02 So if like my payment system says you get paid net 30, well, or you get paid after 10 business days, but one of those days is the 4th of July and then there's the weekend and then there's like how many days, you know.

19:16 - Wow. - Calendar math is already gnarly.

19:19 And if you wanna like throw in skipping weekends, skipping holidays, woo, even worse, right?

19:24 So super simple.

19:26 This thing, the extension itself is written in REST.

19:28 So it's kind of compatible with Polar's.

19:30 I believe Polar's has actually a REST API as well as a Python API.

19:34 So maybe this is available there.

19:36 I have zero information about that.

19:38 All you do is you can even define your own holidays and weekends, like every Wednesday I'm taking it off, whatever.

19:45 So the way it works is you just go import Polar's and then Polar's business.

19:52 Somewhere down here, you can go to grab a column, say offset by and just say 5BD, and it'll skip by, you know, it'll go through all the columns, figure out what their dates are and using vector math, convert those to five days ahead by however they offset.

20:11 Like each one individually.

20:12 That's pretty awesome, right?

20:13 - Yeah, fun.

20:14 - I don't know.

20:15 Yeah, I don't know how that works.

20:16 That sounds complicated.

20:17 But yeah, so you can put in like, what are your weekend days?

20:20 What are your others?

20:22 You know, obviously Saturday and Sunday is pretty standard, but like we have restaurants around here that are closed on Sunday and Monday.

20:29 They're open on Friday and Saturday.

20:31 So if you're trying to like do business math around like that kind of schedule, like you could just say Sunday, Monday for your weekend and you're good to go.

20:39 - Nice.

20:40 Yeah, well like one of the things I was thinking about, it was like education wise, schools often have like tons of--

20:47 - So many times, so much time off.

20:49 - Yeah, like in like teacher non-work days, which or whatever, the teachers are still working.

20:56 It's just the students aren't working.

20:58 They should call it student non-work days.

21:01 - They should.

21:02 Yeah, like my daughter is like, oh, I don't have school this week.

21:04 I don't have school this week, why?

21:05 Like, oh, it's parent teacher conference.

21:07 Oh, okay.

21:09 - Yeah, my daughter even calls, they call it or friends call it like no school November.

21:15 - Yes, exactly, exactly.

21:18 - Anyway, so that would be good for that or lots of other businesses have wacky holidays.

21:24 - So people can check this out.

21:25 It's easy to understand, easy to adopt if it's relevant to you, but it seems pretty cool.

21:31 All right, Brian, how extra do you feel today?

21:33 - I just have one extra and that is last week you got, what?

21:38 I got convinced to do a Black Friday sale for the Complete pytest course.

21:43 And it is one word, Black Friday, all caps, just that.

21:48 And you get 50% off the course.

21:51 So check it out.

21:53 And over the break, I did a whole bunch on it.

21:56 So I've up to what, chapter 13.

21:59 Oh, chapter 13 was great.

22:00 I wanted to talk about that a little bit.

22:02 Chapter 13 was on debugging.

22:04 And instead of just like artificially adding errors to the code, I decided to do a, like a test-driven development little thing of writing a couple of tests first, doing the implementation and resisting the urge to refactor during the implementation.

22:19 And then once everything was green, going back and doing a refactoring.

22:23 And it kind of made, then explored, I enjoyed learning this anyway.

22:29 So it was exploring testing or debugging, using pytest plus PDB for the Python debugger.

22:36 One of the cool things about learning PDB is you can use it with talks.

22:40 So you can debug an individual environment if maybe your code's only failing on 3.8 or 3.9 or something.

22:47 So anyway, that's still up and that's my extra.

22:51 How about you?

22:52 - Pretty cool.

22:53 Yeah, congrats on getting chapter 13 up.

22:55 And I think debugging 13, I think stuff could go, that's perfect.

22:59 As long as you didn't release the chapter on Friday the 13th, everything will be fine.

23:02 - Right.

23:04 - I got a few things.

23:05 First, there was like a really heartfelt message from Kenneth Reitz that he posted on X Twitter.

23:10 And so I thought maybe I'd just read that 'cause it's, you know, just kind of remind everyone of how nice the community is and why we all like to be here.

23:19 You up for that, Brian?

23:20 - Yeah.

23:20 - All right, Kenneth, who's done things like requests and many other projects says, "Dear Python community, I hope this letter finds you well "and thriving in your various endeavors.

23:28 "Python, my name is Kenneth Reitz.

23:30 "I've been part of this vibrant community "for quite some time, contributing to projects "like requests, pip, envy, and among others.

23:35 "Today, I write to you not just as a fellow Python "enthusiast, but as someone who, like many of you, "have faced moments of uncertainty "and feared my journey with programming.

23:44 "It's a path that while rewarding, "is often fraught with challenges and moments of self-doubt.

23:49 "I'm reaching out to share these feelings "because I believe in the power of our community "to support and uplift each other.

23:54 "In recent times, I've found myself grappling "with the sense of fear, "fear of not living up to expectations, "fear of the unknown or ever-evolving field, "and perhaps fear of not being able to contribute "as significantly as I have in the past.

24:04 "These are feelings I'm sure many can relate to.

24:07 "But in these times of vulnerability, "that I'm reminded of the strength and compassion "of the Python community, "that we're a group that not only shares a love "for programming, but also cares for the wellbeing "of its members.

24:19 "Your support, encouragement, and willingness "to share knowledge and experiences "have always been a source of strength for me.

24:25 "So reaching out to ask for your understanding "and continued support, not just for me, "but for everyone in the community "facing similar challenges." It goes on, I'll let people read it, I'll link to it in the show notes.

24:33 But I just think that's kind of a nice message and I wanted to amplify it a bit for Kenneth.

24:37 - Yeah.

24:38 - I mean, obviously he's someone who people, I know many people look up to as like, "Wow, look how much he's accomplished." And so if you're feeling uncertain or like you're not contributing enough or whatever, like if Kenneth also feels that way, like maybe these are just feelings people have and not so much things that should stop you.

24:54 All right, so that's one.

24:55 Remember last time I talked about Python 3.13, that's your alpha one being out.

25:01 Well, this time, since it was so close to when 3.2 or alpha two was coming out, alpha two is here as well.

25:07 So I just wanted to link over to that.

25:09 Really many of the features that they talk about, what's coming in 3.13 really just has to do with like deprecations and very concrete stuff.

25:17 But I know there's the Faster CPython initiative making a lot of changes, although they're not even at all mentioned here.

25:23 Just like we remove many deprecated things and many of the dead batteries that we talked about, like Telnet Lib.

25:28 Go find another way to implement your Telnet client instead of the standard library and so on.

25:32 So alpha three will be scheduled for December 19th.

25:37 So we can round out our year with a third Python 3.13 alpha release.

25:42 So that's nice and quick.

25:44 And finally, as you touched on as well, thank you to all the people who participated in the Black Friday thing.

25:50 And just, we raised a bunch of money for charity, which is awesome.

25:54 So really happy to have done that.

25:57 So just a bit of a heartfelt thanks on my end for people who participated.

26:00 All right, ready for a joke?

26:02 - Yeah.

26:03 - The joke is called Select Star, and I think we can all relate to it.

26:06 Okay, so Select Star being theoretically a bad thing.

26:09 Can I get this image all the way over?

26:11 No, not really.

26:12 Okay, so the question here says, it's a person.

26:17 I think this is Will Smith from iRobot kind of type of thing.

26:20 Anyway, it doesn't really matter.

26:21 The developer says, can an AI really write efficient SQL queries?

26:25 And the AI looks back at the developer and goes, can you?

26:28 The developer goes, hmm.

26:29 (laughing)

26:31 Maybe not.

26:32 And of course the title is Select Star, which is like barring joins and other crazy group buy stuff.

26:38 Like pretty much like the worst thing you can do for performance.

26:40 Like give me everything, I don't care if I use it.

26:42 Right, I know there's like a 10 kilobyte per row description, I don't need that.

26:47 Just give it to me anyway.

26:48 I think this is like the ideal use case for using an AI is optimizing SQL queries.

26:55 Yeah.

26:56 Anyway, I wouldn't trust, I don't trust myself with production SQL.

27:00 (laughing)

27:03 Can an AI really write efficient SQL queries?

27:05 Can you?

27:06 (laughing)

27:07 Okay, well--

27:08 See some agreement in the audience out there as well.

27:10 Very nice.

27:10 I wanna add just a funny thing that my wife shared with me yesterday.

27:16 And as many of you know, or maybe you don't know, I used to have short hair and over the pandemic, grew it out and now I have longish hair.

27:27 I would say that counts as long.

27:28 (laughing)

27:29 And so often it's pulled back, but it's often not also.

27:33 So I wanted to share this funny thing that my wife shared.

27:37 Said, "I admire those with hairstyles.

27:41 I don't have a hairstyle, I have hair.

27:42 Most days it has zero caterpillars in it." That's as good as it gets.

27:47 (laughing)

27:49 So a girl, woman with like long flowing hair.

27:53 Honestly, the length is about the same as yours right now.

27:55 So that's pretty awesome.

27:56 And apparently this was, come up by Tom Cox.

28:00 So that's funny.

28:01 Anyway.

28:02 Yeah, very good.

28:03 Well, also a very good episode.

28:05 Good to be back with you and with everyone.

28:07 Yeah, thank you.

28:08 Yeah, you bet.

28:09 Thanks everyone for listening.

Back to show page