WEBVTT

00:00:00.020 --> 00:00:05.540
Hello and welcome to Python Bytes, where we deliver Python news directly to your earbuds.

00:00:06.260 --> 00:00:11.480
This is episode 438, recorded June 30th, 2025.

00:00:12.220 --> 00:00:13.000
I am Michael Kennedy.

00:00:13.400 --> 00:00:14.420
And I am Brian Okken.

00:00:14.680 --> 00:00:20.740
And this episode is brought to you by the amazing folks over at Posit and Posit Connect,

00:00:21.060 --> 00:00:24.440
their data science execution and hosting platform,

00:00:25.260 --> 00:00:28.780
and a bunch of other things, which Brian will tell you about shortly.

00:00:29.160 --> 00:00:39.020
But for now, if you want to connect with us, you can do so over at Mastodon or Bluesky or to a lesser degree even on X.

00:00:39.430 --> 00:00:42.640
Although that place has not got as much action these days, sadly.

00:00:44.040 --> 00:00:46.000
But yeah, connect with us over on social.

00:00:46.470 --> 00:00:48.840
Join us on YouTube right now.

00:00:50.080 --> 00:00:50.920
We're recording live.

00:00:50.950 --> 00:00:55.620
We typically do that at 10 a.m. on Mondays, a few minutes after 10.

00:00:56.580 --> 00:01:00.840
we sort of get stuff ready. And when we got it all set, we push go. So you can find out more about

00:01:01.040 --> 00:01:06.100
that and get notified and subscribe, you know, crush the bell, all that sort of stuff over at

00:01:06.300 --> 00:01:13.500
pythonbytes.fm/live. And if you want an extra additional insights into the episode and

00:01:13.500 --> 00:01:18.720
the tools and topics we cover, sign up, become a friend of the show by joining our mailing list.

00:01:19.100 --> 00:01:23.960
And Brian will send out an awesome email that not just lists what we talk about or have in the show

00:01:23.980 --> 00:01:26.140
notes, but way more. It's really, really good. Right, Brian?

00:01:26.540 --> 00:01:28.060
Yeah. I like it a lot.

00:01:28.290 --> 00:01:32.260
I do too. I'm really liking where it is these days. I enjoy reading it. Would you say it's

00:01:32.400 --> 00:01:33.660
cheating though? Do you feel like it's cheating?

00:01:34.120 --> 00:01:35.220
It's definitely cheating. No,

00:01:35.400 --> 00:01:37.580
cheating is okay sometimes.

00:01:37.900 --> 00:01:38.360
It is.

00:01:38.930 --> 00:01:43.980
All right. So let's hop into the first topic. On the Python Morsels website, this is Trey

00:01:44.120 --> 00:01:49.680
Hunter's blog and thing. I'm not sure what you call it. Anyway, it's a training sort of thing.

00:01:50.080 --> 00:01:51.880
He's got a whole bunch of articles about,

00:01:52.100 --> 00:01:54.620
he pulled together a list of all of his cheat sheet articles.

00:01:55.180 --> 00:01:56.620
And I kind of love this.

00:01:56.920 --> 00:01:59.220
So there's some of these that I'm going to pull out a few of my favorites.

00:01:59.440 --> 00:02:02.300
But so Trey Hunter's cheat sheets,

00:02:02.820 --> 00:02:06.140
we've got Python string methods, built-in functions in Python,

00:02:07.320 --> 00:02:09.560
fstrings, converting a string to a date time,

00:02:09.960 --> 00:02:12.240
pathlib, even big O notation.

00:02:12.800 --> 00:02:12.900
Nice.

00:02:13.120 --> 00:02:15.520
The time complexities of different data structures.

00:02:15.840 --> 00:02:16.140
That's cool.

00:02:16.500 --> 00:02:16.580
Anyway.

00:02:18.280 --> 00:02:23.860
Some of these are through, you have to pay to be part of a service to watch some of them, but some of them are free.

00:02:24.260 --> 00:02:25.760
I'm going to highlight a couple of the free ones.

00:02:26.240 --> 00:02:28.660
Python F string tips and cheat sheets.

00:02:29.180 --> 00:02:35.700
So we all love f-strings, but sometimes I can't remember all the different formatting stuff like formatting numbers.

00:02:36.320 --> 00:02:39.480
So this is good to have just some cheat sheets.

00:02:39.560 --> 00:02:46.040
Like how do, if you do want to do zero digits or zero digits or prefix, like you want, you

00:02:46.100 --> 00:02:48.960
want to have like, if you're going to do money, you want dot zero, zero or something.

00:02:50.020 --> 00:02:51.100
And so how do you do that?

00:02:51.220 --> 00:02:53.380
It's point two F nice.

00:02:53.660 --> 00:02:57.120
Or, but it's like the variable and then colon point two.

00:02:57.280 --> 00:03:01.440
Anyway, I'm not going to try to describe it on the podcast, but having all of this in

00:03:01.540 --> 00:03:05.180
here and then occasionally you want like zero padding or space padding or something.

00:03:05.600 --> 00:03:08.580
and so it's good to look up how to do that.

00:03:09.760 --> 00:03:09.980
It's got

00:03:09.980 --> 00:03:10.680
a whole bunch of stuff.

00:03:10.880 --> 00:03:12.200
Space padding, yeah.

00:03:12.600 --> 00:03:12.720
Neat.

00:03:12.980 --> 00:03:16.660
Yeah, those little tricks and formatting tips

00:03:16.880 --> 00:03:21.640
that go into the f-strings or string.format or whatever,

00:03:21.860 --> 00:03:23.780
those are amazing and they're super rich.

00:03:23.960 --> 00:03:25.080
There's a lot you can do with them.

00:03:25.280 --> 00:03:25.980
I didn't know you could

00:03:25.980 --> 00:03:26.840
do thousands of separator.

00:03:26.980 --> 00:03:27.360
That's neat.

00:03:27.680 --> 00:03:27.960
That's cool.

00:03:28.420 --> 00:03:30.500
Yeah, I do that all the time and I combine it.

00:03:30.600 --> 00:03:35.260
I'll do comma 0.2 F and it'll do two decimal places

00:03:35.280 --> 00:03:36.400
Oh, nice groups.

00:03:36.720 --> 00:03:37.020
Okay.

00:03:37.550 --> 00:03:40.400
So f-strings, cheat sheet, that's great.

00:03:40.980 --> 00:03:42.240
Another one, Pathlib module.

00:03:42.660 --> 00:03:45.360
Now, Pathlib actually has got really good documentation,

00:03:46.220 --> 00:03:48.960
but cute, like a nice little cheat sheet.

00:03:49.050 --> 00:03:49.620
It's pretty cool.

00:03:49.880 --> 00:03:53.540
So, you know, how do you read all the text of a file?

00:03:53.760 --> 00:03:55.380
And this, I like his table format.

00:03:55.620 --> 00:03:57.100
This is easy, pretty easy to read.

00:03:57.600 --> 00:03:58.860
Read all the contents of the file.

00:03:59.070 --> 00:04:00.940
Write file contents.

00:04:02.140 --> 00:04:03.840
Ooh, you can just write text with new.

00:04:04.000 --> 00:04:04.780
Creates a new file.

00:04:04.940 --> 00:04:05.740
I didn't know you could do that.

00:04:06.020 --> 00:04:06.280
That's cool.

00:04:08.099 --> 00:04:10.380
Resolving a path to the full path.

00:04:11.980 --> 00:04:16.420
Getting the file name is path.name,

00:04:16.680 --> 00:04:17.840
but if you just want the suffix,

00:04:18.100 --> 00:04:19.019
there's path.suffix.

