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


Transcript #382: A Simple Game

Return to episode page view on github
Recorded on Tuesday, May 7, 2024.

00: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 free 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.

00:24 >> Wow.

00:25 >> So 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? That'd be cool.

00:31 >> That would be cool. 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:55 I don't know if you caught it last time, but I was a year behind last year.

00:58 So I said 2023 last time I was doing the show intro.

01:02 >> Nice.

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:12 >> I'm Brian Okken.

01:13 >> 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, usually Tuesdays at 10 AM Pacific time.

01:31 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 e-mail 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 bring you to the friends of the show.

01:53 Keep your e-mail private.

01:54 We don't share it. 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 e-mail that you sent.

02:05 >> Yeah.

02:05 >> Normal. 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 percent of people will open e-mails that you send in newsletter form to them.

02:16 When you said it was like 95 percent opened.

02:19 >> That's awesome.

02:20 >> That is so awesome. Thank you everyone for actually caring and subscribing.

02:24 So pythonbytes.fm, click on newsletter and sign up for it. 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, save our old e-mails 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 >> Yeah, absolutely. Yeah, I use that.

03:01 I actually use that to decide, oh, if we talked about this thing before three years and I forgot about it,

03:06 should I cover it, right?

03:07 >> Yeah, exactly.

03:08 >> Amazing.

03:09 >> Amazing.

03:11 >> All right. 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 It's from Nectos.

03:23 I think it's the person's name, their name is Nectos and it's their Act.

03:28 N-E-C-T-O-S-A-C-T, but it's in the show notes or in the e-mail 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 you can set up this.

03:45 What you have to do is you have to install it, and it's got great installation instructions.

03:51 I used Homebrew, but it's got installation instructions for Chocolatey or even GitHub CLI.

03:58 I could have used that or Macbooks, Scoop.

04:01 I don't know what wing it is.

04:02 Anyway, getting-

04:03 >> Wingit is, you know how, for example, on Voodoo we have apt-get on Debian systems sort of thing.

04:11 >> Yeah.

04:11 >> So that is the, for a long time, Chocolatey was the package manager.

04:15 It was kind of like Homebrew, sort of external for Windows, and Wingit is like

04:20 the official Microsoft package manager for Windows.

04:23 >> Oh, okay.

04:23 >> It's kind of a new thing. I don't use it very much because I don't use

04:26 Windows enough that I care about that stuff, but yeah, that's what it is.

04:30 >> Cool. Well, so this project, really what it does is you can run your workflows locally,

04:37 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:44 So what it's doing is it's running your actions, 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 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 your pull requests or you can run a specific job.

05:09 There's a whole bunch of 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 my test run within locally.

05:20 Because I wanted to play with the different test jobs and coverage, I'd be able to run those individually.

05:27 It really was slick and it's super fast, really easy to use. It's really pretty cool.

05:32 It's also open source, so nice.

05:35 We're going to link to the GitHub repo as well, so you can check it out.

05:39 Apparently, I'm not the only one that loves it.

05:41 It's got 1.3 thousand stars.

05:44 >> That's forks, 50,000 stars.

05:45 >> That's forks, there's 50,000 stars. Nice.

05:48 >> It's awesome. This is so awesome.

05:50 If you do a lot of GitHub actions, this is so cool.

05:53 One, you can test it and run it faster and iterate really quickly till you get it dialed in.

05:59 >> Yeah.

06:00 >> Then the other thing, Brian, that might be interesting, there was inspired a lot by

06:05 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:16 Moved their continuous integration to developer machines.

06:19 Instead of having one server where all the builds just queue up behind each other,

06:24 it's like everybody has a super high-end computers, oftentimes faster than the CI servers anyway.

06:30 Run it there is like a pre-commit hook sort of thing, or some push, some event locally.

06:36 It 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:45 at least a good chunk of them. Very neat.

06:47 >> One of their ideas for this also is to use it as a local task runner instead of make or things like that.

06:55 Which is interesting, you could have workflows that aren't reachable from CI,

06:59 that you can just run locally through.

07:00 >> Yeah.

07:01 >> If you're already using it.

07:02 >> That's really awesome. This is great. I love it.

07:05 >> All right.

07:05 >> Well, since you brought up Docker, let's keep going.

07:08 >> Okay.

07:09 >> Let's keep going. I'll get there in a second.

07:12 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 Ngrok is a commercial project.

07:21 I'm a big fan of it. I'm a pain user of it.

07:24 I'll see if I continue to be honestly after I read this out.

07:27 However, I'm a big fan of it.

07:30 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 just for

07:41 testing or just for a demonstration purpose.

07:43 How often are you? You're in a Zoom meeting and somebody is like, "Hey, I want to show you this new design and this new user interaction.

