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


Transcript #371: Python in a Crate

Return to episode page view on github
Recorded on Tuesday, Feb 13, 2024.

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

00:04 earbuds. This is episode 371, recorded February 13th, 2024, day before Valentine's Day. I am

00:11 Brian Okken. I am Michael Kennedy. This episode is sponsored by Scout APM. Listen to what we have

00:18 to say about them later in the show. If you want to connect with us, of course, we're on Mastodon

00:23 and Fosstodon. We're at mkennedy, at Brian Okken, and at Python Bytes. And you can always join us

00:29 live on YouTube at pythonbytes.fm/live. And we'd love to have you on the show if you,

00:37 or, you know, with us while we're recording. It's fun. So, and let's just kick it off with some,

00:44 I'm a little hungry. Do you have any apples? Maybe I can eat?

00:47 I'll see what I'm finding in the crate. No, so I do. Let's kick it off. So this one comes to us

00:54 from Rhett Turnbull. Turnbulls, excuse me. And Rhett has done a ton of interesting things with

01:01 Python and Mac applications. I had him on Talk Python. Remember we talked about TextSniper at one point

01:08 here on the show, and then he created Textinator, which is a thing you can basically screenshot

01:14 something on your screen, which then will OCR it right away in memory, and then just copy the text,

01:21 which is excellent. You know, so like if you're watching a video and they say, here's the URL,

01:25 instead of trying to shuffle around and figure it out, you just hit a button, highlight it, you know,

01:29 in the screen, and boom, you've got that text, right? So when we talked about PyApp from

01:35 from the Hatch project and OFEC, he was like, that looks awesome. I want to try some variations on

01:43 this. And he played with it. He said, it does, in fact, look really cool. In fact, he said, holy cow,

01:47 that's amazing. Okay.

01:50 But one of the things that it doesn't do is actually build an installer. So depending on your operating

01:58 system, you know, primarily this happens more on Mac and Windows, less on Linux, right? That's more of

02:04 like a package manager sort of type of thing to get apps over there. But on a Mac and Windows,

02:10 it's real common to have something that runs installer, puts something in certain locations,

02:14 maybe changes your path. So it's accessible, right? All those kinds of things. So to your point,

02:20 we have the Apple crate and Apple crate is a, it says package your command line tools into a native

02:29 macOS installer. And I'll just get in front of the screenshot real quick. So it says install,

02:34 whatever it is, and you get an installer and a license and like all this process to install your app,

02:40 right? This is awesome for people who are, when you would say, okay, all you got to do is make sure

02:44 you have Python, Python 310 or greater on your machine, have that in the path. And then,

02:49 then what you're going to do is you're going to create a virtual environment. Are you going to

02:51 install pip X and then you're like, wait, wait, wait, what's happening? Right. You just want to go

02:56 double click it. You'll have it. You know what I mean? And so that's what this does, right? So what

03:01 you can do is you just say, apple crate build, what is the name of the app, what is the version?

03:05 What is the license file? What binaries and stuff to include? And then where does it go? And it'll go

03:11 and create this installer. And you can even do this through code. If you want to somehow automate,

03:16 you know, via Python, you want to automate this creation of the installer, seller build.

03:21 Oh, cool.

03:21 So isn't that cool?

03:22 Yeah, actually that's pretty neat.

03:25 Yeah. So it says it's nothing that you couldn't do yourself, but there's a bunch of steps and

03:29 different tools that are involved. It also uses Jinja2. So a templating thing. I'm not sure how many

03:36 people are familiar with this concept, but the template language is like Jinja and Chameleon

03:42 and others and Mako that are known for being, here's how I put dynamic stuff in HTML and Flask,

03:48 or here's how I return something that's a webpage from FastAPI or whatever it is you're talking about,

03:53 right? Yeah. But those things are independent libraries for the most part, and they can be used

03:58 to generate anything you want. So for example, you could have a Jinja file that is like a transactional

04:06 email. So at Talk Python, people will come and say, Hey, I forgot my password. You wouldn't believe how

04:10 popular that feature is. I forgot my password. And you want to give them the same thing. Like,

04:14 here's a little design. Here's a picture. Sorry, you forgot your password. Here's what you do.

04:18 You know, cause I, I'm not doing that for a slate, like the web app handle set, but there's parts

