WEBVTT

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

00:00:05.740 --> 00:00:09.940
This is episode 447, recorded September 1st, 2025.

00:00:10.650 --> 00:00:11.440
And I'm Brian Okken.

00:00:11.660 --> 00:00:12.360
And I'm Michael Kennedy.

00:00:12.780 --> 00:00:14.820
And this episode is sponsored by DigitalOcean.

00:00:15.220 --> 00:00:16.040
Thank you, DigitalOcean.

00:00:17.060 --> 00:00:21.000
And you can get a $200 free credit, and there's a link in the show notes,

00:00:21.180 --> 00:00:23.600
but we're going to talk about that more later in the episode.

00:00:24.020 --> 00:00:30.140
Of course, follow us or send us info on the socials on Bluesky or Mastodon.

00:00:30.460 --> 00:00:31.580
Links are in the show notes as well.

00:00:32.040 --> 00:00:37.640
And if you'd like to listen, watch the show live, head over to pythonbytes.fm/live.

00:00:37.960 --> 00:00:40.980
And that's the link also if you just want to see it after the fact.

00:00:41.140 --> 00:00:43.920
If you want to look at the video, look and see what we're looking at.

00:00:44.620 --> 00:00:49.520
And finally, please sign up for our email newsletter list.

00:00:49.760 --> 00:01:01.380
Go over to pythonbytes.fm and hit the newsletter link, and we send you all the links that we talk about in every episode in an email and a bunch of background information, too.

00:01:02.000 --> 00:01:04.540
All right, Michael, what are we starting with today?

00:01:04.900 --> 00:01:05.700
You know, I'm afraid.

00:01:06.120 --> 00:01:06.800
I'm really afraid, Brian.

00:01:06.950 --> 00:01:10.360
I'm sorry, but I might be taking us down a rat hole.

00:01:10.990 --> 00:01:11.620
I really might.

00:01:12.280 --> 00:01:12.580
Oh, no.

00:01:12.820 --> 00:01:15.020
I want to talk about Rathole, this tool.

00:01:15.500 --> 00:01:19.220
So Rathole is a, you probably have heard of ngrok.

00:01:19.640 --> 00:01:23.860
right? Yeah, we've talked about it. Yeah, we've talked about it before and it's super useful.

00:01:24.500 --> 00:01:29.720
One of the things that is a real big challenge a lot of times is I need to let somebody or something

00:01:30.360 --> 00:01:38.300
access an API. Let me give you two really big examples that are useful for this. One is web

00:01:38.420 --> 00:01:43.320
hooks. You want to do e-commerce or it doesn't really matter. Anything that has to do with a web

00:01:43.440 --> 00:01:48.640
hook where you're on the receiving end, you're creating the web hook. That's a public website

00:01:48.640 --> 00:01:50.580
or service that's going to call your webhook.

00:01:50.830 --> 00:01:53.020
It needs a public page to access that.

00:01:53.420 --> 00:01:56.560
Well, do you want to like try to open up

00:01:56.670 --> 00:01:58.700
all the different firewalls on your machine

00:01:59.260 --> 00:02:01.660
and your NAT router and then map an IP address

00:02:02.260 --> 00:02:03.380
and then give that to that thing?

00:02:03.740 --> 00:02:04.980
No, just don't do that.

00:02:05.390 --> 00:02:08.340
But you need somewhere where you can type in a URL

00:02:08.880 --> 00:02:10.920
and say, here's my URL for the webhook

00:02:11.120 --> 00:02:14.560
when a signup happens or a thing, whatever, right?

00:02:14.740 --> 00:02:15.580
Whatever the webhook's triggering.

00:02:15.860 --> 00:02:15.980
Yeah.

00:02:16.250 --> 00:02:17.280
So you need a public thing.

00:02:17.660 --> 00:02:22.220
So with Ingrok and Rathole and other tools, what you can do is you can say, create me

00:02:22.700 --> 00:02:28.360
based on this domain, basically an SSH tunnel or something to that equivalent that goes back

00:02:28.660 --> 00:02:35.200
into my machine so that then you can share that URL and basically say, I want that port

00:02:35.500 --> 00:02:37.720
to map over to my web app.

00:02:37.740 --> 00:02:43.160
And you can literally run PyCharm, set a breakpoint, go to the external service, make

00:02:43.160 --> 00:02:46.980
it do a thing, and then boom, you're debugging through and you're checking it out.

00:02:47.240 --> 00:02:47.960
It's really, really nice.

00:02:48.640 --> 00:02:51.480
So Ngrok is great, but people may have noticed

00:02:51.680 --> 00:02:55.080
I'm on this self-hosting Rathole itself, if you will.

00:02:55.880 --> 00:02:58.160
So I don't know, there's just something about Ngrok.

00:02:58.240 --> 00:03:00.020
They've changed their services a bunch

00:03:00.020 --> 00:03:01.300
and I'm not super psyched about it.

00:03:01.500 --> 00:03:02.700
So I'm like, well, what else is out there?

00:03:03.060 --> 00:03:05.500
And Chat and I had a little conversation about it

00:03:05.740 --> 00:03:08.040
and we decided that this is one of the really

00:03:08.860 --> 00:03:11.500
nice high-parity features, also written in Rust,

00:03:11.800 --> 00:03:14.200
more high performance than some of the other ones

00:03:14.380 --> 00:03:16.960
like FRP and Ngrok, it calls out.

00:03:17.260 --> 00:03:17.520
Okay.

00:03:18.030 --> 00:03:22.900
So what I did is I set this up onto my machine, onto my server,

00:03:23.060 --> 00:03:25.460
and someone runs Python Bytes, and just said,

00:03:25.780 --> 00:03:26.660
they just run in the background.

00:03:27.010 --> 00:03:30.240
And I've set up the certificates so that I can just type Rathole

00:03:30.830 --> 00:03:31.640
with a port number.

00:03:32.240 --> 00:03:36.420
You know, on my terminal, I just open up and say Rathole like 3,000

00:03:36.760 --> 00:03:38.360
or let's say Rathole 5,000.

00:03:38.590 --> 00:03:42.460
And then I have a port, port map, URL map,

00:03:42.920 --> 00:03:46.200
automatically over to like say any Flask app that I run.

00:03:46.410 --> 00:03:46.940
How cool is that?

00:03:47.160 --> 00:03:48.540
And it's completely self-hosted.

00:03:49.260 --> 00:03:49.740
And here's the thing.

00:03:49.770 --> 00:03:52.060
You might think, oh, self-hosted, all the stuff you got to deal with.

00:03:52.300 --> 00:03:55.200
It's a single Rust binary that runs in Docker.

00:03:55.820 --> 00:03:56.740
And let me see.

00:03:56.740 --> 00:03:59.440
I'll give you up to the date stats if I can find them,

00:03:59.780 --> 00:04:01.200
if it's not going to take too long.

00:04:01.440 --> 00:04:06.520
The last time I checked, it was about three megabytes of memory usage.

00:04:06.780 --> 00:04:08.600
What is the rat hole doing right now?

00:04:08.880 --> 00:04:09.260
Oh, my God.

00:04:09.400 --> 00:04:10.360
The rat hole is out of control.

00:04:10.600 --> 00:04:14.580
It's up to 11 megabytes of memory usage on a 16 gigabyte machine.

00:04:14.770 --> 00:04:15.580
I think it's going to be okay.

00:04:17.180 --> 00:04:22.240
isn't that cool though so it's it's just got like um you know a docker container that i didn't even

00:04:22.320 --> 00:04:26.440
have to do any docker stuff i just set up like a little compose file to map all the settings over

00:04:26.580 --> 00:04:30.960
so that i don't have to deal with like passing them every time i run it you know and just set

