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


Transcript #358: Collecting Shells

Return to episode page view on github
Recorded on Tuesday, Oct 24, 2023.

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

00:04 This is episode 358 recorded October 24th, 2023. I'm Michael Kennedy.

00:11 And I'm Brian Okken.

00:12 And this episode is brought to you by us. Check out our courses and thank you to the Patreon support as well. Link right at the top of the show notes. You can connect with us on Fosstodon.

00:23 Again, links are up there. And if you want to watch live, check us out at pythonbytes.fm/live.

00:28 Wonderful.

00:28 So Brian, you have a big, big time release to talk about. Want to tell the people?

00:34 Yeah. So there's been a Django, Django beta, beta one released. So Django, sorry, Django 5.0 beta one. So we're now, we're now in the 5.0 world of Django. So we're linking to the, to the basically announcement. But what I think is interesting is, oh, I didn't see the schedule.

00:59 So let's take a look at the release schedule. It looks like, so we've got the beta now, October 23. There should be a release candidate, November 20th and the final by December. So by the end of the year, there'll be a final.

01:11 Are you saying we're going to get Django 5.0 for Christmas?

01:14 Before, to get ready for Christmas. Yeah. Honey, can you help me wrap presents? No, I got to play with Django 5. So I'm pretty excited about this. It looks pretty cool. Let's look at some of the, some of what we got. There's a release notes under development because it's still just the first beta, but there's some really cool stuff. One thing to note, I think we, we may have mentioned this before, but I can't remember that Django 5.0 only supports 3.10, 11 and 12.

01:45 So they're, that's the last time we were talking about, oh, can't believe we're saying goodbye to 3.7. Yeah. And they're like, you know what? That's, we'll go into the future, baby. 3.10 and above.

01:55 Well, you know, and I, I actually think this is decent because there's some fun stuff in 3.10 and above, and I haven't had any issues like upgrading any of the projects I've worked on. They've been maybe minor things. So the, the last, the last few have been really easy upgrades, I think.

02:13 But you know, other, your mileage may vary. There's a note about third-party library support for older versions of Django and mostly it's, you know, how to deal with looking for warnings. So you should be, if you don't support older, or if you're planning on not supporting new versions of Python or Django or whatever, you should put warnings in and then people can run with, with warnings on with dash capital W and the D for deprecation. So to look for deprecated warnings.

02:42 And that's, that's really kind of a cool thing that a lot of, most package maintainers do this.

02:47 So that's pretty great. Okay. So what's new facet filters in the admin. I have no idea what this is.

02:54 I don't know what this is, but it sounds neat. So that's cool. The thing that I really was pretty excited about was the simplified templates for form field rendering. So you know, when you're creating a form there's a lot of ways to help you create forms. There's extra plugins like crispy forms and others, but this looks great. So look, this is the before picture. This is the before form. There's a lot in that form. This is the after it's just a few lines of code. It's really great. So for, for those of you listening, of course, check out the show notes and you can link, you can see the link for where the release notes are. So just like maybe three or four lines of code versus 20 ish. I mean, it's not terrible, but it's also kind of confusing. So, and this is just an email form with email and password or sign in form or something. So this is pretty cool.

03:46 Yep. There's more excitement to come database computed default values. This is, this is actually a pretty big deal. I think this, because things like now for a timestamp, well, now on your computer or now on the server or now it's now you've got one server running the database and, and that so that'll be like a consistent time across everything, but there's a whole, go ahead. Sorry. With, with a lot of these, like that, that default in the ORM that happens on, it happens in Python, which means it happens on the web for an end server along with all their times and latency. So there could be a little mismatch, but if your server or your database servers in a different time zone or something, it could be really out of whack. The other is if you have it set up a default that goes into the schema instead of just in Python, some other tool creates something. It will also take on those defaults, which is I think the bigger deal.

04:45 Oh, okay. Cool.

04:46 Right. Because if you use some database admin thing, you say insert this and this, but you're not doing it in Python. Well, normally database defaults would kick in, but not previously if it was just in Python, right?