04:22 where you want to put like chunks of data. So here's your unique code. You click link, you click

04:28 to actually do the reset for you. Right? So that could just be a Jinja thing that runs a Jinja file

04:35 template that just runs Jinja through it to actually generate what goes in the email regardless. It's not

04:40 a web view or a web request or anything like that. Right? Yeah. So you can do the same thing here.

04:45 You can use Jinja to templates to generate files that are required. So it allows you to pass in

04:51 variables like what is the name of the app and what is the version of the app and different things. So

04:55 you can kind of script the generation of say like the license file or whatever with Jinja, which is,

05:01 you know, really pretty nice touch. I think also it's a friend of the Toml. It is friendly with the

05:07 PyProject Toml and it has its own app create.toml. If you don't want to mix those together. Yeah. I've

05:12 mixed feelings about mushing everything into PyProject.toml. Like you can have rough in there,

05:17 but I have my own rough.toml instead of, you know, tool.rough inside of the PyProject Toml. I don't

05:22 know. Could go either way with that one. But anyway, this is it. And it shows you the different template

05:27 variables you can use and, you know, to like generate your output. And yeah, people, if this is

05:34 something you're trying to do, check it out. It looks really cool. And keep up the momentum,

05:37 right. Well done. That is pretty cool. On the Toml front, I kind of agree that I used to be on the

05:43 bandwagon of like, let's put everything in PyProject.toml. But and then rough came along and had,

05:49 I have like a huge rough config. Well, not huge, but it's larger than a lot of this other stuff. So I do

05:56 things that are big. I do like to put those in their own little separate thing. So yeah, exactly. And

06:01 also you can just look, glance over and see the project. Oh yeah, this is using rough. Got it.

06:04 Yeah. Yeah. There's that too. Okay. Speaking of packaging, it's packaging. Let's talk about some

06:12 more packaging episode. There is. So there's a lot of ways to package stuff. And Ned Batchelder,

06:20 friend of the show, came out with a blog post called one way to package Python code right now.

06:26 And I kind of like that this discussion and the discussion really is maybe you don't need something

06:34 to generate like your package directory, maybe just like an example. So, so he just has a package sample

06:43 GitHub repo that just has an example. And in the read me, there's a bunch of stuff like discuss,

06:50 discussing what you need to think about. For one, the entire example is a good example. You can just use

06:55 this and like copy it or something and then modify your own stuff. They, one caveat, I would like me

07:03 personally, like the read me is in restructured text. I would totally go with markdown instead of

07:07 restructured text. 100%. Yeah. However, a lot of common things here, things to think about like decisions

07:15 that you need to make before you get started, like what's your project name? And with a hint of like

07:21 search for the name that you want on PyPI, just to make sure that it's not there already.

07:26 And I recommend this for even people that don't plan on pushing it to PyPI. If you're only going to use

07:32 a project on your own internally or something, especially if you're going to share it with others

07:37 within your company, don't collide with something already on PyPI because it'll be annoying.

07:43 And how to, how to deal with the version number, doing optional features. So, and then talks about

07:50 what's in the repo and, and what he's included is the source directory source packaging. I've kind of

07:58 gone back and forth on that, but I do think that's the best way to do it is you've got your project and

08:02 then a SRC directory and then the project directory under that. Seems like just one extra directory,

08:09 but it's consistent and it's fine. I did learn a little bit. So one of the things,

08:14 there's a example, pyproject.toml with, with some comments. It's very heavily commented,

08:20 which is great talking about, you know, different pieces. And it's not, it's a kind of a minimal set.

08:28 It's not a whole bunch of stuff here, which is good. The dev requirements there, you can have a dev

08:36 optional install on pyproject.toml, but dev requirements is also something that's very

08:42 common requirements.txt file. The readme, I actually, there's a license and a .gitignore.

08:48 Having an example .gitignore is good. One of the things that was new to me is editor config.

08:54 I think I've seen that before, but I didn't know that that was a thing. Did you know that

08:59 editor config was a thing?

09:01 No, what does that work with? I know about the dot idea subfolder for PyCharm and the dot VS Code one

09:07 for VS Code, but I don't know anything about this.

09:08 The idea is like this editor config.org, which I popped it open. It's a config file that configures,