00:04:30.980 --> 00:04:38.040
it up as an auto start daemon but yeah i just set that up and off it goes cool no so when you're not

00:04:38.340 --> 00:04:43.380
so when you're not using it do you turn it off or is it just always sort of running if it took a lot

00:04:43.400 --> 00:04:48.100
of memory or resources or something, I would turn it off, but it's 11 megabytes.

00:04:48.560 --> 00:04:48.660
Okay.

00:04:49.160 --> 00:04:54.760
And so it's really, like, let me give you a sense of, like, other stuff that's running

00:04:55.000 --> 00:04:55.400
on the server.

00:04:56.820 --> 00:05:00.680
So right now we have MongoDB, which is using 1.3 gigabytes.

00:05:01.340 --> 00:05:07.560
We have Talk Python, which is using 927 megabytes, so a gigabyte.

00:05:08.000 --> 00:05:11.180
What's Python Bytes is running at 590 megabytes.

00:05:11.420 --> 00:05:16.380
So, you know, like 11 out of these is like, it doesn't even show up on the radar, right?

00:05:16.460 --> 00:05:18.520
Like you couldn't even notice if it's running or not.

00:05:18.590 --> 00:05:21.080
And so because of that, no, I just leave it running.

00:05:21.320 --> 00:05:21.700
Okay.

00:05:22.080 --> 00:05:26.680
And then like, but on your, okay, so it's running something on your server and then something on your laptop also?

00:05:27.700 --> 00:05:28.060
Yeah.

00:05:28.250 --> 00:05:31.320
So there's a command that you can run locally.

00:05:31.540 --> 00:05:34.620
And I think I don't have it set up on my streaming computer.

00:05:34.850 --> 00:05:35.780
I have it on my dev one.

00:05:35.910 --> 00:05:40.900
So I can't look at it real quick, but I'm pretty sure I just set it up to run the Docker.

00:05:41.400 --> 00:05:47.720
image just sharing ports in the right way so i just do a docker run command to say share that

00:05:47.960 --> 00:05:52.780
port to this port when i when i do the map command and so i don't even really have it installed but

00:05:52.860 --> 00:05:58.500
yeah it's just a super small binary that runs okay this sounds really neat i like it yeah it's a tiny

00:05:58.520 --> 00:06:03.700
bit of a pain to set up but it's not it's not too bad all right yeah well i want to shift gears

00:06:04.160 --> 00:06:10.479
completely i guess something that something else that sometimes is a pain um maybe i'm trying to

00:06:10.420 --> 00:06:15.600
do a transition here. Let's talk about pre-commit. So we have, we, I know we've talked about pre-commit,

00:06:15.610 --> 00:06:21.780
but I don't think we've brought it up lately. And one of the, one of the things is I used to use

00:06:21.780 --> 00:06:28.040
it a ton and then I moved a lot of my tooling to the, to CI and don't run it as much anymore.

00:06:28.570 --> 00:06:34.840
However, I'm going back to using it a lot. So pre-commit just as a reminder, it's a tool. Well,

00:06:34.980 --> 00:06:41.240
there's this notion of pre-commit, which is a pre-commit hook for Git, so that whenever you

00:06:41.520 --> 00:06:45.540
commit something, you can assign pre-commit hooks. There's a project called pre-commit,

00:06:45.810 --> 00:06:54.840
which is something that's written in Python, but it allows you to easily set up a whole bunch of

00:06:56.420 --> 00:07:03.240
these pre-commit GitHub hooks. So Python project and the hook thing. Okay, so why am I bringing

00:07:03.260 --> 00:07:10.100
And you can do things like hook up linters and you can run tests and stuff, but I generally don't do that as a pre-commit hook.

00:07:10.260 --> 00:07:13.040
I'll do linters and other stuff like that.

00:07:13.180 --> 00:07:15.840
Yeah, I don't think I would ever set up tests as a pre-commit hook.

00:07:19.640 --> 00:07:26.440
I mean, I guess you'd say disable the hooks to check in the fix for the hook and they're slow and there's just a lot to it.

00:07:26.540 --> 00:07:28.660
But yeah, I agree with the stuff you're running.

00:07:29.080 --> 00:07:37.020
So one of the things is pre-commit doesn't by default have an official way to use uv.

00:07:37.500 --> 00:07:39.440
It doesn't natively support uv.

00:07:39.920 --> 00:07:45.180
And I, like a lot of people, are using uv to install stuff because it's just so fast.

00:07:45.740 --> 00:07:49.080
Instead of pip install, I do a uv pip install.

00:07:50.500 --> 00:07:56.300
So what we're talking about is an article from Adam Johnson talking about pre-commit install with uv.

00:07:57.520 --> 00:08:02.860
as he puts it, the installation guide for pre-commit isn't obvious.

00:08:03.580 --> 00:08:06.180
It's not terrible, but it's not obvious how to get things set up.

00:08:06.900 --> 00:08:12.700
But he's recommending using uv tool install pre-commit with pre-commit uv.

00:08:12.840 --> 00:08:16.160
So this is another project called pre-commit-uv.

00:08:17.080 --> 00:08:19.540
And this is a couple things.

00:08:19.600 --> 00:08:24.800
This is both an extra thing for pre-commit, but yeah, I guess that's it.

00:08:24.880 --> 00:08:26.060
It's a plug-in for pre-commit.

00:08:26.740 --> 00:08:32.960
But what, so what you're getting with this is you're installed with, if you do uv tool install,

00:08:33.180 --> 00:08:39.240
you're installing pre-commit with uv, but then you're also all the extra things. So these extra

00:08:39.800 --> 00:08:45.140
tools, like, like hooks for linters and all this sort of stuff that gets installed with pre-commit

00:08:45.440 --> 00:08:50.540
with pip normally, but this extra pre-commit uv will allow it so that all of your tools are

00:08:50.820 --> 00:08:55.399
installed. If they're Python based tools get installed with uv as well. So essentially just

00:08:55.420 --> 00:08:57.140
speeding up this whole tool chain.

00:08:57.640 --> 00:09:00.240
And if you switch it around with a bunch of projects,

00:09:01.740 --> 00:09:04.860
it makes sense to be able to update that stuff quickly

00:09:05.140 --> 00:09:06.360
and install it quickly.

00:09:06.720 --> 00:09:07.840
So there we go.

00:09:07.840 --> 00:09:08.200
I love it.

00:09:08.480 --> 00:09:09.780
UV for the win.

00:09:10.160 --> 00:09:12.380
I'm actually talking with Charlie Marsh tomorrow,

00:09:12.840 --> 00:09:16.460
but talking about pyx, the server-side equivalent of uv.

00:09:16.630 --> 00:09:17.500
So that's cool.

00:09:17.800 --> 00:09:20.120
I'll be looking forward to listening to that one.

00:09:22.140 --> 00:09:26.620
Another thing that is pretty awesome is our sponsor, DigitalOcean.

00:09:26.800 --> 00:09:27.320
Absolutely.

00:09:27.840 --> 00:09:29.940
Let me tell you about DigitalOcean.

00:09:30.480 --> 00:09:31.500
Definitely a big fan of theirs.

00:09:31.900 --> 00:09:34.700
And this episode is brought to you by DigitalOcean.

00:09:35.140 --> 00:09:42.080
They're a comprehensive cloud infrastructure service that's simple to spin up, even for the most complex workload.

00:09:42.440 --> 00:09:45.440
And it's a way better value than most cloud providers.

00:09:46.340 --> 00:09:52.380
If you're using AWS, because everyone uses AWS, you might seriously consider using DigitalOcean.

00:09:52.480 --> 00:09:53.880
It will save you so much money.

00:09:54.960 --> 00:09:57.200
And you don't get to in the headlights.

