WEBVTT

00:00:00.001 --> 00:00:04.780
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:00:04.780 --> 00:00:12.100
your earbuds. This is episode 402, recorded September 23rd, 2024. I'm Michael Kennedy.

00:00:12.100 --> 00:00:13.380
And I'm Brian Okken.

00:00:13.380 --> 00:00:19.040
This episode is brought to you by Scout APM. We'll tell you more about them later. If you

00:00:19.040 --> 00:00:24.340
want to keep up with us or the show, follow us on Mastodon. Links are in the show notes

00:00:24.340 --> 00:00:28.680
or over on X if you really, really want to. You can find the links there in the footer

00:00:28.680 --> 00:00:34.020
of the website. We typically live stream on Mondays now. We used to do Tuesdays. Remember,

00:00:34.020 --> 00:00:39.040
we moved to Mondays. So Mondays, 10 a.m. Pacific time on YouTube. If you want to check that out,

00:00:39.040 --> 00:00:43.260
we'd love to have you. Always great to have people in the audience, but certainly not environment.

00:00:43.260 --> 00:00:50.960
And finally, if you want to get artisanal and crafted summary put together by your very own

00:00:50.960 --> 00:00:56.840
Brian Okken about the show right after it ships, sign up for the newsletter. Just go to pythonbytes.fm

00:00:56.840 --> 00:00:59.980
slash right there and just click newsletter right at the front. It's probably the easiest way,

00:00:59.980 --> 00:01:04.280
actually, put in your email. We won't do bad things with it. We'll just send you updates.

00:01:04.280 --> 00:01:06.820
And things about like horses and other stuff.

00:01:06.820 --> 00:01:07.340
Horses.

00:01:07.340 --> 00:01:08.380
Courses. Okay.

00:01:08.380 --> 00:01:14.420
Horses. Courses for horses. No, this is a totally different kind of show. We can go down that path.

00:01:14.420 --> 00:01:16.160
What path do you want to take?

00:01:17.200 --> 00:01:20.000
Actually, let's make some decisions. How about that?

00:01:20.000 --> 00:01:21.160
Yes. Okay.

00:01:21.560 --> 00:01:26.740
I actually, this was suggested to me actually at a work setting. A friend of mine, Christian

00:01:26.740 --> 00:01:33.020
Gazelle said, Hey, architectural decision records are pretty cool. Do you use them? And I had not

00:01:33.020 --> 00:01:39.500
heard of these things. So I was excited to explore the rabbit hole. So this was a, there's an article

00:01:39.500 --> 00:01:44.220
that we're going to link to. This is the original from 2011 called documenting architecture decisions

00:01:44.220 --> 00:01:50.460
from Michael Nygaard. And, and it's, it, it's kind of this idea that you just have this lightweight

00:01:50.460 --> 00:01:58.640
document to, to discuss things like what you're deciding about, what the context is, what, you know,

00:01:58.640 --> 00:02:05.700
what the current situation is. And then the decision, what you're going to do. And so the context is why,

00:02:05.700 --> 00:02:09.860
why you're doing it. The decision is what you're going to do. And then, you know, status, like if

00:02:09.860 --> 00:02:13.720
you're, whether you're proposing it or whatever, I'm playing with status right now. So,

00:02:13.720 --> 00:02:18.200
and then the consequences, what you hope to will be the benefits of this decision.

00:02:18.200 --> 00:02:24.500
This seems like, like, like so silly and simple that it can't be helpful, but it is, it is awesome.

00:02:24.500 --> 00:02:30.340
And I've started using it just for a few days. So we're, we'll see. But so there's another article

00:02:30.340 --> 00:02:36.040
I'd like to link to, and it's from, from Red Hat called why you should be using ADRs or

00:02:36.040 --> 00:02:41.400
architectural decision records to document your project. And it's a, that's, that's a really nice,

00:02:41.960 --> 00:02:48.460
introduction. And it shows you basically, you just have a handful of things and there's a bunch of

00:02:48.460 --> 00:02:53.900
templates people are using. I'm using Markdown. And I'm going to show you the, essentially the

00:02:53.900 --> 00:02:59.240
template I'm using. It's just a Markdown file. And I've got like a template, just a zero, zero,

00:02:59.380 --> 00:03:06.320
ADR template.md that just copy paste modify. And it's just a few lines. And I've likely,

00:03:06.320 --> 00:03:10.300
sometimes I just put none in, if I'm not contingent any options, I'll just put none,

00:03:10.300 --> 00:03:16.120
but I might fill it in later, but including pros and cons for options. This isn't, this is really only

00:03:16.120 --> 00:03:20.400
taking me a few minutes to get the stuff that I'm thinking about of the project and the things I want

00:03:20.400 --> 00:03:26.580
to change out of my head and somewhere. And since it's in Markdown and I'm storing it with the,

00:03:26.580 --> 00:03:33.520
with the code in the repository, it works great because, because the, because it's a GitHub or

00:03:33.520 --> 00:03:39.160
GitLab just renders it. It's Markdown. So it just gets rendered and it looks beautiful. But it's super

00:03:39.160 --> 00:03:45.720
fast to just write this down. And I'm, I'm already like in, so the step, okay. I want to talk about the

00:03:45.720 --> 00:03:49.980
status a little bit. The proposed status there, the status that was recommended in the original is

00:03:49.980 --> 00:03:55.960
like proposed, accepted, rejected, deprecated, superseded. And it's kind of formally. So I've

00:03:55.960 --> 00:04:03.620
been using things like trying it out. Haven't decided yet because I'm like documenting the process

