WEBVTT

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

00:00:05.310 --> 00:00:11.820
<v Michael Kennedy>This is episode 492, recorded August 18th, 2026. I'm Michael Kennedy.

00:00:12.170 --> 00:00:13.240
<v Michael Kennedy>And I'm Calvin Hendryx-Parker.

00:00:13.520 --> 00:00:19.320
<v Michael Kennedy>This episode is brought to you by Logfire. So thank you to Logfire from Pydantic.

00:00:19.820 --> 00:00:25.240
<v Michael Kennedy>Check them out at pythonbytes.fm/logfire. It's about observability for your AI apps and

00:00:25.350 --> 00:00:29.320
<v Michael Kennedy>beyond. Tell you more about them later. Connect with us on social, links on the website.

00:00:29.540 --> 00:00:30.700
<v Michael Kennedy>Be part of the live show.

00:00:31.100 --> 00:00:33.300
<v Michael Kennedy>Check it out on the website, pythonbytes.fm.

00:00:33.600 --> 00:00:34.040
<v Michael Kennedy>It's live.

00:00:34.320 --> 00:00:39.000
<v Michael Kennedy>And we have a really cool newsletter that we send out mostly every week with all sorts of extras.

00:00:39.360 --> 00:00:40.720
<v Michael Kennedy>So you can sign up there as well.

00:00:40.900 --> 00:00:43.780
<v Michael Kennedy>Just visit the website, click the newsletter, do the thing.

00:00:44.080 --> 00:00:46.680
<v Michael Kennedy>We'll keep it private and not abuse it.

00:00:47.040 --> 00:00:48.140
<v Michael Kennedy>Speaking of abuse.

00:00:48.600 --> 00:00:49.280
<v Calvin Hendryx-Parker>We're good people.

00:00:49.440 --> 00:00:49.920
<v Calvin Hendryx-Parker>You're good people.

00:00:50.220 --> 00:00:51.680
<v Calvin Hendryx-Parker>Let's make sure we keep people safe, Michael.

00:00:52.040 --> 00:00:52.440
<v Michael Kennedy>Exactly.

00:00:52.800 --> 00:00:54.840
<v Michael Kennedy>Sometimes you can have nice things on the internet.

00:00:55.180 --> 00:00:55.600
<v Michael Kennedy>That's true.

00:00:55.820 --> 00:01:01.440
<v Calvin Hendryx-Parker>And well, the good thing is that with the solar eclipse in Europe last week, a new release came

00:01:01.460 --> 00:01:10.640
<v Calvin Hendryx-Parker>out of some security updates for Python 3.12, 3.11, and 3.10. The key bit here, well, there's a lot of

00:01:10.700 --> 00:01:15.380
<v Calvin Hendryx-Parker>key bits, which is there's lots of security updates that have happened. They're pretty important if

00:01:15.440 --> 00:01:21.079
<v Calvin Hendryx-Parker>you're doing certain kinds of activities. So for example, if you are using tar files to, if you're

00:01:21.020 --> 00:01:25.720
<v Calvin Hendryx-Parker>extracting tar files with any of these versions of Python, you are going to want to update ASAP

00:01:26.420 --> 00:01:33.000
<v Calvin Hendryx-Parker>because this basically fixed a path traversal bypass of the data filter. So a symlink escape

00:01:33.210 --> 00:01:38.420
<v Calvin Hendryx-Parker>that could bypass bits and pieces here and get people access to places they're not supposed to be.

00:01:39.020 --> 00:01:43.720
<v Calvin Hendryx-Parker>Kind of important. Now the important bit here is that this is only a source release,

00:01:44.280 --> 00:01:50.240
<v Calvin Hendryx-Parker>is a source release only. If you want to upgrade to these versions of Python, the 3.12.14, 3.11.16,

00:01:50.940 --> 00:01:57.640
<v Calvin Hendryx-Parker>and 3.10.21, you are going to have to download the source tarball or patch your existing build

00:01:57.960 --> 00:02:02.120
<v Calvin Hendryx-Parker>process to get these released into your production environments. But if you are on these versions,

00:02:02.200 --> 00:02:05.500
<v Calvin Hendryx-Parker>you're going to want to get those things patched. I mean, it's nice that these are in security only

00:02:05.560 --> 00:02:10.340
<v Michael Kennedy>fixed mode. There's not a binary version. I have to use this. There is not a binary version of

00:02:10.360 --> 00:02:15.799
<v Calvin Hendryx-Parker>these been released. These are in security fix only mode. I mean, hopefully you're getting into

00:02:16.120 --> 00:02:22.220
<v Calvin Hendryx-Parker>Python 3.13 and 3.14 as they are the current releases. It's nice that the community supports

00:02:22.520 --> 00:02:26.980
<v Calvin Hendryx-Parker>these versions that far back. I don't know when 3.10 was released, but it was quite a while ago.

00:02:27.800 --> 00:02:32.440
<v Calvin Hendryx-Parker>And you've got to be able to stay on top of these. This is in your hands now. This is kind of more

00:02:32.500 --> 00:02:38.180
<v Calvin Hendryx-Parker>of a do-it-yourself, but at least the fixes are available. So tar file is a big one. There are

00:02:38.580 --> 00:02:45.019
<v Calvin Hendryx-Parker>four fresh CVEs that are being covered by these fixes here. One of them is for the sourceless

00:02:45.040 --> 00:02:52.360
<v Calvin Hendryx-Parker>file loader. The other one is the cookies morsel, which there's basically a couple of fixes there

00:02:52.360 --> 00:02:59.400
<v Calvin Hendryx-Parker>on that. And then the ftp lib ftp cp. So there's also a bunch of denial of service type fixes,

00:03:00.120 --> 00:03:07.520
<v Calvin Hendryx-Parker>some cleanups in HTML parser, config parser, Unicode data normalize, element tree XPath bits.

00:03:08.120 --> 00:03:11.660
<v Calvin Hendryx-Parker>There's some header injection fixes. Again, just lots of cleanups around the edges.

00:03:14.100 --> 00:03:18.260
<v Calvin Hendryx-Parker>Michael, have you ever used the web browser module from the standard library?

00:03:18.720 --> 00:03:20.900
<v Michael Kennedy>I'm learning now there's a web browser module.

00:03:21.090 --> 00:03:22.700
<v Calvin Hendryx-Parker>There is a web browser module.

00:03:23.460 --> 00:03:24.580
<v Calvin Hendryx-Parker>It allows you to pop a web browser.

00:03:25.000 --> 00:03:25.500
<v Calvin Hendryx-Parker>That's pretty handy.

00:03:25.780 --> 00:03:27.920
<v Calvin Hendryx-Parker>I've used it for a couple like little demo-y type things,

00:03:28.180 --> 00:03:30.920
<v Calvin Hendryx-Parker>but there was a allowed control character in there

00:03:30.950 --> 00:03:34.060
<v Calvin Hendryx-Parker>that would have caused an action prefix bypass.

00:03:34.680 --> 00:03:37.260
<v Calvin Hendryx-Parker>So if folks were sneaky and knew those things existed,

00:03:37.330 --> 00:03:40.260
<v Calvin Hendryx-Parker>they could basically jump in and bypass some of these security controls.

00:03:40.860 --> 00:03:49.080
<v Calvin Hendryx-Parker>The HTTP client also now caps chunked trailer lines and the 100 responses to 100 each.

00:03:49.300 --> 00:03:53.620
<v Calvin Hendryx-Parker>So a hostile server could previously hang a client, even if you had a socket timeout in place.

00:03:54.040 --> 00:03:56.620
<v Calvin Hendryx-Parker>So lots of memory safety stuff, lots of other little cleanups.

00:03:56.740 --> 00:03:59.560
<v Calvin Hendryx-Parker>Again, it's a pretty sweeping set of security fixes.

00:03:59.840 --> 00:04:02.840
<v Calvin Hendryx-Parker>And they chose to release it now because it's as good a time as any.

00:04:03.160 --> 00:04:07.280
<v Calvin Hendryx-Parker>There's no set schedule for these specific releases on these older versions of Python.

00:04:08.060 --> 00:04:08.700
<v Calvin Hendryx-Parker>Excuse me.

00:04:09.060 --> 00:04:15.060
<v Calvin Hendryx-Parker>But it's good we've got people watching our backs and making sure we stay secure out there.

00:04:15.660 --> 00:04:17.579
<v Calvin Hendryx-Parker>Like I say, you can go look at the release notes.

00:04:17.880 --> 00:04:19.100
<v Calvin Hendryx-Parker>There's a ton of fixes in here.

00:04:19.299 --> 00:04:22.800
<v Calvin Hendryx-Parker>It's a really long set of releases and fixes that went into us.

00:04:23.480 --> 00:04:28.420
<v Calvin Hendryx-Parker>Thanks to all the Python core devs and volunteers and people submitting patches.

00:04:28.780 --> 00:04:34.280
<v Calvin Hendryx-Parker>I'm sure some of this stuff probably came out of the new models that are able to detect these kinds of pieces.

00:04:34.640 --> 00:04:37.720
<v Calvin Hendryx-Parker>But obviously, humans are putting the pieces into place.

00:04:38.220 --> 00:04:39.420
<v Calvin Hendryx-Parker>So go be safe out there, Michael.

00:04:40.880 --> 00:04:41.740
<v Calvin Hendryx-Parker>And upgrade your Pythons.

00:04:41.740 --> 00:04:42.320
<v Calvin Hendryx-Parker>This is always something I'm worried about.

00:04:42.600 --> 00:04:43.260
<v Calvin Hendryx-Parker>Yeah, I mean.

00:04:43.580 --> 00:04:44.560
<v Calvin Hendryx-Parker>Upgrade your Python, please.

00:04:45.300 --> 00:04:48.340
<v Michael Kennedy>Here's also one of those reasons why I kind of want to stay on top.

00:04:48.640 --> 00:04:48.960
<v Calvin Hendryx-Parker>Yeah.

00:04:49.180 --> 00:04:51.080
<v Michael Kennedy>Of having a fairly new version.

00:04:51.370 --> 00:04:52.840
<v Michael Kennedy>And I'll be like, oh, we're not going to touch it.

00:04:53.160 --> 00:04:54.840
<v Michael Kennedy>And hey, it's 3.8, but it works.

00:04:55.280 --> 00:04:59.640
<v Michael Kennedy>It's like, yeah, but when this kind of jump, this stuff comes out of the blue,

00:05:00.040 --> 00:05:03.220
<v Michael Kennedy>you're all of a sudden scrambling to get your app to run rather than just a point release.

00:05:03.720 --> 00:05:03.860
<v Calvin Hendryx-Parker>Yeah.

00:05:04.440 --> 00:05:10.000
<v Calvin Hendryx-Parker>It's hard to argue for the old stance of like, well, just because it works, it should just stay in production.

00:05:10.080 --> 00:05:20.860
<v Calvin Hendryx-Parker>Or even if it's behind a firewall or behind some kind of level of protections, we've seen that these models can now chain together multiple vulnerabilities to get access to spaces they weren't supposed to get access to.

00:05:21.260 --> 00:05:25.640
<v Calvin Hendryx-Parker>All that's required at this point is setting good goals for the agentic AI tools.

00:05:25.740 --> 00:05:33.520
<v Calvin Hendryx-Parker>And they can get around a lot of things if they're given unfettered access, even not unfettered access, even if they're sandboxed in, they could still do this.

00:05:33.920 --> 00:05:35.920
<v Calvin Hendryx-Parker>So keep up to date.

00:05:37.200 --> 00:05:41.420
<v Calvin Hendryx-Parker>Again, this is a reason for staying on the latest released version of Python.

00:05:42.180 --> 00:05:43.980
<v Calvin Hendryx-Parker>But the community does support back patches.

00:05:44.460 --> 00:05:45.520
<v Calvin Hendryx-Parker>You just got to go build them yourself.

