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 your earbuds. This is episode 371 recorded February 13th, 2024, day before Valentine's Day. I am Brian Okken.

00:12 I am Michael Kennedy.

00:13 This episode is sponsored by Scout APM. Listen to what we have to say about them later in the show. If you want to connect with us, of course, we're on Mastodon and Fosstodon. We're@mkennedy@brianocken and @pythonbytes.

00:28 And you can always join us live on YouTube at pythonbytes.fm/live and we'd love to have you on the show if you or you know with us while we're recording. It's fun.

00:40 So and let's just kick it off with with some. I'm a little hungry. Do you have any apples? Maybe I can eat.

00:47 I'll see what I can find in the crate. No, so I do. Let's kick it off. So this one comes to us from Rhett Turnbull. Turnbull, excuse me. And Rhett has done a ton of interesting things with Python and Mac applications.

01:04 I had him on talk Python. Remember we talked about text sniper at one point here on the show, and then he created textinator, which is a thing you can basically screenshot something on your screen, which then will OCR it right away in memory and then just copy the text, which is excellent.

01:22 You know, so if you're watching a video and they say, here's the URL, instead of trying to shuffle around and figure it out, you just hit a button, highlight it, you know, in the screen and boom, you've got the text.

01:32 Right. So when we talked about PyApp from the Hatch project and Ofec, he was like, that looks awesome. I want to try some variations on this.

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

01:49 But one of the things that it doesn't do is actually build an installer. So depending on your operating system, you know, primarily this happens more on Mac and Windows, less on Linux, right? That's more of a package manager sort of type of thing to get apps over there.

02:08 But on a Mac and Windows, it's real common to have something that runs installer, puts something in certain locations, maybe changes your path so it's accessible, right? All those kinds of things.

02:18 So to your point, we have the Apple Crate. And Apple Crate is a, it says package your command line tools into a native macOS installer. And I'll just get in front of screenshot real quick.

02:32 So it says install whatever it is, and you get an installer and a license and like all this process to install your app, right?

02:40 This is awesome for people who are, when you would say, okay, all you got to do is make sure you have Python 3.10 or greater on your machine, have that in the path.

02:49 And then what you're going to do is you're going to create a virtual environment, you're going to pip install pipx. And then you're like, wait, wait, wait, what's happening? Right? You just want to go double click it, you'll have it. You know what I mean?

02:58 And so that's what this does. Right? So what you can do is you just say, Apple Crate build, what is the name of the app? What is the version? What is the license file? What binaries and stuff to include? And then where does it go? And it'll go and create this installer.

03:12 And you can even do this through code if you want to somehow automate via Python, you want to automate this creation of the installer, installer build.

03:21 Oh, cool.

03:21 So isn't that cool?

03:23 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 different tools that are involved. It also uses Jinja2. So a templating thing. I'm not sure how many people are familiar with this concept. But the template language is like Jinja and Chameleon and others and Mako.

03:43 They're known for being here's how I put dynamic stuff in HTML and Flask. Or here's how I return something that's a web page from FastAPI or whatever it is you're talking about. Right?

03:54 Yeah.

03:54 But those things are independent libraries, for the most part, and they can be used to generate anything you want. So for example, you could have a Jinja file that is like a transactional email. So I talked by thon people come and say, Hey, I forgot my password, you wouldn't believe how popular that feature is, I forgot my password. And you want to give them the same thing, like, here's a little design, there's a picture, sorry, you forgot your password, here's what you do, you know, because I'm not doing that for sleep, like the web app handles that.

04:21 But there's parts where you want to put like chunks of data. So here's your unique code, you click link, you click to actually do the reset for you. Right? So that could just be a Jinja thing that runs a Jinja file template that just runs Jinja through it to actually generate what goes in the email, regardless, it's not a web view or a web request or anything like that. Right?

04:43 Yeah.

