« Return to show page
Transcript for Episode #231:
Go Python, Go!
00:00 Hello and welcome to Python bytes is Episode 231. Recorded April 28 2021. I'm Brian knockin. I'm Michael Kennedy cephalo. Yay. Hey, welcome. Hey, thanks for having me on. It's always it's always good to come back on this podcast this, you know, unbiasedly is probably one of my favorite podcasts to listen to, to be honest with you of mine, too. Yeah.
00:25 It we get to learn so much stuff by studying, just getting ready for each week. And it's it's always fun to just see like the new and exciting like, developers, we love the shiny new things, right? Yeah, absolutely. Well, before we jump into the topic, I thought maybe we could let sessile introduce himself real quick. I know, you've been on the show before, but it's been a little while. Yeah, it has been a little while since since I've been on. But uh, Hi, everyone. I'm sessile Philip. I'm a cloud advocate at Microsoft. And that pretty much just means I spent a lot of time in the community working with, you know, different companies and students. And you're just really creating concepts around how you know how developer can start using our tools. One of the things that I do, Michael showing you one of the pages from our Channel Nine video site, I helped run the on dotnet show. It's not Python. But it is dotnet. And we do talk about you just a lot of different things in ecosystem. So about your Python stuff on some live stream on Twitch and so on, right, just not on the official dotnet channel. Yeah, yeah. So we do do the live streaming stuff happens on Twitch and YouTube. And you know, you could always go back and check out like the, you know, the recordings of those two. Really quickly, before we jump to Brian's item, I do want to point out on the screen, that's hot, top level statements that C sharp has added, which is like, let's be more like Python. That is kind of interesting thing, right? I think with the last set of like in C sharp nine a lot. A lot of the things that came out of the last language feature set, everyone is just like, this looks a lot like Python, this looks a lot like Python.
01:57 Wait till wait till dotnet six, and C sharp 10 come up and see what you say. There. We're gonna use the def keyword and all that type is optional. Got it? I mean, I don't know. We'll see. We'll see what happens. I might have to check out C sharp again, if it gets close to Python. I mean, it's not it's not a bad time to jump in. Yeah, yeah. Definitely one of the better languages out there. I certainly think so. I, Brian, take us away. What's your first item here? Are you going to tell us Or else what? Yeah. Or else? So I actually was intrigued by this. Because this is that's an article called the basic way, what's their go code?
02:34 For else, a weird but useful feature in Python Plus, there's a cute avocado, stuffy.
02:41 But there's,
02:43 I'm not used to using Elsa or break in my Python code. I just don't do it that much. So the Yes, hello birds.
02:53 So the, this is an interesting,
02:58 interesting article about above the else block. And what it does is, if you've got a for loop, and you in there's no break inside of it, well, then you're also get hit. So the only way to use a else effectively is to maybe have a break so that you at some times, don't hit it. So this is still a little confusing to me. So
03:24 I was reading more the the article goes on about talking about some examples where you'd want to do it and and it does explain explains a way better than I just did. So you're interested about that read the article. But the the explanation of why you would use it My favorite is if you're going to iterate to find an items. In the end, you would normally maybe use a found flag or something to say that you found it you don't need to with this you can you can once you find the item, you can break in then the and then you will hop out and the else block will only get run if you did not find the item. So
04:07 that's really pretty much the use case that I think is neat. Yeah, I agree with that one. And I love the break out of these loops early, you know, because
04:16 we end up so often with super indented code, right? It's like if this is true, and if this is true, and if this is true, and you could put those into a couple of breaks or continues in your loop and then oh boy, it's nice and flat ish. Yeah, the other one of the other use cases he brought up was was using it with an exception. So if you've got an exception try accept block within a for loop. And in you kind of want to know outside whether or not any exceptions were caught. You can use the else block to find out if you if any. Man I can't get behind that. Like I know that's the use case. Try this else. I can't get behind it. It's just it's too It's too weird for me, too.
05:00 To think about I, I would I just never use it because it just seems a little unusual. And I know I've talked with some folks on the internet, they're like, oh, but this is a way to add, like a continuation to your tribe block that the won't over catch errors. And I'm, yeah, I don't know, I hear but this this else one on the loop, I could, I can see this as a Yeah, not too bad compared to found flag. And then what I want to express, before we leave this is, if you're going to either put a I think both break or else if that's in your code, there should be a comment explaining what it does, because there's a lot of Python developers that won't know what's going on. Yeah, so what do you think? Yeah, I actually really like both of them, like both before the four LS and the trials, only because I think about how much code would I have had to have written? Otherwise? You know, yeah, for me, it just kind of makes those situations a little bit more succinct. And I completely understand what you're saying, because a part of me also on the other half is like, well, I could just put the rest of the code inside the try block, right? And then
06:06 just keep running on. Exactly, exactly. Yeah. Like my continuation happens in the same block of code. So I completely understand it from that perspective, too. So I know, I guess I'm kind of 5050 on it. I kind of like it. I kind of I'm like, well, we could do it another way. So I don't know. Yeah. And just jumping back a tiny bit. That's all Dean has a bit of foreshadowing for you in the live stream job posts in 2022. Looking for pi sharp developers with 10 years of experience.
06:34 And Rob is out there giving a shout out to Brian's birds. I don't know how accurate that emoji is. But it looks pretty legit. That's pretty good. Yeah, we got three here. So
06:44 nice. All right. I think I got the next one. Right. So let's talk you were done. This one, right. I didn't steal from you. Yeah, and I'm gonna, I'm gonna step out and cover the birds. Okay. I'll tell you about the RMR. We're doing that. So probably the two most popular rmws we have out there are Django ORM. And if you're which really only makes sense if you're actually doing Jango, or SQL alchemy. And those are both really interesting. But I want to give a shout out to tortoise RM. I think these names are always interesting, like naming things is hard. I always think of databases and database libraries to be awesome with they're fast and less housing, but they're slow. But tortoise doesn't scream speedy. But I think you should think of it more in the speedy side, because it's primarily an async. io, object relational mapper inspired by Django. So if you were like, I love what Django does, but what I really want is an async version of that port. So RM is a really good example. And you know, it uses the Active Record design pattern, instead of unit of work, which guacamole uses. So it's pretty neat. They have a bunch of performance stuff. And I really liked that they showed performance against many different ORM, not just Django and sequel alchemy, but other ones like pony and Kiwi and a lot of different use cases, you can get a sense, like it's pretty fast, it's not raging fast, but it's async. So that's a really, really good option, they're super simple to use, when you install it, you typically need to install the underlying database driver that it's going to use. So if you're going to use it with Postgres, you install async, PG, if you're going to use MySQL, you install MySQL, and so on along with it. But if you look at the code, it's super simple. And if you're familiar with Django, you go and create the fields as members of a class equal to some descriptor like fields, and field or field dot text field, set them have indexes and so on. What's really nice is there's like really good modeling of relationships. So there's like fields dot foreign key field fields, dot many to many field, and it talks about the relations and so on. So yeah, this is a really nice RM, if you're looking for something async that is like Django, give this a shot. It's pretty popular has almost 2000 GitHub stars was updated two days ago. So yeah, it seems like a nice, happy project. This looks pretty cool. Um, when you're showing that installation section just now, so you still have to install like the async versions of, I guess that particular databases driver, so async, my sequel, async, Postgres and things of that nature. So I'm guessing what this as kind of like what you said, is that, that active record programming model, right, like so if you want to write your code at style, you know, me, I can write it and then now I could just switch swap out the database driver, and I could point to a different database implementation if I want it. Yeah, exactly. I think it does two things. One is, there's always like database dialects, like how do you express parameters, question mark, or add parameter name or whatever, right? I think it handles that. And then a lot of those drivers, they're, they're async, but they only work in raw SQL. So select star from such and such, and so on. And so this just gives you the ORM wrapper on top of it, but I think it does this dependency, it does this dependency thing because otherwise it would have to install like every driver. It supports
10:00 Sure, yeah, that would be a hassle. Right? Because, you know, Yeah, that'd be a little messy. Yeah, why it takes so long to solve? Well, it's installing every database driver, you can think of it. This is pretty cool. I like it. Brian, what do you think? Oh, actually, I think it's pretty great. And I was actually starting to look at an ORM for a new project. So I might check this out. Yeah, I like it pretty well, it's got some really simple ways to program it, you can create one of these objects, and then you just await tournament dot save, if it's a tournament, in this case, or has like a factory sort of create method for queries, you go do some kind of query, then just await a class dot filter, type of thing. And even does like the joints, you don't end up with the n plus one performance problems. One thing I guess I would throw out there is it seems to me like this is 100% async. So if you're going to use it, you have to create an event loop and just run it in there. And if your app is not very async II, then it might be kind of a hassle to use, I'm not totally sure about that. It used to be that there were these wrappers you could get that would take non async libraries and database libraries and stuff and make them async. By putting them on thread, I can see a world where we get back to wrappers that make them sink, so they're easier to use if you don't want to do anything. No, I know, one of the things for me, that's always been a little challenging is when you have like these async database things like how do I how do I test them? You know, in a way, I was fine, like testing, at least when it when it comes to unit testing, testing. async IO things is relatively non trivial. You know, yeah, like I have a thing that uses motor like sort of MongoDB sync labor. And I'm using it in fast API and you know, fast API does this injection thing. I'm like, Oh, great. My code is clean. Because I'm, you know, separating concerns, and I'm doing all this thing, man, like, how do I test this thing? Like how do I Brian, do you got any lasting async things? Well, I don't right now. But I think that'd be a great topic to explore and try to get some people on the podcast. So yeah, yeah, I agree. Yeah, that'd be great.
11:58 To have your book, I'd love to see it.
12:01 Well, there's a second edition coming out. But it doesn't include async. It hasn't published yet has it? There's still time for another chapter.
12:12 I'm jumping back. I did see that bird can add an interesting comment about the else clause. One of the benefits is that Abraham makes you look like a Python expert in code reviews when you suggest people use it to.
12:30 Like, that's funny. Yeah, that is funny. A lot. A lot of thoughts here on the else clause. I do think it's one of these things. It's a little unusual, like a lot of languages have like, Oh, we we all have the while loop, we all have the for loop, we all have statements, they all look like this. And this is kind of a little bit different. So it's kind of interesting. All right. So that's what you're up next. Right? Yeah, I am. Um, so I ran into this post, about faster Python with go shared objects, which I thought was a really interesting read. Mainly, for me, I really into like language, interrupt, right. Like, the fast part is cool. And I get it, like, fast is always a relative thing that we could consider, what do we really consider to be fast or not? But you know, it's always interesting for me to see how we can take one language and another and kind of plug them together. You know, I mean, cuz I'm a big believer in let's, you know, let the thing do what it's best at, you know what I mean? Like, so for instance, pythons really good at doing certain things like Python do that, or goes really good at doing certain things that go do that. But now, how do we plug these worlds together? And so this article kind of goes through talking about how you know, within go, you can create these things called shared libraries. And I believe what it does is it outputs a dot s o file or a dot dll file. Yeah. And then based on that, in Python, you can use something like C types, or this article, actually even references something called C FF II. I'm never heard about C. FF. I don't know if you're spoken about it before. Yeah, it's a more modern interop layer between C library libraries. Yeah, I think they mentioned on so Yeah, right there. Yeah. So it mentions using things like sci fi, for instance, to be able to load some of these files and Zoo interrupt, which I think is actually pretty cool. Um, you know, it does also talk about some of the pros and cons, which I think are very important to discuss. So for instance, this says, well, it's really, it's really good if you just pass in your own, like primitive types. But now when you want to pass around, like more complex types, like, you know, dictionaries and classes and things of that nature, then it becomes a little bit more tricky to do. But you know, again, just in terms of, Hey, I have this thing that I want to pass on to go to maybe, I don't know, maybe go runs it in the background or, you know, runs this macro service thing that, you know, does Docker and Kubernetes, or whatever the cases, you know, we could leverage both ecosystems to, again, have them do what they're good at, and kind of like just plug them together, which I think is a pretty cool read. I'd love to hear what folks think about it after they after they read through it. Yeah, I think it looks really interesting. You know, one of the powers of Python is this interoperability, mostly around C but also other things like weird things like Fortran and so on. Right like
15:00 People say, Oh, well, doing math with Python is super slow relative to c++ or whatever. And yet data science is so popular where it's almost all math, right? How do you square these two things? Like how do you make them work? And it's because a lot of that gets pushed down into some more native layers, like a C layer, you just hand off the data and then zip it, the real work happens there. And this seems like another really cool way to do that, right? Something that works really well and go and write a package, wrap up the go bits, put them in a we'll, pip install them, and people don't have to know. It's also not just what, what the language can do best. It's what the developers can do best. And if you've got
15:39 somebody that's really good at goad working on part of the problem, being able to connect them together is a good idea. I don't I think that we're we're far away from the time where people just had one language that they knew, anyway.
17:37 Um, well, we have some
17:42 you have some cool, I want to plug your stuff. So we don't have a sponsor? plug. Yeah. Okay. So yep. Thanks, man. Appreciate it. Yeah, well, you let me I'll be specific about something, something that if you dug through the course catalog, there's a little coming soon graphic, but people probably don't know is we're about to release a course on dask. dask is a way to do like pandas type stuff. But if it needs to load 10 terabytes of data, and it won't fit even on your hard drive, or if you want to run it across, you know, 16 cores on your machine and across 10 machines, you just write pandas code, but you point it somewhere else. And it just parallelized that beautifully with this cool little dashboard. So anyway, there's a free course coming on to ask that people will be able to take those Yeah, that'd be fun. Now, that's good. I think everybody should check out your course catalog. And one of the best things that happened to the Python community was when you quit your full time job and started working on this full time. Thanks, a short four or five years ago.
18:39 I definitely concur with that. I'm curious about das, too, because I remember you all speaking about in a previous podcast, and I always wondered, oh, wow, is this only for pandas? Or can I use desk to just run remote Python? Anywhere I want it? I think you can actually, I do think you can make it run remote Python. These simple use cases, sort of import something different that looks like pandas and use it, you know, but I think there's a way there's like a lower level set of libraries that do that orchestration, you probably could use a train, remember, make sure that that's the right one. But I think that's what Matthew Rocklin pointed out when we were talking about it, so yeah, quite cool. Yeah. Cuz that would make for me makes Python really interesting from a distributed systems perspective. Yeah. I mean, we think about like containers and multiple VMs. And even just talking across boundaries of networks, right? Yeah. Yeah. Just being able to imports my library and run it. You know what I mean? Yeah, absolutely. Super cool. All right, Brian, you got the next one? Yeah. So speaking of learning to code, um,
19:42 you know, as you go on with your learning to code, there's tutorials and stuff, but then you want to get into really finding out how things people are really solving problems all over the place. And a great discussion around that is to have good recommendations is to just go read some code, you need to read a lot of code and then
20:00 There's problems with that, though. And so this is an interesting article, I'm going to link to learning to read code Python standard library design decisions explained, for advanced to beginners, that's an interesting term advanced beginners. But so there's an interesting discussion around this. So the standard library is there. So that's a great thing to go look at. It's available, one of the in and all of its there, so you can read all of it. But there's some interesting caveats, and some in both good and bad. So there's pros and cons, one of the pros is all the peps around. So you can read the design decisions of why why things are the way they are, and and some of the history and what problem they're trying to solve. That's actually an incredible benefit. Because you I don't even get that with like internal code, often with a company you it's often just the code that was left to me that I have to maintain. So this is kind of neat. Usually, it was done just enough to work, and then we're done with it.
20:58 Yeah. So in Python gets to improve on itself, which is nice. The downside is, there's a lot of it, and a lot of it's really old. So there's some code in there from 10 to 20 years ago. And there's what's what's pythonic now might not have been pythonic, then so maybe not best practices. I don't know this firsthand. But this is a comment from the article. So I think that's fair. And also, you don't really want to learn.
21:28 This isn't necessarily from the Python standard library, but just picking some thing that you use on the on GitHub, it could be incredibly useful. That doesn't mean that it's coded well, though, so it might not be a good example, for coding. So the, the author has three, three or four
21:46 different standard libraries that he recommends, which is pretty interesting. The statistics module, says the code is simple. And it's a it's fairly well documented. And the padding is also pretty new, which is kind of a really good. I'm not sure when the statistics that but it was added. It didn't come originally, it's been added after a while. But the there's other things around that people use statistics for use for statistics. So there's the pep apparently talks about design design decisions about not trying to re implement NumPy or something like that within within the standard library. But just to have basic statistics. So 3.5 and four, by the way, is when statistics showed up. Oh, yeah. So all right. Yeah. And actually, the the next two are fairly recent as well. Path lib is recommended, because it's, it's extremely well documented in it.
22:40 Oh, no. And object oriented object oriented example. There's not a lot of object oriented examples out there in Python, because a lot of people don't use it. So that's good. Also, not a nice comparative study, because we already had AAS path. So you can look at how it was passed all that versus path lib, solving the same problem. That's kind of neat.
23:00 Data classes, is
23:04 apparently very well documented. And I'm not sure what else I was gonna say, cuz I wrote down, it's a good example of data classes. That doesn't make sense, but
23:13 it may be the very best example of data.
23:17 Yeah, the only. And then graph lib, which, which says it's a bonus, but it's a it's interesting, because it does one thing, it's an implement implementation of a topological sort algorithm, which I'm not exactly 100% sure what that is. But it's a narrow problem. And, and there's no Pep, but apparently, there's a an issue that the article links to with a long thread discretion. And the interesting thing about this isn't the discussion about how it should be implemented. It's the discussion of what the AP API should look like. So how, how that how it should be used from a user perspective. And that's actually seems fascinating to me, because I think we need to talk about that more of people how designing API's.
23:17 And, you know, coming to terms with that is is almost more important than what the code looks like, is, yeah, because you have to live with the API, you can change the code later if you need to. Yeah, that's a good point. Because you can refactor internally. But yeah, the API you're stuck with, unless you're like one of the packages I use for security on the website today, that just completely changed bunch of the module names and sub modules and move classes around and then my, my website, in Dev, not in production wouldn't start after I updated it. And like what I don't understand we shouldn't release a deprecation warning for a little bit or something. No. Oh, yeah. I really like about bionicles. Yeah. I'm sorry. Yeah, I was gonna say one of the things I really like about articles like this is, you know, we often talk about, like, the beginner path, like how do I get started with a thing, but after we've, you know, you know, brought all these beginners together, like how do I take you from beginner plus, plus, like, what is like the next
23:17 Setup look like. And you know, you always hear folks talk about just, you got to read code, right? Like go to go to GitHub and click Browse and kind of just dig around projects that you're interested in things you want to learn about and kind of just try and understand how it works, right? Like, if you want to understand how flash works, if you want to see how folks use different things, and fast API, or Django or even tortoise that Michael was showing a little while ago, I mean, just it's open source, right? And that's the beauty community about it. Yeah, just go on GitHub and just read the code. And then, you know, change it, right, change it on your machine and see what it does and see, does it get faster? or slower? Does it? Is it more or less readable? You know, do you understand it a little better that a test makes sense, Brandon can tell you about like writing good tests for different packages and stuff. But um, I think we need to do more of this like, and we as like an industry, because I feel like we're we're like drowning in how to get started concepts now, on this level. You know what I mean? Let's, let's go like one step above that now and start to talk about, like, what is the step 234 look like, you know, between junior and senior? Yeah, there's definitely that cliff. Brian, you got a learning curve here to back this up? Yeah. No, I just saw this this interesting. Thank you. Me, too.
23:17 Yeah, I saw this interesting graphic. And I, I kind of related to it really well, in production. I'm not sure about the early parts of the learning curve. But the end part is welcome to production programming, where there's strange mission critical code left behind by the last developer. And I mean, actually, this is, you know, funny. But also, it's true. In, you know, production code in a company, you often have to support code that you don't know what the decisions are. You don't. It's just it's working, but you're not sure why it's working. And, yeah, there's some strange stuff. Yeah, it could definitely get weird in that stage. But this library that going from, like, Oh, I learned learned the language, I can actually do stuff that there's a huge gap right there. Dean out in the livestream says, I wonder if some design and design decisions that were best in the 90s are less optimal today, I feel like in the 90s, it was all about object of object oriented and all the things. And then there was like a push to like, you know, maybe that's not the best way to just develop everything, like maybe a little bit, mix, a little bit of composition, and so on. That's fine. And then john says, coming from a number of other languages. When I first started using Python, I took a conscious effort to seek out learning the idiomatic way of doing things. I think that's really important, because it's so easy to just get it to work. And then like, leave it there you like no one would ever do this? Well, you wouldn't like your number and a fake for loop. That increments that. It goes the other way, too. So like sessile mentioned,
23:17 Graphics, but interactive graphics. So you might import radio, and then write the code implements it, and then just give it the function that it wants to use and say the input is a sketchpad. And the output is a label run. And that's the implementation. So here's a machine learning model that allows me to draw in ink, and then tell me what letter it is. So if I did like this, it would tell you Oh, that's a seven. That's not a seven. Let's see. What about a one? I think that's, that's a four. This model is not very good.
23:17 But that's not the that's not the point. Right? That should be a five.
23:17 The moon landing. And then also if you remember that that Netflix movie, I think it's called over the moon or something like that.
23:17 There's also a learn module, I believe that's also associated with that movie that we partner with Netflix on. So so that was also super cool. Yeah. Nice. What I really like about this is when people are trying to get into program, especially taking that next step of like, okay, I've learned what a loop is. It's so hard to know, what can I build? Because you have these? Like, well, I'd love to build a game like, well, building a game takes a team of people in a year, like, that's not a good next step. It's just like knowing what the next thing to build, it's a little more complicated that you're really actually interested in, you want to build like, this is the type of thing you know, if you had a, like a coding club at a high school, maybe COVID times is not the best for this. But you could say, let's build an app that will do like statistics for our basketball team. And like all sorts of interesting things, like you could build really neat stuff, and put it together in ways I think people will care about. Yeah, exactly. And, and just like I said, just in general, I think the best way for you to go from beginner to whatever that next level is, is just find something that you really care about and and see if you can attach technology to it. You know, like I care about basketball. I've been watching basketball for years. So when I heard space, jam and Python, I'm like, Oh, that's easy. on me, like, yes, like, that's something that I care about. That's something I want to do. Like we've mentioned before, we have ones on NASA, but maybe you're into some other stuff, maybe you're into, you know, agriculture and flowers and plants, maybe you want to do something that categorizes that type of stuff, maybe you're into cars, maybe like racing or, you know, some other activity, you know, find a way that you can integrate what you're doing with, you know, in your real world life with what you're doing in your computer life, right, and see if we can put those together. I think that'd be awesome IoT stuff to do with agriculture? Yeah, for sure. I think so too. You know, I've heard about like, a lot of different projects that, you know, use IoT, you know, particularly outside of the United States to do things like detecting diseases and, you know, letting them know, when's the right time to, like, manage crops, and, you know, getting information from, you know, weather API is and like, using it inside of their IoT devices and stuff like that, to help make decisions, which I think is really cool. Yeah. And you know, when you look at the crops and say, how wet is this? You know, could it hold out 12 more hours? Because I see, it's gonna rain in 12 hours. So let's not, let's not waste the water now. Save some Yeah, exactly. Like little little micro optimizations like that. Now, probably won't save you a lot of money and resources. But also make sure that you're, you know, you can control your environment. Yeah, yeah, I think those are all really cool. use cases that, you know, we should definitely encourage more folks to get involved in this. So I don't know if we should go down it but Dean is calling Jordan. The goat. I don't know what's going on here. I agree with him. 100%. I would I would defend that anywhere.
23:17 It goes Jordan, Colby LeBron. That's how it goes in my head. Awesome. All right. Well, that's all of our main items. Brian, do you have anything? Actually, you want to give a shout out to? No, but I just wanted to say I thought it was a trick question. You said, Do you know what Space Jam ism mean? I thought everybody knew what Space Jam was. I had to look it up. I didn't realize it came out in 96. So Oh, wow. It's been a while. So absolutely. That's what I said. If you're if you're born after 2000, like, you know, let's face it. If you've got good parents, you'll know because they were shown you
23:17 like a couple of weeks ago. Yeah. Did he enjoy it? Yeah, he loved it. Now. You know, one day I came home, he's just like, Daddy, what do we get to watch tonight? I'm like, I don't know. What do you want to watch? That's what Space Jam. I'm like. Yes. I'm a good.
23:17 Got it.
23:17 My wife and I tried to have our daughters watch all the James Bond double Oh, seven stuff. I said, Well, the natural way it'd be to start at the very first one was Sean Connery and make your way up to Daniel Craig. And today, they watched like 10 mesh like, this is so fake. I can't watch this. I got it. Yeah. Different generation different generation. Yeah.
23:17 All right. So let's see. It's definitely got anything you want to give a quick shout out to it didn't land in the main topics? Um, I feel like I should have prepared for this. Oh, yeah. No, I don't think we have all the tuition. Are you still doing the Twitch streams? Right. Yeah, we're still doing this trick.
23:17 My co host, Brian had taken some time off because Brian had a baby. So congratulations to Brian and his family. Congratulations. But he will be back. Well, he is back. But we'll be live streaming again starting next week. Now that he's back and settled and stuff like that. But yeah, we do a weekly live stream on Twitch. So you can go to twitch.tv I think is twitch.tv slash Microsoft developer. It's every Wednesday at 1:30pm. Eastern Standard Time. And we just you know, we we talk all things Python. We do different projects. Yeah, I believe both of you gentlemen has been on we've had you know, Brad come on to talk about testing and saw some problems that I was having. And Michael, you came on to
23:17 last commerce with the Middle East in Europe, right. That was that was bad. So there's this great joke here about Linux containers in Kubernetes.
23:17 So it's got the Evergreen ship stuck sideways and like another shipping container clearly stopped like, this is blocked. We can't make it through. And then the title is Linux containers in Kubernetes. For beginners, like containers. Yeah, that'll fix it. areas.
23:17 That's hilarious. By the way, did they ever get that thing out? He got out like a week ago, I think, yeah. Eventually, they had to dig the sand out underneath it until it could float again, basically. Oh my gosh, that's ridiculous. And then since Are you a fan of that Oh, really? covers by Oh, yeah. Yeah, so we've got the Oh really?
23:17 rally Kubernetes for beginners. What could go wrong? DevOps. Nice. I like it.
23:17 But I love the Evergreen container ship containers. That'll fix it.
23:17 No, I Brian is at it. Yeah, that's a show. Put a wrap on it. Nice, bro. Yeah. Good job. Good guest. Yeah. Great guests. So super to catch up with you. Thank you for being on the show again. Thanks so much. Thank you both for having me. Come on. Again. It's always it's always a fun time. I'm trying to break the record. I want to know who who your most frequent guest is and whatever that is. I want to break the record. I'm going to get one of those great IO type things and pointed at our site and then I'll ask it, yeah.
23:17 No, I think actually, probably you're you're near the top. I have to do some counting. We'll have to see. But yeah, for sure. Yeah, let me know. I got to make sure I keep I got to keep standards high. That's right. Brett cannon out there in the live stream. If he's still there. He's definitely one. He's one of the contenders as well, so I'll let you know. Okay. Good. Well, Bye, everybody. Bye, everyone. Take care. Yeah, thank you for listening to Python bytes. Follow the show on Twitter via at Python bytes. That's Python bytes as in BY ts and get the full show notes at python bytes.fm. If you have a news item you want featured just visit Python by set FM and send it our way. We're always on the lookout for sharing something cool. On behalf of myself and Brian Aachen, this is Michael Kennedy. Thank you for listening and sharing this podcast with your friends and colleagues.