00:05:45.980 --> 00:05:47.700
<v Michael Kennedy>I'll have more on that later on the building.

00:05:48.380 --> 00:05:48.720
<v Michael Kennedy>Maybe.

00:05:50.900 --> 00:05:52.520
<v Michael Kennedy>So yes, but maybe.

00:05:52.960 --> 00:05:53.080
<v Calvin Hendryx-Parker>Maybe.

00:05:53.330 --> 00:05:53.700
<v Michael Kennedy>What do you got?

00:05:53.780 --> 00:05:58.440
<v Michael Kennedy>My favorite way to install Python is uv Python.

00:05:58.780 --> 00:05:59.120
<v Michael Kennedy>No kidding.

00:05:59.300 --> 00:05:59.900
<v Michael Kennedy>Install, right?

00:06:00.960 --> 00:06:03.220
<v Michael Kennedy>And a quick, I just upgraded it.

00:06:03.300 --> 00:06:04.320
<v Michael Kennedy>You got to upgrade to get the latest.

00:06:04.500 --> 00:06:05.200
<v Michael Kennedy>It's just kind of odd.

00:06:05.200 --> 00:06:05.500
<v Michael Kennedy>It doesn't.

00:06:05.540 --> 00:06:06.940
<v Calvin Hendryx-Parker>Oh, they've got someone's got built.

00:06:07.020 --> 00:06:07.300
<v Michael Kennedy>It does.

00:06:08.240 --> 00:06:09.360
<v Michael Kennedy>3.11.16.

00:06:10.920 --> 00:06:12.100
<v Michael Kennedy>And 3.12.14.

00:06:12.510 --> 00:06:15.200
<v Michael Kennedy>That looks like they've packaged it into Python build standalone.

00:06:15.700 --> 00:06:16.160
<v Calvin Hendryx-Parker>That's nice.

00:06:16.500 --> 00:06:19.060
<v Michael Kennedy>Well, it's good to see the astral folks have got our back.

00:06:19.800 --> 00:06:20.380
<v Michael Kennedy>Yes, obviously.

00:06:20.640 --> 00:06:21.920
<v Michael Kennedy>Like that's a theme, right?

00:06:22.200 --> 00:06:22.960
<v Calvin Hendryx-Parker>It's definitely a theme.

00:06:23.250 --> 00:06:23.840
<v Calvin Hendryx-Parker>Well, there you go.

00:06:24.740 --> 00:06:24.960
<v Calvin Hendryx-Parker>Go.

00:06:25.260 --> 00:06:30.140
<v Calvin Hendryx-Parker>Well, if you're on this older version of Python, you might need to just go upgrade to uv at

00:06:30.140 --> 00:06:32.280
<v Calvin Hendryx-Parker>this point and save yourself some headache.

00:06:32.720 --> 00:06:32.900
<v Michael Kennedy>Yeah.

00:06:33.180 --> 00:06:33.500
<v Michael Kennedy>Yeah, absolutely.

00:06:34.230 --> 00:06:38.260
<v Michael Kennedy>You could technically just use uv to manage your Python and still, I don't know.

00:06:38.280 --> 00:06:39.340
<v Calvin Hendryx-Parker>Yeah, you don't need it.

00:06:39.490 --> 00:06:42.460
<v Calvin Hendryx-Parker>You don't necessarily, yeah, you can do the rest of the way you're currently doing it.

00:06:42.680 --> 00:06:42.820
<v Calvin Hendryx-Parker>Right.

00:06:43.190 --> 00:06:46.320
<v Calvin Hendryx-Parker>But if you're going to jump in there, you might as well modernize and fix.

00:06:46.460 --> 00:06:47.120
<v Calvin Hendryx-Parker>You're already in there.

00:06:47.320 --> 00:06:48.180
<v Calvin Hendryx-Parker>You're already doing it.

00:06:48.600 --> 00:06:49.320
<v Michael Kennedy>You're already in there.

00:06:50.000 --> 00:06:50.300
<v Michael Kennedy>Okay.

00:06:51.100 --> 00:06:57.540
<v Michael Kennedy>Speaking of, you gave a quick shout out to give an AI agent some kind of go find bugs.

00:06:57.800 --> 00:06:59.140
<v Michael Kennedy>And I 100% agree.

00:06:59.150 --> 00:07:02.700
<v Michael Kennedy>You and I both likened to this to running a lender for the first time.

00:07:03.040 --> 00:07:04.060
<v Michael Kennedy>And you're like, there's a thousand errors.

00:07:04.130 --> 00:07:05.100
<v Michael Kennedy>Oh my God, it's so much.

00:07:05.620 --> 00:07:07.060
<v Michael Kennedy>Right, so stay on top of these things.

00:07:07.280 --> 00:07:11.520
<v Michael Kennedy>But these tools are causing some places a ripple,

00:07:12.570 --> 00:07:14.580
<v Michael Kennedy>other places a tidal wave.

00:07:15.200 --> 00:07:17.400
<v Michael Kennedy>And Codeberg is one of those places that,

00:07:17.770 --> 00:07:20.520
<v Michael Kennedy>I don't know, like, I'm not sure how to feel about Codeberg.

00:07:20.750 --> 00:07:23.340
<v Michael Kennedy>I, in principle, like it,

00:07:23.720 --> 00:07:26.380
<v Michael Kennedy>but I think people want Codeberg to be more

00:07:26.480 --> 00:07:28.380
<v Michael Kennedy>than Codeberg wants to be, let's say that.

00:07:28.660 --> 00:07:29.660
<v Michael Kennedy>What the heck is Codeberg?

00:07:29.780 --> 00:07:30.720
<v Calvin Hendryx-Parker>Codeberg isn't

00:07:30.720 --> 00:07:31.280
<v Calvin Hendryx-Parker>What is Codeberg?

00:07:32.080 --> 00:07:35.000
<v Michael Kennedy>It is a GitHub alternative, let's say.

00:07:35.250 --> 00:07:35.380
<v Calvin Hendryx-Parker>Okay.

00:07:35.760 --> 00:07:38.560
<v Michael Kennedy>Evolved out of previous attempts to create a GitHub alternative.

00:07:38.830 --> 00:07:46.060
<v Michael Kennedy>It's a nonprofit community-led effort with a democratic process that provides services to free and open source projects,

00:07:46.550 --> 00:07:50.340
<v Michael Kennedy>such as Git hosting using 4Gio, Pages, CI/CD, and so on.

00:07:50.560 --> 00:07:54.940
<v Michael Kennedy>So it's already got this restriction like, hey, it's only for free and open source stuff.

00:07:55.160 --> 00:08:00.360
<v Michael Kennedy>It's not for just general paid software, private repos, and so on, right?

00:08:00.640 --> 00:08:00.820
<v Michael Kennedy>Fine.

00:08:01.060 --> 00:08:04.100
<v Michael Kennedy>So that's kind of its mission, and that's what it is.

00:08:04.330 --> 00:08:06.520
<v Michael Kennedy>But a lot of people are looking at GitHub going,

00:08:06.920 --> 00:08:08.640
<v Michael Kennedy>I mean, just yesterday GitHub was down.

00:08:08.740 --> 00:08:12.240
<v Michael Kennedy>I'm like, oh, man, I guess I'll try this PR again in a half hour

00:08:12.920 --> 00:08:14.260
<v Michael Kennedy>because it couldn't load the PR stuff,

00:08:14.370 --> 00:08:15.600
<v Michael Kennedy>and then I just got the unicorn,

00:08:16.160 --> 00:08:17.620
<v Michael Kennedy>which kind of feels like it's supposed to be amazing,

00:08:17.750 --> 00:08:18.640
<v Michael Kennedy>but it's a bad unicorn.

00:08:19.760 --> 00:08:21.940
<v Michael Kennedy>Should have like a leather jacket and be smoking or something.

00:08:21.990 --> 00:08:22.260
<v Michael Kennedy>I don't know.

00:08:22.280 --> 00:08:24.500
<v Calvin Hendryx-Parker>I know, kind of the fail whale of GitHub.

00:08:25.180 --> 00:08:25.660
<v Michael Kennedy>Yes, exactly.

00:08:25.910 --> 00:08:28.380
<v Michael Kennedy>And there might be people out there that don't know the fail whale,

00:08:28.540 --> 00:08:31.240
<v Michael Kennedy>but oh my gosh, that Twitter went down bad in the beginning.

00:08:31.800 --> 00:08:32.800
<v Michael Kennedy>Yeah, so it's like the fail wheel.

00:08:32.900 --> 00:08:33.340
<v Michael Kennedy>Early days.

00:08:33.479 --> 00:08:35.120
<v Michael Kennedy>But right now, I just pulled this up

00:08:35.140 --> 00:08:37.500
<v Michael Kennedy>into the top of the Codeberg page.

00:08:38.200 --> 00:08:38.780
<v Michael Kennedy>Time recording.

00:08:39.039 --> 00:08:40.580
<v Calvin Hendryx-Parker>Yeah, the number two is interesting.

00:08:42.219 --> 00:08:43.680
<v Michael Kennedy>There's just like, there's stuff we don't want here.

00:08:44.219 --> 00:08:45.140
<v Michael Kennedy>And we don't approve of it,

00:08:45.260 --> 00:08:46.380
<v Michael Kennedy>and it needs to get the heck out.

00:08:46.520 --> 00:08:49.160
<v Michael Kennedy>Even if it is free and open source,

00:08:49.380 --> 00:08:50.960
<v Michael Kennedy>it still needs to get the heck out, okay?

00:08:51.300 --> 00:08:53.000
<v Michael Kennedy>So I feel like this was just,

00:08:53.240 --> 00:08:54.480
<v Michael Kennedy>there's stuff we don't like, let's get it out.

00:08:55.040 --> 00:08:56.859
<v Michael Kennedy>And the number two you pointed out and laughed at

00:08:56.880 --> 00:08:59.540
<v Michael Kennedy>is like cryptocurrency projects are no longer allowed.

00:08:59.600 --> 00:09:00.700
<v Michael Kennedy>And like, you know, I'm fine with that.

00:09:00.860 --> 00:09:01.660
<v Michael Kennedy>Like, whatever.

00:09:01.920 --> 00:09:02.560
<v Calvin Hendryx-Parker>Okay, okay.

00:09:03.340 --> 00:09:05.400
<v Michael Kennedy>If that's your mission to just not have that kind of stuff,

00:09:05.840 --> 00:09:06.520
<v Michael Kennedy>I'm here for it.

00:09:06.560 --> 00:09:07.780
<v Michael Kennedy>Like cryptocurrency is weird.

00:09:08.120 --> 00:09:09.960
<v Michael Kennedy>I'm not 100% against it, but it's just

00:09:09.960 --> 00:09:11.280
<v Calvin Hendryx-Parker>I'm not either.

00:09:11.280 --> 00:09:12.680
<v Calvin Hendryx-Parker>So that's why I thought it was kind of weird.

00:09:12.680 --> 00:09:14.520
<v Calvin Hendryx-Parker>There's definitely some opinions here

00:09:14.520 --> 00:09:16.720
<v Calvin Hendryx-Parker>that had a thought process going on behind them

00:09:16.720 --> 00:09:18.220
<v Calvin Hendryx-Parker>that we're not seeing the full story.

00:09:18.220 --> 00:09:20.820
<v Calvin Hendryx-Parker>I guess we can go view the full change, but

00:09:20.820 --> 00:09:23.140
<v Michael Kennedy>Yeah, but this first one is quite weird.

00:09:23.220 --> 00:09:26.180
<v Michael Kennedy>It says LLM generated content is being restricted.

00:09:26.860 --> 00:09:33.860
<v Michael Kennedy>More specifically, if you have a project that they somehow decide they believe it is majority LLM, banned.

