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


Transcript #401: We must replace uWSGI with something else

Return to episode page view on github
Recorded on Monday, Sep 16, 2024.

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

00:05 This is episode 401, recorded September 16th, 2024.

00:10 And I'm Brian Okken.

00:11 And I'm Michael Kennedy.

00:12 And this episode is brought to you by Scout APM.

00:15 Check out their section later in the show.

00:17 Connect with us, Michael, Brian, or the show at Fostadon.org.

00:23 But any Mastodon will work.

00:26 But the links are, we're all on Fostadon, M. Kennedy, Brian Okken, and Python Bytes.

00:31 And of course, those are in the show notes.

00:33 And if you'd like to join the show live, head to pythonbytes.fm/live.

00:38 It's fun to do it at least once.

00:39 Check it out.

00:40 See what it's like to watch us in real time.

00:43 And we're going to try something new today.

00:47 We're streaming on X.

00:48 No?

00:49 We're trying to stream on X.

00:50 But when I hit go, it actually said you need a premium account.

00:54 So maybe we'll try that next week.

00:55 Oh, never mind.

00:56 See people in wrestling.

00:56 Or maybe we won't do it at all.

00:58 I don't know.

00:58 YouTube's good.

00:59 Okay.

01:02 And Michael even said to keep that quiet.

01:05 But just, you know, sorry.

01:06 I was pretty excited.

01:07 All right.

01:08 I know.

01:08 Well, we'll try it out.

01:09 I think, you know, reaching more people, letting them participate is great.

01:12 And we can give it a try.

01:13 And, you know, we've told people that we both have courses and there's other stuff.

01:18 But we're going to, there's a treat at the end.

01:20 If you wait until the end of the show, we've got some extras that we're going to talk about

01:25 with some of the courses.

01:27 It's pretty exciting.

01:27 So, but that's not now yet.

01:29 Now we have whiskey.

01:32 Whiskey, anybody?

01:32 This actually might make you want to drink this whiskey, micro whiskey in particular.

01:38 WSGI.

01:39 As some people say it, web service gateway interface.

01:41 The friend and sibling parent.

01:45 I don't know what the relationship of ASCII, the async gateway interface.

01:49 Anyway, this is something I ran across.

01:52 Just, I was doing some work with Granian.

01:55 So Granian is the web server that powers Python bytes right now.

01:59 And a couple other things, as you might imagine, and I was looking at it and it had a back reference.

02:04 And one of the issues that was a feature I was asking about, namely worker restarting after

02:09 certain amount of work gets done, things like that.

02:11 And it was coming from, I believe this comes from edX, some edX project, though I can't tell

02:19 by the organization.

02:20 Anyway, the title of this GitHub issue is, this is them speaking amongst themselves in this

02:25 project called tutor.

02:27 We must replace micro whiskey with something else.

02:29 Like, wait a minute.

02:30 Why must we do this?

02:31 Wait, let me see what's going on here.

02:33 So this is somewhat news to me.

02:36 The very opening here by, let's see, what is this?

02:38 I wrote this.

02:39 Regis Bimo wrote, micro whiskey is now in maintenance mode.

02:43 And sure enough, if you go over to read the docs, it says note, this project is in maintenance

02:48 mode.

02:49 Only bug fixes and updates for new language APIs.

02:52 Do not expect quick answers for GitHub issues or pull requests.

02:56 Sorry about that.

02:56 A big thanks to all users who have contributed over the last 15 years.

03:01 That's awesome.

03:01 However, I don't think that's awesome.

03:04 It's awesome that they've been working on it for 15 years and people, it's had such a good

03:08 run.

03:09 However, the part that's not great, as you point out, Brian, is this is a critical piece

03:15 of internet infrastructure when you're on the internet.

03:18 If this is running your app, right?

03:20 This is the thing that handles all Python requests and effectively has an open socket to the internet.

03:26 And anything that just listens on an open socket on the internet, especially stuff written in

03:30 C should make you nervous.

03:32 Right.

03:33 It's just, it's there, for, for, whatever might go wrong.

03:38 And so there's a couple of things going on here.

03:40 One, it's kind of, it's not fully, fully abandoned, but it's nearly fully abandoned.

03:45 Right.

