WEBVTT

00:00:00.020 --> 00:00:05.300
<v Michael Kennedy>Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to earbuds.

00:00:05.860 --> 00:00:12.960
<v Michael Kennedy>This is episode 466, recorded Monday, January 19th, 2026.

00:00:13.130 --> 00:00:13.740
<v Michael Kennedy>I'm Michael Kennedy.

00:00:14.060 --> 00:00:14.840
<v Michael Kennedy>And I'm Brian Okken.

00:00:15.120 --> 00:00:17.380
<v Michael Kennedy>This episode is brought to you by us, all of our things.

00:00:17.570 --> 00:00:22.440
<v Michael Kennedy>I know Brian is very lean these days with his TDD and would like to tell you about it more on that later,

00:00:22.680 --> 00:00:25.740
<v Michael Kennedy>but he's got his upcoming book and course.

00:00:26.440 --> 00:00:30.440
<v Michael Kennedy>I've got my Talk Python in production book, which is still going strong.

00:00:30.570 --> 00:00:31.100
<v Michael Kennedy>I love that.

00:00:31.720 --> 00:00:34.300
<v Michael Kennedy>Of course, all of our courses, things like that.

00:00:34.860 --> 00:00:36.460
<v Michael Kennedy>Also, connect with us on social media.

00:00:36.900 --> 00:00:42.260
<v Michael Kennedy>Links for most of the places that you might do so in the episode show notes to your podcast player and Sean.

00:00:43.040 --> 00:00:45.000
<v Michael Kennedy>And finally, subscribe to the newsletter.

00:00:45.560 --> 00:00:47.100
<v Michael Kennedy>We're putting awesome things in there.

00:00:47.400 --> 00:00:49.400
<v Michael Kennedy>Lots more than just the show notes.

00:00:50.040 --> 00:00:54.560
<v Michael Kennedy>So it's kind of a nice reinforcement, a few extra resources if you like them.

00:00:54.820 --> 00:00:57.440
<v Michael Kennedy>Yeah. Mostly put together by Brian. So we appreciate that, Brian.

00:00:57.880 --> 00:00:57.980
<v Michael Kennedy>Thanks.

00:00:58.580 --> 00:01:05.540
<v Michael Kennedy>Yeah, you bet. I also appreciate a good web framework with a solid community. What do you got in that realm?

00:01:06.560 --> 00:01:22.320
<v Brian Okken>Well, we're going to talk about Django. So put this up here. Django, I ran across this article about that's six months old from the revsys. It's from June of 2025. But I had it in my queue and I'm going to cover it.

00:01:22.460 --> 00:01:26.800
<v Brian Okken>So better Django management commands with Django click and Django typer.

00:01:27.100 --> 00:01:29.380
<v Brian Okken>And this is from Lacey Henschel.

00:01:30.080 --> 00:01:33.960
<v Brian Okken>And so let's look at the management commands.

00:01:34.300 --> 00:01:37.000
<v Brian Okken>If anybody that's used Django, you know, there's management commands.

00:01:37.140 --> 00:01:37.900
<v Brian Okken>There's a bunch of them.

00:01:38.080 --> 00:01:44.500
<v Brian Okken>So there's, there's, you just say like, man, you've got, if you're in the Django thing,

00:01:44.600 --> 00:01:50.540
<v Brian Okken>you can go manage.py command, or you can do Django admin command or Python dash M Django,

00:01:51.180 --> 00:01:53.700
<v Brian Okken>then the command, there's a bunch of built-in ones.

00:01:54.380 --> 00:02:00.480
<v Brian Okken>And since they're things like just the maintenance around your website stuff and other things,

00:02:00.740 --> 00:02:04.560
<v Brian Okken>but there's a lot of stuff there.

00:02:04.860 --> 00:02:08.020
<v Brian Okken>And it's so convenient that it'd be cool if you could add your own.

00:02:08.280 --> 00:02:10.100
<v Brian Okken>And there is built-in stuff.

00:02:10.140 --> 00:02:14.720
<v Brian Okken>You can create custom commands, but you do it by deriving.

00:02:14.760 --> 00:02:21.260
<v Brian Okken>you have to derive from a base command class and then have self everywhere.

00:02:21.590 --> 00:02:26.140
<v Brian Okken>And there's the object-oriented part of that that's weird.

00:02:26.680 --> 00:02:30.140
<v Brian Okken>But there's better ways to do, there are at least different ways.

00:02:30.320 --> 00:02:32.500
<v Brian Okken>If this doesn't jive with you, there's better ways.

00:02:32.750 --> 00:02:33.780
<v Brian Okken>And that's what we're talking about.

00:02:34.640 --> 00:02:36.840
<v Brian Okken>This is with Django Click and Django Typer.

00:02:37.140 --> 00:02:41.120
<v Brian Okken>So first off, one of the cool things is she runs down

00:02:41.340 --> 00:02:43.160
<v Brian Okken>why you would want to add your own management commands.

00:02:43.600 --> 00:02:47.400
<v Brian Okken>And there's a lot of great reasons like data operations, importing.

00:02:47.850 --> 00:02:52.560
<v Brian Okken>Like she has an example of importing CSV file from clients, exporting data for reports.

00:02:53.320 --> 00:02:54.120
<v Brian Okken>Those are great things.

00:02:56.099 --> 00:03:03.400
<v Brian Okken>You're doing it on the system, but you can just go use the same internals of Django to be able to pull things out.

00:03:03.580 --> 00:03:03.900
<v Brian Okken>That's great.

00:03:04.320 --> 00:03:06.440
<v Brian Okken>Also, development and debugging, one of my favorite reasons.

00:03:07.180 --> 00:03:07.340
<v Brian Okken>Okay.

00:03:07.830 --> 00:03:10.240
<v Brian Okken>So first off, Django Click.

00:03:11.120 --> 00:03:16.840
<v Brian Okken>And Django Click is based on Click, of course.

00:03:17.220 --> 00:03:20.620
<v Brian Okken>And Click is a great way to do CLI tools too.

00:03:21.100 --> 00:03:26.740
<v Brian Okken>And so it's just an integration of Click and Django to get these management commands.

00:03:27.050 --> 00:03:28.700
<v Brian Okken>And you end up just creating a file.

00:03:29.010 --> 00:03:34.840
<v Brian Okken>And it's a lot shorter with some click options and stuff.

00:03:34.870 --> 00:03:36.620
<v Brian Okken>And it's just that integration of Click.

00:03:37.260 --> 00:03:41.400
<v Brian Okken>And then, again, Typer is also built on click also.

00:03:42.200 --> 00:03:44.800
<v Brian Okken>But if you're used to Typer, grab Typer.

00:03:44.800 --> 00:03:50.100
<v Brian Okken>But one of the cool things about Typer is the coloring and the different, the output.

00:03:50.360 --> 00:03:52.040
<v Brian Okken>You can do more structured output.

00:03:52.520 --> 00:04:00.660
<v Brian Okken>So they have an example where you have better things like emoji support and tables and things like that.

00:04:00.660 --> 00:04:05.139
<v Brian Okken>So if you want to do cool, and the article goes in and says,

00:04:06.440 --> 00:04:08.440
<v Brian Okken>hey, well, which one should you use?

00:04:08.860 --> 00:04:11.060
<v Brian Okken>I'm not going to scroll to the bottom, but which one should you use?

00:04:11.120 --> 00:04:16.140
<v Brian Okken>And it's basically, she says, she usually reaches for click, Django click,

00:04:16.440 --> 00:04:21.200
<v Brian Okken>but when she wants to do nice reports and stuff, do Django type her.

00:04:21.600 --> 00:04:23.620
<v Brian Okken>And they're both, I wrote this down,

00:04:24.420 --> 00:04:28.720
<v Brian Okken>they're both supported under, what is it?

00:04:28.760 --> 00:04:37.680
<v Brian Okken>The Django Commons group on GitHub supports both of these extra plugins or whatever.

00:04:38.140 --> 00:04:39.240
<v Brian Okken>So pretty cool.

00:04:39.640 --> 00:04:40.300
<v Michael Kennedy>Yeah, it was really nice.

00:04:40.820 --> 00:04:43.920
<v Michael Kennedy>Click and Typer are obviously super popular.

00:04:44.400 --> 00:04:48.080
<v Michael Kennedy>And if you're like, I know one of those, but I want to add a custom Django command,

00:04:48.260 --> 00:04:49.060
<v Michael Kennedy>like, let's just do it.

00:04:49.200 --> 00:04:52.960
<v Michael Kennedy>You know, I imagine I say this, as I say this, I'm sure it's out there,

00:04:53.000 --> 00:04:54.960
<v Michael Kennedy>but I have no awareness of its existence.

00:04:55.560 --> 00:05:06.940
<v Michael Kennedy>It would also be cool to have a textual sort of UI if you could just type manage pi-ish, manage tx or whatever, and you get like a UI for all these managed Django commands.

00:05:07.340 --> 00:05:09.040
<v Michael Kennedy>That'd be pretty neat, including your custom ones.

00:05:09.480 --> 00:05:10.100
<v Michael Kennedy>Probably out there.

00:05:10.500 --> 00:05:11.320
<v Michael Kennedy>I have no idea about it.

00:05:11.420 --> 00:05:13.660
<v Michael Kennedy>So maybe someone will send us a message where you can do a follow-up.

00:05:13.880 --> 00:05:16.700
<v Michael Kennedy>You know, it's the age-old question, Brian.

00:05:16.880 --> 00:05:19.240
<v Michael Kennedy>What would you do if you had a million dollars?

00:05:19.350 --> 00:05:21.000
<v Michael Kennedy>Think of a million dollars.

00:05:21.210 --> 00:05:24.920
<v Michael Kennedy>You never have to be subservient to society again.

00:05:25.360 --> 00:05:26.480
<v Michael Kennedy>Well, maybe it's not quite that way.

00:05:26.940 --> 00:05:28.260
<v Michael Kennedy>But we have really...

00:05:28.360 --> 00:05:29.800
<v Michael Kennedy>I think I'd need one and a half.

00:05:30.180 --> 00:05:31.660
<v Michael Kennedy>You would need one and a half because inflation.

00:05:31.960 --> 00:05:33.540
<v Michael Kennedy>You would actually need more than one and a half probably.

00:05:33.610 --> 00:05:36.280
<v Michael Kennedy>But you could sure make a dent with one and a half million dollars.

00:05:36.580 --> 00:05:45.620
<v Michael Kennedy>And that is really good news because Anthropic has just invested $1.5 million in the PSF and open source security.

00:05:45.900 --> 00:05:46.380
<v Michael Kennedy>That's awesome.

00:05:46.740 --> 00:05:49.760
<v Michael Kennedy>I want to take a minute and just, you know, thank you, Anthropic.

00:05:50.940 --> 00:05:52.760
<v Michael Kennedy>People hate on AI companies.

00:05:53.600 --> 00:05:56.400
<v Michael Kennedy>So I thought it was the folks that bring us Claude, right?

00:05:56.660 --> 00:05:58.920
<v Michael Kennedy>Yeah, Claude, Opus, Claude Sonnet, Claude Code.

00:05:59.480 --> 00:06:03.820
<v Michael Kennedy>And honestly, I've been using Claude, I think it's Claude AI,

00:06:04.360 --> 00:06:06.180
<v Michael Kennedy>as like the ChatGPT alternative.

00:06:06.440 --> 00:06:09.260
<v Michael Kennedy>Chat GPT has gotten really less good lately, and I don't understand.