00:09:34.240 --> 00:09:41.760
<v Michael Kennedy>Even if it has been here for a long time, it has gotten a lot of attention and a lot of maybe even wrote it by hand to start.

00:09:41.810 --> 00:09:45.000
<v Michael Kennedy>But then you do some mega refactoring that touches every file.

00:09:45.220 --> 00:09:45.420
<v Michael Kennedy>Banned.

00:09:46.440 --> 00:09:47.840
<v Michael Kennedy>So you may like that.

00:09:47.850 --> 00:09:48.480
<v Michael Kennedy>You may not.

00:09:48.800 --> 00:09:49.320
<v Michael Kennedy>It's extreme.

00:09:49.340 --> 00:09:55.340
<v Michael Kennedy>It seems a little extreme given that we just recently covered Linus Torvalds saying like,

00:09:55.500 --> 00:09:58.700
<v Michael Kennedy>look, using AI to review our stuff is a tool.

00:09:59.100 --> 00:10:01.280
<v Michael Kennedy>It feels a bit myopic to me.

00:10:01.520 --> 00:10:03.280
<v Michael Kennedy>And fine, like I said, this is their project.

00:10:03.620 --> 00:10:05.260
<v Michael Kennedy>They can do it, but people have thoughts.

00:10:06.160 --> 00:10:07.280
<v Michael Kennedy>People have a lot of thoughts.

00:10:07.860 --> 00:10:08.820
<v Michael Kennedy>Wait, Armin has a thought?

00:10:09.580 --> 00:10:10.120
<v Michael Kennedy>Could you imagine?

00:10:10.320 --> 00:10:11.300
<v Michael Kennedy>Armin Roniker has a thought.

00:10:11.820 --> 00:10:15.420
<v Michael Kennedy>And he wrote, and the reason a lot of people have thoughts is they were like,

00:10:15.560 --> 00:10:19.160
<v Michael Kennedy>I would just love a GitHub alternative, like for different reasons.

00:10:19.300 --> 00:10:21.580
<v Michael Kennedy>Some people are just like, I don't like the way GitHub works.

00:10:22.000 --> 00:10:22.940
<v Michael Kennedy>It's been down a lot.

00:10:23.180 --> 00:10:25.480
<v Michael Kennedy>Other people are like, I want a European company,

00:10:25.800 --> 00:10:30.380
<v Michael Kennedy>not just an American company to kind of be a first-class player in this space.

00:10:30.500 --> 00:10:30.620
<v Michael Kennedy>Right.

00:10:31.020 --> 00:10:33.740
<v Michael Kennedy>And whatever, like all of those people are like,

00:10:34.100 --> 00:10:35.320
<v Michael Kennedy>but Codeberg is now broken.

00:10:35.520 --> 00:10:36.100
<v Michael Kennedy>So that's out.

00:10:36.840 --> 00:10:37.940
<v Michael Kennedy>And that was my hope, right?

00:10:38.040 --> 00:10:40.260
<v Michael Kennedy>Like Obi-Wan, you're my only hope.

00:10:40.580 --> 00:10:42.420
<v Michael Kennedy>Oh, Obi-Wan doesn't like all of them content.

00:10:42.520 --> 00:10:43.320
<v Michael Kennedy>Well, I guess he's out.

00:10:44.140 --> 00:10:48.220
<v Michael Kennedy>Anyway, so Armin wrote an article called Codeberg Divides.

00:10:48.680 --> 00:10:51.140
<v Michael Kennedy>And so they changed their terms of service, as I said.

00:10:51.600 --> 00:10:53.220
<v Michael Kennedy>They're entirely within the rights to do this.

00:10:53.640 --> 00:10:54.780
<v Michael Kennedy>It's a democratic process.

00:10:55.300 --> 00:10:58.980
<v Michael Kennedy>But democracies don't inherently make good decisions.

00:10:59.740 --> 00:11:00.560
<v Michael Kennedy>That's what I'm saying, right?

00:11:00.940 --> 00:11:05.160
<v Michael Kennedy>So GitHub's never been democratic, and there's plenty not to like.

00:11:05.260 --> 00:11:09.080
<v Michael Kennedy>But as a core piece of infrastructure, it's been reliable, right?

00:11:09.480 --> 00:11:10.520
<v Michael Kennedy>So I don't know.

00:11:11.090 --> 00:11:13.020
<v Michael Kennedy>How do you even enforce this majority?

00:11:13.640 --> 00:11:36.340
<v Michael Kennedy>Like I said, if I have a project, let's say a web app that uses some CSS front end, and I ask AI to change the CSS front end around, even though I wrote all the code, all the back end, in the diff perspective, chances are it's going to overwhelm the back end amount of code if I have to have it rewrite every bit of HTML because it's grid versus flex box versus whatever.

00:11:36.340 --> 00:11:42.580
<v Calvin Hendryx-Parker>This is groundwork stuff that the AIs can be directed very easily to take care of for us as humans.

00:11:43.140 --> 00:11:47.340
<v Michael Kennedy>Yeah, and so here's sort of the thoughts.

00:11:47.600 --> 00:11:49.820
<v Michael Kennedy>It's a real shame that open source and free software communities

00:11:49.850 --> 00:11:53.180
<v Michael Kennedy>are splitting this deeply over LLM and agents.

00:11:55.300 --> 00:12:00.020
<v Michael Kennedy>We all already acknowledge copyright issues, energy use,

00:12:00.620 --> 00:12:01.240
<v Michael Kennedy>those kinds of things.

00:12:01.640 --> 00:12:03.840
<v Michael Kennedy>But it's also just how software is being made, right?

00:12:03.910 --> 00:12:06.560
<v Michael Kennedy>And people need to, projects are going to need to figure out

00:12:06.560 --> 00:12:07.220
<v Michael Kennedy>how to coexist.

00:12:08.560 --> 00:12:12.160
<v Michael Kennedy>And yeah, if you want GitHub to face true competition,

00:12:12.760 --> 00:12:13.420
<v Michael Kennedy>This is not it.

00:12:13.540 --> 00:12:14.860
<v Calvin Hendryx-Parker>Yeah, this is not going to work.

00:12:15.279 --> 00:12:16.340
<v Calvin Hendryx-Parker>Michael, I got an idea.

00:12:16.900 --> 00:12:17.100
<v Calvin Hendryx-Parker>Okay.

00:12:17.260 --> 00:12:21.200
<v Calvin Hendryx-Parker>We're going to do a blockchain project to host a GitHub alternative

00:12:21.760 --> 00:12:24.220
<v Calvin Hendryx-Parker>that is a distributed autonomous organization.

00:12:24.760 --> 00:12:27.000
<v Calvin Hendryx-Parker>And it's going to have like smart contracts and rules.

00:12:27.300 --> 00:12:28.540
<v Calvin Hendryx-Parker>We're going completely the other direction.

00:12:29.720 --> 00:12:32.280
<v Michael Kennedy>You're making my ears hurt just a little bit with that word.

00:12:34.279 --> 00:12:35.520
<v Michael Kennedy>So what about this?

00:12:35.540 --> 00:12:39.040
<v Michael Kennedy>What if we go back a little further and we can like do a sweet arc?

00:12:39.280 --> 00:12:42.060
<v Michael Kennedy>Like what if we do like a BitTorrent hosted,

00:12:42.920 --> 00:12:44.220
<v Michael Kennedy>smart contract backed?

00:12:45.000 --> 00:12:46.660
<v Calvin Hendryx-Parker>Even more, like the layers go deep.

00:12:47.780 --> 00:12:50.620
<v Calvin Hendryx-Parker>So, you know, the decentralization aspect

00:12:50.870 --> 00:12:52.740
<v Calvin Hendryx-Parker>of BitTorrent totally makes sense here.

00:12:52.790 --> 00:12:53.880
<v Calvin Hendryx-Parker>I think we could make this go.

00:12:54.140 --> 00:12:55.540
<v Michael Kennedy>No, we could totally make it go.

00:12:56.080 --> 00:12:58.160
<v Michael Kennedy>All right, so that was Armand's thought.

00:12:58.160 --> 00:12:59.480
<v Michael Kennedy>I wish this was more forward looking

00:12:59.650 --> 00:13:00.940
<v Michael Kennedy>in a place that we could depend on

00:13:01.210 --> 00:13:02.260
<v Michael Kennedy>rather than a place that divides

00:13:02.390 --> 00:13:04.220
<v Michael Kennedy>and just kicks a bunch of people up.

00:13:04.480 --> 00:13:07.240
<v Michael Kennedy>Now, one of the reasons I'm sure they did this is,

00:13:07.640 --> 00:13:10.160
<v Michael Kennedy>well, these AI things use 20 times as much resources.

00:13:10.580 --> 00:13:10.760
<v Calvin Hendryx-Parker>Yeah.

00:13:11.000 --> 00:13:11.100
<v Michael Kennedy>Yeah.

00:13:11.450 --> 00:13:11.560
<v Michael Kennedy>Okay.

00:13:11.690 --> 00:13:16.600
<v Michael Kennedy>So I just searched for the terms to see kind of Codeberg terms,

00:13:16.710 --> 00:13:17.840
<v Michael Kennedy>and I came up with this website.

00:13:19.580 --> 00:13:22.780
<v Michael Kennedy>The domain is amazing, but it says...

00:13:22.860 --> 00:13:23.140
<v Michael Kennedy>Oh, wow.

00:13:23.660 --> 00:13:26.300
<v Michael Kennedy>I asked literally just for the terms of service of Codeberg,

00:13:26.520 --> 00:13:27.940
<v Michael Kennedy>and the first thing that comes up is,

00:13:28.060 --> 00:13:30.040
<v Michael Kennedy>I regret migrating to Codeberg.

00:13:30.740 --> 00:13:34.220
<v Michael Kennedy>And this is actually a really interesting and well-thought-out article.

00:13:34.660 --> 00:13:37.019
<v Michael Kennedy>So this person just recently left GitHub

00:13:37.040 --> 00:13:39.120
<v Michael Kennedy>and moved all their projects over here because they're like,

00:13:39.240 --> 00:13:41.380
<v Michael Kennedy>ah, GitHub is kind of getting clunky,

00:13:41.800 --> 00:13:44.600
<v Michael Kennedy>and I have just pure open source and so on.

00:13:45.000 --> 00:13:47.160
<v Michael Kennedy>So GitHub looked like a viable alternative,

00:13:47.310 --> 00:13:50.400
<v Michael Kennedy>which is like this is the main spine running through this conversation.

00:13:50.700 --> 00:13:56.420
<v Michael Kennedy>So unfortunately, the latest update to its terms of service

00:13:56.640 --> 00:14:00.200
<v Michael Kennedy>seemed to mark the first step in changing one part I moved there for,

00:14:00.600 --> 00:14:02.140
<v Michael Kennedy>namely freedom, is now gone.

00:14:02.330 --> 00:14:03.180
<v Michael Kennedy>I can't work on it.

00:14:03.540 --> 00:14:05.100
<v Michael Kennedy>And one of the interesting things about this term,

00:14:05.300 --> 00:14:07.820
<v Michael Kennedy>I'll move on from this section in just a second.

00:14:08.060 --> 00:14:10.300
<v Michael Kennedy>But from their terms,

00:14:10.420 --> 00:14:12.880
<v Michael Kennedy>is the content that harms the reputation of CodeBerg,

00:14:12.980 --> 00:14:14.680
<v Michael Kennedy>which is like, we don't have a great reason for it.

00:14:15.060 --> 00:14:16.840
<v Michael Kennedy>And one of the criteria they use

00:14:16.840 --> 00:14:19.040
<v Michael Kennedy>is it has to have a community behind it

00:14:19.340 --> 00:14:20.980
<v Michael Kennedy>in order for it to be legit.

00:14:21.120 --> 00:14:24.260
<v Michael Kennedy>And LLMs and AI don't make community, right?