03:45 And that's not great.

03:46 The other is it, I don't believe it supports asynchronous programming.

03:50 So if you want to do anything and async and await in your web apps, which is becoming

03:55 increasingly popular, there's also not an option.

03:57 So just for lots of reasons, it's probably time to find something else.

04:01 And so they listed four things, some of which I would not recommend, but maybe they're, maybe

04:07 they're wrong about it.

04:07 G unicorn, which by the way, some people pronounce gunicorn, but Brian, what is their logo?

04:13 It's a unicorn.

04:14 And what color is it?

04:15 Green.

04:15 It's a green unicorn.

04:16 I'm pretty sure he unicorn stands for green unicorn, not gunicorn.

04:20 But you know, y'all say it how you wish, but G unicorn is how I say it.

04:24 Cause it's a green unicorn mod whiskey, cherry pine waitress.

04:28 I don't hear of any of these as being kind of high end production servers, right?

04:34 Waitress is included with, pyramid as a debugging one, for example.

04:39 So looking through, it says some people are suggesting engine X unit, which is, like

04:45 a Python worker process that can run inside of engine X.

04:48 That could be interesting.

04:50 someone, this is how I found out about someone says, Hey, maybe we should look at,

04:53 granion and granion.

04:56 And I've had, I've had, Giovanni, the guy who creates it on talk Python to talk about

05:02 it.

05:02 It's written in rust.

05:03 It's super stable in terms of its performance fluctuations.

05:06 It's pretty nice.

05:07 And so that's what we're using now before that it was G unicorn.

05:10 I think there's some good options, but the long and short of it is micro whiskey is now

05:15 in maintenance mode.

05:16 And while that's not, you know, end of the line for it, I would start making plans to not

05:21 be running on micro whiskey.

05:22 If I was you and you were, you know what I mean?

05:24 Okay.

05:25 I mean, that's, I'm actually, I'm interested to hear if we get any feedback from listeners

05:30 that there might be other options or what the recommendations are.

05:33 Let us know.

05:34 Probably the best place would be to comment on the YouTube video.

05:36 Put it below there.

05:37 That's, that's kind of our comment sections these days.

05:40 Yeah.

05:40 Yeah.

05:40 Nice.

05:41 Okay.

05:41 All right.

05:42 Over to you.

05:42 Well, I was, interested, actually, I have a project where I was thinking about writing

05:48 a little segment of it in rust, even though I don't know rust yet.

05:52 but, but I was interested in the, the, a lot of places are, you know, optimizing little

05:58 bits of their code with rust instead of C now.

06:01 So, this is a great article from itamar.

06:04 I think it's itamar turing, traring Turner, try anyway, itamar, it's a article called

06:11 less build and optimized a rust extension for Python.

06:15 And I really love the, like the focus of this.

06:17 It isn't like, let's it's the focus of it really is.

06:21 I've got one algorithmic function that I want to speed up.

06:24 And that's, I think that's a great place for maybe not building a package for the rest of

06:29 the world to, to use, but internally for the internal tools, that's a great way to, to,

06:34 to look at things.

06:35 So his, his example is a, a thing of counting unique values and you could just

06:42 count them.

06:42 He's gotten the exact count is using sets and, the length of a set, but everything in

06:48 a set.

06:48 But, but he says, if you've got 10 million items, it'll be in a set with 10 million items

06:53 in it.

06:53 So there's a space limit there.

06:55 So, and then you take the length of that.

06:57 so I'm in there, you know, you probably count things or something, but, the,

07:04 is like, how do, how do we speed that up?

07:05 And one of the algorithms is a, it's called a very simple algorithm, from, I'm not going

07:11 to try to pronounce that name.

07:12 but he has a link to the algorithm that's getting an approximation of the answer,

07:17 how approximately how many.

07:20 And so he just implements that whole algorithm in Python and then, and then runs it and,

07:25 and it, and then runs it against the exact count.

07:28 And it's pretty close.

07:29 He runs it a few times and he gets different answers, but.

07:31 That's a crazy algorithm.

07:33 Yeah.

07:33 Oh, did you read it?

07:35 Well, just looking over it real quick.

07:37 It's, you know, given a iterable make some, and how fast adding new items is increasing the