09:17 it's sort of a global configuration for different editors. And some of them support it natively and

09:24 some, some you have to get out of, yeah, a plugin or something. So for instance, all of the,

09:30 like all of the JetBrains stuff supports it, IntelliJ and all that, PyCharm supports it. Visual

09:38 Vim supports it in Visual Studio, Visual Studio code. You have to have a plugin to do that, but it is

09:47 available, the plugin. So cool.

09:49 That is news to me and I'll definitely be checking that out. Yeah.

09:52 Yeah. It's, I'm like, oh, cool. I'll maybe try that because sometimes I do pop around with different

09:57 editors. be nice to have one config maybe, maybe at least I'll try it. the other thing I like is a

10:04 small make file. I've kind of gone back and forth on this also, but if it's, if you're comfortable with

10:09 make files or the people working on your project are, you may as well use them. If, if you're the

10:14 only one, comfortable that maybe don't, but, a kind of a nice minimal set of things to put

10:21 in your make file, just stuff that you have to do with around your project, like, tools,

10:27 make tools would do, install the dev requirements. So it would, you know, I would probably make

10:34 that make dev instead of make tools, but you know, whatever, how to do the distribution, he's

10:40 using twine. So, testing on pipe AI and, and then make pipe AI. again, I probably would

10:47 write that as like make distribute or something, but you know, kind of nice to have an example. So,

10:52 so anyway, the, the other thing I wanted to say was he did shout out to the pipe, a pipe,

10:59 a packaging Python projects tutorial. And I also agree that if you want to get into the nitty gritty,

11:06 so his example is great. So for a minimal set, but if you really want to understand everything,

11:10 this is a great reference is the, the, a Python.org, packaging Python projects page.

11:16 So excellent. Yeah. I read that, or I saw that article and, skim through it, I guess the right

11:22 way to put it from Ned and now it's really interesting. I'm glad you covered it. Cool. I agree that a

11:26 minimalist, you know, I used to be like, all right, give me my cookie cutter thing. And there's always be,

11:30 oh, it's going to generate this and this and this, but I don't want to use, you know, name your aspect.

11:35 I don't want to use Redis in this thing, or I don't want to use react build steps in this particular

11:41 product. Like they just always seem to be over specified. A lot of those template building things,

11:45 you know? Yeah. Also, one of the, a great, comment in his thing was, that there's a lot

11:52 of people that just have some Python code that they need to distribute. Like they're not, it isn't a whole

11:57 bunch of stuff and it's not complicated. So please don't, yeah, please don't tell me like all the details.

12:02 I don't want to care about the history and all the different tools. Just show me how to do it.

12:07 so here's a decent example. So. Excellent. All right. A bit of a real-time follow-up.

12:12 Henry out there says, I love this quick search. There are 8,000 projects on PyPI that use pyproject.toml,

12:20 while 80 of them use roughtoml based on sdst. Interesting. I think you would maybe, maybe a,

12:27 a way to think about that is like, you've got to ship your pyproject.toml. Like it's your new setup.py.

12:33 It's, it's part of, you know, it has to be there, right? To get the thing to install. Whereas rough.toml,

12:39 you don't. So like, for example, I just shipped a new version of umami Python for some updates there

12:44 this morning. And if you look at the source, I've got like the gitignore and the roughtoml,

12:49 but the thing that actually gets shipped is, is like a different subset of that, thing that

12:55 doesn't include it. So, I'm not sure the absence of it necessarily means anything, but yeah,

13:00 it would be interesting to know like what that ratio is.

13:03 Also the rough defaults are not bad. So I think a lot of projects that use rough don't have any

13:09 settings and just run it vanilla.

13:12 Yeah. Let's see. Which ones do I, I feel like are super important. There's very few. So

13:16 I think the line length is way too short at 79. I mean, I have a 32 inch monitor. I don't want to

13:24 work in like a third of it on the left. You know what I mean? Yeah. and then the, I, I'm a fan of

13:29 single quotes, not double quotes, and so on. And then, yeah, so that's, that's pretty much the

13:35 stuff that matters to me, but you know what else is really nice, Brian, our sponsor.

13:39 Yes. So we want to thank scout APM. this episode is brought to you by scout APM.