00:04:03.620 --> 00:04:08.300
as I'm going. And I'm guessing like, by the time I say accepted, I'm going to stop editing this,

00:04:08.300 --> 00:04:13.180
these documents, but I've got a couple architecture things that I'm just trying out playing with,

00:04:13.320 --> 00:04:20.460
you know, do being agile about it. And, and it's helping me to actually go even just back a day to

00:04:20.460 --> 00:04:25.500
say, what was I thinking yesterday? And, and having that written down someplace. And then I'm also working

00:04:25.500 --> 00:04:30.120
with a remote team. So it's good to have the remote team to be able to like, they can see what I'm

00:04:30.120 --> 00:04:35.920
thinking by reading these docs and other people can do too. So anyway, highly recommend architecture

00:04:35.920 --> 00:04:41.220
decision records. Yeah, that's great. You know, one thing that's might be cool to pair this with

00:04:41.220 --> 00:04:47.580
is the old style GitHub projects, not the crummy new ones, but the good new, good old ones. Okay.

00:04:47.580 --> 00:04:53.540
Where you have Kanban boards and they go through different stages, right? So the status could have,

00:04:53.540 --> 00:04:58.240
be the columns of your projects and you could have just a project for decisions and you could just see

00:04:58.240 --> 00:05:03.960
where they've gone and you know, maybe somehow reference. Yeah. And a great issue is something to

00:05:03.960 --> 00:05:05.880
link it all together through GitHub, but that'd be cool.

00:05:06.120 --> 00:05:10.040
Definitely. And I've seen, there's a bunch of people that have done a bunch of extra stuff on

00:05:10.040 --> 00:05:16.620
top of this to make it more processy. But to me, now it feels official and I don't want it to feel

00:05:16.620 --> 00:05:20.700
official. I want it to just be like dumping stuff out of my head. There's also a different, a different

00:05:20.700 --> 00:05:25.920
mind, a different thing of like, how much things do you put in there? Is it everything? Is it,

00:05:25.920 --> 00:05:31.640
just big, important architectural changes? And that you just sort of have, I'm just playing with it to

00:05:31.640 --> 00:05:36.740
see what it is. I'm not putting bug fixes in here, but I'm putting things like, I'm really

00:05:36.740 --> 00:05:40.720
changing a component, taking it here and moving over here. Why am I doing that?

00:05:40.720 --> 00:05:46.460
Right. We're switching from FastAPI to flask and here's why I'm like that. Right. So yeah.

00:05:46.460 --> 00:05:53.040
Theoretically. Awesome. Well, let's go to the sea and visit some narwhals. So I just had this,

00:05:53.040 --> 00:05:59.580
this project, had Marco Garelli on talk Python. This is a project he's doing a lot of work with

00:05:59.580 --> 00:06:04.940
and narwhals. It solves a problem. You can see their logo. If you go to their website is a pandas

00:06:04.940 --> 00:06:10.420
and a polar bear and a narwhal kind of hanging out behind them. And the idea is if you have,

00:06:10.420 --> 00:06:18.500
if you are writing a library that takes a data frame source. So if you have users who are doing pandas

00:06:18.500 --> 00:06:23.980
and they want to, you want to write a library and say, Hey, send me your pandas data frame and

00:06:23.980 --> 00:06:28.420
I'll graph it or I'll analyze it or I'll do AI around it or whatever it is you're doing with it.

00:06:28.420 --> 00:06:34.840
You will probably get a message issue or something that says, Hey, we'd like you to use polars.

00:06:34.840 --> 00:06:38.520
How do I work with that? I want to convert everything to pandas. I want to use polars. Like,

00:06:38.520 --> 00:06:41.880
uh, now how do I take these two? And then you're like, well, we actually use

00:06:41.880 --> 00:06:49.120
modem or we use, QPy for, GPU programming. Can we pass our data frames? You're like,

00:06:49.120 --> 00:06:54.800
great. Cause nobody wants to convert out of their native framework into this thing. And it's just

00:06:54.800 --> 00:06:59.060
some other one. Cause it's probably going to make it slow. Like if you convert out of a GPU into pandas,

00:06:59.060 --> 00:07:03.840
well, what's the point, you know? So that's what the goal of this narwhals thing is. It lets you

00:07:03.840 --> 00:07:09.420
primarily, it's primarily for people who are creating graphing libraries, analysis libraries,

00:07:09.420 --> 00:07:16.480
others that can take all these different frameworks. Okay. Right. And then what you do as the library

00:07:16.480 --> 00:07:23.060
writer is use a subset of the polars API, a real simple one program that comes from narwhals, but

00:07:23.060 --> 00:07:28.000
it's the same API, right? And so you basically do that. And then narwhals itself knows how to figure

00:07:28.000 --> 00:07:33.580
out which data frame library you're working with, how to work with it. If it's polars and it does,

00:07:33.580 --> 00:07:38.800
it's lazy operations. It won't turn it into eager operations. It'll continue to be

00:07:38.800 --> 00:07:43.240
lazy until it gets evaluated, which is really good for performance and memory. But if it's an eager

00:07:43.240 --> 00:07:49.700
API from pandas, also that very low overhead, if you go check it out, full static typing, lots of

00:07:49.700 --> 00:07:55.120
promises of stability. Cause the point is to be a foundational library for other libraries, not

00:07:55.120 --> 00:08:00.120
cutting edge new features. So anyway, if people are out there and they want to work with multiple

00:08:00.120 --> 00:08:04.460
frameworks for whatever reason, especially if you're creating libraries that you wouldn't let

00:08:04.460 --> 00:08:08.400
people from different slices of the data science world use, then this is pretty awesome.