04:43 So you can do the same thing here, you can use Jinja2 templates to generate files that are required. So it allows you to pass in variables like what is the name of the app? And what is the version of the app and different things. So you can kind of script the generation of say, like the license file or whatever, with Jinja, which is, you know, really pretty nice touch, I think. Also, it's a friend of the Toml. It's friendly with the PyProject Toml and it has its own app create.toml if you don't want to mix those together.

05:12 Yeah, I mixed feelings about mushing everything into PyProject.toml. Like you can have rough in there, but I have my own rough.toml instead of, you know, tool.rough inside of the PyProject Toml. I don't know. Could get me throw away with that one. But anyway, this is it. And it shows you the different template variables you can use and you know, to like generate your output. And yeah, people if this is something you're trying to do, check it out. It looks really cool and keep up the momentum, right? Well done.

05:38 That is pretty cool. On the Toml front, I kind of agree that I used to be on the bandwagon of like, let's put everything in PyProject.toml. But and then rough came along and I have like a huge rough config. Well, not huge, but it's larger than a lot of this other stuff. So I do things that are big. I do like to put those in their own little separate thing.

05:59 Yeah, exactly. And also you can just look glance over and see the project. Oh, yeah, this is using rough. Got it. Because it is a rough.toml.

06:05 Yeah. Yeah, there's that too. Okay. Speaking of packaging, it's packaging. Let's talk about some more packaging.

06:12 It's the packaging episode.

06:13 There is. So there's a lot of ways to package stuff. And Ned Batchelder, friend of the show, came out with a blog post called one way to package Python code right now. And I kind of like that this discussion, and the discussion really is, maybe you don't need something to generate like your package directory, maybe just like an example.

06:39 So he just has a package sample GitHub repo that just has an example. And in the readme, there's a bunch of stuff like discussing what you need to think about. For one, the entire example is a good example. You can just use this and like copy it or something, and then modify your own stuff.

06:59 One caveat, like me personally, like the readme is in restructured text, I would totally go with markdown instead of restructured text.

07:08 100%.

07:09 Yeah. However, a lot of common things here, things to think about, like decisions that you need to make before you get started, like what's your project name, and with a hint of like 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 a project on your own, internally or something, especially if you're going to share it with others within your company, don't collide with something already on PyPI, because it'll be annoying.

07:42 And how to deal with the version number, doing optional features.

07:48 So and then talks about what's in the repo and what he's included is the source directory, source packaging.

07:57 I've kind of 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 then a SRC directory and then the project directory under that.

08:06 Seems like just one extra directory, but it's consistent and it's fine.

08:11 I did learn a little bit. So one of the things, there's an example, pyproject.toml with some comments. It's very heavily commented, which is great, talking about, you know, different pieces.

08:25 And it's not, it's a kind of a minimal set. It's not a whole bunch of stuff here, which is good.

08:31 The dev requirements, you can have a dev optional install on pyproject.toml, but dev requirements is also something that's very common requirements.

08:44 The readme, I actually, there's a license in a gitignore. Having an example gitignore is good.

08:51 One of the things that was new to me is editor config. I think I've seen that before, but I didn't know that that was a thing.

08:58 Did you know that .editorconfig was a thing?

09:01 No, what does that work with? I know about the .idea subfolder for PyCharm and the .vscode one for VS Code, but I don't know anything about this.

09:09 The idea is like this editorconfig.org, which I popped it open.

09:14 It's a config file that configures, it's sort of a global configuration for different editors.

09:20 And some of them support it natively and some you have to get out of a plugin or something.

09:28 So for instance, all of the JetBrains stuff supports it. IntelliJ and all that PyCharm supports it.

09:37 Vim supports it. Visual Studio, Visual Studio Code, you have to have a plugin to do that, but it is available, the plugin.

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

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

09:58 It'd be nice to have one config, maybe. At least I'll try it.

10:02 The other thing I like is a small makefile. I've kind of gone back and forth on this also.

10:07 But if you're comfortable with makefiles or the people working on your project are, you may as well use them.

10:13 If you're the only one comfortable, then maybe don't. But a kind of a nice minimal set of things to put in your makefile.

