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


Transcript #412: Closing the loop

Return to episode page view on github
Recorded on Monday, Dec 2, 2024.

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

00:05 This is episode 412, recorded Monday, December 2nd, 2024.

00:10 I am Michael Kennedy.

00:11 And I am Brian Okken.

00:12 This episode is brought to you by us, especially our Black Friday things.

00:17 Visit our website for the Black Friday things.

00:19 You have 14 hours, so make haste.

00:23 Make haste. Hopefully you listen straight away.

00:26 And if not, thanks for supporting our work and check out our courses and things like that.

00:30 Links are in the show notes.

00:31 You can also get the summary of every episode delivered directly to you.

00:37 Handcrafted, artisanal newsletter by Brian Okken here.

00:41 So check that out.

00:42 And we mentioned this last time, but we are now Blue Skyians.

00:46 We now live in the sky, the blue sky.

00:48 In particular, Python Bytes is over there with the handle Python, you know, at pythonbytes.fm.

00:54 And both Brian and I are linked directly from there.

00:57 So come follow us.

00:59 I have a little extra, extra, extra to follow up on Blue Sky and Mastodon and Twitter, X Twitter, whatever.

01:07 All of these things.

01:09 So I think you will find that interesting.

01:11 But right now, I would like to know, Brian, what you find interesting.

01:14 I find interesting that there's a controversy over loop targets.

01:20 This is so inside baseball, I think.

01:23 But okay.

01:24 So Ned Batchelder wrote a blog post and apparently a social media post on Blue Sky, actually.

01:34 But about what loop targets are.

01:38 So what I'm talking about is a for loop.

01:40 So if you say for, like for X in range 10 or something like that, then X gets assigned 10, like 0 through 9, right?

01:48 So what's the controversy?

01:50 The controversy is what you should put in for X.

01:53 So in his little code example, he's got for param, he's got a parameter dictionary.

01:59 And there's a query and a page size.

02:02 There's no page element, but we're going to fill that in later.

02:05 So what he's doing is he has coded for params, quote, page in iter tools count.

02:13 And what that's going to do is it's just going to go through and get 100 things at a time and put them in a page dictionary until it's empty.

02:23 And there's a break to get out of the loop once there are no results left.

02:29 I think this is kind of clever and I don't see the problem here.

02:31 So the problem is this kind of this params, this index into the dictionary.

02:37 And that's where you're putting the loop parameters.

02:38 Yeah, this is wild because I've seen exploding or expanding tuples into multiple things like for thing in dictionary, the items,

02:48 it's a maybe key comma value in the loop target.

02:52 And that's perfectly normal.

02:53 But assigning a key in the dictionary, this is new to me.

02:56 Really?

02:56 OK.

02:57 Yeah.

02:58 I'm not necessarily I'm neutral on it, whether or not it should be done, but I'm just learning about it now.

03:04 OK.

03:04 So in the discussion, so really what's happening is there's in the discussion, he talks about it, that you could have like an extra variable.

03:13 You could say page num.

03:14 So for page num in iter tools count, it makes it more clear.

03:17 And then you assign the page num to the, you assign that to the dictionary.

03:21 But really, you're just using this page num just as a temporary variable just to stuff it in there.

03:27 So I say, why not just put just to just assign it where you're going to use it.

03:32 And because this extra line of code, I don't know, I'm kind of on the fence because this is more clear.

03:38 I think it's more clear to use a temporary variable.

03:40 It's more readable.

03:41 However, there's an extra line of code.

03:43 So it is like that much more.

03:45 It's not that much more readable, I don't think.

03:47 And it's not.

03:47 And there's that.

03:49 If this in this short code snippet, not a big deal.

03:52 But in a larger for loop, you may have more reason to possibly have something break because somebody like, you know, commented that line out or something and it suddenly doesn't work.

04:02 So anyway, I'm like, this is weird.

04:05 This is controversy.

04:06 But even so he wrote this up just to talk about it and ask what people think.

04:11 And most of the responses are like, no.

04:14 Or one, I think it's a cool idea.

04:16 And I think it's a terrible idea.

04:19 Anyway, I guess I'm bringing this up because I just want to point out that with for loops, there's an implicit assignment.