04:57 Yeah. And so if, if you're using, right, especially if you're using different tools, also having database defaults is a, is a, is an awesome thing, but it's plus it saves, it's faster, probably. I don't know. It seems like it might be faster. There's also database generated model field. So you can have your database generate fields based on other fields and have that be done in the database. So that's pretty cool. And there's, they give, they give some examples in here and then more options for declaring field choices.

05:29 This hasn't been something I've run into, but apparently that's the current set and we have new set. We can do things like integer fields and stuff. I think, Oh, also there's like a, I don't know, there's a different API for this. And if it's been an issue, hopefully it's not an issue for you anymore. But anyway, and then a bunch of other minor features, but I'm sure there's been tons of bug fixes and everything like that too. So this is pretty exciting.

05:53 That's pretty cool. That, that, that other one, those new types of fields, it looks like it supports string enumerations. Oh, okay. Which is pretty cool. If you go back down to that example there, I'm declaring field choices. Yeah, I think so. Like see how it says choices, metal dot choices. So you could have a, a, a gold, silver or bronze. Oh, right. Option.

06:14 And those are the only three string values instead of it's just a string. It's like basically a string enumeration type thing, which is pretty cool. Yeah. Okay. Yeah. Neat. While we're talking about Django, I want to go ahead and do it. This was going to be an extra, but I thought I'd go ahead and call out that Django, the Django, there's a couple of things. There's Django, not Django, not space, which we covered a few episodes ago, which is a place where you can kind of with, with mentors, learn about Django or learn about how to help maintain Django. Maybe this is a, this Django, not space is now accepting applications for the next contributor mentorship cohort. So, and I think I saw today that it's the, they're accepting applications through mid November, I think. So not that long though. So get on that. And if you would like to do it, and then there's also, they're also doing a survey along with in, in in collaboration with JetBrains and the Django software foundation. So go ahead and if you're a Django person, fill out the survey, be nice. And then when we get results, we can maybe cover it on the episode also. So yeah, that'd be great. All right. This next item, Brian is inspired by you. Okay. Okay.

07:29 So last week we were talking about Windows terminal. We were talking about the get bash CMD thing for Windows, whatever the heck it's, it's called the, the bash shell that comes with get when you install it on Windows. And I said, Hey, why don't we just add that to the Windows terminal? And you're like, wait, the Windows terminal, Windows terminal is of course, something that Windows 10 or above can give it you have, you don't have it, you have to go to the Windows store and install it. It's pretty awesome. It comes with a bunch of different shells like command prompt, PowerShell, Windows subsystem for Linux, Azure, whatever you got installed down in the subsystem, I suppose. Pretty cool. It even has GPU acceleration for the text rendering, which is kind of cool, you know, motivated by warp, right? Because they were they're programming like metal on the GPU for their, their stuff. So, you know, so are they here on the Windows one, but I wanted to talk about adding it because if you just go to the get bash command prompt command and try to take that and stick it into the Windows shell, it doesn't actually work it, you click, show me the shell and all it does is launch command prompt and another window with the get bash. I'm like, huh, that's not doing it. So I found this article called add get bash to Windows. It has this real helpful message at the bottom here, Brian, it says, you're seeing this message because adder script blocking software is interfering with this page, disable any adder script. It's not interfering, it's blocking malware delivered over retargeting networks. So I'm helping them with their wording here and they can then correct that later. Anyway, you it's a super simple way that just walks through that ended up basically it shows you how to go and add a new profile. But most importantly, what the actual thing that is the the profile command that you need to add, which is not the same thing as you launch normally.

09:23 So you just add that. Okay, pretty cool. Yeah. And it shows you how to even set the icon if you wanted to have the right icon in the drop down. And finally, you can even set it as the default.

09:33 So if you just open Windows terminal, it defaults to the bash from git version. But then of course, you get the drop down. So like, here's what my Windows machine looks like. After I set this up, you've got Windows PowerShell, command prompt, Azure Cloud Shell, PowerShell, which is different than Windows PowerShell. It's the older one, like apparently, the developer command prompt for VS Visual Studio 2022 PowerShell for the same thing, and the bash one, which is pretty cool. And then yeah, so if people want to take and make their Windows shells better, here's one more option.