00:09:57.740 --> 00:09:59.100
There's 300 services.

00:09:59.520 --> 00:10:00.260
How do I put them together?

00:10:01.300 --> 00:10:02.580
It's nice and simple and powerful.

00:10:02.960 --> 00:10:06.680
So at DigitalOcean, companies can save up to 30% off their cloud bill.

00:10:07.100 --> 00:10:13.440
DigitalOcean boasts 99.99% uptime SLA as an industry leading pricing on bandwidth.

00:10:13.860 --> 00:10:22.300
It's built to be the cloud backbone of businesses, small and large, and GPU-powered virtual machines

00:10:22.500 --> 00:10:26.340
are available, plus storage, database, networking capabilities all on one platform.

00:10:26.920 --> 00:10:32.220
So if you're doing AI, AI developers can confidently create apps that their users are going to love.

00:10:32.880 --> 00:10:37.300
Devs have access to a complete set of infrastructure tools that they need for both training and

00:10:37.620 --> 00:10:40.200
inference so that they can build anything they dream up.

00:10:40.700 --> 00:10:47.180
DigitalOcean provides full-service cloud infrastructure that's simple to use, reliable no matter what the use case,

00:10:47.600 --> 00:10:50.500
scalable to any size business, and affordable on a budget.

00:10:51.130 --> 00:10:51.900
What does affordable mean?

00:10:52.740 --> 00:10:54.840
VMs start at $4 a month.

00:10:55.240 --> 00:10:55.820
$4.

00:10:56.540 --> 00:10:58.600
This might be relevant to my next topic, actually, Brian.

00:10:59.640 --> 00:11:01.400
And GPUs start under $1 an hour.

00:11:01.730 --> 00:11:06.740
So you can easily spin up infrastructure built to simplify even the most intense business demands.

00:11:07.080 --> 00:11:07.720
That's DigitalOcean.

00:11:07.960 --> 00:11:16.060
If you're going to join, please use DO4bytes, DO the number 4 bytes, and get a $200 in free

00:11:16.290 --> 00:11:17.100
credit to get started.

00:11:18.860 --> 00:11:21.000
That code is in our show notes.

00:11:21.050 --> 00:11:22.140
You can definitely check it out there.

00:11:22.400 --> 00:11:24.340
DigitalOcean is the cloud that's got you covered.

00:11:24.760 --> 00:11:27.120
Please use our link with the offer.

00:11:27.260 --> 00:11:28.820
You'll find it in the podcast player show notes.

00:11:29.220 --> 00:11:34.400
It's a clickable chapter URL as you're hearing the segment, and it's at the top of the episode

00:11:34.640 --> 00:11:35.920
page at pythonbytes.fm.

00:11:36.480 --> 00:11:40.120
Thank you to DigitalOcean for supporting Python Bytes.

00:11:40.530 --> 00:11:40.760
Love it.

00:11:41.080 --> 00:11:41.820
Definitely love it.

00:11:43.100 --> 00:11:48.820
Also, I love that Python 3.14 is going to come out here pretty soon.

00:11:50.300 --> 00:11:52.620
I guess soon in the relative sense.

00:11:53.170 --> 00:11:54.520
We had a couple months left, I guess.

00:11:55.150 --> 00:11:56.100
It's almost Christmas for Python.

00:11:56.540 --> 00:11:57.020
Python Christmas.

00:11:57.940 --> 00:11:59.120
So I can't remember the timing.

00:11:59.720 --> 00:12:03.320
We've done this a few years in a row on the yearly, but I still don't remember.

00:12:03.580 --> 00:12:08.040
But anyway, I'm already starting to use 3.14, and I'm excited about it.

00:12:08.800 --> 00:12:16.020
But one of the new things that's coming up with Python, with the new one version, is functools placeholder.

00:12:17.440 --> 00:12:21.100
And honestly, I saw something about it, and I was like, huh?

00:12:21.960 --> 00:12:24.020
And so let's go look at it.

00:12:24.340 --> 00:12:27.020
Is this when you just, I don't really want to write a function.

00:12:27.140 --> 00:12:29.220
I'll just put a little functools placeholder on it.

00:12:30.480 --> 00:12:30.740
No.

00:12:32.600 --> 00:12:34.560
I thought of it as a stand-in for the dot,

00:12:34.760 --> 00:12:36.180
dot, dot, or pass or whatever,

00:12:36.260 --> 00:12:37.180
when you just write a function.

00:12:37.480 --> 00:12:38.560
Then I read it more and I'm like,

00:12:38.580 --> 00:12:39.760
"Oh no, this is something else."

00:12:40.000 --> 00:12:40.520
Tell us about it.

00:12:41.260 --> 00:12:43.580
I am a fan of functools partial.

00:12:45.420 --> 00:12:47.460
Again, it's a little obscure.

00:12:48.120 --> 00:12:51.160
A little rabbit hole or rat hole here.

00:12:52.260 --> 00:12:54.220
Partial is a cool way to create

00:12:54.240 --> 00:12:56.580
a new function by partially binding

00:12:56.940 --> 00:12:58.900
some parameters of another function.

00:12:59.480 --> 00:13:02.080
Let's say we've got a function that takes six parameters,

00:13:02.440 --> 00:13:04.700
and you want to have everybody use it,

00:13:04.840 --> 00:13:07.160
but fill in the same thing for the four of the parameters.

00:13:07.480 --> 00:13:09.100
You can fill those in with partial

00:13:09.620 --> 00:13:11.560
and return a function that only takes two parameters.

00:13:11.700 --> 00:13:13.900
And then your users can, or the users of your API

00:13:14.120 --> 00:13:16.620
can use a cleaner interface with just a couple.

00:13:16.900 --> 00:13:18.220
Now, it's so cool.

00:13:18.520 --> 00:13:21.280
However, it's got some limitations

00:13:22.980 --> 00:13:25.040
that sometimes positional parameters,

00:13:25.280 --> 00:13:26.300
it works great for keywords,

00:13:26.620 --> 00:13:27.980
but for positional parameters,

00:13:28.380 --> 00:13:31.040
that's hard to decide which one to fill it in.

00:13:31.320 --> 00:13:32.660
So it doesn't work on all functions.

00:13:33.640 --> 00:13:34.520
Enter placeholder.

00:13:35.000 --> 00:13:39.340
So placeholder is the ability to just say, this is where I want it to go.

00:13:39.880 --> 00:13:46.860
And if I've got a partial, like if I want to pass print, like bind the print function,

00:13:47.170 --> 00:13:53.140
I want the first two to be placeholder, and I want the last one to be world so that I can

00:13:53.240 --> 00:13:55.280
pass in hello, dear, and have that come out.

00:13:55.570 --> 00:13:57.180
Okay, that seems a little trivial.

00:13:57.780 --> 00:14:00.780
So I was still trying to get a good example.

00:14:01.220 --> 00:14:06.560
And the good example came from Rodrigo from MathsPP.com.

00:14:06.940 --> 00:14:13.020
And his example, which is perfect, is to remove punctuation with a function.

00:14:13.440 --> 00:14:15.020
And he's got a little example.

00:14:15.060 --> 00:14:23.420
I've got his Bluesky post to use placeholder and partial to use translate and make trans

00:14:23.620 --> 00:14:28.860
to fill in this partial thing to create a partial function that removes punctuation.

00:14:29.000 --> 00:14:30.760
and then you just have a function that you say,

00:14:30.960 --> 00:14:32.940
hey, remove the punctuation from Hello World,

00:14:33.040 --> 00:14:35.020
and it takes out the comma and the exclamation point.

00:14:35.300 --> 00:14:36.400
Something like that is great

00:14:36.680 --> 00:14:39.040
because this whole removing punctuation thing,