04:28 And so you can use that assignment to assign to wherever you want to use the variable.

04:33 So I'm going to make an observation here.

04:35 You tell me what you think.

04:36 I believe the people who are for this are also fans of the walrus operator.

04:41 And people who are against this are anti-walrus.

04:44 Oh, that might be true.

04:45 Right.

04:46 It's kind of the same thing.

04:47 It's in a for loop, you're assigning to a variable and kind of sort of defining and assigning in a sense.

04:53 Whereas, you know, the walrus operator does it for if statements.

04:56 But it's like not assign the variable, then test it.

04:59 It's like all at once do the assign and test or assign and loop.

05:03 But there is already an assign in the for loop.

05:06 It's always assignment.

05:07 But is it colon equals?

05:08 No, I'm just kidding.

05:09 Is it colon in?

05:10 Yeah.

05:12 No, it's interesting.

05:13 It does.

05:14 Yeah.

05:14 It's for loop, the original walrus operator.

05:17 All right.

05:17 All right.

05:18 I'm actually going to come back to loops, but not yet.

05:20 I want to talk about the standard library.

05:23 No, no.

05:23 Not the one that you know.

05:24 Not the one that comes with CPython.

05:26 The async standard library.

05:28 It's the missing toolbox for an async world.

05:30 Did you know we're living in an async world?

05:32 I feel like a little Madonna is rocking in my back.

05:34 Is that Madonna?

05:35 I don't know.

05:35 Yeah.

05:37 So one of the problems is if you go and look at many of the things that you know and love,

05:42 say, iter tools or functools, those things have not been kind of blowing my mind because

05:48 they could be, have not been updated to support async.

05:52 Okay.

05:53 So when you do like functools, you know, say a decorator at functools.lrucache, that is

05:59 perfect for a synchronous function.

06:02 It doesn't work for an async one.

06:04 And why do I think that it should work for it?

06:07 Because just a couple of weeks ago, I covered my chameleon flask decorator for templates.

06:13 And I, in a hundred lines of code, I wrote something that decorates and operates on both

06:17 sync and async functions.

06:18 So surely the people who create async.io could probably like write a multi-operator decorator

06:25 deal, but they don't.

06:26 And I have no idea if there's any intention ever for them to do so.

06:30 So what this is, is it's kind of like a clone of those things.

06:33 Not totally.

06:34 It also has some other nice features, but it's like an async version of those.

06:38 So if you have an async function, you want to apply an LRU cache to it.

06:41 Well, go grab this bad boy.

06:43 So it's got a bunch of built-ins for things like asynchronous zip sum, or even converting

06:50 the list.

06:50 It has functools that supports things like I talked about LRU cache.

06:54 And if you look at it, it's looks a whole lot like you would imagine.

06:58 It has a max size.

06:59 It has typed and so on, but it operates on a waitable.

07:04 And it returns an LRU async callable, something you can await like you should the function,

07:10 rather than just a coroutine that is, I don't know, where you cache the coroutine.

07:13 I don't know.

07:14 It doesn't make a lot of sense.

07:15 So this is what this is about.

07:17 It's got a bunch of things like that.

07:19 It has the built-ins.

07:20 It's got a functools libraries for iterators, async caches, attributes, the context lib and

07:26 async context lib.

07:28 So I can do things like add async decorator in context that derives from a context decorator.

07:35 And you can basically a short circuit, the implementation, a simple implementation of a

07:39 enter and a exit.

07:40 So on.

07:41 It has a heap queue, which implements Python's heap queue, but for async, which is pretty cool.

07:46 So you want to merge and stuff.

07:48 And then it has some extra tools.

07:50 And I don't really, I haven't done enough with this to know whether this is useful, how I

07:54 would use it.

07:55 So stick with it.

07:55 Anyway, it has things like borrow, where you can borrow an async iterator to prevent it from

08:01 closing.

08:01 Okay.

08:02 I don't know about that.

08:03 You got scoped ones, but this one is really nice.

08:05 I've written this code before and it's not easy to get completely right.

08:09 It has a thing that you can just call async standard lib dot sync, giving it a async function

08:16 and it'll just, sorry, the way around, given async function, it will turn it into an async