00:04:19.220 --> 00:04:20.620
And these are all, this makes sense.

00:04:20.780 --> 00:04:25.120
It's just, you know, what is it?

00:04:25.740 --> 00:04:28.260
Like, what is the thing that Pathlib decided to use

00:04:28.270 --> 00:04:28.920
that was obvious?

00:04:29.860 --> 00:04:30.700
It's not always obvious.

00:04:31.080 --> 00:04:33.320
So cool cheat sheet there on Pathlib.

00:04:33.780 --> 00:04:38.300
The other one I want to point out is Python's mini command line utilities.

00:04:38.880 --> 00:04:42.520
And those are things that you just say, like just built into Python, you can say Python

00:04:42.670 --> 00:04:45.300
dash M and then the thing.

00:04:45.640 --> 00:04:47.840
And it's usually an internal standard library thing.

00:04:48.020 --> 00:04:52.540
But if you just run it by itself, some things you can, there's a bunch of stuff you can

00:04:52.700 --> 00:04:52.840
do.

00:04:53.740 --> 00:04:58.840
I was, there's a general purpose, the general purpose ones, we like a lot of people know

00:04:58.860 --> 00:05:02.560
that you have http.server does a thing.

00:05:03.480 --> 00:05:05.100
But JSON tool is kind of nice.

00:05:05.200 --> 00:05:09.620
You can do JSON tool to kind of print out some JSON nicely.

00:05:10.380 --> 00:05:13.900
Calendar is a nice cheat sheet for just being able to print out a calendar

00:05:14.120 --> 00:05:16.980
and figure out when, like, and you can give it a date.

00:05:17.040 --> 00:05:18.600
If you just do calendar, it'll print today,

00:05:19.140 --> 00:05:22.000
but you can give it a special date and it'll print that out

00:05:22.060 --> 00:05:26.580
if you're trying to figure out, wow, in 1996 was April 3rd on Monday,

00:05:26.860 --> 00:05:28.400
or, you know, you can do things like that.

00:05:28.460 --> 00:05:40.280
And my favorite is especially handy on Windows section because I kind of grew up on Solaris, actually, but Unix environments.

00:05:40.690 --> 00:05:43.860
And so but I spend my days on a Windows machine.

00:05:44.460 --> 00:05:50.920
So I get like sad if I don't know where zip or gzip or tar are and things like that.

00:05:50.990 --> 00:05:52.720
I don't really use tar that much these days.

00:05:52.900 --> 00:05:56.740
But you can use these things directly from Python if you have Python installed, like

00:05:57.060 --> 00:06:01.860
Python-mgzip, and you can have zip and unzip utilities.

00:06:02.280 --> 00:06:02.800
This is great.

00:06:03.160 --> 00:06:08.440
FTP, so many things that are just standard on Linux that aren't on Windows.

00:06:08.600 --> 00:06:11.200
You can install them, but if you have Python, you already have them installed.

00:06:11.340 --> 00:06:12.260
So that's pretty neat.

00:06:12.560 --> 00:06:14.880
Anyway, those are some fun cheat sheets.

00:06:15.320 --> 00:06:16.140
There's a bunch of others, too.

00:06:16.400 --> 00:06:18.640
So thanks, Trey, for pulling all of these together.

00:06:19.000 --> 00:06:19.840
Yeah, those are pretty cool.

00:06:20.200 --> 00:06:22.660
And the CLI tools, there's a lot of them.

00:06:23.620 --> 00:06:29.760
Yeah, there really are. This is a big article. So yeah, I think we've covered it before, but

00:06:30.000 --> 00:06:32.380
I think so. But now it's grouped in with all the other things.

00:06:32.820 --> 00:06:32.960
Yeah.

00:06:33.590 --> 00:06:41.680
Indeed. All right. Let's talk about something that I'm excited about, Automatisch. So

00:06:42.700 --> 00:06:49.759
Automatisch is automatic in German. And this is a tool called, which is an open source alternative

00:06:49.780 --> 00:06:56.540
to Zapier. So Automatish helps you automate your business processes without coding. They have a,

00:06:57.080 --> 00:07:01.840
you can sign up for this instead, which is kind of just like Zapier. So, you know, I mean,

00:07:02.100 --> 00:07:06.700
good for them and all, but the real reason that it's interesting to me is you can self-host it.

00:07:07.220 --> 00:07:14.240
Okay. Yeah. So this is not, it is not a Python built tool, but I don't really think it matters.

00:07:14.370 --> 00:07:19.740
I think it's a tool that would be super useful for people doing Python things. You know, like I

00:07:19.740 --> 00:07:25.660
tool to listen to Slack. And when somebody posts something with this word in it, I want it to

00:07:26.160 --> 00:07:30.220
call a web service that's written in FastAPI or, you know, something like that, right?

00:07:30.600 --> 00:07:31.280
So yeah,

00:07:31.360 --> 00:07:37.060
it's super cool. It's well loved. It's got 12,000 plus GitHub stars. And if you've used

00:07:37.400 --> 00:07:41.520
Zapier, it feels a lot like it. You know, you go in there and say like this thing they have on the

00:07:41.820 --> 00:07:46.880
homepage that's like, well, when somebody posts something on Twitter, then I want you to do

00:07:46.900 --> 00:07:51.520
something in Slack, right? Maybe if somebody posts something that talks about our brand,

00:07:52.080 --> 00:07:57.300
then post into the marketing Slack, right? I don't know, just making stuff up, right? So super cool.

00:07:57.370 --> 00:08:01.760
It says it's great for companies that are dealing with sensitive data. If you're in healthcare or

00:08:01.840 --> 00:08:07.920
finance, or if you're based in Europe and you were subjected to the GDPR, honestly, most people are.

00:08:07.950 --> 00:08:12.460
If you have European customers as well, it's only don't interact with Europe, are you not really?

00:08:12.800 --> 00:08:14.540
and you don't want to share that information with cloud services,

00:08:15.100 --> 00:08:18.700
it's Docker Compose Up, and you've got your own Zapier,

00:08:19.020 --> 00:08:19.760
which I think is pretty cool.

00:08:19.900 --> 00:08:24.180
It's open source and doesn't have really that much vendor lock-in.

00:08:24.280 --> 00:08:27.780
I mean, there's some lock-in to the app, but not into them per se

00:08:27.940 --> 00:08:31.300
because you have the source code, I guess, is the motivation.

00:08:31.460 --> 00:08:33.560
If you go look at all the integrations, there's quite a few.

00:08:33.860 --> 00:08:39.260
Airtable, AppRite, ClickUp, Datastore, DeepL, Discord, Disqus,

00:08:40.159 --> 00:08:41.180
Flickr, how about that?

00:08:41.919 --> 00:08:44.640
GitHub, GitLab, Google Calendar, and so on, right?

00:08:44.810 --> 00:08:47.200
Quite a few things you can connect with

00:08:47.940 --> 00:08:50.380
into, out of, RSS, and so on.

00:08:50.780 --> 00:08:52.660
Webhooks, which is the one I was talking about, right?

00:08:53.100 --> 00:08:53.460
That's

00:08:53.460 --> 00:08:55.060
kind of your, call my Python code

00:08:55.160 --> 00:08:56.800
when something and one of these other things happens

00:08:57.140 --> 00:08:57.720
or vice versa.

00:08:58.130 --> 00:08:58.440
What do you think?

00:08:58.560 --> 00:08:58.940
Kind of cool, right?

00:08:59.200 --> 00:09:01.260
Yeah, that was pretty neat.

00:09:01.560 --> 00:09:03.040
Yeah, and all you got to do is

00:09:03.140 --> 00:09:05.240
it comes with the Docker config already,