00:14:39.360 --> 00:14:39.860
that comes up.

00:14:40.120 --> 00:14:42.300
Or removing, you know, I've got,

00:14:42.560 --> 00:14:46.720
I'm doing Markdown episodes for my podcast.

00:14:47.020 --> 00:14:48.280
I'm converting to Markdown.

00:14:48.700 --> 00:14:52.080
But the Hugo doesn't like colons in your title,

00:14:52.340 --> 00:14:54.040
so you got to remove the colons, that sort of thing.

00:14:54.240 --> 00:14:54.720
This is great.

00:14:55.040 --> 00:14:58.020
And then he also has an article to go with it,

00:14:58.180 --> 00:15:02.320
how to use functools placeholder where he kind of walks through basically what i just talked about

00:15:02.580 --> 00:15:08.340
is um partial is great but it doesn't always work so placeholder comes to the rescue so awesome

00:15:08.510 --> 00:15:14.380
write up about the new uh placeholder functionality so thanks rodrigo interesting yeah thanks for

00:15:14.380 --> 00:15:19.260
helping me understand that a little better i don't use i don't use functools dot partial

00:15:19.780 --> 00:15:24.760
really very much so placeholder which enhances that doesn't give me a lot of uh clarity on it so

00:15:24.620 --> 00:15:25.960
Oh, I use it a lot.

00:15:25.990 --> 00:15:27.560
I mean, not a lot, a lot,

00:15:27.760 --> 00:15:30.320
but there's a lot of times where a built-in function

00:15:30.490 --> 00:15:32.100
does almost everything I need,

00:15:32.540 --> 00:15:35.620
except for that I need to pass in a bunch of preset stuff.

00:15:36.160 --> 00:15:37.900
And I want to expose that as an API.

00:15:38.280 --> 00:15:39.460
And you can wrap it,

00:15:39.640 --> 00:15:40.920
but you can also just do a partial.

00:15:41.090 --> 00:15:41.400
It's cool.

00:15:41.920 --> 00:15:42.020
Yeah.

00:15:42.620 --> 00:15:42.820
All right.

00:15:43.380 --> 00:15:43.700
All right.

00:15:44.440 --> 00:15:45.760
This was going to be a little extra,

00:15:45.960 --> 00:15:47.300
just a tiny thing I threw at the end.

00:15:47.560 --> 00:15:47.740
Okay.

00:15:48.040 --> 00:15:51.440
And then it grew and it grew and it grew

00:15:51.550 --> 00:15:53.260
and it became more and more.

00:15:53.300 --> 00:15:56.800
So let me, so here's the headline.

00:15:57.430 --> 00:16:07.760
I converted the other night, 160 old blog posts from WordPress.com to Hugo using AI in a couple of hours.

00:16:08.260 --> 00:16:09.080
Oh, okay, good.

00:16:09.340 --> 00:16:09.500
Okay.

00:16:10.220 --> 00:16:13.140
And this is something that has been absolutely driving me nuts for years.

00:16:13.600 --> 00:16:19.540
I've had all these posts over on blog.michaelckennedy.net, which is the domain I happened to be able to get at the time.

00:16:19.880 --> 00:16:23.300
and they were on WordPress with this custom theme and so on.

00:16:23.320 --> 00:16:25.320
And I was just done with WordPress.

00:16:26.120 --> 00:16:29.920
Every time I went there, it was just like an antidote against writing.

00:16:30.620 --> 00:16:31.900
Like I just don't want to write here.

00:16:32.040 --> 00:16:32.780
Like why am I doing it?

00:16:33.520 --> 00:16:37.040
I would much rather write markdown and just have simple and clean code

00:16:37.120 --> 00:16:37.920
like my current website.

00:16:38.120 --> 00:16:39.460
We've talked a lot about using Hugo.

00:16:39.780 --> 00:16:40.980
Like you use Hugo, I use Hugo.

00:16:41.519 --> 00:16:43.880
My mkennedy.code site is Hugo, right?

00:16:44.260 --> 00:16:48.860
But how do I get stuff from WordPress.com over to Hugo?

00:16:48.920 --> 00:16:51.940
Well, guess what? There's an export feature in WordPress.

00:16:52.560 --> 00:16:59.860
If you have the paid WordPress account, which is what you need to have your own domain and not your, just your username.wordpress.com.

00:17:00.260 --> 00:17:07.180
There's different tiers. Well, it's, you have to pay the $200 version to get the export feature turned on.

00:17:07.480 --> 00:17:07.640
What?

00:17:08.300 --> 00:17:13.980
Yes. That's like multiple levels up. I'm like, oh, these guys are holding my stuff hostage. Screw them.

00:17:14.000 --> 00:17:18.579
I'm just going to just put my last blog post over there was we've moved to this place.

00:17:19.459 --> 00:17:20.319
Please join me there.

00:17:20.459 --> 00:17:20.920
You know what I mean?

00:17:21.199 --> 00:17:21.339
Yeah.

00:17:21.620 --> 00:17:24.740
I'm like, but then I got a renewal for 50 bucks or 48 bucks.

00:17:24.810 --> 00:17:27.800
I really don't want to just keep paying for the rest of my life.

00:17:27.959 --> 00:17:30.400
$48 to this thing, you know?

00:17:31.300 --> 00:17:34.160
So I'm like, but it's just too much work to move it over.

00:17:34.300 --> 00:17:36.360
Without an export, I could have paid that as well.

00:17:36.540 --> 00:17:42.340
But then I'd still have to migrate it from HTML and WordPress export format to Markdown.

00:17:42.520 --> 00:17:43.220
So I'm like, I don't really.

00:17:43.460 --> 00:17:47.040
But then I'm like, you know what, let me just fire up cursor and just say cursor over there.

00:17:47.150 --> 00:17:47.880
I want this stuff.

00:17:48.210 --> 00:17:49.260
I want it over here into Hugo.

00:17:49.390 --> 00:17:54.360
And I showed it my, I like opened the Hugo page in cursor or the Hugo site in cursor.

00:17:54.510 --> 00:17:56.960
And I said, here's the URL, go get it.

00:17:56.960 --> 00:17:57.680
And it said, I'm on it.

00:17:57.880 --> 00:18:00.960
And within like five minutes, it had all the posts move over.

00:18:00.990 --> 00:18:01.920
I'm like, this is amazing.

00:18:02.300 --> 00:18:05.540
But it only, it based it off the RSS feed, which is totally reasonable.

00:18:06.020 --> 00:18:11.160
But the WordPress site limits the amount of content in the RSS feed to 50.

00:18:11.580 --> 00:18:12.840
Not all my posts.

00:18:13.000 --> 00:18:14.340
I'm like, oh, where are they?

00:18:14.780 --> 00:18:15.060
Rats.

00:18:16.440 --> 00:18:18.120
I got some of them, but not all of them.

00:18:18.840 --> 00:18:25.200
And so then I just said, hey, go back after it and give me, just start scraping the thing,

00:18:25.400 --> 00:18:25.520
right?

00:18:25.640 --> 00:18:27.500
And so it just started web scraping the other pieces.

00:18:28.060 --> 00:18:30.860
I told it to download all the images, all those kinds of things.

00:18:31.340 --> 00:18:32.240
And it did it.

00:18:32.320 --> 00:18:33.380
It took a couple of iterations.

00:18:33.630 --> 00:18:35.180
Like it downloaded the comments.

00:18:35.330 --> 00:18:36.460
I'm like, no, I don't want the comments.

00:18:36.530 --> 00:18:36.840
I'm sorry.

00:18:36.870 --> 00:18:37.920
I should have told you no comments.

00:18:38.310 --> 00:18:39.560
But eventually it took it out.