10:23 Just stuff that you have to do with around your project, like tools.

10:27 Maketools would do install the dev requirements. So it would, you know, I would probably make that makedev instead of maketools.

10:36 But you know, whatever. How to do the distribution, he's using Twine.

10:40 So testing on PyPI and then makepypi. Again, I probably would write that as makedistribute or something.

10:50 But you know, kind of nice to have an example.

10:52 So anyway, the other thing I wanted to say was he did shout out to the PyPA packaging Python projects tutorial.

11:03 And I also agree that if you want to get into the nitty gritty, so his example is great for a minimal set.

11:08 But if you really want to understand everything, this is a great reference is the python.org packaging Python projects page.

11:17 Excellent. Yeah, I read that or I saw that article and skimmed through it, I guess, the right way to put it from Ned.

11:23 And it looks really interesting. I'm glad you covered it.

11:25 Cool.

11:26 I agree that a minimalist, you know, I used to be like, all right, give me my cookie cutter thing.

11:29 And there's always be, oh, it's going to generate this and this and this.

11:32 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 product.

11:41 Like they just always seem to be over specified a lot of those template building things, you know?

11:46 Yeah.

11:46 Also, one of the great comment in his thing was that there's a lot of people that just have some Python code that they need to distribute.

11:55 Like they're not it isn't a whole bunch of stuff and it's not complicated.

11:59 So please don't.

12:00 Yeah.

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

12:05 Just show me how to do it.

12:06 So here's a decent example.

12:09 So excellent.

12:10 All right.

12:10 A bit of a real time follow up.

12:12 Henry out there says, I love this quick search.

12:15 There are 8000 projects on PyPI that use PyProject.toml.

12:20 While 80 of them use rough toml based on sdist.

12:23 Interesting.

12:25 I think you would maybe a way to think about that is like, you've got to ship your PyProject.toml.

12:31 Like it's your new setup.py.

12:33 It's part of, you know, it has to be there, right?

12:36 To get the thing to install.

12:37 Whereas rough.toml you don't.

12:39 So like, for example, I just shipped a new version of umami Python for some updates there this morning.

12:45 And if you look at the source, I've got like the gitignore and the rough toml.

12:49 But the thing that actually gets shipped is like a different subset of that thing that doesn't include.

12:56 So I'm not sure the absence of it necessarily means anything.

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

13:03 Also, the rough defaults are not bad.

13:06 So I think a lot of projects that use rough don't have any settings and just run it vanilla.

13:12 Yeah, let's see, which ones do I feel like are super important?

13:15 There's very few.

13:16 So I think the line length is way too short at 79.

13:20 I mean, I have a 32 inch monitor.

13:22 I don't want to work in like a third of it on the left.

13:25 You know what I mean?

13:27 And then I'm a fan of single quotes, not double quotes, and so on.

13:32 And then, yeah, so that's pretty much the stuff that matters to me.

13:36 But you know what else is really nice, Brian?

13:38 Our sponsor.

13:39 Yes.

13:40 So we want to thank Scout APM.

13:42 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:50 Then you owe it to yourself to check out our sponsor this week, Scout APM.

13:54 Scout APM is a leading Python application performance monitoring tool that helps you identify and solve performance abnormalities faster and easier.

14:04 Scout APM ties bottlenecks such as memory leaks, slow database queries, background jobs, the dreaded n plus one queries problem common with ORMs and more directly to your source code.

14:15 So you can spend less time debugging and more time building.

14:18 You'll love Scout because it's built for developers by developers.

14:23 Scout makes it easy to get set up and deliver insights in less than four minutes.

14:28 Seriously, you could pause this episode, set up Scout and be back at it without missing a beat.

14:34 And the best part, Scout's pricing is affordable and straightforward.

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

14:43 Start your free trial and get instant insights today.

14:46 Visit pythonbytes.fm/scout and please use our link because it does truly support the show.

14:52 Let's move on to the next item here.