00:09:05.620 --> 00:09:07.420
and they do some pretty nice tricks, actually.

00:09:07.550 --> 00:09:09.680
So they've got a Docker compose file, like I said,

00:09:09.940 --> 00:09:11.720
and they have a Docker image.

00:09:12.080 --> 00:09:15.460
and Automatish IO, which it's just based on.

00:09:15.620 --> 00:09:17.060
So you don't even really have to build it.

00:09:17.060 --> 00:09:18.620
You just, you know, pull the thing.

00:09:18.700 --> 00:09:20.820
And once you have it, you're good to go and you run it.

00:09:20.880 --> 00:09:22.020
And one of the things they do, I thought,

00:09:22.160 --> 00:09:24.300
just, you know, people who are in the Docker land.

00:09:24.680 --> 00:09:27.980
So the Docker compose endpoint or entry point rather

00:09:28.460 --> 00:09:29.780
runs this shell script.

00:09:30.240 --> 00:09:32.700
And the shell script actually goes and it looks

00:09:32.760 --> 00:09:36.480
and it says, if you don't have a.env file already set up,

00:09:36.680 --> 00:09:38.320
like if you didn't set one and copied over,

00:09:38.680 --> 00:09:46.460
It'll do things like set up random SSH or random rather encryption keys and web hook secrets and other types of things.

00:09:46.890 --> 00:09:48.120
And then it'll write that for you.

00:09:48.540 --> 00:09:51.000
So if you don't have an environment file, it'll make it.

00:09:51.220 --> 00:09:54.640
And then it'll like move it over and use that as part of your execution.

00:09:54.910 --> 00:09:57.480
So it kind of handles some of that setup that you always have to do.

00:09:57.480 --> 00:09:59.580
And you're like, it'll say, enter your secret here.

00:09:59.760 --> 00:10:00.720
Make sure you randomize this.

00:10:00.840 --> 00:10:02.460
Don't leave it the default or you might get hacked.

00:10:02.580 --> 00:10:03.360
You know, that kind of stuff.

00:10:03.620 --> 00:10:03.880
Yeah.

00:10:04.220 --> 00:10:04.280
Yeah.

00:10:04.350 --> 00:10:06.700
I just thought that was kind of a cool little technique there doing it.

00:10:06.860 --> 00:10:20.460
I just saw on Bluesky, I think somebody commenting that instead of putting their API keys in their source code, they changed the name to, this is not my API key.

00:10:21.900 --> 00:10:22.260
Nice.

00:10:23.880 --> 00:10:24.480
Not really good.

00:10:25.020 --> 00:10:25.380
Looking at

00:10:25.380 --> 00:10:29.500
the plans, though, the open source doesn't have any limits.

00:10:29.580 --> 00:10:37.240
So for instance, Zapier has a free plan also, but it's limited to how much you can use it.

00:10:37.700 --> 00:10:42.440
But 100 tasks per month, but the open source has no limit on the automatic.

00:10:43.180 --> 00:10:43.980
Yeah, that's

00:10:43.980 --> 00:10:44.740
super cool.

00:10:44.940 --> 00:10:50.800
So yeah, like I said, I think you just, if you want, you just run this on your own server and it does its own thing.

00:10:50.940 --> 00:10:51.900
It looks pretty vibrant, right?

00:10:51.980 --> 00:10:54.140
It's got almost 1,000 forks, 12,000 stars.

00:10:54.520 --> 00:10:54.960
It seems

00:10:54.960 --> 00:10:55.840
like it might be

00:10:55.840 --> 00:10:58.220
worth checking out if this kind of thing is something you're looking for.

00:10:58.500 --> 00:11:00.560
I haven't decided if it is for me or not yet, but I

00:11:00.560 --> 00:11:01.280
kind

00:11:01.280 --> 00:11:01.760
of want to play with it.

00:11:01.980 --> 00:11:06.540
So I was curious, like a number of forks, is that like, is high good or?

00:11:06.980 --> 00:11:07.580
I think so.

00:11:07.980 --> 00:11:13.480
Well, to me, the number of forks indicates in a healthy project, how many people want

00:11:13.480 --> 00:11:14.240
to contribute back?

00:11:14.340 --> 00:11:18.120
Because if you're going to fork it and then PR, do a PR back, you can't do it directly.

00:11:18.420 --> 00:11:19.220
Like how many contributors?

00:11:19.520 --> 00:11:20.100
There's not that

00:11:20.100 --> 00:11:20.340
many.

00:11:20.580 --> 00:11:21.300
Maybe like save it.

00:11:21.560 --> 00:11:23.700
But you know, if you're doing this for your business, you probably fork it.

00:11:23.760 --> 00:11:25.700
Like we just need a copy just in case.

00:11:26.040 --> 00:11:33.880
I think where it might be a bad, bad thing is where there's been like a big reaction to like a change in an open source license or something.

00:11:33.890 --> 00:11:36.500
And people are like, I'm going to grab it real quick.

00:11:36.870 --> 00:11:37.440
You know what I mean?

00:11:37.940 --> 00:11:38.260
Like I'm

00:11:38.260 --> 00:11:42.500
thinking of Redis or some other other things where there was like drama.

00:11:42.850 --> 00:11:43.240
You know what I mean?

00:11:43.450 --> 00:11:45.260
I don't know that there's any drama about this.

00:11:45.290 --> 00:11:46.300
I haven't heard of any drama.

00:11:46.580 --> 00:11:46.640
So

00:11:46.640 --> 00:11:55.620
I was just thinking about that, like the forks, because the yeah, like you said, it's you have to fork it to contribute or and some people fork it.

00:11:55.700 --> 00:11:56.460
just to play with it.

00:11:57.280 --> 00:12:00.520
But then also that doesn't mean that there's,

00:12:00.680 --> 00:12:02.880
there's 800 supported forks.

00:12:03.060 --> 00:12:03.420
They're just.

00:12:03.660 --> 00:12:03.920
Oh no.

00:12:04.560 --> 00:12:04.680
Yeah.

00:12:04.890 --> 00:12:06.000
So for me,

00:12:06.200 --> 00:12:07.500
there's kind of two reasons I fork stuff.

00:12:07.800 --> 00:12:07.980
One,

00:12:08.070 --> 00:12:10.280
because I want to contribute or two and like,

00:12:10.500 --> 00:12:11.460
this is really important.

00:12:12.020 --> 00:12:14.420
What if it were just to go away for some random reason?

00:12:14.630 --> 00:12:15.280
I just want to copy.

00:12:15.470 --> 00:12:15.960
You know what I mean?

00:12:16.240 --> 00:12:16.640
Oh yeah.

00:12:17.160 --> 00:12:17.220
Yeah.

00:12:17.480 --> 00:12:17.720
All right.

00:12:17.920 --> 00:12:18.020
Yeah.

00:12:18.260 --> 00:12:18.320
Cool.

00:12:18.400 --> 00:12:18.740
So those are,

00:12:18.860 --> 00:12:19.320
those are the two,

00:12:19.660 --> 00:12:19.780
right?

00:12:19.880 --> 00:12:24.540
Like I might fork court and flask because talk Python is based on those

00:12:24.620 --> 00:12:24.740
things.

00:12:25.050 --> 00:12:25.280
All right.

00:12:25.360 --> 00:12:27.920
And I don't really necessarily need to contribute to them,

00:12:28.360 --> 00:12:31.120
but I kind of just want to have a copy, you know, because it's so important.

00:12:31.940 --> 00:12:32.100
Yeah,

00:12:32.210 --> 00:12:34.180
I guess that would be a way to pin it as well,