00:18:39.700 --> 00:18:45.360
And so now if you go to posts, I've got like 200 posts over here going back to 2006.

00:18:46.260 --> 00:18:49.860
But like here, let me see if I can find one like this.

00:18:50.300 --> 00:18:52.340
Let's just do something that'll call this.

00:18:52.840 --> 00:18:53.860
This is definitely going to come up.

00:18:53.980 --> 00:18:54.260
Let's search.

00:18:54.720 --> 00:18:55.280
Let's search this.

00:18:55.440 --> 00:18:55.540
Okay.

00:18:56.280 --> 00:18:58.140
And I also put the domain.

00:18:58.600 --> 00:18:59.860
I put the URL path.

00:19:00.000 --> 00:19:05.140
So normally for all my real posts, I wrote on Hugo, they're like slash post slash whatever.

00:19:05.700 --> 00:19:11.920
but I put all the archived ones in slash post slash r slash whatever so that I can just look

00:19:11.920 --> 00:19:16.500
at oh that's an archive post if for whatever reason okay but if we go over here and search

00:19:16.890 --> 00:19:22.640
you can see somewhere in here I'm sure that oh maybe it's if I search for that and can you oh

00:19:22.760 --> 00:19:27.920
gosh that's really bad um I'm about to search for something else but if I find one of these you'll

00:19:28.040 --> 00:19:33.780
see that oh this one's definitely gonna come up surely this is there's no way that I can't remember

00:19:33.800 --> 00:19:38.240
why I wrote this article. Doesn't really matter. There we go. So notice it's a blog,

00:19:38.520 --> 00:19:44.760
michaelckinnity.net, 2011-01-19. You know, the date, this is like WordPress style,

00:19:44.800 --> 00:19:50.180
and then the name. But if I hit it, boom, instantly mapped over. So I even gave people

00:19:50.240 --> 00:19:57.780
in the show notes the NGINX configuration to rewrite all of those things. So now I'm just

00:19:57.900 --> 00:20:03.760
hosting my old domain, and I just have a really complicated regular expression route match

00:20:03.780 --> 00:20:07.200
that then pulls off that little last piece and then sticks it on slash post

00:20:07.360 --> 00:20:08.900
slash R slash slug.

00:20:08.980 --> 00:20:09.120
Okay.

00:20:09.560 --> 00:20:09.700
Well,

00:20:09.940 --> 00:20:10.860
a different little tip.

00:20:11.080 --> 00:20:12.700
I went with a little different technique,

00:20:13.060 --> 00:20:13.620
but okay.

00:20:13.940 --> 00:20:14.080
Yeah.

00:20:14.260 --> 00:20:14.560
Okay.

00:20:14.960 --> 00:20:16.260
I'm interested to hear what you did,

00:20:16.460 --> 00:20:18.520
but I got these all over there.

00:20:18.680 --> 00:20:20.960
They're all integrated into the search engine.

00:20:21.520 --> 00:20:23.340
So like you hit new get or whatever,

00:20:23.900 --> 00:20:24.060
boom,

00:20:24.240 --> 00:20:26.880
get all these old things that I really don't care super tons about,

00:20:27.220 --> 00:20:27.700
but you know,

00:20:27.700 --> 00:20:28.080
I wrote it.

00:20:28.080 --> 00:20:28.900
I don't want it to go,

00:20:29.200 --> 00:20:29.720
go away.

00:20:29.800 --> 00:20:29.860
Right.

00:20:30.880 --> 00:20:32.800
So a couple other noteworthy things,

00:20:32.920 --> 00:20:34.800
It's like, I did not put this in.

00:20:35.000 --> 00:20:36.080
Let me pull this up for us.

00:20:36.500 --> 00:20:39.400
There's an article on Ars Technica that just came out.

00:20:39.800 --> 00:20:42.660
This is one of the things that got me going just like a couple days ago.

00:20:42.980 --> 00:20:45.400
It says, blogging service TypePad is shutting down,

00:20:45.820 --> 00:20:49.660
taking all content from all users, from all time away with it.

00:20:49.760 --> 00:20:50.500
What? Wow.

00:20:51.100 --> 00:20:52.040
It's like, ah.

00:20:52.340 --> 00:20:56.040
There were a bunch of artists that I followed that used TypePad for a long time.

00:20:56.400 --> 00:20:56.580
Yeah.

00:20:56.800 --> 00:20:56.940
Yeah.

00:20:57.440 --> 00:20:59.660
And that's, this is not good, is it?

00:21:00.120 --> 00:21:00.960
If that was you.

00:21:01.580 --> 00:21:05.280
And so this points out, like, if you don't have your own domain,

00:21:05.560 --> 00:21:08.440
if I was, I don't really remember what my username was,

00:21:08.680 --> 00:21:10.320
mkennedy.wordpress.com.

00:21:10.460 --> 00:21:12.380
I don't think that's what it was, but whatever it is,

00:21:12.640 --> 00:21:15.360
if that was what your domain was, your content is gone

00:21:15.420 --> 00:21:18.780
and you have no choice whatsoever if the server shuts down forever.

00:21:19.300 --> 00:21:20.940
Because you can't remap that domain.

00:21:21.000 --> 00:21:23.720
You don't own wordpress.com or typepad.com.

00:21:24.620 --> 00:21:26.800
And I'm just, you know, looking around.

00:21:26.960 --> 00:21:29.200
There's some other places that might want to,

00:21:29.380 --> 00:21:30.500
oh, hold on, that didn't copy.

00:21:31.020 --> 00:21:34.500
There are some other places that might want to take that to heart.

00:21:34.620 --> 00:21:35.820
For example, the PSF.

00:21:36.660 --> 00:21:37.520
Blogspot, I know.

00:21:38.420 --> 00:21:40.420
It's pyfound.blogspot.com.

00:21:40.980 --> 00:21:47.000
I know we have some people who are full-time employees making an amazing impact at the PSF.

00:21:47.000 --> 00:21:52.080
We have Luca Schlinger, developer-in-residence, South Michael Larson, Mike Fiedler.

00:21:52.640 --> 00:21:58.140
There's an opportunity for somebody to go, let's get our own custom domain here and just leave it on Blogspot.

00:21:58.740 --> 00:22:02.540
But if for some reason Blogspot shuts down just like TypePad did,

00:22:03.200 --> 00:22:04.740
it's going to be quite the bad time.

00:22:06.480 --> 00:22:07.820
So anyway, yeah.

00:22:08.040 --> 00:22:09.060
What else do I have to add to this?

00:22:10.120 --> 00:22:10.300
Nothing.

00:22:11.020 --> 00:22:11.900
I don't have anything to add.

00:22:12.020 --> 00:22:14.860
I just think if you feel like your stuff has been out there trapped

00:22:15.240 --> 00:22:18.700
and been hostage, you can not only get it out,

00:22:19.120 --> 00:22:20.660
but you can really carefully decide.

00:22:20.860 --> 00:22:24.100
I want it to appear in my new setup exactly like this.

00:22:24.220 --> 00:22:26.700
I want it under slash R for archived.

00:22:27.140 --> 00:22:29.420
And also, if you go to my RSS feed,

00:22:29.800 --> 00:22:31.640
the older posts don't show up in RSS,

00:22:31.860 --> 00:22:32.600
but the newer ones do.

00:22:32.740 --> 00:22:33.760
Because I don't want people to just go,

00:22:33.920 --> 00:22:35.760
whoa, where did 160 new posts come from

00:22:35.840 --> 00:22:37.120
and why are they 10 years old?

00:22:37.500 --> 00:22:37.920
You know what I mean?

00:22:39.280 --> 00:22:41.360
So I think there's a lot of flexibility here.

00:22:41.520 --> 00:22:43.980
And it used to be like it was not worth it,