00:14:24.720 --> 00:14:26.340
<v Michael Kennedy>It seems like from the blog post,

00:14:26.420 --> 00:14:28.180
<v Michael Kennedy>it seems like many vibe coders don't realize

00:14:28.480 --> 00:14:31.140
<v Michael Kennedy>that they don't actually have a community around them.

00:14:31.300 --> 00:14:32.800
<v Michael Kennedy>And I think that that cuts at two things.

00:14:33.060 --> 00:14:40.020
<v Michael Kennedy>One, casting all of this stuff as vibe coders and just junk users who don't really know what they're doing.

00:14:40.680 --> 00:14:42.060
<v Michael Kennedy>That's already kind of a...

00:14:42.080 --> 00:14:46.120
<v Calvin Hendryx-Parker>There's a valid practice of agentic engineering in producing software.

00:14:46.580 --> 00:14:46.740
<v Michael Kennedy>Yes.

00:14:46.850 --> 00:14:54.100
<v Michael Kennedy>And this seems to lump it all in with like, oh, it's a bunch of these idiots that don't know what they're doing and we want them off our community.

00:14:55.320 --> 00:15:00.660
<v Michael Kennedy>Sounds like a bunch of people who were against the stuff two years ago and have never tried it.

00:15:01.360 --> 00:15:03.380
<v Michael Kennedy>don't realize the effect it has.

00:15:03.400 --> 00:15:04.720
<v Michael Kennedy>But so just wrapping this up,

00:15:04.840 --> 00:15:05.480
<v Michael Kennedy>this person says, look,

00:15:05.860 --> 00:15:08.860
<v Michael Kennedy>I have a bunch of solo developer

00:15:09.640 --> 00:15:10.340
<v Michael Kennedy>open source projects.

00:15:10.740 --> 00:15:11.800
<v Michael Kennedy>And my community is people

00:15:11.800 --> 00:15:13.620
<v Michael Kennedy>who just ask for features

00:15:14.160 --> 00:15:15.440
<v Michael Kennedy>or ask me to change something.

00:15:16.060 --> 00:15:16.920
<v Michael Kennedy>They're just people

00:15:16.920 --> 00:15:18.300
<v Michael Kennedy>who want something from the software.

00:15:18.500 --> 00:15:19.720
<v Michael Kennedy>They're not really a community

00:15:19.980 --> 00:15:21.700
<v Michael Kennedy>with rich discussions, right?

00:15:21.940 --> 00:15:22.800
<v Michael Kennedy>And so

00:15:22.800 --> 00:15:24.560
<v Calvin Hendryx-Parker>I agree with this person's take on,

00:15:24.640 --> 00:15:26.740
<v Calvin Hendryx-Parker>like, it's a bunch of little tools

00:15:26.740 --> 00:15:27.920
<v Calvin Hendryx-Parker>that are my tools

00:15:27.920 --> 00:15:29.280
<v Calvin Hendryx-Parker>and I need a good place to host them.

00:15:29.280 --> 00:15:30.319
<v Calvin Hendryx-Parker>And I want to share them

00:15:30.540 --> 00:15:31.440
<v Calvin Hendryx-Parker>with my little community.

00:15:31.860 --> 00:15:32.960
<v Michael Kennedy>Yeah, like I've been publishing

00:15:33.580 --> 00:15:34.560
<v Michael Kennedy>silly little tool for decades.

00:15:35.100 --> 00:15:37.860
<v Michael Kennedy>And that was from even the SourceForge days, right?

00:15:38.420 --> 00:15:40.380
<v Calvin Hendryx-Parker>This is the essence of like open source,

00:15:40.540 --> 00:15:41.600
<v Calvin Hendryx-Parker>the cathedral and the bazaar,

00:15:41.740 --> 00:15:43.340
<v Calvin Hendryx-Parker>like that whole bit.

00:15:43.660 --> 00:15:44.060
<v Calvin Hendryx-Parker>Exactly.

00:15:44.420 --> 00:15:47.460
<v Michael Kennedy>And so one of the reasons CodeBurg is blocking LLMs

00:15:47.600 --> 00:15:49.700
<v Michael Kennedy>is because they think there can't be a community

00:15:49.840 --> 00:15:50.920
<v Michael Kennedy>and therefore it's a fake project.

00:15:51.060 --> 00:15:52.780
<v Michael Kennedy>This guy's like, I got a bunch of projects

00:15:52.880 --> 00:15:53.520
<v Michael Kennedy>that don't have community,

00:15:53.580 --> 00:15:54.400
<v Michael Kennedy>but they're important to me.

00:15:54.940 --> 00:15:56.540
<v Michael Kennedy>And I think that's actually the majority.

00:15:57.780 --> 00:15:59.220
<v Michael Kennedy>This results in censorship for me.

00:15:59.260 --> 00:16:08.540
<v Michael Kennedy>But the same thing is, what if you just charged for the ones or had a very high or very strong rate limit for interactions?

00:16:09.240 --> 00:16:17.560
<v Michael Kennedy>And if your AI does too much to burden our infrastructure, well, then, you know, maybe you cover that or you move them over to a portion of infrastructure that's even slower.

00:16:17.900 --> 00:16:18.460
<v Michael Kennedy>Right. I don't know.

00:16:19.160 --> 00:16:22.180
<v Michael Kennedy>But there's a whole lot of concrete ideas from this.

00:16:22.570 --> 00:16:23.860
<v Michael Kennedy>I regret moving to Kudberg.

00:16:24.940 --> 00:16:25.140
<v Calvin Hendryx-Parker>Anyway.

00:16:25.200 --> 00:16:30.380
<v Calvin Hendryx-Parker>It's amazing that was the first post, like first result for a valid search for their terms of service.

00:16:31.460 --> 00:16:35.340
<v Calvin Hendryx-Parker>I know, that's a strong own goal right there.

00:16:35.360 --> 00:16:36.480
<v Calvin Hendryx-Parker>Speaks volumes right there.

00:16:37.120 --> 00:16:38.660
<v Calvin Hendryx-Parker>Well, the others are going to emerge.

00:16:38.940 --> 00:16:48.020
<v Calvin Hendryx-Parker>Obviously, the fact that we still live in an open world with a fairly open internet, people can build their distributed blockchain DAO version of GitHub if they want.

00:16:48.240 --> 00:16:50.100
<v Michael Kennedy>Well, I'm looking forward to setting up.

00:16:51.000 --> 00:16:52.140
<v Michael Kennedy>We should build on Codeberg.

00:16:54.780 --> 00:16:55.500
<v Michael Kennedy>Oh my gosh.

00:16:55.890 --> 00:16:56.020
<v Michael Kennedy>Okay.

00:16:56.520 --> 00:16:56.920
<v Michael Kennedy>All right, sorry.

00:16:58.020 --> 00:17:00.300
<v Michael Kennedy>That was a bit of a detour.

00:17:01.800 --> 00:17:02.860
<v Michael Kennedy>A fun detour.

00:17:03.160 --> 00:17:06.780
<v Michael Kennedy>But let me tell you about our sponsor, actually.

00:17:07.079 --> 00:17:07.439
<v Calvin Hendryx-Parker>You should.

00:17:07.709 --> 00:17:08.480
<v Calvin Hendryx-Parker>I think this is important.

00:17:09.300 --> 00:17:11.199
<v Michael Kennedy>Yeah, because there's some really cool stuff

00:17:11.620 --> 00:17:14.439
<v Michael Kennedy>that Logfire from Pydantic is doing.

00:17:15.890 --> 00:17:19.240
<v Michael Kennedy>And this is a bit of an alternative worldview,

00:17:19.819 --> 00:17:22.020
<v Michael Kennedy>one that I definitely agree with.

00:17:22.220 --> 00:17:33.940
<v Michael Kennedy>But Logfire is about monitoring and observing and understanding what your AI agents and other web apps like FastAPI and Postgres and so on are up to.

00:17:34.060 --> 00:17:35.640
<v Michael Kennedy>So it's 2 a.m.

00:17:35.950 --> 00:17:37.600
<v Michael Kennedy>Your AI agent has failed.

00:17:38.220 --> 00:17:38.480
<v Michael Kennedy>Why?

00:17:38.800 --> 00:17:40.620
<v Michael Kennedy>Was it the model, a tool called the database?

00:17:41.340 --> 00:17:46.500
<v Michael Kennedy>Most observability tools can't tell you because they only see part of your stack, like your web stack or something.

00:17:46.860 --> 00:17:48.500
<v Michael Kennedy>Pydantic Logfire sees all of it.

00:17:48.760 --> 00:17:51.860
<v Michael Kennedy>One trace across your agents, LLMs, APIs, and database.

00:17:52.480 --> 00:17:55.260
<v Michael Kennedy>Down to the infrastructure, services, Kubernetes, and hosts.

00:17:55.720 --> 00:17:59.720
<v Michael Kennedy>It's built on open telemetry with SDKs for Python, TypeScript, and Rust.

00:18:00.230 --> 00:18:02.880
<v Michael Kennedy>And it works with any OTEL-compatible language.

00:18:03.340 --> 00:18:07.960
<v Michael Kennedy>Every prompt, token count, cost right next to your vector searches and API calls.

00:18:08.320 --> 00:18:12.680
<v Michael Kennedy>You query everything with Postgres-compatible SQL.

00:18:13.320 --> 00:18:18.100
<v Michael Kennedy>And you give that to your coding agent through the Logfire MCP.

00:18:18.420 --> 00:18:21.280
<v Michael Kennedy>So stop guessing, read the trace, Identic Logfire.

00:18:21.600 --> 00:18:24.000
<v Michael Kennedy>AI is still just engineering, as we said.

00:18:24.460 --> 00:18:28.640
<v Michael Kennedy>So visit pythonbytes.fm/Logfire today and sign up.

00:18:28.660 --> 00:18:31.780
<v Michael Kennedy>You'll get 10 million records for free every month, no credit card expired.

00:18:32.700 --> 00:18:34.740
<v Michael Kennedy>And this is a pretty cool thing as well.

00:18:35.100 --> 00:18:38.820
<v Michael Kennedy>I need to add Logfire to my app so that I get this cool feature.

00:18:39.000 --> 00:18:39.480
<v Michael Kennedy>How do you do it?

00:18:39.600 --> 00:18:47.320
<v Michael Kennedy>They have a button that'll copy some markdown text to your clipboard and you click it and it says onboard your coding agent.

00:18:48.000 --> 00:18:54.760
<v Michael Kennedy>So it just gives you instructions you can hand to Claude or Codex specifically what it needs to do to integrate your app with Logfire.

00:18:54.940 --> 00:18:55.920
<v Michael Kennedy>So I think that's super cool.

00:18:56.200 --> 00:19:00.680
<v Michael Kennedy>So thank you to Pydantic and Logfire for supporting the show.

00:19:00.980 --> 00:19:07.120
<v Calvin Hendryx-Parker>Actually, I love the idea of the observability of grabbing the prompts and the costs and the token usage.

00:19:07.540 --> 00:19:10.780
<v Calvin Hendryx-Parker>more folks are going to be heading down this route because it's been very hard to

00:19:11.220 --> 00:19:14.180
<v Calvin Hendryx-Parker>analyze the return on investment of using these tools.

00:19:14.420 --> 00:19:19.120
<v Calvin Hendryx-Parker>And as the costs potentially rise and subscriptions maybe shift and go away,

00:19:19.540 --> 00:19:21.740
<v Calvin Hendryx-Parker>you're going to want to know this kind of data to make good decisions.

00:19:22.020 --> 00:19:23.320
<v Calvin Hendryx-Parker>We're doing this right now at Six Feet Up.

00:19:23.540 --> 00:19:24.200
<v Calvin Hendryx-Parker>Are you? Awesome.

00:19:24.560 --> 00:19:27.000
<v Calvin Hendryx-Parker>Yeah, we're having these kinds of discussions, I should say.