08:21 function that you can await if you need to.

08:23 Or, yeah, or you can give it an async one as well.

08:27 And it doesn't really care.

08:29 I think it adapts.

08:30 But so a bunch of stuff going on here.

08:32 If you're like, ah, there's a bunch of these cool built-ins that I'm used to and they don't

08:35 work with async.

08:36 Well, check out the async standard lib.

08:38 Very cool.

08:39 I think it seems like we have a typed Python and non-typed Python.

08:43 And now we have async Python and synchronous Python.

08:47 And then we're going to have free-threaded and non-free-threaded.

08:50 We're going to have typed async free-threaded Python.

08:53 Yeah.

08:55 And every other combinatorial possibility there.

08:58 It's going to be nuts.

08:58 Yeah.

08:59 Yeah.

08:59 But I think this is a cool one.

09:01 It's not super popular.

09:02 Let me go back to it and see what its GitHub stars are.

09:06 But it's kind of one of those things that's like, yeah, this is definitely worth it.

09:10 I don't know.

09:10 So it has some.

09:12 Oh, here we go.

09:12 No, don't say.

09:13 240.

09:14 So it's starting to pick up some speed.

09:15 But I think it's real simple.

09:17 It's like the kind of thing that's either going to work or not work.

09:19 So if it's useful for you, go for it.

09:21 Nice.

09:21 Yeah.

09:22 It's cool.

09:22 I was going to talk about.

09:25 I haven't had breakfast yet.

09:27 So I was going to talk about some.

09:28 Maybe getting a bagel.

09:29 You want a bagel?

09:29 Okay.

09:30 Yeah.

09:30 I love bagels.

09:31 As long as it got everything, we're good.

09:33 Everything bagel.

09:34 Let's go.

09:34 Well, I am taking a look at a project called Enhanced Jack.

09:38 It's called Bagels from Enhanced Jack.

09:41 Who's Enhanced Jack's?

09:42 It's Jack's Tam.

09:44 Cool.

09:45 Aspiring student studying.

09:46 Oh, no.

09:47 University student.

09:48 Cool.

09:48 Anyway, why am I bringing up bagels?

09:50 Well, bagels is kind of a fun little expense tracker.

09:55 But I think it's a great example of using Textual for something that, you know, people probably

10:02 could sink their teeth into pretty easy.

10:04 So it's an expense tracker with multiple accounts using Textual.

10:08 I've tried it out.

10:09 It's really pretty easy.

10:10 There's a bunch of stuff I like about this.

10:12 And I'm bringing it up.

10:14 Not really because I think everybody needs an expense tracker.

10:16 But I think a lot of people look for a starter, like a starter project to possibly tweak and make

10:23 their own.

10:24 And I think this might be kind of a fun thing for people to look at.

10:27 A few things about it.

10:28 I like it that it's in the command line.

10:31 It's a textual app.

10:32 But it's also the install instructions.

10:34 I love seeing this.

10:35 It's starting to use the UV tool install so that you can just run bagels from anywhere.

10:41 It's the way.

10:42 This is the way.

10:44 This is the way.

10:44 And it's so fast to get started.

10:49 I also like that the project is pretty new.

10:53 But it's just a few weeks started.

10:57 But there's already some features included.

11:00 Features included is great.

11:02 And then also how to development setup is listed.

11:07 And it doesn't talk about how to run tests.

11:10 But that's all right.

11:10 It's running pytest, of course.

11:12 But then a roadmap of sort of things that they'd like to add to it.

11:17 It's heavily inspired by posting.

11:20 So anyway, just a fun little project.

11:22 The tests are in place.

11:24 It's not a complete coverage yet.

11:27 But it's a new project.

11:28 So if you want to help out, I think it's a good thing for people to check out.

11:32 Also, I've always wanted to write my own little expense tracker.

11:35 And so this is a good start for even if it doesn't do everything I wanted to do,

11:40 to take up the code base and maybe play with it, learn some stuff.

11:43 It's also, it's written, it's using, I can't remember.

11:46 It was using a PostgreSQL, like a SQLAlchemy.

11:51 Also, if you want to have a simple, small project that uses SQLAlchemy to learn that,

11:56 be a good one to take a look at.