00:22:44.140 --> 00:22:46.160
but if you just fire up an agentic AI

00:22:46.340 --> 00:22:47.200
and let it go on it,

00:22:47.300 --> 00:22:48.240
like it might be worth it.

00:22:48.600 --> 00:22:49.100
Because it's not there.

00:22:49.280 --> 00:22:50.560
I think I wrote down in the notes,

00:22:50.660 --> 00:22:52.140
it took me three to four hours to do this.

00:22:52.480 --> 00:22:53.980
And to me, that felt like, okay,

00:22:54.480 --> 00:22:58.900
I've, I've, my coat, my content has been held hostage by WordPress.com.

00:22:58.950 --> 00:23:00.180
And I finally, you know,

00:23:00.180 --> 00:23:03.440
I sent in like seal team six and we got it out without actually paying the

00:23:03.580 --> 00:23:07.340
ransom sort of, it's kind of how I feel about it. Anyway,

00:23:07.900 --> 00:23:10.740
what did you do for yours? Cause you moved yours around as well, right?

00:23:11.200 --> 00:23:16.460
Yeah. So I, let me, I'll pop over and show you,

00:23:16.630 --> 00:23:19.280
well, are we into extras now? I guess we'll just,

00:23:19.380 --> 00:23:22.400
we are into extras. I'm done with this topic anyway. How's that?

00:23:22.700 --> 00:23:28.340
Okay, well, I'll show you at least this little bit.

00:23:28.580 --> 00:23:31.880
So over at pythontest.com, so not that one,

00:23:32.720 --> 00:23:35.980
I have a, under the extras, I got test and code archive.

00:23:36.200 --> 00:23:40.300
So I took, I did an archive of all of test and code,

00:23:40.480 --> 00:23:42.260
200 and, well, I'm missing episode one,

00:23:42.440 --> 00:23:45.180
so it's 237 episodes off by one error.

00:23:45.400 --> 00:23:46.360
I kind of like that anyway.

00:23:48.000 --> 00:23:51.640
So in each of these is, of course, it's a markdown file.

00:23:52.640 --> 00:23:55.900
And how to get all this.

00:23:56.140 --> 00:24:01.020
So this is like the same similar URL.

00:24:02.120 --> 00:24:03.820
The old testing code is still up.

00:24:04.100 --> 00:24:09.780
And if I go to that episode, that episode's so long and thanks for all the fish.

00:24:10.140 --> 00:24:10.700
That's there.

00:24:11.000 --> 00:24:20.320
And then over at the archive, it's sort of the same URL for that episodes.

00:24:20.780 --> 00:24:27.340
But if I want to redirect it, like if somebody just types in 237 or 238, that's supposed to work also.

00:24:27.820 --> 00:24:30.680
So I've got it set up to do that.

00:24:30.740 --> 00:24:33.080
I think 238 works.

00:24:34.060 --> 00:24:39.320
And also, even if they just go to the top level of that, I think that works.

00:24:40.280 --> 00:24:41.620
And that's done with aliases.

00:24:42.020 --> 00:24:42.840
So I didn't do it.

00:24:42.960 --> 00:24:45.560
I did it with Markdown or Hugo aliases.

00:24:45.720 --> 00:24:48.280
I didn't do it with something else.

00:24:49.660 --> 00:24:58.740
And then eventually, probably next week, I'm going to redirect the top-level testing code to the archive page.

00:24:59.740 --> 00:25:01.400
Yeah, what are the archive pages?

00:25:01.580 --> 00:25:04.540
This top-level pythontest.com slash testing code.

00:25:04.790 --> 00:25:05.420
Yeah, perfect.

00:25:06.100 --> 00:25:09.420
And then anything after that will just redirect to wherever.

00:25:09.730 --> 00:25:11.240
So that's how I'm doing that.

00:25:11.480 --> 00:25:12.180
Yeah, that's really cool.

00:25:12.440 --> 00:25:16.580
I didn't do the people thing yet, and I don't know if I will.

00:25:16.620 --> 00:25:25.000
So I had like all of the different people had their own little page, but there's not much there other than social links and stuff.

00:25:25.100 --> 00:25:27.180
So I might just do that.

00:25:27.720 --> 00:25:28.680
Yeah, that's not it worked.

00:25:29.600 --> 00:25:41.080
But I also had, I almost had it working, but I had a hard time finding all of these original links because the feed XML that I downloaded was incorrect.

00:25:41.160 --> 00:25:49.560
and i i i popped open uh what uh copilot with using claude sonnet for something like that

00:25:49.980 --> 00:25:56.160
and and said hey um um i'm trying to import this can i get you write a python script to

00:25:56.210 --> 00:26:04.460
to grab all the links and and it it said oh i'm trying to but the feed the xml is corrupted

00:26:04.500 --> 00:26:12.200
um and and then um uh but it like worked around it and did it anyway with like just like parsing

00:26:12.400 --> 00:26:17.720
the file um which was kind of ugly but i'm like hey i just need to get this done like five minutes so

00:26:18.120 --> 00:26:22.360
yeah yeah you don't ever need to keep that code once it's done it's done yeah a lot of people

00:26:22.410 --> 00:26:27.060
will say things like oh i can't believe you would use ai for this you know those things make up stuff

00:26:27.340 --> 00:26:31.760
and whatever and it's like it when it wrote the program it's either going to migrate it over

00:26:31.760 --> 00:26:36.540
successfully or not you can look at the article and see is the content there and is it all out

00:26:36.540 --> 00:26:41.200
of whack or does it look fine and if it's fine who cares there's no tech debt there's none none of

00:26:41.260 --> 00:26:46.020
that because i'm never going to run that again i literally map the remap the dns and it's gone

00:26:46.250 --> 00:26:52.980
i deleted my paid account and it's gone yeah and it and i needed to update like 237 markdown files

00:26:53.220 --> 00:26:59.039
and i just i'm probably gonna if i have to make modifications to them later i'll do it one off

00:26:59.060 --> 00:27:01.080
Like I'll just do a search and replace for everything.

00:27:02.000 --> 00:27:03.260
And which that's what I did also.

00:27:03.330 --> 00:27:07.200
So I had these like link to the episode archive and also the feed URL.

00:27:07.550 --> 00:27:09.000
I'm like, oh, I should have added those in.

00:27:09.240 --> 00:27:11.480
Well, I just did a search and replace on all the files and did that.

00:27:11.850 --> 00:27:14.360
I didn't add, ask Claude to do that for me.

00:27:15.580 --> 00:27:17.880
But so there's all sorts of fun stuff.

00:27:18.500 --> 00:27:23.160
And thanks to DigitalOcean, the new episodes are hosted.

00:27:23.940 --> 00:27:24.440
Sorry about that.

00:27:24.920 --> 00:27:27.800
The new episodes are hosted on DigitalOcean Spaces.

00:27:28.340 --> 00:27:29.580
Oh, is that where you put them?

00:27:29.760 --> 00:27:32.440
Yeah, I have a ton of stuff hosted on DigitalOcean Spaces.

00:27:32.900 --> 00:27:35.820
And anytime you see something like blobs.pythonbytes.fm,

00:27:36.180 --> 00:27:37.640
that's DigitalOcean Spaces as well.

00:27:37.940 --> 00:27:42.140
So that went down from like, what, 20 bucks a month,

00:27:42.410 --> 00:27:43.980
which isn't terrible that I was paying before,

00:27:44.280 --> 00:27:48.040
down to a whopping $5 a month with DigitalOcean Spaces.

00:27:48.340 --> 00:27:49.360
So that's great.

00:27:49.600 --> 00:27:50.340
And you have the freedom.

00:27:50.620 --> 00:27:51.280
Now it's in Hugo.