00:06:09.680 --> 00:06:10.060
<v Michael Kennedy>It's weird.

00:06:10.640 --> 00:06:13.100
<v Michael Kennedy>Like I was just writing a blog post, which I'll talk about later,

00:06:13.540 --> 00:06:16.500
<v Michael Kennedy>and it's just doing super weird things, and I found like Claude is doing a lot.

00:06:16.580 --> 00:06:19.200
<v Michael Kennedy>So I think it's honestly one of the better AIs.

00:06:19.620 --> 00:06:21.559
<v Michael Kennedy>And if all these companies are going to make all this money

00:06:21.560 --> 00:06:23.080
<v Michael Kennedy>and exchange it around.

00:06:23.230 --> 00:06:25.480
<v Michael Kennedy>I really like to see Anthropic

00:06:26.080 --> 00:06:28.560
<v Michael Kennedy>putting this money back into Python.

00:06:29.180 --> 00:06:29.580
<v Michael Kennedy>You know, they're,

00:06:29.700 --> 00:06:31.380
<v Michael Kennedy>they're, it's not just Python too.

00:06:31.480 --> 00:06:32.660
<v Michael Kennedy>They just bought Bun,

00:06:33.140 --> 00:06:34.660
<v Michael Kennedy>which is like, as far as I understand,

00:06:34.730 --> 00:06:36.040
<v Michael Kennedy>it kind of like a node alternative,

00:06:36.620 --> 00:06:38.660
<v Michael Kennedy>certainly a JavaScript runtime thing

00:06:38.820 --> 00:06:39.800
<v Michael Kennedy>for a ton of money as well.

00:06:39.980 --> 00:06:41.140
<v Michael Kennedy>So they're, they're doing,

00:06:41.260 --> 00:06:41.600
<v Michael Kennedy>I mean, they're not,

00:06:41.690 --> 00:06:42.680
<v Michael Kennedy>they didn't buy the PSF.

00:06:43.010 --> 00:06:44.160
<v Michael Kennedy>They just gave money.

00:06:44.190 --> 00:06:45.860
<v Michael Kennedy>So this is over two years.

00:06:46.280 --> 00:06:47.040
<v Michael Kennedy>So what is that?

00:06:47.560 --> 00:06:48.680
<v Brian Okken>PSF isn't for sale.

00:06:48.840 --> 00:06:50.000
<v Brian Okken>It's not like Greenland or anything.

00:06:51.560 --> 00:07:02.200
<v Michael Kennedy>Well, I mean, I think we know that because they're turning down of that, probably not a coincidence, $1.5 million offered by the recent U.S. government with strings attached.

00:07:03.020 --> 00:07:05.040
<v Michael Kennedy>This one comes without strings, more or less.

00:07:05.120 --> 00:07:06.840
<v Michael Kennedy>I'm sure there are strings, but not to the same degree.

00:07:07.640 --> 00:07:09.520
<v Michael Kennedy>But it's really $750,000 a year.

00:07:10.180 --> 00:07:15.280
<v Michael Kennedy>And it has, let me see, I took some notes on exactly the goals of this.

00:07:15.380 --> 00:07:20.140
<v Michael Kennedy>but it's basically mostly for Python security from YRSTM,

00:07:20.260 --> 00:07:25.040
<v Michael Kennedy>but also to fund things like the developer in residence initiative,

00:07:25.760 --> 00:07:28.500
<v Michael Kennedy>community grants, which remember there was a big kerfuffle

00:07:28.860 --> 00:07:32.720
<v Michael Kennedy>about grants being paused or canceled because they ran out of money, right?

00:07:32.780 --> 00:07:35.620
<v Michael Kennedy>I mean, it sucks, and maybe they promised it and then didn't deliver it.

00:07:35.620 --> 00:07:37.620
<v Michael Kennedy>I don't remember. I feel like there was something like that.

00:07:37.800 --> 00:07:41.160
<v Michael Kennedy>But even if you promised it, if the money's gone, it's not like,

00:07:41.240 --> 00:07:42.440
<v Michael Kennedy>well, you work for the PSF.

00:07:42.600 --> 00:07:45.540
<v Michael Kennedy>we have your 401k so we can keep our promise.

00:07:45.780 --> 00:07:47.440
<v Michael Kennedy>You know, at some point, if the money's not there,

00:07:47.460 --> 00:07:48.040
<v Michael Kennedy>the money's not there.

00:07:48.220 --> 00:07:50.240
<v Michael Kennedy>So this is really awesome that this is back.

00:07:51.060 --> 00:07:54.360
<v Michael Kennedy>Infrastructure like PyPI, like I say this every now and then,

00:07:54.360 --> 00:07:56.320
<v Michael Kennedy>but I'm not sure how many people understand

00:07:56.800 --> 00:07:58.900
<v Michael Kennedy>how expensive PyPI is to run.

00:07:59.200 --> 00:08:03.340
<v Michael Kennedy>If it were not for fast to leave the CDN giving free bandwidth,

00:08:04.380 --> 00:08:07.320
<v Michael Kennedy>it's $100,000 or more a month.

00:08:07.460 --> 00:08:09.980
<v Michael Kennedy>I mean, it's a lot of money, right?

00:08:10.160 --> 00:08:11.700
<v Michael Kennedy>Compared to the overall budget.

00:08:12.300 --> 00:08:14.220
<v Michael Kennedy>And this is a lot of money compared to the overall budget.

00:08:14.250 --> 00:08:16.840
<v Michael Kennedy>I feel like the budget of the PSF is around $7 million.

00:08:17.300 --> 00:08:18.780
<v Michael Kennedy>I mean, I haven't checked in the last couple of years,

00:08:18.960 --> 00:08:20.360
<v Michael Kennedy>but last time I heard it was something like that.

00:08:20.880 --> 00:08:23.040
<v Michael Kennedy>So this is a significant portion of that.

00:08:23.440 --> 00:08:23.840
<v Michael Kennedy>Anything else?

00:08:24.030 --> 00:08:29.320
<v Brian Okken>Yeah, the current CDN cost, last article I found, is $1.5 million a month.

00:08:29.540 --> 00:08:29.800
<v Brian Okken>A month?

00:08:30.380 --> 00:08:31.460
<v Brian Okken>That can't be right.

00:08:32.280 --> 00:08:33.500
<v Brian Okken>I feel like that's high.

00:08:33.840 --> 00:08:36.360
<v Michael Kennedy>I mean, I know it's high, but I feel like even that's high.

00:08:36.659 --> 00:08:37.640
<v Michael Kennedy>It might be a year.

00:08:38.870 --> 00:08:39.479
<v Michael Kennedy>But I don't know.

00:08:39.570 --> 00:08:40.099
<v Michael Kennedy>I could be wrong.

00:08:40.620 --> 00:08:46.980
<v Michael Kennedy>There's actually a really nice article written up somewhere that I didn't make any part of our news about the stats of the PSF.

00:08:47.320 --> 00:08:51.120
<v Michael Kennedy>But I just heard it indirectly, so I don't have it to pull up.

00:08:51.260 --> 00:09:01.260
<v Michael Kennedy>Anyway, so one of the goals is to fund new automated tools for proactively reviewing all packages uploaded to PyPI, moving beyond a reactive only review process.

00:09:01.440 --> 00:09:07.600
<v Michael Kennedy>Remember a few weeks ago, I talked about, hey, here's how you set up like Python supply chain security.

00:09:07.820 --> 00:09:14.640
<v Michael Kennedy>And one of the main ways, honestly, is wait a little while to install it and then check if a problem has been reported.

00:09:15.340 --> 00:09:16.460
<v Michael Kennedy>It's kind of that reactive thing.

00:09:16.480 --> 00:09:22.800
<v Michael Kennedy>It's like, well, probably somebody, if something happens to a major package, will figure it out within a few days and react to it.

00:09:22.940 --> 00:09:26.020
<v Michael Kennedy>So wouldn't it be nice if that didn't have to happen that way?

00:09:26.020 --> 00:09:26.360
<v Michael Kennedy>It would.

00:09:26.940 --> 00:09:28.240
<v Michael Kennedy>You know, that is how it happens, right?

00:09:29.879 --> 00:09:34.680
<v Michael Kennedy>And the PSF plans to build a new data set of new malware for capabilities analysis.

00:09:35.000 --> 00:09:36.180
<v Michael Kennedy>So all sorts of good stuff.

00:09:36.820 --> 00:09:40.420
<v Michael Kennedy>I just wanted to shine a light on this, say thank you, Anthropic.

00:09:41.020 --> 00:09:45.020
<v Michael Kennedy>And yeah, it's really great for PSF and everyone, I think.

00:09:45.220 --> 00:09:50.960
<v Brian Okken>Well, I did notice this, but also a couple of people mentioned it to us.

00:09:51.420 --> 00:09:56.100
<v Brian Okken>An article by Andrew Nesbitt, how uv got so fast.

00:09:56.480 --> 00:10:00.620
<v Brian Okken>And there's a lot of reasons why I like this article.

00:10:01.620 --> 00:10:04.160
<v Brian Okken>First off, just right off the top of the bat, this says,

00:10:04.320 --> 00:10:08.020
<v Brian Okken>says, hey, usual explanation is it's written in Rust.

00:10:08.140 --> 00:10:09.920
<v Brian Okken>And that's kind of what we think is, right?

00:10:10.520 --> 00:10:13.360
<v Brian Okken>Is like you can take Python tools, rewrite them in Rust,

00:10:13.360 --> 00:10:14.020
<v Brian Okken>and they'll be faster.

00:10:14.240 --> 00:10:15.580
<v Brian Okken>But it's a lot more than that.

00:10:16.340 --> 00:10:18.940
<v Brian Okken>The Rust part is contributing, of course.

00:10:21.840 --> 00:10:24.060
<v Brian Okken>But there's some tweaks around it

00:10:24.340 --> 00:10:28.040
<v Brian Okken>and also some design decisions that make it a lot faster.

00:10:28.800 --> 00:10:29.800
<v Brian Okken>And it's interesting to read.

00:10:30.000 --> 00:10:32.660
<v Brian Okken>So one of the things is around the standards.

00:10:33.060 --> 00:10:35.980
<v Brian Okken>So there's a bunch of standards that came in to make this possible.

00:10:36.200 --> 00:10:39.720
<v Brian Okken>There's 518 that created pyproject.toml.

00:10:40.300 --> 00:10:43.000
<v Brian Okken>So uv reads pyproject.toml.

00:10:43.000 --> 00:10:44.260
<v Brian Okken>It doesn't read setup.py.

00:10:44.290 --> 00:10:45.600
<v Brian Okken>You can't do any other stuff.

00:10:45.670 --> 00:10:46.560
<v Brian Okken>You have to do wheels.

00:10:46.780 --> 00:10:48.640
<v Brian Okken>That's what uv looks for.

00:10:50.660 --> 00:10:52.440
<v Brian Okken>Also, actually, I could be wrong.

00:10:52.700 --> 00:10:54.220
<v Brian Okken>I think I'm overstating that.

00:10:55.000 --> 00:10:59.840
<v Brian Okken>I think it does do backwards compatible stuff, and it just falls back to different modes.

00:11:00.660 --> 00:11:02.560
<v Brian Okken>Well, I'll have to double check that, but I think so.

00:11:03.100 --> 00:11:11.700
<v Brian Okken>Anyway, PEP 517 came in in 2017, which is a separate build front ends and back ends.

00:11:12.940 --> 00:11:16.280
<v Brian Okken>So now even PEP doesn't need to understand set of tools internals.