14:55 And this one comes from Mastodon and you are called Ninsky pointed out that, you know, something that's really awesome about rough.

15:05 We were just talking about rough, right?

15:07 Yeah.

15:07 One of the things that's awesome about it is that they have put together a wiki like thing that tells you why.

15:15 So somebody was complaining about, look, I, if I could just get Pylant or Flake 8 to tell me, like not just this is the rule, but why do you care about this rule?

15:25 Why should you follow it?

15:26 Or if you don't care about whatever it says, then you can ignore it or if you wish.

15:29 So at docs.astral.sh, the company behind rough and with Charlie Martian team slash rough slash rules has a really cool site here.

15:40 So you come down and it says here's 700 lit roles.

15:45 And if you scroll down, it'll have like all the things like, okay, F 403 undefined local import with star or unused import.

15:55 Right.

15:55 So let's just grab the first one and click on it.

15:57 It says, this is derived from the flakes, the pie flakes linter.

16:02 Sometimes you can fix it, but most importantly, why is it bad?

16:05 And give me an example of it.

16:06 How cool is that?

16:07 Yeah, that is really cool.

16:09 Yeah.

16:09 So for example, this one, it says unused imports at a performance overhead at runtime and risk creating import cycles.

16:16 Like this thing imports that, but that thing imports of this boy, do I wish Python would get around that problem?

16:22 I think it could, but anyway, like with that too, with a two-step compile, possibly like there's all sorts of languages that, that do that.

16:29 Right.

16:30 Yeah.

16:30 Like you don't worry about that and see, for example anyway, they, 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, this is not used, but still the performance thing and cycles is certainly there.

16:47 So it says, here's an example, important numPy as NP define area, you know, pi times radius squared instead don't do that, but it has this, here's the problem.

16:59 Here's what, and, and the right way, which is cool.

17:01 So let me just, I'll just, I have no picked ones out of there.

17:04 let's see if tuple, what is this?

17:08 So checks for if statements that use non-empty tuples as test conditions.

17:13 Oh, anything about this?

17:14 Why is this bad?

17:15 Non-empty tuples are always true.

17:17 I see.

17:18 So you maybe want to think you want to put parentheses around your if, cause you're coming from another language, where did the C false, but you have a comma in there.

17:26 It's always true, even though false is in the right, cause it's testing the truthiness of the container, not values of the container.

17:33 This catches people often.

17:35 I see it when somebody has an expression like they're, they're, it's like, you know, they're combining two strings or something and they're checking the result.

17:43 so yeah.

17:44 Then maybe just some PEP 8 ones.

17:46 Like here's another one.

17:47 Pep eight.

17:47 Don't, don't use, things that are variables, functions, et cetera, as capitals, right?

17:54 Other languages have this, they have mixed case or whatever.

17:57 I, this is okay for classes, but nothing really, not much else in Python gets named that way.

18:02 So they have an example, like don't use capital B equals a plus three and so on.

18:06 Anyway, I think this is really a nice resource.

18:09 Like look at the scroll bar, Brian, like how much is here?

18:11 This is a ton of work and they all have these really nice examples.

18:14 It's fantastic.

18:15 I think it'd be cool just to like read through some of this, especially if you're, if you're probably not new to Python, 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 to figure out, why different styles are the way they are.

18:35 so yeah.

18:37 Yeah.

18:37 Yeah.

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

18:41 Cool.

18:43 Well, I have a whole bunch of stuff I was going to, I'm doing an extra, extra, extra, extra thing for, for, for my next topic ish topics.

18:53 plural.

18:54 So, I, came across an app.

18:57 I think I heard it from several people called flat.app.

19:00 So flat is, and I've just started playing with this.

19:04 it's kind of like Trello and other sort of task tracking where you can have, have things in to-do lists and in progress and done.

19:12 but the work and then different workspaces for different things, you can have different projects going on.

19:16 It just kind of like the layout of it.

19:18 And, I'm having fun playing with it 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.