11:58 Awesome.

11:58 Yeah, that's really cool.

11:59 And we've covered Postling?

12:01 What was it called?

12:02 You covered it.

12:03 The Posting.

12:04 Yeah.

12:05 A little app that was written in.

12:06 Posting, what was that?

12:07 Remember?

12:08 That was the Postman alternative for the terminal written in textual, which is cool.

12:14 Yeah, which is like a dream to work with.

12:16 It's a fun one.

12:17 Yeah, very nice.

12:18 I want to, since you brought this up, I'll throw this out here.

12:21 Not super necessarily relevant.

12:23 But I recently ran across maybe.co.

12:25 Okay.

12:26 It's almost a company, but it lost the M along the way.

12:29 Anyway, it's a fully open source OS for your personal finances running on Docker.

12:35 If you want to do self-hosting, keep all of your data private instead of like sending off

12:39 to Intuit or somewhere that it probably doesn't belong.

12:42 So anyway, people can check that out.

12:43 That's kind of cool.

12:43 Cool.

12:44 Not an endorsement.

12:44 Haven't used it, but kind of thinking about it.

12:46 I would rather bring it full circle.

12:48 We began with loops.

12:49 Let us end with loops.

12:51 Isn't that perfect for a full circle?

12:52 They go in circles, don't they?

12:54 Yeah.

12:54 So this is the early days sort of thing, but Giovanni, who is the creator of the Emmet framework

13:01 and more relevant to us, the Grannion AsyncSync Rust-based web server that powers Python bytes

13:07 and other things that we have, is creating this thing that is an alternative to UV loop.

13:13 So UV loop is a, I think it's based on LibUV.

13:16 I can't remember exactly the origins of it, but it's a loop that you can plug in as an alternative

13:22 for the AsyncIO event loop implementation.

13:25 Okay.

13:26 So why would you do that?

13:28 Well, it turns out that you can optimize some of the juggling of the little tasks.

13:34 So if you have like three tasks, one is call the website, one is talk to the database,

13:38 one is write a file or whatever, don't do anything.

13:40 The built-in one's fine.

13:41 But if you have a million tasks and you're breaking them into little tiny pieces and they're jumping

13:45 all over, like that juggling could be faster with UV loop.

13:48 And I think that's where we're going to see it go with our loop.

13:52 So our loop is an Async event loop implemented in Rust and it's coming along.

13:57 It is a work in progress and not ready.

13:59 But the reason I bring it up early in its life here is it's a really cool option.

14:03 We've seen how significant the improvements for other Rust things like Pydantic and UV have

14:09 been.

14:10 And so if you're passionate about this and you want to have maybe a little influence

14:13 before it gets fully baked as this thing's coming to life, you know, jump in.

14:17 The way you use it is just like UV.

14:19 It's super easy.

14:20 Just before you do Async things, you just say AsyncIO.setEventLoopPolicy, which is a factory,

14:26 I'm thinking.

14:27 Kind of a factory method more.

14:28 I don't know, whatever.

14:29 And you just give it Rloop.EventLoopPolicy.

14:31 And that means anytime code creates a new event loop, it's going to be using the factory

14:36 method from Rloop rather than the built-in one.

14:38 Off you go.

14:39 Cool.

14:40 Yeah.

14:40 Well, cool.

14:40 Well, that's it for our items, right?

14:42 I think so.

14:43 Yeah.

14:44 I think it is.

14:44 Extras?

14:45 What do you think?

14:46 Extras?

14:47 Yeah, I have a few.

14:48 You want me to jump in?

14:49 Jump in.

14:49 I am, I've had a lot of stuff going on in personal life lately and trying to fit everything into

14:56 my life is sometimes difficult.

14:58 So I've been reading, reading, reading in quotes, listening to the audio book for 4,000

15:04 weeks, a time management, time management for mortals.

15:07 It's a book by Oliver Berkman.

15:09 And I'm listening to it for the second time now in the last couple of weeks.

15:13 I just picked it up a week or so ago, but I'm really enjoying it.

15:17 And it's more of a, you can't get everything done, but that's okay.

15:22 Just how to be okay with the limitations of life.

15:26 So very refreshing time management book.