13:45 Are you tired of spending hours trying to find the root cause of issues impacting performance?

13:49 Then you owe it to yourself to check out our sponsor this week, scout APM. Scout APM is a leading Python

13:56 application performance, monitoring tool, monitoring tool that helps you identify and solve performance

14:02 abnormalities faster and easier. Scout APM ties bottlenecks, such as memory leaks, slow database

14:08 queries, background jobs, the dreaded N plus one queries problem common with ORMs and more directly

14:14 to your source code. So you can spend less time debugging and more time building. You'll love

14:19 scout because it builds it's built for developers by developers. Scout makes it easy to get set up

14:25 and deliver insights in less than four minutes. Seriously. You could pause this episode, set up scout

14:31 and be back at it without missing a beat. And the best part scouts pricing is affordable and

14:37 straightforward. Only pay for the data you use, no hidden overage fees or per seat pricing. Start your

14:43 free trial and get instant insights today. Visit pythonbytes.fm/scout. And please use our link

14:50 link because it does truly support the show. Let's, let's move on to the next item here. And this one

14:56 comes from Mastodon and you are called Ninsky, pointed out that, you know, something that's really

15:04 awesome about rough. We were just talking about rough, right? Yeah. One of the thing that's awesome

15:09 about it is that they have put together a wiki like thing that tells you why. So somebody was complaining

15:17 about, look, I, if I could just get pilot or flake eight to tell me like, not just this is the rule,

15:23 but why do you care about this rule? Why should you follow it? Or if you don't care about whatever

15:27 it says, then you can ignore it or if you wish. So at docs.astral.sh, the company behind rough and

15:35 with Charlie Martian team slash rough slash rules has a really cool site here. So you come down and it says,

15:42 here's 700 lint rules. And if you scroll down, it'll have like old things like, okay,

15:48 F403 undefined local import with star or unused import. Right. So let's just grab the first one

15:57 and click on it. It says, this is derived from the flakes, the pie flakes linter. Sometimes you

16:02 can fix it, but most importantly, why is it bad? And give me an example of it. How cool is that?

16:07 Yeah. That is really cool. Yeah. So for example, this one, it says unused imports at a performance

16:12 overhead at runtime and risk creating import cycles. Like this thing imports that, but that thing

16:18 imports to this boy, do I wish Python would get around that problem? I think it could, but anyway,

16:23 like with that two, with a two-step compile possibly, like there's all sorts of languages that,

16:28 that do that. Right. Yeah. Like you don't worry about that in C for example. anyway, they,

16:34 they also increase, unused imports also increase the cognitive load of reading the code.

16:41 I mean, editors help if they grade out and say that, this is not used, but still, the performance

16:45 thing and cycles is certainly there. So it says, here's an example, import numpy as NP define area,

16:52 you know, pie times radius squared. Instead don't do that, but it has this, here's the problem. Here's

16:59 what, and, and the right way, which is cool. So let me just, I'll just, I have no picked ones out

17:04 of there. let's see if tuple, what is this? So checks for if statements that use non-empty tuples

17:11 as test conditions. Anything about this? Why is this bad? Non-empty tuples are always true. I see.

17:18 So you maybe want to think you want to put parentheses around your if, cause you're coming

17:22 from another language, parentheses, false, but you have a comma in there. It's always true,

17:27 even though false is in there, right? Cause it's testing the truthiness of the container,

17:30 not values of the container. This catches people often. I see it when somebody has an expression,

17:36 like they're, they're, it's a, like, you know, they're combining two strings or something and

17:41 they're checking the result. so yeah. Then maybe just some PEP 8 ones. Like here's another

17:47 one PEP 8. Don't, don't use, things that are variables, functions, et cetera,

17:52 as capitals, right? Other languages have this, they have mixed case or whatever. I, this is okay for

17:59 classes, but nothing really, not much else in Python gets named that way. So they have an example,

18:03 like don't use capital B equals a plus three. And so on. Anyway, I think this is really a nice

18:08 resource. Like look at the scroll bar, Brian, look how much is here. This is a ton of work and they'll

18:13 have these really nice examples. It's fantastic. I think it'd be cool just to

18:17 like read through some of this, especially if you're, if you're probably not new to Python,

