Transcript #382: A Simple Game
Return to episode page view on github00:00 Hey, everyone. Hey, Brian.
00:02 Good to be back.
00:03 It's good to be back. I'm back in a place with somewhat controlled audio,
00:06 although I'm having a bunch of tree work done, and one of those giant tree grinding machines is literally outside my window.
00:12 However, I got a new microphone, and I believe it didn't even pick it up.
00:17 It's ridiculous.
00:18 So there's a bunch of onboard software stuff built into the mic, and it might not even affect us.
00:27 Does it have a bunch of AI in there so they can correct your grammar if you say something wrong?
00:31 That'd be cool.
00:31 That would be cool.
00:32 No, but it has noise gates and noise reduction and high-pass filters and stuff like that.
00:40 With that, let's go ahead and kick this off.
00:42 Hello, and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:48 This is episode 382, recorded May 7th, 2024.
00:54 I don't know if you caught it last time, but I was a year behind last year.
00:57 So I said 2023 last time I was doing the show intro.
01:02 But no, it is in fact 2024, despite what I believe about time.
01:06 It seems like it's going too fast.
01:08 Nonetheless, May 7th, 2024.
01:10 I'm Michael Kennedy.
01:11 And I'm Brian Okken.
01:13 And this show is brought to you by Scout APM.
01:16 Check them out during their segment.
01:18 It really helps support the show.
01:19 Connect with us on Mastodon.
01:21 All three of us are over there.
01:22 Links are at the top of the show notes.
01:24 If you want to be part of the live recording, pythonbytes.fm/live.
01:28 Usually Tuesdays at 10 a.m. Pacific time.
01:31 And finally, Brian, I know we sometimes talk about our newsletter, but people are subscribing and they're getting a lot of value out of it.
01:37 So if you want an artisanal handcrafted digest of all the stuff we talked about in the show,
01:41 deliver an email form so it's permanent right there.
01:43 You can forward it, share it.
01:44 All you got to do is head over to pythonbytes.fm, click the newsletter link right in the center of the screen,
01:52 and then bring you to the friends of the show.
01:53 Keep your email private.
01:54 We don't share it.
01:55 We don't do anything weird with it.
01:58 We just want to be able to send you stuff about the show.
01:59 So people are really getting a lot out of this, Brian.
02:02 I checked last week the email that you sent.
02:04 Yeah.
02:05 Normal.
02:06 If you're doing good, if you're lucky, if people really want to hear from you,
02:10 there's a chance that about 20% of people will open emails that you send in the newsletter form to them.
02:16 The one you sent was like 95% opened.
02:18 That's awesome.
02:20 That is so awesome.
02:21 Thank you, everyone, for actually caring and subscribing.
02:24 So pythonbytes.fm, click on newsletter, and sign up for it.
02:28 That'd be great.
02:29 Yeah.
02:30 With that, yeah, go ahead.
02:31 One of the things I wanted to bring up is, so now there's two ways.
02:34 Then if there's something that you heard on the show, but you can't remember what it was,
02:37 you can search your inbox if you save it.
02:41 Save our old emails from us.
02:44 But we also, we haven't talked about it a lot, but the search box on pythonbytes.fm is excellent.
02:50 It searches both the show notes and the transcript.
02:54 So even if it wasn't listed, but it was said, it might find the right episode for you.
02:59 So it's pretty cool.
03:00 Yeah, absolutely.
03:00 Yeah, I use that.
03:01 I actually use that to decide, oh, if we talked about this thing before.
03:04 Three years and I already forgot about it, or should I cover it, right?
03:07 Yeah, exactly.
03:08 Amazing.
03:09 Amazing, amazing.
03:11 All right.
03:11 So we jump in to the first topic.
03:13 Well, I want to act on that information with a product called Act.
03:20 And it's from Necto.
03:22 Necto's, I think it's the person's, maybe just their name is Necto, and it's their Act.
03:28 N-E-K-T-O-S-A-C-T, but it's in the show notes or in the email that you'll get if you sign up.
03:34 Anyway, what it does, it's super cool.
03:37 It runs, what it's doing is it's running GitHub Actions locally.
03:41 So if you could set up, you could set up this.
03:45 What you have to do is you have to install it, and it's got great installation instructions.
03:50 I used Homebrew, but it's got installation instructions for Chocolaty or even GitHub CLI.
03:57 I could have used that or Mac boards, Scoop.
04:00 I didn't know what, I don't know what Wingate is.
04:03 Anyway, getting...
04:03 Wingate is, you know how on, for example, on Boutique, we have ApptGet, Debian Systems sort of thing?
04:10 So that is the, for a long time, Chocolaty was the package manager.
04:15 It was kind of like Homebrew, sort of external for Windows, and Wingate is like
04:20 the official Microsoft package manager for Windows.
04:22 Oh, okay.
04:23 It's kind of a new thing.
04:24 I don't use it very much because I don't use Windows enough that I care about that stuff,
04:28 but yeah, that's what it is.
04:29 Cool.
04:30 Well, so this project, really what it does is it's, you can run your workflows locally,
04:36 but you have to install it and you have to set up Docker locally.
04:40 So it could, because it uses Docker, which actually I kind of love anyway.
04:43 So what it's doing is it's running your actions.
04:46 It loads up a Docker image and runs your actions.
04:51 But the control over it's really pretty cool.
04:54 So I should have looked this up, but there's, you can, there's different runners,
04:59 but the way you run it is there's a bunch of different commands that you can run.
05:04 So you can run, run your pull requests or you can run a specific job.
05:08 There's a whole bunch of different, different parameters for this to be able to run different pieces.
05:14 I used it just to run.
05:16 I wanted to just check, check my test, test run within locally.
05:20 And because I wanted to play with the different test jobs and coverage, be able to run those individually.
05:26 And it really was slick and it's super fast, really easy to use.
05:30 It's really pretty cool.
05:32 It's also open source.
05:34 So nice.
05:35 We're going to link to the GitHub repo as well.
05:37 So you can check it out.
05:39 And it's, apparently I'm not the only one that loves it.
05:41 It's got 1.3 thousand stars.
05:43 So that's forks.
05:45 50,000.
05:45 Oh, that's forks.
05:46 There's 50,000 stars.
05:47 Nice.
05:48 It's awesome.
05:49 This is so awesome.
05:50 If you do a lot of with GitHub actions, this is so cool.
05:53 one, you can sort of test it and run it faster and iterate really quickly
05:58 till you get it dialed in, right?
05:59 Yeah.
05:59 Then the other thing, Brian, that might be interesting, there was, I don't know,
06:04 I'm kind of inspired a lot by what the 37 signals people are doing around deployment and stuff.
06:09 One of the things they did recently is they moved their continuous integration.
06:14 Maybe even using this, I don't know.
06:15 Moved their continuous integration to developer machines.
06:18 So instead of having, you know, one server where all the builds just queue up
06:23 behind each other.
06:23 It's like, everybody has a super high-end computer is oftentimes faster than the CI servers anyway.
06:29 So run it there is like a pre-commit hook sort of thing.
06:32 Yeah.
06:32 Or, you know, some sort of push, some kind of event locally.
06:36 And so this, it kind of lets you go down that workflow as well.
06:39 If you're like, we just want to distribute the compute so we can make our actions run a lot faster,
06:44 at least a good chunk of them, you know?
06:46 Very neat.
06:47 One of their ideas for this also is to use it as a local task runner instead of like make
06:53 or things like that, which is interesting.
06:56 You could have workflows that aren't reachable from CI that you can just run locally
07:00 through, through this if you're already using it.
07:02 That's really awesome.
07:03 This is great.
07:04 I love it.
07:04 All right.
07:05 Well, so since you brought up Docker, let's keep going.
07:08 Okay.
07:09 Let's keep going.
07:10 I'll get there in a second.
07:12 So I'm sure you're familiar with Ngrok.
07:14 We've talked about how Ngrok is awesome before and it solves a super interesting problem.
07:19 So Ngrok is a commercial project.
07:21 I'm a big fan of it.
07:22 I'm a pain user of it.
07:24 We'll see if I continue to be honestly after I read this out.
07:26 However, I'm a big fan of it, right?
07:30 So there's all these situations where you need to easily get access.
07:35 Something on your machine in terms of an API or a website needs access to the internet
07:40 just for testing or just for a demonstration purpose.
07:43 Like how often are you, you're in a Zoom meeting and somebody's like, hey,
07:47 I want to show you this new design and this new user interaction.
07:50 So let me share my screen.
07:51 And then they're like on a huge monitor and it's blurry and you're like,
07:54 I think I like it.
07:56 I don't know, you know.
07:57 But with Ngrok, you just say here, just everybody connect to my little local dev app
08:01 and click on this and see how you think it feels, right?
08:04 Or you want to debug a web hook which has to come from the internet to somewhere public
08:08 so you can just fire up an Ngrok endpoint or use SSH to tunnel what would be regular web requests
08:15 into your machine that turn back into web requests to hit Flask or FastAPI
08:18 or whatever it is, right?
08:20 I did it for web hooks a bunch recently and also for mobile apps.
08:24 Oh, yeah.
08:25 When Lauren and I were building out the mobile apps, they had to talk to
08:29 and just sort of do some callbacks and other things and we were testing out the API
08:32 and just like, here, we'll fire up an Ngrok and he'd be on his phone running the app,
08:38 clicking with it, debugging it, and it would be coming through the API hitting breakpoints in PyCharm.
08:43 Awesome, right?
08:43 Yeah.
08:44 But it's more of an individual type of tool and also closed source and paid.
08:50 Not that those are terrible, but they are, you know, that's what they are.
08:53 So I want to tell you about Porter, like P-O-T-R, which is an open source Ngrok alternative.
08:59 So the idea is exactly the same that I just described.
09:03 However, the way it works, don't watch the videos, they're very bad.
09:07 Go to the docs instead.
09:08 Similar though to Act, it has not as many, but 2000 stars.
09:14 How old is it?
09:15 Six months old for a six month old project.
09:17 That's pretty good.
09:18 Yeah.
09:19 So basically to set it up on the server, you have to have, it says a virtual machine.
09:23 You need a machine.
09:25 This could be, it could be a VM on the internet.
09:28 It could be a VM locally.
09:29 It could be a real machine sitting, you know, on a, on a beat up laptop in the corner
09:34 with a public IP.
09:35 Who knows?
09:36 Whatever.
09:36 You needed some kind of pretty lightweight machine, you know, $10, $5 digital ocean server.
09:41 You got to set up a cloud fair, Flare token for wildcard because it manages
09:46 subdomains automatically and GitHub credentials to log in.
09:50 And then that's it.
09:51 And the idea is that it actually does, it's built for teams as well.
09:56 So teams can manage different ways to call back into things and connect things
10:00 and so on.
10:01 So it's got like a whole team dashboard and people can set up the teams and whatnot.
10:06 But basically, you just set this up and you run a Docker container on a simple machine
10:11 and then all of a sudden you've got your own, very own ingrock where data also
10:16 is not going through ingrock but it's just private to you, of course, right?
10:19 Because it's HTTPS over to SSL and then back.
10:23 Okay.
10:24 So when you're, is that, is it setting up, like ingrock, does ingrock set up a Docker?
10:31 Does it go through dockers also?
10:32 No.
10:33 They run the server side for you.
10:36 Okay.
10:36 They probably use Docker but they completely manage the server side for you.
10:41 You just use a CLI that like talks to that thing and then sets up a connection,
10:45 an SSH connection back to you.
10:47 Okay.
10:47 And then when I'm debugging it, if I set a breakpoint or something, do I need to set that
10:52 in the Docker image or do I need to?
10:54 No, no.
10:54 The Docker image is just a pass-through.
10:56 Oh, okay.
10:57 Got it.
10:57 Yeah, yeah.
10:58 It really does work just kind of like ingrock.
11:00 Yeah, yeah, yeah.
11:01 It's super, super similar.
11:02 I haven't used it yet but I'm looking to start trying this out and then for the client,
11:07 you just, there's a couple ways to install it but pretty straightforward
11:10 and then you just, instead of saying Docker, sorry, instead of saying Docker
11:15 HTTP something, you say Porter HTTP something and off you go.
11:18 Nice.
11:19 All right.
11:19 Yeah.
11:19 Pretty cool.
11:21 It sure is.
11:22 You know what else is neat, Brian?
11:24 I think Scout is neat.
11:25 Scout.
11:26 Scout APM.
11:27 Scout APM is pretty awesome.
11:28 Let me tell you real quick about Scout APM.
11:32 They're big supporters of Python Bytes so we appreciate that very much.
11:36 So if you are tired of spending hours trying to find the root cause of issues
11:41 impacting your performance, then you owe it to yourself to check out Scout APM.
11:45 They're a leading Python application performance monitoring tool, APM, that helps you identify
11:51 and solve performance abnormalities faster and easier.
11:54 Scout APM ties bottlenecks such as memory leaks, slow database queries, background jobs,
11:59 and the dreaded N plus one queries that you can end up if you do lazy loading
12:04 in your ORM and then you say, oh no, why is it so slow?
12:07 Why are you doing 200 database queries for what should be one?
12:09 So you can find out things like that.
12:11 And it links it back directly to source code so you can spend less time in the debugger
12:15 and healing logs and just finding the problems and moving on.
12:18 And you'll love it because it's built for developers by developers.
12:21 It makes it easy to get set up.
12:23 Seriously, you can do it in less than four minutes.
12:25 So that's awesome.
12:26 And the best part is the pricing is straightforward.
12:29 You only pay for the data that you use with no hidden overage fees or per seat pricing.
12:35 And I just learned this, Brian.
12:37 They also have, they provide the pro version for free to all open source projects.
12:42 So if you're an open source maintainer and you want to have Scout APM for that project,
12:47 just shoot them a message or something on their pricing page about that.
12:50 So you can start your free trial and get instant insights today.
12:54 Visit pythonbytes.fm/scout.
12:56 The link is in your podcast player show notes as well.
12:59 And please use that link.
13:00 Don't just search for them because otherwise they don't think you came from us.
13:04 and then they'd stop supporting the show.
13:06 So please use our link pythonbytes.fm/scout.
13:08 Check them out.
13:09 It really supports the show.
13:11 Indeed, indeed.
13:12 What's next, Brian?
13:14 We've talked about type annotation a lot and I ran across this blog post
13:18 called Annotating Args and Keyword Args in Python.
13:21 And actually, I never tried that.
13:23 I've mostly just, if I have star args or star star kw args, just sort of leave it
13:31 as is.
13:31 I don't, I haven't tried type annotating those.
13:34 So I was intrigued as to how I would do that if I wanted to do that.
13:38 And there's a article about it from Redawan, I think.
13:44 What's his first name?
13:45 Anyway, Redawan Delaware.
13:47 Cool name.
13:48 And it's the, there's some problems with all the ways he tried that seemed obvious.
13:55 Like, sending, passing in a dictionary that he expected.
13:59 apparently my pie doesn't like that.
14:01 Or doing like a deck sort of describing the tuple or a dictionary that are coming in.
14:08 There were issues with those.
14:09 The, but I'm just going to hop to the end result.
14:12 Apparently, using, using information from PEP 589, 646, 655, and 692, there are features
14:21 like unpack and type dict along with typing that we're used to that are part
14:27 of the typing module.
14:28 And the, the result is kind of cool.
14:31 I mean, it's not terrible.
14:32 There's a couple, there's a pre 312 and a after 312 version.
14:36 I'm glad that he listed both.
14:38 But you, you set up a, a class for your keyword args and describe what the,
14:43 what the types are there in your keyword under type dict.
14:47 And then for the star args, it's an unpack, you say an unpack of a tuple
14:53 and then the types of the tuple.
14:54 So you can do good typing as to the, the types of things that you want to come into
15:00 star args or keyword args, which is kind of neat to make sure that, I mean,
15:05 you think of star args or keyword args as just anything can come in.
15:08 But if you really don't want just anything to come in, this would be great.
15:12 So I like this.
15:13 Yeah, it's cool.
15:14 It's a totally reasonable thing to think.
15:15 Like I want to pass one number or two numbers or a hundred numbers.
15:20 but whatever it is, I want to operate on numbers, right?
15:22 Yeah.
15:23 Or yeah, I want in this example, it's either integers or strings that I'm going to get in
15:28 or insert pools.
15:29 So I would have never come up with this.
15:32 The creator class derived from type dict with multiple values to then wrap that
15:37 as an unpacked of, okay, I'm awesome.
15:40 They have it.
15:40 Yeah.
15:41 But this is, this is amazing.
15:43 Yeah.
15:44 Seems like there could be an easier way, but anyway, so this is pretty cool
15:49 and he's got some great writing.
15:51 One of the other articles that I started down this rabbit hole was a more recent article
15:56 from April 27th called typos does what I thought type guard would do in Python
16:01 and I don't use either type guard or typos so I'm not sure what these are.
16:06 But if you are a type guard person, maybe you want to check this out.
16:09 Yeah.
16:10 Yeah.
16:10 All right.
16:11 That also looks cool.
16:11 Well done.
16:12 Well done.
16:13 All right.
16:13 I have one more item for us here and it's pretty awesome, Brian.
16:18 It's pretty awesome.
16:18 Awesome.
16:20 Ever since the, the guy behind just path got thinking about, hey, people should use
16:26 the featured on Python bytes episode number badge.
16:30 I'm like, oh, there's probably more to these badges than I give them credit.
16:33 I mean, I know I've seen plenty of badges, but there's a lot of badges.
16:35 So this is a GitHub repo with a thousand stars that is a curated list of GitHub badges
16:41 for your project.
16:42 And let me tell you, what are you interested in, Brian?
16:45 You want to talk about contacts?
16:46 You want to talk about groups, socials, operating systems?
16:49 Where are you streaming?
16:51 What kind of tests?
16:52 What kind of food do you want, for example?
16:54 Well, that's under the tests category.
16:56 I think that's the failed indent I'm right here.
16:59 I think that's all just one thing.
17:00 I don't think that's this level.
17:02 I think the test got unindented for some reason.
17:04 Okay.
17:04 What kind of terminal do you rock?
17:06 And so on.
17:07 Okay.
17:07 So I'll just go, I'll pick a couple just to give people a sense because I don't want to just read
17:11 a list of a bunch.
17:13 But like, for example, you see the scroll bar, Brian?
17:15 I mean, this is a lot.
17:17 So under contact, you've obviously got email, but you've got, if you want to be specific,
17:22 say, hit me in my Gmail or hit me up on my ProtonMail.
17:25 You can actually have those as badges.
17:27 You can have Signal, Telegram, Tutanota, Noda, however you say that, WhatsApp,
17:34 WeChat, all those things are pretty cool, right?
17:36 For groups, you know, Slack, Discord, Zoom.
17:39 Apparently, I think Zoom is getting into like, kind of trying to be more Slack-like,
17:42 even though I never use it for that.
17:43 Reddit and so on.
17:45 Under social, that would be Bitbuckets?
17:48 Social coding, I guess.
17:53 I don't know.
17:53 But, you know, GitLab, Instagram, Pinterest, Quora, Reddit, et cetera.
17:58 And then you've got some for the OS, right?
18:01 Not just really standard ones, but, you know, like CentOS or Deepin or, you know,
18:06 whatever.
18:06 But they also have their little icons that go with them, right?
18:09 Like the red hat is red, but it also has the hat.
18:11 That is the red hat one.
18:13 And I'll just go down a little bit and find some more of the uncommon ones
18:17 down here.
18:18 ETL, that sounds boring.
18:21 like mobile frameworks.
18:23 So they've got like Flutter, for example, like the app I was just talking about earlier
18:26 that Talk Python is built on Flutter.
18:28 We could have that or Ionic or Cordova or, you know, Xamarin, whatever you want.
18:32 So, isn't that cool?
18:34 Yeah, that's pretty fun.
18:35 What security platform is using?
18:37 Is it like, this is verified by Snyk?
18:39 And so on.
18:40 Anyway, so if you're thinking about your next project or your GitHub profile or whatever,
18:44 I present to you many, many GitHub badges for the taking.
18:47 Yeah, let's see if I can get like, like four rows of badges onto a project.
18:51 That'd be fun.
18:52 Exactly.
18:52 Exactly.
18:54 Well, any other extras?
18:56 Wait, this is one that wasn't your extra.
18:59 That's not an extra, but I do have extras.
19:01 Okay.
19:01 I'll go, I'll go ahead and go through them since I already got my stuff on the screen for us.
19:05 All right.
19:05 So this one comes from the Django Not folks.
19:10 So the Django Not program is a program to help people who are interested in Django become core contributors,
19:17 not just users of, but contributors to the Django code base.
19:23 So it's kind of like a mentorship program around that, which is excellent.
19:26 And you must act soon.
19:28 You have six days to apply.
19:31 So the, the session two application is open.
19:34 I actually interviewed Sarah, sorry, Sarah, Boyce, Sarah Boyce, and Tushar Gupta about their experiences running and coordinating the first one,
19:46 right?
19:46 back on Talk Python in March.
19:49 Yeah.
19:50 March this year.
19:52 So if you want to hear more about it and you think maybe I want to apply to it,
19:55 well, you've got six days to do so, to be part of it.
19:58 It doesn't cost anything, but there is an application process, which is cool.
20:01 That was fun.
20:03 And then I was on Django chat, the Django chat podcast with Will and Carlton.
20:10 And we talked all, yeah, I do too.
20:12 Those guys are both great.
20:14 And we talked all about this whole, new deployment style and self-hosted open source and all these different things that I've been sort of talking on and off on about the show here.
20:24 But we spent a good chunk of the show just talking about, you know, how,
20:28 how am I running things for Talk Python and for Python bytes and for a bunch of other stuff.
20:32 And then what are some external projects and some of the other advice?
20:36 And it's just really fun.
20:37 So we had a good time talking to people can check that out.
20:40 Extras for you.
20:41 Yeah.
20:42 I'm going to start off with some bad news and then some good news.
20:45 So I came across this.
20:47 It's from bleeping computer, but I saw it on a whole bunch of websites.
20:50 Fake job interviews, targets developers with new Python backdoor.
20:55 And it's just, it's just awful.
20:57 It's nefarious and evil.
20:59 And I, you know, the idea of a lot of viruses is to try to get people to run code,
21:05 you know, sneak in stuff to run code.
21:08 They're just going straight to developers and saying, Hey, as part of the interview process,
21:13 we'd like you to download like this repo and run the code in there.
21:17 And then I don't know what they're telling to do after that, but it's too late at that point.
21:21 At that point, they've just run the virus.
21:23 So that's just awful.
21:25 Anyway, be careful.
21:26 If you're, if you're doing a job interview and they say, Hey, go, go run some code.
21:30 Maybe don't, or look into it a little bit more.
21:33 I mean, it's so bad though, because it could just be, well, all you got to do is pip install the requirements and take this project and
21:39 then add this little feature and show us how you did it.
21:40 Right.
21:41 that already runs arbitrary code from the internet.
21:43 Yeah.
21:43 Oh yeah.
21:44 It could just awful.
21:45 That wouldn't.
21:46 Yeah.
21:46 Yikes.
21:48 Anyway.
21:48 Okay.
21:49 So that's bad news.
21:50 Good news.
21:51 Good news is this, this is the week that I'm going to switch the course.
21:54 the PI test course is a complete PI test course is going from a teachable to a new
22:01 platform podium.
22:01 and it's just, the reasoning is, the, you don't want to hear the reasoning,
22:06 but mostly it's the future of the, that I'm working with for more courses and more things I want to do with
22:13 people teaching PI test and other things fits better with podia platform
22:16 than, then, then with teachable.
22:18 So, to, to sort of celebrate the switch, I haven't made the switch yet.
22:23 It's going to happen this week, but you can already get to this new one.
22:26 It's at Python test.
22:27 Podia.com.
22:28 And now through Sunday, you get 25% off if you use the code PI test and,
22:34 and that's P Y T E S T.
22:36 And you can, find that link in the show notes also.
22:40 Okay.
22:41 So, and lastly, I know PyCon is coming up.
22:45 I won't be at PyCon, but I, I know a lot of great people will be.
22:49 And so to celebrate PyCon, I have a episode two 20 at Python test.
22:55 That's getting the most out of PyCon and some great, and some great tips from Rob Lubwick,
23:00 Rob Ludwick, about, you know, having fun at PyCon.
23:04 So check that out.
23:05 Indeed.
23:06 Yeah.
23:07 I'm going to be doing, probably a data science panel podcast.
23:11 That's also going to be live streamed with, the jet brains crew over there.
23:15 So that'll be a lot of fun.
23:17 Yeah.
23:17 And I will probably do Python bytes, but since you're not there, probably not an open space in person one,
23:23 probably just sneak away to a quiet spot and we'll do it like this.
23:26 Different background.
23:27 All right.
23:27 Awesome.
23:28 All right.
23:29 Is that it?
23:29 I had one more, one last minute one, which I thought was cool.
23:32 Just a, one I just threw in.
23:34 I saw this on Amazon just before we started recording.
23:37 Somebody named Orion Reed, posted this, bookmarklet, that, to visualize,
23:43 your DOM.
23:45 it's a JavaScript book market bookmarklet to visualize your DOM in 3d.
23:50 I love it.
23:51 So cool.
23:52 So it, it may seem just like silly, who cares?
23:57 But if you're looking at why is this thing overlapping that thing?
24:00 What about Z ordering?
24:02 Or why is, you know, this is actually contained in that versus next to that,
24:06 like all that kind of stuff you would see from this 3d rotational thing.
24:09 It's beautiful.
24:09 Yeah.
24:10 It's pretty, pretty neat.
24:11 So I'll link to that.
24:12 That's all my extras.
24:14 So, there's a question out there, Brian.
24:16 This is an important one.
24:17 who will carry the Python staff of power at PyCon and Brian, who will do this?
24:22 I don't know.
24:23 I don't know.
24:24 I know, but I think there's going to be a great disturbance in the forest is what I'm
24:29 feeling.
24:29 Speaking of which, how about a joke?
24:31 Yeah.
24:31 I have two jokes for people.
24:33 One, very heartfelt and sincere.
24:35 And we're going to close out the show with that.
24:37 But first one, a sneaky little game.
24:39 So this comes from Reddit and it's just on our slash program and humor.
24:42 It's just, just a little game.
24:44 And it says import random import OS randomly get a number.
24:47 Guess equals input.
24:49 Silly game.
24:49 Guess the number between one and 10 and it converts it to an end.
24:52 Right?
24:52 So you would think of course, if gas equals number, you won else.
24:56 Sorry.
24:56 You try again.
24:57 No, if gas equals number print, you won else.
25:01 OS dot remove.
25:02 So you could do it.
25:02 It's just terrible.
25:02 It would really work.
25:02 It would really work, but you could do it.
25:15 Like you could delete your user profile, you know, like stuff that doesn't require admin access.
25:21 Oh boy.
25:24 That's funny.
25:24 Just a silly little game.
25:25 All right.
25:26 Let's close this show out with something special.
25:29 I saw this come, come through the news a little bit.
25:32 So I think this is going to be a lot of fun, Brian.
25:35 I came across this.
25:36 Actually, you know, this came from Dan Bader.
25:38 He sent this over to me.
25:40 Just said, I think it was this said you wouldn't believe this.
25:42 Check this out.
25:43 And it's called permission granted.
25:45 A sad girl sings, sings the MIT open source license.
25:49 Like for real.
25:50 Okay.
25:51 Okay.
25:52 So it's AI generated, which is what makes it crazy.
25:54 And it probably has Python involved in there somehow.
25:57 And since AI generated content can't be copyrighted, we should be safe to plate.
26:02 Let's do it.
26:03 Let's do it.
26:03 We're going to close out the show.
26:04 It's two minutes.
26:05 You can listen to it if you want.
26:05 If not, feel free to mail, but into the show is we're playing this.
26:10 So here we go.
26:10 Permission is hereby granted free of charge.
26:16 To any person obtaining a copy of this software, associated documentation files,
26:29 the software to deal in the software without risk.
26:34 and to do so.
26:35 And to permit persons to whom the software is furnished to do so, subject to the following conditions.
26:59 The above copyright notice, the above copyright notice, and this permission notice,
27:08 shall be included in all copies or substantial portions of the software.
27:16 The software is provided.
27:20 software is provided as is, without warranty of any kind, express or implied.
27:31 according to the warrant, according to the warranties.
27:32 The warranties of merchant tabulating, the law is, the law is provided in all kinds of documents,
27:43 and the law is provided in all kinds of documents, and the law is provided in all kinds of documents,
27:46 and the law is provided in all kinds of documents, law enforcement.
27:48 So copyright holders, be liable for any claim, damages or other liability,
28:00 whether in an action of contract, toward or otherwise.