15:29 It's also got some practical advice too, but it's great.

15:33 So highly, highly recommend that.

15:36 It's advent of, advent of code time.

15:39 And I've heard of the, so I've definitely heard of the advent of code, but the advent of

15:46 code.com.

15:47 Very cool.

15:47 A lot of people do that every year for in December to do little code snippets every year.

15:53 But today I came across Adrian Roselli's development advent calendars for 2024.

15:58 So if advent of code isn't quite what up your alley, there's a whole bunch here.

16:04 There's HTML hell advent calendar.

16:06 There's a whole bunch of code and code-based advent calendars here.

16:10 So none of them Python specific.

16:13 There's a Perl specific, but C# advent of cyber.

16:17 Just quite a, quite a few fun, different calendars.

16:20 CSS.

16:21 If you wanted to learn CSS, maybe there's just CSS.

16:23 The Joomla advent calendar.

16:24 You too can host it.

16:27 So yeah.

16:28 And apparently it's gone, it's gone back.

16:30 He's got links back to 2010.

16:33 So it's fun.

16:34 Wow.

16:34 Yeah.

16:35 If you get your homework done early, you can do more advent of calendars.

16:38 Yeah.

16:39 I don't, so I tried, I tried advent of code a couple of years ago.

16:43 And then I just realized that like in my free time, I've, I'm doing so much code coding at

16:48 work, side hustles and everything that I kind of want to do things like draw and paint and

16:54 cook and things like that when, when I'm doing other stuff.

16:58 So anyway, I hear you.

16:59 I'm the same.

17:00 I already do a lot of programming.

17:01 Even in my spare time, I do more programming.

17:03 Yeah.

17:04 And so I don't need extra ones, but I know it helps people, especially people are trying

17:07 to learn a topic.

17:08 It can kind of force you if you don't have a way to apply it.

17:11 And today is December 2nd, Monday, traditionally a cyber Monday.

17:15 And it is the last day for the black Friday sale, turkey sale for the python test.com courses,

17:23 however.

17:24 And so I'll take, I'll take off the automatic.

17:26 But if you, if you hit me, if you're listening to this later, you know, close in it, close

17:32 ish to December 2nd, direct message me on, on blue sky and I'll hook you up.

17:37 So anyway, that's it.

17:38 Blue sky.

17:39 That's a good transition.

17:40 All right.

17:41 Also black Friday at talk python.

17:43 So talkpython.fm/ black Friday, 20 to 50% off the course library.

17:47 Nice logo there.

17:48 The image is great.

17:49 Thanks.

17:50 That's pure CSS, by the way.

17:51 That's some mad glow in CSS.

17:53 Yeah, it's cool.

17:54 Yeah.

17:54 Awesome.

17:55 All right.

17:55 So we'd talk blue sky.

17:57 So I just, you know, last week when I finished producing the show and I published it onto the

18:03 internet, typically go to the social networks and I'll do a quick post.

18:06 Hey, new episodes out.

18:06 Enjoy it.

18:07 If you want it.

18:07 This one had a little guitar solo at the end, which was super fun.

18:11 And so it said latest episode out for 11 TLS client.

18:14 Hello.

18:15 Guitar solo was the name.

18:16 And I published that and I published it at the same time with the same text to X,

18:22 Fostadon, Mastadon and blue sky.

18:25 And I just thought, huh, I wonder what the engagement looks like, because I don't know how you've been

18:29 feeling, Brian, but I feel like people, I tried and tried to get folks to go to Mastadon

18:34 and like some, some people came, came along, but a bunch just didn't, you know, they were

18:39 just, you would go back to X and you would just see them all talking there.

18:42 I'm like, man, I don't know.

18:43 And I'm not necessarily super against X.

18:45 I'm a little bit against it, but I'm not a lot, but it's just, it's become not very practical

18:50 as you'll see in just a second.

18:51 Not very useful.

18:52 So, you know, you want to go talk to yourself in a closet.

18:55 It's awesome.

18:56 You want to talk to other people?

18:57 Well, that's so.

18:58 Anyway, so my, my test here, this is a non-scientific test that I put out there.

19:03 What is the interaction level per platform?

19:07 And what you have to keep in mind before I tell you guys this, there's a dramatic difference