00:19:27.020 --> 00:19:28.380
<v Calvin Hendryx-Parker>And I could probably use a tool like this.

00:19:29.000 --> 00:19:32.600
<v Michael Kennedy>Well, I don't buy Steadafim slash Longfire.

00:19:32.760 --> 00:19:34.040
<v Calvin Hendryx-Parker>Oh, you know, there's a code there.

00:19:34.640 --> 00:19:35.340
<v Calvin Hendryx-Parker>That's a good one for us.

00:19:35.580 --> 00:19:36.140
<v Michael Kennedy>Yeah, fantastic.

00:19:36.620 --> 00:19:36.820
<v Michael Kennedy>All right.

00:19:36.940 --> 00:19:37.920
<v Michael Kennedy>Yeah, it's a super cool platform.

00:19:38.140 --> 00:19:43.240
<v Michael Kennedy>And like I said, right here, just onboard with your code agent, click that, and then paste it.

00:19:43.640 --> 00:19:49.880
<v Michael Kennedy>What's really interesting is that the instructions say things like, your user may have just clicked this and not actually read it yet.

00:19:50.080 --> 00:19:52.860
<v Michael Kennedy>So please work them through this.

00:19:53.500 --> 00:19:54.560
<v Michael Kennedy>Those are some good people.

00:19:56.000 --> 00:19:57.140
<v Calvin Hendryx-Parker>They were doing the good work right there.

00:19:57.440 --> 00:19:59.960
<v Michael Kennedy>Yeah, same thing, a call in a team knows what they're doing over there.

00:20:00.300 --> 00:20:00.680
<v Michael Kennedy>I love it.

00:20:01.260 --> 00:20:01.760
<v Michael Kennedy>So does Brett.

00:20:02.320 --> 00:20:03.460
<v Michael Kennedy>Brett Cannon knows a few things as well.

00:20:03.460 --> 00:20:04.420
<v Michael Kennedy>Brett Cannon does know a few things.

00:20:04.560 --> 00:20:05.360
<v Calvin Hendryx-Parker>Actually, this is important.

00:20:06.260 --> 00:20:11.860
<v Calvin Hendryx-Parker>And again, I feel like the last few episodes, I've been on a bit of a security run with things.

00:20:12.250 --> 00:20:13.320
<v Calvin Hendryx-Parker>And this is continuing it.

00:20:13.330 --> 00:20:14.460
<v Calvin Hendryx-Parker>And he's got some great ideas.

00:20:14.850 --> 00:20:23.360
<v Calvin Hendryx-Parker>When he was writing his nomination post for the 2026 Python Packaging Council nomination or elections,

00:20:23.960 --> 00:20:33.380
<v Calvin Hendryx-Parker>part of his pitch why he should be there is we need a secure supply chain for the Python ecosystems around building reproducible builds.

00:20:33.900 --> 00:20:40.580
<v Calvin Hendryx-Parker>And so right now, we don't have technically reproducible builds on PyPI, but they're not

00:20:40.760 --> 00:20:41.120
<v Calvin Hendryx-Parker>far away.

00:20:41.580 --> 00:20:48.080
<v Calvin Hendryx-Parker>There's like he identified three gaps in the current process to get us to a point where

00:20:48.110 --> 00:20:51.820
<v Calvin Hendryx-Parker>we have basically the good design goal for him is zero friction.

00:20:52.520 --> 00:20:54.360
<v Calvin Hendryx-Parker>Can producers upload something to PyPI?

00:20:54.780 --> 00:20:56.000
<v Calvin Hendryx-Parker>They shouldn't have to do anything.

00:20:56.550 --> 00:21:02.960
<v Calvin Hendryx-Parker>And all the work lands on the build backends and installers to track and trace and allow

00:21:02.980 --> 00:21:08.260
<v Calvin Hendryx-Parker>you to know where your software came from that you're installing. We all are aware of the

00:21:09.700 --> 00:21:15.480
<v Calvin Hendryx-Parker>LiteLLM exploit that happened back in March. And part of that was because of a supply chain

00:21:16.160 --> 00:21:22.000
<v Calvin Hendryx-Parker>injections into the build process. The other one here is like he mentioned SolarWinds,

00:21:22.240 --> 00:21:27.240
<v Calvin Hendryx-Parker>that SolarWinds attack from a few years back. Again, a supply chain injection during the build process.

00:21:27.680 --> 00:21:32.320
<v Calvin Hendryx-Parker>So gap number one is nothing right now records the source code, where the source code distribution

00:21:32.340 --> 00:21:37.600
<v Calvin Hendryx-Parker>came from so if you add in a json descriptor it can capture you know when you install it where

00:21:37.640 --> 00:21:44.160
<v Calvin Hendryx-Parker>it's from what get repo is the canonical source of truth for that code and it's something that'd be

00:21:44.170 --> 00:21:48.200
<v Calvin Hendryx-Parker>very important for you to know if you're going to go back through and do an audit of the tools

00:21:48.340 --> 00:21:52.580
<v Michael Kennedy>or the code and dependencies that you have into your build process interesting so you might

00:21:52.590 --> 00:21:58.720
<v Michael Kennedy>be able to have a another tier of trust than just it's on pypi but yeah yeah here's how it's built

00:21:58.740 --> 00:22:04.440
<v Calvin Hendryx-Parker>Yeah, exactly. And if you combine those with the PyPI two-factor and security measures that they've

00:22:04.520 --> 00:22:08.120
<v Calvin Hendryx-Parker>been putting in place, this gives you a little more comfort with where something came from.

00:22:08.860 --> 00:22:13.320
<v Calvin Hendryx-Parker>Gap number two is during the build, in the build tools and during the build process,

00:22:14.220 --> 00:22:21.420
<v Calvin Hendryx-Parker>having a software bill of materials. So referred to as an SBOM. We can do this with PEP 770

00:22:22.200 --> 00:22:27.120
<v Calvin Hendryx-Parker>has a convention for this. Software distributions can't because there are tarball plus like some

00:22:27.140 --> 00:22:32.180
<v Calvin Hendryx-Parker>package info stuff. So if you have a wheel, you can basically enable this already. So the first

00:22:32.180 --> 00:22:37.620
<v Calvin Hendryx-Parker>two things, very little friction. A file that describes where your GitHub repository is. The

00:22:37.720 --> 00:22:44.540
<v Calvin Hendryx-Parker>second one is using wheels and PEP 770 to have software build materials in there. So either don't

00:22:44.540 --> 00:22:54.100
<v Calvin Hendryx-Parker>use SDIS or move to the SDIS V2 support for this. And then basically the mechanisms already exist

00:22:54.120 --> 00:22:57.740
<v Calvin Hendryx-Parker>for tying this all together in the pyproject.toml.

00:22:58.000 --> 00:22:59.440
<v Calvin Hendryx-Parker>There's a build system section.

00:23:00.140 --> 00:23:01.620
<v Calvin Hendryx-Parker>If it has a defined entry point,

00:23:01.830 --> 00:23:03.800
<v Calvin Hendryx-Parker>so then backends can record their own environment

00:23:04.200 --> 00:23:06.260
<v Calvin Hendryx-Parker>and you can reinstall and rerun the build.

00:23:06.350 --> 00:23:09.080
<v Calvin Hendryx-Parker>So the goal being, again, if I build the software today

00:23:09.510 --> 00:23:11.480
<v Calvin Hendryx-Parker>and if I build the software six months from now

00:23:11.760 --> 00:23:12.740
<v Calvin Hendryx-Parker>or 18 months from now,

00:23:13.010 --> 00:23:15.400
<v Calvin Hendryx-Parker>I should get the exact same binary each time

00:23:15.880 --> 00:23:17.100
<v Calvin Hendryx-Parker>and there should be no worry

00:23:17.220 --> 00:23:19.620
<v Calvin Hendryx-Parker>or at least a way to audit and trace back what happens.

00:23:20.060 --> 00:23:21.900
<v Calvin Hendryx-Parker>So now trusted third parties can report

00:23:21.920 --> 00:23:27.600
<v Calvin Hendryx-Parker>successful reproductions back to PyPI, which can display like an independently reproduced by

00:23:28.320 --> 00:23:32.820
<v Calvin Hendryx-Parker>some authority surfaced in the index. So installers can also prefer reproduced files.

00:23:33.360 --> 00:23:37.820
<v Calvin Hendryx-Parker>So PyPI would have to have a couple of changes to support surfacing this data and making

00:23:38.080 --> 00:23:42.920
<v Calvin Hendryx-Parker>decisions based on that data. This is not a nice to have. This is definitely, it's not a requirement.

00:23:43.120 --> 00:23:48.480
<v Calvin Hendryx-Parker>This is basically like you need to have this as part of your build process or else you're not

00:23:48.500 --> 00:23:54.500
<v Calvin Hendryx-Parker>considered a top level or a first class citizen in PyPI because it shouldn't be hard to do.

00:23:55.280 --> 00:23:58.860
<v Michael Kennedy>One of the things about the reproducibility that you hinched on right there at the end,

00:23:58.860 --> 00:24:04.300
<v Michael Kennedy>I think is cool. I look at, say, the hash or whatever of the binary that I got. And then

00:24:04.700 --> 00:24:09.480
<v Michael Kennedy>if I want to rebuild that myself, I should get the same hash if I follow the steps or something

00:24:09.640 --> 00:24:14.120
<v Michael Kennedy>like that, right? Which is super cool. Yeah. But so many things can be very variable. I mean,

00:24:14.280 --> 00:24:17.200
<v Calvin Hendryx-Parker>the GCC compiler on your system,

00:24:17.920 --> 00:24:19.360
<v Calvin Hendryx-Parker>the minor versions of Python,

00:24:19.860 --> 00:24:23.140
<v Calvin Hendryx-Parker>the architecture, whether it was ARM or x86.

00:24:23.560 --> 00:24:25.600
<v Calvin Hendryx-Parker>There's a whole bunch of variables that go on in there.

00:24:26.020 --> 00:24:28.020
<v Calvin Hendryx-Parker>It'd be nice to be able to get those from a trusted source.

00:24:28.300 --> 00:24:31.600
<v Calvin Hendryx-Parker>And PyPI is obviously doing great work

00:24:31.780 --> 00:24:34.620
<v Calvin Hendryx-Parker>at making sure we get safe wheels

00:24:35.060 --> 00:24:36.220
<v Calvin Hendryx-Parker>and distributions of software.

00:24:36.560 --> 00:24:39.060
<v Michael Kennedy>Yeah, definitely some great folks,

00:24:39.660 --> 00:24:40.780
<v Michael Kennedy>including Seth and Mike,

00:24:41.480 --> 00:24:42.600
<v Calvin Hendryx-Parker>over there working on this.

00:24:42.740 --> 00:24:47.100
<v Calvin Hendryx-Parker>Well, and thanks to Seth Larson for listening to his idea and helping him check over this blog post.

00:24:47.200 --> 00:24:49.160
<v Calvin Hendryx-Parker>So the right folks are involved all around.

00:24:50.010 --> 00:24:53.860
<v Calvin Hendryx-Parker>That Python Packaging Council nomination, I think the voting is happening soon.

00:24:53.860 --> 00:25:00.440
<v Calvin Hendryx-Parker>I didn't actually note down when it is, but I can't imagine why we wouldn't want Brett to be on that panel of people.

00:25:00.860 --> 00:25:01.240
<v Calvin Hendryx-Parker>Exactly.

00:25:01.780 --> 00:25:02.560
<v Calvin Hendryx-Parker>He's got the right ideas.

00:25:02.820 --> 00:25:03.360
<v Calvin Hendryx-Parker>I'm all for this.

00:25:04.260 --> 00:25:11.600
<v Calvin Hendryx-Parker>Just because to keep the world safe, we need to have these kinds of table stick ideas built into our infrastructure of Python