19:29 anyway, flat looks, looks fun.

19:31 I've started playing with that.

19:32 next up is, terms of service.

19:36 Didn't read, this has been around for a while.

19:38 It's at T O S D R dot org.

19:41 like kind of too long.

19:43 Didn't read.

19:44 the tagline is I have read and agree.

19:46 These term with these terms, is the biggest lie on the web.

19:50 And we aim to fix that.

19:51 And I kind of love this.

19:53 it's a, it's, you can search for a different service and it tells you, it gives you a grade for each one.

20:00 And then, and then also kind of some highlights as to why it's graded that way.

20:05 Wikipedia has a grade of B.

20:08 there's apparently there's stuff that they don't like.

20:10 And what I like about this is not just the grade, but why they give the grade because some stuff I don't really care about, like, you know, the, the data might go away.

20:20 okay.

20:21 Yeah.

20:21 Maybe, in Wikipedia, but, I kind of get that already.

20:25 I understand.

20:25 So, so this is neat.

20:28 The, what I did was surprised by, I wanted to point this out is that it is a, it's kind of like Wikipedia in that it's it, the classification system and everything is done by it's peer review process, but it's not, it's not like one company doing all of this.

20:43 It's, it's, you can sign up and you can, you can start rating different services if you want, and then it'll be reviewed.

20:50 So it's kind of a crowd, crowd acted thing.

20:53 So there's that last week I taught.

20:56 It's really cool.

20:56 I like that one.

20:57 Yeah.

20:57 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.

21:04 So it's, like the wired article is from 2018.

21:07 So anyway, but I like the idea.

21:11 So if people want to help out, that'd be great.

21:13 last week I talked about blogging and, and this week I ran across an article called why I write and I loved the topics here.

21:22 So I wanted to highlight them.

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

21:30 So one of the things I write to remember, that's actually why I started blogging.

21:34 I started blogging just to write, keep track of stuff that I kept forgetting.

21:38 so I think that's a great idea.

21:39 second is, to refine my thinking to once you, if you write it down to, it'll help you understand a project more, I write to impact.

21:50 of course I write to get through hard times.

21:53 I think that's a, that's a good one.

21:55 Even with technical stuff.

21:56 I mean, there's personal, personal, writing as well, but also, I've had some times in my career where, I've been frustrated with my job and, blogging helps me focus on something that I can actually have an impact on.

22:10 And it did help me, focus on something that I enjoy more than my job at the time.

22:15 So I think that's good.

22:16 and then, writing to connect.

22:18 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 that those are good.

22:25 I, I write for, for many of these reasons, but I also write because when I yell at podcasts, no one responds to me or listens.

22:34 So maybe I can write down those thoughts somewhere else and someone will hear them.

22:37 You know what I mean?

22:38 yeah, before I move on, Sheena, what was it?

22:43 Sheena O'Connell.

22:44 she's got a lot of great articles.

22:46 There's a unexpected glass ceilings for junior developers.

22:49 That's an interesting read.

22:50 applying mastery based learning in tech education, a problem with code schools.

22:56 so these are, these are interesting, not, not just Python stuff, but interesting tech articles.

23:02 So yeah, cool blog.

23:03 the last thing I wanted to point out was, actually I think I'm done.

23:08 That was, that was done with my extras.

23:10 Oh no, one more.

23:11 Jeff brains, has a PyCharm blog and there is three pie test features you will love by Helen Scott.

23:20 So, just a quick article, talking about fixtures, marks, markers, and parameterize.

23:26 And I wanted to do a shout out to this one because, at the bottom, it was great, great, short discussion, but, they also plug my course and book at the bottom.

23:35 So thank you, Helen and pie term.

23:37 It's great.

23:38 So that's really cool.

23:39 Nice.

23:40 All right.

23:41 Well, well, you got more extras.

23:44 Do you want to just keep going?

23:45 I could just keep going.

23:46 I got a couple more.

23:48 Okay.

23:49 that was good.

23:50 Yeah.