00:11:16.900 --> 00:11:24.020
<v Brian Okken>There's PEP 621 that standardized the bracket project table within the TOML file and reading

00:11:24.140 --> 00:11:25.320
<v Brian Okken>tables, TOMLs.

00:11:26.020 --> 00:11:34.200
<v Brian Okken>And then there's the PEP 658, which was a package metadata directly in the simple repository API.

00:11:35.160 --> 00:11:41.980
<v Brian Okken>Essentially, you don't the tools on the back when you do install something, they don't have to grab a whole bunch of data.

00:11:42.070 --> 00:11:46.760
<v Brian Okken>They just have to grab like this, this dependency information, which they used to have to.

00:11:47.200 --> 00:11:56.280
<v Brian Okken>There's more of a story here about how pip used to have to go out and just really download, try stuff, and then try to run it.

00:11:56.280 --> 00:11:57.880
<v Brian Okken>If it didn't work, try something else.

00:11:58.220 --> 00:11:59.120
<v Brian Okken>There's a bunch of stuff there.

00:11:59.460 --> 00:12:00.860
<v Brian Okken>There's more than that, though.

00:12:01.460 --> 00:12:08.900
<v Brian Okken>Having these in place, basically it says uv could not have shipped in 2020 because all these weren't in place.

00:12:09.300 --> 00:12:11.280
<v Brian Okken>So it relied on everything.

00:12:12.980 --> 00:12:16.500
<v Brian Okken>PIP-658 went live in PIP-I in May of 2023.

00:12:17.080 --> 00:12:19.960
<v Brian Okken>And uv launched February 2024.

00:12:20.360 --> 00:12:22.560
<v Brian Okken>So it's building on top of all those things.

00:12:23.640 --> 00:12:25.160
<v Brian Okken>Also, uv drops a bunch of stuff.

00:12:25.900 --> 00:12:31.460
<v Brian Okken>PIP still supports a lot of old stuff, which uv just doesn't, like egg support.

00:12:31.800 --> 00:12:34.100
<v Brian Okken>PIPConf doesn't support that.

00:12:34.460 --> 00:12:36.300
<v Brian Okken>There's no bytecode compilation by default.

00:12:36.460 --> 00:12:37.400
<v Brian Okken>I didn't realize this.

00:12:37.560 --> 00:12:42.320
<v Brian Okken>So yeah, when you pip install something, it by default goes through and does PYC,

00:12:42.800 --> 00:12:48.120
<v Brian Okken>It converts code to PYC bytecode objects.

00:12:48.820 --> 00:12:49.800
<v Brian Okken>UV doesn't do this.

00:12:50.220 --> 00:12:52.960
<v Brian Okken>Apparently, you can turn it on, but it doesn't do it by default.

00:12:54.220 --> 00:12:55.320
<v Brian Okken>Requires virtual environments.

00:12:55.720 --> 00:12:58.060
<v Michael Kennedy>It seems like it could be cached, you know?

00:12:58.740 --> 00:12:58.920
<v Michael Kennedy>Yeah.

00:12:59.140 --> 00:13:03.440
<v Michael Kennedy>But I guess I don't know how uv pairs that to Python versions,

00:13:03.600 --> 00:13:05.140
<v Michael Kennedy>and maybe it gets cached differently.

00:13:05.480 --> 00:13:08.920
<v Michael Kennedy>You run like Python 3.13 to compile them.

00:13:09.080 --> 00:13:10.560
<v Michael Kennedy>Maybe it's just like not worth it, you know?

00:13:10.780 --> 00:13:11.000
<v Brian Okken>Yeah.

00:13:12.160 --> 00:13:14.980
<v Brian Okken>I'll just run through these quick stricter spec enforcement,

00:13:17.020 --> 00:13:20.400
<v Brian Okken>ignoring the upper bound on Python because projects say, you know,

00:13:20.410 --> 00:13:22.960
<v Brian Okken>I haven't tested on 4.0, so don't do that.

00:13:23.400 --> 00:13:24.560
<v Brian Okken>But it usually works anyway.

00:13:25.240 --> 00:13:27.400
<v Brian Okken>So I didn't realize they ignored that.

00:13:27.660 --> 00:13:29.000
<v Brian Okken>Also, first index wins.

00:13:29.090 --> 00:13:33.160
<v Brian Okken>I don't know why pip checks all of the indices before it grabs one,

00:13:33.360 --> 00:13:35.220
<v Brian Okken>but uv stops.

00:13:36.980 --> 00:13:41.360
<v Brian Okken>So at the top, it talks about speed comes from elimination.

00:13:41.580 --> 00:13:46.920
<v Brian Okken>basically every code path you don't have to go down is code you don't have to wait for and also

00:13:47.100 --> 00:13:52.920
<v Brian Okken>it's a new project so you're not breaking backwards compatibility if uv doesn't work use pip um like

00:13:53.200 --> 00:13:58.480
<v Brian Okken>sempos mentioned uh there are many things a new project can afford to drop or work around when

00:13:58.660 --> 00:14:04.360
<v Brian Okken>building from ground up which is good it shows as it shows that we can uh what we can have yeah

00:14:04.520 --> 00:14:10.779
<v Brian Okken>basically um you you you could start from scratch which is great uh the other interesting things

00:14:10.800 --> 00:14:16.480
<v Brian Okken>is there's a bunch of optimizations that don't rely on Rust,

00:14:17.780 --> 00:14:18.440
<v Brian Okken>which are interesting.

00:14:18.840 --> 00:14:23.740
<v Brian Okken>Like there's using, because it's only looking at wheels,

00:14:24.860 --> 00:14:27.240
<v Brian Okken>it can, wheels or zip archives,

00:14:27.320 --> 00:14:28.860
<v Brian Okken>it can look at the end of the wheel first

00:14:29.020 --> 00:14:31.720
<v Brian Okken>to grab the directory list, things like that.

00:14:31.940 --> 00:14:34.040
<v Brian Okken>Parallel downloads, this is, you know,

00:14:34.120 --> 00:14:34.980
<v Brian Okken>any language can do that.

00:14:35.200 --> 00:14:37.040
<v Brian Okken>Pip could do parallel downloads, but it doesn't.

00:14:37.240 --> 00:14:40.320
<v Brian Okken>The global clash, we've seen this with uv a lot,

00:14:40.420 --> 00:14:44.120
<v Brian Okken>is when you download something or pip install something from uv with uv,

00:14:44.630 --> 00:14:45.560
<v Brian Okken>it caches it somewhere.

00:14:45.670 --> 00:14:47.160
<v Brian Okken>So if you create another virtual environment,

00:14:47.540 --> 00:14:48.860
<v Brian Okken>it's going to be there already.

00:14:49.210 --> 00:14:51.200
<v Brian Okken>It doesn't have to download again, which is great.

00:14:51.780 --> 00:14:53.320
<v Brian Okken>Anyway, a bunch of cool things here.

00:14:54.420 --> 00:14:56.680
<v Brian Okken>So one of the reasons why I like the article,

00:14:57.100 --> 00:15:01.400
<v Brian Okken>but also I like the idea of thinking I can't speed it up

00:15:01.760 --> 00:15:03.420
<v Brian Okken>because I'm going to stick with Python for now.

00:15:04.000 --> 00:15:06.040
<v Brian Okken>There are trade-offs that you can do.

00:15:06.230 --> 00:15:08.580
<v Brian Okken>You can make some changes in projects,

00:15:08.960 --> 00:15:10.580
<v Brian Okken>especially ones you completely control,

00:15:10.920 --> 00:15:12.340
<v Brian Okken>that you can say, well, you know what?

00:15:12.380 --> 00:15:14.220
<v Brian Okken>I'm going to take away some of the assumptions

00:15:14.560 --> 00:15:16.680
<v Brian Okken>and some of the use models that I used to support

00:15:16.980 --> 00:15:18.200
<v Brian Okken>and just to make it faster.

00:15:19.160 --> 00:15:20.360
<v Michael Kennedy>Henry points out there,

00:15:21.060 --> 00:15:25.780
<v Michael Kennedy>makes the first import slower for not having PYC, I think.

00:15:26.440 --> 00:15:28.760
<v Michael Kennedy>It's an actual savings if you don't use the entire package.

00:15:29.320 --> 00:15:32.440
<v Michael Kennedy>Though, I guess it depends when this is happening, right?

00:15:32.580 --> 00:15:35.440
<v Michael Kennedy>Like if this is happening on VNV on your machine,

00:15:35.620 --> 00:15:36.700
<v Michael Kennedy>like, yeah, it doesn't really matter.

00:15:36.800 --> 00:15:37.900
<v Michael Kennedy>Like after the first run, it's fast.

00:15:38.060 --> 00:15:43.660
<v Michael Kennedy>If it's happening on startup on a Docker thing where every time it starts, it uses the new Docker container.

00:15:44.030 --> 00:15:46.500
<v Michael Kennedy>Well, then it happens every time and it's not great.

00:15:46.790 --> 00:15:55.000
<v Michael Kennedy>Yeah, it's making me wonder if maybe I can get better startup speed by running a script to pre-compile everything installed in the VNV if uv is not doing it.

00:15:55.220 --> 00:15:55.520
<v Michael Kennedy>I'll let you know.

00:15:56.320 --> 00:15:56.680
<v Brian Okken>Interesting.

00:15:57.060 --> 00:15:59.700
<v Brian Okken>I didn't understand why pip looks at all of the indices.

00:16:00.440 --> 00:16:08.040
<v Brian Okken>Henry Schreiner says, looking at all the indices is important when you have a newer version on a different index, which sometimes you need to do.

00:16:09.600 --> 00:16:12.760
<v Brian Okken>Sometimes you do need to, but it is slower to look at all of them.

00:16:13.280 --> 00:16:15.020
<v Brian Okken>So, yeah, you can when you have multiple.

00:16:15.720 --> 00:16:20.420
<v Brian Okken>Yeah, this is sort of like inside baseball, but you can set up your your pip configuration.

00:16:20.720 --> 00:16:24.720
<v Brian Okken>So you have multiple places where you're grabbing things like an internal and stuff.

00:16:25.060 --> 00:16:32.440
<v Michael Kennedy>Yeah. There are opportunities though for pip to speed up without breaking any of its historical compatibility.

00:16:33.080 --> 00:16:40.320
<v Michael Kennedy>Like it theoretically could say, you asked me to install 10 things when you said -r requirements or high project.tomlin or whatever.

00:16:40.900 --> 00:16:44.880
<v Michael Kennedy>Let's go get those in parallel. Let's run the install in parallel, right?

00:16:44.910 --> 00:16:49.200
<v Michael Kennedy>Like we all have 10, 14, 20, whatever cores, right?

00:16:49.360 --> 00:16:52.060
<v Michael Kennedy>Like don't run it on one and we probably have faster than that.

00:16:52.200 --> 00:16:54.260
<v Michael Kennedy>Don't just run it on one connection. So on.

00:16:54.600 --> 00:17:00.420
<v Brian Okken>Yeah, also the caching, I love that part of just caching it,

00:17:00.910 --> 00:17:03.040
<v Brian Okken>having a machine local cache.

00:17:04.220 --> 00:17:07.780
<v Brian Okken>For people like me, I create virtual environments all the time.

00:17:07.920 --> 00:17:08.280
<v Brian Okken>So do I.

00:17:08.680 --> 00:17:09.400
<v Brian Okken>They just seem free.

