WEBVTT

00:00:00.020 --> 00:00:04.740
<v Brian Okken>Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:00:05.180 --> 00:00:11.720
<v Brian Okken>This is episode 465, recorded January 12, 2026, and I'm Brian Okken.

00:00:12.020 --> 00:00:12.920
<v Brian Okken>And I am Michael Kennedy.

00:00:13.360 --> 00:00:18.260
<v Brian Okken>And this episode is sponsored by us and you.

00:00:18.610 --> 00:00:24.359
<v Brian Okken>So thanks to everybody that does support us through Patreon supporters

00:00:24.720 --> 00:00:27.900
<v Brian Okken>and also through grabbing the pytest course

00:00:28.380 --> 00:00:29.960
<v Brian Okken>or the Lean TDD book

00:00:30.200 --> 00:00:33.360
<v Brian Okken>or so many of the massively cool courses

00:00:33.780 --> 00:00:35.020
<v Brian Okken>at Talk Python Training

00:00:35.160 --> 00:00:39.380
<v Brian Okken>and also Michael's fun book on deployment

00:00:39.740 --> 00:00:40.620
<v Brian Okken>and stuff like that.

00:00:40.940 --> 00:00:42.920
<v Brian Okken>So if you'd like to,

00:00:43.080 --> 00:00:45.180
<v Brian Okken>we're recording this for the podcast,

00:00:45.520 --> 00:00:47.220
<v Brian Okken>but also broadcasting it live.

00:00:47.420 --> 00:00:49.160
<v Brian Okken>If you'd like to join the live,

00:00:49.220 --> 00:00:50.260
<v Brian Okken>you can join us at YouTube,

00:00:50.560 --> 00:00:53.839
<v Brian Okken>but you can just go to pythonbytes.fm/live

00:00:54.120 --> 00:00:56.600
<v Brian Okken>and there's a link on how to get that

00:00:56.840 --> 00:00:58.280
<v Brian Okken>and what the timing is and all that.

00:00:58.840 --> 00:01:01.060
<v Brian Okken>Also, you don't need to take notes.

00:01:01.190 --> 00:01:03.200
<v Brian Okken>You can just sign up for our newsletters.

00:01:03.480 --> 00:01:06.060
<v Brian Okken>So go to pythonbytes.fm, grab the newsletter

00:01:06.520 --> 00:01:09.280
<v Brian Okken>and we don't do very many spammy things.

00:01:09.410 --> 00:01:11.300
<v Brian Okken>We just let you know what we talked about

00:01:11.580 --> 00:01:14.100
<v Brian Okken>and with all the links and a little bit of extra information.

00:01:14.860 --> 00:01:17.340
<v Brian Okken>Yeah, and we love growing that list.

00:01:17.390 --> 00:01:20.260
<v Brian Okken>It grows by a little bit every week

00:01:20.640 --> 00:01:21.820
<v Brian Okken>and it's so fun to see.

00:01:23.080 --> 00:01:26.200
<v Brian Okken>And with that, Michael, what do you got for us first?

00:01:26.660 --> 00:01:28.460
<v Brian Okken>Let's talk about PortKiller.

00:01:28.920 --> 00:01:31.980
<v Michael Kennedy>So PortKiller is an interesting Mac app.

00:01:32.320 --> 00:01:33.600
<v Michael Kennedy>And if you're not a Mac, I apologize.

00:01:33.840 --> 00:01:34.800
<v Michael Kennedy>I know it's a Windows as well.

00:01:34.980 --> 00:01:35.680
<v Michael Kennedy>It's a Windows as well.

00:01:36.220 --> 00:01:40.860
<v Michael Kennedy>So if you're a Mac or Windows, which is a good chunk of us, here is a cool application.

00:01:41.500 --> 00:01:43.760
<v Michael Kennedy>So let me just lay out the problem for you, Brian.

00:01:44.190 --> 00:01:52.040
<v Michael Kennedy>Either you've got 20 terminal tabs open or in one of your four IDE windows,

00:01:52.600 --> 00:01:58.520
<v Michael Kennedy>You've got your API running or you've got your web app running or something like that.

00:01:58.820 --> 00:02:01.420
<v Michael Kennedy>And you go try to run it again, not knowing that fact.

00:02:01.760 --> 00:02:04.300
<v Michael Kennedy>And it says, sorry, that port is already in use.

00:02:04.480 --> 00:02:06.320
<v Michael Kennedy>You're like, oh man, where is it now?

00:02:06.820 --> 00:02:08.899
<v Michael Kennedy>And that's on you to know where you ran it.

00:02:09.000 --> 00:02:12.660
<v Michael Kennedy>You know, I mean, there's a button to say run in your IDE versus running the terminal.

00:02:12.900 --> 00:02:13.860
<v Michael Kennedy>And so maybe just press the button.

00:02:13.910 --> 00:02:16.760
<v Michael Kennedy>You forgot, oh yeah, that thing was like one of the running things.

00:02:17.180 --> 00:02:23.580
<v Michael Kennedy>But since 2025, there's another reason this is a pain is some of these agentic AI things.

00:02:23.900 --> 00:02:27.400
<v Michael Kennedy>They're like, oh, let me start the server for you so I can test it.

00:02:27.740 --> 00:02:33.660
<v Michael Kennedy>And it'll like temporarily fire up the web server and make a request and like lose track of it and not kill it.

00:02:33.660 --> 00:02:35.060
<v Michael Kennedy>And it's not in your terminal.

00:02:35.240 --> 00:02:35.900
<v Michael Kennedy>It's not in your ID.

00:02:36.440 --> 00:02:39.140
<v Michael Kennedy>It's just there somewhere in the background, hidden.

00:02:39.470 --> 00:02:40.900
<v Michael Kennedy>You can't get to it to shut it down.

00:02:41.170 --> 00:02:46.680
<v Michael Kennedy>You go to a task manager activity monitor and you say Python is like four things like, hmm.

00:02:47.140 --> 00:02:48.580
<v Michael Kennedy>Well, three of those are supposed to be running.

00:02:49.100 --> 00:02:50.120
<v Michael Kennedy>Which one do I kill, you know?

00:02:50.620 --> 00:02:51.460
<v Michael Kennedy>So it's just a real hassle.

00:02:51.690 --> 00:02:55.720
<v Michael Kennedy>And so this port killer solves that problem, not just for Python, but for applications

00:02:56.070 --> 00:02:56.680
<v Michael Kennedy>in general, right?

00:02:56.920 --> 00:03:01.260
<v Michael Kennedy>So it's a powerful cross-platform port management tool for developers.

00:03:01.790 --> 00:03:07.940
<v Michael Kennedy>It monitors ports, manages Kubernetes port forwarding, and even does integrated Cloud

00:03:08.040 --> 00:03:08.480
<v Michael Kennedy>Flare tunnels.

00:03:09.000 --> 00:03:11.320
<v Michael Kennedy>So it's really, really slick, actually.

00:03:11.720 --> 00:03:25.500
<v Michael Kennedy>So what you do is it's got a little notification section menu bar thing that drops down and you can have multiple CloudFlare tunnels, which we've talked about in Grok and I've talked about Rathole, like CloudFlare tunnels or a thing like that.

00:03:25.540 --> 00:03:27.680
<v Michael Kennedy>Like put this on the internet so other people can get to it.

00:03:27.860 --> 00:03:30.880
<v Michael Kennedy>So maybe I can help debug or show off something, right?

00:03:30.980 --> 00:03:36.300
<v Michael Kennedy>Like if you're trying to debug a webhook, the only way to do that is online, right?

00:03:36.500 --> 00:03:38.820
<v Michael Kennedy>Because some other server is trying to get to your dev machine.

00:03:39.300 --> 00:03:40.400
<v Michael Kennedy>So these tunnels are super helpful.

00:03:40.460 --> 00:03:41.200
<v Michael Kennedy>We talked about that.

00:03:41.380 --> 00:03:43.320
<v Michael Kennedy>So that will actually manage these things.

00:03:44.020 --> 00:03:56.160
<v Michael Kennedy>Like, for example, you can go to say your Flask app and I'm pretty sure you can, I don't see the UI exactly, but I think you can go to it and say, oh, expose this Flask application as a cloud flare tunnel.

00:03:56.570 --> 00:03:56.660
<v Michael Kennedy>Boom.

00:03:57.120 --> 00:03:58.180
<v Michael Kennedy>It's off to the races.

00:03:58.400 --> 00:03:58.920
<v Michael Kennedy>That's pretty cool.

00:03:59.160 --> 00:03:59.400
<v Michael Kennedy>Yeah.

00:03:59.660 --> 00:03:59.800
<v Michael Kennedy>Yeah.

00:04:00.140 --> 00:04:04.880
<v Michael Kennedy>But it also shows you all the local ports that are open and you can go kill them.

00:04:05.050 --> 00:04:09.580
<v Michael Kennedy>So what you can do is you can actually go to either search for a process or a port.

00:04:09.720 --> 00:04:13.660
<v Michael Kennedy>You're like, it says that port, you know, 5,000 or 8,000.

00:04:13.660 --> 00:04:14.340
<v Michael Kennedy>Let's go with 8,000.

00:04:14.460 --> 00:04:14.980
<v Michael Kennedy>It's a little safer.

00:04:15.400 --> 00:04:16.640
<v Michael Kennedy>8,000 is taken.

00:04:17.079 --> 00:04:18.019
<v Michael Kennedy>You can't run your app.

00:04:18.209 --> 00:04:18.340
<v Michael Kennedy>Why?

00:04:18.560 --> 00:04:21.200
<v Michael Kennedy>Just go in there and type 8,000, find the thing and press kill.

00:04:21.310 --> 00:04:25.540
<v Michael Kennedy>Cause you're like stupid clod code left that thing running and I can't find it to kill it.