18:22 but like new ish, intermediate Python developer, and you want to just sort of write stuff better.

18:27 Well, one is to use these things, but also just kind of a read through some of this documentation

18:32 to figure out, why different styles are the way they are. so yeah.

18:37 Yeah. Yeah. So even if you don't use rough, this is a nice resource.

18:40 Cool. well, I have a whole bunch of stuff. I was going to, I'm doing an extra,

18:47 extra, extra, extra, extra thing, for, for, for my next topic ish topics, plural.

18:53 So, I, came across an app. I think I heard it from several people called flat.app.

19:00 So flat is, and I've just started playing with this. it's kind of like Trello

19:06 and other sort of task tracking where you can have, have things in to-do lists and in progress and

19:11 done. but the work and then different workspaces for different things. You can have different

19:16 going on. I just kind of like the layout of it and, I'm having fun playing with it.

19:20 And, right now it's free, but it's going to kind of end up being a paid app, but not very expensive.

19:26 I think it's like for individuals, like five bucks a month or something. anyway, flat looks,

19:30 looks fun. I've started playing with that. next up is, terms of service. Didn't read.

19:36 this has been around for a while. It's at TOSDR.org. like kind of too long. Didn't read.

19:44 the tagline is I have read and agree these term with these terms, is the biggest lie on the web.

19:50 And we aim to fix that. And I kind of love this. it's a, it's, you can search for a different

19:56 service and it tells you, it gives you a grade for each one. And then, and then also kind of some

20:02 highlights as to why it's graded that way. Wikipedia has a grade of B. there's apparently

20:08 there's stuff that they don't like. And what I like about this is not just the grade, but why they give

20:14 the grade because some stuff I don't really care about. Like, you know, that the data might

20:19 go away. okay. Yeah. Maybe, in Wikipedia, but, I kind of get that already. I understand.

20:25 So, so this is neat. The, what I did was surprised by, I wanted to point this out is that

20:31 it is a, it's kind of like Wikipedia in that it's the classification system and everything is done

20:38 by its peer review process, but it's not, it's not like one company doing all of this. It's,

20:43 you can sign up and you can, you can start rating different services if you want, and then it'll

20:49 be reviewed. So it's kind of a crowd crowd acted thing. So there's that last week. I thought it was

20:56 really cool. I like that one. Yeah. and then there's even articles on like wired and stuff.

21:01 Like there was an article on wired about it, but it's been around for a while. So it's,

21:05 like the wired article is from 2018. So anyway, but I like the idea. So if people want to

21:12 help out, that'd be great. last week I talked about blogging and, and this week I ran across

21:18 an article called why I write and I loved the topics here. So I wanted to highlight them.

21:24 This is, from, Sheena O'Connell and, especially technical writing. So one of the

21:31 things I write to remember, that's actually why I started blogging. I started blogging just to write,

21:35 keep track of stuff that I kept forgetting. so I think that's a great idea. second is,

21:41 to refine my thinking to once you, if you write it down to, it'll help you understand a project

21:47 more. I write to impact. of course I write to get through hard times. I think that's a,

21:54 that's a good one, even with technical stuff. I mean, there's personal, personal, writing as well,

21:59 but also, I've had some times in my career where, I've been frustrated with my job and,

22:06 blogging helps me focus on something that I can actually have an impact on. And it did help me,

22:11 focus on something that I enjoy more than my job at the time. So I think that's good.

22:16 and then, writing to connect. I think those are all connecting with people's all, they're all great.

22:21 So, I'm almost done with all my extras.

22:23 Not those are good. I, I write for, for many of these reasons, but I also write because when I

22:31 yell at podcasts, no one responds to me or listens. So maybe I could write down those thoughts somewhere

22:36 else and someone will hear them. You know what I mean? yeah. Before I move on, Sheena,

22:41 what was it? Sheena O'Connell. she's got a lot of great articles. There's a unexpected glass

22:47 ceilings for junior developers. That's an interesting read. applying mastery based learning in tech

22:54 education, a problem with code schools. so these are, these are interesting, not,

22:59 not just Python stuff, but interesting tech articles. So yeah, cool blog. the last thing I wanted to

23:05 point out was, actually I think I'm done. That was it. That was done with my extras. Oh no,

23:11 one more. jet brains, has a PyCharm blog and there is three pie test features you will love