00:27:51.410 --> 00:27:52.260
You can do whatever you want.

00:27:52.980 --> 00:27:53.340
Exactly.

00:27:53.920 --> 00:27:54.120
All right.

00:27:54.590 --> 00:27:55.880
So that was one of my extras was,

00:27:56.180 --> 00:27:58.980
hey, the testing code is finally archived over.

00:27:59.000 --> 00:28:01.020
Yeah, I'm glad you decided to keep that around.

00:28:01.220 --> 00:28:04.560
That's a ton of work, and having that around for historical reasons is good.

00:28:04.740 --> 00:28:10.640
And I probably am going to do, to get off Transistor altogether, Python people.

00:28:11.200 --> 00:28:14.400
I got to do pythonpeople.fm, but I don't remember how many.

00:28:14.600 --> 00:28:16.040
Oops, Python people.

00:28:17.120 --> 00:28:19.580
It's like, what, 15, 14 episodes.

00:28:20.160 --> 00:28:21.580
I could do that by hand if I had to.

00:28:22.500 --> 00:28:23.600
So that's not going to be bad.

00:28:23.900 --> 00:28:26.160
Okay, the other extra that I wanted to talk about

00:28:26.480 --> 00:28:29.060
was just a really fun thing that Seth Larson brought up.

00:28:29.400 --> 00:28:34.020
So Seth Larson put a post up for SMS URLs,

00:28:34.620 --> 00:28:38.000
and he said, did you know that you can like the mail to URL?

00:28:38.400 --> 00:28:39.200
You can do SMS.

00:28:40.420 --> 00:28:45.460
And I'm not going to click on this because it won't do anything on my laptop,

00:28:45.630 --> 00:28:46.240
I don't think.

00:28:46.400 --> 00:28:47.200
Also the Hollywood.

00:28:47.500 --> 00:28:48.200
No, yeah.

00:28:49.140 --> 00:28:53.520
But if you do it on your phone, it'll open up an SMS.

00:28:53.800 --> 00:28:59.580
like it'll open up your SMS app, your text messaging app, and fill it in with Hello World,

00:28:59.980 --> 00:29:06.740
which is cool. So this whole fill-in thing, why is this neat? Well, so it's fun anyway. It's just

00:29:06.920 --> 00:29:12.840
fun for one, but also wouldn't it be cool if you could just type in, one of the things you can do

00:29:12.900 --> 00:29:21.340
with URLs is you can create QR codes. So Seth also wrote this draft an SMS message from any keyboard,

00:29:21.680 --> 00:29:25.860
computer keyboard because you can just go to a computer and type stuff in here and it generates

00:29:26.100 --> 00:29:33.860
a uh qr code and the fun thing is as you're typing the qr changes because that is wild i love it yeah

00:29:34.160 --> 00:29:39.900
watch this so if you take like a bunch of lorem ipsum um and drop it in there you get like this

00:29:40.640 --> 00:29:48.139
oh my gosh you need a high-res print out of that

00:29:49.620 --> 00:29:54.160
yeah but then so what you do is you just point your so you you don't even have to have sms you

00:29:54.160 --> 00:29:58.480
could anywhere you can be at a work computer and even just type this in it doesn't save it

00:29:58.760 --> 00:30:06.320
anywhere and then you just um uh snap the qr code with your phone and it opens up your um your text

00:30:06.500 --> 00:30:13.299
messages so um it's pretty fun yeah yeah i just thought that was neat also uh i still use laura

00:30:13.320 --> 00:30:21.160
ipsum all the time so shout out to lauramipsum.com anyway yeah um i prefer the um the hipster ipsum

00:30:21.560 --> 00:30:27.760
hipster ipsum have you seen it oh i don't know hipster ipsum me um yeah hit it give that give

00:30:27.760 --> 00:30:34.740
that a little bit of a read oh yeah i'm baby post ironic green juice cornhole norm core actually

00:30:35.360 --> 00:30:43.280
heirloom beard quinoa cronut put a bird on it mutt but put a bird on it man fun oh this is good

00:30:43.460 --> 00:30:43.640
Yeah.

00:30:44.040 --> 00:30:44.700
Off to do this.

00:30:46.200 --> 00:30:46.640
I don't know.

00:30:46.640 --> 00:30:48.580
I just get tired of looking at Laura Mipsum all the time.

00:30:48.700 --> 00:30:51.880
I'm like, ah, let's just throw some cupping kinfolk.

00:30:54.320 --> 00:30:56.540
Butcher next level plus one waistcoat.

00:30:56.720 --> 00:30:59.480
Venmo, same Franzen microdosing.

00:30:59.880 --> 00:31:00.160
Cred.

00:31:00.620 --> 00:31:00.980
Microdosing.

00:31:01.340 --> 00:31:01.860
Farm to table.

00:31:01.880 --> 00:31:03.360
Farm to table microdosing.

00:31:04.100 --> 00:31:04.460
Vaporware.

00:31:05.240 --> 00:31:05.980
Yeah, this is good.

00:31:06.200 --> 00:31:06.840
It's pretty good, yeah.

00:31:07.180 --> 00:31:08.620
But same basic ideas, Laura Mipsum.

00:31:09.620 --> 00:31:10.420
8-bit literally.

00:31:10.940 --> 00:31:11.540
Yeah, nice.

00:31:11.920 --> 00:31:12.140
All right.

00:31:12.200 --> 00:31:13.400
You got any more extras or is that it?

00:31:13.620 --> 00:31:17.040
No, that's my extras, but we've got one big extra, right?

00:31:17.110 --> 00:31:17.460
Oh, yeah.

00:31:17.970 --> 00:31:18.320
We do.

00:31:18.500 --> 00:31:19.200
This is the big one.

00:31:19.800 --> 00:31:24.900
So the Python, the documentary, an origin story is out.

00:31:25.210 --> 00:31:33.200
And it's a one hour, 24 minute, highly produced, very entertaining documentary with many friends

00:31:33.290 --> 00:31:33.820
of the show.

00:31:34.140 --> 00:31:37.380
People have been on your other shows, Brian, like your Python people.

00:31:37.540 --> 00:31:38.920
A lot of them are here, right?

00:31:39.500 --> 00:31:39.600
Yeah.

00:31:40.780 --> 00:31:45.260
you know same for talk python as well and i am really looking forward to watching this it came

00:31:45.320 --> 00:31:49.700
out a couple days ago and i'm like oh i could watch it but i actually think what would be really fun

00:31:49.960 --> 00:31:55.140
i would love to just hear your first impression of this i think it would be fun to do a group

00:31:55.840 --> 00:32:01.100
watch through and set up some kind of chat like a discord chat or something for whoever wants to

00:32:01.200 --> 00:32:04.140
watch it all together and hasn't seen it yet i think that'd be kind of cool and just have like

00:32:04.240 --> 00:32:10.380
a chat going in parallel to watching it something like that so kind of like people do with keynotes

00:32:10.400 --> 00:32:15.000
now and then and so on so i don't know i'm contemplating the logistics of that if i can

00:32:15.100 --> 00:32:18.420
come up with a good idea on the next day or two then i'll do that otherwise i'll just watch it

00:32:18.620 --> 00:32:24.080
well i mean there was when it first came out they did like a chat thing yeah it came out as a premiere

00:32:24.300 --> 00:32:28.900
i believe and you can see the chat replay but like how many people who would want to watch this

00:32:29.160 --> 00:32:34.060
actually watched it during its premiere you know probably not that many yeah so i just got rid of

00:32:34.060 --> 00:32:38.580
my inflatable screen too we could have done it in like a cul-de-sac or something oh you had one

00:32:38.600 --> 00:32:43.940
of those big oh that's awesome yeah during the pandemic we had like this what 20 foot 23 foot