00:25:11.620 --> 00:25:12.840
<v Michael Kennedy>and the build systems.

00:25:13.310 --> 00:25:14.700
<v Michael Kennedy>Yeah, and Brett's been working in packaging

00:25:15.800 --> 00:25:18.340
<v Michael Kennedy>and package adjacent stuff for a long time recently.

00:25:18.550 --> 00:25:19.920
<v Calvin Hendryx-Parker>Yeah, so go enable these features.

00:25:20.720 --> 00:25:22.760
<v Calvin Hendryx-Parker>You'll start participating in the ecosystem

00:25:23.480 --> 00:25:25.140
<v Calvin Hendryx-Parker>and then eventually PyPI will support it

00:25:25.480 --> 00:25:27.640
<v Calvin Hendryx-Parker>and you'll be able to know that the software you're getting

00:25:28.160 --> 00:25:29.900
<v Calvin Hendryx-Parker>has come from verified sources.

00:25:30.620 --> 00:25:32.460
<v Calvin Hendryx-Parker>Maybe that's an extreme, not verified sources,

00:25:32.550 --> 00:25:34.400
<v Calvin Hendryx-Parker>but at least the build can be reproduced.

00:25:35.240 --> 00:25:35.680
<v Calvin Hendryx-Parker>Yeah.

00:25:36.060 --> 00:25:36.480
<v Calvin Hendryx-Parker>Verifiable.

00:25:38.020 --> 00:25:39.440
<v Calvin Hendryx-Parker>Verifiable, not verified.

00:25:40.580 --> 00:25:41.100
<v Calvin Hendryx-Parker>Subtle difference.

00:25:41.720 --> 00:25:50.840
<v Michael Kennedy>yeah okay so now moving moving on we have a extra extra extra here all about it a whole

00:25:51.200 --> 00:25:56.540
<v Michael Kennedy>section of extras well this is when there are so many extras that i'm like this can no longer be

00:25:56.720 --> 00:26:04.560
<v Michael Kennedy>extra it must be hoisted up into a top level topic all right and i don't know i've got a sidebar full

00:26:04.700 --> 00:26:08.179
<v Calvin Hendryx-Parker>of them so let's see i got questions about one of these here for sure all right let's go well

00:26:08.340 --> 00:26:13.960
<v Michael Kennedy>You talked about the security fixes of like 3.11 and so on, 3.11.6 and beyond.

00:26:14.500 --> 00:26:15.540
<v Michael Kennedy>We also got a new...

00:26:15.540 --> 00:26:15.800
<v Calvin Hendryx-Parker>They are.

00:26:16.180 --> 00:26:18.180
<v Calvin Hendryx-Parker>Some of them have landed in 3.14.

00:26:18.620 --> 00:26:18.800
<v Michael Kennedy>Yeah.

00:26:18.960 --> 00:26:21.220
<v Michael Kennedy>So 3.14.7 is out.

00:26:21.460 --> 00:26:25.960
<v Michael Kennedy>And sometimes these are like, we've changed some minor setting or whatever.

00:26:26.220 --> 00:26:28.480
<v Michael Kennedy>This is a proper release of Python.

00:26:28.960 --> 00:26:34.220
<v Michael Kennedy>And I know it's mid-August and in a month and a half, we're going to have 3.15, which is

00:26:34.260 --> 00:26:34.820
<v Michael Kennedy>very exciting.

00:26:35.200 --> 00:26:37.500
<v Michael Kennedy>But there's a couple interesting takeaways here.

00:26:37.780 --> 00:26:39.860
<v Michael Kennedy>Plus, you should just install this.

00:26:39.970 --> 00:26:42.860
<v Michael Kennedy>So under security, it doesn't fit on my screen,

00:26:43.290 --> 00:26:45.720
<v Michael Kennedy>the number of single sentence things fixed.

00:26:46.140 --> 00:26:48.360
<v Michael Kennedy>So that alone tells you maybe we should pay attention.

00:26:48.580 --> 00:26:50.160
<v Michael Kennedy>So like here, for example, the one you talked about,

00:26:50.340 --> 00:26:53.160
<v Michael Kennedy>GitHub 15987, the tarball extract.

00:26:53.470 --> 00:26:55.000
<v Michael Kennedy>And then there's another one somewhere in here,

00:26:55.110 --> 00:26:58.740
<v Michael Kennedy>like this is the workaround of that fix, also fixed.

00:27:00.920 --> 00:27:04.600
<v Michael Kennedy>But there's some denial of service-ish things

00:27:04.620 --> 00:27:09.500
<v Michael Kennedy>like element tree find all from XML parsing

00:27:09.500 --> 00:27:12.580
<v Michael Kennedy>or even web page parsing has quadratic behavior

00:27:12.760 --> 00:27:14.360
<v Michael Kennedy>if you give it certain types of inputs.

00:27:14.740 --> 00:27:16.340
<v Michael Kennedy>And that means you could create

00:27:16.580 --> 00:27:19.020
<v Michael Kennedy>like a element tree find all bomb type of thing.

00:27:19.300 --> 00:27:22.880
<v Michael Kennedy>So there's a bunch of this complexity stuff here.

00:27:23.260 --> 00:27:24.540
<v Michael Kennedy>But this is also a proper release.

00:27:24.820 --> 00:27:27.720
<v Michael Kennedy>So I'm going to scroll at a high rate

00:27:27.920 --> 00:27:29.660
<v Michael Kennedy>the entire time that I'm talking.

00:27:30.020 --> 00:27:32.560
<v Michael Kennedy>And it is way still going on.

00:27:32.660 --> 00:27:36.600
<v Michael Kennedy>This is all core Python internals, not even the standard library.

00:27:37.120 --> 00:27:37.480
<v Michael Kennedy>Ooh, okay.

00:27:37.760 --> 00:27:41.820
<v Michael Kennedy>And then, now maybe that was a standard library as well, but also build and then Windows and Mac.

00:27:41.940 --> 00:27:44.920
<v Michael Kennedy>I mean, there are pages and pages and pages of changes here.

00:27:45.220 --> 00:27:48.180
<v Michael Kennedy>And if you go up one, like I said, there's an interesting theme.

00:27:48.320 --> 00:27:51.200
<v Michael Kennedy>So if you look at free, free threaded.

00:27:51.600 --> 00:27:51.720
<v Michael Kennedy>Yep.

00:27:52.020 --> 00:27:52.260
<v Michael Kennedy>Oh, wow.

00:27:52.260 --> 00:27:56.660
<v Michael Kennedy>This is one of the, I mean, it is lighting up the find section.

00:27:56.980 --> 00:28:01.880
<v Michael Kennedy>Yeah, the little scroll bar highlight that shows where the find lands.

00:28:02.260 --> 00:28:05.280
<v Michael Kennedy>There are so many race conditions that are getting fixed.

00:28:05.440 --> 00:28:07.960
<v Michael Kennedy>This is just something Python has not really had to deal with.

00:28:08.280 --> 00:28:10.200
<v Michael Kennedy>And I don't know how I feel about this, Calvin.

00:28:10.340 --> 00:28:13.400
<v Michael Kennedy>I'm very excited about free-threaded, but there's this many fixes now.

00:28:13.880 --> 00:28:19.520
<v Calvin Hendryx-Parker>They should have skipped the.7 and made it.15, like 3.14,.15.

00:28:20.120 --> 00:28:20.820
<v Calvin Hendryx-Parker>I know.

00:28:21.780 --> 00:28:24.400
<v Michael Kennedy>It's the lead-in to 3.15 or whatever, right?

00:28:24.660 --> 00:28:24.920
<v Calvin Hendryx-Parker>Yeah.

00:28:25.240 --> 00:28:28.800
<v Michael Kennedy>Yeah, but in the core built-ins, there's just tons of, like,

00:28:29.400 --> 00:28:32.360
<v Michael Kennedy>Fix the data race condition and free-threaded build of gc.gen count.

00:28:33.060 --> 00:28:37.180
<v Michael Kennedy>Fix the potential deadlock on intern from string and other functions on the free-threaded build.

00:28:37.800 --> 00:28:43.040
<v Michael Kennedy>And so if you're doing stuff with free-threaded, you definitely want to go through this.

00:28:43.040 --> 00:28:50.480
<v Calvin Hendryx-Parker>I hope some folks who've been posting blog posts around free-threading go redo their benchmarks against this release to see how that has changed.

00:28:50.880 --> 00:28:51.780
<v Calvin Hendryx-Parker>Yeah, 100%.

00:28:52.220 --> 00:28:53.440
<v Michael Kennedy>Okay, well, that was one of them.

00:28:53.640 --> 00:28:54.060
<v Michael Kennedy>That's a lot.

00:28:54.130 --> 00:28:54.380
<v Michael Kennedy>I know.

00:28:54.510 --> 00:28:55.500
<v Michael Kennedy>That was just one of the things.

00:28:56.000 --> 00:28:57.580
<v Michael Kennedy>Remember you gave me homework last time?

00:28:57.780 --> 00:29:03.600
<v Michael Kennedy>I'm like, oh, I just, I literally just added the MCP server for Python bytes.

00:29:04.040 --> 00:29:06.800
<v Michael Kennedy>And you said, oh, Michael, that'll hold that protocol is out of date.

00:29:06.800 --> 00:29:07.100
<v Michael Kennedy>You got it.

00:29:07.240 --> 00:29:07.860
<v Michael Kennedy>There's a new one.

00:29:08.080 --> 00:29:08.600
<v Michael Kennedy>I'm like, no.

00:29:09.960 --> 00:29:11.260
<v Michael Kennedy>Well, I upgraded it.

00:29:12.050 --> 00:29:16.500
<v Michael Kennedy>So Python bytes, it's MCP server, which only existed last week.

00:29:16.940 --> 00:29:19.960
<v Michael Kennedy>Now uses the, let me see if I get this from memory.

00:29:22.360 --> 00:29:26.740
<v Michael Kennedy>2026.0728 version two protocol, which is more stateless.

00:29:27.160 --> 00:29:29.140
<v Michael Kennedy>So it's backwards compatible with the old ones,

00:29:29.320 --> 00:29:31.220
<v Michael Kennedy>and it now adopts the new one.

00:29:31.390 --> 00:29:32.280
<v Michael Kennedy>So that's pretty cool.

00:29:32.760 --> 00:29:33.960
<v Michael Kennedy>And also for Talk Python,

00:29:34.440 --> 00:29:36.820
<v Michael Kennedy>they were basically a similar update there.

00:29:37.160 --> 00:29:38.520
<v Calvin Hendryx-Parker>So how long did that take you?

00:29:39.000 --> 00:29:41.120
<v Calvin Hendryx-Parker>I mean, were you able to just point the clankers at it

00:29:41.130 --> 00:29:41.760
<v Calvin Hendryx-Parker>and say go?

00:29:42.160 --> 00:29:44.720
<v Michael Kennedy>The clankers grinded for a while to probably an hour.

00:29:45.040 --> 00:29:45.860
<v Michael Kennedy>Yeah, probably took an hour.

00:29:46.000 --> 00:29:48.140
<v Michael Kennedy>It was a pretty significant amount of turn.

00:29:48.360 --> 00:29:49.700
<v Michael Kennedy>But no worries, I got it done.

00:29:50.040 --> 00:29:50.160
<v Michael Kennedy>Nice.

00:29:50.380 --> 00:29:52.900
<v Michael Kennedy>You know, if I had run on Fast MCP,

00:29:53.060 --> 00:29:56.320
<v Michael Kennedy>which is now just MCP server, I believe,

00:29:56.900 --> 00:30:00.700
<v Michael Kennedy>is the name of the project now, probably would have been better, even though there were breaking

00:30:00.900 --> 00:30:07.460
<v Michael Kennedy>changes. But this is integral. It's just a part of the Quart Flask app that are these websites.