00:04:25.700 --> 00:04:26.660
<v Michael Kennedy>So I'll do it here.

00:04:26.860 --> 00:04:27.300
<v Michael Kennedy>You know what I mean?

00:04:27.530 --> 00:04:30.240
<v Michael Kennedy>Or you can just see what ports are open, what's running, all sorts of stuff.

00:04:30.440 --> 00:04:31.540
<v Michael Kennedy>And I think it's super neat.

00:04:31.890 --> 00:04:37.160
<v Michael Kennedy>You install it on macOS via homebrew, or you can just download a DMG.

00:04:37.520 --> 00:04:38.860
<v Michael Kennedy>So that's pretty cool.

00:04:39.260 --> 00:04:43.140
<v Michael Kennedy>And yeah, I mean, that's pretty much what I got to say about it, but it is nice.

00:04:43.680 --> 00:04:44.060
<v Brian Okken>That's cool.

00:04:44.480 --> 00:04:44.540
<v Brian Okken>Yeah.

00:04:44.900 --> 00:04:49.640
<v Brian Okken>I don't like this is this obviously I'm not even sure why I'm commenting on this,

00:04:50.820 --> 00:04:56.000
<v Brian Okken>but I most have like one or two ports open when I'm working on a web app

00:04:56.240 --> 00:04:59.800
<v Brian Okken>because I'm not heavy duty web developer, but yeah, it looks neat.

00:05:00.300 --> 00:05:01.900
<v Michael Kennedy>Well, the thing is you might not have very many,

00:05:02.140 --> 00:05:04.440
<v Michael Kennedy>but you can only have one app on that one.

00:05:04.860 --> 00:05:09.220
<v Michael Kennedy>And if it gets lost, especially if the little AI thing goes off

00:05:09.240 --> 00:05:14.060
<v Brian Okken>and then leaves it just dangling you're like oh man yeah you got a rogue agent you got to hunt down

00:05:14.460 --> 00:05:19.420
<v Michael Kennedy>yeah exactly so it's even if you're just doing one it's like it's still valuable yeah yeah it's

00:05:19.440 --> 00:05:26.060
<v Brian Okken>pretty cool neat uh well what am i talking about um fine question i'm going to talk about uh making

00:05:26.080 --> 00:05:33.479
<v Brian Okken>things faster and profiling so henry schreiner sent this to us and um we're he's a fan of the

00:05:33.420 --> 00:05:39.940
<v Brian Okken>friend of the show and we're fans of henry shiner's work so he's a core developer um the article is

00:05:40.100 --> 00:05:47.960
<v Brian Okken>how we made python's packaging library three times faster and this is cool because um packaging is

00:05:48.280 --> 00:05:54.460
<v Brian Okken>is one of the um is one of the heaviest hit uh packages on pypi even though a lot of people

00:05:54.980 --> 00:06:02.280
<v Brian Okken>might not uh pip install it themselves it's used by a lot of other stuff um and um i uh let's see

00:06:02.300 --> 00:06:05.080
<v Brian Okken>I often am doing it when I'll reach for packaging

00:06:05.220 --> 00:06:06.520
<v Brian Okken>if I'm trying to compare versions.

00:06:07.100 --> 00:06:12.880
<v Brian Okken>At runtime, I'll say if I'm testing with something at 3.15

00:06:13.220 --> 00:06:15.040
<v Brian Okken>versus a different one or something like that,

00:06:15.080 --> 00:06:17.720
<v Brian Okken>I'll often use packaging for grabbing versions.

00:06:17.980 --> 00:06:21.840
<v Brian Okken>Anyway, there's a bunch of fun stuff in the packaging package.

00:06:23.060 --> 00:06:25.240
<v Brian Okken>So how did they make it three times faster?

00:06:25.540 --> 00:06:28.000
<v Brian Okken>The article talks about graphing and plotting

00:06:28.180 --> 00:06:30.540
<v Brian Okken>and how he's figuring this out for a while.

00:06:30.920 --> 00:06:37.380
<v Brian Okken>And I'm going to scroll past all of that and talk about the actual updates.

00:06:38.160 --> 00:06:47.300
<v Brian Okken>One of the things I love about this is we often hear about premature optimization is bad.

00:06:47.600 --> 00:06:52.800
<v Brian Okken>But there are times where you see stuff that's taking a while and you're like, I really wish this was faster.

00:06:52.960 --> 00:06:55.460
<v Brian Okken>And so there is a time for optimization.

00:06:56.100 --> 00:06:58.860
<v Brian Okken>And often it goes along something like this.

00:06:59.740 --> 00:07:09.960
<v Brian Okken>You put some profiling together, you try to measure the different parts of it, and then measure it and try to reproduce those, make sure they're consistent times so that they're not random.

00:07:10.260 --> 00:07:12.360
<v Brian Okken>But then you just do like 10% at a time.

00:07:12.620 --> 00:07:19.040
<v Brian Okken>So this is an interesting one of like 10% speed up of just stripping zeros out of stuff.

00:07:20.260 --> 00:07:25.940
<v Brian Okken>They had a reversed list,

00:07:26.280 --> 00:07:29.020
<v Brian Okken>iter tools drop while away to reverse it,

00:07:29.100 --> 00:07:29.940
<v Brian Okken>to strip the zeros.

00:07:30.520 --> 00:07:34.020
<v Brian Okken>And they just made it a little different

00:07:34.440 --> 00:07:38.120
<v Brian Okken>and more actually more readable and less elegant,

00:07:38.600 --> 00:07:39.380
<v Brian Okken>but it's nice.

00:07:39.880 --> 00:07:41.820
<v Brian Okken>So instead of one line,

00:07:41.920 --> 00:07:43.880
<v Brian Okken>there's five lines of code with a for loop,

00:07:44.260 --> 00:07:47.340
<v Brian Okken>but it sped up the whole thing by 10%.

00:07:48.160 --> 00:07:49.580
<v Brian Okken>And that's awesome.

00:07:50.000 --> 00:07:52.620
<v Brian Okken>And then, okay, so that's a little thing, 10% speed up.

00:07:52.840 --> 00:07:59.540
<v Brian Okken>And then a faster regex, 10% to 17% faster on 3.11 and above only.

00:07:59.840 --> 00:08:05.120
<v Brian Okken>And that's another thing is sometimes newer versions of Python have more tools at your disposal.

00:08:05.300 --> 00:08:11.060
<v Brian Okken>So you might have to have two implementations, but why not make it faster for the newest?

00:08:12.000 --> 00:08:13.080
<v Brian Okken>So that's pretty cool.

00:08:14.280 --> 00:08:16.900
<v Brian Okken>Removing, I don't actually get this.

00:08:17.260 --> 00:08:18.400
<v Brian Okken>Removing single disk.

00:08:18.660 --> 00:08:18.980
<v Brian Okken>Oh, yeah.

00:08:19.160 --> 00:08:21.940
<v Brian Okken>Removing single dispatch, 7% faster.

00:08:23.120 --> 00:08:26.480
<v Brian Okken>Remove duplicate version creation, 37% faster.

00:08:26.820 --> 00:08:27.000
<v Brian Okken>Awesome.

00:08:27.720 --> 00:08:30.980
<v Brian Okken>Removing named tuples, 20% faster.

00:08:31.110 --> 00:08:33.159
<v Brian Okken>Just all these different little tiny speedups,

00:08:33.229 --> 00:08:35.300
<v Brian Okken>and they're like 10% to 20%.

00:08:35.300 --> 00:08:37.680
<v Brian Okken>And in the end, it's a lot faster.

00:08:38.180 --> 00:08:44.660
<v Brian Okken>So I really like write-ups on people just taking a little bit befores and afters.

00:08:45.040 --> 00:08:51.400
<v Brian Okken>And that doesn't mean to say if you've got something that looks like the before code that you should speed it up.

00:08:51.550 --> 00:08:54.240
<v Brian Okken>You should measure and make sure that it's readable.

00:08:54.620 --> 00:08:56.980
<v Brian Okken>I mean, I think the first goal is readability.

00:08:57.500 --> 00:08:59.600
<v Brian Okken>Next, measure to see if it's too slow or something.

00:09:00.420 --> 00:09:00.500
<v Brian Okken>Yeah.

00:09:01.140 --> 00:09:06.120
<v Michael Kennedy>Write it in the form of readable, understandable, and then figure out how to make it fast.

00:09:06.380 --> 00:09:06.480
<v Michael Kennedy>Yeah.

00:09:06.700 --> 00:09:07.480
<v Michael Kennedy>If needed.

00:09:07.800 --> 00:09:12.560
<v Brian Okken>Yeah, but there are tools available if you are ready to try to make things faster.

00:09:13.660 --> 00:09:13.940
<v Michael Kennedy>Indeed.

00:09:14.460 --> 00:09:14.820
<v Michael Kennedy>All right.

00:09:15.760 --> 00:09:16.000
<v Michael Kennedy>All right.

00:09:16.160 --> 00:09:18.360
<v Michael Kennedy>I have a, I don't know how to phrase this.

00:09:18.370 --> 00:09:19.140
<v Michael Kennedy>I think it's not good.

00:09:19.500 --> 00:09:22.180
<v Michael Kennedy>Let's call this a not good story, but it's quite the story.

00:09:22.290 --> 00:09:27.040
<v Michael Kennedy>So this is AI's impact on dev companies, open source.

00:09:27.720 --> 00:09:33.140
<v Michael Kennedy>We start with a quote from Simon Wilson's sort of link blog, which itself is a quote.

00:09:33.540 --> 00:09:33.660
<v Michael Kennedy>Okay.

00:09:33.900 --> 00:09:40.040
<v Michael Kennedy>So Adam Watham is the CEO of Tailwind Labs, which is the maker of Tailwind CSS.