00:17:10.000 --> 00:17:11.100
<v Michael Kennedy>Yeah, especially with uv.

00:17:11.819 --> 00:17:13.480
<v Michael Kennedy>And finally, Henry out in the audience throws out

00:17:13.569 --> 00:17:15.100
<v Michael Kennedy>--compile dash bytecode.

00:17:15.240 --> 00:17:17.040
<v Michael Kennedy>I'm assuming that's a command to uv.

00:17:17.600 --> 00:17:20.400
<v Michael Kennedy>And if it is, it's getting set on some of my installs here soon.

00:17:21.420 --> 00:17:21.640
<v Michael Kennedy>Awesome.

00:17:21.860 --> 00:17:24.560
<v Michael Kennedy>All right, let's switch gears here

00:17:24.579 --> 00:17:27.660
<v Michael Kennedy>to the PyView web framework.

00:17:27.990 --> 00:17:31.380
<v Michael Kennedy>Okay, so PyView, now there have been other things

00:17:31.800 --> 00:17:33.740
<v Michael Kennedy>like this recently out there.

00:17:34.820 --> 00:17:37.280
<v Michael Kennedy>Something called PyWebView, not that.

00:17:37.400 --> 00:17:39.660
<v Michael Kennedy>PyWebView was a thing where you could embed

00:17:40.240 --> 00:17:44.520
<v Michael Kennedy>basically a browser, kind of like Electron would.

00:17:44.780 --> 00:17:46.140
<v Michael Kennedy>So this is not that.

00:17:46.180 --> 00:17:48.160
<v Michael Kennedy>This is a totally separate web framework

00:17:48.380 --> 00:17:49.860
<v Michael Kennedy>that's super interesting.

00:17:50.020 --> 00:17:52.240
<v Michael Kennedy>I just interviewed Larry,

00:17:53.680 --> 00:17:55.800
<v Michael Kennedy>who's behind the project over on Talk Python.

00:17:55.930 --> 00:17:57.260
<v Michael Kennedy>It's on YouTube as a live stream.

00:17:57.310 --> 00:18:00.460
<v Michael Kennedy>It is not yet out as a podcast episode.

00:18:01.420 --> 00:18:04.300
<v Michael Kennedy>So coming soon to a podcast player near you.

00:18:05.040 --> 00:18:07.280
<v Michael Kennedy>It's based on this thing called Phoenix Live View,

00:18:07.750 --> 00:18:09.480
<v Michael Kennedy>which is written in Elixir of all things.

00:18:09.980 --> 00:18:11.860
<v Michael Kennedy>But the idea is we wanna have

00:18:11.990 --> 00:18:14.100
<v Michael Kennedy>very reactive front-end code, right?

00:18:14.540 --> 00:18:16.340
<v Michael Kennedy>Kind of like React, the name,

00:18:16.900 --> 00:18:18.060
<v Michael Kennedy>or Vue or something like that.

00:18:18.680 --> 00:18:22.840
<v Michael Kennedy>But we would rather have Python code controlling it

00:18:22.860 --> 00:18:24.300
<v Michael Kennedy>and have it more done on the server,

00:18:24.460 --> 00:18:26.280
<v Michael Kennedy>a little bit like an HTMX vibe, okay?

00:18:26.620 --> 00:18:29.400
<v Michael Kennedy>So what this does is it's based on this more popular,

00:18:29.550 --> 00:18:30.540
<v Michael Kennedy>'cause it's been around a lot longer,

00:18:30.920 --> 00:18:32.900
<v Michael Kennedy>Phoenix Live View, which people may have heard.

00:18:33.180 --> 00:18:37.620
<v Michael Kennedy>So what you do is you write code on the server

00:18:38.140 --> 00:18:42.100
<v Michael Kennedy>as if it could update the front end directly.

00:18:42.480 --> 00:18:45.580
<v Michael Kennedy>When you launch your app, what happens is it actually,

00:18:46.020 --> 00:18:49.380
<v Michael Kennedy>this whole framework sets up a WebSocket connection

00:18:49.490 --> 00:18:52.820
<v Michael Kennedy>from the backend and sends events to you that happen

00:18:52.840 --> 00:18:54.760
<v Michael Kennedy>they were JavaScript events, but they happen on the server.

00:18:55.230 --> 00:18:57.820
<v Michael Kennedy>When those events happen, you just re-render the page,

00:18:58.220 --> 00:19:00.400
<v Michael Kennedy>and there's a diffing engine that figures out,

00:19:00.810 --> 00:19:02.060
<v Michael Kennedy>okay, you sent the whole page,

00:19:02.300 --> 00:19:05.460
<v Michael Kennedy>but actually it's just this div and that div

00:19:05.620 --> 00:19:07.760
<v Michael Kennedy>that need to go down, and it sends them over.

00:19:08.230 --> 00:19:10.020
<v Michael Kennedy>So let me show you an example, Brian,

00:19:10.080 --> 00:19:12.460
<v Michael Kennedy>before you're like, I don't know, Michael, this sounds weird.

00:19:12.860 --> 00:19:13.700
<v Michael Kennedy>It does sound weird. It's cool.

00:19:14.240 --> 00:19:14.840
<v Michael Kennedy>So check this out.

00:19:16.250 --> 00:19:19.240
<v Michael Kennedy>I linked to these examples, examples.pyview.rocks.

00:19:19.520 --> 00:19:21.260
<v Michael Kennedy>There's a bunch of them, but there's a maps example.

00:19:22.040 --> 00:19:25.480
<v Michael Kennedy>I'm going to show you the example, then I'm going to show you the code, and I want your reaction, okay?

00:19:25.980 --> 00:19:27.040
<v Michael Kennedy>And I'll narrate for listeners.

00:19:27.900 --> 00:19:32.400
<v Michael Kennedy>So if I zoom out, what we have is on the left, we've got a list of U.S. national parks.

00:19:32.820 --> 00:19:36.700
<v Michael Kennedy>And on the right, we have a OpenStreetMaps map, right?

00:19:36.920 --> 00:19:40.540
<v Michael Kennedy>So you see on the left, it has the selected park selected.

00:19:40.900 --> 00:19:46.060
<v Michael Kennedy>And if I click on one over here in the map, it then updates the thing on the left, right?

00:19:46.220 --> 00:19:51.160
<v Michael Kennedy>To say like, okay, this is a JavaScript map component that's loaded here.

00:19:51.480 --> 00:19:56.400
<v Michael Kennedy>And as you interact with it, you can see the details view, or the list view rather.

00:19:57.360 --> 00:19:58.200
<v Michael Kennedy>Oh no, I lost my window.

00:19:59.080 --> 00:19:59.940
<v Michael Kennedy>Is updating, right?

00:20:00.000 --> 00:20:00.480
<v Michael Kennedy>They're staying in sync.

00:20:00.880 --> 00:20:01.360
<v Michael Kennedy>That's cool.

00:20:01.660 --> 00:20:01.960
<v Michael Kennedy>It's cool.

00:20:02.060 --> 00:20:04.120
<v Michael Kennedy>Now, also, when I click on the left, it moves the map.

00:20:04.200 --> 00:20:06.120
<v Michael Kennedy>So if I click on Yellowstone, the map jumps over there.

00:20:06.520 --> 00:20:08.540
<v Michael Kennedy>If I click the Joshua tree, it's over there.

00:20:08.640 --> 00:20:15.640
<v Michael Kennedy>If I bring something closer to home, like Olympic National Park, National Forest, that pops up.

00:20:15.880 --> 00:20:19.080
<v Michael Kennedy>This is a pretty neat app, and it's clearly interactive, right?

00:20:19.120 --> 00:20:20.180
<v Michael Kennedy>It's not refreshing the page.

00:20:20.520 --> 00:20:21.120
<v Michael Kennedy>Feels complicated.

00:20:21.300 --> 00:20:23.340
<v Michael Kennedy>But if I go back here and I go to the maps

00:20:23.400 --> 00:20:25.380
<v Michael Kennedy>and I show you the code, I'll describe this for everyone.

00:20:25.980 --> 00:20:27.980
<v Michael Kennedy>There's a CSS file, that's fine.

00:20:28.380 --> 00:20:30.060
<v Michael Kennedy>There's a, hold on, let's do it this way.

00:20:30.320 --> 00:20:32.020
<v Michael Kennedy>There's a parks py file,

00:20:32.140 --> 00:20:34.240
<v Michael Kennedy>and it literally is just a list of dictionaries

00:20:34.320 --> 00:20:35.520
<v Michael Kennedy>of like, here's the name of the parks,

00:20:35.640 --> 00:20:36.860
<v Michael Kennedy>here's the latitude, here's the description,

00:20:37.060 --> 00:20:39.420
<v Michael Kennedy>here's the icon, it's just like a flat data file, yeah?

00:20:39.760 --> 00:20:43.780
<v Michael Kennedy>Go back, the map.py, it says,

00:20:44.340 --> 00:20:45.440
<v Michael Kennedy>we're gonna create a data class.

00:20:45.800 --> 00:20:47.520
<v Michael Kennedy>And the data class has a list of parks

00:20:47.720 --> 00:20:48.960
<v Michael Kennedy>and a selected park, okay?

00:20:49.300 --> 00:20:56.760
<v Michael Kennedy>When somebody clicks on it, it just does a dictionary comprehension or sort of thing to search for the park that matches.

00:20:57.170 --> 00:21:02.340
<v Michael Kennedy>It sets the selected park name on its data class, and it says there's an event to highlight the park.

00:21:02.720 --> 00:21:03.720
<v Michael Kennedy>That's the entire application.

00:21:04.040 --> 00:21:04.980
<v Brian Okken>That's pretty amazing.

00:21:05.300 --> 00:21:05.840
<v Michael Kennedy>Is that nuts?

00:21:06.030 --> 00:21:06.180
<v Michael Kennedy>Right?

00:21:06.270 --> 00:21:15.480
<v Michael Kennedy>And if you look at the HTML, it's just a bunch of Jinja with Tailwind that just says, you know, bind to this value.

00:21:16.220 --> 00:21:22.160
<v Michael Kennedy>Instead of just saying the value equals, you say Phoenix value equals, and you just pull out the context from the name.

00:21:22.520 --> 00:21:27.240
<v Michael Kennedy>So this is a super interesting web framework that has not got a lot of light shined on it yet.

00:21:27.400 --> 00:21:28.480
<v Michael Kennedy>It's got 63 stars.

00:21:29.159 --> 00:21:32.320
<v Michael Kennedy>So it's basically a reimplementation of the Phoenix live view.

00:21:32.760 --> 00:21:34.400
<v Michael Kennedy>And I think it's pretty neat.

00:21:34.780 --> 00:21:39.500
<v Michael Kennedy>Larry says he's been using it for some projects at work and just starting to get it out in the public.

00:21:39.640 --> 00:21:41.580
<v Michael Kennedy>So it's probably more tested than it feels.

00:21:42.040 --> 00:21:44.440
<v Michael Kennedy>And finally, if you want to understand, I'll link to this in the show notes.

00:21:44.720 --> 00:21:51.660
<v Michael Kennedy>If you want to understand, like, how is this even possible, you need to read the LiveView life cycle section of the docs.

00:21:52.300 --> 00:21:55.040
<v Michael Kennedy>And it talks about, okay, how it first renders the template.

00:21:55.150 --> 00:21:57.460
<v Michael Kennedy>And then once it's done that, it's connected a WebSocket.

00:21:57.680 --> 00:21:58.640
<v Michael Kennedy>Then it listens for events.