00:12:34.260 --> 00:12:35.820
if you're just pulling your own fork.

00:12:36.240 --> 00:12:37.440
Anyway, we're kind of getting on a tangent.

00:12:39.440 --> 00:12:40.540
No, no way.

00:12:41.200 --> 00:12:41.800
Let's bring it back.

00:12:42.100 --> 00:12:42.320
All right.

00:12:42.610 --> 00:12:45.820
Well, let's thank our sponsor, Posit Connect.

00:12:46.300 --> 00:12:49.200
This episode of Python Bytes is brought to you by the folks at Posit.

00:12:49.540 --> 00:12:52.600
Posit has made a huge investment in the Python community lately.

00:12:53.100 --> 00:12:54.660
Known originally for our studio,

00:12:54.700 --> 00:12:59.720
they've been building out a suite of tools and services for Python. Today, I want to focus on

00:12:59.900 --> 00:13:05.480
hosting your Python-based data science workloads. This includes dashboards, reports, plots,

00:13:05.900 --> 00:13:11.340
interactive web apps, all the way to custom Flask and Django apps. Their service is Posit Connect.

00:13:11.660 --> 00:13:16.940
Posit Connect makes it easy for a data scientist to share work built on Python code. If you have a

00:13:17.140 --> 00:13:23.900
Streamlit app dashboard, Plotly interactive plots, or FastAPI service, or even a Quarto report,

00:13:24.240 --> 00:13:29.520
Just give Posit Connect the code it needs to maintain the asset and Connect automatically does the rest.

00:13:29.830 --> 00:13:32.940
Connect will manage your APIs and serve your interactive apps.

00:13:33.320 --> 00:13:37.760
If and if desired, update your ports and dashboards on a scheduled basis.

00:13:38.140 --> 00:13:38.480
That's cool.

00:13:38.780 --> 00:13:39.140
That's right.

00:13:39.380 --> 00:13:44.520
No more need to explain to the stakeholders why the dashboard or plot stopped updating last week.

00:13:44.840 --> 00:13:51.580
You get to focus on your data science and leveraging your skill set while Connect makes you look good, keeping your code running in private.

00:13:51.980 --> 00:13:59.500
With Connect, you get a private URL on your Connect server, ensuring that your asset is continuously available to your stakeholders.

00:13:59.980 --> 00:14:03.040
You can control which users have access to the asset.

00:14:03.360 --> 00:14:07.520
Let Posit Connect handle the delivery and DevOps involved in sharing your work.

00:14:07.820 --> 00:14:09.540
You focus on what you do best.

00:14:09.920 --> 00:14:15.960
So if you work on a data science team, you owe it to you and your organization to check out Posit Connect.

00:14:16.380 --> 00:14:22.420
Visit pythonbytes.fm/connect today and get a three-month free trial and see if it's a good fit.

00:14:22.660 --> 00:14:24.980
That's pythonbytes.fm/connect.

00:14:25.240 --> 00:14:27.520
The link is in your podcast player show notes.

00:14:27.880 --> 00:14:30.260
Thank you so much, Posit, for supporting Python Bytes.

00:14:30.440 --> 00:14:32.620
Definitely. Thank you, Posit. Very cool service.

00:14:33.160 --> 00:14:34.320
All right, Brian,

00:14:34.620 --> 00:14:37.340
you probably don't remember mureq,

00:14:38.840 --> 00:14:42.460
but it is something we covered way back in 2022.

00:14:42.540 --> 00:14:43.900
M-U-R

00:14:43.900 --> 00:14:44.540
-E-Q,

00:14:44.720 --> 00:14:45.280
as

00:14:45.280 --> 00:14:46.440
in mu,

00:14:46.520 --> 00:14:49.260
the micro symbol in

00:14:49.260 --> 00:14:49.660
science.

00:14:50.550 --> 00:14:54.260
And the idea of that was we're going to have the minimal,

00:14:54.770 --> 00:14:59.720
the most minimal version of request the library as possible.

00:15:00.100 --> 00:15:01.280
So that's fun.

00:15:01.280 --> 00:15:04.660
And it's really cool for times you don't want to have external dependencies.

00:15:05.180 --> 00:15:08.699
You can just copy the one file into your project

00:15:08.720 --> 00:15:12.320
or just take the code and jam it at the end of your project

00:15:12.560 --> 00:15:13.540
or however you want to do it, right?

00:15:13.840 --> 00:15:14.000
Yeah.

00:15:14.520 --> 00:15:17.720
So Harold Martin sent us a note, said,

00:15:17.800 --> 00:15:21.680
hey, I have updated this project, forked, I believe,

00:15:21.900 --> 00:15:25.000
and created a new one, updated for murex typed.

00:15:25.500 --> 00:15:30.640
So it's like the murex, but very deeply typed and type checked, right?

00:15:30.860 --> 00:15:34.340
So it's not only type checked, it's type checked with mypy,

00:15:34.680 --> 00:15:37.280
with Pyrefly and Ty, T-Y rather.

00:15:37.760 --> 00:15:43.280
So that's pretty modern to be type checked with the two major type checkers we talked about recently, right?

00:15:43.680 --> 00:15:43.760
Yeah.

00:15:43.760 --> 00:15:44.120
It's pretty cool.

00:15:44.440 --> 00:15:44.540
Yeah.

00:15:44.940 --> 00:15:45.040
Neat.

00:15:45.160 --> 00:15:45.260
Yeah.

00:15:45.610 --> 00:15:46.920
So why do you care about this?

00:15:47.170 --> 00:15:54.060
Well, like I said, it's a single file, zero dependency alternative to requests, but works on modern tooling.

00:15:54.150 --> 00:15:54.800
You can open it up.

00:15:54.900 --> 00:15:58.580
It's literally murec.py and you just copy this puppy in.

00:15:59.020 --> 00:16:03.500
But if you just look in here, you can see, you know, like the default timeout is a colon float.

00:16:04.100 --> 00:16:08.820
And the headers are a mutable mapping of string string or an HTTP message.

00:16:09.120 --> 00:16:12.300
And there's like, you look at the typing, like there's some of these down here that are pretty

00:16:12.500 --> 00:16:12.740
gnarly.

00:16:13.760 --> 00:16:15.180
I'm glad I didn't have to write them.

00:16:15.540 --> 00:16:20.740
Like this yield response has headers or a list of tuples of strings of strings, or it could

00:16:20.740 --> 00:16:23.060
be none with a default of none and so on.

00:16:23.060 --> 00:16:23.180
Right.

00:16:23.540 --> 00:16:27.140
So pretty neat that this is put together by Harold.

00:16:27.380 --> 00:16:28.480
And I like the idea of it.

00:16:28.480 --> 00:16:33.499
I think this is something that we're going to see more of in Python, not because people

00:16:33.540 --> 00:16:36.720
are necessarily seeking out stuff like murex-typed.

00:16:37.010 --> 00:16:39.080
Although if it already exists, you might as well, right?

00:16:39.380 --> 00:16:42.340
But because I think LLMs are going to encourage people to go,

00:16:42.490 --> 00:16:44.340
I really just need to call the one function.

00:16:44.660 --> 00:16:46.700
I know it's this huge library and it does all these things,

00:16:46.900 --> 00:16:49.160
but I just, hey, chat, give me a function.

00:16:49.340 --> 00:16:50.260
Does this, does it work?

00:16:50.440 --> 00:16:52.840
All right, no dependencies, all that kind of stuff, right?

00:16:52.940 --> 00:16:54.240
So there's a couple of cool benefits

00:16:54.760 --> 00:16:58.020
to not having dependencies that you have to worry about.

00:16:58.070 --> 00:17:00.840
And by the way, it's the same API as requests.