00:08:08.400 --> 00:08:14.220
So do you know, is it, it's not converting things as it brings it in, it's leaving it in the native

00:08:14.220 --> 00:08:14.480
data.

00:08:14.480 --> 00:08:20.280
Yes, exactly. Yeah, exactly. That's part of the bonus here is that it does that. And then basically

00:08:20.280 --> 00:08:25.940
you write to the subset of the polars API, but then narwhals, it's okay. Well, is it really

00:08:25.940 --> 00:08:29.080
a pandas thing or whatever? Yeah. What's the underlying thing?

00:08:29.080 --> 00:08:34.040
Yeah. Yeah. Yeah. I don't have a direct use for it because I don't data science as much,

00:08:34.040 --> 00:08:39.460
but I think it's cool and wanted to share it. It will be on talk Python in much greater detail

00:08:39.460 --> 00:08:45.540
than I just explained in a couple of weeks. You can find it on the Python live stream YouTube

00:08:45.540 --> 00:08:48.920
section already, but the full edited version will be out later.

00:08:48.920 --> 00:08:50.260
All right. That's pretty cool.

00:08:50.260 --> 00:08:56.440
Yes, indeed. And sure is. How about we talk about our sponsor real quick, Brian, before we move on.

00:08:56.440 --> 00:09:03.000
That sounds great. Let me tell you real quick about Scout APM. They're big supporters of Python

00:09:03.000 --> 00:09:08.980
bytes. So we appreciate that very much. So if you are tired of spending hours trying to find the root

00:09:08.980 --> 00:09:13.720
cause of issues impacting your performance, then you owe it to yourself to check out Scout APM.

00:09:13.720 --> 00:09:20.140
They're a leading Python application performance monitoring tool, APM, that helps you identify and

00:09:20.140 --> 00:09:26.140
solve performance abnormalities faster and easier. Scout APM ties bottlenecks such as memory leaks,

00:09:26.140 --> 00:09:31.840
slow database queries, background jobs, and the dreaded N plus one queries that you can end up if you do

00:09:31.840 --> 00:09:37.080
lazy loading in your ORM. And then you say, oh, no, why is it so slow? Why are you doing 200 database

00:09:37.080 --> 00:09:40.940
queries for what should be one? So you can find out things like that. And it links it back directly to

00:09:40.940 --> 00:09:46.140
source code. So you can spend less time in the debugger and healing logs and just finding the

00:09:46.140 --> 00:09:51.020
problems and moving on. And you'll love it because it's built for developers by developers. It makes it easy

00:09:51.020 --> 00:09:55.900
to get set up. Seriously, you can do it in less than four minutes. So that's awesome. And the best part

00:09:55.900 --> 00:10:02.460
is the pricing is straightforward. You only pay for the data that you use with no hidden overage fees or

00:10:02.460 --> 00:10:09.620
per seat pricing. And I just learned this, Brian. They also have, they provide the pro version for free to

00:10:09.620 --> 00:10:14.940
all open source projects. So if you're an open source maintainer and you want to have Scout APM for that

00:10:14.940 --> 00:10:19.380
project, just shoot them a message or something on their pricing page about that. So you can start

00:10:19.380 --> 00:10:25.620
your free trial and get instant insights today. Visit by them by set of him slash Scout. The link is in

00:10:25.620 --> 00:10:30.180
your podcast player show notes as well. And please use that link. Don't just search for them because

00:10:30.180 --> 00:10:34.320
otherwise they don't think you came from us. And then they'd stop supporting the show. So please

00:10:34.320 --> 00:10:39.300
use our link by them by set of him slash Scout. Check them out. It really supports the show.

00:10:39.780 --> 00:10:47.540
Next is a little bit of bizarre news from the Northwest. You're probably so I'm a little bit older than you,

00:10:47.540 --> 00:10:54.500
I think. So I don't directly remember it. But I kind of remember the meltdown at Three Mile Island.

00:10:54.500 --> 00:10:56.440
I'm 27. How old are you?

00:10:56.440 --> 00:11:04.840
So I was born in 1970. So I was nine years old. So it wasn't really something I was completely aware of. But we, you

00:11:04.840 --> 00:11:10.980
know, we heard about it later, because it was kind of a big deal. So what this was, was a nuclear nuclear

00:11:10.980 --> 00:11:19.340
facility in near near Seattle, I don't know, I'm not that good at geography. A Three Mile Island in

00:11:19.340 --> 00:11:24.560
Washington. And there were two reactors, and one of them did a partial meltdown. And it was a big

00:11:24.560 --> 00:11:31.780
big thing. But it was it's the worst nuclear accident we've had in the United States. And okay,

00:11:31.780 --> 00:11:37.280
so why am I talking about this? Well, I didn't, I guess I guess I didn't realize it was still operating

00:11:37.280 --> 00:11:44.000
up until 2019. Not those reactors, there were other reactors nearby safer. I mean, in nuclear energy has

00:11:44.000 --> 00:11:49.380
come a long way. There's an actually this Three Mile thing was the reason why we have a lot of the nuclear

00:11:49.380 --> 00:11:56.300
regulations we have now, it did sort of put nuclear energy on the back burner more than it probably should

00:11:56.300 --> 00:12:00.800
have been. And I'm not going to get into the politics of whether or not we should have nuclear energy

00:12:00.800 --> 00:12:06.260
too much with that. I didn't want to get into that too much. But what I am want to talk about is that

00:12:06.260 --> 00:12:11.800
it's going to start up again, or it's proposed to. So it was closed in 2019. It might open again in