07:44 duplicity or, or lack thereof.

07:46 Yeah.

07:46 That's pretty wild.

07:48 It is.

07:48 It's pretty close.

07:49 and I remember reading about this algorithm recently also, but anyway, it's kind of a

07:54 neat, neat example of, okay, let's try this algorithm out.

07:57 And there's other algorithms for approximating uniqueness as well.

08:01 comments later, but, he just took this one cause it's kind of a small algorithm.

08:06 So it kind of works.

08:07 and so let's, he did a speed comparison and it's, it's significantly slower.

08:13 It's, the, the exact count is point is 0.14 seconds and the approximation is 0.7

08:19 seven, eight seconds.

08:20 So it's, it's a lot slower than the exact count.

08:24 but it takes up tons less memory.

08:26 So if you have a like memory constraint, that's important.

08:28 and also if you're just doing an example from a small count, but you have a huge set

08:33 that you're really going to count, you want an approximation.

08:35 So, so this is a great, a great setup for how do we make this faster in rust?

08:41 And so he actually walks through all of the steps.

08:43 Like you haven't done this before.

08:45 let's get mature in and Pio three and set up a project.

08:51 he's, so he's even like, just mature in new rust counter prox project.

08:56 and then, goes into it, looks at, looks at what the project set up already.

09:02 It's got some cargo Toml files, pipe project Toml and a source file.

09:07 and, and then he just does it right there and, and figures out how to install it.

09:12 You can already install it, even though there's nothing there in the example project, which

09:15 is kind of cool.

09:16 he did look into it.

09:17 It needs, rust doesn't have a random in the example or the algorithm uses random.

09:22 So, this is kind of neat too, is, is how do you, introduction of how do you add,

09:27 dependencies and it's cargo add Rand and that it adds a dependency to your project.

09:32 so that's it.

09:34 You've got Pio three and Rand as dependencies.

09:37 And then he, just basically translated that algorithm directly to rust.

09:42 And I kind of like that idea of having just a side by side comparison.

09:46 And I'm thinking about like putting these in two editors so I could see them side by side.

09:50 Exactly.

09:51 okay.

09:53 So, so that, that thing, and then how is it faster?

09:56 It's, it's, it's like twice as fast as the Python version, but you would think like,

10:02 aren't we supposed to have like blazing speeds with rust?

10:04 so, and I kind of love that he picks something that like, isn't as, isn't as optimal.

10:09 Like I don't want that much, but like twice as fast.

10:12 I want it to be super fast.

10:14 So yeah, he also goes into some optimization.

10:16 So first, first off is link time optimization.

10:19 It's just an ability.

10:20 and since, since this is a rust application that you're going to not, you know, you, it's

10:27 fine to take a little bit extra time in linking to make it faster runtime.

10:31 Go ahead and turn that on.

10:32 And then, he was looking at the random number generator.

10:35 there's a couple of ways to speed that up.

10:37 One of them is to use the small random number generator.

10:40 It's like less random, but you know, good enough.

10:42 It's not cryptography.

10:43 Yeah.

10:44 And then, and then also there's, instead of storing in part of the algorithm,

10:50 he's storing items.

10:51 And he's like, instead of, and later taking hashes and instead of storing the items,

10:56 just store the hashes.

10:57 And then, and then, rust or rust has a thing like you can optimize the, the dealing

11:03 of, collections.

11:04 If you tell it that you're just storing hashes in there, so it doesn't try to rehash your hash.

11:10 and, so, so it's like a no hash hasher, another dependency, but that optimization,

11:19 altogether makes it even faster, but it's, it's, it's 0.21.

11:24 so it's, like what?

11:27 Almost four times faster, like a little three and a half times faster than the native, the

11:32 Python version.

11:33 So that's better.

11:34 then he talks about partially other things, but it's, I don't think this is a really about

11:39 how much faster his implementation of this was.

11:42 It's, these are the steps.

11:44 If you want to go through and, speed up a chunk of your Python code, this is a good

11:49 list of how to do that.

11:50 So.

11:50 Yeah.

11:51 Looks great.

11:51 I love the, the walkthrough.

11:53 And it's not a huge project.

11:55 It's not a huge rewrite and rust.

11:56 It's just this function slow.