00:17:01.320 --> 00:17:03.460
So if you have requests, you could use this.

00:17:03.560 --> 00:17:05.579
You could just change the import statement,

00:17:05.680 --> 00:17:08.959
or you could even do import murect as requests

00:17:09.260 --> 00:17:10.760
and then don't touch the rest of your code.

00:17:10.780 --> 00:17:11.180
You know what I mean?

00:17:11.420 --> 00:17:12.839
So it says, why do you even care about this?

00:17:13.199 --> 00:17:15.160
Well, apparently it's quite a bit better

00:17:15.520 --> 00:17:16.579
in terms of memory usage.

00:17:17.040 --> 00:17:20.480
So like standard Python, 7.4 megs to run on,

00:17:20.660 --> 00:17:23.540
I don't know, apparently Ubuntu on AMD 64.

00:17:24.060 --> 00:17:27.640
But if you go and run murect and you import it,

00:17:27.780 --> 00:17:29.180
picks up in some more libraries,

00:17:29.760 --> 00:17:32.100
do an actual function call, it's 15 megs.

00:17:32.400 --> 00:17:34.900
But if you do the same thing with just importing requests,

00:17:35.340 --> 00:17:36.560
it's like almost double.

00:17:36.740 --> 00:17:41.540
It's like import requests basically adds, quick math, 14 megs to your

00:17:42.040 --> 00:17:44.400
what otherwise would be 7 megs of memory usage, right?

00:17:44.620 --> 00:17:47.960
And if you make a request, it's then three more megs,

00:17:48.500 --> 00:17:50.520
which is not a ton a lot of times.

00:17:50.780 --> 00:17:53.420
But if it's something you care about, it is a lot less.

00:17:53.680 --> 00:17:55.440
And basically, Harold points out here,

00:17:55.900 --> 00:17:59.480
there is a lot of stuff that has happened inside of Python to make it better.

00:17:59.560 --> 00:18:05.360
in terms of these things like, for example, PEP 476,

00:18:05.820 --> 00:18:09.780
which begin validating TLS certificates inside of Python's libraries.

00:18:10.020 --> 00:18:14.920
And Python 3 has HTTP.client, which does a bunch of similar stuff.

00:18:14.980 --> 00:18:18.340
So it's pretty easy to wrap that in the same API is what he's saying.

00:18:18.520 --> 00:18:21.660
And finally, no supply chain attacks.

00:18:22.120 --> 00:18:25.100
You can get this one file, validate it, put it in there,

00:18:25.140 --> 00:18:26.780
and then it's not going to get updated.

00:18:26.840 --> 00:18:29.180
it's about 500 lines of code.

00:18:29.700 --> 00:18:30.860
So it's not super long

00:18:31.080 --> 00:18:32.300
and like a good chunk of that's typing

00:18:32.720 --> 00:18:33.260
and documentation.

00:18:33.640 --> 00:18:33.760
Cool.

00:18:34.060 --> 00:18:34.200
Yeah.

00:18:34.740 --> 00:18:34.900
Anyway,

00:18:35.600 --> 00:18:36.800
I thought I'd give that a shout out

00:18:36.920 --> 00:18:38.580
because I'm all about having

00:18:39.060 --> 00:18:40.880
nice typed libraries to work with.

00:18:41.240 --> 00:18:42.920
And I like this idea of vendoring in

00:18:43.280 --> 00:18:44.980
when you really just need a simple little thing.

00:18:45.280 --> 00:18:47.040
Just vendor in something if you can

00:18:47.420 --> 00:18:48.080
and pretty good.

00:18:48.320 --> 00:18:48.480
Yeah.

00:18:48.740 --> 00:18:51.440
It's the opposite of LeftPad.

00:18:51.840 --> 00:18:52.740
Remember LeftPad, right?

00:18:53.000 --> 00:18:53.220
Yeah.

00:18:53.540 --> 00:18:53.680
Yeah.

00:18:53.780 --> 00:18:54.660
With the JavaScript thing

00:18:54.820 --> 00:18:55.920
that took down like the world.

00:18:56.580 --> 00:18:57.320
But no, right pad.

00:18:57.450 --> 00:18:57.820
I don't know.

00:18:58.080 --> 00:18:58.960
What's up with that?

00:18:59.040 --> 00:18:59.180
So

00:18:59.180 --> 00:19:00.960
left pad, let's see.

00:19:01.300 --> 00:19:01.940
When was this?

00:19:02.300 --> 00:19:03.640
I think this is the same guy.

00:19:03.670 --> 00:19:07.680
I think he got ultimately, yeah, it's got its own Wikipedia page.

00:19:08.060 --> 00:19:10.240
This guy took down the left pad package.

00:19:10.540 --> 00:19:13.160
There was a separate package you got to left pad a string.

00:19:14.480 --> 00:19:16.000
So I just sit and write in the job.

00:19:16.860 --> 00:19:19.620
You know, npm install left pad, basically, ornpm.

00:19:20.020 --> 00:19:20.100
And

00:19:20.100 --> 00:19:20.580
what they say

00:19:20.580 --> 00:19:21.580
of it, two-year dependencies, right?

00:19:21.860 --> 00:19:25.799
Guy got mad that people were taking advantage of his open source work

00:19:25.820 --> 00:19:27.680
and deleted it or something like that.

00:19:28.420 --> 00:19:30.040
And it just, it took down,

00:19:30.470 --> 00:19:33.500
like it took down React and some other things.

00:19:35.040 --> 00:19:36.420
Facebook, PayPal, Netflix.

00:19:36.570 --> 00:19:39.060
Yeah, this caused a widespread disruption

00:19:39.250 --> 00:19:41.320
as technology corporations, small and large,

00:19:41.440 --> 00:19:43.440
including Facebook, PayPal, Netflix, and Spotify,

00:19:43.950 --> 00:19:45.200
who use a lot of bad,

00:19:45.490 --> 00:19:47.540
their software products could no longer build their packages.

00:19:49.220 --> 00:19:50.480
I mean, it's bad.

00:19:51.210 --> 00:19:53.179
Is this, there was another guy

00:19:53.740 --> 00:19:57.100
who also got arrested for creating a bomb.

00:19:57.240 --> 00:19:58.580
And I'm not sure if this is the same guy.

00:19:58.700 --> 00:19:59.420
Maybe that was a Python guy.

00:19:59.500 --> 00:20:01.420
One of these guys that like did something like this also.

00:20:01.840 --> 00:20:04.720
It might be a sign of like an unstable situation.

00:20:05.100 --> 00:20:06.900
But anyway, it's kind of funny

00:20:07.160 --> 00:20:09.800
and kind of just over like the most extreme example

00:20:09.880 --> 00:20:10.480
you can look at.

00:20:10.840 --> 00:20:13.180
But stuff like this, this Vendorian N

00:20:13.640 --> 00:20:15.380
for these simple things is like, okay,

00:20:15.740 --> 00:20:18.060
you're no longer subjected to that weirdness, right?

00:20:18.380 --> 00:20:18.520
Yeah.

00:20:18.860 --> 00:20:20.260
I guess the opposite side is

00:20:20.480 --> 00:20:22.940
if there were a security vulnerability in the code,

00:20:23.200 --> 00:20:27.280
not malicious necessarily, but something they missed and they updated,

00:20:27.740 --> 00:20:29.200
you're not going to get that fixed either, right?

00:20:29.260 --> 00:20:30.520
So you got to consider those things.

00:20:30.740 --> 00:20:33.840
But being a wrapper on the built-in HTTP.client is probably fine.

00:20:34.100 --> 00:20:34.620
Interesting.