19:11 in number of followers, subscribers, whatever they're called at that particular location.

19:16 Okay.

19:16 So basically take the numbers, divide by the number of followers and consider that like

19:20 the amount of interaction.

19:21 The reason I tell you this is you may want to come follow us and join us on blue sky, but

19:25 that's, that's a bit of a get in the head.

19:27 So check this out.

19:27 So over on X, we have 27,000 followers.

19:32 Okay.

19:32 Posting this exact message one week ago, we got eight likes and two retweets, reposts,

19:38 boost, name it, whatever.

19:40 Yeah.

19:40 So I don't know what that is.

19:42 Two divided by 27,000, but it's a small percentage.

19:45 Okay.

19:45 Fostadon, Mastodon, right?

19:47 It's not Fostadon, Mastodon, because it's across all, all the Fediverse.

19:51 Same posts, identical.

19:53 Here we have 3,000.

19:55 Let me see.

19:55 3,100 followers.

19:57 Okay.

19:57 So yeah, that's great.

19:59 But this is almost nine times less.

20:01 Something like that, right?

20:02 It's many, many less times, but four boosts, which is not out of control, honestly, but

20:07 it's in two favorites, two likes.

20:08 But as a ratio, it's still a lot more because multiply by nine, right?

20:13 Yeah.

20:13 Blue sky, which we've been there a couple of days.

20:16 We have something like that.

20:17 We only have a, somebody hover, different hover targets, 750 followers.

20:23 Yeah.

20:24 Follow us on blue sky.

20:25 Get over there.

20:25 Yeah.

20:26 Anyway, we have 16 likes and two reposts and a quote posts and then some conversation

20:31 about it.

20:32 And that's 30 times less followers and more engagement than both platforms.

20:37 So anyway, I, y'all take that for what it is.

20:40 I just thought that was an interesting experiment.

20:42 What do you think, Brian?

20:43 Yeah, I'm finding, I'm finding blue sky more interactive.

20:46 I've got about this approximate same numbers on a fostered on or mastodon and, and blue sky

20:53 and, and I'll, I'll get like twice as much interaction on, I mean, approximate gut feel twice as

21:00 much interaction on blue skies.

21:01 I do on, on mastodon.

21:04 Yeah.

21:04 Yeah.

21:05 Yeah.

21:05 And I'm not saying this to bag on some social network or try to promote other too much.

21:10 I was like, people are trying to find their community.

21:12 I think right now this is where the community is.

21:15 And if you go here, you can go to my account and go to the starter pack and there's the

21:19 Python personalities and you can follow a bunch of us.

21:22 The onboarding experience is way better.

21:24 The, the onboarding experience for mastodon still feels like it's too many decisions right

21:30 at once.

21:31 And then it's like, if you wanted to play games on Linux, you probably could.

21:35 Yeah.

21:37 Yeah.

21:38 And I'm a, by the way, I'm, I'm no longer on X.

21:41 So don't notify me there.

21:42 Yeah.

21:43 Sounds good.

21:43 All right.

21:44 A couple of other real quick things on episode 277, I believe.

21:47 I don't have my show notes up, but I'm pretty sure that was the number.

21:49 Way back when I talked about certain string enumeration, which is a thing that basically

21:55 backports the string enum from Python 3.11.

22:00 So it can be used in other places.

22:01 It's super cool.

22:02 It's even better than the built-in one, by the way.

22:04 So I can have, I can say, give me a string enum and derive a class from that.

22:10 That becomes an enumeration where you say that thing dot, but then you have the fields and

22:15 just say equals auto, auto, auto, auto.

22:17 And it'll actually set it to the text of whatever the variable is.

22:20 If you refactor, rename it, it will apply that refactoring to the string version and the variable

22:25 version of it.

22:26 And you can even do things like use a lowercase or an uppercase one as the base class, a lowercase

22:32 string enum.

22:33 And that will make the string version lowercase.

22:35 Even if you have a different, a different representation for the variable names.

22:40 Anyway, the re why did I do this?

22:41 Because on my list monk little client, somebody came and said, why doesn't this work on anything

22:45 less than 3.11?

22:46 I'm like, because it uses string enum from 3.11.