00:12:11.800 --> 00:12:18.120
2028. And it's only going to be for Microsoft. This is the bizarre bit. So Microsoft, wow,

00:12:18.120 --> 00:12:25.880
Microsoft wants to start this up again, and have an exclusive 20 year deal for what 835 megawatts of

00:12:25.880 --> 00:12:35.720
energy. Just going to AI. This seems bizarre to me. So AI needs a lot of power. And yeah, so they're

00:12:35.720 --> 00:12:42.300
just going to, they hope, this isn't, this is still in proposal phase. Regulators have to approve it. But

00:12:42.300 --> 00:12:49.700
we're going to start up another nuclear power plant just for, just for Microsoft AI. This, I just don't get

00:12:49.880 --> 00:12:56.220
so there's, there's that. And then it was, this was, we linked to the verge article. I found it on

00:12:56.220 --> 00:13:01.680
the verge, but then I searched for it again, some more, and there's a CNN article as well. And also

00:13:01.680 --> 00:13:06.980
what it looks like there's only one picture of this thing that's being used everywhere. Anyway. Oh, I

00:13:06.980 --> 00:13:14.260
guess that's a different picture, but so going to start up again. It seems odd. And then

00:13:14.260 --> 00:13:21.620
in a related news, I guess that's all I just wanted to say is I think this is weird that we're going to

00:13:21.620 --> 00:13:29.240
start a nuclear power plant just for AI. Maybe that's a problem. Anyway. The article I found was

00:13:29.240 --> 00:13:35.660
just, it's kind of a mock news article, but this is just a mixed weenies internet tendency. The article

00:13:35.660 --> 00:13:41.080
is the department of energy wants you to know that your conservation efforts are making a difference.

00:13:41.080 --> 00:13:47.820
So I thought we were trying to like save the planet by saving energy and stuff. And,

00:13:47.820 --> 00:13:52.980
this has got some interesting bits. says, by turning off your lights all day, every day,

00:13:52.980 --> 00:13:58.520
you can serve about 1% of the energy needed for AI to generate a picture of a duck wearing sunglasses.

00:13:58.520 --> 00:14:04.940
Isn't he cute? Aside from the fact that he has feet that are a human of a human man, of course.

00:14:04.940 --> 00:14:10.960
so AI is consuming tons of energy and we're in the rest of our lives. We're trying to conserve energy.

00:14:10.960 --> 00:14:16.120
It's just a, I don't know. I, maybe I shouldn't brought it up as a topic. It's just seems bizarre

00:14:16.120 --> 00:14:25.700
to me. So I'll leave it there. Well, so I love these. Let's put your, your feeling bad about wasting

00:14:25.700 --> 00:14:31.760
energy or your effort to save some energy and perspective. And it's just like, yeah, I mean,

00:14:31.760 --> 00:14:36.820
I still go around and turn off the lights after my kid who just like leaves them on. Well, yeah. And

00:14:36.820 --> 00:14:44.260
also we're, I've like stopped buying 25 cent light bulbs and now we buy $8 led light bulbs that last

00:14:44.260 --> 00:14:50.300
about the same as the other bulbs used to. And they are more, I mean, I, we're spending way more on light

00:14:50.300 --> 00:14:59.340
bulbs and for what? So that AI can have more energy, I guess. Yeah. So on one side, I totally see the point

00:14:59.340 --> 00:15:05.220
there on the other, if we're going to dump tons of energy into AI, I would much rather see it coming

00:15:05.220 --> 00:15:10.800
from carbon neutral sources than coal plants, you know? True. Fair. Right. Like, are you going to make

00:15:10.800 --> 00:15:14.440
the duck or are you going to not make the duck? Like regardless of what light bulbs you're using, people

00:15:14.440 --> 00:15:19.260
are making ducks and let's do that better. I think it's super bizarre that three mile Island is the choice

00:15:19.260 --> 00:15:26.320
because if there's anything in at least American culture that says nuclear energy bad, it's three

00:15:26.320 --> 00:15:30.860
mile Island. Like couldn't pick anywhere else, you know? Yeah. Well, they're going to change the name.

00:15:30.860 --> 00:15:35.960
It's going to be called the crane clean energy center. Oh, there's a good rebranding

00:15:35.960 --> 00:15:45.220
that said, I'm super optimistic on nuclear energy as a climate solution, not necessarily old school

00:15:45.220 --> 00:15:50.440
three mile Island stuff, but the molten salt reactors, the things that fail safe and not fail

00:15:50.440 --> 00:15:55.320
explosive like Fukushima. Right. I know there's nuclear waste. They're less, those new ones are less

00:15:55.320 --> 00:16:00.480
bad. And, you know, I feel like a lot of the pushback against it, it's a little bit like, well,

00:16:00.480 --> 00:16:07.500
there's this rare endangered lizard in the desert. So we can't have in this desert, any solar farms.

00:16:07.500 --> 00:16:11.280
It's like, well, if it gets 20 degrees hotter, there's going to be no lizards in the desert.

00:16:11.280 --> 00:16:16.940
We need to take some more positive action. And I feel like, you know, nuclear energy is that sort

00:16:16.940 --> 00:16:20.680
of in the extreme, right? People have such strong reactions, but there's so much better attack now.

00:16:20.680 --> 00:16:26.660
And I would love to see that. Yeah. My personal views are that I think it would be good to utilize

00:16:26.660 --> 00:16:35.200
what we have, including nuclear energy as a stopgap to get us off carbon based fuel. And then once we

00:16:35.200 --> 00:16:43.420
get that, we can get carbon neutral, then we can go to, then we can be as we beef up solar and wind

