Python Bytes - #371 Python in a Crate
Episode Date: February 13, 2024Topics covered in this episode: AppleCrate One way to package Python code right now Flask8 but why? Extra, Extra, Extra Extras Joke See the full show notes for this episode on the website at pyt...honbytes.fm/371
Transcript
Discussion (0)
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 Ocken.
I am Michael Kennedy.
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 Fostodon.
We're at mkennedy, Brian Ocken and at Python Bytes.
And you can always join us live on YouTube at pythonbytes.fm slash 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.
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?
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 from Rhett Turnbull,
Turnbull, excuse me.
And Rhett has done a ton of interesting things
with Python and Mac applications.
I had him on talk Python.
Remember we talked about text sniper at one point here on the show, and then he
created text and nadir, 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, you know?
So like 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 in the screen, and boom,
you've got the text, 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.
And he played with it.
He said it does, in fact, look really cool. In fact, he said, holy cow, that looks awesome. I want to try some variations on this. And he played with it. He said, it does, in fact, look really cool.
In fact, he said, holy cow, that's amazing.
Okay.
But one of the things that it doesn't do is actually build an installer.
So depending on your operating system, primarily this happens more on Mac and Windows, less on Linux, right?
That's more of like, like a package manager
sort of type of thing to get apps over there. But on a Mac and Windows, it's real common to
have something that runs installer, put something in certain locations, maybe changes your path.
So it's accessible, right? All those kinds of things. So to your point, we have the Apple Crate. And Apple Crate, it says package your command line tools into a native macOS installer.
And I'll just go ahead and find a screenshot real quick.
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?
This is awesome for people who are when you would say, okay, all you got to do is make sure you have Python, Python three 10 or greater on your machine, have that in the path.
And then, then what you're going to do is you're going to create a virtual environment. You're
going to pip install pip X 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? And so that's what this does,
right? So what you can do is you just say, Apple create 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. 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
seller build. So isn't that cool? Yeah, yeah actually that's pretty neat yeah so it says
it's nothing you couldn't do yourself but there's a bunch of steps and different tools that are
involved it also uses jinja too so a templating thing i 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, 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 webpage from FastAPI or
whatever it is you're talking about, right? 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 at TalkPython, people will 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.
Here's a picture.
Sorry, you forgot your password.
Here's what you do.
You know, because I'm not doing that personally.
Like the web app handles that.
But there's parts where you want to put like chunks of data so here
is 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 regard it's not a web view or a web request or anything
like that right yeah so you can do the same thing here.
You can use Jinja to templates to generate files that are required.
So it allows you to pass in variables like what is the name of the app?
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 a 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 appcreate.toml
if you don't want to mix those together.
I have mixed feelings about mushing everything
into PyProject.toml.
You can have rough in there, but I have my own rough.toml
instead of tool.rough inside of the PyProject Toml.
I don't know.
Could go either way with that one.
But anyway, this is it.
It shows you the different template variables you can use
and to generate your output.
People, if this is something you're trying to do, check it out.
It looks really cool and keep up the momentum. Well done.
That is pretty cool. On the Tomo front,
I agree that I used to be on the bandwagon of like,
let's put everything in PyProject and Toml.
And then Ruff came along and I have like a huge Ruff 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.
Yeah, exactly.
And also you can just glance over and see the project.
Oh yeah, this is using Ruff.
Got it.
Because it is a Ruff.Toml. Yeah. Yeah, there's And also you can just glance over and see the project. Oh, yeah, this is using rough. Got it. Because it is a rough.toml.
Yeah.
Yeah, there's that too.
Okay.
Speaking of packaging, it's packaging.
Let's talk about some more packaging.
It's the packaging episode.
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 this discussion.
And the discussion really is maybe you don't need something to generate like your package directory, maybe just like an example.
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 copy it or something and then modify your own stuff.
One caveat, me personally, the read me is in restructured text.
I would totally go with Markdown instead of restructured text.
Oh, 100%.
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.
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.
And how to deal with the version number,
doing optional features.
And then talks about what's in the repo.
And what he's included is the source directory,
source packaging.
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 seems like just one extra directory, but it's consistent and it's fine.
I did learn a little bit.
So one of the things there's an example, PyProject.toml with with some comments.
It's very heavily commented, which is great talking about, you know, different pieces.
And it's not, it's a kind of a minimal set.
It's not a whole bunch of stuff here, which is good.
The dev requirements there,
you can have a dev optional install on pipe project.
But dev requirements is also something that's very common.
Requirements.txt file.
The readme um i
actually there's a license and a get ignore um having an example get ignores is good uh 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 did you know what that dot editor config was a thing no what does that work
with i know about the dot idea subfolder for PyCharm
and the.vscode one for VS Code,
but I don't know anything about this.
The idea is like this editor at config.org,
which I popped it open.
It's a config file that configures,
it's sort of a global configuration for different editors.
And some of them support it natively
and some you have to get out of um yeah a plugin
or something so for instance all of the um uh like all of the jetbrain stuff supports it uh
intellij and all that pycharm supports it um uh visuals vim supports it in visual studio uh visual
studio code you have to have a plugin to do that,
but it is available, the plugin.
So, cool.
That is news to me,
and I'll definitely be checking that out, yeah.
Yeah, I'm like, oh, cool.
I'll maybe try that.
Because sometimes I do pop around with different editors.
It'd be nice to have one config, maybe.
Maybe at least I'll try it.
The other thing I like is a small make file i've kind of
gone back and forth on this also but if it's if you're comfortable with make files or the people
working on your project are you may as well use them if uh if you're the only one uh comfortable
then maybe don't but um uh a kind of a nice minimal set of things to put in your make file
just stuff that you have to do with around your project,
like tools,
make tools would do install the dev requirements.
So it would,
you know,
I would probably make that make dev instead of make tools,
but you know,
whatever how to do the distribution he's using twine.
And so testing on pipe,
yeah.
And,
and then make pipe.
Yeah.
Again,
I probably would write that as like make distribute or something,
but you know,
kind of nice to have an example.
So,
so anyway,
the,
the other thing I wanted to say was he did shout out to the pipe,
PA,
PA packaging,
Python projects tutorial.
And I also agree that if you want to get into the nitty gritty,
so his example is great for a minimal set,
but if you really want to understand everything,
this is a great reference is the,
the a python.org packaging Python projects page.
Excellent.
Yeah.
I read that or I saw that article and skim through it,
I guess the right way to put it from Ned.
And it looks really interesting.
I'm glad you covered it. Cool. I agree that a minimalist, you know, I used to be like, all right, the right way to put it from Ned and Neil. It looks really interesting. I'm glad you covered it.
Cool.
I agree that a minimalist, you know,
I used to be like, all right,
give me my cookie cutter thing.
And there's always be,
oh, it's going to generate this and this and this,
but I don't want to use, you know, name your aspect.
I don't want to use Redis in this thing,
or I don't want to use React build steps
in this particular product.
Like they just always seem to be over-specified,
a lot of those template building things, you know?
Yeah.
Also, a great comment in his thing was
that there's a lot of people
that just have some Python code
that they need to distribute.
Like they're not,
it isn't a whole bunch of stuff
and it's not complicated.
So please don't, yeah,
please don't tell me like all the details.
I don't want to care about the history
and all the
different tools just show me how to do it um so here's a decent example so excellent all right a
bit of a real-time follow-up henry out there says i love this quick search there are 8 000 projects
on pi pi that use pi project.toml while 80 of them use rough toml based on s dist interesting i think you would maybe maybe a way
to think about that is like you've got to ship your py project.toml like it's your new setup.py
it's it's part of you know what it has to be there right to get the thing to install whereas rough
dot toml you don't so like for example i just shipped a new version of umami python for some
updates there this morning.
And if you look at the source, I've got like the git ignore and the rough toml. But the thing that actually gets shipped is like a different subset of that thing that doesn't include it.
So I'm not sure the absence of it necessarily means anything.
But yeah, it would be interesting to know like what that ratio is.
Also, the rough defaults are not bad.
So I think a lot of projects that use rough don't have any settings and just run it vanilla.
You know, let's see, which ones do I feel like are super important?
There's very few.
So I think the line length is way too short at 79.
I mean, I have a 32 inch monitor.
I don't want to work in like a third of it on the left.
You know what I mean?
Yeah.
And then I'm a fan of single quotes, not double quotes, and so on.
And then, yeah, so that's pretty much the stuff that matters to me.
But you know what else is really nice, Brian?
Our sponsor.
Yes.
So we want to thank Scout APM.
This episode is brought to you by Scout APM.
Are you tired of spending hours trying to find the root cause of issues impacting performance?
Then you owe it to yourself to check out our sponsor this week, Scout APM.
Scout APM is a leading Python application performance monitoring tool that helps you
identify and solve performance abnormalities faster and easier.
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 so you can spend less time debugging
and more time building. You'll love Scout because it's built for developers by developers.
Scout makes it easy to get set up
and deliver insights in less than four minutes.
Seriously, you could pause this episode,
set up Scout,
and be back at it without missing a beat.
And the best part?
Scout's pricing is affordable and straightforward.
Only pay for the data you use,
no hidden overage fees or per seat pricing.
Start your free trial and get instant insights today.
Visit pythonbytes.fm slash scout and please use our link because it does truly support the show.
Let's move on to the next item here. And this one comes from Mastodon and your
Kalininski pointed out that, you know something that's really awesome about Ruff,
we were just talking about Ruff, right?
Yeah.
One of the thing that's awesome about it is that
they have put together a Wiki-like thing that tells you why.
Somebody was complaining about,
look, if I could just get Pylant or Flake8 to tell me,
like not just this is the rule,
but why do you care about this rule?
Why should you follow it?
Or if you don't care about whatever it says,
then you can ignore it if you wish.
So at docs.astral.sh, the company behind Ruff
with Charlie Martian team, slash Ruff slash rules,
has a really cool site here.
So you come down, it says here's 700 Lent rules.
And if you scroll down, it'll have like old things like, okay, F403, undefined local import with star or unused import. All right. So
let's just grab the first one and click on it. It says, this is derived from the flakes, the
PyFlakes linter. Sometimes you can fix it, but most importantly, why is it bad?
And give me an example of it.
How cool is that?
Yeah, that is really cool.
Yeah.
So for example,
this one says unused imports
at a performance overhead at runtime
and risk creating import cycles.
Like this thing imports that,
but that thing imports this.
Boy, do I wish Python
would get around that problem.
I think it could, but anyway,
like with a two-step compile, possibly,
there's all sorts of languages that do that, right?
Yeah.
You don't worry about that in C, for example.
Anyway, they also increase unused imports,
also increase the cognitive load of reading the code.
I mean, editors help if they grade out and say,
this is not used.
But still, the performance thing in Cycles is certainly there. So it says, here's an example,
import numpy as in P, define area, you know, pi times radius squared. Instead, don't do that.
But it has this, here's the problem. Here's what, and, and the right way, which is cool. So let me
just, I'll just, I have no picked ones out of there.
Let's see.
If tuple, what is this?
So checks for if statements that use non-empty tuples as test conditions.
Oh.
Anything about this?
Why is this bad?
Non-empty tuples are always true.
I see.
So you maybe want to think
you want to put parentheses around your if
because you're coming from another language.
Parenthesis, false, but you have a comma in there it's always true even though false is in there
right because it's testing the truthiness of the container not values of the container this
catches people often i see it when somebody has an expression like they're they're it's a like
you know they're combining two strings or something and they're checking the result
um so yeah then maybe just some PEP eight ones.
Like here's another one, PEP eight.
Don't, don't use things that are variables, functions, et cetera, as capitals, right?
Other languages have this, they have mixed case or whatever, right?
This is okay for classes, but nothing really, not much else in Python gets named that way.
So they have an example, like don't use capital B equals A plus three.
And so anyway, I think this is really a nice resource.
Like look at the scroll bar, Brian.
Look how much is here.
This is a ton of work
and they all have these really nice examples.
It's fantastic.
I think it'd be cool just to like read through some of this,
especially 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, 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.
So, yeah.
Yeah.
Yeah.
So even if you don't use Ruff, this is a nice resource.
Cool.
Well, I have a whole bunch of stuff i was gonna i'm doing an extra extra extra
extra thing uh for love it for for my next topic ish topics um plural so um i came across an app
i think i heard it from several people called flat.app so flat is um um and i've just started
playing with this um it's kind of like Trello
and other sort of task tracking where you can have, um, have things in to-do lists and in progress
and done. Um, but the work and then different workspaces for different things, you can have
different projects going on. It just kind of liked the layout of it. And, um, I'm having fun playing
with it. And, uh, right now it's free, but it's going to end up being a paid app,
but not very expensive. I think it's like for individuals, like five bucks a month or something.
Anyway, flat looks fun. I've started playing with that. Next up is terms of service didn't read.
This has been around for a while. It's at TOSDR.org. Like kind of too long. Didn't read. The tagline is I have read and agree.
These terms with these terms is the biggest lie on the web.
And we aim to fix that.
And I kind of love this.
It's a,
it's you can search for a different service and it tells you,
it gives you a grade for each one.
And then,
and then also kind of some highlights as to why it's graded that way.
Wikipedia has a grade of B.
Apparently there's stuff that they don't like.
And what I like about this is not just the grade, but why they gave the grade.
Because some stuff I don't really care about.
Like, you know, the data might go away.
Okay.
Yeah, maybe in Wikipedia.
But I kind of get that already. I understand. So, um, so this is neat. What I was surprised by, I wanted to point this out is that it is a, it's kind of like Wikipedia in that it's 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. It's, you can sign up and you can,
you can start rating different services if you want and then it'll be reviewed.
So it's kind of a crowd crowd acted thing. So there's that.
Last week I taught is really cool. I like that one. Yeah.
And then there's even articles on like wired and stuff like there was an
article on wired about it, but it's been around for a while. while so it's uh like the wired article is from 2018 so right anyway um uh but i like the
idea so if people want to help out that'd be great uh last week i talked about blogging and uh and
this week i ran across an article called why i write and i loved the topics here. So I wanted to highlight them. This is, um, from, uh, Sheena
O'Connell and, um, uh, especially technical writing. So one of the things I write to remember,
that's actually why I started blogging. I started blogging just to write, keep track of stuff that I
kept forgetting. Uh, so I think that's a great idea. Uh, second is, uh, to refine my thinking
to once you, if you write it down to help you understand a project more.
I write to impact. Of course, I write to get through hard times.
I think that's a that's a good one, even with technical stuff.
I mean, there's personal personal writing as well.
But also, I've had some times in my career where, uh, I've been frustrated with my job and,
uh, blogging helps me focus on something that I can actually have an impact on.
And it did help me, um, uh, focus on something that I enjoy more than at my job at the time.
So I think that's good.
Uh, and then, uh, writing to connect.
I think those are all connecting with people's all, they're all great.
So, um, I'm almost done with all my extras.
Not that those are good.
I write for many of these reasons, but I also write because when I yell at podcasts, no one responds to me or listens.
So maybe I can write down those thoughts somewhere else and someone will hear them.
You know what I mean?
Yeah.
Before I move on, Sheena O'Connell, she's got a lot of great articles there's a
unexpected glass ceilings for junior developers that's an interesting read um applying mastery
based learning in tech education a problem with code schools um so these are these are interesting
um not not just python stuff but interesting tech articles so yeah cool blog uh the last thing i wanted to point out
was um uh actually i think i'm done that was that was done with my extras oh no one more um
chet brains uh has a python blog and there is three pi test features you will love by helen
scott so um just a quick article uh talking about fixtures, marks, markers, and parameterize.
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.
So thank you,
Helen and Piper.
It's great.
So that's really cool.
Nice.
All right.
Well,
well,
you got more extras.
Do you want to just keep going i could just keep
going i got a couple more keep going okay um that was good yeah we're just gonna go right into the
extras anyway um so uh i just had what links to my course and um sorry we couldn't find that page
oh no um anyway of course the uh i ran across this this fun thing it was just wikipedia's list of common misconceptions
um and i i don't know somebody posted it on mastodon or something and this is a brilliant
read i don't know if you've read it came across this before but no this this is nuts okay i loved
it so i'm gonna pull out a couple uh twinkies uh we always talk about them lasting forever
apparently they use it they have a shelf life of 45 days, not millennia, like I thought.
Oh, no.
Only McDonald's hamburgers.
I don't know.
I see some pictures of those things looking good after way too long.
Something interesting I found out about microwave ovens that I didn't understand.
Let's see.
Microwave ovens, they don't cause cancer.
I knew that.
But I thought they do not cook from the inside out.
I thought they did the inside out thing.
I thought that also.
But the 2.45 gigahertz microwaves can only penetrate approximately one centimeter, about
three-eighths of an inch into most foods so the inside
portions of thicker foods are mainly heated by conduction from the outer
portions did not know that so interesting learned something new every
day so my last extra is just on a wish list I came across a company in
Portland that makes microphones ear trumpet Trumpet Labs. And I really want this microphone.
Look at this.
Oh, that looks fantastic.
It's like a steampunk.
Yeah, it's so cool.
It's called the Edwina.
They've got a bunch of different models.
But this is a great looking mic.
I'd love to be able to try this out.
So $600, maybe.
That thing is amazing.
Yeah, it gets into the price of this microphone brian
which is kind of ridiculous so anyway um but it's uh it's not it's not dynamic it's that other one
uh oh condenser they've blown it oh man 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 in like an area and they exclude all the background sound like a whole bunch yeah
there's a lawnmower outside that you can't hear because of the my dynamic mic so is it right now
yeah they're absolutely i don't hear anything at all and i've had people right next door using a
chainsaw on a tree going and people couldn't it didn't come through in the
mic those are dynamic mics uh condenser mics are maybe better for like a studio 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 cards etc so yeah you gotta be careful brian's getting that here yeah
anyway how about you do you have any extras? I sure do. I sure do.
Okay.
While ago, I wrote the unsolicited advice for Mozilla and Firefox saying that they are going off the rails and they really should fix it.
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.
I do want to point out something that's kind of cool that they just launched which is mozilla monitor they had mozilla monitor in like a really super shallow not much of a service type of way kind of
like have i been pwned like it'll tell you if there's a breach okay well there's like services
that do that already i'm signed up for but thanks 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. And then they'll fix it.
Like, see this?
It says, 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.
They truly are scummy people.
And we'll fix it.
Here's another example.
Re-manually fix.
It's like change your
password. And then 80, uh, 35 automatically removed because we found them. Well, I, I filled
this out. It'll do a free scan. If you put your email address in here, I have a thousand and 80,
wow. A thousand and 80. And they have like my kids' names, my kids' phone numbers. This is,
I'm telling you they're scumb. And they sell this, right?
So you can sign up for it.
And it'll basically go through and keep it safe.
You can do one time.
Like, here's the old thing.
It's the free breach alerts.
Like, good, have I been pwned?
It's better.
It's more comprehensive.
Troy Hunt is awesome.
I've had him on TalkPython quite a while ago.
But the Monitor Plus is what I'm talking about.
The only drawback is, dude, look how much that is.
That's $14 a month just to tell you if it's found something online and we remove it.
I think that's pretty steep, man.
I mean, maybe if it really, really bothers you.
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. It's, it's been working for like a week.
And I don't remember how much it is. It's like a quarter of the way through getting rid of them.
And then I'm going to cancel it again. Cause there's no way I'm paying $14 a month. Cause
this stuff doesn't appear at an incredible rate. It's just, I haven't done it for 20 years,
you know, and I haven't cleaned it up for 20 years. So I think they're shooting themselves
in the foot with this pricing because at $14 a month, you're right. I'm like,
I'm going to do it all in the month in one month. But if it was like four bucks a month,
I'd probably just leave it on. And then they're making like 50 bucks for me instead of 14.
Exactly. That's, that's my assessment as well. I think it's tremendously too high. Uh, I think
everyone has subscription fatigue and another 15 bucks is just 14, 15, whatever it was.
It's like, especially since it mostly happens in one go.
Like you mostly get it cleaned up and then it's just kind of maintaining over time, you know?
So I don't know.
But still, nonetheless, hooray Mozilla for doing something positive.
Yeah, yeah.
And making progress on finding multiple ways to support
them. People can check out that article in canada.codes if they want, like what I think
they really should be doing. Yeah. There's that. There's also like, that's one way to like help
support Mozilla cause they're cool. Yeah. If you couldn't, you also can,
could consider this just a $14 a month donation to Mozilla, right? Yeah. If that's your vibe, then go for it.
But there's a lot of things out there
that deserve some of my money.
And if I donate $14 a month to all of them,
then that's a lot.
Yeah, you don't even get an NPR mug for that, so.
Exactly.
Like I should at least get a free browser.
Oh, wait.
Okay, a couple of other things here.
Not the joke yet.
Python 3.12.2 is out.
And there's, you know, a non-trivial number of fixes of it.
I don't know how many there are here, but, you know, important stuff like get a new version of SQLite and OpenSSL.
And the freeze tool didn't work with this, et cetera, et cetera.
So some bug fixes.
I didn't see any security issues, but you can see
there's, there's a, there is one minor security issue. I don't think it's a huge deal, but like
there's quite a bit of change here, Brian, look at this. 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. So people don't know it.
And then they get imported and run code or something to this effect.
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 or there's nothing like that,
but there's a minor security up to, but there's a lot of stuff, right?
Yeah.
Yeah. So very cool and
because of all the neat docker stuff one command to wait a couple minutes and all the apps are now
running python 312.2 including python bytes out of m hooray yeah the other thing to to note about
312.2 is that it's a couple releases a couple bug fix releases in so if you were holding out uh
switching to 312 this might be a good time.
Yeah, that's,
I didn't really think of that at all,
but that's a good point.
This is the third release of Python 3.12, right?
So if you've been,
oh, we're not ready to be so cutting edge.
Well, maybe, maybe now you are.
Yeah, so.
Okay, cool.
Next up, I want to reach out to anyone
crazy enough to get a Vision Pro
who also likes taking courses at TalkPython.
The TalkPython mobile app in its iPad form is now available to put into your virtual land.
You could sit by Mount Hood relaxing and then put Brian's PyTest course on the wall next to you and look at the stars and then look over Brian or whatever course you want. But I would, I would love for somebody to just try it out because there's no way I'm buying a vision pro
no way. But if people want to try it, that'd be cool. It's not like I built this app and didn't
test it in that basically iPad apps. If you opt into it, you're allowed to run the iPad apps in
the vision pro. So I just took our iPad app that we know works well, let people run 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 an Apple store later. You know, actually I'm going to stop by
the sporting goods store and just get one of those snorkel, snorkeling goggles, snorkeling mask.
So it'd be about the same. 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.
That's amazing.
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.
I'm winning the day.
She's like, my eyes don't hurt at all.
I was like, bravo.
That's great.
That's a good idea.
We buy special made onion goggles, but basically swim goggles.
Yeah.
Well, you could get the Vision Pro.
I bet it would 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.
Yeah.
It's a brave new world.
I don't know if I want to like put a knife that close to my hands with the monitor leg.
But anyway.
Excellent.
Yeah.
Henry expected that the Vision Pro would be mentioned.
And then David out in the audience suggested I just get one for everyone in the chat.
Like, surprise.
Thank you for being part of the live show.
You get a Vision Pro.
You get a Vision Pro.
Everyone look under your seat.
That's really nice of you, Michael, for offering that.
Yes, of course. just here to please all right now i have something i actually that's legitimately
uh next so yesterday i had uh martina um poglisi on the show and she does this really cool project
called data doodling she's a data scientist at an 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 it. 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. So anyway, I encourage people to go check that
video out. It's 29 minutes long. It's
not super long, but if you're into data visualization and data science, she's doing
some really cool stuff. So you can check that out. Yeah. It's really cool, isn't it? Yeah. Yeah. Yeah.
She's, she's doing awesome stuff. She says she has 50 different ones of those and they all have
an article and analysis on the data and it's pretty, pretty in-depth. All right. How about time for a joke?
Should we close it out with a joke?
This one, this one connects a lot here, Brian.
Let's see.
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?
Stupid fly.
Looking at a mouse or rat trap.
Rats should be ashamed for
falling into this trap big bear trap or one of those like trapper claw things bears this is
ridiculous don't step in this right then there's a sign that says aws free tier oh that looks nice
yeah that's funny it's a good one right yeah yeah so yeah plus with this that's what i got for you
all right yeah well um thanks again for a lovely episode and thanks everybody for uh
coming into the show and um coming on the show live and sharing it with us it's been fun
and we'll talk next week bye all thanks