23:50 We're just going to go right into the extras anyway.

23:52 so, I just had what links to my course and, sorry, we couldn't find that page.

23:58 Oh no.

23:58 anyway, of course the, I ran across this, this fun thing.

24:03 It was just Wikipedia's list of common misconceptions.

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

24:13 I don't know if you've read it, came across this before, but, Oh, this is not okay.

24:17 I loved it.

24:18 So I'm going to pull out a couple, Twinkies.

24:21 we always talk about them lasting forever.

24:23 Apparently they use it.

24:24 They have a shelf life of 45 days, not millennia.

24:27 Like I thought, Oh no, only McDonald's hamburgers.

24:31 I don't know.

24:32 I see some pictures of those things looking good after way too long.

24:35 something interesting I found out about microwave ovens.

24:39 I, that I didn't understand, let's see microwave ovens.

24:44 They don't cause cancer.

24:45 I knew that.

24:46 But, I thought they, they do not cook from the inside out.

24:51 I thought they did the inside out thing.

24:52 I thought that also.

24:53 but it, the, 2.45 gigahertz micro microwaves can only penetrate approximately one centimeter, about three eighths of an inch into most foods.

25:04 So the inside portions of thicker foods are mainly heated by, conduction from the outer portions.

25:10 Did not know that.

25:11 So, interesting learned something new every day.

25:15 So, my last extra is just on a wishlist.

25:18 I, I came across a company in Portland that makes microphones, ear trumpet labs, and I really want this microphone.

25:26 Look at this.

25:26 It's, oh, that's fantastic.

25:28 It's like a steampunk.

25:29 Yeah.

25:30 It's so cool.

25:31 It's called the Aduina.

25:33 They've got a bunch of, bunch of different models, but, but this is a, this is a great looking, like, I'd love to be able to try this out.

25:40 So 600 bucks, maybe.

25:41 I think is amazing.

25:42 Yeah.

25:43 It gets into the price of this microphone, Brian, which is kind of ridiculous.

25:46 So anyway, but it's, it's not, it's not dynamic.

25:52 It's that other one.

25:53 Oh, condenser.

25:55 They've blown it.

25:57 Oh man.

25:57 So I'm not sure I'd have to try it out to see if I can get the, my room quiet enough to use this, but yeah, for people don't know the dynamic ones really capture just like an area and they exclude all the background sound like a whole bunch.

26:11 Yeah.

26:12 There's a lawnmower outside that you can't hear because of the, my dynamic mic.

26:16 So is it right now?

26:17 Yeah.

26:17 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 going around and people couldn't, it didn't come through in the mic.

26:26 Those are dynamic mics.

26:27 Condenser mics are maybe better for like a studio.

26:30 If you're people say they sound the best, well, they sound the best in like a truly quiet place, but they pick up echo more, they pick up background cars, et cetera.

26:38 So yeah, you gotta be careful.

26:39 Brian's getting out of here.

26:40 Yeah.

26:40 Yeah.

26:41 Anyway, how about you?

26:42 Do you have any extras?

26:43 I sure do.

26:44 I sure do.

26:45 Okay.

26:45 While ago, I wrote the unsolicited advice from Mozilla and Firefox saying that they are going off the rails and they really should fix it.

26:54 This has nothing to do 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 monitor.

27:04 They had Mozilla monitor and like a really super shallow, not much of a service type of way, kind of like, have I been pwned?

27:11 Like, it'll tell you if there's a breach.

27:12 Okay.

27:13 There's like services that are already I'm signed up for, but thanks.

27:16 But what they did is they've announced 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.

27:25 Like, see this, it says, we found, we found, 50 places where your email or your physical address or your phone number or your family member was being sold by these crappy scumbag data brokers.

27:39 They truly are scummy people and we'll fix it.

27:42 Here's another example, re manually fix.

27:44 It's like change your password because, and then 80, 35 automatically removed because we found them.

27:50 Well, I, I filled this out.

27:51 It'll do a free scan.