00:21:58.790 --> 00:22:00.920
<v Michael Kennedy>And then the diffing engine and all that kind of stuff.

00:22:00.970 --> 00:22:04.280
<v Michael Kennedy>And how real-time events, real-time updates happen and so on.

00:22:04.460 --> 00:22:05.400
<v Michael Kennedy>Anyway, what do you think?

00:22:05.960 --> 00:22:06.120
<v Michael Kennedy>Neat, right?

00:22:06.520 --> 00:22:07.700
<v Brian Okken>I think it's pretty cool, yeah.

00:22:08.080 --> 00:22:08.160
<v Brian Okken>Yeah.

00:22:08.560 --> 00:22:08.720
<v Michael Kennedy>Yeah.

00:22:09.440 --> 00:22:09.500
<v Michael Kennedy>Cool.

00:22:09.880 --> 00:22:11.440
<v Michael Kennedy>Well, that is that.

00:22:12.160 --> 00:22:13.060
<v Michael Kennedy>I think we're out of topics.

00:22:14.240 --> 00:22:14.420
<v Michael Kennedy>Yeah.

00:22:14.560 --> 00:22:15.940
<v Michael Kennedy>Any extras?

00:22:17.160 --> 00:22:18.520
<v Michael Kennedy>Yeah, I got a couple extras.

00:22:18.940 --> 00:22:22.400
<v Michael Kennedy>All right, let's throw it over to you to check out the extras you got.

00:22:22.600 --> 00:22:30.320
<v Brian Okken>Okay, so we did, I was just talking about the article I talked about earlier about the Django management commands.

00:22:30.460 --> 00:22:35.860
<v Brian Okken>That was on the RevSys blog, and there's another cool thing that RevSys has that I want to show.

00:22:36.400 --> 00:22:43.320
<v Brian Okken>So first off, we did, I'm pretty sure we announced this, but Django 6 was released on December 3rd,

00:22:43.860 --> 00:22:48.920
<v Brian Okken>And there was a bug fix 601, which came out on January 6th.

00:22:49.230 --> 00:22:49.880
<v Brian Okken>Oh, my birthday.

00:22:50.690 --> 00:22:51.460
<v Brian Okken>You gave me a birthday present.

00:22:52.700 --> 00:22:58.400
<v Brian Okken>And then, but so should you upgrade and how to upgrade?

00:22:58.960 --> 00:23:04.040
<v Brian Okken>And that's what I want to talk about is there's a website called upgradejango.com.

00:23:04.440 --> 00:23:05.860
<v Brian Okken>And this is put out by RevSys.

00:23:06.180 --> 00:23:07.080
<v Brian Okken>And it's pretty cool.

00:23:07.440 --> 00:23:15.060
<v Brian Okken>It has all the LTS versions, and it has basically the current supported version of Django.

00:23:15.400 --> 00:23:19.140
<v Brian Okken>We've got latest version and initial release and support dates.

00:23:20.150 --> 00:23:23.900
<v Brian Okken>Then they have future versions scheduled so far.

00:23:24.140 --> 00:23:26.380
<v Brian Okken>There's only 6.1 planned so far in August.

00:23:27.620 --> 00:23:29.780
<v Brian Okken>And then a whole bunch of old unsupported releases.

00:23:30.660 --> 00:23:34.260
<v Brian Okken>Now, if you're on an unsupported version, you probably ought to upgrade.

00:23:34.530 --> 00:23:35.460
<v Brian Okken>But how do you do that?

00:23:35.900 --> 00:23:42.900
<v Brian Okken>And that's one of the things I like is they have a section on why to upgrade and they also have how to upgrade.

00:23:43.340 --> 00:23:45.940
<v Brian Okken>And I actually was not expecting this.

00:23:46.620 --> 00:23:55.440
<v Brian Okken>Their recommendation is unless you really know what's in all the Django releases, you probably ought to do it version by version.

00:23:55.740 --> 00:23:59.780
<v Brian Okken>Luckily, there's usually just one or two big versions that come out a year.

00:24:00.440 --> 00:24:02.160
<v Brian Okken>So you're probably not behind too much.

00:24:02.440 --> 00:24:09.080
<v Brian Okken>But so it discusses doing it one release at a time or a few at a time or just jumping all the way.

00:24:09.460 --> 00:24:11.580
<v Brian Okken>And then, of course, you know, it's from ResSys.

00:24:12.020 --> 00:24:17.140
<v Brian Okken>And it's fine that they say you could pay somebody to do it, like maybe us, which is cool.

00:24:17.220 --> 00:24:20.080
<v Brian Okken>But I do like I like the discussion around it.

00:24:20.640 --> 00:24:28.040
<v Brian Okken>The discussion about going one release at a time, if you really you can go by the release notes then of like what changed.

00:24:28.180 --> 00:24:31.900
<v Brian Okken>And you could just, you know, try to run it and run your test suite and see if everything's working.

00:24:32.420 --> 00:24:36.780
<v Brian Okken>and if it's not then you can check the release notes to figure out why and um it might be the

00:24:36.940 --> 00:24:41.720
<v Brian Okken>slower way to do it but it might not be that bad you could just sort of chug through it in a day or

00:24:41.800 --> 00:24:46.860
<v Brian Okken>so maybe i don't know it depends on how many of the features you're using that have been um changed

00:24:47.280 --> 00:24:53.000
<v Michael Kennedy>so yeah uh but that's cool you you might even be able to say hey claude i'm on this version of

00:24:53.160 --> 00:24:59.259
<v Michael Kennedy>django i want to be on that version here's the release notes uh help yeah yeah and also you

00:24:59.280 --> 00:25:01.040
<v Brian Okken>You could even tell this stuff.

00:25:01.150 --> 00:25:04.620
<v Brian Okken>You run my test, bump up one version at a time, run the test.

00:25:04.730 --> 00:25:07.000
<v Michael Kennedy>RICK VISCOMI: Read this guide, sketch it out,

00:25:07.030 --> 00:25:08.120
<v Michael Kennedy>and let's figure it out.

00:25:08.740 --> 00:25:10.940
<v Michael Kennedy>Yeah, I think it's more important-- before we move on this top

00:25:11.020 --> 00:25:11.960
<v Michael Kennedy>of the road, Brian, really quickly--

00:25:11.960 --> 00:25:12.040
<v Michael Kennedy>BRIAN DORSEY: Yeah.

00:25:12.090 --> 00:25:14.720
<v Michael Kennedy>RICK VISCOMI: --is more important than perhaps some people

00:25:14.910 --> 00:25:16.300
<v Michael Kennedy>realize to upgrade Django.

00:25:16.780 --> 00:25:21.420
<v Michael Kennedy>Django does much more than most Python web frameworks.

00:25:22.020 --> 00:25:24.000
<v Michael Kennedy>It's got admin sections and all sorts of things,

00:25:24.350 --> 00:25:27.340
<v Michael Kennedy>and every now and then, there's some kind of security issue

00:25:27.390 --> 00:25:28.900
<v Michael Kennedy>we should fix around x, y, and z.

00:25:29.280 --> 00:25:36.680
<v Michael Kennedy>You don't see that as much as Flask or FastAPI because the security problems are the one you write adding those features to your app yourself.

00:25:37.700 --> 00:25:39.080
<v Michael Kennedy>There's no CVEs for those, right?

00:25:40.100 --> 00:25:44.160
<v Michael Kennedy>But because Django comes with all that functionality, there's more of a surface area.

00:25:44.320 --> 00:25:45.820
<v Michael Kennedy>And sometimes you want to be on top of it.

00:25:45.840 --> 00:25:46.720
<v Michael Kennedy>So don't sleep on it.

00:25:46.940 --> 00:25:47.260
<v Michael Kennedy>Stay ahead.

00:25:47.460 --> 00:25:52.800
<v Brian Okken>That's also another reason to choose Django as well because it's used by so many people.

00:25:53.580 --> 00:25:55.740
<v Brian Okken>The security fixes get fixed pretty fast.

00:25:56.080 --> 00:26:00.460
<v Michael Kennedy>Yeah. The way your one-off web app gets security tested is not fun.

00:26:02.860 --> 00:26:09.400
<v Brian Okken>Yeah. Also performance and just keeping up with newer versions. There's good reasons.

00:26:11.220 --> 00:26:18.160
<v Brian Okken>Next up, I wanted to talk about the book. We recorded last Monday and on Tuesday, I was like,

00:26:18.200 --> 00:26:23.319
<v Brian Okken>I just want to get the first release done. So I spent a lot of time Monday night just writing

00:26:23.340 --> 00:26:29.960
<v Brian Okken>and finished up the first edition. And, and I, there's, there's a bunch of downloads. There's

00:26:30.110 --> 00:26:34.480
<v Brian Okken>six because I've had people ask about it. So there's, there's really the full book. And,

00:26:35.020 --> 00:26:40.080
<v Brian Okken>and then there's part two and part three are individual downloads, if you've already read

00:26:40.220 --> 00:26:46.420
<v Brian Okken>part of it. Anyway, I think there's, what do we got? 17 chapters or something like that now.

00:26:47.940 --> 00:26:52.500
<v Brian Okken>But I am, so now what I'm doing, what am I doing now is I'm, I'm going through and,

00:26:53.600 --> 00:26:58.920
<v Brian Okken>cleaning it up. There's some people that have submitted issues to my page, which is cool.

00:27:00.080 --> 00:27:04.480
<v Brian Okken>Some things to think about. So I am looking at feedback, but there's not that many. So I think

00:27:04.480 --> 00:27:10.800
<v Brian Okken>I might get the second edition pretty good quickly. And then I'm going to go through and read it all

00:27:10.960 --> 00:27:16.879
<v Brian Okken>and do the third edition or the third, not additions, third, I guess, the third pass through

00:27:16.900 --> 00:27:24.300
<v Brian Okken>it the third draft by reading it. So that's my process. I also put it up for, it's available

00:27:24.560 --> 00:27:29.040
<v Brian Okken>on pythontest.com, but you can also get it at leanpub.com now. I made it available there.

00:27:30.360 --> 00:27:36.020
<v Brian Okken>And I haven't, I don't think I've gotten anybody buy it from LeanPub yet. So yeah, you can,

00:27:36.210 --> 00:27:39.200
<v Brian Okken>you can, it's got like the cool set your own price slider.

00:27:39.680 --> 00:27:41.440
<v Michael Kennedy>Yeah, the UI is fun. Yeah, I like it.

00:27:42.040 --> 00:27:43.680
<v Michael Kennedy>So those are my extras.

00:27:44.880 --> 00:27:45.140
<v Michael Kennedy>Sweet.

00:27:45.420 --> 00:27:45.700
<v Michael Kennedy>All right.

00:27:46.160 --> 00:27:47.340
<v Michael Kennedy>I have a few, actually.

00:27:48.440 --> 00:27:50.180
<v Michael Kennedy>Nice article over at the New Stack.

00:27:50.800 --> 00:27:55.220
<v Michael Kennedy>They wrote up a long article on a recent podcast episode I did called Python.

00:27:55.480 --> 00:27:56.960
<v Michael Kennedy>What's coming in 2026?

00:27:57.180 --> 00:28:11.740
<v Michael Kennedy>So I did a nice episode of where are we going with Python with a bunch of folks, three core developers, steering council members, other celebrities and professors and so on.

00:28:11.980 --> 00:28:14.180
<v Michael Kennedy>And so they wrote this up and it's just, I thought it was really nice.