10:05 And if you're on Mac, you can check out warp as well, because we talked about that last time. And I have more to say about shells later. So what funny thing about happened between last week and this week, my laptop died. Oh, no. And you didn't try to do this and kill it? Did you? No. What happened to it? I think the fan was just freaking out or something. Okay. And so I grabbed a, this was a work thing. So I got a new laptop and it came with Windows 11 and this was already installed. So, okay. I don't know if it automatically does it or if my IT department did it for me. Yeah. I don't know. It probably is already installed on Windows 11, but not Windows 10. I don't think. But then when I loaded a Windows bash or get for Windows, it just did this like on Windows 11, it just installed it in the right place. And so I can. Oh, that's pretty cool. It registered one of these profiles or something, huh? Yeah. Yeah. So that was cool. Excellent.

11:01 Yeah. Excellent. I think, you know, if you're going to use one of these alternate shells on Windows, you might as well use this like nice front end container thing. And you know, the funny thing was, is I was, I was worried about it because most of our, I'm used to like worrying about operating system changes because of the compile dependencies and stuff. But we're doing all of our compiles in Docker images now and it's like, oh, I don't actually have to care about that anymore. So that's nice. We were running Windows seven. Who cares? Wait a minute. I don't know if you can get Windows Docker desktop to run on Windows seven, but you know, I know that was a joke. You probably cannot, but even if you can, you probably should not. All right. I think that's, yeah, that's the last, that's the last I got to say about that. So if you're on Windows and definitely check out the Windows terminal, which is a much, much nicer than command prompt and, you know, plug in your shells and then we can talk more later some other time about like, oh my posh, which I think I've talked about before. Well, I gotta get, I still want to get set up on that. So, yeah. Oh, it's so much better. Yeah. It's so good. Okay. Well, should we talk about testing a little bit? Yes, sure. So the, here's an article from Alex Jacobs, mastering integration testing with FastAPI. And I know it's focused on FastAPI, but it's just kind of a really pretty good walkthrough of, of different types of testing for a website or, well, an API at least. And that's, it's pretty great. So first off really quick description of what a integration testing is. And it's, I've, I've had a hard time describing what integration testing is to other people. So kudos for them to Alex. So integration testing involves combining individual units of code and testing them as a group, maybe kind of this type of testing aims to expose faults in interactions between integrated units. Yes, definitely. So basically you get to decide how much of the system you're going to put together. And, and if there's things that you want, don't want to include, that's kind of where this article comes in. It's it's challenging to do this, especially with web applications. So he goes through a lot of common things that you'd want to do, which is great. So he has a little, a little test app, which I think is pretty kind of, kind of fun. I don't know if he's includes the actual source code for the test app, but it's just the the, the, the, what the straight schema for the API that he's posting. So that's kind of cool.

13:29 Anyway, talks about, okay, you're going to have to authenticate for almost all applications. So how do you, how do you mock that so that you can get around testing with that? So mocking authentication talks about that testing, the login page also talks about both testing. So one of the things that's kind of neat is he's using pytest, but he talks about how to do this straight in one test.

13:52 And then also how to separate some of the mocking part into a fixture, because that's how you'd want to do it if you have multiple tests. And that's pretty cool. So mocking authentication talks about in, in the test client or within the test client here is, is his fixture and then directly in the tests. So kind of goes through a lot of detail with the authentication part, because it's the first time he's talking about mocking. Then also how about external APIs? So authentication is something you'd want to like put some mocking around so you can test that thoroughly.

14:26 External APIs, definitely, because you don't really want to be hitting that a lot. And also you don't have control over what the external API is going to return. So you want to have more control over this. And so a couple examples here of actually, it was kind of, kind of really some pretty cool examples around mocking an external API and utilizes something I don't see very often is, oh, I don't know where it was. Oh, he, when he's creating a fixture for it, he's using indirect parameterization, which is, it's kind of a cool advanced pytest technique, but he explains it fairly clearly, and it's, it's pretty nice. So, oh, here it is. New, anyway, somewhere indirect, indirect. Yeah, I love seeing indirect because it's kind of a, it took me a while to get my head around indirect, but anyway, so, okay. So mocking authentication, mocking an external API, and then something else is you might want to mock the database, because you can possibly fill up your database with, you can, you can use a temporary database or a small one, but you might want to just mock it also. So talks about mocking MongoDB client or MongoDB database. So anyway, nice, nice discussion of testing a service specifically for FastAPI, but I kind of think this applies to everything, doesn't it?