27:52 If you put your email address in here, I have a thousand and 80, a thousand and 80.

27:57 And they have like my kids' names, my kids' phone numbers.

28:02 This is, I'm telling you they're scumbags and they sell this.

28:05 Right.

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

28:11 You can do one time, like here's the old thing.

28:13 It's the free breach alerts.

28:15 Like, could have, I've been pwned.

28:16 It's better.

28:16 It's more comprehensive.

28:17 Troy hunt is awesome.

28:19 I've had him on talk Python quite a while ago, but the monitor plus is what I'm talking about.

28:24 The only drawback is look how much that is.

28:26 That's $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.

28:35 I mean, maybe if it really, really bothers you.

28:41 So I guess, what my plan is to do, like, since there are so many and it really is creepy, it's like, I'm going to do it for one month.

28:48 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.

28:53 And then I'm going to cancel it again.

28:54 Cause there's no way I'm paying $14 a month.

28:56 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, you're right.

29:08 I'm like, I'm going to do it all in the month in one month.

29:11 But if it was like four bucks a month, I'd probably just leave it on.

29:15 And then they're making like 50 bucks from me instead of 14.

29:18 Exactly.

29:19 That's, that's my assessment as well.

29:20 I think it's tremendously too high.

29:22 I think everyone has subscription fatigue and another 15 bucks is just 14, 50, whatever it was, is like, especially since it mostly happens in one, one go, like you mostly get it cleaned up and then it's just kind of maintaining over time, you know?

29:37 So I don't know, but still nonetheless, for doing something positive and making progress on, on finding multiple ways to support them.

29:46 People can check out that article at mkdn.co if they want, like what I think they really should be doing.

29:51 Yeah.

29:52 There's that.

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

29:57 Yeah.

29:57 If you can, you could also, could consider this just a $14 a month donation to Mozilla.

30:02 Right.

30:03 If that's how that's your vibe, then go for it.

30:06 But there's a lot of things out there that deserve some of my money.

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

30:13 Yeah.

30:14 You don't even get an NPR mug for that.

30:16 So exactly.

30:17 Like I should at least get a free browser.

30:18 Oh wait.

30:19 Okay.

30:20 A couple of other things here.

30:21 Not the joke yet.

30:23 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 and open SSL and the freeze tool didn't work with this, et cetera, et cetera.

30:41 So some bug fixes.

30:43 I didn't see any security issues, but you can see there's, there's a, oh, okay.

30:48 There is one minor security issue.

30:49 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.

30:53 So by the way, the security issue is that if there's a dot PTH file, starting with a dot or a hidden file attribute that could be, you know, snuck into something.

31:05 So people don't know it.

31:06 And then they get imported and run code or something to these effects.

31:10 I don't, I don't know exactly the details, but that doesn't sound like a tremendous, you know, it's not like, well, if somebody sends 772 ampersand three, you're hacked.

31:19 Or there's nothing like that, but it is, there's a minor security up to, but there's a lot of stuff, right?

31:23 Yeah.

31:23 Yeah.

31:24 So very cool.

31:25 And because of all the neat Docker stuff, one command, wait a couple of minutes and all the apps are now running Python 312.2, including Python bytes out of M hurray.

31:34 Yeah.

31:35 The other thing to, to note about 312 too, is that it's a couple of releases, a couple of bug fix releases in.

31:42 So if you were holding out, switching to 312, this might be a good time.

31:46 Yeah.

31:46 That's, I didn't really think of that at all, but that's a good point.

31:48 This is the third release of Python 312, right?

31:52 So if you've been, Oh, we're not ready to be so cutting edge.

31:55 Well, maybe, maybe now you are.

31:57 Yeah.

31:58 So, okay, cool.

31:59 Next up, I want to reach out to anyone crazy enough to get a vision pro who also likes taking courses that talk Python, the talk Python mobile app and its iPad forum is now available to put into your virtual land.

32:14 You could sit by Mount hood, relaxing, and then put, you know, Brian's PI test course on the wall next to you and look at the stars and then look over at Brian or whatever course you want.

