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

#371: Python in a Crate

Published Tue, Feb 13, 2024, recorded Tue, Feb 13, 2024
Watch this episode on YouTube
Play on YouTube
Watch the live stream replay

About the show

Sponsored by ScoutAPM: pythonbytes.fm/scout

Connect with the hosts

Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays at 11am PT. Older video versions available there too.

Michael #1: AppleCrate

  • By Rhet Turnbull (from Building macOS Apps episode)
  • AppleCrate is a tool for creating native macOS installers for your command line tools.
  • It's useful for creating installers for command line tools written in any language.
  • Tools written in interpreted languages like Python will need to be first processed with a tool like pyinstaller to create a standalone executable.
  • AppleCrate uses Jinja2 templates to generate the files required for the installer. This allows you to use template variables in your files or command line parameters to customize the installer.

Brian #2: One way to package Python code right now

  • Ned Batchelder
  • An example repo with all the parts for package
  • A lot of discussion and what to think about in the README (unfortunately rst and not md, but we can’t have everything)
  • Includes
    • pyproject.toml
    • dev-requirements.txt
    • README.rst
    • Makefile
    • LICENSE.txt
    • .bitignore
    • .editorconfig
      • see https://editorconfig.org
  • Shout out to to Packaging Python Projects on python.org, which is pretty good

Michael #3: Flask8 but why?

  • Ihor Kalnytskyi: Something I really like about #ruff, a new tool for both linting and formatting in the #python ecosystem. You can literally pick any lint rule it supports and see both reasoning and examples.
  • Ruff supports over 700 lint rules, many of which are inspired by popular tools like Flake8, isort, pyupgrade, and others.

Brian #4: Extra, Extra, Extra

  • Flat.app
    • kinda like trello, etc. but a very simple interface that makes it pretty easy to use
  • tosdr.org
    • Terms of Service; Didn’t Read
    • Kind of a wikipeda way to summarize the terms of service of different web services, and give them ratings/grades
  • Why I write
    • I talked about blogging more last episode. Here’s a cool write-up by Sheena O'Connell
    • reasons
      • to remember
      • to refine my thinking
      • to impact
      • to get through hard times
      • to connect
  • Three pytest Features You Will Love
    • Helen Scott at JetBrains/PyCharm
    • Fixtures, Markers, Parametrize
    • Plus shoutouts to my course and book

Extras

Brian:

Michael

Joke: Free Tier

Episode Transcript

Collapse transcript

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

01:47 that's amazing. Okay.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

03:21 Oh, cool.

03:21 So isn't that cool?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

08:59 editor config was a thing?

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

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

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

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

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

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

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

09:47 available, the plugin. So cool.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

13:09 settings and just run it vanilla.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

29:51 really should be doing.

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

29:56 cool.

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

30:02 right?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

35:05 Yeah.

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

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

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

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

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

35:39 Yeah. That's funny.

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

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

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

36:02 Bye. Thanks.


Want to go deeper? Check our projects