07:50 Let me share my screen." Then they're on a huge monitor and it's blurry and you're like,

07:55 "I think I like it. I don't know." 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." Or you want to debug a webhook,

08:05 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 into your machine,

08:15 that turn back into web requests, hit Flask or FastAPI or whatever it is.

08:19 I did it for webhooks a bunch recently and also for mobile apps.

08:24 When Lauren and I were building out the mobile apps, they had to talk to and just do some callbacks and other things.

08:31 We're testing out the API and just like, "Here, we'll fire up an ngrok."

08:34 He'd be on his phone running the app, clicking with it, debugging it, and it would be coming through the API,

08:41 hitting breakpoints in PyCharm. Awesome, right?

08:44 >> Yeah.

08:44 >> But it's more of a individual type of tool and also closed source and paid.

08:50 Not that those are terrible, but 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:04 However, the way it works, don't watch the video, it's not very bad.

09:07 Go to the docs instead.

09:09 Similar though to ACT, it has not as many, but 2,000 stars.

09:14 How old is it? Six months old?

09:16 First six-month-old project, that's pretty good.

09:18 >> Yeah.

09:18 >> Yeah. So basically, to set it up on the server, you have to have, it says a virtual machine,

09:24 you need a machine.

09:25 This could be a VM on the Internet, it could be a VM locally, it could be a real machine sitting on a beat up laptop in the corner with a public IP,

09:35 who knows, whatever. You need some pretty lightweight machine, $10, $5 DigitalOcean server.

09:42 You got to set up a Cloudflare token for wildcard because it manages subdomains

09:47 automatically and GitHub credentials to login, and then that's it.

09:51 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 and so on.

10:01 So it's got 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 very own InGrok, where data also is not going through InGrok,

10:17 but it's just private to you, of course.

10:19 It's HTTPS over to SSL and then back.

10:23 >> Okay. So is it setting up, does InGrok set up a Docker?

10:31 Does it go through Dockers also?

10:32 >> No. 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 talks to that thing and then sets up a connection, an SSH connection back to you.

10:47 >> Okay.

10:47 >> Then when I'm debugging it, if I set a breakpoint or something, do I need to set that in the Docker image or do I need to?

10:54 >> No. The Docker image is just a pass-through.

10:56 >> Okay. Got it.

10:57 >> Yeah.

10:58 >> It really does work just like InGrok.

11:00 >> Yeah. It's super similar.

11:02 I haven't used it yet, but I'm looking to start trying this out.

11:05 Then for the client, there's a couple of ways to install it, but pretty straightforward.

11:10 Then you just, instead of saying Docker, instead of saying Docker HTTP something,

11:16 you say Porter HTTP something and off you go.

11:18 >> Nice.

11:19 >> Yeah.

11:19 >> Cool.

11:20 >> Pretty cool. It sure is.

11:22 You know what else is neat, Brian?

11:24 >> I think Scout is neat.

11:26 >> Scout. Scout APM.

11:27 Scout APM is pretty awesome.

11:29 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 If you are tired of spending hours trying to find the root cause of issues impacting your performance,

11:42 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 and

11:51 solve performance abnormalities faster and easier.

11:54 Scout APM ties bottlenecks such as memory leaks, low database queries, background jobs,

11:59 and the dreaded N plus one queries that you can end up if you do lazy loading in your ORM and then you say, "Oh no.

12:06 Why is it so slow? Why are you doing 200 database queries for what should be one?"

12:10 You can find out things like that.

12:11 It links it back directly to the source code, so you can spend less time in the debugger and

12:15 healing logs and just finding the problems and moving on.

12:18 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, so that's awesome.

12:26 The best part is the pricing is straightforward.

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

12:36 I just learned this, Brian.

12:37 They provide the pro version for free to all open-source projects.

12:43 If you're an open-source maintainer and you want to have Scout APM for that project, just shoot them a message,

12:48 or something on their pricing page about that.

12:50 You can start your free trial and get instant insights today.

12:54 Visit pythonbytes.fm/scout.

12:57 The link is in your podcast player show notes as well.

12:59 Please use that link. 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 Please use our link, pythonbytes.fm/scout.

13:08 Check them out. It really supports the show.

13:11 >> Indeed, indeed. What's next, Brian?

13:14 >> We've talked about type annotation a lot, and I ran across this blog post called

13:18 Annotating Args and Keyword Args in Python.

13:21 Actually, I never tried that.

13:24 I've mostly just, if I have star args or star star kwargs, just leave it as is.

13:31 I haven't tried type annotating those.

13:34 I was intrigued as to how I would do that if I wanted to do that.

13:38 There's an article about it from Redwan, I think, what's his first name?

13:45 Anyway, Redwan Delaware, cool name.

13:49 There's some problems with all the ways he tried that seemed obvious, like passing in a dictionary that he expected.