00:16:43.420 --> 00:16:47.760
and everything, then we can maybe draw away from nuclear. That's a great way to put it. Like,

00:16:47.760 --> 00:16:52.740
let's get rid of the carbon pollution. Yeah. And then we can debate of the things that are working,

00:16:52.740 --> 00:16:58.260
which ones are working best. Very well. I also, I also wanted to point out the excellent pun that

00:16:58.260 --> 00:17:02.540
you made intentional or not that with nuclear energy, people have strong reactions.

00:17:02.540 --> 00:17:08.440
That's very good. All right. People might have a strong reaction to this as well, but I got to say

00:17:08.440 --> 00:17:13.800
it's way less, way less out there. So here's the strong reaction. I think when people use Docker,

00:17:13.800 --> 00:17:20.200
so this is a Docker topic, when people use Docker, there's two philosophies. One philosophy is I want

00:17:20.200 --> 00:17:26.300
the lightest weight, simplest, most basic thing that I can possibly use to build my containers.

00:17:26.300 --> 00:17:32.360
So they're insanely small, right? I want almost nothing there. I just want, if it is not needed for

00:17:32.360 --> 00:17:37.180
whatever I'm trying to do to execute, it doesn't belong there. Let's get it out of there. Yeah.

00:17:37.280 --> 00:17:42.880
That's one side. This topic is not from that. This topic is from the other side of perspective

00:17:42.880 --> 00:17:48.960
that I would say the Michael side lives on that I live on. And that is Docker can be more difficult

00:17:48.960 --> 00:17:53.560
to understand what's going wrong. When something goes wrong, how do you fix it? How do you get other

00:17:53.560 --> 00:17:58.120
tools to see what's happening inside there? Right. And so I think there's a bunch of people that stay

00:17:58.120 --> 00:18:04.300
away from Docker because they're like, Oh, I just want to have access to the logs and the tools that I

00:18:04.300 --> 00:18:09.800
normally use and all that kind of stuff inside my server or my VM. So I can understand what's

00:18:09.800 --> 00:18:14.680
happening better. Right. So one of the tools I really like is, Oh, my Z shell, right. With all of

00:18:14.680 --> 00:18:22.340
his plugins, his auto-complete, his cool history. And so I present to you ZSH in Docker. It installs

00:18:22.340 --> 00:18:29.480
Z shell, Oh, my Z shell and the plugins like auto-complete for source control and for, you know,

00:18:29.480 --> 00:18:35.700
all the, all the various plugins that you get right from Z shell and it's one line. So you put this run

00:18:35.700 --> 00:18:44.080
shell out of this repo and it just installs Z shell and installs, Oh, my Z shell. It makes it the default

00:18:44.080 --> 00:18:48.600
shell or you just run it when you get into it, whatever. And then all the plugins, et cetera.

00:18:48.600 --> 00:18:54.340
So really, really nice. You even get to pick your theme as part of the one liner so that you can see like

00:18:54.340 --> 00:19:00.380
what version of Python is active. What is the state of a get repo? If you copy to get repo in as part of

00:19:00.380 --> 00:19:05.380
setting up your Docker container and all those kinds of things. So super simple. If you believe in that,

00:19:05.380 --> 00:19:11.180
I want some tools inside of my container. So when things are not working, I can exec into it and ask

00:19:11.180 --> 00:19:15.540
what's going on. Then this is really awesome. if you don't want that, if you're the opposite side,

00:19:15.600 --> 00:19:20.040
this is not for you. All right, cool. Indeed. So do you, how much time do you spend in Docker?

00:19:20.040 --> 00:19:26.720
very little, but when things are, are not quite working or I'm trying to figure out a command,

00:19:26.720 --> 00:19:30.280
you know, maybe you've got a database running in there. You're like, I really need to see,

00:19:30.280 --> 00:19:34.100
I just want to see what's going on with this. And you know that inside the container, there's some

00:19:34.100 --> 00:19:40.660
database management tools. If you just Docker exec Z shell, and then you start typing, it's like,

00:19:40.660 --> 00:19:45.440
you're, you're, you're on SSH and effectively. So yeah, I'm going to have to check that out.

00:19:45.440 --> 00:19:50.820
So I'm changing my doc. Like I used to use Docker a lot for like actually cross compiling,

00:19:50.820 --> 00:19:57.420
C++ code and I'm using it more now for web stuff. and so, yeah, absolutely. I think it's great.

00:19:57.420 --> 00:20:03.020
And obviously I do a ton of stuff with Docker and we're running the web apps and things, but I don't

00:20:03.020 --> 00:20:08.380
go into the web apps unless I have questions, you know, but when you do, it's nice to just go,

00:20:08.380 --> 00:20:13.400
Oh, okay. Well, here's the thing. And you just make this one of your base layers of your Docker

00:20:13.400 --> 00:20:20.380
image and it builds nice and fast. Nice. Okay. well we're, ran through our topics.

00:20:20.380 --> 00:20:26.420
I don't have any extras today. So you're extra less. I'm extra less. What is the opposite of extra?

00:20:26.420 --> 00:20:35.360
I don't know. I got a few basic maybe. I guess bear the bare minimums. Okay. So first one is I,

00:20:35.360 --> 00:20:43.680
remember I spoke about this thing, this uptime Kuma while ago. Uptime Kuma is great. So it's self-hosted,

00:20:43.680 --> 00:20:49.140
uh, free uptime monitoring. Okay. Well, I put in a bunch of things like, for example,

00:20:49.140 --> 00:20:53.520
if you go to Python bytes and you go to the bottom and hit server status, it'll show you the server