00:28:14.400 --> 00:28:18.320
<v Michael Kennedy>Like they really put together a, like, here's, here's what Brett Cannon said.

00:28:18.620 --> 00:28:21.520
<v Michael Kennedy>Here's what Barry Warsaw or Thomas Werther's wrote.

00:28:23.280 --> 00:28:25.020
<v Michael Kennedy>Jody virtual and so on.

00:28:25.080 --> 00:28:25.740
<v Michael Kennedy>So really nice.

00:28:26.340 --> 00:28:27.600
<v Michael Kennedy>And people can check that out.

00:28:27.800 --> 00:28:29.440
<v Michael Kennedy>So I'm just going to link to that going this way.

00:28:30.200 --> 00:28:32.080
<v Michael Kennedy>So Brian, you didn't even know this, this happened.

00:28:32.520 --> 00:28:35.820
<v Michael Kennedy>And to my knowledge, it is not a problem, which is miraculous.

00:28:36.720 --> 00:28:39.960
<v Michael Kennedy>I completely rewrote Python bytes over the weekend.

00:28:40.380 --> 00:28:43.560
<v Michael Kennedy>It was in Pyramid and using all synchronous code.

00:28:43.690 --> 00:28:48.320
<v Michael Kennedy>And I rewrote it in the same way that I did Talk Python into Quart, which is async flask,

00:28:48.520 --> 00:28:53.360
<v Michael Kennedy>and converted it all to async database queries and API calls and stuff like that.

00:28:53.520 --> 00:28:53.800
<v Brian Okken>Nice.

00:28:54.340 --> 00:28:55.360
<v Michael Kennedy>And guess what?

00:28:56.000 --> 00:28:58.080
<v Michael Kennedy>It seems to still be working.

00:28:58.680 --> 00:28:59.120
<v Michael Kennedy>Hooray.

00:29:01.600 --> 00:29:02.980
<v Michael Kennedy>Big changes like that make me nervous.

00:29:03.360 --> 00:29:05.860
<v Michael Kennedy>I mean, it was like 5,000 lines of code or change.

00:29:06.050 --> 00:29:07.600
<v Michael Kennedy>But anyway, that's really good.

00:29:07.720 --> 00:29:08.840
<v Brian Okken>So what was the reason?

00:29:09.260 --> 00:29:11.900
<v Brian Okken>Is it with just to try to get it faster or?

00:29:12.180 --> 00:29:13.520
<v Michael Kennedy>No, no, it's not a performance thing.

00:29:13.840 --> 00:29:15.940
<v Michael Kennedy>It's a, everything that I'm building these days,

00:29:16.440 --> 00:29:19.720
<v Michael Kennedy>I'm building in Quart or FastAPI,

00:29:20.120 --> 00:29:22.160
<v Michael Kennedy>some async framework that supports types

00:29:22.260 --> 00:29:23.760
<v Michael Kennedy>and that is actually being used.

00:29:24.120 --> 00:29:25.540
<v Michael Kennedy>And if you read this blog post that I like too

00:29:25.640 --> 00:29:27.560
<v Michael Kennedy>for Talk Python, basically that was why.

00:29:27.620 --> 00:29:29.820
<v Michael Kennedy>Like I don't want it just hanging around

00:29:30.320 --> 00:29:31.880
<v Michael Kennedy>on a framework that hasn't had a release

00:29:32.420 --> 00:29:35.020
<v Michael Kennedy>in like four years and just getting older.

00:29:35.220 --> 00:29:35.500
<v Michael Kennedy>You know what I mean?

00:29:35.740 --> 00:29:37.320
<v Michael Kennedy>Because what if something does come up with it?

00:29:37.380 --> 00:29:39.080
<v Michael Kennedy>They say, oh, there's a security vulnerability.

00:29:39.200 --> 00:29:41.760
<v Michael Kennedy>Well, how well do you think that's going to get fixed?

00:29:42.020 --> 00:29:42.400
<v Michael Kennedy>You know what I mean?

00:29:42.820 --> 00:29:44.000
<v Michael Kennedy>Maybe, but maybe not, right?

00:29:44.060 --> 00:29:47.700
<v Michael Kennedy>It just makes me nervous to have like old,

00:29:48.020 --> 00:29:49.460
<v Michael Kennedy>not abandoned is a bit of a harsh word,

00:29:49.560 --> 00:29:52.620
<v Michael Kennedy>but basically no longer maintained code.

00:29:52.680 --> 00:29:54.300
<v Michael Kennedy>And so I was just sitting there on Saturday and like,

00:29:54.480 --> 00:29:55.820
<v Michael Kennedy>well, it's kind of hanging out here on the couch.

00:29:55.900 --> 00:29:56.360
<v Michael Kennedy>What can I do?

00:29:57.460 --> 00:29:59.140
<v Michael Kennedy>Let me see if I can just,

00:29:59.200 --> 00:30:01.960
<v Michael Kennedy>I only have a few more apps to move over

00:30:02.560 --> 00:30:03.720
<v Michael Kennedy>to something more modern.

00:30:03.960 --> 00:30:06.000
<v Michael Kennedy>So I thought I'd give it a go and it went pretty well.

00:30:06.040 --> 00:30:06.660
<v Michael Kennedy>So there it is.

00:30:06.880 --> 00:30:11.860
<v Brian Okken>It eases up on your mental load, too, if you don't have to think about lots of different frameworks.

00:30:12.390 --> 00:30:12.500
<v Michael Kennedy>Exactly.

00:30:12.830 --> 00:30:17.040
<v Michael Kennedy>If I write some cool little library that works on one, I'm like, that would actually be cool to use on all these things.

00:30:17.150 --> 00:30:20.520
<v Michael Kennedy>If I want to add a new feature or something, I'm like, yeah, but it's not the same.

00:30:20.820 --> 00:30:21.140
<v Michael Kennedy>You know what I mean?

00:30:21.320 --> 00:30:22.380
<v Michael Kennedy>It is exactly.

00:30:22.480 --> 00:30:24.140
<v Michael Kennedy>It's nice to have it basically the same as well.

00:30:25.280 --> 00:30:31.100
<v Brian Okken>Once I kind of had my head around pytest, I was like, should I go try to become an expert at unit test also?

00:30:31.580 --> 00:30:32.660
<v Brian Okken>Nah, I don't want to.

00:30:32.720 --> 00:30:34.660
<v Brian Okken>Yeah, I mean, the equivalent would be like,

00:30:34.760 --> 00:30:37.960
<v Michael Kennedy>you've got 2,000 tests and unit tests,

00:30:38.330 --> 00:30:40.640
<v Michael Kennedy>and you'd like, it's gonna be so much easier

00:30:40.650 --> 00:30:42.560
<v Michael Kennedy>to do this feature in pytest because fixtures,

00:30:43.280 --> 00:30:44.380
<v Michael Kennedy>but it's not, right?

00:30:44.620 --> 00:30:46.240
<v Michael Kennedy>Like, you don't have to rewrite it.

00:30:46.400 --> 00:30:48.100
<v Michael Kennedy>It's not like it would make it run that much better,

00:30:48.320 --> 00:30:50.220
<v Michael Kennedy>but if you're gonna continue to work on it,

00:30:50.470 --> 00:30:51.420
<v Michael Kennedy>on add features, you're like,

00:30:51.430 --> 00:30:53.020
<v Michael Kennedy>I would rather not write against a thing

00:30:53.180 --> 00:30:55.100
<v Michael Kennedy>that is kind of done in a non-list.

00:30:55.420 --> 00:30:56.580
<v Brian Okken>Well, actually, that's one of the things

00:30:56.660 --> 00:30:58.560
<v Brian Okken>I would totally throw Claude at, too,

00:30:58.630 --> 00:31:01.420
<v Brian Okken>to be able to say, you know, just rewrite these.

00:31:01.640 --> 00:31:03.460
<v Brian Okken>because I've already got the logic there.

00:31:03.570 --> 00:31:04.540
<v Brian Okken>I just want it different.

00:31:05.200 --> 00:31:05.940
<v Michael Kennedy>Yeah, that's what I did.

00:31:06.240 --> 00:31:08.920
<v Michael Kennedy>For rewriting Talk Python, I did it by hand,

00:31:09.130 --> 00:31:10.860
<v Michael Kennedy>and I wrote about it, and it took weeks.

00:31:11.400 --> 00:31:12.880
<v Michael Kennedy>So what I did is I loaded a project

00:31:13.140 --> 00:31:15.520
<v Michael Kennedy>with both Talk Python and Python Bytes,

00:31:15.630 --> 00:31:17.400
<v Michael Kennedy>and I said, I want to do this transformation.

00:31:17.860 --> 00:31:20.460
<v Michael Kennedy>Here's the docs for Quart, and here's Talk Python,

00:31:20.580 --> 00:31:21.820
<v Michael Kennedy>which is a very similar code base

00:31:22.220 --> 00:31:23.600
<v Michael Kennedy>that has been migrated over.

00:31:23.780 --> 00:31:24.880
<v Michael Kennedy>So anytime you see an issue,

00:31:25.320 --> 00:31:27.500
<v Michael Kennedy>see how we handle it over there, and it went well.

00:31:27.880 --> 00:31:28.260
<v Brian Okken>Oh, wow.

00:31:28.540 --> 00:31:28.620
<v Michael Kennedy>Yeah.

00:31:28.840 --> 00:31:29.660
<v Michael Kennedy>That's a good one.

00:31:29.880 --> 00:31:29.960
<v Michael Kennedy>Yeah.

00:31:30.190 --> 00:31:30.300
<v Michael Kennedy>Cool.

00:31:30.520 --> 00:31:35.240
<v Michael Kennedy>So anyway, hopefully we never speak of that again, because if I do, that probably means something broke.

00:31:35.700 --> 00:31:35.840
<v Michael Kennedy>All right.

00:31:36.440 --> 00:31:41.560
<v Michael Kennedy>Another thing I did over the weekend is I created an MCP server for Talk Python.

00:31:41.630 --> 00:31:43.860
<v Michael Kennedy>And maybe I'll do this for Python Bytes if people want as well.

00:31:44.160 --> 00:31:46.640
<v Michael Kennedy>So, I mean, we just talked about Tailwind, right?

00:31:47.080 --> 00:31:52.360
<v Michael Kennedy>and how basically the concept of making AIs more friendly

00:31:52.600 --> 00:31:57.040
<v Michael Kennedy>for your app or your project was the match

00:31:57.070 --> 00:31:58.960
<v Michael Kennedy>that got struck within the tinderbox

00:31:59.170 --> 00:32:00.900
<v Michael Kennedy>of what was going on at tail end, right?

00:32:01.700 --> 00:32:03.160
<v Michael Kennedy>So this is kind of the opposite.

00:32:03.230 --> 00:32:05.480
<v Michael Kennedy>I'm like, hey, let's make it easier for people

00:32:05.820 --> 00:32:07.820
<v Michael Kennedy>who are asking questions about Talk Python

00:32:08.300 --> 00:32:11.320
<v Michael Kennedy>to get good answers, not hallucinated junk answers

00:32:11.580 --> 00:32:13.840
<v Michael Kennedy>or out of date answers about our podcast, right?

00:32:14.100 --> 00:32:15.380
<v Michael Kennedy>People are already asking,

00:32:15.720 --> 00:32:18.240
<v Michael Kennedy>hey, chat, tell me about this for Talk Python.

00:32:18.370 --> 00:32:19.740
<v Michael Kennedy>Or they'll just ask a question about Python.