11:58 Let's make this function fast.

11:59 And I think that's exactly how I'm going to try to probably learn rust is I'm not going

12:04 to try to learn the whole language.

12:05 I'm just going to learn enough to optimize something.

12:07 so, and then build on that.

12:09 Yes.

12:10 And now before we move on to things really quick, John out in the audience points out,

12:15 says, I believe mod whiskey is an Apache plugin module, which I think he's right.

12:18 Yeah.

12:19 I think that's as well.

12:20 And I just wouldn't really want an Apache plugin.

12:22 I would kind of like a thing that's a little more dedicated, but yes, I agree.

12:26 And then waitress is one of the few options available on windows based server platforms.

12:30 Okay.

12:30 That's interesting.

12:31 The context of the, the GitHub issue I talked about before was a Docker image.

12:36 And so I'm pretty sure it was Linux.

12:38 but yeah, I didn't know about the windows aspect there and I didn't point out like, well,

12:43 what would I have picked?

12:44 So reasonable options to Michael sound like granion, which we're using UV a corn, which used

12:50 to be a kind of dev thing.

12:52 And you could plug it into Gina corn with UV a corn workers, but actually it's now its own

12:58 standalone thing with worker management.

13:00 And so, so UV a corn is its own possible option.

13:02 Now hyper corn from Phillip Jones and court and then Gina corn with UV corn workers for

13:08 async stuff.

13:09 So anyway, putting a bow on that one.

13:12 Okay.

13:12 So you have a few things you do instead.

13:14 Yeah.

13:15 I don't, I'm just using granion right now, but all those would be good options.

13:18 I think.

13:19 Okay.

13:19 Let me tell you real quick about doubt APM.

13:23 They're big supporters of Python bytes.

13:25 So we appreciate that very much.

13:27 So if you are tired of spending hours trying to find the root cause of issues impacting

13:32 your performance, then you owe it to yourself to check out scout APM.

13:36 They're a leading Python application performance monitoring tool, APM, that helps you identify

13:42 and solve performance abnormalities faster and easier.

13:45 Scout APM ties bottlenecks such as memory leaks, slow database queries, background jobs, and the

13:50 dreaded N plus one queries that you can end up if you do lazy loading in your ORM.

13:55 And then you say, oh no, why is it so slow?

13:58 Why are you doing 200 database queries for what should be one?

14:00 So you can find out things like that.

14:02 And it links it back directly to source code.

14:03 So you can spend less time in the debugger and healing logs and just finding the problems

14:08 and moving on.

14:09 And you'll love it because it's built for developers by developers.

14:12 It makes it easy to get set up.

14:13 Seriously, you can do it in less than four minutes.

14:16 So that's awesome.

14:17 And the best part is the pricing is straightforward.

14:20 You only pay for the data that you use with no hidden overage fees or per seat pricing.

14:26 And I just learned this, Brian.

14:28 They also have, they provide the pro version for free to all open source projects.

14:33 So if you're an open source maintainer and you want to have Scout APM for that project, just

14:38 shoot them a message or something on their pricing page about that.

14:40 So you can start your free trial and get instant insights today.

14:44 Visit pythonbytes.fm/scout.

14:46 The link is in your podcast player show notes as well.

14:49 And please use that link.

14:50 Don't just search for them because otherwise they don't think you came from us.

14:54 And then they'd stop supporting the show.

14:55 So please use our link, pythonbytes.fm/scout.

14:58 Check them out.

14:59 It really supports the show.

15:01 Definitely.

15:01 I'm next, huh?

15:02 Yeah.

15:03 All right.

15:04 What if, Brian, what if you were super excited, finally be contacted by a recruiter for one

15:09 of those jobs you're looking for?

15:11 Yeah.

15:11 And really all they wanted was your passwords, your bank login, and your crypto.

15:15 Dear.

15:16 Dear, that is so, why can't people be better?

15:20 You know, some people just suck.

15:22 So the item I want to talk about comes to us from reversing labs and pretty cool logo

15:28 there with the reversed R for reversing labs, I got to say.

15:31 And the title is fake recruiter coding tests target devs with malicious Python packages.

15:37 That's not ideal.

15:38 And I don't know why we need to have the word Python packages in here.