00:20:53.520 --> 00:20:59.380
status of Python bytes, how old the SSL search from let's encrypt are and all those kinds of things.

00:20:59.380 --> 00:21:05.140
Right. Very cool. Well, I turned that on all of my web things, including my personal blog, which this

00:21:05.140 --> 00:21:10.920
might resonate with you, Brian is my personal blog built with Hugo, which is a static site. So it cannot

00:21:10.920 --> 00:21:18.000
crash. It is HTML CSS image. Like it can't crash. Right. And I thought, Oh, I'm going to host this on

00:21:18.000 --> 00:21:24.760
Netlify because Netlify is pretty awesome. Right. Right. Well, I started getting every single day or every

00:21:24.760 --> 00:21:30.740
other day. Your site has a five Oh two error and it's been down for 10 minutes. Now it's back. It's

00:21:30.740 --> 00:21:36.120
been down. What, how could it possibly, it's a static site. So something about the Netlify infrastructure

00:21:36.120 --> 00:21:43.680
was going bonkers. And I will tell you, if you already have an internet server laying around somewhere,

00:21:43.680 --> 00:21:50.200
it's about eight or nine lines of code of internet configuration to just host it yourself. So I switched

00:21:50.200 --> 00:21:55.900
this over to running on server that runs all the other things that I got, but because Netlify was

00:21:55.900 --> 00:22:01.760
crashing. So I think the takeaway is not that in Kennedy.codes, my personal blog website, et cetera,

00:22:01.760 --> 00:22:06.420
is hosted anywhere different. Like why do you care? But if you're hosted on Netlify, maybe point some

00:22:06.420 --> 00:22:12.360
uptime status at your thing, even though it's a static site, shouldn't fail. Look at it anyway. Mine was

00:22:12.360 --> 00:22:17.660
for a week or two. I would say at least two weeks. It has been all sorts of broken temporarily.

00:22:18.280 --> 00:22:19.180
Yeah. Is it better now?

00:22:19.180 --> 00:22:22.260
Yeah. It's perfect. Cause why would it have any problems now? It's on our server.

00:22:22.260 --> 00:22:29.360
Yeah. It's better now. Okay. So that's number one. That's just a check that out. Number two,

00:22:29.360 --> 00:22:38.020
over at Talk Python, if you go to the courses and you go to the apps, we have really nice new version

00:22:38.020 --> 00:22:43.900
that came out, I think last year of our mobile apps for all the courses, including Brian's pytest course.

00:22:43.900 --> 00:22:46.260
You can take it that way. The one that comes from Talk Python that is.

00:22:46.260 --> 00:22:53.140
Well, the guy who wrote this, Lauren Augie, I had him on Talk Python when we talked about Python and

00:22:53.140 --> 00:22:59.380
mobile apps, along with some other folks. Anyway, he used to be a live sound engineer until COVID hit,

00:22:59.380 --> 00:23:05.480
and then he moved over into software development. And he wrote up a really detailed story of his life

00:23:05.480 --> 00:23:10.120
journey. And I just wanted to share that. If people are interested in that, maybe you're making that

00:23:10.120 --> 00:23:13.340
transition as well, then check that out. It's pretty cool. That's pretty cool. Yeah.

00:23:13.340 --> 00:23:22.100
This other short one comes to us from it. Itmar Turner, Turner Trowing says it's time to stop using

00:23:22.100 --> 00:23:27.740
Python 3.8. I can't believe that, but it is. He puts it, he puts it onto our radar that, you know,

00:23:27.740 --> 00:23:35.360
14% of the packages downloaded from PyPI are for Python 3.8 installations. And by the way, next month,

00:23:35.360 --> 00:23:41.240
it's going end of life, out of supported, no security fixes, nothing. So you might not want

00:23:41.240 --> 00:23:45.280
that to be your foundation if you get to choose. And we got like seven days left in September.

00:23:45.280 --> 00:23:51.560
Yeah. I would say it's, yeah, five weeks. What could go wrong? Anyway, just put it on your radar. Maybe

00:23:51.560 --> 00:23:56.200
Python 3.12. It's been out for a long time. Version six of that just came out. So I think we're good.

00:23:56.320 --> 00:24:03.000
You know, 3.12.6. I also want to add to that, that since like, it's been years since I've ever had any,

00:24:03.000 --> 00:24:09.120
any significant issue upgrading. At most, I'll see deprecations that I have to go through and

00:24:09.120 --> 00:24:15.460
clean up or warnings or something, but I, maybe other people have, but I haven't had any issues

00:24:15.460 --> 00:24:22.740
for a really long time upgrading. So. Yeah. Same. I did have an issue with, I can't remember. There

00:24:22.740 --> 00:24:28.740
was some, it was packages that didn't support 3.12. There was some deprecation in there that

00:24:28.740 --> 00:24:33.360
I had to wait three or four weeks before I could start using 3.12 when it first came out for some

00:24:33.360 --> 00:24:39.280
of my apps. However, that's not the same as to say that Python itself is unreliable. You would know

00:24:39.280 --> 00:24:43.960
right away if the imports fail or whatever, right? Like you'll, you'll find out straight away.

00:24:43.960 --> 00:24:48.500
Yeah. And I don't remember the reason why, but on a couple of the projects that I've converted from

00:24:48.500 --> 00:24:57.220
3.8 to 3.12 work projects, I jumped to from 3.8 to 3.10 with no issues or minor issues. And then to

00:24:57.220 --> 00:25:02.000
3.12 fairly easy. And for some reason it just helped me to go from the 3.10 and then 3.12.

00:25:02.000 --> 00:25:02.820
Yeah.

00:25:02.820 --> 00:25:05.340
But anyway, your mileage may vary.