00:30:08.060 --> 00:30:11.700
<v Michael Kennedy>And so it had a little more low-level stuff. But at the same time, it wasn't. I mean,

00:30:11.880 --> 00:30:17.760
<v Michael Kennedy>my active time was probably 15 minutes. But I had to verify and check. And so, oh, let me go over

00:30:17.760 --> 00:30:21.680
<v Calvin Hendryx-Parker>to Claude and ask it if it still knows how to talk to it. Think of the scale you can handle now.

00:30:22.000 --> 00:30:25.300
<v Calvin Hendryx-Parker>I mean, people can just hammer your MCP service now.

00:30:25.540 --> 00:30:26.040
<v Michael Kennedy>I know.

00:30:26.200 --> 00:30:26.760
<v Michael Kennedy>It's so stateless.

00:30:26.850 --> 00:30:28.620
<v Michael Kennedy>They can just ask it questions all day long.

00:30:28.970 --> 00:30:29.540
<v Michael Kennedy>All day long.

00:30:30.440 --> 00:30:32.060
<v Michael Kennedy>And in principle, I don't really mind.

00:30:32.380 --> 00:30:38.060
<v Michael Kennedy>I mean, I'm not inviting to not to do this amount of service because I do get that sometimes

00:30:38.150 --> 00:30:38.840
<v Michael Kennedy>and it's not fun.

00:30:39.260 --> 00:30:42.480
<v Michael Kennedy>But it is all the database backed indexed queries.

00:30:42.630 --> 00:30:45.680
<v Michael Kennedy>So it is like sub millisecond usually when you ask questions like this.

00:30:45.820 --> 00:30:47.080
<v Michael Kennedy>So it's pretty cool.

00:30:47.400 --> 00:30:47.660
<v Michael Kennedy>All right.

00:30:48.340 --> 00:30:48.420
<v Michael Kennedy>Yeah.

00:30:48.780 --> 00:30:50.120
<v Michael Kennedy>Remember we talked about AgentsView.

00:30:50.360 --> 00:30:51.880
<v Michael Kennedy>I believe you brought this up.

00:30:51.980 --> 00:31:03.900
<v Michael Kennedy>And I'm like, all right, so crazy that on my M5 Pro MacBook Pro, I see some portion of my work and projects reported.

00:31:04.020 --> 00:31:09.840
<v Michael Kennedy>And then I go to my mini and I see some other portion, the complement of my work reported.

00:31:10.000 --> 00:31:15.060
<v Michael Kennedy>And then I'm like, well, I finally set up Postgres Sync, which is really cool.

00:31:15.060 --> 00:31:19.940
<v Michael Kennedy>So if you set up this Postgres Sync thing, you just get a web page that you can host.

00:31:20.140 --> 00:31:23.080
<v Michael Kennedy>I'm hosting it on Tailscale, super private behind all my stuff.

00:31:23.480 --> 00:31:23.640
<v Calvin Hendryx-Parker>Nice.

00:31:23.910 --> 00:31:26.260
<v Michael Kennedy>And then that gives you a unified view.

00:31:26.900 --> 00:31:30.520
<v Michael Kennedy>There's just a little daemon sort of thing that runs on each machine that just, you know,

00:31:30.740 --> 00:31:32.380
<v Michael Kennedy>normally it's running on SQLite.

00:31:32.470 --> 00:31:34.600
<v Michael Kennedy>It just looks at SQLite, goes, what's changed?

00:31:34.600 --> 00:31:41.100
<v Michael Kennedy>And it just pushes those changes and merges them on a Postgres thing that's running in Docker on my mini behind Tailscale.

00:31:41.400 --> 00:31:47.040
<v Calvin Hendryx-Parker>I have a question for you on that because we're using agents view a little more to help with that analysis

00:31:47.300 --> 00:31:48.880
<v Calvin Hendryx-Parker>and looking at our users and models.

00:31:49.300 --> 00:31:54.000
<v Calvin Hendryx-Parker>The Postgres sync, could you have multiple users push into it?

00:31:54.360 --> 00:31:55.640
<v Calvin Hendryx-Parker>Because that's exactly what I think I want to do.

00:31:55.970 --> 00:31:59.520
<v Michael Kennedy>The one thing to be a little careful of, and I kind of would like to just say,

00:31:59.730 --> 00:32:05.900
<v Michael Kennedy>could we just not put this data here at all, is it syncs the actual chat conversation, the chat log.

00:32:06.140 --> 00:32:06.540
<v Calvin Hendryx-Parker>The sessions.

00:32:06.800 --> 00:32:10.340
<v Calvin Hendryx-Parker>Because you're getting the full fidelity of the agent's view, but in a centralized spot.

00:32:10.840 --> 00:32:13.780
<v Michael Kennedy>Yeah, I mean, it is cool that you can go and do things like hit command K

00:32:14.030 --> 00:32:18.300
<v Michael Kennedy>and then do vector and semantic search across your work.

00:32:18.540 --> 00:32:21.380
<v Michael Kennedy>But at the same time, the more people send in stuff in,

00:32:22.300 --> 00:32:24.780
<v Michael Kennedy>it's plausible that you could write another script

00:32:25.010 --> 00:32:26.080
<v Michael Kennedy>that just deletes that data.

00:32:26.410 --> 00:32:26.500
<v Calvin Hendryx-Parker>Yeah.

00:32:26.880 --> 00:32:29.260
<v Michael Kennedy>After, right, like just goes and just zeroes it out

00:32:29.400 --> 00:32:31.980
<v Michael Kennedy>because there's actually zero words in this,

00:32:32.110 --> 00:32:34.020
<v Michael Kennedy>even though the token count was recorded and so on.

00:32:34.280 --> 00:32:35.900
<v Michael Kennedy>I haven't tried that, but possible.

00:32:36.320 --> 00:32:37.480
<v Calvin Hendryx-Parker>I like the fact you can do like,

00:32:37.760 --> 00:32:39.620
<v Calvin Hendryx-Parker>I guess it even mentions their team dashboard.

00:32:40.240 --> 00:32:40.520
<v Michael Kennedy>Yeah, exactly.

00:32:41.040 --> 00:32:42.560
<v Michael Kennedy>And I am a team of one for this,

00:32:42.800 --> 00:32:45.420
<v Michael Kennedy>but I'm still working in two places and I need it

00:32:45.480 --> 00:32:46.620
<v Michael Kennedy>because otherwise it doesn't work.

00:32:46.780 --> 00:32:47.260
<v Calvin Hendryx-Parker>Yeah, yep.

00:32:47.520 --> 00:32:47.980
<v Calvin Hendryx-Parker>I've got the same.

00:32:48.300 --> 00:32:48.860
<v Calvin Hendryx-Parker>I'm going to set that up.

00:32:49.120 --> 00:32:49.240
<v Michael Kennedy>All right.

00:32:49.480 --> 00:32:50.740
<v Michael Kennedy>Let's carry on this order.

00:32:50.960 --> 00:32:53.100
<v Michael Kennedy>Like I said, this is why this had to be promoted.

00:32:54.700 --> 00:32:55.260
<v Michael Kennedy>Brian Okken.

00:32:55.660 --> 00:32:56.000
<v Michael Kennedy>Hey, Brian.

00:32:56.420 --> 00:32:56.980
<v Michael Kennedy>Hey, Brian.

00:32:57.440 --> 00:33:03.820
<v Michael Kennedy>He had talked over last year on the show about working on Lean TDD, TDD Without the Waste,

00:33:03.860 --> 00:33:04.740
<v Michael Kennedy>and sort of redoing that.

00:33:05.280 --> 00:33:08.580
<v Michael Kennedy>And he has just released the Audible version.

00:33:08.820 --> 00:33:09.400
<v Michael Kennedy>How cool is this?

00:33:09.760 --> 00:33:10.360
<v Calvin Hendryx-Parker>I like that.

00:33:10.700 --> 00:33:12.220
<v Calvin Hendryx-Parker>And it's him narrating it, too.

00:33:12.500 --> 00:33:17.340
<v Calvin Hendryx-Parker>So if you missed Brian's voice from this podcast, you can go over and listen to him read the

00:33:17.360 --> 00:33:17.980
<v Michael Kennedy>whole book to you.

00:33:18.240 --> 00:33:18.940
<v Michael Kennedy>It's pretty wild.

00:33:19.060 --> 00:33:20.180
<v Michael Kennedy>Like, this is audible.

00:33:21.220 --> 00:33:22.220
<v Michael Kennedy>And it's Brian.

00:33:22.920 --> 00:33:23.500
<v Michael Kennedy>Yeah, it is Brian.

00:33:23.820 --> 00:33:25.040
<v Michael Kennedy>And he did a really good job.

00:33:25.040 --> 00:33:27.120
<v Michael Kennedy>It sounds, you know, professional and great.

00:33:27.220 --> 00:33:28.400
<v Michael Kennedy>And I very much like it.

00:33:28.500 --> 00:33:30.580
<v Michael Kennedy>And I know that when he was working on this book,

00:33:30.900 --> 00:33:34.720
<v Michael Kennedy>one of his goals was to not make it too overburdened with code samples

00:33:35.400 --> 00:33:38.600
<v Michael Kennedy>such that it could be an audio book that is actually worth listening to.

00:33:38.780 --> 00:33:40.480
<v Michael Kennedy>So link into that and check that out.

00:33:41.120 --> 00:33:41.680
<v Michael Kennedy>Two more things.

00:33:41.760 --> 00:33:44.000
<v Michael Kennedy>These have to do with Talk Python courses.

00:33:44.560 --> 00:33:50.300
<v Michael Kennedy>So I talked to someone recently who wanted to take a course from Talk Python.

00:33:50.780 --> 00:33:52.980
<v Michael Kennedy>And they said, well, this is really great.

00:33:53.100 --> 00:33:55.060
<v Michael Kennedy>And this is exactly what I want to take.

00:33:55.320 --> 00:33:57.880
<v Michael Kennedy>But it turns out our company, our organization,

00:33:58.460 --> 00:34:02.320
<v Michael Kennedy>has some subscription to some other junkier Python training thing

00:34:02.420 --> 00:34:03.320
<v Michael Kennedy>that I don't want to use.

00:34:03.680 --> 00:34:06.360
<v Michael Kennedy>But they said if they're going to cover it, I have to use their Python thing,

00:34:06.760 --> 00:34:10.300
<v Michael Kennedy>not some other random internet thing that who knows what it is, right?

00:34:10.600 --> 00:34:12.520
<v Michael Kennedy>So I thought, well, that's not right.

00:34:13.399 --> 00:34:18.379
<v Michael Kennedy>Shouldn't people be able to, you know, if you're a company, get a sense of this is a good thing for your company.

00:34:18.460 --> 00:34:22.480
<v Michael Kennedy>So if you work for especially a large company, this falls into that category.

00:34:22.919 --> 00:34:27.980
<v Michael Kennedy>I have a program that I set up for you called a free Python training evaluation for teams.

00:34:28.500 --> 00:34:37.139
<v Michael Kennedy>So what it is, is for up to 15 people, they get complete free access to one of the, pick one, one of the Talk Python 60 courses.

00:34:37.780 --> 00:34:38.879
<v Michael Kennedy>And then you can go through it.

00:34:39.360 --> 00:34:43.100
<v Michael Kennedy>And then that team can report back like, hey, was this worth doing?

00:34:43.300 --> 00:34:47.260
<v Michael Kennedy>We maybe bring Talk Python as a vendor into your company.

00:34:47.770 --> 00:34:52.460
<v Michael Kennedy>You get a really nice dashboard of how all your students are doing,

00:34:52.810 --> 00:34:53.520
<v Michael Kennedy>going through the course.

00:34:53.919 --> 00:34:56.419
<v Michael Kennedy>And yeah, so who's redeemed the seats?