13:59 Apparently, mypy doesn't like that, or doing a deck that describing the tuple or dictionary that are coming in.

14:08 There were issues with those, but I'm just going to hop to the end result.

14:12 Apparently, using information from PEP 589, 646, 655, and 692, there are features like unpack and type dict along with typing that we're

14:25 used to that are part of the typing module.

14:28 The result is cool.

14:31 I mean, it's not terrible.

14:32 There's a pre 3.12 and a after 3.12 version.

14:36 I'm glad that he listed both.

14:38 But you set up a class for your keyword args and describe what the types are there in your keyword under type dict.

14:47 Then for the star args, it's an unpack, you say an unpack of a tuple and then the types of the tuple.

14:54 You can do good typing as to the types of things that you want to come into star args or keyword args,

15:02 which is neat to make sure that you think of star args or keyword args, it's 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 I like this.

15:13 >> Yeah, it's cool. It's a totally reasonable thing to think.

15:16 I want to pass one number or two numbers or 100 numbers, but whatever it is, I want to operate on numbers, right?

15:22 >> Yeah. In this example, it's either integers or strings that I'm going to get in

15:28 or ints or bools.

15:30 >> I would have never come up with this.

15:32 To create a class derived from type dict with multiple values to then wrap that as an unpacked of,

15:39 okay, I'm awesome, they have it.

15:40 >> Yeah.

15:41 >> But this is amazing.

15:43 >> Yeah. Seems like there could be an easier way.

15:46 But anyway, this is pretty cool 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 from April 27th called

15:58 typos does what I thought type guard would do in Python.

16:02 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. All right.

16:11 That also looks cool. Well done.

16:13 I have one more item for us here.

16:16 It's pretty awesome, Brian.

16:18 >> It's pretty awesome.

16:19 >> Awesome.

16:20 >> Ever since the guy behind just path got thinking about, hey, people should use the featured on Python bytes episode number badge.

16:30 I'm like, 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:36 So this is a GitHub repo with 1,000 stars that is a curated list of GitHub badges for your project.

16:42 Let me tell you, what are you interested in, Brian?

16:45 You want to talk about contacts, you want to talk about groups, socials,

16:48 operating systems, where are you streaming, what kind of tests, what kind of food do you want, for example?

16:54 >> Well, that's under the tests category.

16:57 >> I think that's the failed indent I'm right here.

16:59 I think it'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:05 >> What kind of terminal do you rock and so on?

17:07 So I'll pick a couple, just to give people a sense because I don't want to just read a list of a bunch.

17:13 But 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 e-mail, but if you want to be specific,

17:22 say, hit me in my Gmail or hit me up on my ProtonMail, you can actually have those as badges.

17:27 You can have Signal, Telegram, Tutanota, how do we say that?

17:33 WhatsApp, WeChat, all those things are pretty cool.

17:36 For groups, you have Slack, Discord, Zoom.

17:39 Apparently, I think Zoom is getting into trying to be more Slack-like, even though I never use it for that,

17:44 Reddit and so on.

17:45 Under social, that would be Bitbuckets.

17:49 Social coding, I guess, I don't know.

17:54 But GitLab, Instagram, Pinterest, Quora, Reddit, etc.

17:59 Then you've got some for the OS, not just really standard ones, but like SintOS or Deepin or whatever.

18:06 But those are the little icons that go with them.

18:09 Like the red hat is red, but it also has the hat, that is the red hat one.

18:13 I'll just go down a little bit and find some more of the uncommon ones down here.

18:18 >> ETL, that sounds boring.

18:21 >> Like mobile frameworks, so they've got Flutter, for example.

18:25 The app I was just talking about earlier, the Talk Python is built on Flutter.

18:28 We can have that or Ionic or Cordova or 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 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, I'll see if I can get like four rows of badges onto a project.

18:51 That'd be fun.

18:52 >> Exactly.

18:54 >> Well, any other extras?

18:57 Wait, this isn't what you, 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 ahead and go through them since I already got my stuff on the screen for us.

19:05 So this one comes from the Django-Naut folks.

19:10 So the Django-Naut program is a program to help people who are interested in Django

19:15 become core contributors, not just users of, but contributors to the Django codebase.

19:23 So it's like a mentorship program around that, which is excellent.

19:27 You must act soon, you have six days to apply.

19:31 So the session two application is open.

19:34 I actually interviewed Sarah Boyce and Tushar Gupta about their experiences running and coordinating

19:45 the first one back on Talk Python in 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:02 That was fun. Then I was on Django Chat, the Django Chat podcast with Will and Carlton.

20:11 Yeah, I do too. Those guys are both great.

20:14 We talked all about this whole new deployment style and self-hosted open source and all these different things that I've been