23:19 by Helen Scott. So, just a quick article, talking about fixtures, marks, markers, and

23:25 parametrize. And I wanted to do a shout out to this one because, at the bottom, it was great,

23:31 great short discussion, but, they also plug my course and book at the bottom. So thank you,

23:36 Helen and PyCharm. It's great. So that's really cool. Nice.

23:40 All right. Well, well, you got more extras. Do you want to just keep going?

23:45 I could just keep going. I got a couple more. keep going. Okay. that was good. Yeah.

23:50 We're just going to go right into the extras anyway. so, I just had what links to my course and,

23:56 sorry, we couldn't find that page. Oh no. anyway, of course the, I ran across this,

24:02 this fun thing. It was just Wikipedia's list of common misconceptions. and I, I don't know,

24:08 somebody posted it on Mastodon or something, and this is a brilliant read. I don't know if

24:13 you've come across this before, but no, this is nuts. Okay. I loved it. So I'm going to pull out

24:19 a couple, Twinkies. we always talk about them lasting forever. Apparently they use it. They

24:24 have a shelf life of 45 days, not millennia. Like I thought, I don't know only McDonald's

24:30 hamburgers. I don't know. I see some pictures of those things looking good after way too long.

24:35 something interesting I found out about microwave ovens. I, that I didn't understand,

24:42 let's see microwave ovens. They don't cause cancer. I knew that, but, I thought they,

24:47 they do not cook from the inside out. I thought they did the inside out thing. I thought that also,

24:53 but it, the, 2.45 gigahertz micro microwaves can only penetrate approximately

25:00 one centimeter, about three eighths of an inch into most foods. So the inside portions of thicker

25:06 foods are mainly heated by, conduction from the outer portions did not know that. So,

25:12 interesting, learn something new every day. So, my last extra is just on a wishlist. I,

25:18 I came across a company in Portland that makes microphones, ear trumpet labs. And I really

25:25 want this microphone. Look at this. It's fantastic. It's like a steampunk.

25:29 Yeah. It's so cool. It's called the Edwina. They've got a bunch of, bunch of different models, but, but this is, this is a great looking mic. I'd love to be

25:39 able to try this out. So 600 bucks. Maybe. That thing is amazing. Yeah. It gets into the price of

25:44 this microphone, Brian, which is kind of ridiculous. So anyway, but it's, it's not, it's not

25:52 dynamic. It's that other one. Oh, condenser. They've blown it. Oh man. So I'm not sure. I'd have to

25:59 try it out to see if I can get the, my room quiet enough to use this, but yeah.

26:03 For people who don't know the dynamic ones really capture just like an area and they exclude all the

26:09 background sound like a whole bunch. Yeah. There's a lawnmower outside that you can't hear because

26:14 of the, my dynamic mic. So is it right now? Yeah. They're absolutely, I don't hear anything at all.

26:19 And I've had people right next door using a chainsaw on a tree and people couldn't, it didn't come

26:25 through in the mic. Those are dynamic mics. condenser mics are maybe better for like a studio.

26:29 If you're people say they sound the best, well, they sound the best in like a truly quiet place,

26:34 but they pick up echo more, they pick up background cards, et cetera. So yeah, you gotta be careful.

26:39 Brian's getting out of here. Yeah. Yeah. Anyway, how about you? Do you have any extras?

26:43 I sure do. I sure do. Okay. while ago I wrote the unsolicited advice from Mozilla and Firefox

26:50 saying that, they are going off the rails and they really should fix it. This has nothing to do

26:55 with what I said, but I do want to, you know, since I kind of criticized them, also gave them some ideas.

26:59 I do want to point out something that's kind of cool that they just launched, which is Mozilla

27:03 monitor. They had Mozilla monitor and like a really super shallow, not much of a service type of way.

27:09 kind of like, have I been pwned? Like, it'll tell you if there's a breach. Okay. Well, there's like

27:14 services that do that already I'm signed up for, but thanks. But what they did is they've announced

27:19 some kind of service now that'll find where your private info is being sold by data brokers.

27:24 And then they'll fix it. Like, see this, it says we found, we found, 50 places where your email

27:31 or your physical address or your phone number or your family member was being sold by these crappy