00:09:40.680 --> 00:09:45.460
<v Michael Kennedy>And the story about what's happening right now with Tailwind CSS is bonkers.

00:09:46.100 --> 00:09:47.780
<v Michael Kennedy>Like you would have never predicted it.

00:09:48.020 --> 00:09:50.800
<v Michael Kennedy>But once you hear the story of like, ah, yes.

00:09:50.960 --> 00:09:51.080
<v Michael Kennedy>Okay.

00:09:51.720 --> 00:09:58.420
<v Michael Kennedy>So from Adam, he actually did this 30 minute morning walk where he like sort of walks and

00:09:58.580 --> 00:10:01.980
<v Michael Kennedy>talks and it's kind of like a journal, but public or something like that, I guess.

00:10:02.340 --> 00:10:05.820
<v Michael Kennedy>And he says, we had six months left.

00:10:06.160 --> 00:10:10.400
<v Michael Kennedy>He says, I just laid off some of the most talented people I've ever worked with.

00:10:10.540 --> 00:10:11.440
<v Michael Kennedy>and it blink and sucks.

00:10:11.800 --> 00:10:13.280
<v Michael Kennedy>The direct written version is,

00:10:14.580 --> 00:10:18.240
<v Michael Kennedy>this all actually came from this thing called LLMs.txt,

00:10:18.960 --> 00:10:19.820
<v Michael Kennedy>which actually is pretty interesting.

00:10:20.170 --> 00:10:22.360
<v Michael Kennedy>Like robots.txt, but for LLMs,

00:10:22.700 --> 00:10:24.480
<v Michael Kennedy>I'm thinking about putting this on Python bytes and stuff

00:10:24.720 --> 00:10:26.820
<v Michael Kennedy>to like help LLMs be more efficient

00:10:27.140 --> 00:10:28.660
<v Michael Kennedy>working with what we produce.

00:10:29.140 --> 00:10:30.380
<v Michael Kennedy>So if somebody wants to ask a question like,

00:10:30.410 --> 00:10:33.660
<v Michael Kennedy>hey, what did Python bytes say about this?

00:10:33.800 --> 00:10:35.320
<v Michael Kennedy>Like what did Michael and Brian cover here

00:10:35.460 --> 00:10:37.080
<v Michael Kennedy>and what was their advice, right?

00:10:37.340 --> 00:10:39.360
<v Michael Kennedy>If we put that as a, hey, LLM,

00:10:39.740 --> 00:10:42.780
<v Michael Kennedy>you could technically scan the entire system

00:10:42.960 --> 00:10:43.720
<v Michael Kennedy>and try and understand that,

00:10:43.840 --> 00:10:45.580
<v Michael Kennedy>or you could use our search for these keywords

00:10:45.850 --> 00:10:47.380
<v Michael Kennedy>and then here's how you access the transcript

00:10:47.640 --> 00:10:48.720
<v Michael Kennedy>and then parse just, you know what I mean?

00:10:48.820 --> 00:10:49.780
<v Michael Kennedy>You could give like a little advice.

00:10:50.200 --> 00:10:54.200
<v Michael Kennedy>So someone had proposed as a PR to put that onto Tailwind

00:10:54.250 --> 00:10:56.140
<v Michael Kennedy>and said, "Could you please put that

00:10:56.350 --> 00:10:57.580
<v Michael Kennedy>onto the Tailwind documentation

00:10:58.160 --> 00:11:01.040
<v Michael Kennedy>so that we'll be more efficient talking to Tailwind

00:11:01.480 --> 00:11:04.480
<v Michael Kennedy>or asking questions of Tailwind from our AI agents?"

00:11:04.740 --> 00:11:06.720
<v Michael Kennedy>And people lost it, people lost it.

00:11:07.170 --> 00:11:08.120
<v Michael Kennedy>It wasn't good.

00:11:08.600 --> 00:11:11.980
<v Michael Kennedy>And Adam said something to the effect of,

00:11:12.110 --> 00:11:13.740
<v Michael Kennedy>like, this actually is a pretty decent request,

00:11:14.480 --> 00:11:16.640
<v Michael Kennedy>but the reality is that 75% of the people

00:11:16.730 --> 00:11:18.820
<v Michael Kennedy>in our engineering team lost their jobs yesterday

00:11:19.050 --> 00:11:20.580
<v Michael Kennedy>because the brutal impact of AI.

00:11:21.180 --> 00:11:23.780
<v Michael Kennedy>And if I add this feature, it's going to make it worse.

00:11:24.440 --> 00:11:27.380
<v Michael Kennedy>All right, so here's the insane aspect.

00:11:28.040 --> 00:11:30.320
<v Michael Kennedy>If you look at traffic to the,

00:11:30.630 --> 00:11:33.200
<v Michael Kennedy>if you look at downloads, sorry, on NPM,

00:11:33.340 --> 00:11:34.380
<v Michael Kennedy>I guess that's traffic of a form.

00:11:34.480 --> 00:11:37.460
<v Michael Kennedy>If you look at the downloads of Tailwind,

00:11:37.680 --> 00:11:40.420
<v Michael Kennedy>They're up six times year over year.

00:11:40.780 --> 00:11:40.960
<v Michael Kennedy>Wow.

00:11:41.560 --> 00:11:42.840
<v Michael Kennedy>Six times more usage.

00:11:43.420 --> 00:11:45.640
<v Michael Kennedy>Don't you think that would make the product more viable?

00:11:46.200 --> 00:11:46.320
<v Michael Kennedy>No.

00:11:46.840 --> 00:11:52.460
<v Michael Kennedy>Because if you go to the Tailwinds documentation, it's all free, Tailwinds open source, but there's a thing that says get Tailwind Plus.

00:11:52.940 --> 00:11:53.840
<v Michael Kennedy>You see that in the docs.

00:11:54.280 --> 00:12:06.839
<v Michael Kennedy>However, even though there's a 6x increase in usage, there's a 40% drop in traffic to the documentation and revenue is down five times or down 80%.

00:12:06.860 --> 00:12:12.080
<v Michael Kennedy>Why? Because instead of going to the docs to get help, you just say, hey, AI, install Tailwind and do this.

00:12:12.080 --> 00:12:18.140
<v Michael Kennedy>Or you don't even say that. You say, make it pretty. And like Tailwind is the default styling mode of AI.

00:12:18.620 --> 00:12:19.200
<v Michael Kennedy>That's pretty sad, huh?

00:12:20.160 --> 00:12:26.880
<v Brian Okken>Yeah, it definitely is. I don't. Yeah, it sucks. I don't know what the solution is.

00:12:27.120 --> 00:12:32.980
<v Michael Kennedy>I don't either. Avoiding LLMs.txt is probably not the answer, but it's also not a solution for sure.

00:12:33.400 --> 00:12:36.320
<v Michael Kennedy>I mean, it might need a different business model. You know what I mean?

00:12:37.080 --> 00:13:00.100
<v Brian Okken>Yeah. I mean, we've both seen this as well. I was faced with higher server costs on my blog. And then I put in, we talked about this earlier, I put in monitoring to see who it was, and it was mostly robots. And then I cut robots out, and we got zero traffic.

00:13:00.280 --> 00:13:02.300
<v Michael Kennedy>So I'm like, not zero.

00:13:02.300 --> 00:13:03.860
<v Michael Kennedy>That's not the answer either, though, is it?

00:13:04.500 --> 00:13:07.460
<v Michael Kennedy>It's like saying, I do not want to appear in Google because I hate the traffic.

00:13:07.600 --> 00:13:09.860
<v Michael Kennedy>I mean, I know it's not exactly the same, so don't email it.

00:13:10.180 --> 00:13:15.840
<v Brian Okken>But with Google, they said, if you don't let our robots in to scrape your site for our LLMs,

00:13:15.900 --> 00:13:20.120
<v Brian Okken>then we're not going to scrape your site for search traffic either.

00:13:20.500 --> 00:13:22.760
<v Brian Okken>I think that's the thing.

00:13:23.000 --> 00:13:24.300
<v Brian Okken>And that's lame.

00:13:24.900 --> 00:13:29.280
<v Brian Okken>I think that you should be able to say, no, I don't want somebody to scrape my site for AI.

00:13:29.380 --> 00:13:32.100
<v Brian Okken>but please do keep looking at it for search.

00:13:32.740 --> 00:13:34.220
<v Michael Kennedy>We just like, just take a moment

00:13:34.740 --> 00:13:37.180
<v Michael Kennedy>and just say that there are really good alternatives

00:13:37.900 --> 00:13:40.660
<v Michael Kennedy>to Google, like Startpage, like Kaggy.

00:13:41.580 --> 00:13:43.480
<v Brian Okken>Yeah, but a lot of them are all built off

00:13:43.590 --> 00:13:45.540
<v Michael Kennedy>of the same data that Google's selling.

00:13:45.810 --> 00:13:47.300
<v Michael Kennedy>And Startpage is built off the stuff.

00:13:47.470 --> 00:13:49.540
<v Michael Kennedy>So it is in a sense, really, really the same.

00:13:50.400 --> 00:13:51.340
<v Michael Kennedy>Yeah, that's a good point.

00:13:51.420 --> 00:13:52.900
<v Michael Kennedy>Okay, I'm not even done with the story, Brian.

00:13:53.160 --> 00:13:54.880
<v Michael Kennedy>Okay, let's hear the rest of the drama.

00:13:55.620 --> 00:13:56.680
<v Michael Kennedy>Okay, so that's half the story.

00:13:56.820 --> 00:13:58.340
<v Michael Kennedy>There's a really good video by this guy.

00:13:58.360 --> 00:14:00.580
<v Michael Kennedy>I just came across Maximilian Schwarzmuller.