22:50 So I'm like, you know what?

22:51 I'll just, I'll just derive from the other class.

22:53 Add that as a dependency.

22:54 I already had dependencies.

22:55 That's one more small one.

22:56 And guess what?

22:57 Now it supports older versions of Python.

22:59 I stopped it at 3.10 because I want nice type-ins.

23:03 I don't want ugly type-ins.

23:04 You're nicer than me, man.

23:06 I'm like, it doesn't support it.

23:09 It doesn't, because I don't want to support it.

23:11 Yeah.

23:12 But then I was curious, like, well, why doesn't it?

23:14 And I remember we talked about this thing.

23:15 And if I literally just change a base class and don't do anything else, that was pretty

23:19 low effort.

23:20 So, you know, it took like five minutes, right?

23:22 All right.

23:22 Yeah.

23:23 So anyway.

23:24 All right.

23:25 That's it for my extras.

23:26 Shall we close it out with a joke?

23:29 Yeah.

23:29 Let's do something funny.

23:30 Man.

23:31 I know we were just talking, we just experienced a food holiday in the United States last week

23:35 with Thanksgiving and all.

23:36 And I hope everyone's was good.

23:38 If you celebrate it.

23:39 However, sometimes there's a lot of food prep and it can be, it can be hard, right?

23:43 It can be hard.

23:44 Like you're shopping, you're chopping all of these things.

23:47 So here is a programmer or just a computer user really who has a grocery list.

23:52 And the grocery list says eggs, corn, tomatoes, onions, rice, milk.

23:56 They decide they don't want the onions.

23:57 So they highlight it and they hit control X and a tear forms in their eye because of course

24:02 it does when you cut onions.

24:03 That's really funny.

24:06 It's pretty good, right?

24:07 I mean, yeah, it's good.

24:09 I don't know why.

24:10 It's cheesy.

24:11 It's cheesy.

24:11 It's a little cheesy.

24:12 A little cheesy.

24:13 Yeah.

24:15 I'll do one more for us.

24:17 That's straight out of the comments because Cohen did a pretty good one.

24:20 When we were talking about the loop targets, it says, how about this?

24:23 We're putting two controversial ideas together.

24:25 Sum of sum of numbers plus X for numbers of zero in numbers.

24:31 If X colon equal numbers squared is such and such.

24:35 Like, oh my goodness.

24:36 This is a lot of stuff going.

24:38 I said, here's a job interview for you.

24:40 Job interview question.

24:42 If you answer with a straight face, you fail.

24:43 No, it's good.

24:46 Yeah.

24:47 If you think that's all right.

24:48 Nope.

24:49 You're out.

24:49 I don't know.

24:50 Not seriously, but as a joke, it's pretty good.

24:53 Yeah.

24:53 Job interview stuff.

24:56 Job interviews are tough.

24:57 I know a lot of people are going through that now.

24:58 Yeah.

24:59 Well, you know, the control X part and also the job interview might bring a tear to the

25:03 heights.

25:03 I don't know.

25:05 I haven't, I haven't applied for a job in, well, since the nineties, however, which is

25:10 insane.

25:10 That is insane, man.

25:12 It's actually insane.

25:13 but because all my job transitions have been like, Hey, you'd be awesome.

25:17 Like, why don't you consider working for, it was more of the other way around, you know,

25:21 which is pretty fortunate, but it sounds like your resume has like, like a lawn mowing

25:26 on it still or something.

25:27 Exactly.

25:28 I work for companies.

25:30 They just reached out to me and said, would you consider working for us?

25:33 I know, but you probably didn't have to, you haven't probably had to update your resume

25:36 for a long time.

25:37 Yeah.

25:37 My LinkedIn is like, I'm, I've had some experience at a pizza place and I've done lawn mowing.

25:43 So that was good.

25:45 No, but I do.

25:45 I was just going to say, I think it's probably pretty brutal.

25:47 You've got to, you know, pass the AI gauntlets and all sorts of weird business and take home

25:52 quizzes.

25:52 And I can see why there would be tears.

25:54 But not for this in the show.

25:56 Thank you everyone for coming.

25:58 Thank you, Brian.

25:58 See y'all later.

Back to show page