00:25:05.340 --> 00:25:10.220
It's these, it's these kinds of things that if you don't do it, you eventually end up saying,

00:25:10.220 --> 00:25:16.220
we have a 2.6 app and a half million lines of code and it's still running on Python 2.6. So

00:25:16.220 --> 00:25:21.200
don't talk to me about your fancy new libraries and your typing and your async. We're just trying to

00:25:21.200 --> 00:25:24.940
survive, you know, like, but if you keep, if you get into the practice of just like, okay, well,

00:25:24.940 --> 00:25:29.280
let's just keep this stuff moving. All those steps are generally small unless you try to take them

00:25:29.280 --> 00:25:30.260
10 years at a time.

00:25:30.260 --> 00:25:34.420
You're stressing me out, man. PTSD from 2.6.

00:25:35.940 --> 00:25:41.680
All right. Last thing. So passkeys, let me ask you really quick, Brian, are you a passkey user?

00:25:41.680 --> 00:25:44.020
Yes. Well, passkey is in...

00:25:44.020 --> 00:25:44.240
A believer.

00:25:44.240 --> 00:25:46.560
Well, yeah, I use passkeys. Yeah.

00:25:46.560 --> 00:25:52.960
I do too. I've been resisting using passkeys. So passkeys are cryptographic, kind of like,

00:25:52.960 --> 00:25:59.280
almost like SSH keys, but for the normal folks for just web authentication, right? It's a cryptographic

00:25:59.280 --> 00:26:03.940
thing blob that gets put into your whatever thing is signing in. And if it shares that back,

00:26:04.000 --> 00:26:08.920
it's supposed to be dedicated to that instance, it knows it's you. Often you can skip to a phase,

00:26:08.920 --> 00:26:13.840
all those kinds of things, right? But one of the things that really turned me off on passkeys

00:26:13.840 --> 00:26:20.940
is they felt to me like a couple of the tech giants are like, hey, this is a sweet opportunity for

00:26:20.940 --> 00:26:25.720
lock-in. So let's see how much lock-in we can get, you know, Android and Apple, especially,

00:26:25.720 --> 00:26:30.480
right? Like, hey, just save your passkey to your iPhone. What could go wrong? I was like, well...

00:26:30.480 --> 00:26:35.500
I could lose my iPhone. Yeah. If I could lose my iPhone or even if it's synced to iCloud, like what...

00:26:35.500 --> 00:26:40.600
I have a smart TV that says, you know, log in with your password. It's a super pain to type in,

00:26:40.600 --> 00:26:46.800
but you can do it. Or maybe I'll go over to my Windows PC and I have to type in some password to log in.

00:26:46.800 --> 00:26:52.080
A lot of times it'll say like, oh, your Microsoft account is expired. It's login. Log in again at the

00:26:52.080 --> 00:26:57.520
boot screen. So I don't get access to anything. It's like, oh my gosh, this is a pain. But those

00:26:57.520 --> 00:27:02.600
situations get way worse if you have passkeys that are dedicated to, you know, one provider,

00:27:02.600 --> 00:27:09.360
right? That's just mega lock-in. So I realized that if you're a one password user, or I think

00:27:09.360 --> 00:27:14.500
also Bitwarden, I'm a user of both of them and I really like them. If you store your passkeys there,

00:27:14.500 --> 00:27:18.600
all of a sudden they live everywhere. It's beautiful. And if your computer gets destroyed,

00:27:18.600 --> 00:27:23.640
just log into one password or Bitwarden or whatever again, and you have them all again. So if you,

00:27:23.640 --> 00:27:27.460
at least for one password, if you go into the watchtower, there's a section that says,

00:27:27.460 --> 00:27:32.780
show me all the sites that could have passkeys that I don't have stored passkeys for here.

00:27:32.780 --> 00:27:38.140
And it'll help you go through and basically add them to one password, which is a form of lock-in,

00:27:38.140 --> 00:27:45.460
but a much lower grade form of lock-in in my feeling. So anyway, I am now a believer of passkeys,

00:27:45.460 --> 00:27:49.660
I believe. I went through and did that this weekend. I added like 35 accounts or so that have

00:27:49.660 --> 00:27:52.580
passkeys and now life's a little easier. Like GitHub, for example.

00:27:52.580 --> 00:27:54.780
Yeah, nice.

00:27:54.780 --> 00:27:58.880
Yeah. All right. You have the joke for us this week, do you not?

00:27:58.880 --> 00:28:05.800
I do. And I actually, I thought it was going to be a topic. I just had it in my backlog of how to

00:28:05.800 --> 00:28:11.340
monetize a blog. And then I started reading it and realized this is just a hilarious joke.

00:28:11.920 --> 00:28:17.100
And I love it. So I wanted to bring it up here. And so, and you should either, if you're listening

00:28:17.100 --> 00:28:23.640
and not, not on YouTube, you should, watch the, watch the video version or just go check it

00:28:23.640 --> 00:28:28.920
out yourself. I'll, we'll have link in the show notes. Okay. So how to monetize a blog.

00:28:28.920 --> 00:28:34.120
it talks and I actually thought it was going to be advice, but it's just funny. maintaining blog

00:28:34.120 --> 00:28:38.420
can be a lot of work. I start reading it. You don't really need to read it. there's some fun

00:28:38.420 --> 00:28:44.060
font that shows up right away. Like, like here's a, it can become a fairly lucrative venture and the

00:28:44.060 --> 00:28:50.680
become is in this wacky font. I love the M that's cool. and then she would get going down and you