00:14:00.780 --> 00:14:03.020
<v Michael Kennedy>He does a bunch of great developer videos.

00:14:03.180 --> 00:14:04.320
<v Michael Kennedy>It's more of like a-

00:14:04.320 --> 00:14:05.740
<v Michael Kennedy>- And an awesome name.

00:14:05.740 --> 00:14:06.980
<v Michael Kennedy>- I know it is an awesome name.

00:14:06.980 --> 00:14:09.540
<v Michael Kennedy>He's more like a JavaScripty guy,

00:14:09.540 --> 00:14:12.300
<v Michael Kennedy>but he does a lot of just like thought pieces

00:14:12.300 --> 00:14:14.420
<v Michael Kennedy>on programming in general, and he's good.

00:14:14.420 --> 00:14:18.240
<v Michael Kennedy>So he did a 11 minute, 55 second video on this tailwind

00:14:18.240 --> 00:14:20.800
<v Michael Kennedy>is in deep trouble, talks about it,

00:14:20.800 --> 00:14:22.720
<v Michael Kennedy>actually shows a lot of graphs and data.

00:14:22.720 --> 00:14:23.960
<v Michael Kennedy>So it's pretty interesting.

00:14:23.960 --> 00:14:25.900
<v Michael Kennedy>Then the other is a video from the Primogen.

00:14:26.500 --> 00:14:27.820
<v Michael Kennedy>And this is the other side of,

00:14:28.300 --> 00:14:30.780
<v Michael Kennedy>this is another company in the same theme

00:14:32.200 --> 00:14:33.400
<v Michael Kennedy>and Stack Overflow is cooked.

00:14:33.800 --> 00:14:35.780
<v Michael Kennedy>It is insane.

00:14:36.640 --> 00:14:37.720
<v Michael Kennedy>Let me see if I can find a spot here.

00:14:38.080 --> 00:14:39.600
<v Michael Kennedy>Let me see if I can find a spot here with this graph.

00:14:39.860 --> 00:14:42.380
<v Michael Kennedy>So there's an insane graph if you watch that video,

00:14:42.600 --> 00:14:43.540
<v Michael Kennedy>but I can just tell you the words.

00:14:44.200 --> 00:14:45.300
<v Michael Kennedy>I'll tell it to you more, Brian.

00:14:45.680 --> 00:14:47.600
<v Michael Kennedy>So in, I don't have my show notes up,

00:14:47.740 --> 00:14:48.780
<v Michael Kennedy>so I'm about to do this from memory,

00:14:48.960 --> 00:14:52.520
<v Michael Kennedy>but I believe in the first month of Stack Overflow's life,

00:14:52.720 --> 00:14:55.320
<v Michael Kennedy>there was 3,800 questions asked.

00:14:55.700 --> 00:14:56.400
<v Brian Okken>Yeah, in 2009.

00:14:56.640 --> 00:14:57.260
<v Brian Okken>I've got the notes up.

00:14:57.470 --> 00:14:57.720
<v Michael Kennedy>Yeah, okay.

00:14:58.780 --> 00:14:59.500
<v Michael Kennedy>Almost nothing.

00:14:59.580 --> 00:15:00.340
<v Michael Kennedy>I mean, it's just getting going.

00:15:00.480 --> 00:15:00.940
<v Michael Kennedy>It's like a forum.

00:15:01.010 --> 00:15:02.880
<v Michael Kennedy>Like, no, of course, there's going to be almost no questions.

00:15:03.300 --> 00:15:11.040
<v Michael Kennedy>It goes up and it stays 200,000 new questions asked per month almost through the pandemic.

00:15:11.480 --> 00:15:12.500
<v Michael Kennedy>And it starts going down.

00:15:12.630 --> 00:15:14.940
<v Michael Kennedy>And this is not purely from AI.

00:15:15.440 --> 00:15:21.760
<v Michael Kennedy>It's going down like pretty precipitously for two years before ChatGPT comes out.

00:15:22.100 --> 00:15:26.180
<v Michael Kennedy>When it does in like mid-2022, it drops even harder.

00:15:26.490 --> 00:15:28.640
<v Michael Kennedy>So here's an insane stat.

00:15:28.840 --> 00:15:32.520
<v Michael Kennedy>In 2016, there were 200,000 new questions asked at Stack Overflow.

00:15:32.880 --> 00:15:41.500
<v Michael Kennedy>In 2026, well, technically last month in December 2025, there were 3,740-something questions asked.

00:15:41.800 --> 00:15:43.700
<v Michael Kennedy>The same as the first month they opened.

00:15:44.040 --> 00:15:46.380
<v Michael Kennedy>200,000 to three or whatever.

00:15:46.670 --> 00:15:47.160
<v Michael Kennedy>3,000.

00:15:47.400 --> 00:15:48.000
<v Brian Okken>It's insane.

00:15:48.360 --> 00:15:49.560
<v Michael Kennedy>That is insane.

00:15:50.160 --> 00:15:54.940
<v Michael Kennedy>So actually, I think the primary guide's got a premium to prepare your goodbyes.

00:15:55.400 --> 00:15:56.220
<v Michael Kennedy>It's pretty much it.

00:15:56.540 --> 00:16:03.800
<v Michael Kennedy>Now, it does seem to still be going strong, like selling this data, this pure data in a sense, to AI companies.

00:16:03.970 --> 00:16:05.280
<v Michael Kennedy>But for how long is that going to last?

00:16:05.900 --> 00:16:09.460
<v Michael Kennedy>That's like, we don't have any cows left and we can't get milk.

00:16:09.740 --> 00:16:11.820
<v Michael Kennedy>But we got a lot of cheese that's really good in the freezer.

00:16:12.160 --> 00:16:14.500
<v Michael Kennedy>So we can sell that for a while until it's gone.

00:16:15.320 --> 00:16:18.140
<v Brian Okken>Without new questions, there's not new information there.

00:16:19.700 --> 00:16:22.720
<v Brian Okken>And who's answering, even if there are new questions, who's answering them?

00:16:23.140 --> 00:16:26.280
<v Michael Kennedy>Yeah, I bet you half of those 3,000 or 4,000 are like AI generated.

00:16:27.220 --> 00:16:28.260
<v Michael Kennedy>Honestly, I can't believe this.

00:16:28.290 --> 00:16:34.040
<v Michael Kennedy>I knew that they were going down, but 200,000 to a couple thousand is an insane level.

00:16:34.400 --> 00:16:40.020
<v Brian Okken>Yeah, and they were actually one of the better ones as far as ads and sponsors and stuff.

00:16:41.279 --> 00:16:46.160
<v Brian Okken>I mean, Stack Overflow, we make fun of it and stuff, but it's a part of software,

00:16:46.460 --> 00:16:48.139
<v Brian Okken>and it wasn't really that spammy.

00:16:48.860 --> 00:16:52.340
<v Brian Okken>It just was, it didn't have a bunch of pop-ups and stuff.

00:16:52.780 --> 00:16:55.420
<v Brian Okken>So I actually kind of liked Stack Overflow.

00:16:55.880 --> 00:16:56.260
<v Michael Kennedy>I know.

00:16:56.660 --> 00:16:57.640
<v Michael Kennedy>I mean, I don't know.

00:16:57.810 --> 00:16:58.840
<v Michael Kennedy>I don't know exactly how to feel,

00:16:58.960 --> 00:17:01.440
<v Michael Kennedy>but it even went so far as we had the Stack Overflow keyboard

00:17:01.590 --> 00:17:02.600
<v Michael Kennedy>that only had three keys.

00:17:03.340 --> 00:17:03.620
<v Michael Kennedy>Yeah.

00:17:04.420 --> 00:17:04.560
<v Michael Kennedy>Right?

00:17:04.670 --> 00:17:07.160
<v Michael Kennedy>It had the, instead of the controller command,

00:17:07.430 --> 00:17:09.900
<v Michael Kennedy>it had the Stack Overflow logo and then a C and a V.

00:17:10.660 --> 00:17:11.720
<v Michael Kennedy>It's a beautiful joke.

00:17:12.319 --> 00:17:15.140
<v Michael Kennedy>Just, you know, that's how important that used to be.

00:17:15.620 --> 00:17:16.939
<v Brian Okken>Yeah, you take an error message

00:17:16.959 --> 00:17:21.600
<v Brian Okken>and just throw it into Google search and you get a Stack Overflow question answering it.

00:17:21.780 --> 00:17:24.819
<v Brian Okken>That's how you figure stuff out.

00:17:25.439 --> 00:17:25.620
<v Brian Okken>Exactly.

00:17:26.209 --> 00:17:30.040
<v Michael Kennedy>There was a period where we read books and then we copied and pasted from Stack Overflow.

00:17:30.220 --> 00:17:33.420
<v Michael Kennedy>And now I guess we copy and we just take it from AI.

00:17:33.720 --> 00:17:39.500
<v Michael Kennedy>But I think this is noteworthy in a big way in the developer world, right?

00:17:39.520 --> 00:17:40.500
<v Michael Kennedy>This is big.

00:17:40.780 --> 00:17:41.040
<v Brian Okken>Yeah.

00:17:41.320 --> 00:17:46.300
<v Brian Okken>And I mean, I know that the people behind Stack Overflow, there's a lot of money there.

00:17:46.680 --> 00:17:50.560
<v Brian Okken>And I think that the top of the chain, they're probably fine.

00:17:50.920 --> 00:17:54.600
<v Brian Okken>But everybody that got laid off, that's lame.

00:17:55.740 --> 00:17:58.900
<v Brian Okken>But Tailwind has always been a lightweight business model,

00:17:59.060 --> 00:18:01.720
<v Brian Okken>even though they're doing some amazing things.