32:24 But I would, I would love for somebody to just try it out because there's no way I'm buying a vision pro.

32:29 No way.

32:31 But if people want to try it, that'd be cool.

32:33 It's not like I built this app and didn't test it in that basically iPad apps.

32:38 If you opt into it, you're allowed to run the iPad apps in the vision pro.

32:41 So I just took our iPad app that we know works well.

32:44 Let people run it over there.

32:45 Yeah.

32:45 I would totally try it for you if you want to buy me a vision pro.

32:49 Sure.

32:49 I'll go to an Apple store later.

32:50 And you know, actually I'm going to stop by the sporting goods store and just get one of those snorkel snorkeling goggles, snorkeling mask.

32:58 So I would be about the same.

33:00 I want to use them for chopping onions and see if I can get an app that'll do googly eyes on my onions while I'm chopping them.

33:07 That's amazing.

33:08 I once came home and found my daughter wearing her swim goggles, you know, the small ones and they're chopping onions going, I'm winning the day.

33:17 I'm winning the day.

33:18 It's just like, I'm not, my eyes don't hurt at all.

33:20 I was like, bravo.

33:21 That's great.

33:21 That's a good idea.

33:22 We buy special made onion goggles, but basically swimming goggles.

33:27 Yeah.

33:28 Well, you could get the vision pro.

33:30 I bet it'll keep most of the air out and you could just be like, you know, a field of onions cutting the onions or who knows where you want to be.

33:36 Yeah.

33:37 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, with the monitor leg, but anyway.

33:47 Excellent.

33:48 Yeah.

33:48 Henry expected that the vision pro would be mentioned.

33:51 And then David out in the audience suggested I just get one for everyone in the chat, like surprise.

33:55 Thank you for being part of the live show.

33:57 You get a vision pro and you get a vision pro.

34:00 Everyone look under your seat.

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

34:04 Yes, of course.

34:05 She's here to please.

34:07 I know I have something that I actually that's legitimately, next.

34:11 So yesterday I had, Martina, Pugliese on the show and she does this really cool project called data doodling.

34:21 She's a data scientist at a AI company, but also just draws out really cool pictures of things she's trying to visualize instead of going to use Python or other tools to do.

34:32 And just let me think about that before, you actually, get in there and use the tools, just kind of kick back and explore data with pictures.

34:40 So anyway, I encourage people to go check that video out.

34:43 It's 29 minutes long.

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

34:50 So it's pretty great.

34:51 Yeah.

34:52 Yeah.

34:52 It's really cool, isn't it?

34:53 Yeah.

34:54 Yeah.

34:54 Yeah.

34:55 She's doing awesome stuff.

34:56 She says she has 50 different ones of those and they all have a article and analysis on the data.

35:01 It's pretty, pretty in depth.

35:03 All right.

35:04 How about time for a joke?

35:06 Yeah.

35:06 Close it out with a joke.

35:08 This one, this one, connects a lot here, Brian.

35:11 Let's see.

35:11 So here's a, presumably a developer stick figure walking along, looking at a fly trap and says, why would a fly land on something like this?

35:21 Stupid fly.

35:22 Looking at a mouse or rat trap rats should be a shame for falling into this trap.

35:27 Big bear trap or one of those like trapper claw things.

35:30 Bears.

35:30 This is ridiculous.

35:31 Don't step in this.

35:33 Brian, there's a sign that says AWS free tier.

35:37 Ooh, that looks nice.

35:39 Yeah, that's funny.

35:43 It's a good one, right?

35:45 Yeah.

35:46 Yeah.

35:46 So yeah.

35:47 Plus with the smile.

35:48 That's what I got for you.

35:49 All right.

35:49 Yeah.

35:49 Well, thanks again for a lovely episode and thanks everybody for, coming into the show and, coming on the show live and sharing it with us.

36:00 It's been fun and we'll talk next week.

36:02 Bye.

Back to show page