20:21 talking on and off on about the show here.

20:25 But we spent a good chunk of the show just talking about how am I running things

20:29 for Talk Python and for Python Bytes and for a bunch of other stuff.

20:33 Then what are some external projects and some of the other advice and it's just really fun.

20:37 So we had a good time talking.

20:39 People can check that out. Extras for you?

20:41 >> Yeah. I'm going to start off with some bad news and then some good news.

20:45 I came across this, 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:56 It's just awful. It's nefarious and evil.

21:00 The idea of a lot of viruses is to try to get people to run code, 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 this repo and run the code in there." Then I don't know what they're telling to do after that,

21:19 but it's too late at that point.

21:21 At that point, they've just run the virus.

21:23 That's just awful. Anyway, be careful if you're doing a job interview and they say,

21:29 "Hey, go run some code." Maybe don't or look into it a little bit more.

21:34 >> It's so bad though because it could just be, well, all you got to do is pip install

21:37 the requirements and take this project and then add this little feature and show us how you did it.

21:41 That already runs arbitrary code from the Internet.

21:43 >> Yeah. I could.

21:44 Just awful. Yikes.

21:48 Anyway, that's bad news.

21:50 Good news. Good news is this is the week that I'm going to switch the course.

21:55 The pytest course is going from teachable to a new platform podium.

22:02 You don't want to hear the reasoning, but mostly it's the future that I'm working

22:10 off for more courses and more things I want to do with people, teaching pytest and other things fits better with Podia platform than with teachable.

22:19 To celebrate this 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 pythontest.podia.com.

22:28 Now through Sunday, you get 25 percent off if you use the code pytest, and that's P-Y-T-E-S-T.

22:37 You can find that link in the show notes also.

22:41 Lastly, I know PyCon is coming up.

22:45 I won't be at PyCon, but I know a lot of great people will be.

22:50 To celebrate PyCon, I have episode 220 at Python test that's getting the most out of PyCon and

22:57 some great tips from Rob Ludwick about having fun at PyCon. So check that out.

23:06 >> Indeed. I'm going to be doing probably a data science panel podcast that's also going to be live streamed with the JetBrains crew over there.

23:16 >> Sweet.

23:16 >> That'll be a lot of fun. Yeah.

23:18 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, different background.

23:27 >> All right. Awesome.

23:28 >> Is that it?

23:29 >> I have one more.

23:30 One last minute one which I thought was cool, just 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 to visualize your DOM.

23:46 It's a JavaScript bookmarklet to visualize your DOM in 3D.

23:50 >> I love it.

23:52 >> So cool.

23:53 >> 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 or why is this is actually contained in that versus next to that?

24:06 All that stuff you would see from this 3D rotational thing. It's beautiful.

24:09 >> Yeah. It's pretty neat.

24:11 I'll link to that. That's all my extras.

24:14 >> There's a question out there, Brian.

24:16 This is an important one.

24:18 Who will carry the Python staff of power at PyCon, Brian?

24:21 Who will do this?

24:22 >> I don't know.

24:23 I don't know, but I think it's going to be a great disturbance in the forest is what I'm feeling.

24:29 Speaking of which, how about a joke?

24:31 >> Yeah.

24:32 >> I have two jokes for people.

24:33 One, very heartfelt and sincere.

24:35 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 programming humor.

24:42 It's just a little game and it says, import random, import OS, randomly get a number, guess equals input.

24:49 Silly game, guess a number between one and 10 and it converts it to an int.

24:52 So you would think, of course, if guess equals number you won, else, sorry, try again.

24:57 No. If guess equals number print you won, else, OS.remove C colon Windows backslash system 32.

25:06 >> Ooh. That's just terrible.

25:10 Yeah.

25:11 >> I don't think it would really work.

25:12 >> It's going to be a rush to relive with your computer.

25:13 >> It would really work, but you could do it like you could delete your user profile.

25:17 Stuff that doesn't require admin access.

25:21 >> Oh boy. That's funny.

25:24 >> Just a silly little game.

25:26 All right. Let's close this show out with something special.

25:29 I saw this 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:37 Actually, this came from Dan Bader.

25:39 He sent this over to me.

25:40 Just think it was this.

25:41 Said, you wouldn't believe this. Check this out.

25:43 It's called Permission Granted.

25:45 A sad girl sings the MIT open-source license, like for real.

25:51 Okay. So it's AI generated, which is what makes it crazy and it probably has Python involved in there somehow.

25:57 Since AI generated content can't be copied, we should be safe to play. Let's do it.

26:03 We're going to close out the show.

26:04 It's two minutes. You can listen to it if you want.

26:05 If not, feel free to bail.

26:07 But end of the show is we're playing this. So here we go.

26:10 [MUSIC]

28:00 [MUSIC]

Back to show page