00:20:34.720 --> 00:20:36.160
I was just looking up our history.

00:20:36.680 --> 00:20:37.920
You can search Python Bytes.

00:20:38.960 --> 00:20:41.900
And even though LeftPad happened in 2016,

00:20:42.340 --> 00:20:44.840
the same year that we started Python Bytes,

00:20:45.260 --> 00:20:52.640
that term doesn't show up until 2021, four years ago.

00:20:53.040 --> 00:20:53.600
So interesting.

00:20:54.580 --> 00:20:55.020
Interesting.

00:20:55.090 --> 00:20:57.200
I wonder what I might have been talking about.

00:20:57.680 --> 00:21:00.100
Probably we were talking about something analogous like this, right?

00:21:00.420 --> 00:21:02.360
Like we're not covering left pad, but like it's a

00:21:02.360 --> 00:21:03.000
left pad

00:21:03.000 --> 00:21:03.760
like thing.

00:21:04.840 --> 00:21:05.960
Left pad so bad.

00:21:06.240 --> 00:21:06.540
Probably.

00:21:07.020 --> 00:21:07.080
Yeah.

00:21:07.460 --> 00:21:07.840
Yeah, probably.

00:21:08.540 --> 00:21:08.800
Anyway.

00:21:09.410 --> 00:21:09.560
Cool.

00:21:09.920 --> 00:21:10.080
Yeah,

00:21:10.470 --> 00:21:10.580
indeed.

00:21:11.600 --> 00:21:12.400
Last one for you.

00:21:12.700 --> 00:21:13.000
Yeah.

00:21:13.210 --> 00:21:16.520
I want to talk about command line interfaces.

00:21:17.240 --> 00:21:19.600
Actually, not command line interfaces, really shells.

00:21:20.100 --> 00:21:28.180
So Frank Wiles posted MyCLIWorld, and he's talking about shell customizations.

00:21:29.390 --> 00:21:29.800
Let's see.

00:21:30.350 --> 00:21:35.440
He says, when I was first starting out, I spent a bunch of my time SSHed into a remote server,

00:21:36.320 --> 00:21:38.580
so didn't customize his shell that much.

00:21:38.770 --> 00:21:44.460
But now he's mostly doing web development on a local laptop, which I realized that it's

00:21:44.460 --> 00:21:45.420
a big change for me, too.

00:21:45.700 --> 00:21:50.060
I am not SSHing very much anymore.

00:21:50.560 --> 00:21:52.720
So customizations are easier.

00:21:53.280 --> 00:21:56.220
So I kind of love these sorts of articles of like,

00:21:56.240 --> 00:21:58.880
these are the customizations I use.

00:21:59.300 --> 00:22:04.300
But he also listed a bunch of cool tools that he's using.

00:22:04.800 --> 00:22:06.520
So I am actually kind of jealous.

00:22:06.660 --> 00:22:08.920
He uses Starship for the prompt,

00:22:09.340 --> 00:22:11.020
and he's got all sorts of stuff in here.

00:22:11.680 --> 00:22:14.160
And this is like what branch he's looking at,

00:22:15.060 --> 00:22:17.920
what version of the whatever package he's in,

00:22:19.340 --> 00:22:21.840
which Python version he's using in his virtual environment.

00:22:22.000 --> 00:22:22.700
This is kind of nice.

00:22:23.000 --> 00:22:23.140
I

00:22:23.140 --> 00:22:24.840
tried

00:22:24.840 --> 00:22:27.480
Starship, and something about my setup,

00:22:27.720 --> 00:22:30.060
it slowed my shell down too much.

00:22:30.540 --> 00:22:32.020
So I'm not using Starship anymore.

00:22:33.160 --> 00:22:37.500
But I wanted to pop over, not go through his full article,

00:22:37.800 --> 00:22:39.720
but talk about some of the things he brought up.

00:22:41.000 --> 00:22:43.700
DIRenv, D-I-R-E-N-V is one of the tools.

00:22:44.700 --> 00:22:49.679
And this is to before each prompt during VDR,

00:22:51.030 --> 00:22:52.120
however you pronounce that,

00:22:52.460 --> 00:22:55.020
checks for the existence of environment RC files,

00:22:55.280 --> 00:22:59.280
ENV RC and optionally.ENV files and does any settings.

00:22:59.540 --> 00:23:00.760
So like we were talking about

00:23:00.940 --> 00:23:02.500
with one of your previous tools,

00:23:03.520 --> 00:23:07.360
if you've got like API keys and stuff hiding in a.ENV,

00:23:07.430 --> 00:23:09.480
you can have that automatically loaded up

00:23:10.060 --> 00:23:11.980
when you go into the correct directory.

00:23:12.420 --> 00:23:12.980
It's kind of nice.

00:23:13.700 --> 00:23:20.120
Then Zoxide, which this is definitely one that it was been on my list to try out.

00:23:20.540 --> 00:23:32.680
It's inspired by AutoJump in Z, but this is a utility that keeps track of where you've been before and which command line thing.

00:23:33.010 --> 00:23:35.300
Basically, it's a smarter history sort of thing.

00:23:35.870 --> 00:23:39.380
So I definitely want to try that out again.

00:23:40.420 --> 00:23:43.420
FD, also FD seems like a cool tool.

00:23:44.100 --> 00:23:45.840
find entries to your file system.

00:23:46.120 --> 00:23:51.280
So it's a, instead of the pattern of find a name,

00:23:51.700 --> 00:23:52.580
you know, finding a name,

00:23:52.860 --> 00:23:55.620
name of a file and finding that somewhere,

00:23:55.920 --> 00:23:57.520
it's a better way to find stuff.

00:23:57.940 --> 00:23:59.760
And then if you're actually looking in,

00:24:00.100 --> 00:24:01.200
wanting to look at the contents,

00:24:01.880 --> 00:24:03.920
Ack, I think I'm sure we've covered Ack before.

00:24:04.380 --> 00:24:08.120
Ack is a great tool for really quickly looking,

00:24:08.620 --> 00:24:10.820
it's better than grep and said sort of things.

00:24:11.580 --> 00:24:15.560
Another fun thing is a two in, which I definitely want to try.

00:24:15.880 --> 00:24:19.700
It's making your shell magical, syncing your history.

00:24:20.020 --> 00:24:27.640
So having your history not, I have a problem with looking for a command that is in a different

00:24:27.840 --> 00:24:31.780
window and so it's not in the same history or it got deleted or something.

00:24:31.940 --> 00:24:35.080
So I want to check this out for backing up my shell history.

00:24:35.420 --> 00:24:35.960
Should be fun.

00:24:36.440 --> 00:24:44.540
um he also in the article he refers to using just files and uh and for some reason just just just

00:24:44.740 --> 00:24:50.080
doesn't work for me so i guess i'll just add on that we covered po the poet it does similar a

00:24:50.200 --> 00:24:57.720
similar role as just so um anyway uh another and then he talks about some customizations like uh

00:24:57.860 --> 00:25:06.400
his own aliases and um even has a an article for one of the a couple of the aliases which is

00:25:06.420 --> 00:25:11.540
This is, I was like, I never thought to do this as an alias, but I'm so glad that he wrote this

00:25:11.680 --> 00:25:16.860
down. So let's say you're working on a project and you, before you, you hop in and you know,

00:25:16.980 --> 00:25:21.640
there's been changes by some other, somebody else on the team. So you do a get pull and a bunch of

00:25:21.800 --> 00:25:28.780
stuff gets pulled in. What just came in? And so there's, it's just a, you, apparently you can get

00:25:28.860 --> 00:25:34.980
it with get log with like a, at curly brace one, something like that. I'm not going to remember

