Transcript #371: Python in a Crate
Return to episode page view on github00: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.