00:32:20.280 --> 00:32:22.800
<v Michael Kennedy>It'll give them an episode and tell them about it, right?

00:32:23.060 --> 00:32:27.220
<v Michael Kennedy>So what this does is it lets AIs access fast,

00:32:27.680 --> 00:32:30.320
<v Michael Kennedy>real-time information at the time of asking,

00:32:30.540 --> 00:32:31.840
<v Michael Kennedy>not at the time of training, right?

00:32:31.870 --> 00:32:32.500
<v Michael Kennedy>So that's really cool.

00:32:32.790 --> 00:32:34.560
<v Michael Kennedy>So you can say like, well, what are the last,

00:32:34.880 --> 00:32:35.700
<v Michael Kennedy>I'll even check this out.

00:32:36.080 --> 00:32:36.900
<v Michael Kennedy>I did this on Claude.

00:32:37.260 --> 00:32:37.940
<v Michael Kennedy>Hey, I have a question.

00:32:38.100 --> 00:32:39.780
<v Michael Kennedy>What are the last five episodes on Talk Python?

00:32:40.200 --> 00:32:43.520
<v Michael Kennedy>Let me use Talk Python's MCP server for this retrieval.

00:32:43.740 --> 00:32:45.200
<v Michael Kennedy>Getting recent episodes, boom.

00:32:45.560 --> 00:32:47.300
<v Michael Kennedy>Here they are, Disc Cash, January 12th.

00:32:47.570 --> 00:32:50.000
<v Michael Kennedy>Web Frameworks and Prod by their creators, January 5th.

00:32:50.240 --> 00:32:52.000
<v Michael Kennedy>You're in review, this is the article they just wrote up,

00:32:52.170 --> 00:32:52.780
<v Michael Kennedy>the one they wrote up.

00:32:53.140 --> 00:32:55.580
<v Michael Kennedy>And it's that, if I publish a new episode,

00:32:56.280 --> 00:32:58.480
<v Michael Kennedy>wait 10 seconds and ask this question again,

00:32:58.680 --> 00:33:00.840
<v Michael Kennedy>it will put that episode in there 10 seconds later.

00:33:01.360 --> 00:33:03.840
<v Brian Okken>- So do you have to, okay, so maybe I missed this

00:33:03.880 --> 00:33:05.080
<v Brian Okken>and you said it, do you have to like,

00:33:05.300 --> 00:33:06.400
<v Brian Okken>once you do an MCP server,

00:33:06.490 --> 00:33:08.920
<v Brian Okken>do you have to like register it somewhere or do you?

00:33:08.960 --> 00:33:11.880
<v Michael Kennedy>- I can't figure, yeah, I can't figure out a great place.

00:33:11.970 --> 00:33:15.520
<v Michael Kennedy>So what I've done is I have a page up here

00:33:15.540 --> 00:33:18.720
<v Michael Kennedy>MCP that says, hey, if you want to integrate this,

00:33:19.020 --> 00:33:20.600
<v Michael Kennedy>and LLMs will read this, right?

00:33:21.100 --> 00:33:21.860
<v Michael Kennedy>There's two things I've done.

00:33:22.040 --> 00:33:26.220
<v Michael Kennedy>So there's a full documentation on how this works, right, and so on.

00:33:26.520 --> 00:33:30.220
<v Michael Kennedy>And that's for the LLM, the AI agents to read and use.

00:33:30.380 --> 00:33:33.500
<v Michael Kennedy>You can then take that, take this URL here,

00:33:34.059 --> 00:33:35.920
<v Michael Kennedy>talkbythunded.fm.com slash API slash MCP,

00:33:36.320 --> 00:33:39.880
<v Michael Kennedy>and put that in Claude, Claude Code, Cursor, and other places.

00:33:40.380 --> 00:33:41.940
<v Michael Kennedy>But ChatGPT won't work with it.

00:33:42.340 --> 00:33:42.800
<v Michael Kennedy>Don't know why.

00:33:43.600 --> 00:33:44.120
<v Michael Kennedy>They just don't.

00:33:44.460 --> 00:33:45.420
<v Michael Kennedy>It's really weird.

00:33:45.860 --> 00:33:46.860
<v Michael Kennedy>I can follow up on that later.

00:33:47.320 --> 00:33:50.800
<v Brian Okken>So like a user could say, hey, look at this.

00:33:51.540 --> 00:33:52.240
<v Michael Kennedy>Yes, exactly.

00:33:52.880 --> 00:33:55.480
<v Michael Kennedy>And then the other thing I did, well, hold on.

00:33:55.540 --> 00:33:58.120
<v Michael Kennedy>Let me just show you one more thing really quick while we're on the MCP side.

00:33:58.540 --> 00:34:02.380
<v Michael Kennedy>So you can ask more complicated questions like, let's zoom out a little.

00:34:02.920 --> 00:34:06.660
<v Michael Kennedy>Which episodes did Sebastian Ramirez appear on and which was the latest?

00:34:06.840 --> 00:34:10.480
<v Michael Kennedy>You can see it's like, oh, Claude goes and uses the MCP to search for guests.

00:34:11.399 --> 00:34:14.300
<v Michael Kennedy>Then it found Sebastian and that guest tells him what episodes are on.

00:34:14.399 --> 00:34:19.260
<v Michael Kennedy>So then it searched for the episodes based on the IDs of the episodes it found.

00:34:19.399 --> 00:34:19.700
<v Michael Kennedy>It's great.

00:34:19.730 --> 00:34:20.139
<v Michael Kennedy>I found it.

00:34:20.220 --> 00:34:21.379
<v Michael Kennedy>Here's, let me get all the episode details.

00:34:21.879 --> 00:34:22.040
<v Michael Kennedy>Okay.

00:34:22.429 --> 00:34:23.700
<v Michael Kennedy>I found this and it goes through and it says,

00:34:24.139 --> 00:34:27.399
<v Michael Kennedy>here, Sebastian Ramirez appeared on five episodes of Talk Python To Me

00:34:27.520 --> 00:34:29.540
<v Michael Kennedy>and it lists out all five of them and their dates.

00:34:29.899 --> 00:34:31.560
<v Michael Kennedy>The most recent one was just a couple of weeks ago

00:34:31.610 --> 00:34:33.700
<v Michael Kennedy>where he joined to talk about Django, Flask,

00:34:33.879 --> 00:34:35.600
<v Michael Kennedy>Quartlightstar, and FastAPI and so on.

00:34:35.800 --> 00:34:36.220
<v Michael Kennedy>Isn't that cool?

00:34:36.679 --> 00:34:37.440
<v Brian Okken>That is cool.

00:34:37.690 --> 00:34:41.379
<v Brian Okken>I think actually guests might use this to say,

00:34:41.550 --> 00:34:42.940
<v Brian Okken>like, when was I on Talk Python?

00:34:43.080 --> 00:34:45.560
<v Michael Kennedy>- Yeah, actually one of the, this is crazy,

00:34:45.780 --> 00:34:48.540
<v Michael Kennedy>one of the long ago guests from like eight years ago,

00:34:48.929 --> 00:34:51.879
<v Michael Kennedy>Sergio, when I announced this on one of the social medias,

00:34:51.980 --> 00:34:55.720
<v Michael Kennedy>he said, "I just asked, what did Sergio say?"

00:34:55.720 --> 00:34:57.280
<v Michael Kennedy>You know, put his whole name, "What did Sergio say?"

00:34:57.440 --> 00:35:00.320
<v Michael Kennedy>And it actually said, he appeared on this episode,

00:35:01.040 --> 00:35:02.760
<v Michael Kennedy>here's what he, you know, pulled up the transcripts

00:35:02.760 --> 00:35:04.260
<v Michael Kennedy>and analyzed it and said, "Here's what he said,"

00:35:04.280 --> 00:35:08.240
<v Michael Kennedy>and this was his main thesis of his appearance and so on.

00:35:08.240 --> 00:35:10.480
<v Michael Kennedy>I'm like, geez, so it's pretty cool.

00:35:10.920 --> 00:35:13.280
<v Michael Kennedy>So you asked like, well, if you don't have an MCP support

00:35:13.450 --> 00:35:14.740
<v Michael Kennedy>for your AI, what do you do?

00:35:14.800 --> 00:35:18.560
<v Michael Kennedy>Well, this other thing I did is I added something called

00:35:19.519 --> 00:35:24.000
<v Michael Kennedy>LLMs.txt, which is a idea by Jeremy Howard of Fast AI,

00:35:24.520 --> 00:35:27.300
<v Michael Kennedy>Fast Mail, many other things, I think also Fast HTML.

00:35:28.200 --> 00:35:29.540
<v Michael Kennedy>Anyway, bunch of stuff he's doing.

00:35:30.420 --> 00:35:32.380
<v Michael Kennedy>And the idea is it's kind of like robots.txt.

00:35:32.700 --> 00:35:34.520
<v Michael Kennedy>It's a place where you put stuff.

00:35:35.350 --> 00:35:36.860
<v Michael Kennedy>I think I just loaded it up here, don't have to type.

00:35:37.600 --> 00:35:40.880
<v Michael Kennedy>It's like a robots.txt, but it's there for

00:35:40.880 --> 00:35:42.260
<v Michael Kennedy>what to do for LLMs.

00:35:42.370 --> 00:35:44.100
<v Michael Kennedy>So it gives you a little bit of background information

00:35:44.580 --> 00:35:45.360
<v Michael Kennedy>and so on that says,

00:35:45.510 --> 00:35:49.920
<v Michael Kennedy>actually, here's how you can use our LLM API

00:35:50.160 --> 00:35:51.240
<v Michael Kennedy>or MCP server,

00:35:51.650 --> 00:35:52.740
<v Michael Kennedy>even if you didn't register it,

00:35:52.980 --> 00:35:54.920
<v Michael Kennedy>long as the thing knows to look for this.

00:35:55.150 --> 00:35:56.300
<v Michael Kennedy>So I'm actually writing a blog post

00:35:56.420 --> 00:35:56.900
<v Michael Kennedy>about all this soon.

00:35:56.990 --> 00:35:57.500
<v Michael Kennedy>So cool.

00:35:57.860 --> 00:35:58.640
<v Michael Kennedy>Yeah, pretty wild, right?

00:35:59.480 --> 00:35:59.660
<v Michael Kennedy>Yeah.

00:35:59.960 --> 00:36:01.280
<v Michael Kennedy>I think it'd be nice for Python bytes.

00:36:01.630 --> 00:36:02.820
<v Michael Kennedy>And also really quickly,

00:36:03.299 --> 00:36:04.200
<v Michael Kennedy>probably come back to this

00:36:04.210 --> 00:36:05.120
<v Michael Kennedy>and I know this is going long.

00:36:05.599 --> 00:36:06.840
<v Michael Kennedy>There's a lot of,

00:36:07.220 --> 00:36:08.360
<v Michael Kennedy>there's a lot of pushback to say,

00:36:08.370 --> 00:36:10.860
<v Michael Kennedy>I want to block AI from getting my content

00:36:10.880 --> 00:36:13.360
<v Michael Kennedy>is AI is just stealing my copyrighted content.

00:36:13.520 --> 00:36:15.580
<v Michael Kennedy>And I have a lot of sympathy for that feeling.

00:36:16.040 --> 00:36:18.800
<v Michael Kennedy>But if you are not going so far as to block it,

00:36:19.100 --> 00:36:20.840
<v Michael Kennedy>you probably should make the AI experience

00:36:20.980 --> 00:36:22.180
<v Michael Kennedy>as good as possible, right?