15:47 Yeah, I think so. So anyway, makes me think of VCR pi. Yeah. When you, if you're mocking out a call to external APIs, just record it, play it back. Like that one was good. I'll just do that.

16:00 And on a lot of my integration tests, I just talk to MongoDB. Yeah, it's fine.

16:08 So do you set up like an extra, an extra database and just fill it in?

16:12 Yeah, because so much of our stuff, so much of the stuff that I have is, that the tests are addressing is like kind of static data. You know, it's like, oh, here's a list of podcasts or here's a list of courses. And it, it doesn't necessarily need to know, it doesn't need to depend on what those are. So yeah, anyway, yes, you have to rewind it. Tyler asks of VCR pi.

16:35 You don't have to, but there is a fee if you take it back without, without rewinding.

16:40 So yeah, be kind, rewind.

16:42 Yeah, be kind. You kind of have to be a certain age to remember that. Remember that? Like, you're like, oh, I got this new movie and I got to rewind it. They didn't rewind it. You're like, oh, we're going to wait like two minutes to start watching this.

16:53 Did you have one of those extra like fast, we had a, for a couple of years, we had a fast rewinder that you could just pop it in and it would just go.

17:00 And I don't know what fast is, but I remember it would make quite the noise. So maybe it was fast.

17:06 Yeah, anyway.

17:08 Yeah, exactly. Yeah. So Mojo Logic says blockbuster charges if you don't do it. That's true.

17:16 Or your PRs don't get accepted if you don't rewind your tests. Either way.

17:19 You know, let's talk about not getting accepted though, because oh boy.

17:22 This is terrible.

17:25 This is so bad. So this was recommended to us from Pat Decker previously on the show.

17:30 And it's an article essay by Reuven Lerner, who like us teaches Python and teaches data science and stuff. And I will tell you the hardest part of our job is not writing courses, not coming up with courses. It's gaining awareness. It is so difficult to cut through all the noise. And even if you built something awesome for people to actually go, oh, maybe I'll pay attention to that for one minute to see if it is awesome. So we all have to try different ways.

17:57 Some of us start podcasts. Others of us do different things. And Reuven said, hey, look, I'm just going to try to put in some meta, aka Facebook ads and see if I can get some interest from there. Right. Plenty of people are over there. So he does. And pretty soon, it turns out his ad count is canceled. He goes in there and says, you are banned for violating Facebook's policy on advertisement. He's like, I just don't know what I could have done wrong.

18:28 It's so benign. I'm trying to sell corporate training to software developers for the most popular language by some standards in the world. I'm a reputable guy. I've been doing this for a while. It's not a shady business. No, banned. But there's a way to protest the ban. So he protests the ban. And they said, no, you're definitely banned. In fact, let's see if I can find it.

18:52 Somewhere. It should be more bold in here, shouldn't it? Anyway, it says somewhere you're banned for life. Not only is your ad account temporarily banned, you will never, ever advertise on Facebook again. Okay. Why was that Brian? Because he was, they thought he was selling pandas and pythons, actual pandas and actual pythons. So, okay. So it's a misunderstanding, right? Let me give you all a glimpse into how big tech works. There's a misunderstanding.

19:25 They have all these economy of scales. They have so many automated systems that even when you protest, it doesn't go to a human or when it goes to a human, it goes to a human who has a insanely fractional understanding of what advertising is or in examples that I've run into in the app store area. For like, when I first launched the Talk Python Training app for courses, it's been a week being declined at the Google play store because there's an app in the Google play store called learn Python. That's its title, learn Python. And mine is called talk Python courses or something along those lines in the Google play store. But in the description, it says if you get this app, you can learn Python from the experts at Talk Python Training and so on.

20:16 Right. Yeah. Violated. You're trying to infringe upon the copyright of learn Python. That app already exists. Banned. Excuse me? Like, so I wrote back, surely you must misunderstand.