00:25:34.980 --> 00:25:42.460
that so he made an alias that's just um just that but it it's called get pull log or get diff or pull

00:25:42.600 --> 00:25:49.540
diff um does a diff basically of like what what changed and the actual code that changed but the

00:25:49.700 --> 00:25:55.840
log is the stuff i pulled in what are the get comment or the commit comments for those um so uh

00:25:56.190 --> 00:26:02.280
again just really love the uh the idea of um of people writing blog posts of all of their shell

00:26:02.300 --> 00:26:06.440
customizations and sharing all the command line tools that they use is pretty nice.

00:26:06.900 --> 00:26:08.660
There's a lot of cool stuff that isn't there.

00:26:08.900 --> 00:26:10.160
Yeah, I've used Xoxide.

00:26:10.340 --> 00:26:11.140
I really liked it.

00:26:11.840 --> 00:26:13.340
I think some of the others are cool.

00:26:13.920 --> 00:26:16.440
These Git little tips are great as well.

00:26:16.600 --> 00:26:18.220
Like, I'd never remember those things either.

00:26:18.680 --> 00:26:19.040
Super weird.

00:26:19.580 --> 00:26:21.140
But yeah, you just alias stuff.

00:26:21.180 --> 00:26:24.800
And I think that's one of the tricks is like some of these shell things are hard or complicated

00:26:25.100 --> 00:26:26.420
or even just a lot to type.

00:26:26.860 --> 00:26:30.980
But if you just put them into your profile or your B,

00:26:31.260 --> 00:26:32.200
your bash

00:26:32.200 --> 00:26:34.900
or ZSHRC file, right,

00:26:35.200 --> 00:26:37.240
then just remember the one or two words, right?

00:26:37.330 --> 00:26:37.960
And you're good to go.

00:26:38.560 --> 00:26:38.740
Yeah.

00:26:38.920 --> 00:26:41.640
And I also, I like the idea.

00:26:41.940 --> 00:26:44.000
So some stuff is different for different projects.

00:26:44.300 --> 00:26:51.160
So you might have like the same command using just or PO, you can have the same command do

00:26:51.280 --> 00:26:55.420
different things depending on which project you're in, the appropriate thing for that.

00:26:56.640 --> 00:26:57.000
I

00:26:57.000 --> 00:27:03.900
wonder if you could use dir env to change what the same command means per directory.

00:27:04.360 --> 00:27:05.960
Like maybe something is

00:27:05.960 --> 00:27:06.860
built using make

00:27:06.860 --> 00:27:09.420
and another thing is built using, I don't know,

00:27:09.620 --> 00:27:10.620
poe or something, right?

00:27:10.940 --> 00:27:11.400
And you could just

00:27:11.400 --> 00:27:13.760
have like the word build do whichever it is.

00:27:13.790 --> 00:27:17.300
But if you're in that directory, it looks up and says, okay, that means call make in this

00:27:17.440 --> 00:27:17.600
case.

00:27:17.940 --> 00:27:19.520
Otherwise it calls, you know, wouldn't that be neat?

00:27:19.800 --> 00:27:20.000
Yeah.

00:27:20.760 --> 00:27:20.820
Yeah.

00:27:21.090 --> 00:27:21.220
Cool.

00:27:21.230 --> 00:27:21.360
Cool.

00:27:21.780 --> 00:27:21.880
Yeah.

00:27:22.020 --> 00:27:22.280
Very neat.

00:27:22.420 --> 00:27:28.200
For people out there who are like, I'm kind of not very comfortable in the terminal or I don't like being in the terminal.

00:27:28.740 --> 00:27:29.640
Look at stuff like this.

00:27:29.920 --> 00:27:36.080
If you just open up a bare bash shell or a bare power shell or whatever, that is not a nice experience.

00:27:36.660 --> 00:27:42.960
But if you put a bunch of these little cool extensions and add-ons and make it your own, all of a sudden it's not just not bad.

00:27:43.020 --> 00:27:43.960
It's delightful, right?

00:27:44.140 --> 00:27:48.500
And so I think especially people who are kind of beginners listening, like look into this stuff.

00:27:49.200 --> 00:27:49.320
Yeah.

00:27:49.660 --> 00:27:53.480
I always get thrown when I assume VI mode or Vim mode,

00:27:54.180 --> 00:27:56.300
and it's usually not the default.

00:27:56.600 --> 00:28:01.020
So my big tip is set-O-VI, and then it works.

00:28:01.460 --> 00:28:01.960
There you go.

00:28:02.260 --> 00:28:03.500
Yeah, if that's what you're expecting,

00:28:03.740 --> 00:28:04.680
definitely do that for sure.

00:28:04.860 --> 00:28:05.040
Yeah.

00:28:05.260 --> 00:28:05.420
All right.

00:28:06.100 --> 00:28:06.480
You got extras?

00:28:06.550 --> 00:28:07.180
I got no extras.

00:28:07.580 --> 00:28:10.640
I just have one extra that's kind of out of the blue.

00:28:11.160 --> 00:28:11.960
It's a completely,

00:28:12.600 --> 00:28:14.560
and now for something completely different sort of thing.

00:28:14.880 --> 00:28:16.420
An article my wife shared with me,

00:28:16.580 --> 00:28:17.620
which I thought was fun.

00:28:17.700 --> 00:28:24.880
it's on the phys.org website it's a new theory proposes time has three dimensions with space as

00:28:24.880 --> 00:28:32.180
a secondary effect um anyway it's a fun read about uh possibly three-dimensional time like kind of

00:28:32.260 --> 00:28:38.160
like we have three-dimensional space um and uh it's interesting read uh kind of kind of a fun

00:28:38.270 --> 00:28:43.480
picture too and i do like that i'm seeing this now people are actually fessing up when they have an

00:28:43.380 --> 00:28:45.240
AI generated image as a credit.

00:28:45.820 --> 00:28:46.980
A lot of times they don't need to

00:28:46.980 --> 00:28:47.280
fess up.

00:28:47.420 --> 00:28:48.380
You're like, yeah, that's AI generated.

00:28:48.660 --> 00:28:52.760
But when it looks photorealistic, then that's really cool.

00:28:52.960 --> 00:28:53.100
Yeah.

00:28:53.480 --> 00:28:53.580
So

00:28:53.580 --> 00:28:56.260
anyway, just a fun read about some physics.

00:28:56.460 --> 00:28:57.740
I saw this title go by.

00:28:57.820 --> 00:28:59.220
I haven't read it, but yeah.

00:28:59.680 --> 00:29:01.580
This or something like that were true.

00:29:01.800 --> 00:29:02.720
How insane is that?

00:29:02.760 --> 00:29:04.540
Like time is just so weird anyway.

00:29:04.860 --> 00:29:10.240
I also saw one that gravitation could be some kind of knock-on effect from like quantum

00:29:10.480 --> 00:29:10.660
mechanics.

00:29:10.940 --> 00:29:15.140
Like there's some really wild theories going on right now, but we will see.

00:29:15.250 --> 00:29:15.760
We will see.

00:29:16.240 --> 00:29:16.360
Yeah.

00:29:16.640 --> 00:29:16.720
Yeah.

00:29:17.020 --> 00:29:17.180
All right.

00:29:17.380 --> 00:29:17.480
All right.

00:29:17.960 --> 00:29:18.020
Well.

00:29:18.380 --> 00:29:20.600
Oh, wait, I have a quick follow up before you do the joke.

00:29:21.140 --> 00:29:21.280
Okay.

00:29:21.310 --> 00:29:23.140
Let me, let me do the quick follow up here.

00:29:23.420 --> 00:29:24.740
People don't know we have a search engine.