00:18:02.000 --> 00:18:04.020
<v Brian Okken>And like you said, it's being used by almost everyone.

00:18:04.400 --> 00:18:05.600
<v Brian Okken>So it's crazy.

00:18:05.940 --> 00:18:06.100
<v Brian Okken>Yeah.

00:18:06.700 --> 00:18:07.940
<v Michael Kennedy>Kiva out in the audience points out,

00:18:08.120 --> 00:18:10.100
<v Michael Kennedy>it's insane how symmetric this graph is.

00:18:10.220 --> 00:18:10.640
<v Michael Kennedy>I agree.

00:18:11.000 --> 00:18:11.920
<v Michael Kennedy>It is insane.

00:18:12.180 --> 00:18:14.140
<v Michael Kennedy>It's like almost a perfect trapezoid.

00:18:14.460 --> 00:18:15.200
<v Michael Kennedy>Not quite, but almost.

00:18:15.680 --> 00:18:15.840
<v Michael Kennedy>Yeah.

00:18:16.200 --> 00:18:17.780
<v Michael Kennedy>While I'm pulling up stuff from the comment,

00:18:18.070 --> 00:18:21.320
<v Michael Kennedy>Henry points out that he's just a PyPA member

00:18:21.700 --> 00:18:23.400
<v Michael Kennedy>and builds many, many Python things,

00:18:23.640 --> 00:18:24.640
<v Michael Kennedy>but not quite a core development.

00:18:25.000 --> 00:18:25.480
<v Michael Kennedy>Oh, okay.

00:18:25.720 --> 00:18:27.320
<v Michael Kennedy>Keep the record a little bit.

00:18:27.600 --> 00:18:27.820
<v Brian Okken>Okay.

00:18:28.160 --> 00:18:32.940
<v Brian Okken>Well, Henry Schreiner is a core asset in my learning journey.

00:18:33.290 --> 00:18:34.360
<v Brian Okken>I guess I'll put it that way.

00:18:35.060 --> 00:18:35.620
<v Brian Okken>Over to you.

00:18:35.940 --> 00:18:36.180
<v Brian Okken>Okay.

00:18:37.220 --> 00:18:40.900
<v Brian Okken>I wanted to talk about Henry Schreiner's art.

00:18:41.000 --> 00:18:41.060
<v Brian Okken>No.

00:18:42.320 --> 00:18:42.740
<v Brian Okken>Similar.

00:18:43.080 --> 00:18:48.060
<v Brian Okken>So we talked about Henry Schreiner's article on Python packaging and making it faster.

00:18:48.520 --> 00:18:53.040
<v Brian Okken>And it reminded me of something that I wanted to talk about for a while and I just forgot about.

00:18:53.340 --> 00:18:54.720
<v Brian Okken>So thanks, Henry, for the reminder.

00:18:55.200 --> 00:18:58.920
<v Brian Okken>And it was because I was and it's around profiling.

00:18:59.160 --> 00:19:03.220
<v Brian Okken>So I was looking through not the packaging library.

00:19:03.220 --> 00:19:09.600
<v Brian Okken>I was looking through FastAPI once looking at their I kind of do this.

00:19:09.620 --> 00:19:11.220
<v Brian Okken>I kind of troll sometimes.

00:19:11.560 --> 00:19:16.740
<v Brian Okken>go through GitHub workflows of different packages to see what sort of tricks they're using in their

00:19:16.860 --> 00:19:20.880
<v Michael Kennedy>workflows. And I remember... It's like the view source of the modern day.

00:19:20.880 --> 00:19:25.760
<v Brian Okken>Yeah, workflows. And it's one of the wonderful things about open source packages is you can do

00:19:25.860 --> 00:19:32.440
<v Brian Okken>this. So FastAPI, plus the folks at FastAPI are really great about trying to stay cutting edge

00:19:32.660 --> 00:19:39.760
<v Brian Okken>and helping other people. So looking through here, I saw COD speed benchmarks. And I'm like,

00:19:39.800 --> 00:19:47.480
<v Brian Okken>what is this so um that's my topic right now is the cod speed tool um and um it's probably maybe

00:19:47.580 --> 00:19:53.420
<v Brian Okken>it's code speed but it's spelled cod so i'm going to pronounce it cod speed um it could be measured

00:19:53.540 --> 00:20:00.780
<v Michael Kennedy>in like how fast does a cod swim in the ocean and this is like a is it is it a laden cod or a uh

00:20:01.700 --> 00:20:06.100
<v Brian Okken>a heavily laden cut bite your knee caps off get back here

00:20:07.480 --> 00:20:23.780
<v Brian Okken>So I'll talk about the actual tool, but as we're looking through FastAPI, there's also in the merge requests for new features, there's a performance report that is linked and you can go and take a look at it.

00:20:23.840 --> 00:20:28.760
<v Brian Okken>If you click on that, you go and see, like, you can go and poke around at that particular

00:20:28.980 --> 00:20:29.400
<v Brian Okken>merge request.

00:20:29.540 --> 00:20:30.440
<v Brian Okken>I'm looking at the overview.

00:20:30.920 --> 00:20:39.480
<v Brian Okken>His FastAPI on codspeed.io has this graph of basically making is not very noisy of like

00:20:39.860 --> 00:20:44.840
<v Brian Okken>the different times they've measured things and how the metrics, the performance metrics

00:20:45.100 --> 00:20:45.700
<v Brian Okken>have gone up and down.

00:20:45.760 --> 00:20:47.080
<v Brian Okken>And it's really kind of cool.

00:20:47.120 --> 00:20:48.300
<v Brian Okken>So I was like, can I use this?

00:20:49.040 --> 00:20:49.260
<v Brian Okken>Yes.

00:20:50.060 --> 00:20:51.240
<v Brian Okken>So I'm going to try this out.

00:20:51.240 --> 00:20:51.940
<v Brian Okken>I haven't tried it yet.

00:20:52.160 --> 00:20:53.780
<v Brian Okken>but at codspeed.io.

00:20:54.280 --> 00:20:57.260
<v Brian Okken>And there's a nice rabbit logo, which is nice.

00:20:57.600 --> 00:21:01.480
<v Brian Okken>Anyway, it integrates into dev and CI workflows

00:21:01.690 --> 00:21:03.760
<v Brian Okken>to measure performance, detect regressions.

00:21:04.160 --> 00:21:08.240
<v Brian Okken>And if it was just a paid tool,

00:21:08.530 --> 00:21:10.440
<v Brian Okken>I wouldn't probably be covering it.

00:21:10.620 --> 00:21:13.080
<v Brian Okken>But it's one of those awesome tools

00:21:13.360 --> 00:21:16.240
<v Brian Okken>that's actually not that expensive per month

00:21:16.310 --> 00:21:18.560
<v Brian Okken>if you're actually paying for it for your project,

00:21:19.060 --> 00:21:20.060
<v Brian Okken>for a commercial product.

00:21:20.300 --> 00:21:22.860
<v Brian Okken>But it's free for open source projects.

00:21:23.340 --> 00:21:25.720
<v Brian Okken>So I love those sorts of things.

00:21:25.870 --> 00:21:28.440
<v Brian Okken>They're given back to the community with free tools.

00:21:28.720 --> 00:21:29.040
<v Brian Okken>It's great.

00:21:29.420 --> 00:21:37.300
<v Brian Okken>So what I wanted to talk about is, if we go back to the homepage, it's pretty cool.

00:21:37.650 --> 00:21:43.200
<v Brian Okken>One of the things it talks about is catching performance and not noisy metrics.

00:21:43.430 --> 00:21:47.579
<v Brian Okken>So I'm not sure how they're doing this, but they're saying that the traditional metrics

00:21:47.600 --> 00:21:48.820
<v Brian Okken>kind of jump around a lot,

00:21:48.980 --> 00:21:51.360
<v Brian Okken>but that cod speed has got a small variance.

00:21:51.820 --> 00:21:55.220
<v Michael Kennedy>It's possible that they run this on dedicated hardware.

00:21:55.660 --> 00:21:58.580
<v Michael Kennedy>So you're not subjected to other things on the VPC.

00:21:58.600 --> 00:21:59.020
<v Michael Kennedy>Other noise.

00:21:59.580 --> 00:21:59.680
<v Michael Kennedy>Yeah.

00:22:01.000 --> 00:22:03.600
<v Brian Okken>So they're doing flame graphs to pinpoint problems

00:22:04.120 --> 00:22:05.900
<v Brian Okken>and speed ups and slow downs.

00:22:06.440 --> 00:22:08.480
<v Brian Okken>But one of the things I was really impressed with

00:22:08.680 --> 00:22:10.080
<v Brian Okken>is right there on the front page,

00:22:10.140 --> 00:22:13.480
<v Brian Okken>they tell you that you can design performance tests,

00:22:13.660 --> 00:22:15.880
<v Brian Okken>integrate with your CI workflow and get reports.

00:22:16.360 --> 00:22:19.140
<v Brian Okken>And there's like a Python button you can click on.

00:22:19.140 --> 00:22:21.880
<v Brian Okken>And it's like, oh, you just take a, do a pytest.

00:22:23.040 --> 00:22:25.660
<v Brian Okken>You just mark whatever test with pytest mark benchmark.

00:22:26.120 --> 00:22:28.160
<v Brian Okken>And those are the ones that are used in your benchmarks.

00:22:28.600 --> 00:22:28.980
<v Brian Okken>It's easy.

00:22:29.560 --> 00:22:31.820
<v Brian Okken>You're already using them for testing your code.

00:22:31.920 --> 00:22:33.240
<v Brian Okken>So you can just grab some of your,

00:22:33.640 --> 00:22:36.380
<v Brian Okken>maybe some of your high level tests that test the whole system

00:22:37.200 --> 00:22:38.820
<v Brian Okken>and try to hit and hit, you know,