20:28 I'm not trying to say the titles learn Python. It's just, it's an act that one takes one learns a subject and the subject happens to be Python. And so with our app, you can learn it. They're like band protests band. I'm like, what is going on here? And so finally I had to just change the subject. I said, okay, what if you were, we're learning a guitar, you want to learn music.

20:48 And so with our app, you can learn the guitar. They're like, oh, I see the problem now. Yes, you're right. That's not the same thing as the title of learn guitar, the app, but it took a week back and forth. And this is exactly the same situation. I'm like, your one job is to like compare apps and see if they've like, you don't even understand the words that are in here.

21:10 Right. And, but where do you go? Like I, I, protest as high as I could. And they're like, nope, band. I'm like, this doesn't even make any sense. And Reuven is in a, I would say slightly less bad because if you're banned from advertising, it's kind of like, well, I can't give this crummy company money and like to retarget. So it's not, it's not like you spent, you know, six months on an app and you can't sell it or deliver it, but still it's the same situation.

21:35 Like the, the worst part is he's just put his head in the sand and said jerks for a while. And then came back like a year or two later and they have a data retention policy where they threw away all the data after 180 days. And so even though he has friends at Metta, they, nobody can help him because they threw away the data that would have proved he was selling Python courses, not Python animals. And so he's permanently banned. That's it.

22:00 Really?

22:02 Yes. Yeah. Because they, they, they won't do it. And it was like a bot that banned him.

22:06 It's really, really frustrating how some of these things work because like, you know, an elementary school kid could go, yeah, I see those are not the same. These people whose job it is to make that distinction. Don't it's crazy. Yeah.

22:21 Yeah. Well, I guess if I ever want to advertise on Facebook, I'm glad that there isn't an animal named by test. so yeah.

22:31 Oh, well, and that you have a rocket, not some kind of animal. David out there points out, it's surprisingly crushing to have your app rejected. It really is. Cause you work for months on it and then you think, ah, it's ready to launch. And then it's just like, Nope, there's absolutely no path forward to even delivering it. It's not like a website you just put on and people can like it or not.

22:48 Yeah. But I mean, also, I mean, Reuven it is his life cutting off advertising channel is, is pretty big deal.

22:57 It is a pretty big deal. I think, you know, the more, the reason I brought this up is I think it shines a light onto just like big tech in general and how kind of, it strips the humanity out of a lot of these situations and the person is just, Nope. Well, you know, bot says, no, go away. Also a lot of these huge services and huge companies that like they're making tons of money and there's not really a way to talk to somebody, about it.

23:26 Yeah. Think how important your, your Gmail is at, which connects to your Google docs and everything else and your photos. What if something goes wrong with your personal Gmail? There's no one to talk to. There's no recourse, right? It's just, well, all of your tax documents or whatever you happen to store wherever are good luck with that. Yeah. Or I mean, PayPal has been notorious about this too, of just like holding funds. Just, yeah. We're like, we're just holding it for 30 days. I, but I need it to like do there's no, there's nobody to talk to, but yeah.

23:55 Sorry, Reuven. Sorry. Well, extras. I got a couple. do you, do you want to do yours or?

24:05 Yeah, sure. I got my, yeah, sure. Mine, I almost made this an extra, extra, extra, extra episode because here all about it. Cause there's a lot of extras, but I'll, I'll, I'll go quickly. So first of all, I have spoken about McFly, which is an awesome new UI for state, like pretty much all the shelves on MacOS. I believe it's restricted to MacOS. Like it seems like a lot of these things are, but I love that. And so, Nick suggested that I check out Atuin, A T U I N making your shell magical with sync, search and backup of your shell history with end to end encryption, even so very, very cool. It's got a really nice UI with like a pop up that lets you search and navigate. it'll let you search through, like global, you know, all of the history or contextual based ones. Like what have I done in this directory before?