00:34:56.820 --> 00:34:57.540
<v Michael Kennedy>Are they finished?

00:34:58.020 --> 00:35:00.060
<v Michael Kennedy>Like all that kind of stuff.

00:35:00.170 --> 00:35:02.000
<v Michael Kennedy>You can download updates and so on.

00:35:02.140 --> 00:35:03.260
<v Michael Kennedy>No MCP server though.

00:35:04.320 --> 00:35:04.720
<v Michael Kennedy>Not for this.

00:35:05.380 --> 00:35:05.820
<v Michael Kennedy>Not for this.

00:35:05.900 --> 00:35:08.260
<v Michael Kennedy>But you could download the CSV and then go to town on it, right?

00:35:08.540 --> 00:35:12.460
<v Michael Kennedy>So everybody gets basically free access to the course, mobile apps, all that.

00:35:12.540 --> 00:35:24.160
<v Michael Kennedy>So if you work for a team, if I work for a large company and you have a team there and there's like a lot of restrictions on what training options are available, please reach out to me, Michael at talkpython.fm.

00:35:24.800 --> 00:35:25.520
<v Michael Kennedy>Let's set one of these up.

00:35:25.630 --> 00:35:27.620
<v Michael Kennedy>It costs you nothing to try it out.

00:35:27.860 --> 00:35:29.600
<v Calvin Hendryx-Parker>Get the name brand training.

00:35:30.070 --> 00:35:30.180
<v Michael Kennedy>Exactly.

00:35:30.640 --> 00:35:32.400
<v Calvin Hendryx-Parker>Not the generic lookalike.

00:35:33.080 --> 00:35:33.440
<v Michael Kennedy>Exactly.

00:35:33.610 --> 00:35:37.460
<v Michael Kennedy>Not the generic where you've got to press play every single video and navigate around.

00:35:37.600 --> 00:35:37.820
<v Michael Kennedy>Not good.

00:35:38.420 --> 00:35:44.500
<v Michael Kennedy>And related to that, I've also set up a government procurement page that gives all...

00:35:44.500 --> 00:35:45.180
<v Michael Kennedy>Wow, you're fancy.

00:35:45.520 --> 00:35:46.060
<v Michael Kennedy>That's really fancy.

00:35:46.290 --> 00:35:51.340
<v Michael Kennedy>It existed before, but it wasn't on a page where people knew that they could get it.

00:35:51.560 --> 00:35:55.320
<v Michael Kennedy>So it lists our sam.gov unique ID.

00:35:55.510 --> 00:35:59.740
<v Michael Kennedy>So if you work for a government entity, there's all these rules like, oh, it has to be registered with this thing.

00:35:59.830 --> 00:36:00.740
<v Michael Kennedy>And it has to be active.

00:36:00.830 --> 00:36:04.400
<v Michael Kennedy>And you have to have a 508 report on your accessibility, et cetera, et cetera.

00:36:04.960 --> 00:36:05.960
<v Michael Kennedy>I put all that stuff up here.

00:36:06.100 --> 00:36:11.240
<v Michael Kennedy>So if you work for a government and you would like a governmental agency, especially the U.S., please check it out.

00:36:11.900 --> 00:36:13.220
<v Michael Kennedy>This all makes it super easy.

00:36:13.320 --> 00:36:16.060
<v Michael Kennedy>You probably have to address this kind of stuff some of the time.

00:36:16.280 --> 00:36:18.780
<v Calvin Hendryx-Parker>It looks like you put a lot of work into this, and it shows.

00:36:19.100 --> 00:36:19.400
<v Calvin Hendryx-Parker>Thank you.

00:36:19.400 --> 00:36:19.660
<v Calvin Hendryx-Parker>It's amazing.

00:36:20.020 --> 00:36:20.220
<v Michael Kennedy>Thank you.

00:36:20.280 --> 00:36:20.560
<v Michael Kennedy>Thank you.

00:36:20.780 --> 00:36:20.940
<v Michael Kennedy>All right.

00:36:21.040 --> 00:36:22.900
<v Michael Kennedy>Well, those were many extras.

00:36:23.320 --> 00:36:24.480
<v Michael Kennedy>Those were many, many extras.

00:36:24.859 --> 00:36:26.140
<v Michael Kennedy>We are done with the extras.

00:36:26.320 --> 00:36:31.640
<v Calvin Hendryx-Parker>I've got one extra, which is a follow-up to last week's episode around the post-quantum key exchange.

00:36:32.240 --> 00:36:35.380
<v Calvin Hendryx-Parker>And the fine folks over at Astral have made a new release of uv.

00:36:36.240 --> 00:36:37.660
<v Calvin Hendryx-Parker>That's what it was like five days ago.

00:36:38.160 --> 00:36:42.000
<v Calvin Hendryx-Parker>And it now supports and prefers post-quantum key exchange.

00:36:42.540 --> 00:36:44.160
<v Calvin Hendryx-Parker>So they've already got your back.

00:36:45.220 --> 00:36:48.320
<v Calvin Hendryx-Parker>You can opt in to TLS diagnostics,

00:36:48.920 --> 00:36:51.760
<v Calvin Hendryx-Parker>but you're going to get post-quantum key exchange out of the box

00:36:52.110 --> 00:36:53.040
<v Calvin Hendryx-Parker>when you're using uv node.

00:36:53.470 --> 00:36:54.240
<v Calvin Hendryx-Parker>So I thought that was pretty cool.

00:36:54.420 --> 00:36:54.940
<v Michael Kennedy>You know what?

00:36:55.320 --> 00:36:56.280
<v Michael Kennedy>Just bookend it with uv.

00:36:56.670 --> 00:36:57.080
<v Michael Kennedy>Well done.

00:36:57.540 --> 00:36:57.840
<v Michael Kennedy>Well done.

00:36:58.860 --> 00:36:59.220
<v Michael Kennedy>Astral.

00:37:00.120 --> 00:37:00.880
<v Michael Kennedy>Open AI team.

00:37:03.760 --> 00:37:09.480
<v Calvin Hendryx-Parker>so far they're still doing again the good work i appreciate their what they're putting out there

00:37:09.480 --> 00:37:14.360
<v Calvin Hendryx-Parker>for the community and keeping the again staying on top of us like that's really cool that

00:37:14.370 --> 00:37:19.680
<v Calvin Hendryx-Parker>this has we went from one week being announced to next week it's in use and you're getting it

00:37:19.910 --> 00:37:25.220
<v Michael Kennedy>yeah that's super cool and i think i do think they're doing a great job so yeah yep so grab

00:37:25.400 --> 00:37:30.359
<v Michael Kennedy>the latest version of uv yeah i love it all right are you ready for a joke let's close it out do it

00:37:30.360 --> 00:37:32.940
<v Michael Kennedy>This joke is called beware of dog.

00:37:33.720 --> 00:37:33.840
<v Michael Kennedy>Oh.

00:37:34.080 --> 00:37:35.600
<v Michael Kennedy>We've all seen the beware.

00:37:36.740 --> 00:37:38.640
<v Calvin Hendryx-Parker>Yeah, Mushu made his appearance last week on the show.

00:37:38.660 --> 00:37:39.500
<v Michael Kennedy>Yes, exactly.

00:37:40.060 --> 00:37:40.180
<v Michael Kennedy>Exactly.

00:37:40.740 --> 00:37:42.140
<v Michael Kennedy>We've all seen the signs.

00:37:42.540 --> 00:37:45.540
<v Michael Kennedy>Do you really, is it just a, be careful, there is a dog here?

00:37:45.540 --> 00:37:48.100
<v Michael Kennedy>Or is it like a dangerous, aggressive dog?

00:37:48.220 --> 00:37:48.560
<v Michael Kennedy>We don't know.

00:37:49.020 --> 00:37:49.780
<v Michael Kennedy>But this one is aggressive.

00:37:50.080 --> 00:37:50.760
<v Michael Kennedy>Oh, let me tell you.

00:37:51.720 --> 00:37:54.980
<v Michael Kennedy>So there's a big sign that says, warning, beware of dog.

00:37:55.360 --> 00:37:56.440
<v Michael Kennedy>He uses Kali Linux.

00:38:00.140 --> 00:38:00.820
<v Michael Kennedy>So you're laughing.

00:38:01.160 --> 00:38:03.120
<v Michael Kennedy>Tell people what Kali Linux is for those who don't know.

00:38:03.380 --> 00:38:06.180
<v Calvin Hendryx-Parker>For those security folks who are looking to do some pen testing,

00:38:06.340 --> 00:38:08.780
<v Calvin Hendryx-Parker>you may have installed Kali Linux in the past.

00:38:09.140 --> 00:38:13.460
<v Calvin Hendryx-Parker>So it provides some attack tools to let you go after other people's servers,

00:38:13.940 --> 00:38:14.640
<v Calvin Hendryx-Parker>or your own, hopefully.

00:38:15.080 --> 00:38:15.560
<v Michael Kennedy>Yeah, yeah.

00:38:15.640 --> 00:38:15.980
<v Calvin Hendryx-Parker>Not others.

00:38:16.380 --> 00:38:20.760
<v Michael Kennedy>It basically is a distribution that bundles a whole host of things

00:38:20.860 --> 00:38:24.160
<v Michael Kennedy>you would separately install if you were a pen tester, hacker sort of thing.

00:38:24.200 --> 00:38:26.240
<v Michael Kennedy>And it comes ready to go, right?

00:38:26.680 --> 00:38:28.380
<v Calvin Hendryx-Parker>That needs to be the new logo for Kali Linux,

00:38:28.560 --> 00:38:35.320
<v Calvin Hendryx-Parker>like a big junkyard dog with a big like spiked collar exactly love it terminal with the uh the

00:38:35.520 --> 00:38:43.020
<v Calvin Hendryx-Parker>name and address on it there's no place like one two seven zero zero one exactly tattooed on his arm

00:38:44.960 --> 00:38:49.000
<v Calvin Hendryx-Parker>you know i'm a sucker for dad jokes that i will laugh every time i know these are these are

00:38:49.070 --> 00:38:54.559
<v Michael Kennedy>pretty solid these are pretty solid so beware the dog he's his cali Linux all right well that is it

00:38:54.580 --> 00:38:56.380
<v Michael Kennedy>for the show, Calvin,

00:38:56.970 --> 00:38:58.080
<v Michael Kennedy>thank you for being here with all of us.

00:38:58.230 --> 00:38:58.700
<v Michael Kennedy>Yeah, you bet.

00:38:58.880 --> 00:39:00.980
<v Michael Kennedy>And check out Pydantic Logfire

00:39:01.520 --> 00:39:03.080
<v Michael Kennedy>at pythonpys.fm slash logfire.

00:39:03.280 --> 00:39:05.100
<v Michael Kennedy>Really appreciate them supporting the show.

00:39:05.440 --> 00:39:06.260
<v Michael Kennedy>Update your Pythons.

00:39:06.720 --> 00:39:06.860
<v Michael Kennedy>Yes.

00:39:07.340 --> 00:39:09.260
<v Michael Kennedy>uv, Python, even had an upgrade.

00:39:09.370 --> 00:39:11.680
<v Michael Kennedy>So for in-place point release upgrades for uv,

00:39:11.790 --> 00:39:13.280
<v Michael Kennedy>you can just, there's a single command now

00:39:13.280 --> 00:39:13.920
<v Michael Kennedy>to update all of them.

00:39:14.060 --> 00:39:14.760
<v Michael Kennedy>So just do that.

00:39:15.020 --> 00:39:15.600
<v Calvin Hendryx-Parker>Stay safe out there.

00:39:16.020 --> 00:39:16.300
<v Michael Kennedy>That's right.

00:39:16.390 --> 00:39:16.660
<v Michael Kennedy>Bye, y'all.

00:39:16.870 --> 00:39:17.100
<v Calvin Hendryx-Parker>See ya.