15:41 Just malicious Python code, because a lot of it comes from GitHub repositories, not IPI.

15:46 So I don't know.

15:47 I think kind of put the packages to the side.

15:50 That's not germane to this, really.

15:51 What is, is people are using recruiting tests.

15:55 So a lot of, this is something that I never encountered in my, yes, I never encountered

15:59 this in my entire life.

16:00 A take home exercise or something.

16:03 It was interviews and it was live sort of code performances or whatever, I guess you would

16:08 call them, but never take home.

16:10 And that's just something that's becoming really popular for better or worse.

16:13 All right.

16:13 So reversing labs found the VM connect campaign, which I don't really know much about continuing

16:19 with malicious actors posing as recruiters using packages and the names of financial firms to lure

16:26 developers.

16:26 So that's pretty bad.

16:27 What's happening here?

16:29 So they've, this is not exclusive to Python.

16:32 It's happened through NPM before and so on.

16:34 And this seems to be tied to North Korea's Lazarus group, ATP group.

16:39 That means bad stuff.

16:40 You know, they're pretty, pretty skilled.

16:42 But here's what happens.

16:43 They found that people are getting these requests for coding tests and it says, here's your, here's

16:50 your coding test.

16:51 And if you look at it, I think I can even zoom it here.

16:53 Well, not really.

16:54 It kind of zooms.

16:55 Anyway, it says, here's a fully functional password manager in Python.

16:58 Basically this, you can see some grammatical errors in there.

17:02 You might, that might clue you off, but probably not.

17:04 This is a fully functional password manager that possesses almost all of its features.

17:08 And here's an image.

17:09 This is the important part before making any modifications, ensure the project is running

17:14 successful.

17:15 And if you trusted this organization, you were really keen to get going like, all right, well,

17:19 let's just, I know what I'm doing.

17:21 Python space, this, boom, boom.

17:23 It's the running of this project that they delivered to you over GitHub or some other, they just sent

17:28 you a thing to unzip and run that then downloads all the code, installs back doors, various other

17:35 malware into your machine.

17:37 And then you probably go on to finish the work and submit it and never hear back oddly.

17:40 Yeah.

17:41 And then somebody is actually like finishing the assignment and not.

17:46 Yes, I know.

17:47 It's so sad.

17:48 Sucks so much.

17:49 Oh, that's terrible.

17:51 Yeah.

17:51 The analysis revealed that the direct parent of the detected malicious files is a Python PYC

17:58 file.

17:59 So that's how they obscure it as part of what they give you are PYC files, not Python

18:04 source files.

18:05 So you can't really see inside them.

18:07 Oh, and you, and you kind of think, oh, well, that's legitimate because it's a, because it's

18:12 an interview.

18:12 I, they're going to want to show me, show me the source code or something.

18:15 Exactly.

18:16 Yeah.

18:16 It totally makes sense because yeah, if I saw this, well, then I would be able to, nope,

18:20 your job is to have this opaque thing and write this one part.

18:23 But no, it's just the opaque part is a virus.

18:25 Oh, that's so sucks.

18:27 It totally does.

18:28 Yeah.

18:28 So I would, do you have recommendations?

18:30 Well, I, let's hear yours first.

18:32 Oh, I was thinking that, so, I've, both, taken, interviews like this, coding exercises and given them, but in, in, let's see, most of the times I've

18:47 only given them in text form.

18:48 I've given a description and then somebody can like email me back or, or submit.

18:53 on a form, the, what code for answering it.

18:57 and then also since there's AI and everything, or you could just like hire somebody to do the

19:02 code for you, that code I then use as part of the interview process.

19:07 Like we will talk about, we'll talk about what choices they made in the code during the actual

19:13 talking interview.

19:14 the other thing, and I've had, I've had that happen with me as well.

19:19 When I've done coding exercises, the other thing is using platforms.

19:22 Like there's, there's online platforms.

19:24 You don't install anything on your own computer, during a coding exercise.

19:27 And I would be more willing to do that, than, than believe somebody.

19:32 But I know there's a lot of GitHub based, like there's a private repo you get added to,

19:37 and then you can go and try to take the, do the coding assignment.

