Python Bytes - #412 Closing the loop

Episode Date: December 2, 2024

Topics covered in this episode: Loop targets asyncstdlib Bagels: TUI Expense Tracker rloop: An AsyncIO event loop implemented in Rust Extras Joke Watch on YouTube About the show Sponsored by us!... Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Brian #1: Loop targets Ned Batchelder I don’t think I would have covered this had it not been the surprising opposition to Ned’s code. Here’s the snippet: params = { "query": QUERY, "page_size": 100, } *# Get page=0, page=1, page=2, ...* **for** params["page"] in itertools.count(): data = requests.get(SEARCH_URL, params).json() **if** not data["results"]: **break** ... Ned is utilizing the assignment in the for loop to use the value of count() and store it into the params["page"]. The article includes another version with a temp variable page_num, which I think the naysayers would prefer. But frankly, I think both are fine. Why not put the value right where you want it? Michael #2: asyncstdlib The asyncstdlib library re-implements functions and classes of the Python standard library to make them compatible with async callables, iterables and context managers. It is fully agnostic to async event loops and seamlessly works with asyncio, third-party libraries such as trio, as well as any custom async event loop. Full set of async versions of advantageous standard library helpers, such as zip, map, enumerate, functools.reduce, itertools.tee, itertools.groupby and many others. Safe handling of async iterators to ensure prompt cleanup, as well as various helpers to simplify safely using custom async iterators. Small but powerful toolset to seamlessly integrate existing sync code into async programs and libraries. Brian #3: Bagels: TUI Expense Tracker Jax Tam “Bagels expense tracker is a TUI application where you can track and analyse your money flow, with convenience oriented features and a complete interface. Why an expense tracker in the terminal? I found it easier to build a habit and keep an accurate track of my expenses if I do it at the end of the day, instead of on the go. So why not in the terminal where it's fast, and I can keep all my data locally?” Who hasn’t wanted to write their own expense tracker? This implementation is fun for lots of reasons It’s still new and pretty small, so forking it for your own uses should be easy Built on textual is fun install instructions based on uv tool seems to be the new normal: uv tool install --python 3.13 bagels test suite started pretty useful as is, actually Nice that it includes a roadmap of future goals Would be a fun project to help out with for anyone looking for anyone looking for a shiny new codebase to contribute to. Michael #4: rloop: An AsyncIO event loop implemented in Rust An AsyncIO event loop implemented in Rust From Giovanni Barillari, Creator of Granian RLoop is an AsyncIO event loop implemented in Rust on top of the mio crate. Disclaimer: This is a work in progress and definitely not ready for production usage. Run asyncio.set_event_loop_policy(rloop.EventLoopPolicy()) and done. Similar to uvloop. Extras Brian: I’m currently listening to Four Thousand Weeks - Time Management for Mortals by Oliver Burkeman for the second time. Highly recommend. Development Advent Calendars for 2024 - Adrian Roselli Black Friday at PythonTest.com Michael: Docker cluster monitor Compare engagement across Mastodon / Bsky / Twitter https://bsky.app/profile/pythonbytes.fm/post/3lbseqgr5m22z https://fosstodon.org/@pythonbytes/113545509565796190 https://x.com/pythonbytes/status/1861166179236319288 Back on #277 we talked about StrEnum. Got a nice chance to use it this weekend. Maybe Finance Go sponsor a bunch of projects on GitHub Black Friday at Talk Python Joke: CTRL + X onion