00:28:50.680 --> 00:28:57.200
see these various things like, like timber quest, advertisement, your lumber yard awaits you,

00:28:57.200 --> 00:29:02.720
my Lord, play now. And almost all the clickable things, if you click on them,

00:29:02.720 --> 00:29:07.900
they just like pop up little coins. you don't actually go anywhere. and then

00:29:07.900 --> 00:29:13.320
talks about slapping this bad boy here can start raking in some cash through true primary

00:29:13.320 --> 00:29:20.400
means CPM or CPA. And, and then you just sort of, if it's sort of seems reasonable, but it says,

00:29:20.400 --> 00:29:27.760
look, look, how am I doing so far? I've, I've made 0.123 cents, so far on this. and then,

00:29:27.760 --> 00:29:34.100
uh, you, it, it just adds it up. There's different various, various little links around that.

00:29:34.160 --> 00:29:38.360
If you click on them, it increases the, how much money this person's made, even though it's not real.

00:29:38.360 --> 00:29:45.540
but if you, I just started reading the ads, like there's an ad for minimal effort graphic design,

00:29:45.760 --> 00:29:54.680
um, no proofing time saved. The ads are hilarious. Here's one, free cruise, sign up today,

00:29:54.680 --> 00:30:00.500
uh, with eligible purchase meeting or exceeding value of cruise after which no purchase is necessary.

00:30:02.180 --> 00:30:10.700
of course, click on that guy for some extra, let's see, I'll read one. The more clicks and grizzly bear sales,

00:30:10.700 --> 00:30:16.700
you can squeeze out of your beloved readers, the more of their money you can siphon to spend on cheeseburger deliveries.

00:30:16.700 --> 00:30:19.260
And of course, cheeseburger deliveries is clickable.

00:30:19.260 --> 00:30:20.960
It's gotta be an affiliate link, right?

00:30:20.960 --> 00:30:24.120
Yeah. All these things. let's see.

00:30:24.120 --> 00:30:31.380
here's a little, a little weird thing, ad on the side that looks like a Amazon or eBay thing.

00:30:31.380 --> 00:30:39.140
Friendship assembly, 1595 collapsible by valve, and a, that which molts beneath enclosures.

00:30:39.940 --> 00:30:47.020
Oh, boy. This is bizarre. I love these. I want to scroll down more literal snake oil, vials of freshly squeezing,

00:30:47.020 --> 00:30:56.540
squozen oil from actual snakes. befriend a sandwich. No doctors allowed. The first mystery grab bag of unmarked vitamins is free.

00:30:56.540 --> 00:31:04.640
oh, and then it pops up. We get a pop-up, push notifications. Would you like to enable push notifications

00:31:04.640 --> 00:31:10.640
so you can receive intrusive alert messages like these outside of the browser? Yes. Or ask me later.

00:31:10.640 --> 00:31:19.400
I'm sure I said yes and see if you got a coin for that. Yeah, maybe let's do it again. Another one. Yes. Oh yeah.

00:31:19.400 --> 00:31:27.320
Oh, you did. You're making some money for that. Yeah. And, a weird pop-up cheese cube burger now open. let's see.

00:31:27.320 --> 00:31:33.900
We soon become, oh, it's too bad. You can't see this. This one is, ice cream holding tips.

00:31:33.900 --> 00:31:41.040
uh, there's, we have radishes that will change your life. Add, let's see. huh? Oh, these,

00:31:41.040 --> 00:31:47.900
these are my, these are just my mind-rending god radishes. old school, excuse me,

00:31:47.900 --> 00:31:56.560
a virus was detected on your computer. Send bitcoins. Like a Solaris window. oh, anyway,

00:31:56.560 --> 00:32:01.160
and then you, you just sort of scroll down. It just comes, it becomes even more bizarre. You've got

00:32:01.160 --> 00:32:07.860
side noise text. and then, the spiral. This is awesome. I don't even know.

00:32:07.860 --> 00:32:11.720
So I was like, how do they do some of this stuff? It's pretty cool. It's pretty cool stuff.

00:32:11.720 --> 00:32:16.020
That's how you monetize. That's how you do it. Yeah. If you go all the way down also in,

00:32:16.020 --> 00:32:19.800
in the, if you actually start reading it, it says stuff like there's not actually,

00:32:19.800 --> 00:32:24.220
you just sort of have to spew out lots of words. I didn't even edit this. and then

00:32:24.220 --> 00:32:29.920
way at the bottom, there's a credits, how this was made. And then, this person goes through and

00:32:29.920 --> 00:32:35.520
walks through, basically all of the different, procedures for how, like how to do the spiral,

00:32:35.520 --> 00:32:42.720
how to do the cool font, and all these sort of tricks, with HTML and CSS and whatnot. So

00:32:42.720 --> 00:32:48.780
anyway, just a hilarious little, blog on stupid ads. that's awesome. Andre out there says,

00:32:49.000 --> 00:32:56.360
this is art. It's definitely art. Yeah. Not art, but real time followup. Bitwarden also supports

00:32:56.360 --> 00:33:04.160
pass keys, which Bitwarden being open source and the paid version is insanely affordable. It's like

00:33:04.160 --> 00:33:08.820
a dollar, a couple of dollars a year or something. I can't remember exactly what it is, but maybe that's

00:33:08.820 --> 00:33:14.500
the proper recommendation there, for, for pass keys. But anyway, okay. Cool. Yeah. Cool. Yeah.

00:33:14.500 --> 00:33:18.580
Well, let's call it a show, huh? Yeah. Sounds good. All right. Well, thanks for being here.

00:33:18.580 --> 00:33:19.700
Thank you everyone for listening.