25:02 Isn't that cool? It even stores whether the thing succeeded or not. So super, super cool. People can check this out. I believe it is, pretty cross platform. I don't think it's yeah, it's written Russ. I think it works at least, probably on Mac and Linux. This is actually created by Ellie Huxtable. So very nice job, Ellie and, props to her 701 Huskvar and a cool picture of her out riding somewhere. So anyway, yeah. If that sounds interesting, check Atuin or however you say it out. Pretty neat. Nice. let's see. JupyterCon 2023 had a ton of great talks. There's 86 videos with a surprisingly only 2,400 views across all 86 videos, but we're trying to change that. People should check it out. So all those sessions from JupyterCon 2023 are out and I'll link to those. And there's many things like, look at that second one there. Shelley has a JupyterHub pytest plugin. Nice. Cool. Yeah. Yeah. Neat. And then I'm going to make sure I give credit for this one. Hemu sent in something. This is all, this is the episode on shells. So it's an interesting thing about, Hey, I talked about warp, right? where warp is really awesome because it lets you treat what you type as a, as an editor. So like I could type something, then double click part of it. It'll select it. I could just start typing and use my mouse, all sorts of things. So, you know, you can do kind of, sort of a little bit, half of that, with Zia Z shell and bash. So if you set it up, right, you can basically get, you already mentioned this, Brian, the Vim key bindings, but you can also set up like Emacs key bindings, I believe as well on and send over technically directions for this. But I don't know, man, when I look at these things, they're just so, the man pages and stuff, I don't know, they bounce off my brain. Like I just, I look at this. I'm like, just an example, anyone example, anyone anywhere in here, like, could you just give me an example of what I need to do to make this work? But no, it's just like this parameter affects it in this way. I'm like, great. But what is the one thing I need to just, so I get that, you know, anyway. And, did you know the Z shell is hosted on source forge of, Ooh, okay. Makes me a little less happy to use Z shell, honestly, just from a, or not. It's, it's been around a while and there's no churn in it.

27:25 Yeah, I know. That's true. It's the default Mac is probably sufficiently safe, but yeah, anyway, those, thank you Timo for sending those in people can check them out if they don't want to deviate from where they are. All right. Carrying on. It was a rough weekend, Brian.

27:40 Okay. It was a rough weekend. no, it kind of was like, I had a little bit of a cold. Then I got both the COVID vaccine and the flu vaccine all at once. And so then I was like three times sick, but it was also rough in the sense that a really cool feature for the rough or matter came out, AKA rough black, which is, cool. So that was a, I think some, major version was released.

28:03 Skylar who originally told us about this, sending a message like, Hey, there's kind of a major release. And the one thing that was holding me back from using it was, I was, I talked to Charlie Martian and he said, Hey, we're already working on this, but I'm like, Hey, I much prefer using a single quote instead of double quotes. It's like, help us understand why. So one of the main reasons is like, I have RSI stuff that I got to be careful about. I'm fine. As long as I'm careful. But if I'm not, then I'm not. Yeah. So for example, if I wanted to type the letter a, as a character, I use double quotes. It's five keystrokes. If I use single quotes, it's three keystrokes. Right. And it's also, you know, fewer hands in action, just like less wear and tear. So I'm like, really don't want to switch double quotes like black does. So for a rough for matter added, somewhere, I maybe don't have any, I have it in the show notes you have, you just say, format dot quotes, I equal single. And then instead of going to double quotes, it goes to single quotes, but it also has some exceptions for like doc strings and things like that. So pretty cool. So the other sense in which it was a rough weekend is I blasted, all the, the podcast websites and the training website with rough dash, rough format and formatted like 600 Python files with it. And it took it like a champ and just like rough itself.

29:22 It's so fast. You go format these 600 or these, I guess one project, probably the biggest one had 350 format, these 350 Python files. It done. It didn't work. What did it do? And it literally just goes straight away. It's awesome. Nice. Yeah. It's super fast. Yeah. Super fast. And okay. So, glyph says, Hey, thanks for the quick Mac hockey shout out last week. And more importantly, my video for that whole talk, which featured that, but like six or seven other cool things that you should check out is now online. So I'll link it to the video for him there. Nice.

29:55 That was a good one. All right. That's it. Other than Joe, what are your extras?

29:59 Okay. Well, I got a couple, Ned batch elder, wrote a post, said, where did everybody go?