00:22:39.000 --> 00:22:41.320
<v Brian Okken>grab a handful of them that hit most of your system.

00:22:41.760 --> 00:22:42.140
<v Brian Okken>Might be good.

00:22:42.400 --> 00:22:43.560
<v Brian Okken>You can throw them on all of them.

00:22:43.900 --> 00:22:44.440
<v Brian Okken>Maybe, I don't know.

00:22:45.620 --> 00:22:47.260
<v Brian Okken>And then what do you do in CI?

00:22:47.620 --> 00:22:50.920
<v Brian Okken>So once you try to integrate it in CI,

00:22:51.820 --> 00:22:53.900
<v Brian Okken>there's tabs for GitLab and GitHub.

00:22:54.380 --> 00:22:56.800
<v Brian Okken>But for GitHub Actions,

00:22:57.550 --> 00:23:00.160
<v Brian Okken>they have their own action that you can use.

00:23:00.160 --> 00:23:01.300
<v Brian Okken>And you just say, use that,

00:23:01.500 --> 00:23:04.000
<v Brian Okken>and then run whatever your code is.

00:23:04.200 --> 00:23:06.620
<v Brian Okken>So I went back to, what, FastAPI's workflow

00:23:06.710 --> 00:23:07.580
<v Brian Okken>to see what that was.

00:23:08.000 --> 00:23:10.400
<v Brian Okken>And their metrics, when they're running,

00:23:11.400 --> 00:23:12.740
<v Brian Okken>they're just running pytest.

00:23:12.740 --> 00:23:14.760
<v Brian Okken>It looks like they give it a cod speed flag.

00:23:15.020 --> 00:23:18.580
<v Brian Okken>I don't know what that does, but maybe it does some cod speed stuff.

00:23:19.060 --> 00:23:20.380
<v Brian Okken>So just fun.

00:23:20.850 --> 00:23:23.520
<v Brian Okken>I thought it'd be good to give a shout out to these folks.

00:23:23.740 --> 00:23:27.840
<v Brian Okken>And I'll try it out on one of my projects and maybe report back how it's going.

00:23:28.160 --> 00:23:30.880
<v Brian Okken>But you can look directly how FastAPI is using it.

00:23:30.880 --> 00:23:31.300
<v Brian Okken>It's pretty cool.

00:23:31.820 --> 00:23:33.600
<v Michael Kennedy>Yeah, two quick real-time follow-ups.

00:23:33.800 --> 00:23:41.780
<v Michael Kennedy>I'm going to be interviewing Sebastian Ramirez and his team about FastAPI cloud tomorrow on Talk Python.

00:23:42.140 --> 00:23:42.420
<v Michael Kennedy>Nice.

00:23:43.160 --> 00:23:45.780
<v Michael Kennedy>So maybe if I can keep it in my mind,

00:23:45.860 --> 00:23:47.660
<v Michael Kennedy>I'll ask them about this as well.

00:23:47.740 --> 00:23:48.340
<v Michael Kennedy>It's pretty interesting.

00:23:48.800 --> 00:23:48.860
<v Michael Kennedy>Yeah.

00:23:49.260 --> 00:23:50.480
<v Michael Kennedy>But if people want to watch that live,

00:23:50.600 --> 00:23:51.220
<v Michael Kennedy>that's tomorrow morning.

00:23:51.500 --> 00:23:55.540
<v Michael Kennedy>And then Henry points out that Astral uses COD Speed.

00:23:56.020 --> 00:23:57.860
<v Michael Kennedy>And that was mentioned when people are asking about

00:23:58.160 --> 00:23:59.500
<v Michael Kennedy>proper benchmarking for packaging.

00:24:00.180 --> 00:24:01.860
<v Brian Okken>That might have been where I saw it.

00:24:03.039 --> 00:24:03.700
<v Brian Okken>All right.

00:24:04.799 --> 00:24:06.460
<v Brian Okken>Well, those are our topics.

00:24:07.600 --> 00:24:08.540
<v Brian Okken>Do you have any extras for us?

00:24:09.000 --> 00:24:10.440
<v Michael Kennedy>Let's see what I have.

00:24:10.540 --> 00:24:12.620
<v Michael Kennedy>I indeed do have some extras.

00:24:13.060 --> 00:24:18.480
<v Michael Kennedy>So remember how I talked about DevOps, Python, supply chain security made easy,

00:24:18.740 --> 00:24:21.760
<v Michael Kennedy>and Python supply chain security made easy and all that.

00:24:21.770 --> 00:24:27.520
<v Michael Kennedy>And I gave some examples using pip audit, how to set up cached build time checks

00:24:27.980 --> 00:24:32.560
<v Michael Kennedy>so that your Docker images won't build if there's a CVE detected.

00:24:32.900 --> 00:24:33.200
<v Michael Kennedy>Oh, yeah.

00:24:33.560 --> 00:24:34.400
<v Michael Kennedy>Well, boy, oh, boy.

00:24:34.770 --> 00:24:38.200
<v Michael Kennedy>Are there more CVEs in the PyPI space that I realized?

00:24:38.840 --> 00:24:42.359
<v Michael Kennedy>Because just middle of last week, I couldn't ship Python bytes

00:24:42.380 --> 00:24:44.480
<v Michael Kennedy>because there's a vulnerability in here.

00:24:44.710 --> 00:24:45.460
<v Michael Kennedy>We're not going to let it out.

00:24:45.880 --> 00:24:47.060
<v Michael Kennedy>So here's the cool thing.

00:24:47.330 --> 00:24:48.280
<v Michael Kennedy>It absolutely caught it.

00:24:48.280 --> 00:24:49.540
<v Michael Kennedy>It wouldn't let me release a new one,

00:24:49.920 --> 00:24:51.180
<v Michael Kennedy>but it is a hassle.

00:24:51.520 --> 00:24:54.240
<v Michael Kennedy>And I've also run into a little bit of a bigger hassle,

00:24:54.350 --> 00:24:56.260
<v Michael Kennedy>not a bigger, an unforeseen hassle.

00:24:56.390 --> 00:24:57.800
<v Michael Kennedy>I said, okay, well, what we're going to do

00:24:57.810 --> 00:24:59.860
<v Michael Kennedy>is we're going to delay updating to the new thing

00:25:00.200 --> 00:25:03.020
<v Michael Kennedy>by one week to make sure that that stuff gets fixed.

00:25:03.440 --> 00:25:05.920
<v Michael Kennedy>Well, turns out when they find a problem,

00:25:05.990 --> 00:25:07.300
<v Michael Kennedy>they fix it and they release it that day.

00:25:07.500 --> 00:25:08.880
<v Michael Kennedy>But if I apply that technique,

00:25:09.070 --> 00:25:11.760
<v Michael Kennedy>it doesn't get rolled into my stuff for a week.

00:25:12.420 --> 00:25:17.120
<v Michael Kennedy>So got to be a little bit careful to just sort of pin some stuff for a little bit or not.

00:25:17.670 --> 00:25:20.000
<v Michael Kennedy>Just don't update the dependencies until you get that.

00:25:20.090 --> 00:25:22.200
<v Michael Kennedy>Or if it's not, you know, whatever you're going to do about it, right?

00:25:22.380 --> 00:25:24.700
<v Michael Kennedy>But yeah, it works because I couldn't release the website

00:25:24.920 --> 00:25:28.260
<v Michael Kennedy>till I like manually put different versions in to make it skip those issues.

00:25:28.620 --> 00:25:29.540
<v Michael Kennedy>That's good. It's a good thing.

00:25:29.840 --> 00:25:31.000
<v Michael Kennedy>All right, on to the next one.

00:25:31.900 --> 00:25:34.000
<v Michael Kennedy>You probably have heard, Brian, that you should,

00:25:34.460 --> 00:25:37.880
<v Michael Kennedy>anytime you're doing security, you need to have a decent password.

00:25:37.990 --> 00:25:41.640
<v Michael Kennedy>You know this as a user, but if you build anything that has user auth,

00:25:41.960 --> 00:25:46.760
<v Michael Kennedy>well you want to have some level complexity i feel like there's so many web builders out there that

00:25:47.000 --> 00:25:52.300
<v Michael Kennedy>just suck so bad you're like how do they let you behind a keyboard for example one of my banks this

00:25:52.300 --> 00:26:00.120
<v Michael Kennedy>is a international bank limits my password length not minimum maximum to like 12 characters that's

00:26:00.160 --> 00:26:03.980
<v Michael Kennedy>insane that is just the stupidest i'm like are you putting that straight in the database because

00:26:04.080 --> 00:26:07.640
<v Michael Kennedy>if you're putting that like if that's because that's a database constraint you better not be

00:26:07.620 --> 00:26:08.940
<v Michael Kennedy>putting my password straight in the database.

00:26:08.960 --> 00:26:09.460
<v Michael Kennedy>You know what I mean?

00:26:09.840 --> 00:26:10.200
<v Michael Kennedy>Really bad.

00:26:10.960 --> 00:26:13.240
<v Michael Kennedy>But in the extreme end--

00:26:13.400 --> 00:26:16.880
<v Brian Okken>Does the length affect what the hash length looks like?

00:26:16.880 --> 00:26:18.680
<v Michael Kennedy>No, the hash is the same length from one character

00:26:18.840 --> 00:26:19.480
<v Michael Kennedy>and a million characters.

00:26:20.340 --> 00:26:21.540
<v Michael Kennedy>That's why I'm sus of it.

00:26:22.880 --> 00:26:25.660
<v Michael Kennedy>But there are actually some nuanced aspects.

00:26:26.220 --> 00:26:30.020
<v Michael Kennedy>So if you're using MD5 to hash your passwords, no.