00:29:25.030 --> 00:29:28.580
I went in here and I typed into our search engine by them by Queens.

00:29:30.140 --> 00:29:30.760
What did I type?

00:29:30.960 --> 00:29:31.820
Queens and then packet.

00:29:32.110 --> 00:29:32.540
I can't remember.

00:29:32.640 --> 00:29:33.180
Now I've forgot.

00:29:34.520 --> 00:29:36.560
Anyway, running a quick little search.

00:29:36.760 --> 00:29:38.900
I came up with a Python on the beach.

00:29:39.040 --> 00:29:41.760
the one where you came in, dialed in from Hawaii, which is awesome.

00:29:42.420 --> 00:29:42.780
But if

00:29:42.780 --> 00:29:46.180
you go down to the extras, this is what I was hinting at.

00:29:46.180 --> 00:29:48.020
And this is not the same person.

00:29:48.150 --> 00:29:52.300
So this is a totally different, not a left pad incident, a left pad like thing.

00:29:52.760 --> 00:29:59.660
So Merrick Squires, who had taken a couple of his packages and like done some sort of

00:30:00.690 --> 00:30:04.680
supply chain attack or at least sabotage.

00:30:05.060 --> 00:30:11.560
Also, this is a post that says, hey, Brian Krebs, I just noticed that this guy, Marek

00:30:11.760 --> 00:30:16.500
Squires, seems to be the same fellow that sabotaged two of his own popular open source libraries

00:30:16.780 --> 00:30:18.340
last week, KellerJS and FakerJS.

00:30:18.400 --> 00:30:18.740
Remember that?

00:30:19.060 --> 00:30:19.720
And the

00:30:19.720 --> 00:30:24.540
article is, resident of Queens home suspected in bomb making materials charges

00:30:24.760 --> 00:30:27.100
being taken away.

00:30:27.160 --> 00:30:28.320
It looks like maybe even it blew up.

00:30:28.320 --> 00:30:28.680
I don't know.

00:30:28.780 --> 00:30:30.220
There's some kind of EMT thing going on.

00:30:30.440 --> 00:30:30.580
Yeah.

00:30:30.580 --> 00:30:34.380
So I think I searched for npm in Queens because I knew the guy was from Queens.

00:30:34.700 --> 00:30:37.240
Not the same person, but the same category of things.

00:30:37.720 --> 00:30:39.560
Did he open source his bomb design, though?

00:30:40.059 --> 00:30:40.940
I hope not.

00:30:43.580 --> 00:30:44.760
I definitely hope not.

00:30:44.940 --> 00:30:45.200
All right.

00:30:45.460 --> 00:30:45.640
Okay.

00:30:46.240 --> 00:30:47.000
What do we got for our jokes?

00:30:47.320 --> 00:30:51.100
So for a joke today, I'm just actually going to, we're going to have a reading.

00:30:51.660 --> 00:30:54.440
So gather around, boys and girls.

00:30:54.940 --> 00:30:55.020
Yeah.

00:30:55.320 --> 00:30:56.960
Not too long ago was Father's Day.

00:30:57.140 --> 00:30:58.080
I don't remember when.

00:30:59.100 --> 00:31:01.200
But I got a gift for my kids.

00:31:01.840 --> 00:31:07.080
And it was this book called, I'm going to hold up, Disappointing Affirmations.

00:31:09.139 --> 00:31:11.420
And a lot of them are not safe for work.

00:31:11.540 --> 00:31:13.900
I'm going to read some of the safer work ones.

00:31:13.940 --> 00:31:16.100
I just have a few pulled out.

00:31:17.200 --> 00:31:18.240
Here's it right here.

00:31:18.800 --> 00:31:20.340
I have to turn it around to be able to read it.

00:31:20.640 --> 00:31:25.820
But you are always just a moment away from your next worst day ever or your next best day ever.

00:31:26.140 --> 00:31:27.200
But let's be realistic.

00:31:29.000 --> 00:31:29.400
Let's see.

00:31:29.700 --> 00:31:30.500
Here's another one.

00:31:31.620 --> 00:31:34.920
You can be anything you want.

00:31:35.340 --> 00:31:38.340
And yet you keep choosing to be you.

00:31:38.500 --> 00:31:40.320
I admire your dedication to the role.

00:31:41.420 --> 00:31:44.700
And they're all with these nice pictures.

00:31:45.220 --> 00:31:47.320
Yeah, like over the motivational background pictures.

00:31:47.540 --> 00:31:48.700
The sun setting.

00:31:49.060 --> 00:31:49.600
Last one.

00:31:51.140 --> 00:31:56.220
Today I am letting go of the things that are holding me back from the life I want to live.

00:31:56.480 --> 00:31:59.720
Then I'm picking them all back up again because I have separation anxiety.

00:32:02.180 --> 00:32:08.140
anyway um i love love the uh the funny things i'll put a link to the uh to the book and um

00:32:08.500 --> 00:32:13.580
not with any sort of like kickback link just a link to the book people are plain

00:32:13.580 --> 00:32:14.680
old link just

00:32:14.730 --> 00:32:21.040
a plain old link sweet yeah that's really good those i love those things which are funny i haven't

00:32:21.120 --> 00:32:26.080
seen the whole book but it i it definitely appeals to me i i know there used to be i think they're

00:32:26.060 --> 00:32:31.100
still around the demotivator posters right like the motivational posters they have the demotivators

00:32:31.130 --> 00:32:33.380
and they're similar thing in like poster form

00:32:33.380 --> 00:32:34.540
yeah by

00:32:34.540 --> 00:32:36.620
a company called despair Inc I believe is what

00:32:36.700 --> 00:32:37.880
the title the name of the company

00:32:37.880 --> 00:32:44.620
and and it's it reminds me also way back in uh SNL I don't

00:32:44.800 --> 00:32:51.119
remember which genre of SNL but SNL had uh deep thoughts by Jack Handy and um and I always thought

00:32:51.140 --> 00:32:52.860
that was like a made up thing,

00:32:53.020 --> 00:32:54.560
but apparently that's the,

00:32:54.810 --> 00:32:56.960
it was one of the writer's names was Jack Handy.

00:32:57.310 --> 00:32:57.920
So it wasn't.

00:32:58.120 --> 00:32:58.220
Okay.

00:32:58.580 --> 00:32:58.740
Awesome.

00:32:59.460 --> 00:32:59.540
Well,

00:32:59.660 --> 00:33:00.040
very funny.

00:33:00.200 --> 00:33:00.660
Thanks for the joke.

00:33:01.000 --> 00:33:01.140
All right.

00:33:01.460 --> 00:33:03.800
And thank you to everyone for listening.

00:33:04.180 --> 00:33:05.120
If you're here live,

00:33:05.340 --> 00:33:06.080
thank you for being here live.

00:33:06.420 --> 00:33:07.840
And if you watch us on YouTube,

00:33:08.320 --> 00:33:11.560
be sure to subscribe to the channel to get these all the time.

00:33:11.670 --> 00:33:15.920
We have all of them recorded and available for you and subscribe or follow.

00:33:16.330 --> 00:33:17.440
We had to change the words on podcast.

00:33:17.720 --> 00:33:19.300
Didn't we subscribe or follow the podcast?

00:33:19.840 --> 00:33:22.300
Because subscribe sounds like money, but just follow it.

00:33:22.340 --> 00:33:25.500
It's free on your podcast player, whatever the button is, if you're not subscribed yet.

00:33:26.080 --> 00:33:26.500
See you all later.

00:33:26.800 --> 00:33:26.860
Thanks.

00:33:27.240 --> 00:33:27.380
Bye.