00:32:44.280 --> 00:32:48.360
screen or something like that um so yeah that's actually a really good idea we didn't have that

00:32:49.280 --> 00:32:55.520
well you suck i guess i don't know actually um we have a covered outdoor area in the back now and

00:32:55.670 --> 00:33:01.820
i ended up long story ended up with an extra 50 inch flat screen tv and bought it for my dad and

00:33:02.000 --> 00:33:05.320
it turns out he didn't need it anymore so i got it back i'm like what am i gonna do this i'm like

00:33:05.320 --> 00:33:06.140
We're sticking this outside.

00:33:06.650 --> 00:33:09.460
So we've got a little area, but it's not a 20-foot screen.

00:33:10.220 --> 00:33:11.860
That's the next level business right there.

00:33:12.120 --> 00:33:13.280
I don't remember how big it was.

00:33:13.310 --> 00:33:14.180
It was probably that.

00:33:14.480 --> 00:33:16.440
It was a big inflatable thing.

00:33:16.620 --> 00:33:17.860
It's bigger than a regular TV.

00:33:18.000 --> 00:33:18.280
That's awesome.

00:33:19.520 --> 00:33:21.180
Anyway, I recommend people watch this.

00:33:21.240 --> 00:33:24.400
We talked about the trailer when it came out, and it was really good, wasn't it?

00:33:24.700 --> 00:33:24.940
Yeah.

00:33:25.190 --> 00:33:28.600
So I was hoping to get this watched before we recorded.

00:33:28.840 --> 00:33:30.260
Did you happen to watch any of this?

00:33:30.620 --> 00:33:31.180
No, I'm waiting.

00:33:31.280 --> 00:33:35.280
I'm just like, I'm delaying it because I want to try to figure out something fun for...

00:33:35.920 --> 00:33:36.480
That'd be fun.

00:33:36.840 --> 00:33:37.000
Cool.

00:33:37.120 --> 00:33:38.720
Now I don't feel bad about not watching it yet.

00:33:38.720 --> 00:33:41.140
I watched like a few minutes and I was like, oh, it's an hour and a half.

00:33:41.240 --> 00:33:43.020
I'm going to have to set aside some time to do this.

00:33:43.060 --> 00:33:43.280
Yeah.

00:33:43.640 --> 00:33:43.760
Yeah.

00:33:44.320 --> 00:33:49.220
And looking up, I think I've got like, you probably have all of these interviewed on your,

00:33:49.760 --> 00:33:50.420
on Talk Python.

00:33:50.560 --> 00:33:53.340
I think I've got half of the people shown on like the opening screen.

00:33:53.960 --> 00:33:54.080
Yeah.

00:33:54.260 --> 00:33:55.980
There's maybe eight or nine people.

00:33:56.200 --> 00:33:58.060
I think almost everyone.

00:33:58.740 --> 00:34:02.640
I think there's one person I don't necessarily recognize through the little thin slice.

00:34:02.800 --> 00:34:04.680
But yeah, I would say other than that, yeah, everyone's been on the show.

00:34:04.980 --> 00:34:05.140
It's cool.

00:34:05.200 --> 00:34:05.520
Cool.

00:34:06.860 --> 00:34:07.500
Well, cool.

00:34:07.780 --> 00:34:08.340
Can't wait to watch it.

00:34:08.780 --> 00:34:09.040
All right.

00:34:09.320 --> 00:34:09.980
Are you ready to laugh?

00:34:10.679 --> 00:34:10.740
Yeah.

00:34:10.800 --> 00:34:12.060
Let the hilarity ensue.

00:34:12.179 --> 00:34:12.440
We'll see.

00:34:12.560 --> 00:34:13.460
I can't remember what I came up with.

00:34:13.500 --> 00:34:14.060
Oh, yeah.

00:34:14.200 --> 00:34:17.100
So this one is like a Jedi.

00:34:17.700 --> 00:34:17.820
Think.

00:34:18.340 --> 00:34:21.360
I want to just put you in the mindset before we get to it.

00:34:21.399 --> 00:34:21.780
Okay, Brian?

00:34:22.040 --> 00:34:22.240
Okay.

00:34:22.379 --> 00:34:23.300
You're on Tatooine.

00:34:23.679 --> 00:34:26.940
You've been told of this Obi-Wan Kenobi who you must find.

00:34:27.379 --> 00:34:30.580
You know the old wizard man out past the cantina.

00:34:31.679 --> 00:34:36.080
So it says, the joke is, it has Obi-Wan, Obi-Wan Kenobi.

00:34:36.280 --> 00:34:39.320
And it says, when you read some incredibly bad code thinking,

00:34:39.580 --> 00:34:40.600
what moron wrote this?

00:34:40.720 --> 00:34:42.840
But halfway through, it starts to become familiar.

00:34:43.780 --> 00:34:44.800
Well, of course I know him.

00:34:45.080 --> 00:34:45.500
He is me.

00:34:46.860 --> 00:34:47.080
Yeah.

00:34:47.879 --> 00:34:48.820
Do you know this Obi-Wan?

00:34:49.000 --> 00:34:50.020
Yes, of course I know him.

00:34:51.220 --> 00:34:53.360
Do you know the bad wizard who wrote the bad code?

00:34:53.540 --> 00:34:54.340
Of course I know him.

00:34:54.460 --> 00:34:54.840
He is me.

00:34:55.200 --> 00:34:55.399
Yeah.

00:34:55.740 --> 00:34:57.720
Actually, yeah, it's usually that.

00:34:57.960 --> 00:35:01.220
I really love it when it's not me, but it's usually me.

00:35:01.500 --> 00:35:04.440
You pull up get blamed because you're like, I'm going to, oh no.

00:35:06.080 --> 00:35:06.400
Oh no.

00:35:07.060 --> 00:35:07.160
Yeah.

00:35:07.520 --> 00:35:08.440
I really like that.

00:35:08.620 --> 00:35:08.740
Yeah.

00:35:09.120 --> 00:35:14.440
It's, it's addictive, but I like have, I have blame on every line turned on VS Code so

00:35:14.520 --> 00:35:17.900
that whatever, whatever I'm working on, I'm like, who did this?

00:35:18.160 --> 00:35:18.740
Oh yeah.

00:35:19.520 --> 00:35:19.660
Yeah.

00:35:20.180 --> 00:35:20.280
Yeah.

00:35:20.320 --> 00:35:20.900
It's kind of nice.

00:35:21.000 --> 00:35:21.660
It's kind of nice.

00:35:21.960 --> 00:35:25.380
But I'm, it's also just the last person that touched that line as well.

00:35:25.620 --> 00:35:29.000
So sometimes it's me, even though, even if I didn't write the logic.

00:35:29.420 --> 00:35:29.540
Right.

00:35:29.580 --> 00:35:33.240
It could be something so simple as you ran Ruff format and then committed the change.

00:35:33.560 --> 00:35:34.020
Yeah, exactly.

00:35:34.400 --> 00:35:34.460
Yeah.

00:35:34.760 --> 00:35:34.880
Yeah.

00:35:35.200 --> 00:35:35.420
All right.

00:35:35.520 --> 00:35:36.780
Anyway, of course I know him.

00:35:36.880 --> 00:35:37.300
He is me.

00:35:38.140 --> 00:35:38.820
Of course I know.

00:35:39.600 --> 00:35:39.920
All right.

00:35:40.180 --> 00:35:40.280
Cool.

00:35:40.640 --> 00:35:42.220
Well, wonderful episode again.

00:35:42.460 --> 00:35:44.040
Thanks everybody for showing up and listening.

00:35:44.380 --> 00:35:45.100
We'll talk to you next week.

00:35:45.360 --> 00:35:45.580
Bye-bye.