00:26:30.740 --> 00:26:31.040
<v Michael Kennedy>Don't do it.

00:26:31.040 --> 00:26:31.680
<v Michael Kennedy>Please don't do it.

00:26:31.900 --> 00:26:34.500
<v Michael Kennedy>But there's some really nice things you can do.

00:26:35.080 --> 00:26:36.780
<v Michael Kennedy>you can use more modern ones.

00:26:37.670 --> 00:26:39.780
<v Michael Kennedy>And especially something that you can do

00:26:39.900 --> 00:26:41.200
<v Michael Kennedy>that's really powerful is to use

00:26:41.340 --> 00:26:43.280
<v Michael Kennedy>what are called memory hard problems.

00:26:43.720 --> 00:26:47.460
<v Michael Kennedy>So cracking passwords is an embarrassingly parallel problem

00:26:47.680 --> 00:26:49.240
<v Michael Kennedy>in that like I've got a hash

00:26:49.610 --> 00:26:51.680
<v Michael Kennedy>and I'm gonna try a bunch of different stuff against it.

00:26:51.680 --> 00:26:52.420
<v Michael Kennedy>And if I got a GPU,

00:26:52.720 --> 00:26:55.000
<v Michael Kennedy>maybe I run like 4,000 variations in parallel.

00:26:55.680 --> 00:26:57.260
<v Michael Kennedy>And if any of those match, then we call it good,

00:26:57.580 --> 00:26:58.500
<v Michael Kennedy>you know, and use all the cores.

00:26:58.960 --> 00:27:01.240
<v Michael Kennedy>That's because GPUs scale compute super well,

00:27:01.360 --> 00:27:02.560
<v Michael Kennedy>but you know what they don't scale well?

00:27:02.740 --> 00:27:03.080
<v Michael Kennedy>Memory.

00:27:03.760 --> 00:27:07.800
<v Michael Kennedy>So one of the new-ish algorithms is called Argon2.

00:27:08.180 --> 00:27:13.820
<v Michael Kennedy>Really highly recommended because it is not subject to this brute force attack.

00:27:14.380 --> 00:27:17.120
<v Michael Kennedy>Because instead of using a lot of compute, it used a lot of memory.

00:27:17.200 --> 00:27:19.640
<v Michael Kennedy>So you can't parallelize that as easy, right?

00:27:19.720 --> 00:27:23.960
<v Michael Kennedy>You're like, well, each hash takes, I don't know, 15 megs to do an attempt.

00:27:24.420 --> 00:27:27.900
<v Michael Kennedy>So, you know, how many of those can you parallelize before you run out of memory sort of thing, right?

00:27:28.260 --> 00:27:33.040
<v Michael Kennedy>Well, it turns out that this has become a point of a problem.

00:27:33.520 --> 00:27:40.480
<v Michael Kennedy>So hackers have started using, as a distributed denial of service type of thing, very long passwords.

00:27:41.050 --> 00:27:43.800
<v Michael Kennedy>So like one megabytes worth of text of password.

00:27:44.340 --> 00:27:51.400
<v Michael Kennedy>Because the Argon2 and the memory hard ones, the bigger the password is, the bigger the text is, the more memory they use.

00:27:52.740 --> 00:28:00.400
<v Michael Kennedy>So if you just jam like an insane amount of text, all of a sudden it becomes not just memory hard for hackers, but even for your server.

00:28:00.410 --> 00:28:02.580
<v Michael Kennedy>It's like, okay, this is off the charts, right?

00:28:03.060 --> 00:28:05.040
<v Michael Kennedy>So I just want to put this out there on people's radar.

00:28:05.660 --> 00:28:06.860
<v Michael Kennedy>Like Prudus out there says,

00:28:07.300 --> 00:28:09.000
<v Michael Kennedy>my bank also restricts password length.

00:28:09.480 --> 00:28:10.420
<v Michael Kennedy>Boo banks, they suck.

00:28:10.800 --> 00:28:13.060
<v Michael Kennedy>But maybe they shouldn't allow a million characters,

00:28:13.740 --> 00:28:15.680
<v Michael Kennedy>like limited to 100 or 50.

00:28:16.080 --> 00:28:17.880
<v Michael Kennedy>Something way bigger than you're going to do,

00:28:18.000 --> 00:28:20.040
<v Michael Kennedy>but like not unbounded, right?

00:28:20.180 --> 00:28:21.120
<v Michael Kennedy>Don't just say less than.

00:28:21.500 --> 00:28:22.400
<v Michael Kennedy>It's a super easy check,

00:28:22.660 --> 00:28:25.980
<v Michael Kennedy>but this is definitely something to keep your radar on.

00:28:26.140 --> 00:28:28.760
<v Brian Okken>Character restrictions are terrible also.

00:28:29.020 --> 00:28:29.780
<v Brian Okken>The ones that say like,

00:28:29.820 --> 00:28:31.480
<v Brian Okken>you can't use some special characters.

00:28:31.880 --> 00:28:34.140
<v Brian Okken>Like, why would you not be able to use special characters?

00:28:34.600 --> 00:28:34.880
<v Brian Okken>Exactly.

00:28:35.660 --> 00:28:37.860
<v Michael Kennedy>I honestly think like a good chunk of this,

00:28:38.080 --> 00:28:39.800
<v Michael Kennedy>and maybe this is the bank thing as well,

00:28:39.870 --> 00:28:41.180
<v Michael Kennedy>is like it's a tech support thing.

00:28:41.440 --> 00:28:44.900
<v Michael Kennedy>Somebody who is like 78, doesn't really know what they're doing,

00:28:45.420 --> 00:28:46.480
<v Michael Kennedy>can't type in their password.

00:28:47.020 --> 00:28:48.320
<v Michael Kennedy>They're like, I called tech support,

00:28:48.670 --> 00:28:50.260
<v Michael Kennedy>and they're going to help me type it in or something.

00:28:50.420 --> 00:28:51.140
<v Michael Kennedy>I don't even know.

00:28:51.300 --> 00:28:54.760
<v Michael Kennedy>But I feel like it's, you know, restrict the characters use

00:28:54.850 --> 00:28:55.680
<v Michael Kennedy>so they're more legible.

00:28:56.150 --> 00:28:56.400
<v Michael Kennedy>I don't know.

00:28:56.500 --> 00:28:58.320
<v Michael Kennedy>But why would you allow an L and a 1?

00:28:58.370 --> 00:28:58.700
<v Michael Kennedy>I don't know.

00:28:58.800 --> 00:28:59.380
<v Michael Kennedy>It's all messed up.

00:29:01.160 --> 00:29:05.600
<v Michael Kennedy>or an o and a zero like can't use zeros you only can use those or vice versa well the ones that

00:29:05.720 --> 00:29:11.720
<v Brian Okken>like require you to use a number also it just seems weird it's like these particular like 10

00:29:12.180 --> 00:29:18.500
<v Brian Okken>characters are special and we need one of those 10 to be in of of all the possible characters these

00:29:18.780 --> 00:29:23.360
<v Brian Okken>10. that's a really good point makes me so frustrated i i have uh one password generate

00:29:23.540 --> 00:29:27.120
<v Michael Kennedy>these like ones that are easier to type if you got to type them on your phone or something but they're

00:29:27.060 --> 00:29:33.300
<v Michael Kennedy>like 30 characters and capital words, lowercase words, dashes, and it says, you don't have

00:29:33.600 --> 00:29:35.420
<v Michael Kennedy>a number or a special character.

00:29:35.440 --> 00:29:38.380
<v Michael Kennedy>I'm like, do you really think it's going to make a difference if there's an exclamation

00:29:38.600 --> 00:29:40.500
<v Michael Kennedy>mark on this 30 character random?

00:29:40.660 --> 00:29:41.280
<v Michael Kennedy>Like, no.

00:29:41.720 --> 00:29:43.060
<v Michael Kennedy>Anyway, I am here with you.

00:29:43.120 --> 00:29:43.280
<v Michael Kennedy>All right.

00:29:43.880 --> 00:29:49.960
<v Michael Kennedy>Last extra, I sold my computer and bought a new one at this place called Swappa.

00:29:50.120 --> 00:29:53.959
<v Michael Kennedy>So I kind of want to talk about Swappa really quick, because I just think this is a good

00:29:54.240 --> 00:29:57.520
<v Michael Kennedy>Good alternative to buying computers from Apple directly.

00:29:57.850 --> 00:30:00.740
<v Michael Kennedy>It's kind of like eBay, but specifically for computers.

00:30:01.340 --> 00:30:03.160
<v Michael Kennedy>So you don't buy it from the company.

00:30:03.660 --> 00:30:07.500
<v Michael Kennedy>They facilitate you buying it from another person, which I think is kind of interesting.

00:30:07.900 --> 00:30:08.080
<v Michael Kennedy>Okay.

00:30:08.220 --> 00:30:13.880
<v Michael Kennedy>So I had this Mac mini super minimum version that I had bought with some trade-ins that

00:30:13.980 --> 00:30:15.940
<v Michael Kennedy>effectively I paid like 360 bucks.

00:30:16.460 --> 00:30:24.040
<v Michael Kennedy>I sold it for $600 on here and then turned around and bought a maxed out Mac Mini Pro version,

00:30:24.500 --> 00:30:31.240
<v Michael Kennedy>which has got like 14 cores and lots more memory, like a lot of upgrades for like $1,700 instead of $3,000.

00:30:31.580 --> 00:30:35.440
<v Michael Kennedy>And you apply the $600 and it gets like, hey, that's almost nothing in price.

00:30:36.580 --> 00:30:41.760
<v Michael Kennedy>So someone was saying like, oh, hey, I don't have an Apple Silicon thing and I need to do builds for it.

00:30:41.760 --> 00:30:42.700
<v Michael Kennedy>And what a hassle that is.