19:41 I know that happens and I would just, I probably wouldn't do it, I guess, or I don't know, but.

19:45 Yeah, sure.

19:46 I think some other things that I had in mind was if you're just trying out a Docker container

19:51 and it's something real simple, sorry, Python package, I do it in a Docker container.

19:55 You know, if you're just doing it on the terminal or like a simple editor, just fire up a Docker

20:00 container shell into it.

20:02 You know, Docker exec GSH or bash or whatever, and then play with it over there and then throw

20:08 the container away.

20:08 Or like you said, there's a lot of online platforms.

20:11 So for example, I think VS Code has, you know, code.dev.

20:16 Is that right?

20:17 I can't remember what it was the, like if you open up GitHub and just press dot, whatever

20:21 happens there, maybe you could do it there.

20:23 Yeah.

20:23 maybe not.

20:24 probably what I would actually do is I would fire up a virtual machine that has snapshotting

20:29 capabilities.

20:30 And by snapshot, I mean like save how it is now on the, on the disc and then make a differencing

20:34 disc.

20:35 And then when you're done with the project, just throw away the snapshot, the, the different reset

20:39 to the snapshot.

20:40 Right.

20:40 So that's long as it's, you're not afraid of it being potentially on your network.

20:45 Right.

20:46 But if it's in a VM, it's probably pretty safe.

20:48 Right.

20:48 And then also you could go over to Azure and get a windows machine, windows VM that you can

20:55 remote desktop into.

20:56 That's a full windows machine in the desktop, in the cloud as a desktop, you log into right

21:01 there and just throw away the virtual machine.

21:03 Cause you know, then it's not even on your network.

21:06 Right.

21:06 Yeah.

21:06 I think, and as much as I like using my own editor, I think that I'm, I think that people

21:11 that are giving coding exercises really should use a platform, because it's just more

21:16 fair for everybody.

21:17 The, and the, even our friends at PyBytes have their own interview platform

21:22 that you can do.

21:23 You can do their little things.

21:25 Matt agrees with you.

21:26 Plus one for coding platforms.

21:27 Yeah.

21:29 All right.

21:29 Okay.

21:30 So folks be, just be on the lookout and be careful out there.

21:34 It's the internet.

21:34 Well, is it my turn?

21:36 I think so.

21:37 let's, let's talk about office hours.

21:40 so the PSF has announced that the PSF board is having office hours, which is kind of cool.

21:46 They're going to do it monthly.

21:47 So if you have a question, if you, what do they say?

21:50 greetings Pythonista.

21:52 I'm not going to read all of this, but the PSF, is going to open up, office hours

21:57 and monthly, the office hours will be a session, be sessions where you can share with us how

22:03 we can help your community and express your perspectives and provide feedback to the PSF.

22:09 And hopefully everybody will be nice, but had an issue with people being nice.

22:13 So try to be nice.

22:14 then also, the joining of the office hours, there's, there's, we missed the first

22:20 one that was September 10, but there's one October 8th.

22:23 And then, and then there's, you know, there's a list here we've got.

22:26 Well, I'll just put the list in the show notes.

22:28 Also, what do you, what are they going to talk about?

22:31 Well, they might have, they might have a topic, but, they also might not.

22:36 So it says that you can bring up, I can't remember where, where it said this, but you

22:40 can bring up, there'll either be a topic, but if there's not a topic, you can bring up

22:44 something that's Python related or something that the board might be able to help you with.

22:48 So that's really cool.

22:49 I love the accessibility that, that, that people have access to.

22:54 Yeah.

22:54 I think it's kind of cool.

22:55 I think it's kind of like, it kind of reminds me of, you know, you can, I've never

22:59 gone, but my, my little local community that I live in, I can go watch the, the,

23:05 the, the city board meetings if I wanted to, I don't, I don't do that, but I like that

23:10 it's possible that I can.

23:11 So it's a good thing.

23:13 So thanks PSF.

23:14 Yep.

23:15 Yeah.

23:15 Very cool.

23:16 All right.

23:16 and I kind of made this one short cause I know we've got quite a few extras to talk

23:21 about.

23:21 do you want to kick off the extras?

23:24 Let's kick it off.

23:25 Let's, this is a good one to kick it off with cause this is a joint extra.