27:37 scumbag data brokers. They truly are scummy people and we'll fix it. Here's another example.

27:43 Three manually fix. It's like change your password. Cause some, and then 80, 35 automatically

27:48 removed because we found them. Well, I, I filled this out. It'll do a free scan. If you put your

27:53 email address in here, I have a thousand and 80, 1080. And they have like my kids' names,

28:00 my kids' phone numbers. This is, I'm telling you, they're scumbags. and they sell this,

28:05 right? so you can sign up for it and, it'll basically go through and keep it safe.

28:12 You can do one time. Like here's the old thing. It's the free breach alerts. Like go to have I been

28:16 pwned? It's better. It's more comprehensive. Troy hunt is awesome. I've had him on talk Python

28:20 quite a while ago, but the monitor plus is what I'm talking about. The only drawback is to look how much

28:26 that is a $14 a month just to tell you if it's found something on, on online and we remove it.

28:33 I think that's pretty steep, man. I mean, maybe if it really, really bothers you. So I guess,

28:43 what my plan is to do, like, since there are so many and it really is creepy. It's like, I'm going

28:47 to do it for one month. It's, it's been working for like a week and I don't remember how much it is.

28:51 It's like a quarter of the way through getting rid of them. And then I'm going to cancel it again.

28:54 Cause there's no way I'm paying $14 a month cause this stuff doesn't appear at an incredible rate.

28:59 It's just, I haven't done it for 20 years, you know, and I haven't cleaned it up for 20 years.

29:02 So I think they're shooting themselves in the foot with this pricing because at $14 a month,

29:07 you're right. I'm like, I'm going to do it all in the month in one month. But if it was like

29:12 four bucks a month, I'd probably just leave it on. And then they're making like 50 bucks for me

29:17 instead of 14. That's, that's my assessment as well. I think it's tremendously too high.

29:23 I think everyone has subscription fatigue and another 15 bucks is just 14, 50, whatever it

29:28 was is like, especially since it mostly happens in one, one go, like you mostly get it cleaned up and

29:34 then it's just kind of maintaining over time, you know? So I don't know, but still nonetheless,

29:39 for doing something positive and making progress on, on finding multiple ways to support them.

29:46 people can check out that, article at mcanade.codes if they want like what I think they

29:51 really should be doing.

29:51 Yeah. There's that. There's also like, that's one way to like help support Mozilla cause they're

29:56 cool.

29:57 Yeah. If you couldn't, you could also could consider this just a $14 a month donation to Mozilla,

30:02 right?

30:04 If that's how that's your vibe, then go for it. But there's a lot of things out there that deserve

30:08 some of my money. And if I donate $14 a month to all of them, then that's a lot.

30:13 Yeah. You don't even get an NPR mug for that. So.

30:16 Exactly. Like I should at least get a free browser. Oh wait. Okay. A couple of other things here.

30:22 Not the joke yet. Python 3 12.2 is out and there's, you know, a non-trivial number of fixes of it.

30:31 I don't know how many there are here, but you know, important stuff like get a new version of SQLite

30:36 and open SSL and the freeze tool didn't work with this, et cetera, et cetera. So some bug fixes,

30:43 I didn't see any security issues, but you can see there's, there's a, there is one minor security

30:49 issue. I don't think it's a huge deal, but like, there's quite a bit of change here, Brian,

30:52 look at this. By the way, the security issue is that if there's a dot PTH file, starting with

30:59 a dot or a hidden file attribute that could be, you know, snuck into something. So people don't know it.

31:07 And then, then they get imported and run code or something to these effect. I don't, I don't know

31:10 exactly the details, but that doesn't sound like a tremendous, you know, it's not like, well,

31:15 if somebody sends seven, seven, two ampersand three, you're hacked or it's nothing like that,

31:20 but it is, there's a minor security update, but that's a lot of stuff, right? Yeah. Yeah. So

31:24 very cool. And because of all the neat Docker stuff, one command, a wait a couple of minutes

31:29 and all the apps are now running Python 3 12.2, including Python bytes out of him. Hooray.

31:34 Yeah. The other thing to, to note about 3 12.2 is that it's a couple of releases,

31:40 a couple of bug fix releases in. So if you were holding out, switching to 3 12,