00:30:42.980 --> 00:30:48.480
<v Michael Kennedy>So like even the most brand new Mac minis are for sale for like four or 500 bucks.

00:30:48.610 --> 00:30:52.000
<v Michael Kennedy>But if you look and you just want, I just need an Apple Silicon thing.

00:30:52.520 --> 00:30:58.640
<v Michael Kennedy>You go to the 2020 ones and it's like 280 bucks for a new, not new, but mint ish computer,

00:30:58.780 --> 00:30:58.880
<v Michael Kennedy>right?

00:30:58.980 --> 00:31:01.000
<v Michael Kennedy>Like a decent M1 if you need to grab.

00:31:01.240 --> 00:31:04.440
<v Michael Kennedy>Anyway, I thought that just throw that out there because I had a nice experience both

00:31:04.600 --> 00:31:06.040
<v Michael Kennedy>buying and selling my computers there.

00:31:06.130 --> 00:31:10.240
<v Michael Kennedy>And now I got like a really maxed out one, which I used to make my unit test go twice

00:31:10.370 --> 00:31:10.720
<v Michael Kennedy>as fast.

00:31:10.920 --> 00:31:11.220
<v Brian Okken>Nice.

00:31:11.510 --> 00:31:11.980
<v Brian Okken>That was fun.

00:31:12.420 --> 00:31:12.520
<v Brian Okken>Yeah.

00:31:12.800 --> 00:31:21.640
<v Brian Okken>nice uh segue there uh so uh as an extra i've got um actually so the you all know i've been

00:31:21.740 --> 00:31:28.520
<v Brian Okken>working on a new book so uh lean tdd and um i'm kind of excited about this update because

00:31:29.220 --> 00:31:35.520
<v Brian Okken>i was working on just the next chapter and then it was getting big and i was writing a lot so i

00:31:35.640 --> 00:31:40.359
<v Brian Okken>decided to break it up so um i split the split the book into three parts there's foundations

00:31:40.740 --> 00:31:42.620
<v Brian Okken>that's talking about lean and TDD.

00:31:43.240 --> 00:31:45.060
<v Brian Okken>And I think I want to expand the TDD.

00:31:45.120 --> 00:31:47.020
<v Brian Okken>I've got some questions on test-driven development

00:31:47.260 --> 00:31:48.580
<v Brian Okken>from people that were new to it.

00:31:48.800 --> 00:31:51.000
<v Brian Okken>I just sort of assumed everybody knew about TDD.

00:31:52.220 --> 00:31:54.040
<v Brian Okken>So I'll probably expand that later.

00:31:54.660 --> 00:31:56.620
<v Brian Okken>But so I've got foundations.

00:31:57.220 --> 00:31:59.640
<v Brian Okken>And then what I released today, this morning,

00:32:00.000 --> 00:32:03.840
<v Brian Okken>was, what is it, one, two, three, four, five, six, seven, eight,

00:32:04.220 --> 00:32:09.240
<v Brian Okken>nine new chapters on part two, which is lean TDD practices.

00:32:10.360 --> 00:32:16.440
<v Brian Okken>and so instead of dumping this all in one big chapter i put it i split it all up and some of

00:32:16.440 --> 00:32:21.020
<v Brian Okken>these are to be fair i mean in pdf form some of these are a couple pages so there'll be like

00:32:21.240 --> 00:32:27.080
<v Brian Okken>three or four pages in your e-pub but they're uh i i don't want to keep it's it's a lean book as

00:32:27.180 --> 00:32:34.460
<v Brian Okken>well so it's i think that the total right now i'm up to like 70 pages um after this i do want to try

00:32:34.400 --> 00:32:39.620
<v Brian Okken>to wrap this up by the end of this month still. So I got a couple of weeks left. I've got the last

00:32:39.900 --> 00:32:44.380
<v Brian Okken>part is considerations. I want to cover the role of test engineers, if you have them on your team,

00:32:44.740 --> 00:32:51.640
<v Brian Okken>and also talk about test coverage and monitoring. But so that's only a few topics I got left,

00:32:52.120 --> 00:32:59.259
<v Brian Okken>and that'll wrap up the first draft. So excited about, I've been really excited about the flow and

00:32:59.280 --> 00:33:05.160
<v Brian Okken>getting this in here it is funny though um things that you think you just know in your head when you

00:33:05.170 --> 00:33:11.240
<v Brian Okken>try to write it down in a sequential form it's like wait i how should i phrase this i i thought

00:33:11.240 --> 00:33:16.500
<v Brian Okken>i could just talk about this easy but trying to get it out of your head is um yeah sometimes tricky

00:33:16.740 --> 00:33:24.799
<v Brian Okken>so that's my thing um also appreciate so i i had set up uh github um uh repo that doesn't

00:33:24.820 --> 00:33:31.920
<v Brian Okken>have the book, but it has just a place for stuff. It's Lean TDD book under Aachen for feedback.

00:33:32.580 --> 00:33:38.339
<v Brian Okken>And not very many people were using it, but just recently, I want to shout out to Timothy Malahy.

00:33:39.880 --> 00:33:45.380
<v Brian Okken>He gave me a bunch of stuff, like look through a bunch of typos. I really appreciate that.

00:33:46.280 --> 00:33:52.240
<v Brian Okken>And then some other ideas about maybe expanding on some sections. So I like the feedback.

00:33:52.480 --> 00:33:53.960
<v Brian Okken>Awesome. Congrats on the progress too.

00:33:54.240 --> 00:33:58.800
<v Brian Okken>Ah, thanks. Yeah, that's my extra. How about something funny?

00:33:59.140 --> 00:34:05.660
<v Michael Kennedy>Yeah, let's do something funny over here. So this one is about how amazing agentic coding is,

00:34:05.840 --> 00:34:08.620
<v Michael Kennedy>even if you don't even know anything about programming. You don't know anything about

00:34:08.659 --> 00:34:12.560
<v Michael Kennedy>the web, Brian. You can do it. Here's a quote. I believe this is on Reddit.

00:34:12.980 --> 00:34:19.600
<v Michael Kennedy>Claude Code is blanking insane. I know literally nothing, all caps, about coding. Zero, all caps.

00:34:19.980 --> 00:34:22.520
<v Michael Kennedy>and I built a fully functioning web app in minutes.

00:34:23.620 --> 00:34:25.600
<v Michael Kennedy>Check it out at localhost.3000.

00:34:30.540 --> 00:34:30.639
<v Michael Kennedy>Yeah.

00:34:31.159 --> 00:34:31.300
<v Michael Kennedy>Nope.

00:34:31.760 --> 00:34:31.820
<v Michael Kennedy>Nope.

00:34:31.840 --> 00:34:33.240
<v Michael Kennedy>We're not going to be checking it out at 3000

00:34:33.419 --> 00:34:34.040
<v Michael Kennedy>because you know nothing.

00:34:36.580 --> 00:34:37.020
<v Michael Kennedy>That's funny.

00:34:37.800 --> 00:34:41.139
<v Michael Kennedy>I think that captures the end of 2025 vibes

00:34:41.280 --> 00:34:43.200
<v Michael Kennedy>is just like, it's amazing and terrible.

00:34:44.240 --> 00:34:44.540
<v Michael Kennedy>Yeah.

00:34:45.179 --> 00:34:49.159
<v Michael Kennedy>Well, I mean, when do we get AIs that can deploy for you?

00:34:49.379 --> 00:34:50.240
<v Brian Okken>Well, are we there yet?

00:34:50.240 --> 00:34:51.220
<v Brian Okken>I don't think we're that far away.

00:34:51.639 --> 00:34:55.919
<v Michael Kennedy>I just had Claude Code helping me set up a special web socket,

00:34:56.879 --> 00:35:01.940
<v Michael Kennedy>HTTP to web socket to secure web socket conversion on Nginx,

00:35:02.020 --> 00:35:03.520
<v Michael Kennedy>and it was like, here, boom, perfect.

00:35:03.860 --> 00:35:05.040
<v Michael Kennedy>But you got to know to ask, right?

00:35:05.900 --> 00:35:06.580
<v Michael Kennedy>That's the thing.

00:35:06.960 --> 00:35:07.140
<v Michael Kennedy>Yeah.

00:35:08.040 --> 00:35:08.140
<v Michael Kennedy>Yeah.

00:35:08.600 --> 00:35:10.100
<v Michael Kennedy>But these are weird times.

00:35:10.380 --> 00:35:11.000
<v Michael Kennedy>They're very weird times.

00:35:11.280 --> 00:35:12.020
<v Michael Kennedy>They're weird times.

00:35:12.940 --> 00:35:13.980
<v Brian Okken>But we're still hanging in there.

00:35:14.220 --> 00:35:17.080
<v Brian Okken>And if you're hanging in there too and hanging in with us,

00:35:17.280 --> 00:35:21.140
<v Brian Okken>I really appreciate everybody listening to the episode,

00:35:21.640 --> 00:35:23.620
<v Brian Okken>listening to Python Bytes,

00:35:23.960 --> 00:35:26.200
<v Brian Okken>and supporting us through all of the different means.

00:35:27.380 --> 00:35:29.860
<v Brian Okken>And yeah, we're going to do this as long as we can.

00:35:30.220 --> 00:35:31.400
<v Brian Okken>So thanks, Michael.

00:35:31.700 --> 00:35:31.920
<v Brian Okken>Yeah.

00:35:32.340 --> 00:35:32.680
<v Brian Okken>Thank you, Brian.

00:35:32.980 --> 00:35:33.300
<v Brian Okken>See you later.

00:35:33.500 --> 00:35:33.780
<v Brian Okken>Bye, everyone.

00:35:33.900 --> 00:35:33.980
<v Brian Okken>Bye.