00:36:22.340 --> 00:36:23.160
<v Michael Kennedy>Rather than having,

00:36:23.720 --> 00:36:26.300
<v Michael Kennedy>when I asked what was that episode about Sebastian,

00:36:26.960 --> 00:36:27.540
<v Michael Kennedy>if it could have said,

00:36:27.620 --> 00:36:30.560
<v Michael Kennedy>well, my training data goes back to summer 2025.

00:36:31.260 --> 00:36:33.460
<v Michael Kennedy>So from that information I have,

00:36:34.220 --> 00:36:35.200
<v Michael Kennedy>like a year ago,

00:36:35.280 --> 00:36:36.780
<v Michael Kennedy>he was on the show or something, right?

00:36:36.900 --> 00:36:38.960
<v Michael Kennedy>Rather than up to the minute information.

00:36:39.320 --> 00:36:40.840
<v Michael Kennedy>So either you block it completely

00:36:41.580 --> 00:36:42.840
<v Michael Kennedy>or try to make it as good as possible.

00:36:43.040 --> 00:36:44.420
<v Michael Kennedy>And I have no intention of blocking it.

00:36:44.420 --> 00:36:46.600
<v Michael Kennedy>I feel like these might be the new search engines

00:36:47.140 --> 00:36:48.100
<v Michael Kennedy>of five years in the future.

00:36:48.560 --> 00:36:50.200
<v Michael Kennedy>And I'm concerned that if you block it,

00:36:50.200 --> 00:36:51.020
<v Michael Kennedy>you will just vanish.

00:36:51.600 --> 00:36:52.080
<v Michael Kennedy>You know what I mean?

00:36:52.360 --> 00:36:53.620
<v Michael Kennedy>So make it as good as possible.

00:36:53.720 --> 00:36:54.540
<v Michael Kennedy>That's my thinking.

00:36:54.680 --> 00:36:56.320
<v Michael Kennedy>And that's why I put those there.

00:36:56.680 --> 00:36:59.660
<v Brian Okken>I think there's valid choices on both ends of it.

00:37:00.239 --> 00:37:02.940
<v Brian Okken>And even in the middle of just like not doing anything.

00:37:03.480 --> 00:37:03.700
<v Michael Kennedy>Yeah, yeah.

00:37:03.780 --> 00:37:04.340
<v Michael Kennedy>You don't have to do anything.

00:37:04.540 --> 00:37:06.280
<v Michael Kennedy>But I mean, if you care about getting people

00:37:06.360 --> 00:37:07.040
<v Michael Kennedy>coming and finding it, right?

00:37:07.340 --> 00:37:07.440
<v Michael Kennedy>Yeah.

00:37:07.800 --> 00:37:09.220
<v Michael Kennedy>I do think it's a valid point to say,

00:37:09.300 --> 00:37:09.860
<v Michael Kennedy>I don't want it.

00:37:10.100 --> 00:37:11.200
<v Michael Kennedy>I'm going to block all the AIs.

00:37:11.560 --> 00:37:16.060
<v Michael Kennedy>I just think that is a, for something that needs to be publicly well-known, it's going

00:37:16.080 --> 00:37:17.520
<v Michael Kennedy>to be a risky bet.

00:37:18.820 --> 00:37:19.220
<v Brian Okken>Yeah.

00:37:19.520 --> 00:37:21.540
<v Brian Okken>I see the both sides of it.

00:37:21.540 --> 00:37:22.120
<v Brian Okken>I agree with you.

00:37:22.500 --> 00:37:22.600
<v Michael Kennedy>Yeah.

00:37:22.680 --> 00:37:29.260
<v Michael Kennedy>I mean, we as creators and people like content creators, writers, et cetera, it's a tough

00:37:29.340 --> 00:37:30.020
<v Michael Kennedy>place to be, right?

00:37:30.220 --> 00:37:37.160
<v Michael Kennedy>But my bet is that it's better to not be invisible, even if it's detracting from people visiting

00:37:37.240 --> 00:37:37.600
<v Michael Kennedy>our content.

00:37:38.000 --> 00:37:39.620
<v Michael Kennedy>I'm not going to say someone else is wrong if they choose otherwise.

00:37:39.840 --> 00:37:40.020
<v Michael Kennedy>All right.

00:37:41.400 --> 00:37:41.860
<v Michael Kennedy>Let's see.

00:37:42.270 --> 00:37:43.600
<v Michael Kennedy>Just because it's long, I'm going to skip that last one.

00:37:43.680 --> 00:37:45.180
<v Michael Kennedy>Let's just go straight to the joke.

00:37:45.660 --> 00:37:46.120
<v Michael Kennedy>How about that?

00:37:46.619 --> 00:37:48.720
<v Brian Okken>Yeah, I could use some levity.

00:37:50.740 --> 00:37:53.680
<v Michael Kennedy>And I think this is a good follow-up for this AI thing we just talked about.

00:37:54.020 --> 00:37:55.540
<v Michael Kennedy>So, God, it's on LinkedIn.

00:37:56.500 --> 00:37:58.640
<v Michael Kennedy>LinkedIn is so cringe, just all of it.

00:37:58.960 --> 00:37:59.900
<v Michael Kennedy>I mean, I have some-

00:37:59.900 --> 00:38:01.740
<v Brian Okken>It's mostly AI articles right now.

00:38:01.780 --> 00:38:06.380
<v Michael Kennedy>Yes, I was just listening to this guy who's on an entrepreneur podcast.

00:38:07.100 --> 00:38:11.640
<v Michael Kennedy>It's like how he built something like a podcast player or something like that.

00:38:11.710 --> 00:38:13.960
<v Michael Kennedy>And it's like, I'm a really, I got such a good idea.

00:38:14.160 --> 00:38:18.580
<v Michael Kennedy>I'm like, we're going to completely revolutionize things and it's going to be so much better.

00:38:18.740 --> 00:38:24.220
<v Michael Kennedy>So what I'm going to do is I'm creating a really smart AI system that will automatically

00:38:25.070 --> 00:38:27.040
<v Michael Kennedy>write LinkedIn posts for all of my clients.

00:38:27.320 --> 00:38:29.800
<v Michael Kennedy>And you can just pay a hundred dollars a month for like automated LinkedIn.

00:38:29.850 --> 00:38:31.120
<v Michael Kennedy>I'm like, God, it's so bad.

00:38:31.780 --> 00:38:32.420
<v Michael Kennedy>Anyway, I don't know.

00:38:33.080 --> 00:38:34.860
<v Michael Kennedy>I feel like though, this, this joke.

00:38:35.120 --> 00:38:41.320
<v Brian Okken>But why bother? Because all the readers are AI bots also. Most of the comments obviously didn't read it.

00:38:41.600 --> 00:38:47.000
<v Michael Kennedy>I know. It's so bad. But this still, there's a funny joke here, and it has to do with AI and vibe coding, okay?

00:38:47.420 --> 00:38:47.520
<v Michael Kennedy>Okay.

00:38:47.640 --> 00:38:58.080
<v Michael Kennedy>So everyone's a vibe coder these days, right? And you don't need to have real developers anymore. Developers are useless. We could just vibe our way. Look, our project manager has now written everything. It's all good.

00:38:58.500 --> 00:39:01.220
<v Michael Kennedy>And so this is like, I named this joke reverse Superman.

00:39:01.600 --> 00:39:12.980
<v Michael Kennedy>So there's a vibe coder walking around dressed in a Superman outfit, sees production on fire, runs into the phone booth, puts regular clothes on, goes, nothing for me to solve here.

00:39:16.040 --> 00:39:17.380
<v Michael Kennedy>Reverse Superman or vibe coding.

00:39:17.400 --> 00:39:17.880
<v Michael Kennedy>How about that?

00:39:18.080 --> 00:39:18.460
<v Brian Okken>Yeah.

00:39:18.820 --> 00:39:19.400
<v Brian Okken>Yeah, exactly.

00:39:19.980 --> 00:39:20.180
<v Brian Okken>Yeah.

00:39:20.980 --> 00:39:21.060
<v Brian Okken>Well.

00:39:21.920 --> 00:39:22.040
<v Brian Okken>Yeah.

00:39:24.400 --> 00:39:27.000
<v Brian Okken>Speaking of, yeah, I was talking, bringing up Rebsus.

00:39:27.020 --> 00:39:41.240
<v Brian Okken>I think it was the dude from Repsys that mentioned that vibe coding is awesome because he gets a lot of work of people building an MVP and then they scale and then it crashes and then they need to pay somebody to fix it.

00:39:43.480 --> 00:39:45.460
<v Michael Kennedy>Honestly, we're talking negative about it.

00:39:45.470 --> 00:39:54.680
<v Michael Kennedy>If you've got an idea and you can't code and you can get AI to make something that looks pretty much like you want, you could give that to a professional and say,

00:39:54.700 --> 00:40:00.620
<v Michael Kennedy>I want this, but nice. So it lasts. That is so much farther than here's my idea on a napkin.

00:40:00.860 --> 00:40:04.120
<v Michael Kennedy>Can we build this? You know what I mean? Like that, that is an accelerant and that's useful.

00:40:04.160 --> 00:40:06.280
<v Michael Kennedy>But the problem is when you're like, and we'll put it in production.

00:40:07.100 --> 00:40:13.720
<v Brian Okken>But well, yeah, but also just, I can see both sides. The, you, if you have scaling problems,

00:40:13.980 --> 00:40:18.440
<v Brian Okken>that means you've got customers and that's a good thing. You validated your idea. Um,

00:40:18.820 --> 00:40:24.160
<v Michael Kennedy>exactly. So yeah, it's so easy as a developer to think the hard part is to build the thing. Oh no.

00:40:24.740 --> 00:40:30.660
<v Michael Kennedy>no no no the hard part is to get anyone to care anyone to use it anyone to validate it to find

00:40:30.670 --> 00:40:35.380
<v Michael Kennedy>an idea that is good and then even if it is to get attention for it like yeah if you can solve that

00:40:35.600 --> 00:40:41.560
<v Michael Kennedy>problem then the coding part is like you know it's an automatable process and automate i mean like

00:40:41.820 --> 00:40:45.620
<v Michael Kennedy>you know you grind this way until code comes out and it works and it's got to look kind of like

00:40:45.630 --> 00:40:52.620
<v Brian Okken>that i hope that writing software becomes uh such that um that we get more problems solved that that

00:40:52.640 --> 00:40:56.640
<v Brian Okken>It used to be problems that aren't large enough to have a market.

00:40:57.300 --> 00:41:00.520
<v Brian Okken>And now hopefully with single or two developer teams or something,

00:41:00.620 --> 00:41:05.220
<v Brian Okken>we can get things done quicker and solve some of these small problems for people.

00:41:05.780 --> 00:41:07.020
<v Michael Kennedy>100%. That's going to happen.

00:41:07.300 --> 00:41:08.620
<v Michael Kennedy>It's absolutely going to happen. Probably.

00:41:10.220 --> 00:41:10.980
<v Brian Okken>Probably maybe.

00:41:11.960 --> 00:41:13.040
<v Brian Okken>Well, it's good talking to you again.

00:41:13.440 --> 00:41:14.780
<v Brian Okken>Thanks, everybody that showed up.

00:41:15.220 --> 00:41:16.920
<v Brian Okken>Lots of great conversations in the chat this week.

00:41:17.300 --> 00:41:18.040
<v Brian Okken>Indeed. Bye.

00:41:18.780 --> 00:41:18.940
<v Brian Okken>Bye.