30:04 so basically kinda, you know, post Twitter, where are people and the, and you know, we've covered this before. I'm like, I've tried new things lately. one of the things he talks about is a blue sky and I've tried that. I would say I'm not going to try threads because it's because of where it comes from. But, I tried blue sky and it's just seems to be empty to me. there's, it's slowly gaining traction. But one of the things that I, why I bring this up is one of the commenters said, Oh, by the way, remember that sir, text search now works on master on. And I kinda didn't know about that. So I wanted to make sure that people knew that. and we could play with it here. Oh. And I also wanted to show off a picture of my cats. So this was, this was my bad cat yesterday getting into things. But so if you go up and just do search, we can, we can just search for stuff now and it, and it doesn't, it's more than just the people you follow. So that's pretty nice. Yeah. That originally was, protect people that might go use the search to find people or groups they want to like jump on and start yelling at. So if you can't search for them, you can't find them. You can't be mean to them, but it really did take away. I'm like, I just, who was talking about this thing? I have no way of knowing. Right. And so I probably positive. I certainly useful. Yeah. It's useful. It's useful for me to have search. and Hey, look at that. high charm and JetBrains are doing a webinar about testing on November 21st.

31:35 That that's cool. I'll definitely have to check that out. so, and the other thing I wanted to bring up is I released, I'm still working on the, the complete PI test course, which is not quite complete yet. but chapter nine was released, last week, over the weekend and chapter nine covered, covered coverage. And, my, my use of, coverage has changed over the past year or so. So, I kind of reflect that the video is well, way updated version of how I use coverage than when I wrote the book. So that's nice. Awesome. Those are my extra rats.

32:09 Glad you're making progress there. That's excellent. Thanks. Before we get to the joke, two things, two comments from blaze. I used to work at the Google apps team when it was started.

32:18 The goal was to have zero personal interaction, which I can understand that, but it sure leaves you in a lurch when the automation doesn't treat you well. Right. And add to an user for the past year. Pretty cool. Like me, no idea how to pronounce it. Jeremy says Python REPL also uses, realign. So anything bash edit can do too. So now I have Vim and my Python REPL, which is kind of cool. Okay. Yeah. All right. Ready for a joke? Yeah. Do it. Let's do it. All right. So this one is visual, but just imagine a normal, normal distribution. Okay. And the height is representing code complexity. And can I open this? Yes. And the X, what would be the X axis is representing years or time of programming. Okay. So right in the beginning, when you're brand new, you write super simple code, right? I'm just getting started. I got some for loops of function maybe. And then as you get a little experience, it goes up in complexity. It got object oriented programming everywhere, a little farther design patterns, baby at the peak of the normal distribution, you've got abstract interfaces. I might need this later. And this is what the experts do. But, but as time goes on, you go right back down that slope after like 10 years of programming, you're back to like super simple code. It's honestly, this really connects with me as a kind of a lesson. Yeah, definitely. Yeah. I had, a couple of years ago, I had some people at the company asked me to, to develop a template that people could use to write their test code. So I had a test with one function in it called the def test underscore, and it said, assert true. That was it. I'm like, okay, here's your template. you don't really need much.

34:05 Yeah. And also the OOP everywhere. I mean, I remember doing tons of classes now, even with my C++ code, I tried to avoid as many classes as I can. yeah.

34:18 Cause it just gets in the way. This totally looks like my life. Yeah.

34:21 Yeah. Mine too. I think classes are fine, but like deep object hierarchies and trying to make object hierarchies to find the whole world is a pretty bad adventure.

34:30 Although the worst I do think is that I might need this later. So let's build an abstraction around this concept rather than I'll just refactor it if I actually do. And Pat, Hey, Pat is out in the audience says less is more. Thank you. Indeed, Pat.

34:43 I'm a big fan of the term yagony that came up with the extreme programming. You ain't gonna need it.

34:49 You ain't gonna need it. So keep it simple. Something stupid. Indeed. Anyway. Well, thanks. Yeah. And I'll try to put this picture as the chapter art for this chapter. So glance down at your podcast player and you might see it. Yeah. Nice. Yeah. Even works in CarPlay. I don't know about Android auto. Haven't both listened to CarPlay. One of our, one of our episodes on Android with Android auto turned on, but I know it works for, for iOS. Okay. Don't look at your phone when you're driving though. It's true. It's true. All right. See you later, Brian.

35:26 Thank you everyone. Bye.

Back to show page