23:28 Big news is our courses, mine, yours, and our friends are on humble bundle for a couple

23:36 of weeks.

23:36 So if you want to get what I think is probably a ridiculous deal, like $1,882 worth of content

23:43 for $25.

23:44 Check it out.

23:47 One of the things that's unique about humble bundle, if you're not familiar with it and partly

23:52 why we're participating is a lot of money goes to charity right now.

23:55 It's just launched and so far has already raised almost $3,000 for charity.

23:59 That's pretty cool.

24:00 Traditionally over the years, we've worked with humble bundle and raised a lot of money for

24:05 the PSF and for other organizations through this.

24:07 So this year's charity is girls who code.

24:10 So check it out.

24:12 And there's stuff from me, from Brian, from jet brains, from Matt Harrison, from Reuben Lerner,

24:20 from PyBytes, real Python.

24:23 And anybody I'm leaving out there, I don't think so.

24:26 But yeah.

24:26 What else do you want to say about this, Brian?

24:28 I'm kind of excited about checking out the CPython internals.

24:31 I've put off looking at that.

24:32 And I think I might grab it so I can read that.

24:36 Also, I think my Visual Studio Code plus Python skills are pretty good.

24:41 But I'm curious to know what your course has in there.

24:44 There's actually quite a few goodies in there.

24:48 And also, it's ridiculous, though.

24:50 The, I'm including the, both the, the new Hello pytest course and, and the

24:57 complete pytest course and the pytest course on your side.

24:59 I know that's kind of a lot of pytest, but I kind of think about it a lot.

25:04 so a lot of exciting people already joining, and I'm getting some great questions in

25:10 the community forum.

25:11 so that's really good.

25:12 Even some great feedback.

25:13 yeah, it's awesome.

25:14 So I'm pretty excited about this.

25:16 All right.

25:17 So this is one among many extras, but do check that out if this sounds interesting to you.

25:21 It's a lot of stuff and it's for a good cause.

25:24 Okay.

25:24 Next, I believe we've talked about the Django Not program before, which is super cool.

25:30 I've had Sarah and Tushar on Talk Python and linked about that as well in the show notes.

25:35 But the news here is that Django Not Space Session 3 applications are open.

25:41 So get in there and apply.

25:42 This is a program that helps you become a contributor, possibly on the path to core developer for

25:48 Django.

25:48 And I think it's a really cool program.

25:50 Free eight week group mentoring program.

25:52 Cool.

25:53 Yeah.

25:53 So if you're a fan of Django, you want to get better at open source.

25:55 Here we go.

25:56 like I said, a link to this, two more things real quick.

26:00 One planned and one, a surprise alt tab.

26:03 If you're on windows, alt tab is the way you switch between apps on macOS.

26:07 If you switch to macOS, things get weird.

26:09 Like command tab seems like the alt tab, but command tab switches between applications,

26:14 not between windows.

26:15 So for example, if there's like a, Hey, there's an update available for your app.

26:18 And then it goes behind another window.

26:20 There may be no way to keyboard over to it.

26:23 You might have to hit control down and then find it because it doesn't register as like

26:28 a top level application, but it's there.

26:30 And like, you want to switch between two windows and web browser.

26:33 I know there's command tab, but that, or sorry, command tilde, but that just cycles.

26:37 That doesn't give you a list.

26:38 So alt tab is a free open source thing for macOS with a ridiculous amount of options that

26:45 has a super cool UI for switching between windows, not applications.

26:51 And like I said, it's open source, but also it doesn't take over the typical commands.

26:56 So it's an either or whatever you feel like hitting while you're working on Mac.

27:00 What do you think, Brian?

27:01 Cool.

27:01 Yeah, actually, I don't, I never even tried any of this stuff.

27:04 I just usually don't have very much open or I have no idea how to find my stuff.

27:09 Yeah.

27:10 But if you look over on GitHub, it's got 10,000, almost 11,000 stars.

27:14 It's pretty neat.

27:15 Yeah.

27:16 So anyway, people can check that out if they want.

27:17 And this is the prize.

27:19 This was not true when I hit, when we logged in to hit record today.

27:23 However, since then, the macOS Sequoia, the new version of macOS is now out.