Transcript
Discussion (0)
Starting point is 00:00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. This is episode 412, recorded Monday, December 2nd, 2024. I am Michael Kennedy. And I am Brian Ocken. This episode is brought to you by us, especially our Black Friday things. Visit our website for the Black Friday things. You have 14 hours, so make haste. Make haste. Hopefully, hopefully listen straight away. And if not,
Starting point is 00:00:26 you know, thanks for supporting our work and check out our courses and things like that. Links are in the show notes. You can also get the summary of every episode delivered directly to you, handcrafted, artisanal newsletter by Brian Ocken here. So check that out. And we mentioned this last time, but we are now BlueSkyians. We now live in the sky, the blue sky. In particular, Python Bytes is over there with the handle python, you know, at pythonbytes.fm.
Starting point is 00:00:54 And both Brian and I are linked directly from there. So come follow us. I have a little extra, extra, extra to follow up on BlueSky and Mastodon and twitter x twitter whatever all of these things so i think you will find that interesting but right now i would like to know brian what you find interesting i find interesting that there's a controversy over loop targets this is so inside baseball i think but um the okay so ned batchelder uh wrote a blog post and apparently a uh social media post on um on uh on blue sky actually but um
Starting point is 00:01:36 about what loop targets are so what i'm talking about is a four loop so if you say four like four x in range 10 or something like that then x X gets assigned 10, like one zero through nine. Right. So what's the controversy? The controversy is what you should put in for X. So in his little code example, he's got for for param. He's got a parameter dictionary and there's a query in a page size. There's no page element, but we're going to fill that in later. So what he's doing is he has coded for params, quote, page in iter tools count.
Starting point is 00:02:14 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. And there's a break to get out of the loop once there are no results left. I think this is kind of clever, and I don't see the problem here. So the problem is this kind of this index into the dictionary,
Starting point is 00:02:37 and that's where you're putting the loop parameters. Yeah, this is wild because I've seen exploding or expanding tuples into multiple things. Like for thing in dictionary, the items, you'd say maybe key comma value in the loop target. And that's perfectly normal. But assigning a key in a dictionary, this is new to me. Really? Okay.
Starting point is 00:02:57 Yeah. I'm not necessarily, I'm neutral on it's whether or not it should be done, but I'm just learning about it now. Okay. neutral on it whether or not it should be done but i'm just learning about it now okay so that the in the discussion so really what's happening is there's a there's in the discussion he talks about it that you could have like an extra variable you could say page num so for page num in iter tools count it makes it more clear and then you assign the page num to the you assign that to the dictionary but really you're just using this page num just as a temporary variable just to stuff it in there so i say why not just put just just assign it where you're gonna use it and because this extra line of code i i don't know i'm kind of on the fence because
Starting point is 00:03:36 this is more clear i think it's more clear to use a temporary variable it's more readable however there's an extra line of code so it is like that much more it's not that much more readable. However, there's an extra line of code. So it is like that much more. It's not that much more readable, I don't think. And it's not. And there's that. If this in this short code snippet, not a big deal. 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.
Starting point is 00:04:02 So anyway, I'm'm like this is weird this is controversy but even he so he wrote this up just to talk about it and ask what people think and most of the responses are like no or one i think it's a cool idea and uh i think it's a terrible idea anyway uh i guess i i'm bringing this up because i just want to point out that um with for loops it's there's an implicit assignment and so you can use that assignment to assign to wherever you want to use the variable so i'm gonna make an observation here you tell me what you think i believe the people who are for this are also fans of the walrus operator and people who are against this are anti-walrus oh that might be true right it's kind of the samerus operator. And people who are against this are anti-walrus. Oh, that might be true.
Starting point is 00:04:45 Right? It's kind of the same thing. It's in a for loop, you're assigning to a variable and kind of sort of defining and assigning in a sense. Whereas, you know, the walrus operator does it for if statements. But it's like not assign the variable, then test it. It's like all at once do the assign and test
Starting point is 00:05:02 or assign and loop. But there is already an assign in the for loop. It's always assignment. But is it colon equals? No, just kidding. Is it colon in? Yeah, anyway. No, it's interesting.
Starting point is 00:05:13 It does. Yeah. It's for loop, the original walrus operator. All right. All right. I'm actually going to come back to loops, but not yet. I want to talk about the standard library. No, no, not the one that you know.
Starting point is 00:05:24 Not the one that comes with CPython. talk about the standard library. No, no, not the one that you know. Not the one that comes with CPython. The async standard library. It's the missing toolbox for an async world. Did you know we're living in an async world? I feel like Madonna is rocking in my back. Is that Madonna? I don't know. Yeah.
Starting point is 00:05:37 So one of the problems is if you go and look at many of the things that you know and love, say iter tools or func tools, those things have not been, kind of blowing my mind, because they could be, have not been updated to support async. Okay? So when you do like func tools, you know, say a decorator at functools.lrucache,
Starting point is 00:05:59 that is perfect for a synchronous function. It doesn't work for an async one. And why do I think that it should work for it? Because just a couple of weeks ago, I covered my chameleon flask decorator for templates. And I, in a hundred lines of code, I wrote something that decorates and operates on both sync and async functions. So surely the people who create async IO could probably like write a multi operator decorator deal, but they don't. And I have no idea if there's any intention ever for them to do so. So what this is, is it's kind
Starting point is 00:06:32 of like a clone of those things. Not totally. It also has some other nice features, but it's like an async version of those. So if you have an async function, you want to apply an LRU cache to it, well, go grab this bad boy. So it's got a bunch of built-ins for things like asynchronous ZipSum or even converting to list. It has func tools that supports things like I talked about, LRU cache. And if you look at it, it looks a whole lot like you would imagine. It has a max size. It has typed and so on.
Starting point is 00:07:02 But it operates on awaitables, and it returns an LRU async callable, something you can await like you should the function, rather than just a coroutine that is, I don't know, you cache the coroutine. I don't know. It doesn't make a lot of sense. So this is what this is about.
Starting point is 00:07:18 It's got a bunch of things like that. It has the built-ins. It's got the functuals libraries for iterators, async caches, attributes, the context lib, an async context lib. So I can do things like add an async decorator and context that derives from a context decorator. And you can basically short circuit the implementation, a simple implementation of a enter and a exit, so on. It has a heap queue, which implements Python's heap queue, but for async, which is pretty cool.
Starting point is 00:07:48 So you want to merge and stuff. And then it has some extra tools. And I don't really, I haven't done enough with this to know whether this is useful, how I would use it. So stick with it. Anyway, it has things like borrow, where you can borrow an async iterator to prevent it from closing. Okay, I don't know about that.
Starting point is 00:08:03 You got scoped ones, But this one is really nice. I've written this code before, and it's not easy to get completely right. It has a thing that you can just call asyncstandardlib.sync, giving it an async function, and it'll just, sorry, the way I have it, given a sync function, it will turn it into an async function that you can await if you need to. That's cool.
Starting point is 00:08:24 Yeah, or you can give it an async one as well and it doesn't really care i think it adapts but so a bunch of stuff going on here if you're like ah there's a bunch of these cool built-ins that i'm used to and they don't work with async well check out the async standard lib very cool i think it seems like there we have a we have typed python and non-typed python and and now we have async Python and synchronous Python, and then we're going to have free-threaded and non-free-threaded Python. We're going to have typed async free-threaded Python. Yeah.
Starting point is 00:08:55 And every other combinatorial possibility there. It's going to be nuts. Yeah. But I think this is a cool one. It's not super popular. Let me go back to it and see what its GitHub stars are. But it's kind of one of those things that's like, yeah, this is definitely worth it. I don't know.
Starting point is 00:09:11 So it has some, oh, here we go. No, don't say. 240. So it's starting to pick up some speed. But I think it's real simple. It's like the kind of thing that's either going to work or not work. So if it's useful for you, go for it. Nice.
Starting point is 00:09:21 Yeah, it's cool. I was going to talk about, I haven't had breakfast yet. So i was going to talk about i'm i have i haven't had breakfast yet so i was going to talk about some maybe getting a bagel you want a bagel okay yeah i mean i love bagels as long as i got everything we're good and everything bagel let's go well um i am taking a look at a project called enhanced jack it's it's called bagels from enhanced jack who's enhanced jacks it's a jack's tam um cool aspiring student studying oh no university student cool anyway why am i bringing up bagels well bagels is um is kind of a fun little uh expense tracker but i think it's a great it's a great example of using textual uh
Starting point is 00:09:59 for um something that you know people probably could sink their teeth into pretty easy so it's expense tracker uh with multiple accounts using Textual. I've tried it out. It's really pretty easy. There's a bunch of stuff I like about this. And I'm bringing it up, not really because I think everybody needs an expense tracker, but I think a lot of people look for a starter project to possibly tweak and make their own. And I think this might be kind of a fun thing for people to look at. A few things about it.
Starting point is 00:10:28 I like it that it's in the command line. It's a textual app. But it's also the install instructions. I love seeing this. It's starting to use the UV tool install so that you can just run bagels from anywhere. It's the way. This is the way. This is the way.
Starting point is 00:10:47 And it's so fast to get started uh the um there's quite i also like that the project is it's pretty new um but it's uh yeah it's just a like a few weeks started but the um there's already like some features included features included is great and then. And then also how to development setup is listed and how to, no, it doesn't talk about how to run tests, but that's all right. It's running PyTest, of course. But then a roadmap of like sort of things that they'd like to add to it.
Starting point is 00:11:18 Heavily inspired by posting. So anyway, just a fun little project. The tests are in place. It's not a complete coverage yet, but it's a new project. So if you want to help out, I think it's a good thing for people to check out. Also, I've always wanted to write my own little expense tracker. And so this is a good start for, even if it doesn't do everything I want it to do, to take up the code base and maybe play with it, learn some stuff.
Starting point is 00:11:43 It's also written written it's using can't remember it was using a post like a SQL alchemy also if you want to have a simple small project that uses SQL alchemy to learn that be a good one to take a look at awesome yeah that's really cool
Starting point is 00:11:59 and we covered postling what was it called the posting that was written in Posting. That was the Postman alternative for the terminal written in textual, which is cool.
Starting point is 00:12:14 Yeah, which is like a dream to work with. It's a fun one. Very nice. Since you brought this up, I'll throw this out here. Not super necessarily relevant, but I recently ran across Maybe.co. It's almost a company, but they lost the M along the way. Anyway, it's a fully open source OS for your personal finances running on Docker. If you want to do self-hosting, keep all of your data private instead of like sending off to Intuit or somewhere that it
Starting point is 00:12:40 probably doesn't belong. So anyway, people can check that out. That's kind of cool. Not an endorsement. Haven't used it, but kind of thinking about it. I would rather bring it full circle. We began with loops, let us end with loops. Isn't that perfect for a full circle? They go in circles, don't they? Yeah.
Starting point is 00:12:54 So this is an early days sort of thing, but Giovanni, who is the creator of the Emmet framework and more relevant to us, the Grainian async sync Rust-based web server that powers Python bytes and other things that we have is creating this thing that is an alternative to UV loop. So UV loop is a, I think it's based on lib UV. I can't remember exactly the origins of it,
Starting point is 00:13:18 but it's a loop that you can plug in as an alternative for the async IO event loop implementation. Okay. So why would you do that? Well, it turns out that you can optimize some of the juggling of the little tasks. So if you have like three tasks, one is call the website, one is talk to the database, one is write a file or whatever, don't do anything. The built-in one's fine.
Starting point is 00:13:41 But if you have a million tasks and you're breaking up into little tiny pieces and they're jumping all over, like that juggling could be faster with UV loop. And I think that's where we're going to see it go with R loop. So R loop is an async event loop implemented in Rust and it's coming along. It is a work in progress and not ready. But the reason I bring it up early in its life here is it's a really cool option. We've seen how significant the improvements for other Rust things like Pydantic and UV have been. And so if you're passionate about this and you want to have maybe a little influence before it gets fully baked, as this thing's coming to life, you know, jump in. The way you use it is just like UV, super easy. Just before you do async things, you just say async IO dot set event loop policy,
Starting point is 00:14:25 which is a factory. I'm thinking kind of a factory method more. I don't know. Whatever. And you just give it our loop dot event loop policy. And that means anytime code creates a new event loop, it's going to be using the factory method from our loop rather than the built-in one.
Starting point is 00:14:38 Off you go. Cool. Yeah. Well, cool. Well, that's it for our items, right?
Starting point is 00:14:42 I think so. Yeah, I think it is extras what do you think extras yeah i have a few let me jump in jump in um i am uh i've had a lot of stuff going on personal life lately and trying to fit everything into my life is sometimes difficult so i'm i've been reading i've reading reading in quotes listening to the audio book for 4000 weeks, a time management, time management for mortals. It's a book by Oliver Berkman. And I'm listening to it for the second time now in the last couple weeks, I just picked it up a week or so ago. But I'm really enjoying it.
Starting point is 00:15:16 And it's, it's more of a more of a you can't get everything done. But that's okay. Um, just, uh, how to be okay with the limitations of life. Um, so very refreshing time management book. Um, it's also got some practical advice too, but, uh, it's great. So, uh, highly, highly recommend that. Um, it's advent of advent of code time. And I've heard of the, so I've definitely heard of the Advent of Code, but at adventofcode.com, very cool. A lot of people do that every year in December to do little code snippets every year. But today I came across Adrian Roselli's development Advent calendars for 2024. So if Advent of Code isn't quite up your alley, there's a whole bunch here. There's HTML Hell Advent Calendar.
Starting point is 00:16:07 There's a whole bunch of code-based Advent Calendars here. So none of them Python-specific. There's a Perl-specific, but C Sharp, Advent of Cyber. Just quite a few fun different calendars. CSS, if you wanted to learn CSS, maybe there's a CSS. The Joomla Advent Calendar. You too can host it so yeah um and apparently he's going it's gone back since he's got links back to 2010 so it's fun wow um yeah if you get your homework done early you can do more advent account yeah i don't
Starting point is 00:16:40 so i tried um advent of code a couple years ago, and then I just realized that in my free time, I'm doing so much coding at work, besides hassles and everything, that I kind of want to do things like draw and paint and cook and things like that when I'm doing other stuff. Anyway. I hear you. I'm the same.
Starting point is 00:17:00 I already do a lot of programming. Even in my spare time, I do more programming. Yeah. And so I don't need extra ones, but I know it helps people, especially people who are trying to learn a topic. It can kind of force you if you don't have a way to apply it. And today is December 2nd, Monday, traditionally Cyber Monday, and it is the last day for the Black Friday sale,
Starting point is 00:17:20 Turkey sale for the PythonTest.com courses, however. And so I'll take off the automatic but if you um if you hit me if you're listening to this later you know close in it close ish to december 2nd uh direct message me on um on blue sky and i'll hook you up so anyway blue sky that's a good transition all right also black friday talk python so talk python.fm slash black friday 20 to 50 off the course library nice logo there the image is great thanks that's pure css by the way that's some mad glow in css yeah it's cool yeah awesome all right so we talk blue sky so i just you know last week when i finished producing the show and i published it onto the internet
Starting point is 00:18:03 typically go to the social networks and I'll do a quick post. Hey, new episodes out. Enjoy it if you want. This one had a little guitar solo at the end, which was super fun. And so it said, latest episode out, 4.11, TLS client, hello, guitar solo was the name. And I published that. And I published it at the same time with the same text to X, Fostadon, Macedon, and Blue Sky. And I just thought, huh, I wonder what the engagement looks like.
Starting point is 00:18:27 Because I don't know how you've been feeling, Brian, but I feel like people, I tried and tried to get folks to go to Macedon and some people came along, but a bunch just didn't. You would go back to X and you would just see them all talking there. I'm like, man, I don't know. And I'm not necessarily super against X. I'm a little bit against it, but I'm not a lot, but it's just, it's become not very practical as you'll see in just a second, not very useful. So, you know, you want to go talk to yourself in a closet. It's awesome. You want to talk to other people? Well,
Starting point is 00:18:57 that's so. Anyway, so my, my test here, this is a non-scientific test that I put out there. What is the interaction level per platform? And what you have to keep in mind before I tell you guys this, there's a dramatic difference in number of followers, subscribers, whatever they're called at that particular location. Okay. So basically take the numbers, divide by the number of followers and consider that like the amount of interaction. The reason I tell you this is you may want to come follow us and join us on Blue Sky, but that's a bit of a getting ahead. So check this out. So over on X, we have 27,000 followers. Okay. Posting this exact message one week ago, we got eight likes
Starting point is 00:19:36 and two retweets, reposts, boost, name it, whatever. Yeah. So I don't know what that is. Two divided by 27,000, but it's a small percentage. Okay. Fostodon, Mastodon, right? It's not Fostodon, Mastodon, because it's across all the Fediverse. Same post, identical. Here we have 3,000, let me see, 3,100 followers. Okay.
Starting point is 00:19:57 So yeah, that's great. But this is almost nine times less, something like that, right? It's many, many less times, but four boosts, which is not out of control, honestly, and two favorites, two likes. But as a ratio, it's still a lot more because you multiply by nine, right? Yeah. Blue Sky, which we've been there a couple of days, we had something like that.
Starting point is 00:20:18 We only have a, somebody hover, different hover targets, 750 followers. Yeah. Follow us on Blue Sky. Get over there. Yeah. Anyway, we have 16 likes and two reposts and a quote post and then some conversation about it. And that's 30 times less followers and more engagement than both platforms. So anyway, I, y'all take that for what it is.
Starting point is 00:20:40 I just thought that was an interesting experiment. What do you think, Brian? Yeah, I'm finding, I'm finding Blue Sky more interactive. I've got about the approximate same numbers on Fostodon or Mastodon and Blue Sky. And I'll get like twice as much interaction on, I mean, approximate gut feel, twice as much interaction on Blue Sky
Starting point is 00:21:01 as I do on Mastodon. Yeah. Yeah, and I'm not saying this to bag on some social network or try to promote uh they're too much i'm like people are trying to find their community i think right now this is where the community is and if you go here you can go to my account and go to the starter pack and there's the python personalities and you can follow a bunch of us the onboarding experience is way better the the onboarding experience for mastodon still feels like it's too many decisions right at once and then it's like if you wanted to play games on linux you probably could yeah yeah and i'm uh by
Starting point is 00:21:39 the way i'm i'm no longer on x so don't notify me there yeah sounds good all right a couple of other real quick things. On episode 277, I believe, and I'm not showing this up, but I'm pretty sure that was the number, way back when I talked about strnum, string enumeration, which is a thing that basically backports the string enum from Python 3.11, so it can be used in other places. It's super cool.
Starting point is 00:22:02 It's even better than the built-in one, by the way. So I can have, I can say, give me a string enum so it can be used in other places. It's super cool. It's even better than the built-in one, by the way. So I can say, give me a string enum and derive a class from that. That becomes an enumeration where you say that thing dot, but then you have the fields and just say equals auto, auto, auto, auto, and it'll actually set it to the text of whatever the variable is.
Starting point is 00:22:20 If you refactor, rename it, it will apply that refactoring to the string version and the variable version of it. And you can even do things like use a lowercase or an uppercase one as the base class, a lowercase strenum. And that will make the string version lowercase, even if you have a different representation for the variable names. Anyway, why did I do this? Because on my ListMonk little client, somebody came and said, why doesn't this work on anything less than 3.11? I'm like, because it uses string in them from 3.11.
Starting point is 00:22:50 So I'm like, you know what? I'll just derive for the other class. Add that as a dependency. I already had dependencies. That's one more small one. And guess what? Now it supports older versions of Python. I stopped it at 3.10 because I want nice type hints.
Starting point is 00:23:03 I don't want ugly type hints. You're nicer than me, man. I'm like, it doesn't support it. So it doesn't, because I don't want to support it. Yeah, but then I was curious, like, well, why doesn't it? And I remember we talked about this thing. And if I literally just change a bass class and don't do anything else, that was pretty low effort.
Starting point is 00:23:20 So, you know, it took like five minutes, right? All right. Yeah. So anyway. All right. That's So anyway. All right. That's it for my extras. Shall we close it out with a joke? Yeah.
Starting point is 00:23:29 Let's do something funny. Man, I know we were just talking. We just experienced a food holiday in the United States last week with Thanksgiving and all. And I hope everyone's was good if you celebrate it. However, sometimes there's a lot of food prep and it can be, it can be hard, right? It can be hard. Like you're shopping, you're chopping all of these things. So here is a programmer or just a computer user, really, who has a grocery list. And the grocery list says eggs, corn, tomatoes, onions, rice,
Starting point is 00:23:55 milk. They decide they don't want the onions. So they highlight it and they hit control X and a tear forms in their eye because of course it does when you cut onions. That's really funny. It's pretty good, right? I mean, yeah, it's good. I don't know why. It's cheesy. It's a little cheesy.
Starting point is 00:24:13 Well, it's easy. Yeah, I'll do one more for us. That's straight out of the comments because Cohen did a pretty good one. When we were talking about the loop targets, he says, how about this? We're putting two controversial ideas together sum of sum of numbers plus x for numbers of zero in numbers if x colon equal numbers squared is such and such like oh my goodness this is there's a lot of
Starting point is 00:24:38 stuff going i said here's a job interview for you job interview question if you answer with a straight face you fail that's good man I think that's all right nope you're out I don't know not seriously but it's as a joke it's pretty good you know it's yeah that's what job interview stuff job interviews are tough I know a lot of people are going through that now so yeah well you know the control X part and also the job interview might bring a tear to the eyes i i don't know i haven't i haven't applied for a job in well since the 90s however which is insane it is insane man it's actually insane um but because all my job transitions have been like hey you'd be awesome
Starting point is 00:25:17 like why don't you consider working for it was more the other way around you know which is pretty fortunate but it sounds like your resume has like, like a lawn mowing on it still or something. Exactly. I've worked for companies. They just reached out to me and said, would you consider working for us? And then I know, but you probably didn't have to, you haven't probably had to update your resume for a long time. Yeah. My LinkedIn is like, I'm I've had some experience at a pizza place and I've done lawn mowing. So no, but I was just going to say, I think it's probably pretty brutal. You've got to, you know,
Starting point is 00:25:48 pass the AI gauntlets and all sorts of weird business and take home quizzes. And I can see why there would be tears, but not for listening to the show. Thank you everyone for coming. Thank you, Brian. See y'all later. Bye.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.