WEBVTT
00:00:00.020 -->
00:00:05.040Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:00:05.580 -->
00:00:10.660This is episode 473, recorded March 16th, 2026.
00:00:11.400 -->
00:00:12.440And I am Brian Okken.
00:00:12.550 -->
00:00:13.320And I'm Michael Kennedy.
00:00:13.740 -->
00:00:19.260And as often lately, this episode is sponsored by you and us.
00:00:20.240 -->
00:00:23.580For everybody that supports the show through Patreon or through,
00:00:23.880 -->
00:00:25.660mostly through a lot of our offerings,
00:00:25.860 -->
00:00:30.460like the courses at Talk Python Training and PythonTest.com,
00:00:31.140 -->
00:00:31.660and books.
00:00:31.940 -->
00:00:33.300We've got lovely books coming along.
00:00:34.140 -->
00:00:36.160I might bring up a book later in the show,
00:00:36.290 -->
00:00:36.980but we'll talk about it.
00:00:37.660 -->
00:00:40.120Anyway, thanks a lot for everybody supporting us.
00:00:40.840 -->
00:00:41.900It keeps us going.
00:00:42.360 -->
00:00:45.620And also thank you to everybody that sends in topic ideas,
00:00:45.890 -->
00:00:48.580either by going to pythonbys.fm
00:00:48.720 -->
00:00:50.600and submitting something through the contact form,
00:00:50.920 -->
00:00:54.540or we're going ahead and sending it to us on socials.
00:00:54.980 -->
00:00:58.160So we're at BlueSky and at Mastodon
00:00:58.540 -->
00:01:00.080and all those links are in the show notes
00:01:01.140 -->
00:01:02.600or at pythonbytes.fm.
00:01:03.140 -->
00:01:05.700You also can watch the show if you'd like,
00:01:05.920 -->
00:01:07.820either real time or after the fact.
00:01:08.150 -->
00:01:10.720You can join us at pythonbytes.fm/live
00:01:11.080 -->
00:01:11.960and be part of the audience.
00:01:12.440 -->
00:01:13.840And one of the fun things about that is
00:01:14.320 -->
00:01:15.700while we're recording this,
00:01:15.790 -->
00:01:18.820you can add comments and we might comment back
00:01:18.980 -->
00:01:20.000or highlight your comment.
00:01:20.260 -->
00:01:20.580That's fun.
00:01:20.660 -->
00:01:26.300anyway the last thing I want to bring up is that you don't have to take any notes while we're
00:01:26.540 -->
00:01:32.280talking because it's all the stuff is it's on the show notes to links but if you'd like that
00:01:32.500 -->
00:01:37.080delivered right to your inbox plus a little background information some extra stuff especially
00:01:37.300 -->
00:01:42.240helpful for for if we're covering a topic that you're slightly you think you know about but maybe
00:01:42.360 -->
00:01:47.619not we'll send you some extra information and you just sign up to be a friend of the show at
00:01:47.680 -->
00:01:52.800pythonbys.fm and say, join the newsletter. With that, what do we have to start with?
00:01:53.020 -->
00:01:58.200Well, I've got a doozy. Oh, as they say, a doozy. And this one comes to us from
00:01:58.540 -->
00:02:03.040Ian Lessing. So thank you for sending it in to your point about sending us ideas about the show.
00:02:03.280 -->
00:02:09.920This one somehow missed my radar, but shouldn't have. So yeah, it's a big one. So this,
00:02:10.640 -->
00:02:17.600you probably have seen char debt as in character debt. Maybe it's care debt. I don't know. I'm
00:02:17.620 -->
00:02:21.640It's always funny to think about abbreviations like lib or lib.
00:02:21.960 -->
00:02:25.180You know, it's if you pronounce it lib, I think it goes lib.
00:02:25.320 -->
00:02:27.780But if it's an abbreviation of library, shouldn't it be lib?
00:02:28.040 -->
00:02:28.440I don't know.
00:02:28.680 -->
00:02:28.920So anyway.
00:02:29.080 -->
00:02:29.880No, because that's weird.
00:02:30.240 -->
00:02:30.860I know it is weird.
00:02:32.720 -->
00:02:38.560So Caradet is a library that I believe was originally done,
00:02:39.380 -->
00:02:42.860originally created by Mark Pilgrim, but now is maintained by Dan Blanchard.
00:02:43.080 -->
00:02:48.640So I think this alone makes it interesting because there's something happening with this project.
00:02:49.090 -->
00:02:53.440And a lot of people are pushing back, saying the maintainer can't make a change to it.
00:02:53.590 -->
00:02:54.560But they're the maintainer.
00:02:54.840 -->
00:02:56.520Like, I don't want you to, but you can't.
00:02:56.780 -->
00:02:57.980So here's the headline.
00:02:59.400 -->
00:03:04.060The care debt dispute shows how AI will kill software licensing, argues Bruce Perens.
00:03:05.480 -->
00:03:10.160And the subtitle, this comes from the register, alarm bells are ringing in the open source community,
00:03:10.320 -->
00:03:12.520but commercial licensing is also at risk.
00:03:12.900 -->
00:03:17.220so told me it's a doozy what is going on so earlier this week dan blanchard and i want to
00:03:17.240 -->
00:03:22.320point out the maintainer of the library released a new version of library under a new software
00:03:22.460 -->
00:03:29.000license it was lgpl and he released it under mit in doing so he may have killed copy left because
00:03:29.340 -->
00:03:34.520well mit is a do whatever you want just don't sue me about it you know what i mean license which
00:03:34.820 -->
00:03:38.579almost all the stuff that i do is mit as well i just want people to just i'd rather have people
00:03:38.600 -->
00:03:39.780just have access to do whatever.
00:03:39.980 -->
00:03:41.340Like, I don't want people to just, hey,
00:03:42.080 -->
00:03:44.380could I get an exception to use this for this thing like that?
00:03:44.580 -->
00:03:46.900Like, nothing I'm doing is that important, you know?
00:03:47.240 -->
00:03:50.540Yeah, and I think of the MIT stuff as, like, a good license
00:03:50.840 -->
00:03:53.820if you don't care if people use it in their commercial product.
00:03:54.260 -->
00:03:54.440Yes.
00:03:54.880 -->
00:03:55.380Yeah, so.
00:03:55.680 -->
00:03:59.480And look, if it's OK, I was not familiar with what this is.
00:03:59.660 -->
00:04:00.820I still don't quite get.
00:04:01.000 -->
00:04:02.540What does Caridit do?
00:04:02.620 -->
00:04:09.100So it is a character detection library that's used by millions of projects.
00:04:09.170 -->
00:04:09.520Let me see.
00:04:09.630 -->
00:04:12.540It has 130 million downloads a month.
00:04:12.920 -->
00:04:14.900So it's used by a lot of things.
00:04:16.620 -->
00:04:16.820Okay.
00:04:17.100 -->
00:04:18.180Character encoding detector.
00:04:18.400 -->
00:04:18.640Yes.
00:04:18.780 -->
00:04:19.140Yeah, exactly.
00:04:19.459 -->
00:04:21.140Like UTF, I think.
00:04:21.560 -->
00:04:23.100Is this UTF or Unicode?
00:04:23.110 -->
00:04:24.400Or is it how do I?
00:04:24.720 -->
00:04:25.320I have bytes.
00:04:25.480 -->
00:04:26.120What am I going to do?
00:04:26.580 -->
00:04:27.540So it takes a guess.
00:04:28.620 -->
00:04:30.400You're getting bytes and you're not really sure.
00:04:30.490 -->
00:04:32.360It wasn't declared or whatever.
00:04:32.420 -->
00:04:35.340So previously, this was an LGPL project.
00:04:36.060 -->
00:04:40.100Dan Blanchard wanted two things from what I can read between the lines,
00:04:40.490 -->
00:04:41.540putting words into their mouth.
00:04:41.980 -->
00:04:46.520One, wanted to dramatically improve this library to make it better.
00:04:46.920 -->
00:04:47.120Check.
00:04:47.480 -->
00:04:48.400You'll see he did that.
00:04:48.620 -->
00:04:53.920Two, wanted to set the stage such that this can just be part of Python.
00:04:54.300 -->
00:04:56.060Could this just be part of the standard library?
00:04:56.560 -->
00:05:00.960So previously, there's this move to say we should have less in Python,
00:05:01.220 -->
00:05:05.980and I agree, but detecting whether or not something is Unicode or ASCII or whatever,
00:05:06.500 -->
00:05:09.840maybe that does belong in the library. Anyway, that was the goal. Could we put it in there? Well,
00:05:10.060 -->
00:05:16.120LGPL says no. It would change the license of Python, I believe, right? So as long as it's a
00:05:16.280 -->
00:05:21.720GPL-based license, you can't move this library into the standard library. I don't know if the
00:05:22.000 -->
00:05:27.100core developers or even if Dan is a core developer was interested in this, but that was one of the
00:05:27.040 -->
00:05:33.100goals, right? So no problem. We're going to change it. Well, an individual claiming to be Mark Pilgrim
00:05:33.240 -->
00:05:38.560because verify people on the internet for sure, the original created the library. So it's a little
00:05:38.560 -->
00:05:43.140bit like Flask where Armin Roeneker created it. And then now David Lord maintains it. And David
00:05:43.200 -->
00:05:47.260Lord gets to do whatever he wants with it. It's his project now as the maintainer, but I'm sure
00:05:47.520 -->
00:05:53.139Armin still has influence over the community's opinion if he were to take a strong position one
00:05:53.160 -->
00:05:57.420way or the other right neither of them chimed into this as far as i know i don't think maybe
00:05:57.580 -->
00:06:02.440armin did i can't remember there's a lot there's a lot of chat about it kind of like giving somebody
00:06:02.460 -->
00:06:07.200a puppy and then telling them that what they have to where they have to take it what vet they have
00:06:07.200 -->
00:06:13.020to take it to yes exactly yeah exactly i'm i'm leaning on the side of of dan blanchard here just
00:06:13.380 -->
00:06:17.959just setting the state i have a slight there's a lot of complexity in this i'm i'm not like totally
00:06:18.540 -->
00:06:23.960just say this is how it is, but let's keep setting the stage. So Mark says, you can't do that. You
00:06:24.040 -->
00:06:30.560can't change an LPGL. I believe that's the typo LGPL license requirement. It requires that the
00:06:30.720 -->
00:06:36.680license remain unchanged. License code when modified must be released under the same GPL license.
00:06:37.300 -->
00:06:43.919But I get that when somebody gets it from the source, they make a change. It must be released
00:06:43.940 -->
00:06:49.480under the same license as the owner of the project i thought you could change the license on nuka i
00:06:49.580 -->
00:06:54.800don't know it's your software effectively if you want to change the license of it i don't know
00:06:55.760 -->
00:06:59.200this is a little bit of shaky ground here that to say that you can't change the license
00:06:59.700 -->
00:07:04.880as the owner of the license you know what i mean anyone else in the world should not they have to
00:07:05.000 -->
00:07:09.560follow what i just read but that as the owner license is that true well so what here's what
00:07:09.460 -->
00:07:13.320Dan said, here's what I'm going to create a new, better version.
00:07:13.620 -->
00:07:18.540I'm going to rewrite this entire project from scratch, not using any of its source code and
00:07:18.780 -->
00:07:22.300re-release it into the same package channel as the old one.
00:07:22.560 -->
00:07:22.640Okay.
00:07:23.000 -->
00:07:28.240Now, one of the problems under that is as the maintainer, he's deeply familiar with how it
00:07:28.360 -->
00:07:28.520works.
00:07:28.820 -->
00:07:34.160And one of the challenges is if you know how it works, your idea is like hard to do a fresh
00:07:34.520 -->
00:07:35.500from scratch rewrite.
00:07:35.840 -->
00:07:39.220If it's burned into your mind, how it works, you know what I mean?
00:07:39.480 -->
00:07:44.140So what he did is he just gave the specification to Claude and said, Claude,
00:07:44.240 -->
00:07:48.640write this so that the test pass and Claude wrote it and it wrote it
00:07:49.100 -->
00:07:50.080extremely differently.
00:07:50.580 -->
00:07:55.720There's a, a plagiarism detection algorithm that was more probably more for
00:07:55.820 -->
00:08:01.300English, but whatever it said is only 1% similar to version six version seven
00:08:01.300 -->
00:08:02.860is only 1% similar to version six.
00:08:03.260 -->
00:08:05.360So that means it's pretty different.
00:08:05.840 -->
00:08:08.600Dan also said it's like structurally the files are not named the same.
00:08:08.740 -->
00:08:09.880They're not organized the same.
00:08:10.140 -->
00:08:12.460It is basically not at all the same thing.
00:08:12.640 -->
00:08:12.760Nothing.
00:08:13.240 -->
00:08:17.900The only thing that's that 1% is like arg pars structure and stuff because you have the same
00:08:18.180 -->
00:08:18.740arguments, you know?
00:08:19.020 -->
00:08:22.000And so they believe this is, there's nothing here.
00:08:22.440 -->
00:08:23.600This is a new project.
00:08:24.140 -->
00:08:26.000This is what gets the MIT license.
00:08:26.540 -->
00:08:29.240Now, to be clear, this is a mega improvement.
00:08:29.530 -->
00:08:34.200It results in a 48 times improvement in detection speed.
00:08:34.640 -->
00:08:37.680It now supports multi-threading for Python T.
00:08:38.159 -->
00:08:40.539So you can do free-threaded Python and it supports that.
00:08:40.919 -->
00:08:43.120There's a lot of benefits to this new version.
00:08:43.520 -->
00:08:47.060So I don't think anyone is saying you've messed up the library.
00:08:47.460 -->
00:08:49.720It's like clearly a better library.
00:08:50.260 -->
00:08:55.380It's only this, we hate AI or AI is theft or like there's a lot of these different angles
00:08:55.800 -->
00:08:58.940that are like focusing in like a laser onto this change.
00:08:58.990 -->
00:08:59.600You know what I mean?
00:08:59.920 -->
00:09:00.060Yeah.
00:09:00.390 -->
00:09:03.059So Dan says, I was just trying to accomplish these goals
00:09:03.060 -->
00:09:05.080with the tools and times I had available.
00:09:05.380 -->
00:09:07.040I never have been paid to work on this
00:09:07.300 -->
00:09:08.860and I have a full-time job, you know?
00:09:09.240 -->
00:09:11.140Software licensing and the laws around it
00:09:11.180 -->
00:09:13.060haven't been tested a lot in this new world
00:09:13.240 -->
00:09:14.320of AI-assisted development
00:09:14.420 -->
00:09:15.660and a long-time open source developer.
00:09:15.840 -->
00:09:17.700I'm also curious how this is going to shake out.
00:09:18.500 -->
00:09:20.100Yeah, but somewhere it says, yeah,
00:09:20.820 -->
00:09:23.140after maintaining this library for years,
00:09:23.800 -->
00:09:25.820I've wanted to make these improvements, but I couldn't.
00:09:26.060 -->
00:09:27.500Quad gave me the ability to do this
00:09:27.780 -->
00:09:29.280in roughly five days, right?
00:09:29.600 -->
00:09:31.760So I think this is also really interesting.
00:09:32.180 -->
00:09:33.180Why change the license?
00:09:33.700 -->
00:09:35.580Because he wants to put it into Python.
00:09:35.980 -->
00:09:36.400Oh, okay.
00:09:36.680 -->
00:09:36.820Yeah.
00:09:37.340 -->
00:09:39.720Or maybe he just wants people to be able to more freely use it,
00:09:39.960 -->
00:09:41.540and he just doesn't care about copyleft.
00:09:41.560 -->
00:09:42.660I don't really know.
00:09:42.920 -->
00:09:45.000But I believe, for the article makes it imply,
00:09:45.080 -->
00:09:48.520like, he wants to put it into Python and LGPL to make that not possible.
00:09:48.860 -->
00:09:50.920And Arnaker actually did, or Armin actually,
00:09:51.280 -->
00:09:53.180Arnaker actually did a post about this,
00:09:53.260 -->
00:09:54.840saying that he welcomed the license change,
00:09:55.060 -->
00:09:56.160and he's wanted it for years.
00:09:56.440 -->
00:09:58.840Kind of what I would expect that he wanted to say as well.
00:09:59.100 -->
00:10:01.440Now, there's a issue that has been created,
00:10:01.880 -->
00:10:08.160that version seven presents unacceptable legal risk to users due to the copyright controversy.
00:10:09.480 -->
00:10:10.800There's so much.
00:10:11.460 -->
00:10:12.780There is so much going on here.
00:10:13.120 -->
00:10:18.200I don't know, because to me, the license only goes from less restrictive to more permissive,
00:10:18.380 -->
00:10:20.480or more restrictive to more permissive.
00:10:20.740 -->
00:10:24.800And if it turns out that it's the old version, you know, you're back to where you started.
00:10:25.180 -->
00:10:25.800So I don't know.
00:10:25.940 -->
00:10:28.900I'm telling you, there's a lot of, this may be the bigger issue,
00:10:29.140 -->
00:10:33.240There's issue 327 fired by Mark Pilgrim.
00:10:33.280 -->
00:10:34.280Hi, I'm Mark Pilgrim.
00:10:34.540 -->
00:10:36.800The title is No Right to Relicense This Project.
00:10:37.040 -->
00:10:40.160And it's absolutely toxic is the word.
00:10:40.500 -->
00:10:41.380So I don't know.
00:10:41.580 -->
00:10:43.060It's very interesting here.
00:10:43.460 -->
00:10:45.640I mean, version six is still there.
00:10:45.880 -->
00:10:49.740People can just keep using that or fork it if they want, if they still want the old license.
00:10:50.620 -->
00:10:57.060I think what's happening is this is becoming a lightning rod for the debate of licensing intersecting with agentic AI.
00:10:57.520 -->
00:11:00.460I mean, how many people actually care that much about character detection?
00:11:01.320 -->
00:11:01.760You know what I mean?
00:11:01.840 -->
00:11:03.420I mean, it's apparently a lot of people.
00:11:03.860 -->
00:11:05.300I know a lot of it's extreme.
00:11:05.420 -->
00:11:10.340This is like there are just pages of stuff to go through on all of this, like pages.
00:11:10.840 -->
00:11:11.620It's crazy.
00:11:12.240 -->
00:11:15.140So, OK, I understand the sensitivity of it.
00:11:15.400 -->
00:11:16.500I forgot my popcorn.
00:11:17.060 -->
00:11:17.320I know.
00:11:17.670 -->
00:11:17.920I know.
00:11:18.360 -->
00:11:24.640And I get it that AI ingesting the world's work and then turning that into automation.
00:11:25.240 -->
00:11:26.900I'm not even sure where that sits.
00:11:27.000 -->
00:11:32.740legally. At the time, it felt like a lot of theft. I'm not sure if it's a good trade-off or not.
00:11:33.040 -->
00:11:35.620I don't get how that relates to this project, though.
00:11:36.940 -->
00:11:40.200Okay, so let me add in one more detail. Like I said, there's a lot going on here. We'll wrap
00:11:40.300 -->
00:11:44.960this up pretty soon, but it's a super interesting discussion. I think, so one of the reasons that
00:11:45.100 -->
00:11:48.160said, she said, well, I did it with Claude Code. They said, well, it doesn't matter. Claude Code
00:11:48.260 -->
00:11:52.460trained on GitHub. Therefore, it trained on the original source code of Kradet. Therefore,
00:11:52.620 -->
00:11:54.360it's not a clean room re-implementation.
00:11:55.080 -->
00:11:55.680So I ask.
00:11:55.760 -->
00:11:57.060I don't know if that matters
00:11:57.300 -->
00:11:58.840because I can lead one company,
00:11:59.260 -->
00:12:00.320go work at another company.
00:12:00.440 -->
00:12:02.020As long as I don't take the source code,
00:12:02.100 -->
00:12:03.600if I just take what I remember
00:12:04.000 -->
00:12:05.260and do similar work,
00:12:05.420 -->
00:12:06.480I'm allowed to do that.
00:12:06.640 -->
00:12:07.680Yes, you're a human being
00:12:07.900 -->
00:12:09.860that gets to interact in the world.
00:12:10.060 -->
00:12:10.340Yeah, exactly.
00:12:10.940 -->
00:12:13.180It's not like, well, I saw a picture once
00:12:13.420 -->
00:12:15.020and it was of a tree and it was copyrighted.
00:12:15.020 -->
00:12:16.940So I can never, ever create a picture of a tree again
00:12:17.180 -->
00:12:18.320because I looked at it, right?
00:12:18.700 -->
00:12:20.400Yeah, that's why I said I'm on the side of,
00:12:20.520 -->
00:12:25.380I'm, I'm, I'm done. I feel like I'm on Dan's side here. So I, let me look. So I pull, I wrote a
00:12:25.450 -->
00:12:30.540little, I didn't write. I asked Claude for some research on like, well, what is the legal precedence
00:12:30.660 -->
00:12:36.520of this? Here's the situation, at least in the U S are there rules, rulings that have come down
00:12:36.920 -->
00:12:42.120previously. So I put a little document up for people to look at, but it says the closest
00:12:42.520 -->
00:12:47.459precedence is this Thomas Reuters versus Ross intelligence where somebody can remember who they
00:12:47.480 -->
00:12:57.800They took a bunch of Westlaw head notes for legal advice and then did their own custom AI training on it and built an exact tool for legal research.
00:12:58.270 -->
00:12:59.880That turned out to be a violation.
00:13:00.400 -->
00:13:01.340But the exists here.
00:13:01.580 -->
00:13:02.540This is this is interesting.
00:13:02.550 -->
00:13:05.920The existing copyright framework requires two things to prove infringement.
00:13:06.290 -->
00:13:07.420Access to the original work.
00:13:07.820 -->
00:13:08.020Check.
00:13:08.300 -->
00:13:10.440Claude did have access to the original work.
00:13:10.780 -->
00:13:12.860And substantial similarity in output.
00:13:13.340 -->
00:13:13.560No.
00:13:13.940 -->
00:13:14.320Not even close.
00:13:14.820 -->
00:13:16.480Not even not even one percent.
00:13:16.880 -->
00:13:20.380I know it said 1.3%, but that was like structure of ARGPARs.
00:13:20.700 -->
00:13:21.160You know what I mean?
00:13:21.720 -->
00:13:23.000That's ARGPARs structure.
00:13:23.200 -->
00:13:25.160That's not CharDette structure, effectively.
00:13:25.620 -->
00:13:27.900So I think this strongly fails.
00:13:28.560 -->
00:13:32.220Those are the two criteria that you have to have to prove similarity.
00:13:33.559 -->
00:13:35.140But there's other stuff.
00:13:35.630 -->
00:13:46.080The emerging judicial consensus is developing that training a general purpose AM model is highly transformative, therefore is free use.
00:13:46.440 -->
00:13:48.680But there were some specific examples where it wasn't.
00:13:48.960 -->
00:13:57.040The U.S. Copyright Office's position is that using copyright materials for AI model development may constitute prima facie infringement.
00:13:57.400 -->
00:14:05.140And what's really crazy, Brian, is if things like that said, no, this is copyright infringement, like, what happens to everything created by AI?
00:14:05.620 -->
00:14:05.740Period.
00:14:06.260 -->
00:14:06.640You know what I mean?
00:14:07.040 -->
00:14:08.560And I don't know how that's going to shake out.
00:14:08.620 -->
00:14:09.320Well, not forever.
00:14:09.740 -->
00:14:11.780I mean, let's take, like, the extreme case.
00:14:11.780 -->
00:14:12.840And you go, well, you know what?
00:14:13.140 -->
00:14:16.740All the current models have been trained on licensed stuff.
00:14:17.000 -->
00:14:19.920So let's just not start over.
00:14:20.260 -->
00:14:22.400It's going to cost a ton of money to retrain a model.
00:14:22.860 -->
00:14:24.780But do it right.
00:14:25.340 -->
00:14:28.820Only train on the stuff that's available license-wise.
00:14:29.240 -->
00:14:29.380Right.
00:14:29.500 -->
00:14:31.640You could just look and say, is it a GPL license?
00:14:31.820 -->
00:14:32.580We're not trading on that.
00:14:32.620 -->
00:14:33.500Is it an MIT license?
00:14:34.000 -->
00:14:34.300It's on.
00:14:34.520 -->
00:14:34.940You know what I mean?
00:14:35.000 -->
00:14:38.540There's probably plenty of information still out there to build out your models.
00:14:39.600 -->
00:14:41.060Anyway, it's pretty wild.
00:14:41.180 -->
00:14:42.780I think people can have a look.
00:14:43.130 -->
00:14:47.900I would certainly say the folks who took the time to comment are very much against this.
00:14:48.420 -->
00:14:54.520There is a lot of toxicity and Dan's support going out to you just mentally because I've
00:14:54.530 -->
00:14:57.200been on the receiving end of these types of things and they're not fun.
00:14:57.880 -->
00:15:01.840But I think Dan has a point here.
00:15:02.180 -->
00:15:07.239However, this could all be solved if he just said, okay, version seven is char.2, new project
00:15:07.500 -->
00:15:13.160and just put like a strong warning like we will we will never change char dot one ever again except
00:15:13.260 -->
00:15:17.260for security patches and then all the things that depend upon it go fine we'll just take this one
00:15:17.340 -->
00:15:22.080like i want 48 times faster and multi-threaded sounds better to me let's just do that yeah but
00:15:22.120 -->
00:15:27.700and if like we push it too hard though one option is he just stops maintaining it and doesn't
00:15:27.960 -->
00:15:33.779transfer maintainership to anybody else um yeah and we don't want that either so yeah yeah i certainly
00:15:33.880 -->
00:15:38.820I think this debate has far outgrown character encoding concerns.
00:15:39.700 -->
00:15:41.660It's its own special lightning rod, like I said.
00:15:41.860 -->
00:15:42.100Yeah.
00:15:42.480 -->
00:15:42.820All right.
00:15:43.380 -->
00:15:43.640How are you?
00:15:44.040 -->
00:15:52.740Can we talk about, I got just a small tool that I, this is a small tool suggested by Matthias.
00:15:53.860 -->
00:15:56.800Well, it's not a small tool, but it's quick to cover.
00:15:57.660 -->
00:15:58.520Refined GitHub.
00:15:59.040 -->
00:16:00.820And this is awesome.
00:16:01.120 -->
00:16:02.080I didn't know about this.
00:16:02.520 -->
00:16:08.920So this is a web browser plugin.
00:16:08.940 -->
00:16:09.580Browser extension.
00:16:09.920 -->
00:16:10.700Browser extension.
00:16:11.140 -->
00:16:11.500Thank you.
00:16:12.200 -->
00:16:15.100That does some cool stuff if you work with GitHub a lot.
00:16:15.300 -->
00:16:21.080And looking through this, I'm like, what's wrong with GitHub right now?
00:16:21.480 -->
00:16:22.980Well, there's a bunch of stuff.
00:16:23.000 -->
00:16:25.020The highlights, there's some highlights at the top.
00:16:25.420 -->
00:16:27.220Makes white space characters visible.
00:16:27.700 -->
00:16:28.560That's cool.
00:16:28.620 -->
00:16:33.920I mean, that's not cool enough to get this, but there's a lot more coming.
00:16:34.620 -->
00:16:37.080Tells you whether you're looking at the latest version of the repository,
00:16:37.380 -->
00:16:39.240if there's any unreleased commits.
00:16:40.100 -->
00:16:40.820That's kind of neat.
00:16:41.160 -->
00:16:46.920The shows how far behind PR head branches, tells you it's base commit.
00:16:47.180 -->
00:16:48.100There's a bunch of stuff here.
00:16:48.520 -->
00:16:52.940I'm going to highlight down to some of the stuff that one of the nice things,
00:16:53.100 -->
00:16:56.980there's lots of features, but they put fire beside things that you might care about.
00:16:57.280 -->
00:17:00.520Like adds a build CI status icon next to the repo name.
00:17:01.020 -->
00:17:01.560Love that.
00:17:02.540 -->
00:17:05.040Adds a link back to the PR that ran the workflow.
00:17:05.520 -->
00:17:06.060That's cool.
00:17:08.560 -->
00:17:12.100This one, I installed it just for this one feature.
00:17:12.480 -->
00:17:16.360Enables tab and shift tab for indentation in comment fields.
00:17:17.060 -->
00:17:21.220Because, you know, if you're in a web browser, you hit tab, it goes to the next field.
00:17:21.420 -->
00:17:24.420I just want to put a tab in the field.
00:17:25.040 -->
00:17:25.280Anyway.
00:17:26.319 -->
00:17:28.439For Python people, it might not matter that much,
00:17:28.580 -->
00:17:30.000but if you're doing C++ or something,
00:17:30.360 -->
00:17:32.280you don't want to mix spaces and tables.
00:17:32.760 -->
00:17:35.860I just expect it to add four spaces.
00:17:36.820 -->
00:17:39.580But anyway, let's see.
00:17:39.620 -->
00:17:41.100Auto resize the commit field.
00:17:42.200 -->
00:17:46.320Add reaction avatars showing who reacted to a comment.
00:17:46.520 -->
00:17:46.960That's interesting.
00:17:47.860 -->
00:17:50.460The other one that I want to highlight just to,
00:17:51.240 -->
00:17:52.060because I think it's cool,
00:17:52.220 -->
00:17:55.320is highlights the most useful comment in an issue.
00:17:56.020 -->
00:17:59.720So if there's a lot of people talking about a comment or whatever,
00:18:00.120 -->
00:18:01.420it'll highlight that.
00:18:01.440 -->
00:18:02.400So just scroll around.
00:18:03.800 -->
00:18:05.440And actually, I haven't really noticed.
00:18:05.720 -->
00:18:09.360I've turned this on, and it just sort of stays out of the way.
00:18:09.500 -->
00:18:11.400There's just more features and more.
00:18:11.500 -->
00:18:12.760It's just a nicer experience.
00:18:13.240 -->
00:18:15.000So yeah, kudos to them.
00:18:15.060 -->
00:18:16.520This is an absolutely mega.
00:18:17.060 -->
00:18:22.180So what's notable about this is you wouldn't look at your UI and know anything is different.
00:18:22.300 -->
00:18:24.020But there's like 100 little changes, right?
00:18:24.340 -->
00:18:24.620Yeah.
00:18:25.020 -->
00:18:25.540So yeah.
00:18:25.760 -->
00:18:29.020Anyway, I'm always nervous to install browser extensions.
00:18:29.160 -->
00:18:32.320I have maybe five or six that I really love from places I trust.
00:18:32.560 -->
00:18:34.800But go to the top, see how many stars this has.
00:18:35.639 -->
00:18:36.44030,000.
00:18:36.720 -->
00:18:39.540Yeah, at that level, I think it's all right.
00:18:39.680 -->
00:18:41.280It's probably totally trustworthy, right?
00:18:41.580 -->
00:18:44.160So let's-- yeah, I think it's good.
00:18:44.320 -->
00:18:44.900I think it's good.
00:18:44.960 -->
00:18:46.620I would probably install it.
00:18:47.260 -->
00:18:49.120I'll look and see if it'll inspire me.
00:18:49.880 -->
00:18:50.840Yeah, I don't know.
00:18:51.660 -->
00:18:55.460I'll play with it for a while, see if my entire computer blows up.
00:18:55.700 -->
00:18:58.560But yeah, if your computer gets-
00:18:58.560 -->
00:18:59.820It's all something around for a while,
00:18:59.820 -->
00:19:01.800it looks like nine years or so.
00:19:02.060 -->
00:19:03.400Wow. Really? No kidding.
00:19:03.460 -->
00:19:06.120Well, at least in the front top,
00:19:06.120 -->
00:19:10.100there's the editor config is nine years ago.
00:19:10.100 -->
00:19:12.240So at least there's some commits from nine years ago.
00:19:12.510 -->
00:19:14.520Yeah, exactly. I would imagine it is.
00:19:14.520 -->
00:19:16.200That's very, very wild. Awesome.
00:19:16.980 -->
00:19:20.060Okay. Let's move on to talk about
00:19:20.060 -->
00:19:22.400databases and in particular Postgres.
00:19:22.400 -->
00:19:23.780So this project I want to talk about,
00:19:23.780 -->
00:19:24.600I want to feature everyone across,
00:19:24.840 -->
00:19:27.560and I think it's been around for a little while, but it's called PG dog.
00:19:28.260 -->
00:19:28.400Okay.
00:19:28.660 -->
00:19:32.800And what it is, is it's a performance enhancing layer for Postgres.
00:19:32.980 -->
00:19:37.380So if you're using, you know, maybe you're using my SQL, not my SQL,
00:19:37.760 -->
00:19:41.000using SQL light in dev, but then in production, you're using Postgres,
00:19:41.240 -->
00:19:41.340right?
00:19:41.500 -->
00:19:42.140Something like that.
00:19:42.140 -->
00:19:44.940And, and it's starting to outgrow its performance.
00:19:45.520 -->
00:19:45.680Okay.
00:19:45.820 -->
00:19:50.140So either it needs better uptime, the database is getting too large or
00:19:50.220 -->
00:19:50.840something like that.
00:19:51.020 -->
00:19:54.800Postgres doesn't have certain features like, connection pooling and other
00:19:54.820 -->
00:19:57.040that could be better high performance, right?
00:19:57.120 -->
00:19:58.720So you don't have to reconnect as much.
00:19:59.020 -->
00:20:00.740This thing handles a whole bunch of those.
00:20:01.160 -->
00:20:04.180So we go down here to their repo.
00:20:04.300 -->
00:20:09.640It, by the way, has 4,000 stars and its age is a year, two years.
00:20:09.680 -->
00:20:12.720It looks like last year is all, it's probably its most recent things.
00:20:13.080 -->
00:20:15.120So there's been other projects like this as well.
00:20:15.520 -->
00:20:19.920For example, PG Bouncer is a friend, a colleague,
00:20:20.660 -->
00:20:22.880it's a software, I guess, another thing that does the same thing.
00:20:23.180 -->
00:20:25.880So what this is, is it's a proxy for scaling Postgres.
00:20:26.170 -->
00:20:29.180And it does connection pooling, load balancing for queries,
00:20:29.560 -->
00:20:32.780and it does sharding of databases, which sounds bad,
00:20:32.780 -->
00:20:34.220but is actually a potentially good thing.
00:20:34.560 -->
00:20:37.760So you just create a toml file to set it up, and then off it goes.
00:20:37.940 -->
00:20:39.580I got a bunch of notes here for all these little things
00:20:39.640 -->
00:20:40.180that kind of spread around.
00:20:40.840 -->
00:20:44.740So for starters, it's a load balancer across Postgres.
00:20:45.070 -->
00:20:49.880So you can run Postgres in a replica network configuration.
00:20:50.110 -->
00:20:53.140So I can have a Postgres database, but then I
00:20:53.160 -->
00:20:58.340let's say four other Postgres databases that are all copies of that same data and they stay in sync.
00:20:59.030 -->
00:21:03.260And from a read perspective, you could read from all five of them if they all have the same data,
00:21:03.840 -->
00:21:10.480and that basically 5Xs your database query performance, just by simply sending them to
00:21:10.600 -->
00:21:16.000different machines with exactly the same data, the same database. But the problem is the consistency,
00:21:16.260 -->
00:21:21.679so it knows which one is the primary database and it can do writing to that and make sure that it
00:21:21.680 -->
00:21:26.500propagates to the others before it tells you that it's committed, which is kind of the magic of
00:21:26.880 -->
00:21:30.740replicas. Because if you write to it and then immediately do another read, but it happens to
00:21:30.740 -->
00:21:35.860have gone to, this time it's round robin to a different database server, that's bad because it
00:21:36.000 -->
00:21:39.620might not be there, right? Like I saved the database, I queried and it wasn't there and I
00:21:39.640 -->
00:21:43.140went to test why it wasn't there. Then it was there. I don't get it. What is going on with the
00:21:43.180 -->
00:21:47.120world, right? So you want it to definitely manage that kind of stuff. It also does health checks.
00:21:47.640 -->
00:21:53.060And you've got this read primary replica configuration
00:21:53.380 -->
00:21:53.900that I'm talking about.
00:21:54.160 -->
00:21:58.020If one of them goes down, it will just take it out of its rotation.
00:21:58.460 -->
00:22:01.440And if it's the primary one, it'll pick another primary, I believe.
00:22:01.860 -->
00:22:04.540So it has a single endpoint behavior, which I talked about.
00:22:04.720 -->
00:22:09.880So it understands the Postgres structure, like basically T-SQL.
00:22:10.320 -->
00:22:13.660And so it knows if it sees an update or insert or create table
00:22:13.800 -->
00:22:15.600and things like that and sends that to the primary
00:22:16.280 -->
00:22:18.960and then leaves the other ones chilling to do their thing.
00:22:19.320 -->
00:22:22.800Has the failover I talked about, and it has sharding, which is really cool.
00:22:22.800 -->
00:22:25.220And it does a bunch of stuff to manage and keep that in sync.
00:22:25.600 -->
00:22:29.540You can even have different sets, different clusters of database
00:22:29.780 -->
00:22:31.420and say, keep this one in sync with that one.
00:22:31.820 -->
00:22:34.860So for example, imagine you've got an e-commerce site
00:22:35.519 -->
00:22:37.160and it's starting to go too slow.
00:22:37.440 -->
00:22:41.400People do a request for, I don't know, let me give you an example
00:22:41.500 -->
00:22:43.180that probably resonates more with people.
00:22:43.520 -->
00:22:45.440a health provider database.
00:22:45.670 -->
00:22:46.320I don't know about yours,
00:22:46.450 -->
00:22:48.760but whenever I go to figure out something
00:22:48.810 -->
00:22:50.240with my next doctor appointment or something,
00:22:50.440 -->
00:22:52.560it's like the page slowly loads in
00:22:52.570 -->
00:22:53.300and then it spins,
00:22:53.390 -->
00:22:54.120it says checking records,
00:22:54.500 -->
00:22:54.880checking records,
00:22:55.260 -->
00:22:55.680checking records,
00:22:55.940 -->
00:22:57.020and like five seconds later,
00:22:57.260 -->
00:22:58.420chunk will come in and more of it.
00:22:58.420 -->
00:23:00.060And like, what is going on with this?
00:23:00.140 -->
00:23:01.860Why is this so slow, you know?
00:23:02.160 -->
00:23:04.220And there's probably just some huge database
00:23:04.900 -->
00:23:06.800with a bunch of insane joins
00:23:07.120 -->
00:23:09.480and weird queries and stuff
00:23:09.530 -->
00:23:11.580just to tell me that my appointment is at 10 o'clock.
00:23:11.880 -->
00:23:12.980So what you could do is you could say,
00:23:13.140 -->
00:23:16.440okay, your health record ID is going to be the shard key,
00:23:16.760 -->
00:23:19.460and we're going to have 20 different servers, right,
00:23:19.680 -->
00:23:20.440running our cloud setup.
00:23:20.840 -->
00:23:24.500And for that, we're going to somehow determine
00:23:24.800 -->
00:23:25.600which database it goes.
00:23:25.720 -->
00:23:27.380So maybe we're going to say,
00:23:27.660 -->
00:23:30.420take the hash of the health ID
00:23:30.740 -->
00:23:32.320and use the first two letters to figure out
00:23:32.600 -->
00:23:34.000which database it actually goes in.
00:23:34.040 -->
00:23:38.700So like AA through B, whatever, right,
00:23:39.280 -->
00:23:40.560goes to the first database server,
00:23:40.600 -->
00:23:42.060and the second, the third, the fourth, and so on.
00:23:42.180 -->
00:23:45.200So when you do a query, you say, I want the thing for this user.
00:23:45.280 -->
00:23:46.340It just goes, OK, great.
00:23:46.360 -->
00:23:48.840Well, that means I only query that one server.
00:23:49.280 -->
00:23:54.000Instead of trying to query the 100 million records, you query, what did I say, 25s?
00:23:54.020 -->
00:23:57.940You query 4 million, which is way, way faster, right, on any given server.
00:23:58.280 -->
00:23:59.660So that's a really cool aspect.
00:24:00.400 -->
00:24:02.880And one of its main features is the sharding capability.
00:24:03.400 -->
00:24:03.700OK.
00:24:04.020 -->
00:24:04.840So pretty neat.
00:24:05.140 -->
00:24:05.400Pretty neat.
00:24:05.620 -->
00:24:11.040Well, but if you're really trying to find out, like, health information, it might, the hash might be the problem.
00:24:11.320 -->
00:24:12.540Stop doing hash, man.
00:24:13.140 -->
00:24:15.620I don't know why these systems are so bad.
00:24:16.040 -->
00:24:16.700They're so bad.
00:24:17.080 -->
00:24:17.520Bad joke.
00:24:17.800 -->
00:24:17.920Sorry.
00:24:18.060 -->
00:24:18.260Yes.
00:24:18.600 -->
00:24:19.560Yeah, that's true.
00:24:21.400 -->
00:24:22.020I get it now.
00:24:22.020 -->
00:24:22.420I get it.
00:24:23.799 -->
00:24:24.200Awesome.
00:24:24.520 -->
00:24:24.760Over to you.
00:24:25.280 -->
00:24:25.560Okay.
00:24:25.880 -->
00:24:33.040Well, this is partly a public service announcement, maybe.
00:24:34.620 -->
00:24:36.340I want to cover Simon Willis.
00:24:36.540 -->
00:24:43.060And so we know Simon Willison's been playing with AI and agents and stuff since like since they came out or something.
00:24:43.520 -->
00:24:45.680And I appreciate all of Simon's work.
00:24:46.500 -->
00:24:55.180And and I've been watching here and there and just like learning from him and not having to do all the experimentation that he's doing.
00:24:55.450 -->
00:24:57.280But he's really great at explaining it.
00:24:57.440 -->
00:25:06.180So what I want to he's got this sort of book like thing together that we're going to link to called agentic engineering patterns.
00:25:06.800 -->
00:25:12.600and this is a series of blog posts but they're fairly concise and short and it's really good
00:25:12.680 -->
00:25:20.040writing as well um there uh and i think anybody especially well it might be useful for really
00:25:20.260 -->
00:25:25.060everybody but especially people with teams um it'd be good to make sure that everybody's kind of on
00:25:25.160 -->
00:25:30.839like good i i think there's the information here is right good for everybody so there's principles
00:25:31.600 -->
00:25:37.880getting started like some intro on how agents work and testing and QA.
00:25:38.040 -->
00:25:40.140There's three posts about that, which I love.
00:25:40.920 -->
00:25:43.360Understanding code, using it to walk through,
00:25:43.730 -->
00:25:45.340using agents to walk through code and stuff.
00:25:46.390 -->
00:25:47.440Even these are,
00:25:48.320 -->
00:25:50.500didn't notice these when I was looking at this the other day,
00:25:50.830 -->
00:25:52.300an appendix of prompts I use.
00:25:52.330 -->
00:25:53.060That might be interesting,
00:25:53.820 -->
00:25:58.120but also GIF animation tool using WebAssembly and GIFsicle,
00:25:58.840 -->
00:25:59.560annotated prompts.
00:26:00.460 -->
00:26:03.260That might be fun, but maybe not appropriate for everybody.
00:26:04.840 -->
00:26:10.240But the one that I love right here is anti-patterns.
00:26:10.480 -->
00:26:12.700So in principles, there's some anti-patterns.
00:26:12.950 -->
00:26:14.560Well, everything.
00:26:14.900 -->
00:26:16.760Everything in the principles, definitely go read.
00:26:17.820 -->
00:26:19.380The writing code is cheap now.
00:26:19.620 -->
00:26:20.760What is agentic engineering?
00:26:21.160 -->
00:26:22.580Word things you know, basically.
00:26:23.570 -->
00:26:29.940Not basic, but keeping track of, for instance, making tools and doing snippets,
00:26:30.100 -->
00:26:34.840doing little tools, having those available, not only for you to remember, but you can also tell
00:26:35.210 -->
00:26:39.820an agent to say, hey, I already kind of solved this over here in this project. So use that,
00:26:40.120 -->
00:26:48.540but apply it to this other project here. Super cool idea. And also, these two, AI should help us
00:26:48.700 -->
00:26:53.879produce better code. So if you're having AI produce your code, I think it should be better
00:26:53.900 -->
00:27:01.860code than you would produce by yourself. Not worse. I don't like this notion of people not
00:27:02.040 -->
00:27:08.100reading their code at all. And I think that's going to blow up on us. And especially if you're
00:27:08.100 -->
00:27:13.940working in teams, a bunch of anti-patterns to watch out for. And the top one is about inflicting
00:27:14.300 -->
00:27:19.260unreviewed code on your collaborators. This anti-pattern is common and deeply frustrating,
00:27:19.320 -->
00:27:22.340both in open source and I'm dealing with it at work myself.
00:27:22.960 -->
00:27:26.300Don't file pull requests with code you haven't reviewed yourself.
00:27:26.880 -->
00:27:30.540I'm tired of reviewing reams and reams and reams of code
00:27:30.700 -->
00:27:33.320that I know that nobody actually read that.
00:27:33.770 -->
00:27:36.000And so why did they expect me to read it?
00:27:36.340 -->
00:27:38.400So anyway, great resource here.
00:27:38.650 -->
00:27:43.920I love the cheat sheet on red-green refactor is pretty great also.
00:27:44.860 -->
00:27:47.860And I probably should highlight that since testing is kind of my thing, right?
00:27:49.060 -->
00:27:54.660And this is the, he has tested it and the phrase use red slash green.
00:27:54.780 -->
00:28:00.160So use red green TDD is a pleasingly succinct way to get better results out of your coding
00:28:00.320 -->
00:28:00.460agent.
00:28:00.640 -->
00:28:06.440So you can tell your coding agent to do this and it will know to write a test first and
00:28:07.440 -->
00:28:09.640test, you know, make changes until it's green.
00:28:10.100 -->
00:28:13.480What's interesting is normally we think of TDD as red green refactor.
00:28:13.880 -->
00:28:16.080The refactor part, that's when you need to get involved.
00:28:16.100 -->
00:28:22.420So you can have the agent do the red green part, which is come up with a test that describes what you want to do.
00:28:22.920 -->
00:28:25.420Write code until you have code that does that.
00:28:25.880 -->
00:28:28.880Now you go and review that code and you can talk to the agent.
00:28:28.920 -->
00:28:30.920You don't have to necessarily change it.
00:28:30.920 -->
00:28:33.480You can talk to the agent and go, this part of the code is weird.
00:28:33.680 -->
00:28:35.120Can we change it to a different pattern?
00:28:35.800 -->
00:28:37.500Or is there some way to clean this up?
00:28:37.780 -->
00:28:42.400And I've had really good results with that, actually, to just say, kind of good.
00:28:42.560 -->
00:28:44.600But this part, why did we do that?
00:28:44.720 -->
00:28:51.160And it's surprising to me to have the agent come back and say, oh, yeah, that's weird and change it to what I would expect.
00:28:51.560 -->
00:28:52.960Why didn't it just do that in the first place?
00:28:53.440 -->
00:28:54.320But it doesn't.
00:28:55.020 -->
00:28:56.200So and maybe it will.
00:28:56.360 -->
00:28:59.260And in the future and the future might be next week.
00:28:59.430 -->
00:28:59.840Who knows?
00:29:00.540 -->
00:29:03.500But for right now, these are great engineering pattern.
00:29:03.830 -->
00:29:04.600Great things to watch.
00:29:04.730 -->
00:29:05.380So thanks, Simon.
00:29:05.760 -->
00:29:08.040And I trust him to keep these up to date.
00:29:08.400 -->
00:29:08.920So anyway.
00:29:09.240 -->
00:29:10.220Yeah, this looks super interesting.
00:29:10.270 -->
00:29:11.340I definitely want to check it out.
00:29:11.680 -->
00:29:14.460I've already spread this around to to work.
00:29:14.800 -->
00:29:16.960and especially the people that have sent me code reviews
00:29:17.320 -->
00:29:18.780that I'm like, you didn't read this.
00:29:20.160 -->
00:29:20.720I know you didn't.
00:29:23.260 -->
00:29:25.380I think that's part of the pushback as well.
00:29:25.920 -->
00:29:27.840People are lazy or they don't know what they're doing
00:29:28.090 -->
00:29:30.040and they just, here's 2,000 lines of code
00:29:30.050 -->
00:29:31.460that fixes what I was asking for.
00:29:31.580 -->
00:29:32.620You're like, no, go away.
00:29:33.140 -->
00:29:34.500Where if they spend some time, you're like,
00:29:34.740 -->
00:29:37.180actually, can you narrow this down to a 10-line change?
00:29:37.440 -->
00:29:38.160This is all I want.
00:29:38.320 -->
00:29:39.300Please don't go do other things.
00:29:39.540 -->
00:29:42.100Just help me understand this and why this needs to change.
00:29:42.300 -->
00:29:45.300And then I think we're still learning how all this stuff works.
00:29:45.740 -->
00:29:51.280And there are engineering practices, but it's so, the stakes are so low for getting started.
00:29:51.640 -->
00:29:53.860You know, normally you're like, okay, we're going to set up our build tool chain.
00:29:54.090 -->
00:29:57.700And then we're going to learn the language and the syntax and the structures and the keywords.
00:29:57.940 -->
00:30:00.760And now it's just like, oh, just use regular English to just tell it stuff.
00:30:00.810 -->
00:30:02.020And it'll probably figure it out, right?
00:30:02.580 -->
00:30:06.040That gives the sense that I don't need to learn this as a skill, but you do.
00:30:07.000 -->
00:30:13.080I also think that we're getting a lot of advice about how to utilize agents from startups and
00:30:13.340 -->
00:30:18.940startups have a different field. Startups are greenfield for the most part. They're writing
00:30:19.020 -->
00:30:25.180new code. Whereas a lot of software jobs are maintaining existing code bases that have been
00:30:25.420 -->
00:30:33.360around for decades, possibly, or at least years. And you can't just not care what goes into it.
00:30:35.260 -->
00:30:38.200you've been handed this thing that is making your company money.
00:30:38.560 -->
00:30:42.220You can't make it worse just because the agent decided to rewrite everything.
00:30:42.440 -->
00:30:43.020So yeah.
00:30:43.540 -->
00:30:43.620Yeah.
00:30:44.080 -->
00:30:44.160Anyway,
00:30:44.860 -->
00:30:45.200for sure.
00:30:45.580 -->
00:30:45.720Well,
00:30:45.980 -->
00:30:46.560do we have any extras?
00:30:46.660 -->
00:30:47.420I got a few extras.
00:30:48.020 -->
00:30:48.500Why don't you go first?
00:30:49.060 -->
00:30:49.180Okay.
00:30:49.580 -->
00:30:50.780A couple ones.
00:30:51.020 -->
00:30:51.100This,
00:30:51.320 -->
00:30:52.900the first one comes from John Hagen.
00:30:53.140 -->
00:30:57.020Thanks for mentioning this because I almost made this a top level story,
00:30:57.460 -->
00:30:59.860but there's not much to say about it other than this is awesome.
00:31:00.640 -->
00:31:02.400Upgrading Python versions with uv.
00:31:02.940 -->
00:31:04.000So if you do,
00:31:04.520 -->
00:31:07.520we know now that if to get all these new features,
00:31:08.000 -->
00:31:09.460any new features from uv,
00:31:09.590 -->
00:31:11.520you have to say uv self-update.
00:31:12.380 -->
00:31:13.180I think, is that right?
00:31:13.380 -->
00:31:14.160I think self-update?
00:31:14.300 -->
00:31:15.880Yeah, uv self-update.
00:31:16.140 -->
00:31:16.280Yep.
00:31:17.180 -->
00:31:18.480But after you've done that,
00:31:18.780 -->
00:31:21.780now you can say uv Python upgrade.
00:31:22.400 -->
00:31:23.600You can give it a specific one.
00:31:23.630 -->
00:31:28.000So like for instance, if you say uv Python upgrade 3.12,
00:31:28.400 -->
00:31:31.920it updates 3.12 to the latest version,
00:31:32.260 -->
00:31:33.380the latest dot release,
00:31:33.980 -->
00:31:34.900which is cool.
00:31:35.300 -->
00:31:37.740But if you leave that off, which that's what I do,
00:31:38.280 -->
00:31:41.480it just looks at all of the Python versions
00:31:41.820 -->
00:31:43.960that you have installed on your computer through uv
00:31:44.500 -->
00:31:48.860and updates them all to the most recent bug fix release.
00:31:50.519 -->
00:31:51.480And why not?
00:31:51.540 -->
00:31:52.720We should be doing that all the time.
00:31:52.940 -->
00:31:54.780I'm going to set this up as a cron job or something.
00:31:54.880 -->
00:31:55.180I don't know.
00:31:55.640 -->
00:31:56.460Yeah, that's cool.
00:31:57.039 -->
00:31:58.580And yeah, so thanks, uv.
00:31:58.940 -->
00:32:00.660Making things easier once again.
00:32:00.920 -->
00:32:01.620Awesome job.
00:32:01.880 -->
00:32:04.040I've already incorporated it into my little updater scripts
00:32:04.140 -->
00:32:05.060that I run periodically.
00:32:05.700 -->
00:32:09.280Next is also something that's suggested by a reader.
00:32:09.420 -->
00:32:13.940And I understand New York Times Magazine is behind a paywall.
00:32:14.640 -->
00:32:17.860But for some reason, I was able to read this fine.
00:32:18.520 -->
00:32:18.980I don't know.
00:32:19.580 -->
00:32:22.080I do have a New York Times newspaper subscription,
00:32:22.280 -->
00:32:23.080so maybe that's it.
00:32:23.300 -->
00:32:27.360Anyway, coding after coders, the end of computer programming
00:32:27.540 -->
00:32:28.260as we know it.
00:32:28.560 -->
00:32:31.139This is a description of basically talking
00:32:31.160 -->
00:32:37.840about whether or not, like, it's not just whether or not, like, AI is the end of coding jobs. I don't,
00:32:38.120 -->
00:32:43.220you know, we don't think it is. The conclusion here is it's not, but it's also more about that.
00:32:43.380 -->
00:32:47.780It's more than that. It's talking about basically kind of some different, different life, like,
00:32:48.020 -->
00:32:52.580different changes. And it also talks about, I believe it talked about the different differences
00:32:52.820 -->
00:33:00.100between percent of improved percent of efficiency improvement of Greenfield versus legacy code,
00:33:00.300 -->
00:33:02.580Whereas like a lot of startups say they're a hundred,
00:33:03.160 -->
00:33:03.960a hundred times faster,
00:33:04.700 -->
00:33:07.980but Amazon has said it's on average 10% faster,
00:33:08.040 -->
00:33:09.800but that's not nothing to get.
00:33:10.020 -->
00:33:12.140You should still get excited about 10% faster,
00:33:12.380 -->
00:33:12.500but,
00:33:12.940 -->
00:33:16.560but don't expect people maintaining your own code to be a hundred times
00:33:16.720 -->
00:33:16.880faster.
00:33:17.360 -->
00:33:19.220The reason why it was passed to me was,
00:33:19.700 -->
00:33:21.240was because there's this great line.
00:33:21.260 -->
00:33:22.580If I could see if I can find it,
00:33:22.760 -->
00:33:25.040I test pushing code that fails.
00:33:25.180 -->
00:33:27.180Pytest is unacceptable and embarrassing.
00:33:27.560 -->
00:33:30.860Apparently this is a, a, like a,
00:33:31.210 -->
00:33:37.260an instruction that somebody has in their markdown files to instruct Claude to,
00:33:37.730 -->
00:33:41.320to always run the PyTist and be embarrassed if they don't.
00:33:42.100 -->
00:33:42.960I love it.
00:33:43.140 -->
00:33:43.620This is good.
00:33:44.190 -->
00:33:46.300But anyway, those are my extras.
00:33:46.410 -->
00:33:47.020I actually,
00:33:47.110 -->
00:33:50.460I think this is a well-written article for somebody that doesn't understand
00:33:51.380 -->
00:33:52.600apparently this part of this, the,
00:33:52.760 -->
00:33:55.940the author was has been covering the tech world for a while.
00:33:55.990 -->
00:33:56.640So nice.
00:33:57.540 -->
00:33:59.360And also, pytest got into the New York Times.
00:34:00.780 -->
00:34:01.640Yeah, that's pretty cool.
00:34:02.100 -->
00:34:03.500Anyway, what you got extra for us?
00:34:03.740 -->
00:34:04.120All right.
00:34:04.400 -->
00:34:05.800Well, I've got a few.
00:34:06.180 -->
00:34:07.440Let's start with TalkByThonTraining.
00:34:08.440 -->
00:34:10.260By per request from one of the users,
00:34:10.310 -->
00:34:12.240they said, hey, I would be really great if I could,
00:34:12.639 -->
00:34:14.679when I log into my account, have more information.
00:34:14.770 -->
00:34:18.200So I updated the people who have accounts there.
00:34:18.540 -->
00:34:20.379If you go log into your account,
00:34:20.379 -->
00:34:23.220it will show you all the courses you are actively learning.
00:34:23.620 -->
00:34:25.080I have 48 of them.
00:34:25.740 -->
00:34:26.720I haven't finished a bunch of them.
00:34:27.020 -->
00:34:29.639People might be like, Michael, you have courses on the website.
00:34:29.770 -->
00:34:30.280You haven't finished.
00:34:30.540 -->
00:34:33.639By the time it gets to the website, I've watched the videos two to three times.
00:34:33.770 -->
00:34:38.720I don't have to watch them a fourth time in sequence and have the system record me watching them.
00:34:39.080 -->
00:34:39.960So no, they're not all done.
00:34:39.970 -->
00:34:43.220But it'll show you things like the ones you're working on, how far are you through,
00:34:43.600 -->
00:34:45.679and when did you last watch it, and when did you start?
00:34:45.940 -->
00:34:51.520Apparently, this is things like if you're submitting this as a training evidence for your employer,
00:34:51.800 -->
00:34:55.379knowing when you started, when you finished, and so on, and whatever, how far you are.
00:34:55.679 -->
00:34:56.500There's also a whole bunch.
00:34:56.500 -->
00:34:57.540It shows you completed ones.
00:34:57.720 -->
00:35:00.800I'm going to be generating certificates for people.
00:35:01.580 -->
00:35:03.440It's easy enough for me to make PDF downloads,
00:35:03.700 -->
00:35:05.060but I want to make stuff that you could say,
00:35:05.260 -->
00:35:07.840post to your LinkedIn profile as an accomplishment.
00:35:09.100 -->
00:35:12.140I've done the FastAPI course at Talk Python
00:35:12.230 -->
00:35:14.600as part of your LinkedIn record and other places
00:35:14.630 -->
00:35:15.580you can put those kinds of things.
00:35:16.050 -->
00:35:17.480So it's not as simple as just a PDF,
00:35:18.040 -->
00:35:19.280but hopefully stuff like that comes.
00:35:19.340 -->
00:35:20.320Anyway, this was fun to build.
00:35:20.700 -->
00:35:21.560I think it looks really neat.
00:35:21.760 -->
00:35:24.900I think especially if somebody is buying the bundle,
00:35:25.200 -->
00:35:30.460they have access to a ton of courses and they might not remember like what course was I taking last
00:35:30.840 -->
00:35:34.380month? Exactly. You didn't even buy it, but you took it. Then you forgot which one you're doing.
00:35:34.520 -->
00:35:38.500This totally solves that problem. Yeah. Yeah. Exactly. Cool. Yeah. That's what the request was
00:35:38.640 -->
00:35:42.320like. I know I took a course. I don't remember which one I was working on in which order would,
00:35:42.520 -->
00:35:45.860you know, help me get back to that. And then of course, when you're in, in a course, it has a
00:35:46.020 -->
00:35:49.740resume button. So you just click that to presume what you left off, but it doesn't have a cross
00:35:50.140 -->
00:35:54.619cutting resume. You know what I mean? I do like that. How you split it up so that if, like you
00:35:54.640 -->
00:35:58.440said, if I took the whole course and there's something I want to go back and review, I can
00:35:58.540 -->
00:36:01.980just look through and go and watch those videos. It's labeled well.
00:36:02.560 -->
00:36:09.520Yeah, thanks a bunch. All right. I talked about using latency to increase security for
00:36:09.880 -->
00:36:15.560supply chain stuff, right? Like, hey, if I do a pip, a uv pip update or upgrade sort of thing,
00:36:15.720 -->
00:36:22.020or similarly with sync and add and so on, just doing like an exclude newer than or whatever,
00:36:22.620 -->
00:36:24.840Give it seven days or a week or however you do it.
00:36:25.120 -->
00:36:28.900There's this article by Andrew Nespen that says package managers need to chill.
00:36:30.180 -->
00:36:35.780And right at the top, we have this post requested by Seth Larson, the security guy at the PSF.
00:36:36.100 -->
00:36:41.840So yeah, anyway, it talks about all the different, how you make your dependency manager cool, chill.
00:36:42.080 -->
00:36:44.460Like uv has an exclude newer, which I've been using.
00:36:44.880 -->
00:36:50.180And it's mostly awesome, except for when there's a vulnerability that appears in one and you get a notification that you got to fix it.
00:36:50.260 -->
00:36:51.960but it just came out the fix.
00:36:52.270 -->
00:36:53.360So you don't want to exclude it.
00:36:54.580 -->
00:36:59.000But in general, it's, I think, a better thing than not.
00:36:59.880 -->
00:37:00.580Remind me why?
00:37:00.770 -->
00:37:02.300Why would you want to exclude newer stuff?
00:37:02.560 -->
00:37:04.040Because for popular packages,
00:37:04.410 -->
00:37:07.820if somebody uploads a virus inside the package,
00:37:08.080 -->
00:37:10.280like they take over the build chain
00:37:10.470 -->
00:37:12.760or they fish the person who created it,
00:37:12.760 -->
00:37:14.560like the sake shared it, they fish Dan,
00:37:14.860 -->
00:37:16.340they get access to his GitHub
00:37:16.600 -->
00:37:18.179and they install a subtle thing
00:37:18.200 -->
00:37:23.800that downloads some rootkit or whatever info stealer to your account, that usually gets
00:37:24.100 -->
00:37:25.580found within the first couple of days.
00:37:26.100 -->
00:37:30.740And if you're always just going update, update, update, give me the latest, give me the latest,
00:37:31.220 -->
00:37:34.120you know, the chances that you hit that are pretty high, right?
00:37:34.240 -->
00:37:35.920Cause they won't get found in the first hour.
00:37:36.400 -->
00:37:40.060Even if it's found in the first hour, will people be able to react and communicate within
00:37:40.150 -->
00:37:41.240the first hour to deal with it?
00:37:41.350 -->
00:37:46.340You know, but if you just say, give it a week, like probably most of the popular ones, if
00:37:46.460 -->
00:37:48.040there was something wrong, it would have been found out.
00:37:48.140 -->
00:37:49.840by then. But okay, what if it
00:37:50.340 -->
00:37:51.920got found out and
00:37:52.220 -->
00:37:54.160got fixed and the weak
00:37:54.420 -->
00:37:55.740boundary is there and I like
00:37:55.980 -->
00:37:58.100upload the weak old one that has
00:37:58.650 -->
00:38:00.080the bug or do they remove it
00:38:00.240 -->
00:38:02.080completely from there? If there was a virus, they
00:38:02.280 -->
00:38:04.120remove it from PyPI. Okay. It's not
00:38:04.170 -->
00:38:05.900even there, even if somebody picks an old one.
00:38:06.190 -->
00:38:08.000Exactly. I knew that. I was just
00:38:08.140 -->
00:38:09.620sort of playing along. Yeah, yeah.
00:38:10.050 -->
00:38:11.260Yeah, yeah. Exactly. Yeah.
00:38:12.300 -->
00:38:14.060So basically, just more
00:38:14.200 -->
00:38:15.860people singing the same message, but this is a nice
00:38:16.100 -->
00:38:18.020cross technology. Are you in.NET? Are you in Ruby?
00:38:18.100 -->
00:38:23.980here in JavaScript. Here's how you make it chill. Okay. So back to AI real quick. Paul Everitt and
00:38:24.060 -->
00:38:29.560I did this video debate, although it was not that much of a debate, but it was more of a
00:38:29.960 -->
00:38:35.840conversation, but in kind of debate format about will AI kill open source? Not the licensing part
00:38:35.840 -->
00:38:41.180of it, but just will it make open source unnecessary? Will it just stop using open source and so on?
00:38:41.370 -->
00:38:45.999We don't think so, but we had a really nice chat and did a little quick write-up, but mostly the
00:38:46.140 -->
00:38:50.120write-up links to the video. So check out the video. I also did a write-up called always activate
00:38:50.420 -->
00:38:55.340the VE and V, a shell script. So I talked about this before, I believe. This is not the thing.
00:38:55.640 -->
00:39:00.520This is the lead into the thing I want to talk about. And so as I change directories around my
00:39:00.860 -->
00:39:06.040computer with just the terminal, it automatically finds and activates virtual environments. But
00:39:06.220 -->
00:39:11.259there's like, this was a thing in dir-inf. They said, well, we can't do this. What if somebody
00:39:11.320 -->
00:39:19.120maliciously sends some kind of virus and like commits a virus called VE and V into the repo.
00:39:19.640 -->
00:39:21.500And like it runs the activate script.
00:39:21.630 -->
00:39:23.420What if that activate script is malicious?
00:39:23.760 -->
00:39:24.540You know, that kind of thing.
00:39:24.860 -->
00:39:32.280So with some nice feedback from Scott H, I made a much more secure version that whitelists
00:39:32.480 -->
00:39:32.560them.
00:39:32.690 -->
00:39:36.700And if it's not whitelisted, it says, hey, do you really trust this thing or do you not?
00:39:36.710 -->
00:39:40.699Because you might just open up a folder and go, oh my gosh, there was a virtual environment
00:39:40.720 -->
00:39:43.640somewhere and it activated and ran something that I didn't know was going to happen. Right.
00:39:44.060 -->
00:39:47.740All that I think is super polished and really nice and I'm loving it. So here's the news.
00:39:49.200 -->
00:39:58.140Viraj Kenwande said, I wrote the antidote for ZSH plugin management and I ran across Michael's
00:39:58.380 -->
00:40:04.759secure aware virtual environment activator script, which was pretty awesome. So this is now a Zshell
00:40:04.760 -->
00:40:10.860plugin or ohmyzsh plugin a z sh safe v and v auto is what it's called which i thought it's
00:40:10.870 -->
00:40:15.620pretty awesome that's pretty cool yeah all right that's it for my extras cool we each got a joke
00:40:15.710 -->
00:40:22.060right uh yeah i took mine down though uh so i'm gonna have to rely on you to bring it into your
00:40:22.420 -->
00:40:28.600thing so all right i'll find it no worries so this one is so good and it follows this ai theme
00:40:28.680 -->
00:40:33.959that we've been going i remember the stack overflow keyboard and this is exactly the same
00:40:33.980 -->
00:40:38.080Vive is the Stack Overflow keyboard. The Stack Overflow keyboard was like the coder's keyboard,
00:40:38.610 -->
00:40:43.760and it's had a control and a C and a V for the joke of just copy and pasting from Stack Overflow.
00:40:44.170 -->
00:40:49.080Yeah. Well, if you've done anything with Claude Code, it often asks permissions to make changes,
00:40:49.580 -->
00:40:54.260and it says, do you want to allow this once, allow this always, or do you want to reject this change?
00:40:54.720 -->
00:41:00.360And so it's the super fancy Apple-looking keyboard that just says, allow once, always allow, or reject.
00:41:00.860 -->
00:41:02.240So this is funny on its own.
00:41:02.250 -->
00:41:03.420You all have to check out the picture.
00:41:03.710 -->
00:41:04.680I put it in the show notes.
00:41:04.840 -->
00:41:07.160It may or may not show up in your podcast player.
00:41:07.490 -->
00:41:07.900I don't know.
00:41:08.000 -->
00:41:10.020Maybe I can, I'll just make it the poster art.
00:41:10.740 -->
00:41:14.620But also there's two, there's two, too many buttons.
00:41:14.750 -->
00:41:16.760I think you just all need allow always.
00:41:17.220 -->
00:41:17.920I know.
00:41:18.290 -->
00:41:22.520Well, let's, let's review the comments because, oh my gosh, they're so good.
00:41:22.620 -->
00:41:24.000There's 223 comments.
00:41:24.460 -->
00:41:24.860Yeah, exactly.
00:41:25.280 -->
00:41:26.920Issue says, waste of two buttons.
00:41:27.320 -->
00:41:30.240A truly productive agent should only have allow all.
00:41:31.080 -->
00:41:39.160um somebody this is like the remember the little joke last week that was like so you're new to uh
00:41:39.360 -->
00:41:43.900sarcasm the person that looks like an ai generated image yeah exactly it didn't obviously
00:41:46.440 -->
00:41:50.640and there's the secret button dangerously skip permissions somebody added it to their stream
00:41:50.710 -->
00:41:56.039deck for real that it actually allows it yeah matt says too too many buttons but if we go down
00:41:56.320 -->
00:41:56.980Oh my gosh.
00:41:57.520 -->
00:42:01.880There's, there's, there's, this is the one, the actual one, Brian.
00:42:02.360 -->
00:42:04.140There's, there's a used version.
00:42:04.540 -->
00:42:09.460It says update after day one, it shows the same picture, but the allow always is like
00:42:09.860 -->
00:42:10.960cracked and smashed.
00:42:10.960 -->
00:42:12.920And just like, it's just been hit like brutally.
00:42:13.480 -->
00:42:14.420Just used, yes.
00:42:16.080 -->
00:42:18.100Oh, this is really good.
00:42:18.600 -->
00:42:20.380And so someone says, you got to be safe.
00:42:20.480 -->
00:42:24.600And they create a little like Rube Goldberg machine that just like automates hitting allow
00:42:24.920 -->
00:42:25.640once, but forever.
00:42:25.960 -->
00:42:30.060Yeah, just a little bobber thing that just hits it all the time.
00:42:30.320 -->
00:42:30.580That's funny.
00:42:30.800 -->
00:42:32.960Yeah, Devon says, no, no, no, we need the--
00:42:33.460 -->
00:42:36.220Claude code will say, I got to ask you a few questions.
00:42:36.700 -->
00:42:37.580Here's three options.
00:42:37.670 -->
00:42:38.740Do you want one, two, or three?
00:42:38.770 -->
00:42:39.700Or sometimes there's four.
00:42:39.900 -->
00:42:40.840Or you got to choose other.
00:42:41.040 -->
00:42:43.980So there's one that has a second row that says one, two, three, four, other.
00:42:45.040 -->
00:42:46.040I would actually use that.
00:42:46.779 -->
00:42:47.460I know.
00:42:47.600 -->
00:42:48.280It's so good.
00:42:48.340 -->
00:42:50.940Another one has the three, the allow ones.
00:42:51.050 -->
00:42:51.860Allow always rejected.
00:42:51.970 -->
00:42:54.220It has a microphone button to dictate to it.
00:42:54.700 -->
00:42:55.880These are so good.
00:42:56.380 -->
00:42:57.420You got to look at the comments.
00:42:58.240 -->
00:42:58.860That's funny.
00:42:59.300 -->
00:42:59.560Anyway.
00:43:00.600 -->
00:43:00.920That's good.
00:43:01.260 -->
00:43:01.820Yeah, that's my joke.
00:43:02.180 -->
00:43:05.800But my favorite one of it is where it's like crushed with like after day one.
00:43:06.840 -->
00:43:07.020Yeah.
00:43:07.540 -->
00:43:10.180So, well, let me try to get mine up.
00:43:10.480 -->
00:43:10.860Let's see.
00:43:11.360 -->
00:43:13.140I can pull it for you if you don't have me yet.
00:43:13.200 -->
00:43:13.320Okay.
00:43:13.600 -->
00:43:16.160Yeah, just go ahead and pull that link up or something or the picture.
00:43:17.120 -->
00:43:20.780So this was submitted with something else submitted by Paul Cutler.
00:43:21.460 -->
00:43:22.900Has some news about AI too.
00:43:24.080 -->
00:43:25.000Are you getting it?
00:43:25.000 -->
00:43:25.480You want me to?
00:43:25.680 -->
00:43:26.340I get it.
00:43:26.420 -->
00:43:26.880It's just slow.
00:43:27.100 -->
00:43:27.280Okay.
00:43:27.440 -->
00:43:28.280It's just slow loading.
00:43:28.410 -->
00:43:28.820There we go.
00:43:29.070 -->
00:43:33.560So set this over on Mastodon, Paul Cutler.
00:43:33.940 -->
00:43:42.240Today, it was mandated at work that we install Claude Code because, as they said, it has built-in PowerPoint creation capabilities.
00:43:43.340 -->
00:43:44.120What a reason.
00:43:44.480 -->
00:43:44.980FML.
00:43:46.000 -->
00:43:46.140Yeah.
00:43:46.740 -->
00:43:51.600Because you know what's coming next, hour-long meetings with lots of PowerPoint.
00:43:52.060 -->
00:43:54.180You know, I thought this was super funny at first,
00:43:54.240 -->
00:43:57.380but also like it drives me kind of nuts with it
00:43:57.560 -->
00:43:59.020because, you know, I'm a coder.
00:43:59.180 -->
00:44:00.940So if I have to write a PowerPoint presentation,
00:44:01.320 -->
00:44:01.880it's unusual.
00:44:03.000 -->
00:44:05.060So this probably is a good idea
00:44:05.320 -->
00:44:06.560that I could save some time
00:44:06.760 -->
00:44:08.620and not waste time on creating PowerPoint.
00:44:08.980 -->
00:44:10.040So yeah, no kidding.
00:44:10.160 -->
00:44:12.500Well, it's actually, it's a pretty neat integration.
00:44:12.860 -->
00:44:14.340It's not just that it knows how to do PowerPoint,
00:44:14.600 -->
00:44:17.740but if you open up the Claude desktop app,
00:44:17.780 -->
00:44:19.080the same one that does co-work,
00:44:19.580 -->
00:44:24.620It has like a little what's new button and you click it and it says install into PowerPoint.
00:44:24.820 -->
00:44:29.640And it actually adds like a Claude section inside of your PowerPoint presentation.
00:44:30.460 -->
00:44:30.820Why?
00:44:31.760 -->
00:44:35.880So you could like highlight a picture and say, could we get a different picture for this or highlight the text?
00:44:35.900 -->
00:44:38.260And could you could you animate this in from the left?
00:44:38.640 -->
00:44:41.300Oh, like not while you're presenting, though?
00:44:41.760 -->
00:44:43.380Like, no, it's during the building time.
00:44:43.680 -->
00:44:44.860OK, yeah, that makes more sense.
00:44:44.880 -->
00:44:48.200You know, you got like format picture animation tab and then you've got Claude now.
00:44:48.280 -->
00:44:53.140Yeah, it's actually pretty as opposed to just read my PowerPoint file and do this, you know.
00:44:53.600 -->
00:44:53.900Sorry, Paul.
00:44:54.160 -->
00:44:55.880I want it to be during the presentation.
00:44:56.060 -->
00:45:00.740So when you're presenting and go, hey, Claude, does anybody in the audience stopped at Starbucks
00:45:01.420 -->
00:45:04.320before they got here or something like that?
00:45:04.640 -->
00:45:05.960I forgot what I'm talking about, Claude.
00:45:06.140 -->
00:45:07.360Please tell the audience what this means.
00:45:09.000 -->
00:45:09.160Yeah.
00:45:09.520 -->
00:45:09.640Anyway.
00:45:10.000 -->
00:45:10.080Yeah.
00:45:10.660 -->
00:45:10.840Awesome.
00:45:11.240 -->
00:45:13.680Well, fun talking with you as always.
00:45:13.980 -->
00:45:22.600And I don't know if we need to change the name of the podcast to like Claude Bytes or probably not.
00:45:22.640 -->
00:45:23.240I don't think so.
00:45:23.560 -->
00:45:28.000But I mean, honestly, it's a good point.
00:45:28.220 -->
00:45:38.580But as a meta comment for the audience out there, it's really challenging to cover this stuff because so much of the energy in software development and tech in general is in AI.
00:45:39.060 -->
00:45:39.140Yeah.
00:45:39.320 -->
00:45:43.560But we obviously realize that there's plenty of stuff that's not really AI at all.
00:45:43.820 -->
00:45:48.720At the same time, it's transforming the industry, basically like the web, when the web came around.
00:45:49.140 -->
00:45:53.660And it's like, well, now we have the web, but we don't talk about it because it's, I don't know, it's tough.
00:45:53.880 -->
00:45:54.180It's a balance.
00:45:54.600 -->
00:46:02.600Also, I just am aware that there's people that care about Python, but also they have to care about this right now, whether they want to or not.
00:46:02.940 -->
00:46:05.180So it's something I'm willing to cover as well.
00:46:05.840 -->
00:46:05.980Yeah.
00:46:06.660 -->
00:46:07.500And it's wild.
00:46:07.800 -->
00:46:08.940May we live in interesting times.
00:46:10.140 -->
00:46:10.220Bye.
00:46:10.320 -->
00:46:10.640Later, Brian.