31:44 this might be a good time. Yeah. That's, I didn't really think of that at all,

31:48 but that's a good point. This is the third release of Python 3 12, right? So if, if you've been,

31:53 Oh, we're not ready to be so cutting edge. Well, maybe, maybe now you are. Yeah. So,

31:58 okay. Cool. Next up, I want to reach out to anyone crazy enough to get a vision pro who also

32:06 likes taking courses that talk Python, the talk Python mobile app and its iPad forum is now available

32:13 to put into your virtual land. You could sit by Mount hood relaxing and then put, you know,

32:17 Brian's pie test course on the wall next to you and look at the stars and then look over at Brian or

32:23 whatever course you want. But I would, I would love for somebody to just try it out because there's no

32:27 way I am buying a vision pro no way. But if people want to try it, that'd be cool. It's not like I

32:34 built this app and didn't test it in that basically iPad apps. If you opt into it, you're allowed to

32:40 run the iPad apps in the vision pro. So I just took our iPad app that we know works well, let people run

32:45 it over there. Yeah. I would totally try it for you. If you want to buy me a vision pro. Sure. I'll go to

32:50 the Apple store later. You know, actually I'm going to stop by the sporting goods store and just get you

32:54 one of those snorkel snorkeling goggles, snorkeling mask. So I want to use them for chopping

33:01 onions and see if I can get, get an app that'll do googly eyes on my onions while I'm chopping them.

33:07 That's amazing. I once came home and found my daughter wearing her swim goggles, you know,

33:14 the small ones sitting there chopping onions going, I'm winning the day. I'm winning the day. She's like,

33:18 I'm not, my eyes don't hurt at all. I was like, bravo. That's great. That's a good idea. We,

33:23 we buy special made onion goggles, but they're basically swim goggles.

33:27 Yeah. Well, you could get the vision pro. I bet it would keep most of the air out and then you could

33:32 just be like, you know, a field of onions cutting the onions or who knows where you want to be.

33:36 Yeah. It's a brave new world.

33:38 I don't know if I want to like put a knife that close to my hands with, with,

33:41 with the monitor leg, but anyway, excellent. Yeah. Henry expected that the vision pro to be mentioned. And then David out in the

33:52 audience suggests that I just get one for everyone in the chat, like surprise. Thank you for being part

33:57 of the live show. You get a vision pro and you get a vision pro. Everyone look under your seat.

34:01 That's really nice of you, Michael, for offering that.

34:04 Yes, of course. She's here to please. I know I have something I actually, that's legitimately,

34:10 next. So yesterday I had, Martina, Poglisi on the show and she does this really cool project called data doodling. She's a data

34:21 scientist at an AI company, but also just draws out really cool pictures of things. She's trying to

34:28 visualize instead of going to use Python or other tools to do. And just let me think about that before,

34:33 you actually, get in there and use the tools, just kind of kick back and explore data

34:39 with pictures. So anyway, I encourage people to go check that video out. It's 29 minutes long. It's

34:45 not super long, but if you're into data visualization and data science, she's doing some really cool

34:50 stuff. So it's pretty great. Yeah. It's really cool. Isn't it? Yeah. Yeah. Yeah. She's, she's doing

34:56 awesome stuff. She says she has 50 different ones of those and they all have an article and analysis on

35:01 the data and it's pretty, pretty in depth. All right. How about time for a joke?

35:05 Yeah.

35:06 So we close it out with a joke. This one, this one, connects a lot here, Brian. Let's see.

35:11 So here's a, presumably a developer stick figure walking along, looking at a fly trap and says,

35:18 why would a fly land on something like this? Stupid fly. Looking at a mouse or rat trap. Rats should be

35:24 ashamed for falling into this trap. Big bear trap or one of those like trapper claw things. Bears. This

35:31 is ridiculous. Don't step in this. Brian, then there's a sign that says AWS free tier. Ooh, that looks nice.

35:39 Yeah. That's funny.

35:44 It's a good one, right? Yeah. Yeah. So yeah. Plus with the smile I got for you. All right. Yeah.

35:49 Well, thanks again for a lovely episode and thanks everybody for, coming into the show

35:57 and, coming on the show live and sharing it with us. It's been fun and we'll talk next week.

36:02 Bye. Thanks.

Back to show page