Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to
earbuds. This is episode 371, recorded February 13th, 2024, day before Valentine's Day. I am
Brian Okken. 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 Fosstodon. We're at mkennedy, at Brian Okken, and at Python Bytes. 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. So, and let's just kick it off 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. Turnbulls, 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 TextSniper 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. 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, you know,
in the screen, and boom, you've got that text, right? So when we talked about PyApp from
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's amazing. Okay.
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
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, puts 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 is a, it says package your command line tools into a native
macOS installer. And I'll just get in front of the 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 310 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. Are you going to
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 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. And you can even do this through code. If you want to somehow automate,
you know, via Python, you want to automate this creation of the installer, seller build.
Oh, cool.
So isn't that cool?
Yeah, actually that's pretty neat.
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 that are 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? Yeah. 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 Talk Python, 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, cause I, I'm not doing that for a slate, like the web app handle set, 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? 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 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 is friendly with the
PyProject Toml and it has its own app create.toml. If you don't want to mix those together. Yeah. I've
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 go either way 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. 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 had,
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. So yeah, exactly. And
also you can just look, glance over and see the project. Oh yeah, this is using rough. Got it.
Yeah. Yeah. There's that too. Okay. Speaking of packaging, it's packaging. Let's talk about some
more 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 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. So, so he just has a package sample
GitHub repo that just has an example. And in the read me, there's a bunch of stuff like discuss,
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. They, one caveat, I would like me
personally, like the read me is in restructured text. I would totally go with markdown instead of
restructured text. 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, how to deal with the version number, doing optional features. So, and then talks about
what's in the repo and, 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 a 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 pyproject.toml, but dev requirements is also something that's very
common requirements.txt file. The readme, I actually, there's a license and a .gitignore.
Having an example .gitignore is good. 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 that
editor config was a thing?
No, what does that work with? I know about the dot idea subfolder for PyCharm and the dot VS Code one
for VS Code, but I don't know anything about this.
The idea is like this editor 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, some you have to get out of, yeah, a plugin or something. So for instance, all of the,
like all of the JetBrains stuff supports it, IntelliJ and all that, PyCharm supports it. Visual
Vim supports it in Visual Studio, 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. It's, I'm like, oh, cool. I'll maybe try that because sometimes I do pop around with different
editors. 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, if you're the
only one, comfortable that maybe don't, but, 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. So, testing on pipe AI and, and then make pipe AI. 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, a pipe,
a packaging Python projects tutorial. And I also agree that if you want to get into the nitty gritty,
so his example is great. So 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.
So 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 now it's 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, one of the, 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.
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 PyPI that use pyproject.toml,
while 80 of them use roughtoml based on sdst. Interesting. I think you would maybe, maybe a,
a way to think about that is like, you've got to ship your pyproject.toml. Like it's your new setup.py.
It's, it's part of, you know, it has to be there, right? To get the thing to install. Whereas rough.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 gitignore and the roughtoml,
but the thing that actually gets shipped is, 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.
Yeah. Let's see. Which ones do I, 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 the, I, I'm a fan of
single quotes, not double quotes, and so on. And then, yeah, so that's, 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, 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 builds 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 scouts 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/scout. And please use our link
link because it does truly support the show. Let's, let's move on to the next item here. And this one
comes from Mastodon and you are called Ninsky, pointed out that, you know, something that's really
awesome about rough. We were just talking about rough, 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. So somebody was complaining
about, look, I, if I could just get pilot or flake eight 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 or if you wish. So at docs.astral.sh, the company behind rough and
with Charlie Martian team slash rough slash rules has a really cool site here. So you come down and it says,
here's 700 lint rules. And if you scroll down, it'll have like old things like, okay,
F403 undefined local import with star or unused import. Right. So let's just grab the first one
and click on it. It says, this is derived from the flakes, the pie flakes 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, it says unused imports at a performance
overhead at runtime and risk creating import cycles. Like this thing imports that, but that thing
imports to this boy, do I wish Python would get around that problem? I think it could, but anyway,
like with that two, with a two-step compile possibly, like there's all sorts of languages that,
that do that. Right. Yeah. Like you don't worry about that in C for example. anyway, they,
they also increase, unused imports also increase the cognitive load of reading the code.
I mean, editors help if they grade out and say that, this is not used, but still, the performance
thing and cycles is certainly there. So it says, here's an example, import numpy as NP define area,
you know, pie 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. 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, cause you're coming
from another language, parentheses, false, but you have a comma in there. It's always true,
even though false is in there, right? Cause 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. so yeah. Then maybe just some PEP 8 ones. Like here's another
one PEP 8. 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. I, 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 on. 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'll
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, 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 rough, this is a nice resource.
Cool. well, I have a whole bunch of stuff. I was going to, I'm doing an extra,
extra, extra, extra, extra thing, for, for, for my next topic ish topics, plural.
So, I, came across an app. I think I heard it from several people called flat.app.
So flat is, and I've just started playing with this. 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. but the work and then different workspaces for different things. You can have different
going on. I just kind of like the layout of it 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.
I think it's like for individuals, like five bucks a month or something. anyway, flat looks,
looks fun. I've started playing with that. next up is, terms of service. Didn't read.
Uh, this has been around for a while. It's at TOSDR.org. like kind of too long. Didn't read.
Uh, the tagline is I have read and agree these term 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. there's apparently
there's stuff that they don't like. 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, that the data might
go away. okay. Yeah. Maybe, in Wikipedia, but, I kind of get that already. I understand.
So, so this is neat. 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 the classification system and everything is done
by its 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 thought it was
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. So it's,
like the wired article is from 2018. So anyway, but I like the idea. So if people want to
help out, that'd be great. 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. So I wanted to highlight them.
This is, from, Sheena O'Connell and, 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. so I think that's a great idea. second is,
uh, 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. 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, I've been frustrated with my job and,
blogging helps me focus on something that I can actually have an impact on. And it did help me,
um, focus on something that I enjoy more than my job at the time. So I think that's good.
and then, writing to connect. I think those are all connecting with people's all, they're all great.
So, I'm almost done with all my extras.
Not those are good. 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. So maybe I could write down those thoughts somewhere
else and someone will hear them. You know what I mean? yeah. Before I move on, Sheena,
uh, what was it? 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. applying mastery based learning in tech
education, a problem with code schools. so these are, these are interesting, not,
not just Python stuff, but interesting tech articles. So yeah, cool blog. the last thing I wanted to
point out was, actually I think I'm done. That was it. That was done with my extras. Oh no,
one more. jet brains, has a PyCharm blog and there is three pie test features you will love
by Helen Scott. So, just a quick article, talking about fixtures, marks, markers, and
parametrize. 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 PyCharm. 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. that was good. Yeah.
We're just going to go right into the extras anyway. so, I just had what links to my course and,
um, sorry, we couldn't find that page. Oh no. anyway, of course the, I ran across this,
this fun thing. It was just Wikipedia's list of common misconceptions. 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 come across this before, but no, this is nuts. Okay. I loved it. So I'm going to pull out
a couple, Twinkies. we always talk about them lasting forever. Apparently they use it. They
have a shelf life of 45 days, not millennia. Like I thought, I don't know only McDonald's
hamburgers. I don't know. I see some pictures of those things looking good after way too long.
uh, something interesting I found out about microwave ovens. I, that I didn't understand,
uh, let's see microwave ovens. They don't cause cancer. I knew that, but, I thought they,
um, they do not cook from the inside out. I thought they did the inside out thing. I thought that also,
um, but it, the, 2.45 gigahertz micro 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, learn something new every day. So, my last extra is just on a wishlist. I,
I came across a company in Portland that makes microphones, ear trumpet labs. And I really
want this microphone. Look at this. It's fantastic. It's like a steampunk.
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
able to try this out. So 600 bucks. Maybe. That thing is amazing. Yeah. It gets into the price of
this microphone, Brian, which is kind of ridiculous. So anyway, but it's, it's not, it's not
dynamic. It's that other one. 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 who don't know the dynamic ones really capture just 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 and people couldn't, it didn't come
through in the mic. Those are dynamic mics. 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, et cetera. So yeah, you gotta be careful.
Brian's getting out of here. Yeah. Yeah. Anyway, how about you? Do you have any extras?
I sure do. I sure do. Okay. 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. 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 and 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, 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.
Three manually fix. It's like change your password. Cause some, and then 80, 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, 1080. And they have like my kids' names,
my kids' phone numbers. This is, I'm telling you, they're scumbags. 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 go to have I been
pwned? It's better. It's more comprehensive. Troy hunt is awesome. I've had him on talk Python
quite a while ago, but the monitor plus is what I'm talking about. The only drawback is to look how much
that is a $14 a month just to tell you if it's found something on, on 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. That's, that's my assessment as well. I think it's tremendously too high.
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? So I don't know, but still nonetheless,
for doing something positive and making progress on, on finding multiple ways to support them.
Uh, people can check out that, article at mcanade.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 could also could consider this just a $14 a month donation to Mozilla,
right?
If that's how 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 open SSL 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, then they get imported and run code or something to these effect. 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 seven, seven, two ampersand three, you're hacked or it's nothing like that,
but it is, there's a minor security update, but that's a lot of stuff, right? Yeah. Yeah. So
very cool. And because of all the neat Docker stuff, one command, a wait a couple of minutes
and all the apps are now running Python 3 12.2, including Python bytes out of him. Hooray.
Yeah. The other thing to, to note about 3 12.2 is that it's a couple of releases,
a couple of bug fix releases in. So if you were holding out, switching to 3 12,
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, 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 that talk Python, the talk Python mobile app and its iPad forum is now available
to put into your virtual land. You could sit by Mount hood relaxing and then put, you know,
Brian's pie test course on the wall next to you and look at the stars and then look over at 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 am 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
the Apple store later. You know, actually I'm going to stop by the sporting goods store and just get you
one of those snorkel snorkeling goggles, snorkeling mask. So I want to use them for chopping
onions and see if I can get, 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 sitting there chopping onions going, I'm winning the day. I'm winning the day. She's like,
I'm not, my eyes don't hurt at all. I was like, bravo. That's great. That's a good idea. We,
we buy special made onion goggles, but they're basically swim goggles.
Yeah. Well, you could get the vision pro. I bet it would keep most of the air out and then 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, with,
with the monitor leg, but anyway,
excellent. Yeah. Henry expected that the vision pro to be mentioned. And then David out in the
audience suggests that 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 and you get a vision pro. Everyone look under your seat.
That's really nice of you, Michael, for offering that.
Yes, of course. She's here to please. I know I have something I actually, that's legitimately,
uh, next. So yesterday I had, Martina,
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. And just let me think about that before,
uh, 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 it's pretty great. 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?
Yeah.
So 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. Brian, then there's a sign that says AWS free tier. Ooh, that looks nice.
Yeah. That's funny.
It's a good one, right? Yeah. Yeah. So yeah. Plus with the smile I got for you. All right. Yeah.
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. It's been fun and we'll talk next week.
Bye. Thanks.