27:28 Now, if you go to the website, apple.com slash macOS, it says it's in a preview.

27:33 But if you go to a system settings, it says, would you like to install it?

27:36 So I don't know.

27:38 If people want to live on the cutting edge, there you go.

27:41 It's time.

27:42 I'll let you do it first.

27:43 And then if your computer still works to log in next week, I'll upgrade.

27:48 If you ever hear from me again, then it'll be fine.

27:51 Yeah.

27:52 Sounds good.

27:53 Anyway, those are my extras.

27:54 Okay.

27:54 I think that we should have covered this earlier, but oh well.

27:59 PyCascades has the call for proposals is open.

28:02 Maybe we covered it that I just don't remember.

28:05 But anyway, CFP is open, but you only have a few days.

28:08 It's September 16 right now, and the deadline is September 20th.

28:13 So if you haven't gotten those in yet, get those in.

28:16 And mostly I'm bringing this up because I forgot.

28:18 And I'm going to submit a couple.

28:20 But it's going to be exciting because it's in Portland.

28:23 Yay, it's in Portland.

28:24 At least I'll be there.

28:25 Will you be there?

28:26 Probably.

28:27 Unclear.

28:27 Maybe.

28:28 Unclear.

28:28 Okay.

28:29 Let's give it a strong maybe.

28:30 Well, I'm going to try to make sure to be there.

28:32 Yeah, that'll be nice.

28:33 I love PyCascades.

28:34 Okay.

28:35 So that's my first.

28:36 And that's in February.

28:39 So last week we talked about all the UV Python stuff being super cool.

28:46 But we mentioned that you can't do Python 3.13.

28:49 Well, you can now.

28:50 So Python 3.13 is now available for virtual environments and for anything with UV.

28:58 So UV supports Python 13, but it does not subvert.

29:02 If the next question is, can I do the other one?

29:07 Free-threaded.

29:08 Can we do through free-threaded?

29:10 No, not yet.

29:11 But hey, I think it's great to just support the normal one so that people can get their stuff in.

29:16 So I think that's all my extras.

29:19 Awesome.

29:20 Awesome.

29:20 Awesome.

29:21 Anyway, thanks a lot.

29:22 Yeah.

29:22 I just want to quickly add that I tried UV Python list dash Python preference dash online only managed.

29:31 And it didn't show 3.13 or 12.6, but then a UV self-update, run it again.

29:38 So just be aware.

29:39 I think you have to update your UV to get it to show the thing that you put in.

29:43 I'm glad you brought that up.

29:44 I was going to say that.

29:45 Yeah.

29:46 I forgot.

29:46 And also, I think UV self-update is such an awesome thing.

29:51 You just have to.

29:52 It's a great name, self-update.

29:54 I wish I had Brian self-update.

29:56 That'd be cool.

29:58 Exactly.

29:59 Body's getting a little old and beat up.

30:01 Self-update.

30:02 Oh, there we go.

30:03 Yeah.

30:03 Nice.

30:04 Power.

30:06 We can't rebuild them.

30:07 Okay.

30:08 Okay.

30:08 Let's get something funny.

30:10 All right.

30:11 Well, I was saving this for the November when we have the election in the US.

30:17 This is not political people.

30:18 So please don't write me.

30:19 But this is a tech joke.

30:21 Since Biden dropped out, the joke's kind of got a shelf life.

30:24 Let's go.

30:25 So here it is, Brian.

30:27 Errors 404 and 403 went voting.

30:29 404 voted for Trump.

30:30 403, 403 forbidden.

30:32 Oh, Biden.

30:35 Oh, dear.

30:36 Because 403 is forbidden.

30:38 But anyway.

30:38 Oh.

30:39 That's what I got for you today.

30:43 That's terrible.

30:46 Yeah.

30:47 It's definitely a dad joke.

30:48 Okay.

30:49 I've got a good one for you next week.

30:51 All right.

30:52 Yeah.

30:52 Let's do it.

30:52 All right.

30:53 Looking forward to it.

30:53 And yeah.

30:54 Thanks.

30:55 Thanks to everybody for showing up.

30:57 And remember, check out the Humble Bundle.

31:02 We appreciate it.

31:03 Yeah.

31:03 Indeed.

Back to show page