Transcript #358: Collecting Shells
Return to episode page view on github00: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.
00:18 Link right at the top of the show notes. You can connect with us on Fostadon. Again, links are up there.
00:24 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.
00:41 So Django, sorry, Django 5.0 beta one.
00:45 So, we are now, we're now in the 5.0 world of Django.
00:51 So, we're linking to the, to the basically announcement.
00:54 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.
01:00 It looks like, so, we've got the beta now, October 23.
01:06 There should be a release candidate November 20th and the final by December.
01:10 So, by the end of the year, there'll be a final.
01:11 Are you saying we're going to get Django 5 for Christmas?
01:13 Before? To get ready for Christmas.
01:17 Yes.
01:18 Yeah.
01:18 Honey, can you help me wrap presents?
01:20 No, I got to play with Django 5.
01:22 So, I'm pretty excited about this.
01:25 It looks pretty cool.
01:26 Let's look at some of the, some of what we got.
01:29 There's a release notes under development because it's still just the first beta.
01:34 But there's some really cool stuff.
01:37 One thing to note, I think we, we may have mentioned this before, but I can't remember,
01:41 that Django 5 only supports 3.10, 11, and 12.
01:45 So, they're best for it.
01:47 There's some we were talking about, oh, can't believe we're saying goodbye to 3.7.
01:50 Yeah.
01:51 And they're like, you know what, that's, we'll go into the future, baby.
01:54 3.10 and above.
01:55 Well, you know, and I, I actually think this is decent because there's some fun stuff in
02:00 3.10 and above.
02:01 And I haven't had any issues like upgrading any of the projects I've worked on.
02:06 They've been maybe minor things.
02:08 So, the, the last, the last few have been really easy upgrades, I think.
02:13 But, you know, other, your mileage may vary.
02:16 There's a note about third-party library support for older versions of Django.
02:20 And mostly, it's, you know, how to deal with looking for warnings.
02:25 So, you should be, if you don't support older, or if you're planning on not supporting new
02:30 versions of Python or Django or whatever, you should put warnings in.
02:34 And then people can run with, with warnings on with dash capital W and the D for deprecation.
02:40 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
02:47 do this.
02:47 So, that's pretty great.
02:48 Okay.
02:49 So, what's new?
02:50 Facet filters in the admin.
02:52 I have no idea what this is.
02:54 I don't know what this is, but it sounds neat.
02:56 So, that's cool.
02:57 The thing that I really, it was pretty excited about was the simplified templates for form
03:02 field rendering.
03:03 So, you know, when you're creating a form, there's a lot of ways to help you create forms.
03:10 There's extra plugins like crispy forms and others.
03:12 But this looks great.
03:15 So, look, this is the before picture.
03:17 This is the before form.
03:19 There's a lot in that form.
03:21 This is the after.
03:22 It's just a few lines of code.
03:24 It's really great.
03:25 So, for those of you listening, of course, check out the show notes and you can link,
03:31 you can see the link for where the release notes are.
03:33 So, just like maybe three or four lines of code versus 20-ish.
03:38 I mean, it's not terrible, but it's also kind of confusing.
03:40 So, this is just an email form with email and password or sign in form or something.
03:45 So, this is pretty cool.
03:46 Yeah.
03:47 There's more excitement to come.
03:48 Database computed default values.
03:51 This is actually a pretty big deal, I think.
03:54 Yeah.
03:55 Because things like now for a timestamp.
03:59 Well, now on your computer or now on the server or now, you've got one server running the database.
04:07 So, that'll be like a consistent time across everything.
04:11 But there's a whole...
04:13 Go ahead.
04:13 Sorry.
04:13 With a lot of these, like that default in the ORM, that happens in Python,
04:20 which means it happens on the web front-end server, along with all their times and latency.
04:25 So, there could be a little mismatch.
04:27 But if your server, your database server is in a different time zone or something,
04:30 it could be really out of whack.
04:31 The other is, if you have it set up a default that goes into the schema instead of just in Python,
04:39 some other tool creates something.
04:41 It will also take on those defaults, which is, I think, the bigger deal.
04:45 Oh, okay.
04:46 Cool.
04:46 Right?
04:47 Because if you use some database admin thing, you say, insert this and this.
04:50 But you're not doing it in Python.
04:51 Well, normally database defaults would kick in, but not previously if it was just in Python, right?
04:57 Yeah.
04:57 And so, if you're using...
04:59 Right.
04:59 Especially if you're using different tools also, having database defaults is an awesome thing.
05:06 Plus, it's faster, probably.
05:08 I don't know.
05:09 Seems like it might be faster.
05:11 There's also database-generated model field.
05:15 So, you can have your database generate fields based on other fields and have that be done in the database.
05:21 So, that's pretty cool.
05:22 And they give some examples in here.
05:26 And then, more options for declaring field choices.
05:28 This hasn't been something I've run into, but apparently that's the current set.
05:33 And we have new set.
05:34 We can do things like integer fields and stuff, I think.
05:38 Oh, also, there's like a...
05:40 I don't know.
05:40 There's a different API for this.
05:42 And if it's been an issue, hopefully it's not an issue for you anymore.
05:45 But anyway.
05:46 And then a bunch of other minor features, but I'm sure there's been tons of bug fixes and everything like that, too.
05:51 So, this is pretty exciting.
05:52 It's pretty cool.
05:54 That other one, those new types of fields, it looks like it supports string enumerations.
06:00 Oh, okay.
06:01 Which is pretty cool.
06:01 If you go back down to that example there.
06:03 I'm declaring field choices.
06:05 Yeah, I think so.
06:05 Yeah.
06:06 See how it says choices, metal.choices.
06:09 So, you could have a gold, silver, or bronze option.
06:13 Oh, right.
06:13 And those are the only three string values.
06:15 Instead of it's just a string, it's like basically a string enumeration type thing, which is pretty cool.
06:20 Yeah.
06:20 Okay.
06:21 Yeah.
06:21 Neat.
06:22 While we're talking about Django, I want to go ahead and do it.
06:26 This was going to be an extra, but I thought I'd go ahead and call out that Django, there's a couple things.
06:33 There's Django Not Space, which we covered a few episodes ago, which is a place where you can kind of, with mentors, learn about Django, learn about how to help maintain Django, maybe.
06:45 Django Not Space is now accepting applications for the next contributor.
06:51 And then, you know, I think it's a lot of people.
06:52 And then, you know, I think it's a lot of people.
06:54 And then, you know, I think it's a lot of people.
06:55 And then, you know, I think it's a lot of people.
06:56 And then, you know, I think it's a lot of people.
06:57 And then, you know, I think it's a lot of people.
06:58 And then, you know, I think it's a lot of people.
06:59 So, not that long, though.
07:02 So, get on that.
07:03 And then, you know, I think it's a lot of people.
07:07 And then, you know, I think it's a lot of people.
07:09 And then, you know, I think it's a lot of people.
07:11 And then, you know, I think it's a lot of people.
07:12 And then, you know, I think it's a lot of people.
07:13 And then, you know, I think it's a lot of people.
07:14 If you're a Django person, fill out the survey.
07:16 It'd be nice.
07:17 And then, when we get results, we can maybe cover it on the episode also.
07:21 So, yeah.
07:22 Yeah, that'd be great.
07:23 All right.
07:24 This next item, Brian, is inspired by you.
07:27 Okay.
07:28 Okay.
07:29 So, last week, we were talking about Windows Terminal.
07:33 We were talking about the Git Bash CMD thing for Windows, whatever the heck.
07:40 It's called the Bash shell that comes with Git when you install it on Windows.
07:46 And I said, hey, why don't we just add that to the Windows Terminal?
07:49 And you're like, wait, the Windows Terminal?
07:51 The Windows Terminal is, of course, something that Windows 10 or above can get, but you have,
07:56 you don't have it.
07:57 You have to go to the Windows Store and install it.
08:00 And it's pretty awesome.
08:01 It comes with a bunch of different shells, like Command Prompt, PowerShell, Windows Subsystem
08:06 Linux Bash or whatever you got installed down in the subsystem, I suppose.
08:11 Pretty cool.
08:12 It even has GPU acceleration for the text rendering, which is kind of cool.
08:17 You know, motivated by Warp, right?
08:18 Because they were, they're programming like metal on the GPU for their stuff.
08:23 So, you know, so are they here on the Windows one.
08:26 But I wanted to talk about adding it because if you just go to the Git Bash command prompt command
08:33 and try to take that and stick it into the Windows shell, it doesn't actually work.
08:37 It, you click show me the shell and all it does is launch command prompt in another window with the Git Bash.
08:43 I'm like, huh, that's not doing it.
08:44 So I found this article called add Git Bash to Windows.
08:47 And it has this real helpful message at the box bottom here, Brian.
08:50 It says, you're seeing this message because add or script blocking software is interfering with this page.
08:55 Disable any add or script block.
08:57 It's not interfering.
08:58 It's blocking malware delivered over retargeting networks.
09:02 So I'm helping them with their wording here and they can then correct that later.
09:05 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.
09:14 But most importantly, what the actual thing that is 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.
09:24 Okay.
09:25 Pretty cool.
09:26 Yeah.
09:27 And it shows you how to even set the icon if you wanted to have the right icon in the dropdown.
09:30 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 get version.
09:38 But then of course you get the dropdown.
09:39 So like, here's what my windows machine looks like.
09:42 After I set this up, you've got windows power shell command prompt, Azure cloud shell power shell, which is different than windows power shell.
09:49 It's the older one.
09:50 I could apparently the developer command prompt for VS visual studio, 2022 power shell for the same thing and the bash one, which is pretty cool.
09:59 Yeah.
10:00 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.
10:08 Cause we talked about that last time.
10:09 And I have more to say about shells later.
10:10 So what funny thing about happened between last week and this week, my laptop died.
10:16 Oh no.
10:17 And you didn't try to do this and kill it.
10:19 Did you?
10:20 No.
10:21 What happened to it?
10:22 I think the fan was just freaking out or something.
10:24 Oh, okay.
10:25 And so I grabbed a, this was a work thing.
10:29 So I got a new laptop and it came with windows 11 and this was already installed.
10:35 So.
10:36 Okay.
10:37 I don't, I don't know if it automatically does it or if my IT department did it for me.
10:40 Yeah.
10:41 I don't know.
10:41 It probably is already installed on windows 11, but not in windows 10.
10:44 I don't think.
10:45 But then when I loaded a windows bash or get for windows, it just did this like on windows
10:52 11, it just installed it in the right place.
10:54 And so I can, Oh, that's pretty cool.
10:56 It registered one of these profiles or something, huh?
10:58 Yeah.
10:59 Yeah.
11:00 So that was cool.
11:01 Excellent.
11:02 I think, you know, if, if you're going to use one of these alternate shells on windows,
11:05 you might as well use this like nice front end container thing.
11:08 And you know, the funny thing was, is I was, I was worried about it because most of our,
11:13 I'm used to like worrying about operating system changes because of the compile dependencies
11:18 and stuff.
11:19 But, but we're doing all of our compiles in Docker images now.
11:22 And it's like, Oh, I don't actually have to care about that anymore.
11:25 So that's nice.
11:26 We were running windows seven.
11:27 Who cares?
11:28 Wait a minute.
11:29 Wait a minute.
11:30 I don't know if you can get windows with Docker desktop to run on windows seven, but you
11:34 know, I know that was a joke.
11:35 You probably cannot, but even if you can, you probably should not.
11:39 All right.
11:40 I think that's, yeah, that's the last, that's the last, I guess.
11:42 I got to say about that.
11:43 So if you're on windows and definitely check out the windows terminal, which is a much,
11:48 much nicer than command prompt and, you know, plug in your shells.
11:51 And then we can talk more later.
11:53 Some other time about like, Oh, my posh, which I think I've talked about before.
11:56 Well, I gotta get, I'd still want to get set up on that.
11:59 So yeah.
12:00 Oh, it's so much better.
12:01 Yeah.
12:02 It's so good.
12:03 Well, should we talk about testing a little bit?
12:06 Yes.
12:07 Sure.
12:08 Do it.
12:09 So here's an article from Alex Jacobs, mastering integration testing with FastAPI.
12:14 And I know it's focused on FastAPI, but it's just kind of a really pretty good walkthrough
12:19 of, of different types of testing for a website or well, an API at least.
12:25 And that's, and it's, it's pretty great.
12:27 So first off really quick description of what a integration testing is.
12:32 And it's, I've, I've had a hard time describing what integration testing is to other people.
12:39 So kudos for them to Alex.
12:41 So integration testing involves combining individual units of code and testing them as a group.
12:46 Maybe kind of this type of testing aims to expose faults in interactions between integrated units.
12:52 Yes, definitely.
12:53 So basically you get to decide how much of the system you're going to put together.
12:58 And, and if there's things that you want, don't want to include, that's kind of where this article comes in.
13:03 It's it's challenging to do this, especially with web applications.
13:07 So he goes through a lot of common things that you'd want to do, which is great.
13:11 So he has a little, a little test app, which I think is pretty kind of, kind of fun.
13:16 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.
13:27 So that's kind of cool.
13:28 Anyway, talks about, okay, you're going to have to authenticate for almost all applications.
13:34 So how do you, how do you mock that so that you can get around testing with that?
13:38 So mocking authentication talks about that testing the login page also talks about both testing.
13:46 So one of the things that's kind of neat is he's using PI test, but he talks about how to do this straight in one test, 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.
13:59 And that's pretty cool.
14:00 So mocking authentication talks about in, in the test client or within the test client here is, is his fixture.
14:09 And then, directly in the tests.
14:13 So kind of goes through a lot of detail with the authentication part, because it's the first time he's talking about mocking.
14:18 Then also how about external APIs?
14:21 So authentication is something you'd want to like, put some mocking around so you can test that thoroughly.
14:25 External APIs, definitely, because you don't really want to be hitting that a lot.
14:30 And also you don't have control over what the external API is going to return.
14:33 So you want to have more control over this.
14:36 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.
14:51 Oh, he, when he's creating a fixture for it, he's using indirect parameterization, which is, it's kind of a cool advanced by test technique, but, he explains it fairly clear, clearly.
15:03 And it's, it's, it's pretty nice.
15:05 So, Oh, here it is.
15:06 new, anyway, somewhere indirect indirect.
15:10 Yeah.
15:11 I love seeing indirect cause it's kind of a, it took me a while to get my head around indirect video.
15:15 So, okay.
15:16 So mocking authentication, mocking, an external API.
15:21 And then something else is, you might want to mock the database, because you can possibly fill up your database with, you could, you can use a, a temporary database or a small one, but you might want to just mock it also.
15:33 so talks about mocking, MongoDB client or MongoDB database.
15:38 So anyway, nice, nice discussion of testing a service, specifically for FastAPI, but I, I kind of think this applies to everything.
15:46 Doesn't it?
15:47 Yeah, I think so.
15:48 So anyway, makes me, think of VCR pie.
15:53 Yeah.
15:54 When you, if you're mocking out a call to external APIs, just record it, play it back.
15:58 Like that one was good.
15:59 We'll just do that.
16:00 And, on a lot of my integration tests, I just talked to MongoDB.
16:06 Yeah.
16:07 It's fine.
16:08 So do you, 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.
16:21 You know, it's like, Oh, here's a list of podcasts or here's a list of courses.
16:25 And it, it doesn't necessarily need to know.
16:28 It doesn't need to depend on what those are.
16:30 So yeah.
16:31 Anyway, yes, you have to rewind it.
16:33 Tyler as a VCR pie.
16:35 you don't have to, but there is a fee if you take it back without, without rewinding.
16:40 So yeah.
16:41 Be kind.
16:42 Rewind.
16:42 Yeah.
16:43 Be kind.
16:43 You gotta be a certain age to remember that.
16:45 Remember that?
16:46 Like you're like, Oh, I got this new movie and I got to rewind it.
16:49 They didn't rewind it.
16:50 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?
16:55 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.
17:05 So maybe it was fast.
17:06 Yeah.
17:07 Yeah.
17:08 Anyway.
17:09 Yeah, exactly.
17:10 Yeah.
17:11 So, Mojo logic says blockbuster, charges.
17:14 If you don't do it, that's true.
17:15 Or your PRs don't get accepted.
17:17 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:24 This is so bad.
17:25 So this was recommended to us from Pat Decker previously on the show.
17:29 And it's an article essay by Reuven Lerner, who like us teaches Python and teaches data science and stuff.
17:36 And I will tell you the hardest part of our job is not writing courses, not coming up with courses.
17:43 It's gaining awareness.
17:44 It is so difficult to cut through all the noise.
17:48 And even if you built something awesome for people to actually go, oh, maybe I'll pay attention to that for, you know, one minute to see if it is awesome.
17:54 So we all have to try different ways.
17:56 Some of us start podcasts, others of us do different things.
18:01 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.
18:09 Right.
18:09 Plenty of people are, over there.
18:11 So he does and pretty soon it turns out his ad count is canceled.
18:16 Yeah.
18:17 Goes in there and says you are banned for violating Facebook's policy on advertisement.
18:23 He's like, I just don't know what I could have done wrong.
18:27 Like I'm, it's so benign.
18:29 I'm trying to sell corporate training to software developers for the most popular language, by some standards in the world.
18:37 I'm a reputable guy.
18:39 I've been doing this for a while.
18:40 It's not a shady business.
18:42 No banned, but there's a way to, protest the ban.
18:47 So he protested the ban and they said, no, you're definitely banned.
18:49 In fact, let's see if I can find it.
18:51 bum, bum, bum, bum, bum, bum.
18:53 Somewhere should be more bold in here.
18:55 Shouldn't it?
18:56 Anyway, it says somewhere you're banned for life.
18:59 Not only are, is your ad account temporarily banned, you will never ever advertise on Facebook again.
19:06 Okay.
19:06 Why was that Brian?
19:08 Because he was, they thought he was selling pandas and pythons.
19:13 Actual pandas and actual pythons.
19:17 So, okay.
19:18 So it's a misunderstanding, right?
19:20 Let me give you all a glimpse into how big tech works.
19:23 There's a misunderstanding.
19:24 They have all these economy of scales.
19:26 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.
19:40 Or in examples that I've run into in the, 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.
20:00 That's its title, learn Python.
20:02 And mine is called talk Python courses or something along those lines in the Google play store.
20:07 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:15 Right.
20:15 Yeah.
20:16 Violated.
20:16 You're trying to infringe upon the copyright of learn Python.
20:19 That app already exists.
20:21 Banned.
20:22 Excuse me.
20:23 Like, so I wrote back, surely you must misunderstand.
20:26 I'm not trying to say the title is learn Python.
20:29 It's just, it's an act that one takes one learns a subject and the subject happens to be Python.
20:35 And so with our app, you can learn it.
20:36 They're like band protest band.
20:39 I'm like, what is going on here?
20:41 And so finally I had to just change the subject.
20:43 I said, okay, what if you were, we're learning a guitar.
20:46 You want to learn music.
20:47 And so with our app, you can learn the guitar.
20:52 They're like, oh, I see the problem now.
20:54 Yes, you're right.
20:55 That's not the same thing as the title of learn guitar, the app, but it took a week back and forth.
21:00 And this is exactly the same situation.
21:02 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.
21:11 But where do you go?
21:12 Like I protest as high as I could.
21:14 And they're like, nope, banned.
21:16 I'm like, this doesn't even make any sense.
21:18 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 to retarget.
21:27 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:34 Like the, the worst part is he's just put his head in the sand and said, jerks for a while.
21:40 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.
21:47 And so even though he has friends at meta, they, nobody can help him because they threw away the data that would have proved he was selling Python courses, not Python animals.
21:58 And so he's permanently banned.
21:59 That's it.
22:00 Really?
22:01 Yes.
22:02 Yeah.
22:03 Because they, they, they won't do it.
22:04 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.
22:13 Those are not the same.
22:15 These people whose job it is to make that distinction.
22:18 Don't it's crazy.
22:19 Yeah.
22:20 Yeah.
22:21 Well, I guess if I ever want to advertise on Facebook, I'm glad that there isn't an animal named pie test.
22:28 yeah.
22:29 Oh, well.
22:30 And that you have a rocket, not some kind of animal.
22:33 David out there points out it's surprisingly crushing to have your app projected.
22:37 It really is.
22:38 Cause you work for months on it and then you think it's ready to launch.
22:41 And then it's just like, Nope, there's absolutely no path forward to even delivering it.
22:45 It's not like a website you just put on and people can like it or not.
22:48 Yeah.
22:49 But I mean, also, I mean, Reuben, it is, is like cutting off advertising channel is, is pretty big deal.
22:56 it is a pretty big deal.
22:57 So I think, you know, the more, the reason I brought this up is I think it shines a light
23:02 onto just like big tech in general and how kind of it strips the humanity out of a lot of these situations.
23:09 And the person is just, Nope.
23:10 Well, you know, bot says no, go away.
23:12 Also a lot of these huge services and huge companies that like they're making tons of money.
23:24 And there's not really a way to talk to somebody, about it.
23:26 I think how important your, your Gmail is at which connects to your Google docs and everything else in your photos.
23:32 What if something goes wrong with your personal Gmail?
23:34 There's no one to talk to.
23:35 Yeah.
23:36 There's no recourse, right?
23:37 It's just, well, all of your tax documents or whatever you happen to store wherever are good luck with that.
23:43 Yeah.
23:44 Or I mean, PayPal has been notorious about this too, of just like holding funds.
23:47 Yeah.
23:48 Yeah.
23:49 I'm holding it for 30 days.
23:50 I, but I need it to like do, Nope.
23:53 There's no, there's no way to talk to, but yeah.
23:55 Yeah.
23:56 Sorry, Reuben.
23:57 Sorry.
23:58 Yeah.
23:59 Well, extras.
24:00 I got any extras.
24:01 I got a couple.
24:03 do you, do you want to do yours or?
24:05 Yeah, sure.
24:06 I got my, yeah, sure.
24:07 Mine.
24:08 I almost made this an extra, extra, extra, extra episode because you're all about it.
24:12 Cause there's a lot of extras, but I'll, I'll, I'll go quickly.
24:14 So first of all, I have spoken about McFly, which is an awesome new UI for like pretty much all the shells on macOS.
24:25 I believe it's restricted to macOS.
24:27 Like it seems like a lot of these things are, but I love that.
24:30 And so, Nick suggested that I check out a twin, A T U I N making your shell magical with sync, search and backup of your shell history with end to end encryption.
24:43 Even so very, very cool.
24:45 It's got a really nice UI with like a pop-up that lets you, you know, search and navigate.
24:50 it'll let you search through, like global, you know, all of the history or contextual based ones.
24:59 Like what have I done in this directory before?
25:01 Isn't that cool?
25:02 Oh, that is stores, whether the thing succeeded or not.
25:05 So super, super cool.
25:07 People can check this out.
25:08 I believe it is on pretty cross platform.
25:12 I don't think it's, yeah, it's written Russ.
25:15 I think it works at least, probably on Mac and Linux.
25:18 This is actually created by Ellie Huxtable.
25:22 So very nice job, Ellie and, props to her.
25:26 Seven one Husqvarna cool picture of her out riding somewhere.
25:29 So anyway, yeah.
25:30 If that sounds interesting, check at to win or however you say it out for the name.
25:35 Pretty neat.
25:36 Nice.
25:37 let's see.
25:38 Jupyter con 2023 had a ton of great talks.
25:41 There's 86 videos with a surprisingly only 2,400 views across all 86 videos, but we're trying to change that.
25:48 People should check it out.
25:50 So all those sessions from Jupyter con 2023 are out and I'll link to those.
25:56 And there's many things like, look at that second one there.
25:59 Shelly has a Jupyter hub, PI test plugin.
26:02 Nice.
26:03 Cool.
26:04 Yeah.
26:04 Yeah.
26:04 Neat.
26:05 And then I'm going to make sure I give credit for this one.
26:08 Hemu sent in something.
26:10 This is all, this is the episode on shell.
26:12 So it's an interesting thing about, Hey, I talked about warp, right.
26:16 where warp is really awesome because it lets you treat what you type as a, as an editor.
26:22 So like I could type something, then double click part of it.
26:25 It'll select it.
26:26 I could just start typing and use my mouse, all sorts of things.
26:28 So, you know, you can do.
26:30 And disorder a little bit, half of that, with Z shell.
26:34 Yeah.
26:35 Yeah.
26:35 And bash.
26:36 So if you set it up, right, you can basically get, you already mentioned this, Brian, the
26:41 Vim key bindings, but you can also set up like Emacs key bindings.
26:45 I believe as well on and sent over technically directions for this.
26:50 But I don't know, man, when I look at these things, they're just so, the man pages and stuff.
26:55 I don't know.
26:56 They bounce off my brain.
26:57 Like I just, I look at this.
26:58 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?
27:03 But no, it's just like this parameter affects it in this way.
27:07 I'm like, great.
27:08 But what is the one thing I need to just so I get that?
27:10 You know, anyway.
27:11 Yeah.
27:12 And, did you know, the Z shell is hosted on source forge of who?
27:16 Okay.
27:17 I'm a little less happy to use Z shell, honestly, just from a, or not.
27:21 It's a, it's been around a while and there's no churn in it.
27:24 yeah, I know it's true.
27:26 It's the default Mac is probably sufficiently safe, but yeah.
27:30 Anyway, those, thank you Timo for sending those in.
27:33 People can check them out if they don't want to deviate from where they are.
27:36 All right.
27:37 Hearing on.
27:38 It was a rough weekend, Brian.
27:39 Okay.
27:40 It was a rough weekend.
27:41 no, it kind of was like, I had a little bit of a cold.
27:44 Then I got both the COVID vaccine and the flu vaccine all at once.
27:48 And so then I was like three times sick, but it was also rough in the sense that a really
27:53 cool feature for the rough or matter came out, AKA rough black, which is, cool.
27:59 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
28:06 a major release.
28:07 And the one thing that was holding me back from using it was, I was, I talked to Charlie
28:13 and he said, Hey, we're already working on this, but I'm like, Hey, I much prefer using
28:18 a single quote instead of double quotes.
28:20 It's like, help us understand why.
28:22 One of the main reasons is like, I have RSI stuff that I gotta be careful about.
28:26 I'm fine.
28:26 As long as I'm careful, but if I'm not, then I'm not.
28:28 Yeah.
28:29 So for example, if I wanted to type the letter a as a character, I use double quotes.
28:34 It's five keystrokes.
28:35 If I use single quotes, it's three keystrokes.
28:37 Right.
28:38 And it's also, you know, fewer hands in action.
28:42 It's like less wear and tear.
28:43 So I'm like, really don't want to switch double quotes like black does.
28:47 So for a Ruff formatter added, somewhere, I maybe I don't have any, I have it in the show
28:54 notes.
28:55 You have, you just say, format dot quote style equals single.
28:58 And then instead of going to double quotes, it goes to single quotes, but it also has some exceptions
29:02 for like doc strings and things like that.
29:04 So pretty cool.
29:05 So the other sense in which it was a rough weekend is I blasted, all the, the podcast websites
29:12 and the training website with rough dash, Ruff format and formatted like 600 Python files with it.
29:18 And it took it like a champ and just like rough itself.
29:21 It's so fast.
29:22 You go format these 600 five or these, I guess one project, probably the biggest one at 350.
29:27 If one had 350 format, these 350 Python files.
29:30 It done.
29:31 It didn't work.
29:32 What did it do?
29:33 And it literally just goes straight away.
29:35 It's awesome.
29:36 Nice.
29:37 Yeah.
29:38 Super fast.
29:39 Yeah.
29:40 Super fast.
29:41 Okay.
29:42 So, glyph says, Hey, thanks for the quick Mac hotkey shout out last week.
29:45 And more importantly, my video for that whole talk, which featured that, but like six or seven
29:50 other cool things that you should check out is now online.
29:53 So I'll link it to the video for them there.
29:55 Nice.
29:56 All right.
29:57 That's it.
29:58 Other than joke.
29:59 What are your extras?
30:00 Okay.
30:01 Well, I got a couple, Ned Batchelder, made wrote a post said, where did everybody
30:04 go?
30:05 so basically kind of, you know, post Twitter, where are people and the, and you know, we've
30:10 covered this before.
30:11 I'm, I'm like, I've tried new things lately.
30:14 one of the things he talks about is a blue sky and I've tried that.
30:19 I would, I'm not going to try threads because it's because of where it comes from.
30:23 But, I tried blue sky and it's just seems to be empty to me.
30:27 there's, it's slowly gaining traction.
30:29 But one of the things that I, why I bring this up is one of the commenters said, oh, by
30:35 the way, remember that cert text search now works on Mastodon.
30:38 And I kind of didn't know about that.
30:41 So I wanted to make sure that people knew that.
30:43 and we could play with it here.
30:45 Oh, and I also wanted to show off a picture of my cats.
30:48 So this is, this was my bad cat yesterday getting into things.
30:52 But so if you go up and just do search, we can, we can just search for stuff now.
30:57 And it, and it doesn't, it's more than just the people you follow.
31:00 So that's pretty nice.
31:02 Yeah.
31:03 That originally was, protect people that might go use the search to find,
31:07 people or groups they want to like jump on and start yelling at.
31:11 So if you can't search for them, you can't find them and you can't be mean to them.
31:14 But it really did take away from like, I just, who was talking about this thing?
31:19 I have no way of knowing.
31:20 Right.
31:21 Yeah.
31:22 And so I probably positive.
31:23 I certainly useful.
31:24 Yeah, it's useful.
31:25 It's useful for me to have search.
31:27 and Hey, look at that.
31:28 hi charm and jet brains are doing a webinar about testing on November 21st.
31:34 That that's cool.
31:35 I'll definitely have to check that out.
31:36 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.
31:46 but chapter nine was released, last week on over the weekend and chapter nine covered, covered coverage.
31:53 And, my, my use of, coverage has changed over the past year or so.
31:58 So, I kind of reflect that the video is a way updated version of how I use coverage than when I wrote the book.
32:05 So that's nice.
32:06 Awesome.
32:06 Those are my extra.
32:07 Awesome.
32:08 Glad you're making progress there.
32:10 That's excellent.
32:11 Thanks.
32:12 Before we get to the joke.
32:13 two things, two comments from blaze.
32:15 I used to work at the Google apps team when it was started.
32:17 The goal was to have zero personal interaction, which can understand that, but it sure leaves you an alert when the automation doesn't treat you well.
32:25 Right.
32:26 And a two end user for the past year.
32:28 Pretty cool.
32:29 Like me, no idea how to pronounce it.
32:31 Jeremy says Python repl also uses, realign.
32:37 So anything bash editing can do too.
32:39 So now I have Vim in my Python rebel, which is kind of cool.
32:43 Okay.
32:44 Yeah.
32:44 All right.
32:45 Ready for a joke.
32:46 Yeah.
32:47 Do it.
32:48 Let's do it.
32:49 All right.
32:50 This one is visual, but just imagine a normal, a normal distribution.
32:52 Okay.
32:53 And the height is representing code complexity.
32:56 And can I open this?
32:57 Yes.
32:58 And the X, what would be the X axis is representing years or time of programming.
33:04 Okay.
33:05 So right in the beginning, when you're brand new, you're right.
33:08 Super simple code, right?
33:10 I'm just getting started.
33:11 I got some for loops of function, maybe.
33:14 And then as you get a little experience, it goes up in complexity.
33:17 It got object oriented programming everywhere.
33:19 A little farther design patterns, baby.
33:21 At the peak of the normal distribution, you've got abstract interfaces.
33:25 I might need this later.
33:26 And this is what the experts do.
33:28 But, but as time goes on, you go right back down that slope after like 10 years of programming,
33:36 you're back to like super simple code.
33:38 It's honestly, this really connects with me as kind of a lesson.
33:42 Yeah, definitely.
33:43 Yeah.
33:44 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.
33:53 So I had a test with one function in it called def test underscore.
33:59 And it said assert true.
34:01 That was it.
34:02 I'm like, okay, here's your template.
34:04 You don't really need much.
34:05 Yeah.
34:06 And also the OOP everywhere.
34:09 I mean, I remember doing tons of classes.
34:11 Now, even with my C++ code, I tried to avoid as many classes as I can.
34:16 Yeah.
34:17 Cause it just gets in the way.
34:19 This totally looks like my life.
34:20 Yeah.
34:21 Yeah.
34:22 Yeah.
34:22 Mine too.
34:23 I think classes are fine, but like deep object.
34:25 Project 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.
34:32 So let's build an abstraction around this concept rather than I'll just refactor it.
34:36 If I actually do.
34:37 Yeah.
34:38 And Pat, Hey, Pat is out in the audience says less is more.
34:41 Thank you.
34:42 Indeed, Pat.
34:43 I'm a big fan of the term agony that came up with the extreme programming.
34:47 Yeah.
34:48 Ain't gonna need it.
34:49 You ain't gonna need it.
34:50 So.
34:51 Awesome.
34:52 Keep it simple.
34:53 Something.
34:54 Yeah.
34:55 I'll try to put this picture as the chapter art for this chapter.
35:01 So glance down at your podcast player and you might see it.
35:05 Yeah.
35:06 Nice.
35:07 Yeah.
35:08 Even works in car play.
35:09 I don't know about Android auto.
35:10 I haven't both listened to car play.
35:11 One of our, one of our episodes on Android with Android auto turned on, but I know it works
35:17 for, for iOS.
35:18 Okay.
35:19 Don't look at your phone when you're driving though.
35:22 It's true.
35:23 Yeah, it's true.
35:24 All right. See you later, Brian. Thank you, everyone. Bye.