WEBVTT

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

00:00:05.340 --> 00:00:07.800
This is episode 478.

00:00:08.200 --> 00:00:09.200
I am Michael Kennedy.

00:00:09.560 --> 00:00:10.240
And I'm Brian Okken.

00:00:10.500 --> 00:00:18.540
This episode is recorded on May 4th, 2026, brought to you by us and all the things we're doing.

00:00:18.700 --> 00:00:20.980
I'm sure we'll mention something during the show somehow.

00:00:21.260 --> 00:00:23.260
I've got a few cool updates to discuss.

00:00:23.580 --> 00:00:28.020
If you want to connect with us on social media, maybe submit a topic that you think we should pay attention to.

00:00:28.020 --> 00:00:30.360
Check us out on all the social medias.

00:00:30.480 --> 00:00:34.000
You can find us on the show page, episode page.

00:00:34.100 --> 00:00:36.500
Pretty much everyone has a link to all the things there.

00:00:36.820 --> 00:00:37.680
Sign up for the newsletter.

00:00:38.220 --> 00:00:42.740
It adds way more than just show notes or, hey, we published an episode.

00:00:42.920 --> 00:00:45.020
It's got a bunch of cool extra information that we put in there.

00:00:45.080 --> 00:00:46.180
So check that out.

00:00:46.540 --> 00:00:50.920
And with that, Brian, I think we should get started.

00:00:51.140 --> 00:00:51.920
What's your first topic?

00:00:52.220 --> 00:00:54.240
I'm going to talk about profiling explorer.

00:00:54.240 --> 00:01:03.160
So this is a profiling explorer is a tool from Adam Johnson of lots of things Django and Git related fame.

00:01:03.660 --> 00:01:07.580
So Adam, so how did I see this?

00:01:07.760 --> 00:01:08.020
I don't know.

00:01:08.140 --> 00:01:08.640
Oh, yeah.

00:01:08.700 --> 00:01:14.300
He had a blog article that he released last month that somehow I just found out.

00:01:14.400 --> 00:01:15.240
I read today.

00:01:15.240 --> 00:01:18.780
Introducing profiling explorer.

00:01:19.660 --> 00:01:20.900
Actually, I picked it up yesterday.

00:01:21.040 --> 00:01:24.120
But anyway, so this is kind of fun.

00:01:24.280 --> 00:01:26.240
This is a says I've made it another package.

00:01:26.580 --> 00:01:26.700
Wait.

00:01:27.040 --> 00:01:27.440
Anyway.

00:01:27.440 --> 00:01:30.340
So what do we have here?

00:01:30.400 --> 00:01:32.800
We have a way to profile.

00:01:33.060 --> 00:01:36.660
We have lots of ways to profile Python code.

00:01:36.660 --> 00:01:46.600
But this takes the output of the profiler, the C profiler, and pops it into a table that you can interact with.

00:01:46.900 --> 00:01:50.940
So this lovely table that also has dark mode.

00:01:51.000 --> 00:01:53.320
He shows it in light mode, but it also has dark mode.

00:01:53.320 --> 00:01:58.900
And it's got all the normal stuff you'd think of for profiling.

00:01:59.060 --> 00:02:09.580
You've got the cumulative time, the percentage of your time in a certain place, and the number of calls that go to this place or this thing.

00:02:09.940 --> 00:02:12.480
So but you can filter on the filters kind of cool.

00:02:12.600 --> 00:02:25.160
So you can click on the calls or the internal time or cumulative time column headers to sort by that, which that's where I usually start is certain by the percentage of the time spent somewhere.

00:02:26.060 --> 00:02:29.500
Anyway, then you can also do there's a search box.

00:02:29.500 --> 00:02:41.540
So you can filter on like if you like even if you grab all of the time, but you're really looking at a subcomponent that you're working on, you can just look at that and see where it's small.

00:02:41.540 --> 00:02:52.840
So like that's often the time where I'm often grabbing, looking at the profiling documentation is how do I filter down to just the thing I want to care about?

00:02:53.180 --> 00:02:55.300
And sometimes it's easier just to grab it all.

00:02:55.440 --> 00:02:59.520
And then and then just using this, you could filter in exactly what you want.

00:02:59.800 --> 00:03:01.540
So yeah.

00:03:01.800 --> 00:03:04.280
And there's a hover features and caller and colleagues.

00:03:04.640 --> 00:03:08.520
And I guess look through the article to figure out what what this is all about.

00:03:08.560 --> 00:03:09.600
But it looks really slick.

00:03:09.600 --> 00:03:12.600
I haven't tried it yet, but I'm going to probably this week.

00:03:12.820 --> 00:03:13.560
So it looks fun.

00:03:13.800 --> 00:03:16.580
And profiling is certainly finding a needle in a haystack.

00:03:16.700 --> 00:03:19.600
So all the UI, all the search you can get is very good.

00:03:19.860 --> 00:03:20.060
Yeah.

00:03:20.240 --> 00:03:26.160
And there's like profiling often has like there's some people that like the flame graphs.

00:03:26.340 --> 00:03:29.720
I've never gotten the flame graphs to work in my brain.

00:03:29.820 --> 00:03:30.820
I just don't get them.

00:03:31.080 --> 00:03:34.600
So so something like a table works for me.

00:03:34.740 --> 00:03:35.280
I like this.

00:03:35.720 --> 00:03:35.900
Yeah.

00:03:35.900 --> 00:03:39.340
I really like the call call hierarchy type of thing.

00:03:39.340 --> 00:03:44.960
It's almost the call call stack, but it's split if it takes different branches that you see in like PyCharm and stuff.

00:03:45.180 --> 00:03:45.380
Yeah.

00:03:45.440 --> 00:03:45.940
That works for me.

00:03:45.980 --> 00:03:47.560
But still, those things can be too noisy.

00:03:47.780 --> 00:03:48.740
So very cool.

00:03:48.960 --> 00:03:49.120
Yeah.

00:03:49.320 --> 00:03:49.560
Nice.

00:03:49.820 --> 00:03:50.100
Nice.

00:03:50.100 --> 00:03:55.840
Now let's bump over and talk about reverting the incremental GC in Python.

00:03:55.840 --> 00:03:56.720
Like what?

00:03:56.940 --> 00:04:04.660
So this is a, I don't know who just, I think just the core developers and steering council as a group decided on this.

00:04:04.740 --> 00:04:07.000
But the post is by Hugo Van Commande.

00:04:07.840 --> 00:04:14.920
And it's just entitled reverting the incremental GC in Python 3.14 and 3.15, which is pretty wild.

00:04:14.920 --> 00:04:17.440
And there's, this is on discuss.python.org.

00:04:17.520 --> 00:04:19.980
And so there's a bunch of back and forth here.

00:04:20.240 --> 00:04:21.820
So let me give you some of the highlights.

00:04:21.960 --> 00:04:22.100
Okay.

00:04:22.260 --> 00:04:26.460
So Python 3.14 shipped with a new incremental garbage collector.

00:04:26.680 --> 00:04:31.620
So I believe the way it worked previously is when a garbage collection happened.

00:04:31.760 --> 00:04:34.000
And maybe I should point out why garbage collections happen.

00:04:34.000 --> 00:04:39.460
So Python is a little weird in that it has two types of memory management.

00:04:39.880 --> 00:04:40.700
Both of them automatic.

00:04:40.920 --> 00:04:42.020
You don't worry about them.

00:04:42.260 --> 00:04:44.400
But they're two ways of managing memory.

00:04:44.520 --> 00:04:46.160
And they happen in different scenarios.

00:04:46.360 --> 00:04:46.460
Okay.

00:04:46.520 --> 00:04:51.220
So the primary, by far, way that memory management happens is by reference counting.

00:04:51.520 --> 00:04:52.140
You get a variable.

00:04:52.540 --> 00:04:53.260
It has one reference.

00:04:53.620 --> 00:04:54.480
You pass it to a function.

00:04:54.640 --> 00:04:55.560
Now it has two references.

00:04:55.800 --> 00:04:58.000
That function puts it into a list, but then returns.

00:04:58.220 --> 00:05:00.200
It goes up to three and then back to two.

00:05:00.520 --> 00:05:01.560
You throw away the list.

00:05:01.900 --> 00:05:03.040
And then the variable goes away.

00:05:03.040 --> 00:05:03.080
Okay.

00:05:03.320 --> 00:05:04.460
Reference count hits zero.

00:05:04.640 --> 00:05:04.880
Delete.

00:05:05.040 --> 00:05:05.180
Right?

00:05:05.420 --> 00:05:06.940
Reference counting works great.

00:05:07.060 --> 00:05:07.940
It's super fast.

00:05:08.040 --> 00:05:08.600
It's immediate.

00:05:08.860 --> 00:05:12.700
Except it does not work great when you have a cycle.

00:05:13.060 --> 00:05:13.200
Right?

00:05:13.340 --> 00:05:17.780
I've got something, two objects that point to each other for some reason.

00:05:18.080 --> 00:05:20.200
All of a sudden, their reference counts never hit zero.

00:05:20.560 --> 00:05:21.760
Memory goes through the roof.

00:05:21.980 --> 00:05:22.380
You're toast.

00:05:22.700 --> 00:05:35.960
So what we're talking about is the thing, the garbage collector that doesn't use reference counting, but actually traverses all of the references and then looks for those cycles that are abandoned, but themselves never went to zero and collects it.

00:05:36.000 --> 00:05:36.100
Okay.

00:05:36.180 --> 00:05:42.380
So there was a new incremental garbage collector added that the way it worked now is you would have different generations.

00:05:42.540 --> 00:05:43.880
Those generations would run.

00:05:44.460 --> 00:05:47.260
When it was time for a collection, the entire app stopped.

00:05:47.640 --> 00:05:49.340
Garbage collection was checked.

00:05:49.580 --> 00:05:50.920
These cycles were checked.

00:05:51.080 --> 00:05:52.180
And then the app carried on.

00:05:52.180 --> 00:05:55.280
So the incremental one tries to improve latency.

00:05:55.720 --> 00:05:58.520
Say like, look, we don't have to stop the program entirely.

00:05:58.520 --> 00:06:03.880
We're going to do a little bit of garbage collection, a little bit more running, a little bit more garbage collection and so on.

00:06:04.080 --> 00:06:06.900
Of course, the picture of garbage could change over that period.

00:06:06.900 --> 00:06:07.120
Right?

00:06:07.320 --> 00:06:08.580
Anyway, that was added.

00:06:08.580 --> 00:06:13.540
But it turns out production reports started to come in for severe memory pressure.

00:06:14.100 --> 00:06:19.920
Neil measured up to five times peak memory on pathological cyclic workloads.

00:06:20.080 --> 00:06:23.880
And cyclic is the important part because that's actually where GC actually does anything.

00:06:24.300 --> 00:06:26.320
It actually makes, you know, actually does the cleanup.

00:06:26.640 --> 00:06:29.720
And that pushed the core team and steering council to revert it.

00:06:30.060 --> 00:06:33.220
It's in 314, but it's going to be taken out of 314.

00:06:33.460 --> 00:06:37.340
And it's going to not actually make it to 350, which is pretty extreme, I think.

00:06:37.340 --> 00:06:37.580
Right?

00:06:37.820 --> 00:06:41.920
It takes a lot to get something into Python, but once it's in, it's rarely taken out.

00:06:42.160 --> 00:06:42.260
All right.

00:06:42.260 --> 00:06:45.200
So this is actually the second time the incremental GC has been pulled back.

00:06:45.360 --> 00:06:48.360
It was reverted right before 313 first came out.

00:06:48.580 --> 00:06:49.800
As they were like, oh, is that quite ready?

00:06:49.980 --> 00:06:53.540
And then it got into 314 without going through the PEP process.

00:06:53.640 --> 00:06:55.180
So this is a bit of the tricky stuff.

00:06:55.400 --> 00:06:57.700
However, the benefit was real.

00:06:57.780 --> 00:06:59.560
So like they were trying to reduce latency.

00:06:59.760 --> 00:07:07.780
So with the incremental one, the max GC pause times for one example was one millisecond versus 26 milliseconds with the old one.

00:07:07.980 --> 00:07:08.700
So that's great.

00:07:08.760 --> 00:07:14.220
Except for it was just blowing up the memory usage of things that cared more about memory and less about latency.

00:07:14.640 --> 00:07:20.380
And a lot of places we run Python care more about memory than they care about very, very small pauses.

00:07:20.800 --> 00:07:25.320
You know, think like APIs and web apps and anything that runs on a server or in the cloud.

00:07:25.440 --> 00:07:28.200
Memory is probably the most expensive resource.

00:07:28.380 --> 00:07:28.580
Right?

00:07:28.580 --> 00:07:29.620
So that's not great.

00:07:29.760 --> 00:07:33.700
So Hugo decided we're going to ship 314.5 early with the revert.

00:07:33.980 --> 00:07:43.020
And Gregory Smith floated the idea of a 314.5 RC1, a release candidate for a shipping version of Python, which would be interesting.

00:07:43.300 --> 00:07:43.460
Okay.

00:07:43.640 --> 00:07:50.960
And then Tim Peters jumped into thread, doing a bunch of live forensics on Windows, running a toy DQ program that should cap at one gigabyte.

00:07:51.140 --> 00:07:55.860
And it used up to 15.6 gigs on a 16 gig machine.

00:07:56.160 --> 00:07:57.540
So that's not great.

00:07:57.540 --> 00:07:58.920
And this is really bad.

00:07:59.100 --> 00:08:04.020
He discovered that Gen Zero collections effectively never fired under this new collector.

00:08:04.900 --> 00:08:08.080
That's the one that gets most of them and it's the cheapest to run.

00:08:08.180 --> 00:08:09.280
So that's a big problem.

00:08:09.540 --> 00:08:18.840
Anyway, this might sound bad, but Tim points out that CPython has had a chronic shortage of real world GC benchmarks.

00:08:19.240 --> 00:08:29.500
High performance, the test suite that they run Python on for performance considerations, says it has basically no interesting cyclic workloads and users almost never share real data.

00:08:29.680 --> 00:08:31.080
So core devs keep flying blind.

00:08:31.480 --> 00:08:34.400
And circling back to your previous topic, right?

00:08:34.620 --> 00:08:46.240
Is Adam Johnson published a blog post along the thread of a real memory leak in Django migration systems caused by the incremental GC with where you have to call GC collect manually to fix it.

00:08:46.240 --> 00:08:46.600
All right.

00:08:46.680 --> 00:08:49.300
So it may or may not come back for 3.16.

00:08:49.300 --> 00:08:52.680
If it does, it was going to be restarted through the PEP process.

00:08:53.260 --> 00:08:54.660
So a lot going on here.

00:08:54.880 --> 00:08:55.580
That's crazy, right?

00:08:55.880 --> 00:08:56.420
Well, yeah.

00:08:56.480 --> 00:09:10.900
But I also hope that, I mean, Tim's comment is like, we kind of flew past it, but it's really, it's really important that the cyclic workload, having some of those in a benchmark is important.

00:09:11.320 --> 00:09:18.220
But if you can come up with a pathological way where it doesn't work as well, it shouldn't crash.

00:09:18.380 --> 00:09:27.640
It shouldn't be like, even an incremental should eventually go, you know what, we need to shut down and clean things up if necessary, I think.

00:09:27.640 --> 00:09:41.340
but, but we also need to have a benchmark that's more realistic and it's hard to tell what realistic is because we're doing, Python's being used for everything from, you know, from, from particle physics to web pages.

00:09:41.460 --> 00:09:43.040
so who knows?

00:09:43.200 --> 00:09:44.840
I have a suggestion for them.

00:09:44.900 --> 00:09:45.640
I agree with you.

00:09:45.940 --> 00:09:46.880
I have a suggestion.

00:09:47.080 --> 00:09:50.460
One of the areas this shows up very often is in ORMs.

00:09:50.860 --> 00:09:51.360
Oh yeah.

00:09:51.680 --> 00:09:51.900
Right.

00:09:51.900 --> 00:10:00.180
So imagine I've got a user and, maybe a course and then a user activity, right?

00:10:00.240 --> 00:10:13.380
So if I go run a query, you can send a database for all those things that are in, maybe the user activity has a user ID, but it also has a like reverse lazy loaded back to the user itself and back to the course itself.

00:10:13.380 --> 00:10:15.560
But the user's holding onto their activity.

00:10:15.560 --> 00:10:26.760
Cause they've got like a list of activities, which was also a lazy loaded and you like tell SQLAlchemy or something like we're going to do eager loading and all these things does creates tons of cycles just by doing database queries.

00:10:26.860 --> 00:10:32.840
Like I've seen that kind of stuff where the GC makes a difference on my web apps that actually do a lot of database things.

00:10:32.840 --> 00:10:42.940
So maybe they could come up with like a real interesting web app database query sort of example, and just use put SQL, a static SQLite database that's in there and integrate that.

00:10:42.940 --> 00:10:50.780
I mean, I'm sure there's a hesitancy to say, well, the way you run PI performance is you're going to fire up this database and this Redis queue.

00:10:50.920 --> 00:10:55.600
And then you're going to like, you know, like the infrastructure doesn't make any sense, but you could do it with SQLite.

00:10:55.680 --> 00:10:59.480
And I think you could, you could come up with some interesting, useful examples that have tons of data.

00:10:59.480 --> 00:11:01.000
Cause just fill the database, you know?

00:11:01.180 --> 00:11:01.380
Yeah.

00:11:01.580 --> 00:11:01.860
Anyway.

00:11:02.240 --> 00:11:02.640
Interesting.

00:11:02.760 --> 00:11:04.100
I think it's worth considering.

00:11:04.280 --> 00:11:05.600
It is worth considering.

00:11:06.040 --> 00:11:08.180
Oh, I got to hop over to my next topic.

00:11:08.480 --> 00:11:11.360
Nick's this, speaking of discussion.

00:11:11.360 --> 00:11:15.740
So this is just, I guess, I guess I'm just like passing along a discussion.

00:11:15.740 --> 00:11:17.780
I was amused to, to read about.

00:11:18.100 --> 00:11:25.580
so this is, few, I, it changed today, yesterday that the topic changed.

00:11:25.580 --> 00:11:33.700
So I was surprised to find out that Microsoft, and VS Code enabled AI coauthor by default.

00:11:34.300 --> 00:11:37.700
So, and I'm, I'm like, what really?

00:11:37.700 --> 00:11:52.060
So I read a little bit more about this and really it's, so you can, you can do get commits and stuff to that have, whether or not you've, you know, whether or not AI contributed to the code.

00:11:52.120 --> 00:12:00.720
And instead you used to be able to just like say, it used to be only of like get or your AI is actually committing.

00:12:00.720 --> 00:12:07.120
but, but, you know, copilot wants to get credit if they're doing a lot of work, I guess.

00:12:07.140 --> 00:12:07.700
I don't know.

00:12:07.800 --> 00:12:11.920
But, so, there's a flag that you can set.

00:12:11.920 --> 00:12:16.740
That's the get dot add, add AI coauthor configuration.

00:12:16.980 --> 00:12:20.900
And there, it was started with off and they defaulted.

00:12:21.160 --> 00:12:23.160
They won't change it to default of all.

00:12:23.160 --> 00:12:36.340
and, it isn't all the time, but if there's something in here that tries to detect whether or not you used any, any of the code was, contributed by an AI workflow or anything.

00:12:36.340 --> 00:12:49.300
And I'm not sure about all the details, but people freaked out basically because like, I was like, even if I, even if I run a, like a copilot to try to figure out something, I may

00:12:49.300 --> 00:12:56.720
have rejected everything or, or something and, and, or maybe my code looks like something that the, I don't know, how does it detect it?

00:12:56.740 --> 00:12:57.240
I'm not sure.

00:12:57.640 --> 00:13:00.180
and, and I don't think that's right.

00:13:00.260 --> 00:13:02.680
And basically I just don't think it's right.

00:13:02.680 --> 00:13:04.540
Well, I was about to talk about that.

00:13:04.660 --> 00:13:13.580
And then I noticed that I was reading the comments this morning and found out that there was a follow-up and the follow-up was just yesterday, changed the default back to off.

00:13:13.580 --> 00:13:18.700
so, and then, and then it devolved.

00:13:18.840 --> 00:13:25.860
They closed the comments, even in one day, they closed the comments because basically the comments turned into, why are you even using VS Code?

00:13:25.940 --> 00:13:32.200
You should use VI or, you know, Emacs or, or what are the other, some of the others and stuff.

00:13:32.200 --> 00:13:39.880
So anyway, I use, I use, I use a lot of editors, not a lot, a couple, but VS Code is one of them.

00:13:39.880 --> 00:13:44.220
and I was the, I think the main takeaway from this is I don't trust them.

00:13:44.320 --> 00:13:49.480
I'm going to go in my settings and, go ahead and whatever this, no, I can't find it.

00:13:49.580 --> 00:13:52.420
The setting was, was like, whatever.

00:13:52.580 --> 00:13:53.300
Oh, here it is.

00:13:53.380 --> 00:13:55.240
The, the ad AI coauthor.

00:13:55.420 --> 00:14:03.260
I'm going to just go ahead and set that to off in, in my, in my settings file, because I don't trust them to turn it back on later.

00:14:03.900 --> 00:14:06.020
anyway, I think this is crazy.

00:14:06.020 --> 00:14:09.780
First of all, let me defend the people who say VS Code.

00:14:09.880 --> 00:14:12.840
Where, where folks are saying you should use them or Emacs.

00:14:13.260 --> 00:14:19.920
I'm not, I feel like a lot of those editors encourage bad, bad design practices, right?

00:14:20.120 --> 00:14:23.500
Whereas proper IDE like things are a little bit better.

00:14:23.660 --> 00:14:24.940
So I think that that's fair.

00:14:25.040 --> 00:14:33.240
I don't think they should take that personally, but this AI coauthor stuff is just a, so that was kind of put the defense up before we started hacking on them.

00:14:33.440 --> 00:14:36.340
So I think I, this is the first time hearing this, Brian, this is, this is garbage.

00:14:36.340 --> 00:14:39.300
Now I haven't noticed this because I don't use copilot.

00:14:39.300 --> 00:14:50.100
Cause I have more respect for my work time and just use cloud code, in some kind of VS environment with the extension to be clear.

00:14:50.300 --> 00:14:53.980
And I also hate it if cloud does it, but every now and then cloud does it.

00:14:53.980 --> 00:14:55.300
And it drives me crazy.

00:14:55.540 --> 00:15:01.440
If I ask it for a commit message, it'll sometimes give me a bunch of stuff and then coauthored by cloud code.

00:15:01.440 --> 00:15:05.700
And it'll like at mention their GitHub username or whatever.

00:15:05.700 --> 00:15:07.580
And like delete, delete, delete, delete, delete.

00:15:07.580 --> 00:15:09.780
So I've never seen this.

00:15:09.840 --> 00:15:11.320
So where does it show up?

00:15:11.360 --> 00:15:14.320
Does it, is it like behind the scenes or does it show up?

00:15:14.320 --> 00:15:18.620
The most common place I've seen it is in pull requests, but I've also seen it in commit messages.

00:15:18.800 --> 00:15:20.020
So let's just say it's a pull request.

00:15:20.020 --> 00:15:20.300
Okay.

00:15:20.560 --> 00:15:23.300
So you might go, I've not, is it in the message though?

00:15:23.480 --> 00:15:23.820
Yes.

00:15:24.120 --> 00:15:24.320
Yes.

00:15:24.320 --> 00:15:33.580
So I've, I've not used it coauthor, like I copilot, like I just said, but I've gone to cloud and I've said, Hey, you know, there's a bunch of stuff going on here.

00:15:33.580 --> 00:15:35.980
And I kind of forgot all the details that changed.

00:15:35.980 --> 00:15:49.720
Like, wouldn't it be a little more thorough if I said, Hey, Claude, look at all the pending changes on this branch since I've branched it and give me a nice summary and overview of actually what's changed instead of the stuff that I just intended to change.

00:15:49.720 --> 00:15:57.760
Maybe something else, you know, like maybe I ran the linter and it changed a bunch of stuff, but when I really only changed one line, but I would like to talk about, you know, whatever, something like that.

00:15:57.800 --> 00:16:12.380
It will say, here's the title, here's the description that you put, and it'll say all of it's describing and the bottom, it'll have a last single sentence paragraph that says coauthored by Claude code at anthropic or at Claude or something like that.

00:16:12.480 --> 00:16:13.200
That's lame.

00:16:13.460 --> 00:16:14.340
I'm like, screw this.

00:16:14.340 --> 00:16:16.160
So then I'll delete that, which is fine.

00:16:16.160 --> 00:16:20.640
But you can also just say, Claude, create a pull request on GitHub for me.

00:16:20.640 --> 00:16:22.000
And it'll do that beautifully.

00:16:22.180 --> 00:16:24.920
But you know what shows up at the bottom of that pull request description?

00:16:25.160 --> 00:16:26.220
Coauthored by Claude.

00:16:26.560 --> 00:16:34.720
So Claude doesn't do as often, but it sounds like, you know, Microsoft has gone absolutely bonkers over AI-ing everything.

00:16:35.020 --> 00:16:36.880
And I think that is a huge mistake.

00:16:36.880 --> 00:16:48.500
I think they have 40 different products named CoPilot that are actually different things like in Office 365 CoPilot, Windows CoPilot, CoPilot on GitHub, CoPilot and VS Code.

00:16:48.620 --> 00:16:48.880
You know what I mean?

00:16:48.920 --> 00:16:59.560
There's just like, there was a mandate that everybody, you know, a few years ago, 2023 or something like that, like every team that builds something at Microsoft needs to have some form of AI in it.

00:16:59.780 --> 00:17:01.980
And those were all independent projects and initiatives.

00:17:02.240 --> 00:17:04.000
And the adoption isn't that great.

00:17:04.000 --> 00:17:14.420
So this to me feels like a poor attempt, a bad attempt at kind of trying to growth hacking CoPilot back into the conversation, right?

00:17:14.500 --> 00:17:14.820
Yeah, maybe.

00:17:15.280 --> 00:17:15.460
Yeah.

00:17:15.520 --> 00:17:19.000
Think of like early days of Hotmail, which is completely forgotten.

00:17:19.140 --> 00:17:27.560
But one of it's really the things that was kind of a secret to a success, this is common now, but it wasn't then, is every email you sent was sent by Hotmail.

00:17:27.720 --> 00:17:30.320
Get your own one gigabyte free web email.

00:17:30.320 --> 00:17:33.540
And every single email had a link back to it.

00:17:33.760 --> 00:17:35.120
And people go, oh, you can have web email.

00:17:35.220 --> 00:17:35.600
That's cool.

00:17:35.740 --> 00:17:38.140
And like, like that was, and I feel like it's that.

00:17:38.160 --> 00:17:39.440
Social media stuff too.

00:17:39.560 --> 00:17:44.360
People would be like, you know, this post written on Mona on iPhone or something like that.

00:17:44.380 --> 00:17:45.120
Yes, yes, exactly.

00:17:45.560 --> 00:17:45.840
Yeah.

00:17:45.840 --> 00:17:46.500
There's a lot of that.

00:17:46.580 --> 00:17:49.380
So I think it's, it's got a strong ick factor.

00:17:49.380 --> 00:17:54.680
I just checked my default VS Code, which I don't know whatever it was, but it had this on.

00:17:54.780 --> 00:17:57.840
And so I just turned it off and I'm going to go do a thorough cleansing.

00:17:58.240 --> 00:18:02.560
But I think it's a tree falls in the forest, but no one, there's a here sort of example for me.

00:18:02.580 --> 00:18:03.840
Cause like, I don't use CoPilot.

00:18:04.040 --> 00:18:11.080
So if I did, it would put the marking on the co, the co, attribution on it, but I'm not going to use it.

00:18:11.120 --> 00:18:11.820
So it's not a problem.

00:18:12.180 --> 00:18:19.140
I actually don't get the CoPilot hate because I I'm using it, but I've been using it

00:18:19.140 --> 00:18:29.620
from the start and it's just like mostly code completion and, and a, you can open a window to, to open AI chat if you want.

00:18:29.620 --> 00:18:34.300
But, the, the, whatever settings I have are not intrusive.

00:18:34.360 --> 00:18:38.560
They were, they were intrusive for a while and I did something and they're not that bad anymore.

00:18:38.560 --> 00:18:42.380
And the comments, the suggested comments don't get in the way.

00:18:42.380 --> 00:18:45.000
And, and I'm, I'm, I appreciate it.

00:18:45.000 --> 00:18:48.740
And the, and I do use VS Code, but I also use Vim mode.

00:18:49.080 --> 00:18:56.400
so I, it's basically a, a big wrapper around Vim as far as like I'm using it.

00:18:56.480 --> 00:19:05.220
I do like the other thing I really like about it is, the integration with get so that I can, I can find out all the stuff I've changed and use do diffs easy and stuff.

00:19:05.220 --> 00:19:06.840
So I do like it.

00:19:06.840 --> 00:19:14.500
And also there's a lot of people using cursor and you can't hate on VS Code and like cursor because they're the same thing.

00:19:14.660 --> 00:19:18.020
so they're not exactly the same thing, but it's a fork.

00:19:18.020 --> 00:19:22.980
So anyway, a hundred percent, I turn off the autocomplete for all those tools.

00:19:23.080 --> 00:19:30.340
I don't like them, but so my, my view into this world is just the agents, you know, it's been, let's, let's move on to the next topic, Brian.

00:19:30.400 --> 00:19:32.520
It's been, Ooh, you wouldn't know it.

00:19:32.520 --> 00:19:34.440
We had literally a heat advisory.

00:19:34.740 --> 00:19:36.480
It was almost 90 degrees yesterday.

00:19:36.700 --> 00:19:37.180
It was terrible.

00:19:37.180 --> 00:19:39.000
Boy, was it freezing in Django land.

00:19:39.100 --> 00:19:39.700
Let me tell you.

00:19:40.740 --> 00:19:43.120
So I want to talk about something called Django freeze.

00:19:43.240 --> 00:19:44.760
And I think this is a super cool project.

00:19:44.760 --> 00:19:47.620
It doesn't have very much attention.

00:19:48.020 --> 00:19:51.080
It's only got 117 stars and 16 forks.

00:19:51.360 --> 00:19:56.560
It's the kind of project that's really low risk, like really low risk, but has a ton of benefits.

00:19:56.940 --> 00:20:01.920
So the idea with Django freeze is I've written a Django app and I'm thinking about how do I deploy it?

00:20:01.920 --> 00:20:05.120
Maybe it's driving its content from the database.

00:20:05.420 --> 00:20:11.440
Like it's got a, it's like an e-commerce store and it's got, here's all your categories and here's the products you're selling and so on.

00:20:11.580 --> 00:20:15.200
Those come out of the database, but maybe they change infrequently or whatever.

00:20:15.540 --> 00:20:22.340
So you could use Django freeze to just convert a static HTML version of your site and deploy that somewhere.

00:20:22.460 --> 00:20:28.560
Have all the categories, have all the products, have all the little backlinks and all that kind of things that you might have, whatever your app does.

00:20:28.560 --> 00:20:34.120
But the deployment and operation, the DevOps side is static files, which is incredible.

00:20:34.540 --> 00:20:34.840
Oh, cool.

00:20:35.060 --> 00:20:36.100
It's good for operational.

00:20:36.300 --> 00:20:39.840
Like your static files can't go down unless just your server doesn't work anymore.

00:20:40.080 --> 00:20:42.940
You know, like there's very few things that can go wrong.

00:20:43.300 --> 00:20:52.540
You know, it's not like you're going to, well, I ran out of memory or there is, I don't know, like some kind of issue between the caching and like just all the issues you have running real websites.

00:20:52.680 --> 00:20:54.400
Like with static sites are so delightful.

00:20:54.740 --> 00:20:59.020
Put them up, log as the server's online, things are good, you know, and you can host them for free in many places.

00:20:59.160 --> 00:21:04.580
So if you've got a Django site and you think really it kind of could be static site, but I like to work in Django.

00:21:04.680 --> 00:21:07.800
I don't want to work in Hugo or something like that where it's foreign or weird.

00:21:07.900 --> 00:21:09.840
Hugo is a really weird, even though it is good.

00:21:09.840 --> 00:21:16.020
You could just write in one, write in Python, write in your favorite web framework, but then turn it into a static site.

00:21:16.060 --> 00:21:17.400
And I really think this is a cool idea.

00:21:17.660 --> 00:21:22.140
It's, you know, sort of a peer of Flask Freeze, I think is the name.

00:21:22.380 --> 00:21:23.220
Yeah, I think it's Flask Freeze.

00:21:23.520 --> 00:21:23.840
What do you think?

00:21:23.920 --> 00:21:24.220
Cool, right?

00:21:24.560 --> 00:21:24.920
Yeah.

00:21:25.020 --> 00:21:34.060
And one of the things I think one of the places where I'd probably, that I'm actually thinking of using this, I'll try it out, is like a SAS, for instance.

00:21:34.060 --> 00:21:47.140
You've got the actual application that needs to be Django or whatever, you know, let's say you've written it in Django and you want your sales site, you know, you've got two

00:21:47.140 --> 00:21:50.420
sites, you've got the actual application and then you have your like sales site.

00:21:51.280 --> 00:21:55.300
If they look really close, then there's no, the transition's really easy.

00:21:55.500 --> 00:22:01.880
So you could have a lot of your blog content or whatever on the static side.

00:22:01.880 --> 00:22:13.080
You're trying to hit lots of random traffic and then, and then flip over to your application and, and the user won't notice that much of a difference because the, it's the same look and stuff.

00:22:13.380 --> 00:22:21.880
So that's, yeah, that's a perfect use case or like the docs for your SAS, you know, like user manual, all that stuff could just all be static, static, static.

00:22:22.160 --> 00:22:22.360
Yeah.

00:22:22.560 --> 00:22:22.940
That's pretty cool.

00:22:22.940 --> 00:22:23.720
I'll give you one more example.

00:22:23.720 --> 00:22:32.920
I talked to, to David Flood from the Harvard sort of humanities enablement team, I guess is a simple way to put it.

00:22:33.180 --> 00:22:44.400
And he and his team go around sort of like on internal consultants or whatever for different researchers who are not really programmers or web people and help them set up websites,

00:22:44.800 --> 00:22:48.220
portals, data management, data exploration, et cetera.

00:22:48.340 --> 00:22:59.580
And one of the areas that he talked to a lot about is like, what happens if you create something like a Django site or anything else as part of a grant, a three-year research project, but then the grant is over.

00:22:59.700 --> 00:23:05.640
You're paying a hundred dollars a month to host the Django site, but now who's going to pay for that, right?

00:23:05.740 --> 00:23:11.460
You're, you don't want to pay for it because you don't have any grant money left, but if you don't, it's going to go away, which is a big hassle.

00:23:11.840 --> 00:23:11.960
Yeah.

00:23:12.060 --> 00:23:15.020
That'd be cool to just be able to convert it to a static.

00:23:15.200 --> 00:23:19.260
It's not going to update anymore and it can be something you can reference and stuff.

00:23:19.700 --> 00:23:19.640
So.

00:23:19.920 --> 00:23:20.360
Yeah, exactly.

00:23:20.480 --> 00:23:28.180
So you've got this project that needed a dynamic site for a long time, but then all of a sudden it no longer is supported or whatever, but you don't want it to vanish from the internet.

00:23:28.560 --> 00:23:32.180
So hit it with one of these, you know, convert to static sites.

00:23:32.240 --> 00:23:33.400
I think it's a really cool idea.

00:23:33.680 --> 00:23:33.940
Yeah.

00:23:34.240 --> 00:23:34.660
It is cool.

00:23:34.880 --> 00:23:35.080
Yeah.

00:23:35.320 --> 00:23:35.680
Indeed.

00:23:35.960 --> 00:23:37.040
You know what else is cool?

00:23:37.440 --> 00:23:38.220
Extras are cool.

00:23:38.600 --> 00:23:38.760
Yeah.

00:23:40.360 --> 00:23:42.460
I'll let you go, go next on the extras.

00:23:42.800 --> 00:23:43.120
Okay.

00:23:43.120 --> 00:23:46.240
I need, I like accidentally unshared.

00:23:46.560 --> 00:23:50.580
So I'll, I'll share it just in, I'll be just a second and here we go.

00:23:51.060 --> 00:23:51.440
All right.

00:23:51.480 --> 00:23:55.800
So this is, is we were talking about, thinking about AI a lot.

00:23:55.900 --> 00:24:01.920
I know a lot of you have kids out there, or maybe you are, going to college or high school or something like that.

00:24:02.000 --> 00:24:04.060
and if you are, thanks for listening.

00:24:04.140 --> 00:24:04.680
That's awesome.

00:24:05.220 --> 00:24:07.480
Anyway, I ran across this article this morning.

00:24:07.620 --> 00:24:13.920
It's called thinking less, trusting more gen AI's impact on students, cognitive habits.

00:24:14.000 --> 00:24:15.740
And actually this isn't an article.

00:24:15.740 --> 00:24:19.660
This is a, an abstract from a study from Oregon state university.

00:24:19.660 --> 00:24:31.480
and like actually the top, there's like a objective and a method and result at the top, but it's rather, it's rather it's, it's not too hard to decipher the results

00:24:31.480 --> 00:24:36.940
looking at this, but it's still in like, you know, it's, it's a, scientific paper speak.

00:24:36.940 --> 00:24:43.740
So, if you pardon the flyby, the best way to read this is to go all the way down to the bottom.

00:24:43.900 --> 00:24:47.340
Oh, not all the way to the, to the references, but there's a conclusion.

00:24:47.720 --> 00:24:50.360
And this is, this is actually interesting.

00:24:50.500 --> 00:24:54.020
I think it's really interesting about students using AI and stuff.

00:24:54.020 --> 00:24:56.600
So I'll just read out the little bit here.

00:24:57.020 --> 00:25:07.300
If routine reliance on gen AI during formative years, and I don't remember what formative years are, but whatever, changes students' willingness to engage in effortful thinking.

00:25:07.440 --> 00:25:19.060
Many may enter professional life without having developed the intellectual habits that earlier generations developed through practice that yet this, this need, this need not be inevitable.

00:25:19.060 --> 00:25:21.440
cognitive, the cognitive debts.

00:25:21.620 --> 00:25:35.080
Anyway, basically, the use of AI and the way AI is designed, like things like chat, GPT and stuff need to be modified so that, learn both learning environments and gen

00:25:35.080 --> 00:25:42.440
AI systems are modified to preserve human agency and support genuine complimentary, complimentarity.

00:25:42.840 --> 00:25:44.600
I didn't know that was a word.

00:25:44.600 --> 00:25:53.060
generally division of cognitive labor between both human and AI contributions should be meaningful, meaningful setup.

00:25:53.300 --> 00:25:55.100
And so that neither is displaced.

00:25:55.200 --> 00:25:58.240
Basically you need to, and I kind of agree.

00:25:58.240 --> 00:26:09.160
I think even when using, like Claude and stuff like that, I think that you can get them to ask you, you can say, Hey, do this task.

00:26:09.160 --> 00:26:11.180
And if you run into issues, ask me about it.

00:26:11.380 --> 00:26:12.580
I think that should be the default.

00:26:12.580 --> 00:26:22.200
I think it should, it should default to, even if, even if you don't want to get interrupted, just like, you know, you want it to have like flow mode and just like get stuff done.

00:26:22.280 --> 00:26:25.800
It should pull out points and say, Hey, these are some of the decisions I made.

00:26:26.080 --> 00:26:29.160
could you review this spot, this pot, this spot?

00:26:29.400 --> 00:26:30.920
and what do you think of that?

00:26:30.920 --> 00:26:32.800
And we could change it, change it if necessary.

00:26:32.800 --> 00:26:38.500
And I think there's minor tweaks that could be done with a lot of these interfaces to keep, people thinking.

00:26:38.500 --> 00:26:41.140
And this is about high school students or about students.

00:26:41.260 --> 00:26:51.960
I don't know what age of students it is, but I think it's relevant for coders also, because it's really easier for coders to slip into trusting, trusting the bots to let it happen.

00:26:51.960 --> 00:26:59.240
And I, we, I am all for getting things done faster, but we need to keep people thinking about the problems and thinking about stuff.

00:26:59.240 --> 00:27:02.580
So anyway, I have a couple of thoughts.

00:27:02.700 --> 00:27:06.500
So I totally agree that this is a very, very, very serious danger.

00:27:06.840 --> 00:27:12.500
I mean, I just think back to myself, if I had a magic box when I was working on a history paper and I could just say, help me with this.

00:27:12.740 --> 00:27:13.500
I really don't remember.

00:27:13.820 --> 00:27:16.400
I don't want to read the 30 page paper.

00:27:16.720 --> 00:27:21.340
And if I, you know, I just, I think it can seriously stunt your, your growth as a student.

00:27:21.340 --> 00:27:29.740
And I honestly think one of the important skills in life is just to learn, to keep going, go, you find a problem, you're like, oh, that's hard.

00:27:29.840 --> 00:27:31.060
Or I can't figure this out.

00:27:31.120 --> 00:27:35.440
Like a huge skill is just learning to keep trying until you do figure it out.

00:27:35.640 --> 00:27:41.040
And if you have a magic box that gives you the answer and you're, especially if you're young, like, I mean, that's really, really rough.

00:27:41.400 --> 00:27:41.500
Yeah.

00:27:41.780 --> 00:27:45.580
You can use these things as really amazing tutors though.

00:27:45.900 --> 00:27:47.640
You can say, I saw you did this.

00:27:48.020 --> 00:27:49.100
I, that's new to me.

00:27:49.120 --> 00:27:49.900
Why did you do this?

00:27:49.920 --> 00:27:51.160
Let's explore this idea.

00:27:51.160 --> 00:27:54.900
But I really doubt many students are using that.

00:27:55.000 --> 00:27:56.380
Like once they get an answer, probably good.

00:27:56.980 --> 00:27:57.220
Yeah.

00:27:57.460 --> 00:28:07.040
Well, and, and like, there's ways to, you can, like I said, also, you, there's ways to use AI tools now to, that work the way they should.

00:28:07.160 --> 00:28:10.800
Like one of like in education, you could say, here's my rubric.

00:28:11.120 --> 00:28:21.580
here's in, it's on this, here's my ideas about what I think I should put, but I, I'm just not sure which part of the paper I should put this information.

00:28:21.580 --> 00:28:25.340
Like the, basically using it to be, I'm stuck.

00:28:25.400 --> 00:28:26.840
Just get me unstuck.

00:28:26.840 --> 00:28:29.120
Don't do everything for me, but just get me unstuck.

00:28:29.360 --> 00:28:32.300
and those are great ways to use this.

00:28:32.300 --> 00:28:33.400
So anyway.

00:28:33.500 --> 00:28:33.780
Indeed.

00:28:34.040 --> 00:28:34.440
Indeed.

00:28:34.680 --> 00:28:36.880
Now, final, final thought before we move off this really quick.

00:28:37.140 --> 00:28:39.920
There's a lot of EM dashes in this.

00:28:40.660 --> 00:28:46.020
I'm pretty sure that this entire abstract was written with AI or at least rewritten with AI.

00:28:46.160 --> 00:28:48.440
Like just on that page, there's three or four EM dashes.

00:28:48.440 --> 00:28:54.340
But I'm not against EM dash, but that is such a new thing that AI seemed to have brought into the mix.

00:28:54.780 --> 00:28:54.920
Right.

00:28:55.040 --> 00:29:01.860
But, but there's what the, what the grammarly has been used commonly forever for a long time then.

00:29:01.960 --> 00:29:05.560
And I don't think that like that grammarly counts as an evil thing.

00:29:05.760 --> 00:29:06.580
yeah, I don't either.

00:29:06.880 --> 00:29:15.080
So, but, also there's way more EM dashes in, in it's like research papers than there are normal papers.

00:29:15.080 --> 00:29:15.620
That is true.

00:29:15.620 --> 00:29:18.240
And honestly, that's probably how they got into AI, but still.

00:29:18.440 --> 00:29:18.800
Probably.

00:29:19.160 --> 00:29:23.500
I'm still thinking, I'm still thinking perhaps that I got a couple of things.

00:29:23.680 --> 00:29:26.140
some of these are a little, this is a little bit older.

00:29:26.220 --> 00:29:26.920
It's 14 days ago.

00:29:26.920 --> 00:29:30.540
Cause it came out right after we recorded our last episode and then we skipped a week.

00:29:30.600 --> 00:29:33.760
So it's not that new, but it's already, this bothers me.

00:29:33.760 --> 00:29:36.820
Just the first four, four words of this announcement.

00:29:36.920 --> 00:29:37.260
Bother me.

00:29:37.500 --> 00:29:39.020
AI cloud company Vercel.

00:29:39.180 --> 00:29:43.660
Wait, no, this is a cloud company that hosts infrastructure, but they probably wanted to raise more money.

00:29:43.660 --> 00:29:46.780
So now they're an AI cloud company, not just a cloud company, but whatever.

00:29:47.080 --> 00:29:48.240
Let's just start from after that.

00:29:48.440 --> 00:29:48.920
Vercel.

00:29:49.920 --> 00:29:57.400
Vercel is breached after an employee grants an AI tool unrestricted to Google works, unrestricted access to Google workspace.

00:29:57.740 --> 00:29:59.600
Hacker seeks $2 million for stolen data.

00:29:59.600 --> 00:30:12.760
So some, I got to go through a little bit more, but, basically someone was using agentic AI and gave it access to the production Google workspace, which stored a bunch of data and probably wikis and stuff like that.

00:30:12.760 --> 00:30:18.780
And then somehow they installed something bad that then used the AI, which used that access.

00:30:18.780 --> 00:30:21.500
I don't know exactly the details, but why do I bring it up?

00:30:21.560 --> 00:30:26.660
If you're using Vercel, you might want to rotate your keys, change your password, stuff like that.

00:30:26.880 --> 00:30:27.700
I don't think it's a mispronation.

00:30:27.700 --> 00:30:29.140
Vercel is seeking the money though.

00:30:29.420 --> 00:30:29.680
Yes.

00:30:29.680 --> 00:30:32.740
Cause they stole the data from them and they'll say, I'm going to release it to the world.

00:30:32.740 --> 00:30:35.240
If you don't pay me, it's like a ransomware sort of thing.

00:30:35.240 --> 00:30:35.600
Okay.

00:30:35.620 --> 00:30:35.920
Yeah.

00:30:35.920 --> 00:30:36.200
Yeah.

00:30:36.200 --> 00:30:36.360
Yeah.

00:30:36.460 --> 00:30:36.760
Okay.

00:30:36.820 --> 00:30:37.240
Got it.

00:30:37.340 --> 00:30:37.940
No, the M dash.

00:30:38.040 --> 00:30:38.240
Okay.

00:30:40.640 --> 00:30:43.880
I mean, this is the reason there's just another warning for everyone.

00:30:43.880 --> 00:30:53.360
Like you got to be really careful with your dev machines, which are often for a lot of us also our personal computers, you know, like the whole, what was the password manager?

00:30:53.580 --> 00:31:04.000
Not one password, not pit warden last pass last pass got hacked, not because of an AI thing, but because one of the devs had a home network, which had, a Plex server.

00:31:04.000 --> 00:31:08.860
So they could stream their pirated stuff to their, just to watch.

00:31:08.860 --> 00:31:09.140
Right.

00:31:09.320 --> 00:31:11.880
But then they want to do that while they were out, while they're traveling.

00:31:11.880 --> 00:31:13.020
So they put it on the internet.

00:31:13.020 --> 00:31:20.540
It got hacked and then it laterally moved through their home network to get to their computer, which then got all the API keys and on and on it goes.

00:31:20.660 --> 00:31:21.960
So anyway, just another little warning.

00:31:22.340 --> 00:31:24.080
And if you use Vercel, maybe a double warning.

00:31:24.460 --> 00:31:24.920
All right.

00:31:25.100 --> 00:31:25.860
That was kind of sad.

00:31:25.960 --> 00:31:26.740
I'll give you a good one, Brian.

00:31:26.840 --> 00:31:27.300
Check this out.

00:31:27.480 --> 00:31:28.660
This is very relevant.

00:31:28.660 --> 00:31:34.820
So I want to, I went and I was just thinking like, I really want a better experience for people over at talk Python.

00:31:34.820 --> 00:31:38.240
And I'm doing a crazy amount of stuff with transcripts.

00:31:38.280 --> 00:31:40.920
Like I'll talk about it next week, probably.

00:31:41.480 --> 00:31:47.620
But for weeks I've been working on making transcripts better, more with the courses than with the podcast.

00:31:47.620 --> 00:31:49.380
But still it applies to both.

00:31:49.620 --> 00:31:53.760
And like, it would be really nice if there was a better playback experience on the web.

00:31:53.780 --> 00:31:57.740
Like imagine this, you come to the website, Python Bytes or talk Python, whatever.

00:31:57.740 --> 00:31:59.140
We've got really nice search.

00:31:59.220 --> 00:32:03.220
And I've talked about the work I've done on the Python Bytes search, which I think is really cool.

00:32:03.340 --> 00:32:08.800
Some of the ways you can search and jump around, but maybe you find something interesting from 200 episodes ago.

00:32:09.040 --> 00:32:16.640
Maybe you could get that on your podcast player, but you've got to like scroll back and like, how, you know, does your player cut off episodes older?

00:32:16.880 --> 00:32:18.000
And like, it's just not great.

00:32:18.040 --> 00:32:20.460
You might just want to watch it on the, listen to it on the web, right?

00:32:20.700 --> 00:32:20.860
Yeah.

00:32:21.080 --> 00:32:22.780
So you search for it, you click, you start going.

00:32:22.780 --> 00:32:31.240
And maybe you could have a better experience than just the default playback, you know, audio tag that for some reason browsers think doesn't deserve much love or interest.

00:32:31.380 --> 00:32:32.400
They're like, they're crappy.

00:32:32.500 --> 00:32:35.840
They look like they're from, you know, real player in 95, but whatever.

00:32:35.840 --> 00:32:42.780
So I went and I created a really nice playback experience where, let me just jump over.

00:32:43.260 --> 00:32:45.440
I'll link to the blog post here, but come in here.

00:32:45.600 --> 00:32:48.840
It's got nice little access to all the pieces, but it's got a player.

00:32:48.920 --> 00:32:52.740
If you click it, it expands out with like little seek stuff around.

00:32:52.880 --> 00:32:58.020
It shows the transcripts as it's playing, like right alongside the player.

00:32:58.140 --> 00:32:59.500
You can like change the speed.

00:32:59.500 --> 00:33:01.720
It's got hotkeys, all sorts.

00:33:01.920 --> 00:33:02.400
And that's slick.

00:33:02.760 --> 00:33:03.060
Oh yeah.

00:33:03.160 --> 00:33:06.700
And thanks for doing the speed thing too, because I'd never listened at 1x.

00:33:07.060 --> 00:33:07.360
Yeah.

00:33:07.480 --> 00:33:07.720
Yeah.

00:33:07.900 --> 00:33:10.040
So Python bytes go over here.

00:33:10.200 --> 00:33:11.680
I've got the same deal.

00:33:11.740 --> 00:33:14.640
I just didn't write a blog post about it because I did talk Python first, but look at that.

00:33:14.800 --> 00:33:16.240
Oh, very cool.

00:33:16.580 --> 00:33:17.080
Isn't that nice?

00:33:17.340 --> 00:33:22.280
So people out there listening, if you're like, I'm just kind of exploring our content.

00:33:22.360 --> 00:33:23.820
I mean, we've got a lot of years.

00:33:24.500 --> 00:33:25.860
How many years, what was our first episode?

00:33:25.920 --> 00:33:26.860
Let me just look really quick, Brian.

00:33:26.900 --> 00:33:27.940
What was our very first episode?

00:33:27.940 --> 00:33:30.080
It was 2016.

00:33:30.260 --> 00:33:32.820
That's 10 years of content.

00:33:33.080 --> 00:33:33.500
Yeah.

00:33:33.640 --> 00:33:36.240
We've got a great search engine and transcripts on top of that.

00:33:36.360 --> 00:33:38.540
And so if you're exploring that, you know, just use the player.

00:33:38.640 --> 00:33:39.540
I think it's really, really cool.

00:33:39.740 --> 00:33:41.420
We've been doing this for 10 years almost.

00:33:41.640 --> 00:33:42.260
I know.

00:33:42.700 --> 00:33:43.460
Damn, you're old.

00:33:43.960 --> 00:33:49.520
Dude, weird how like some people can get old and others in the same time frame just don't, right, Brian?

00:33:49.780 --> 00:33:50.220
Yeah.

00:33:50.620 --> 00:33:50.760
Yeah.

00:33:50.900 --> 00:33:51.460
Well, I guess.

00:33:52.240 --> 00:33:59.120
So you'll, this is funny because if you're watching this, you'll know it, that I'm the one with gray hair, not Michael.

00:33:59.460 --> 00:34:00.480
But you got more hair.

00:34:00.600 --> 00:34:01.500
So I think it evens out.

00:34:01.740 --> 00:34:03.940
So thank you.

00:34:03.980 --> 00:34:06.340
Pat says last pass reminds me of as I was stumbled on.

00:34:06.460 --> 00:34:06.680
Okay.

00:34:06.920 --> 00:34:08.060
A couple more things real quick.

00:34:08.600 --> 00:34:10.900
A combination of stuff in this last item.

00:34:10.900 --> 00:34:18.200
I both want to give a little bit, a little bit of sympathy to GitHub and then also kind of bash on him a little bit.

00:34:18.540 --> 00:34:20.140
So GitHub has been having.

00:34:20.240 --> 00:34:21.400
As we do, you know.

00:34:21.800 --> 00:34:22.920
As I think it's fair.

00:34:23.020 --> 00:34:24.120
Like, isn't that balanced?

00:34:24.500 --> 00:34:24.620
Yeah.

00:34:24.620 --> 00:34:27.500
I think you just got to say if there's two sides, you got to present them both equally.

00:34:27.640 --> 00:34:29.980
But there's, there's a little bit of nuance here.

00:34:30.060 --> 00:34:37.320
So I don't know if you've noticed, but GitHub has been a little janky lately and not in just the GitHub actions, which have been taking a lot of heat, but just uptime at all.

00:34:37.320 --> 00:34:42.780
Like I couldn't, I couldn't search the other day a little while before then, like issues were not accessible.

00:34:43.120 --> 00:34:46.780
I didn't experience this, but people had their pull requests just disappear.

00:34:47.000 --> 00:34:51.340
How frustrating would that be to do some work, submit a pull request and it just goes into the ether.

00:34:51.460 --> 00:34:52.580
You're like, are you serious?

00:34:52.780 --> 00:34:54.760
So here's the supportive angle.

00:34:55.280 --> 00:35:00.940
They, they did this, this post over on the GitHub blog called an update on GitHub availability.

00:35:01.700 --> 00:35:04.740
They have a graph that says things are hard for us.

00:35:04.820 --> 00:35:05.640
We're trying.

00:35:05.940 --> 00:35:07.020
They're doing a couple of things.

00:35:07.020 --> 00:35:11.760
I believe they're reworking GitHub from being a monolith into being a bunch of microservices.

00:35:11.760 --> 00:35:21.220
And I usually hate on microservices, but something like GitHub with all these different moving parts and different levels of traffic and load on them seems like you might want to, well,

00:35:21.220 --> 00:35:29.920
maybe we should just scale up the issues a bit, like a ton, but not so much just listing the repos or whatever.

00:35:30.240 --> 00:35:35.780
So apparently they're going through, they're like, oh, we need something like 10 X more capacity than we had a couple of years ago.

00:35:36.040 --> 00:35:38.940
And during that time, they're like, actually, no, maybe 30 X more.

00:35:39.420 --> 00:35:40.100
So it's a lot.

00:35:40.520 --> 00:35:47.460
And if you look at the graphs, if you look at the graphs, they are nothing but like nearly vertical in the amount of traffic and new repos and commits.

00:35:47.780 --> 00:35:55.740
And one of the main drivers of this is people, especially a lot of new people to programming who were not programmers are like, hey, Claude, create me a project.

00:35:55.780 --> 00:35:57.040
Where do I save my project?

00:35:57.220 --> 00:35:58.080
Oh, you put it on GitHub.

00:35:58.340 --> 00:35:58.920
You know what I mean?

00:35:58.920 --> 00:36:04.020
And so just the amount of traffic amplified by AI to GitHub is over the top.

00:36:04.280 --> 00:36:04.420
All right.

00:36:04.620 --> 00:36:14.460
So that explains- You know, maybe if we could charge like 50, if they charge like 50 cents a month, just something small, just, but anything like a dime a month, a lot of that would go away.

00:36:14.700 --> 00:36:15.540
That's really interesting.

00:36:15.700 --> 00:36:16.960
I would totally pay a dime a month.

00:36:17.060 --> 00:36:19.340
I think I pay $30 a month to get up.

00:36:19.540 --> 00:36:22.520
I wouldn't mind paying 30 and 10, 30 point, $30, 10 cents.

00:36:22.760 --> 00:36:23.500
Wouldn't make a difference.

00:36:24.360 --> 00:36:27.120
Anyway, no, I think that's a very interesting point, actually.

00:36:27.120 --> 00:36:27.560
Okay.

00:36:27.560 --> 00:36:28.520
So there's that.

00:36:28.860 --> 00:36:30.280
This is GitHub's response.

00:36:30.620 --> 00:36:33.060
Did you know that there's a missing GitHub status page?

00:36:33.460 --> 00:36:34.280
Yes, there is.

00:36:34.560 --> 00:36:37.780
If you go back to the previous one, somewhere did they talk about their uptime?

00:36:38.160 --> 00:36:40.360
How could it exist if it's missing?

00:36:40.740 --> 00:36:42.400
So is there a status?

00:36:42.840 --> 00:36:43.020
Yeah.

00:36:43.060 --> 00:36:47.300
So if you go to GitHub status page, it says, oh, Git operations are up, up, up.

00:36:47.480 --> 00:36:48.580
Web hooks are up, up, up.

00:36:48.620 --> 00:36:54.380
And it talks about like, it doesn't aggregate it, but it's like 99.5 sort of uptime.

00:36:54.380 --> 00:36:58.500
But then there's another page, which ironically is hosted on GitHub.io.

00:36:58.660 --> 00:36:59.200
I love it.

00:36:59.480 --> 00:37:00.820
It's like its own thing.

00:37:01.260 --> 00:37:04.280
And it basically does other types of checks.

00:37:04.440 --> 00:37:07.300
And it's like, you know, 84% uptime.

00:37:07.460 --> 00:37:09.440
That is actually pretty abysmal.

00:37:09.800 --> 00:37:10.040
Yeah.

00:37:10.300 --> 00:37:11.340
And it just has graphs.

00:37:11.560 --> 00:37:13.840
And it actually breaks out pull requests and all these things.

00:37:14.140 --> 00:37:16.200
And here you look and you see kind of similar numbers.

00:37:16.320 --> 00:37:17.700
It's like the Git operations are this.

00:37:17.940 --> 00:37:18.720
Web hooks are this.

00:37:18.720 --> 00:37:23.180
But I think it says, if any of these are down, then you don't call it up.

00:37:23.580 --> 00:37:23.960
You know what I mean?

00:37:24.280 --> 00:37:26.940
Whereas the other one goes, if some of it is up, it's up.

00:37:27.580 --> 00:37:28.460
Not all of it.

00:37:28.520 --> 00:37:30.380
I mean, you don't like issues right now, do you?

00:37:30.640 --> 00:37:33.340
I don't know exactly the breakdown there.

00:37:33.400 --> 00:37:36.400
But I just thought this missing GitHub status page was really interesting.

00:37:36.760 --> 00:37:37.020
Yeah.

00:37:37.200 --> 00:37:38.120
They should do better.

00:37:38.420 --> 00:37:41.380
I mean, I know that a lot of us are using it for free.

00:37:42.240 --> 00:37:46.800
But also, we've paid for it with all of our intellectual property.

00:37:46.800 --> 00:37:48.640
Yeah, exactly.

00:37:49.080 --> 00:37:49.800
I mean, that's...

00:37:50.420 --> 00:37:51.460
And attention, right?

00:37:51.520 --> 00:37:58.120
The reason that there's not a mass exodus to something new or shinier is because this is where most of the people are.

00:37:58.260 --> 00:38:01.540
I know there is something of an exodus, but not a mass exodus, right?

00:38:01.780 --> 00:38:02.080
Yeah.

00:38:02.460 --> 00:38:04.300
You get benefits from being on GitHub.

00:38:04.580 --> 00:38:04.880
Okay.

00:38:05.420 --> 00:38:11.880
I think all of these conversations about these AI things and stuff and others perfectly lead into this joke.

00:38:11.980 --> 00:38:14.800
And this is probably one of my favorite jokes.

00:38:14.800 --> 00:38:15.080
Okay.

00:38:15.080 --> 00:38:17.400
At least of the year.

00:38:17.520 --> 00:38:18.220
Have you looked at it yet?

00:38:18.480 --> 00:38:18.720
No.

00:38:19.060 --> 00:38:19.300
Okay.

00:38:19.420 --> 00:38:19.780
Perfect.

00:38:19.980 --> 00:38:20.160
Okay.

00:38:20.540 --> 00:38:21.560
So I found this on X.

00:38:21.980 --> 00:38:22.900
And I'm programming humor.

00:38:23.040 --> 00:38:24.260
I guess it could also be on Reddit.

00:38:24.400 --> 00:38:26.500
Like they broadcast that in multiple places.

00:38:26.920 --> 00:38:30.640
So this is like two different perspectives from society.

00:38:31.000 --> 00:38:33.160
And it's talking about Copilot, but it could be ChatGPT.

00:38:33.240 --> 00:38:34.040
It could be Claude, whatever.

00:38:34.380 --> 00:38:35.340
Friends outside of tech.

00:38:35.580 --> 00:38:36.980
Lol, Copilot is dumb.

00:38:37.260 --> 00:38:37.820
Friends in tech.

00:38:38.060 --> 00:38:39.440
I just bought iodine tablets.

00:38:39.640 --> 00:38:41.220
I have made an offer on land upstate.

00:38:41.220 --> 00:38:47.020
My supplies of antibiotics and potable water are sufficient, but I need to set up hydroponics to make it through the first few years.

00:38:49.180 --> 00:38:51.740
Did that just perfectly sum it up?

00:38:53.100 --> 00:38:53.260
Yeah.

00:38:53.340 --> 00:38:54.980
It's like, this is a dumb thing.

00:38:55.040 --> 00:38:56.800
Look, it made this thing longer.

00:38:56.800 --> 00:38:58.800
We're like, I'm almost done stockpiling.

00:38:58.900 --> 00:39:00.020
We're ready to build the bunker.

00:39:00.820 --> 00:39:01.840
I know what is coming.

00:39:01.980 --> 00:39:02.600
I can see it.

00:39:02.660 --> 00:39:03.260
It's so bad.

00:39:04.080 --> 00:39:04.300
Yeah.

00:39:04.660 --> 00:39:08.880
I'm, I've just like, I've just, I know that I'm dependent on society.

00:39:09.000 --> 00:39:15.640
If society collapses, just, I hope I'm one of the first to get hit because I don't want to live through an apocalypse.

00:39:16.180 --> 00:39:17.220
I really don't either.

00:39:17.520 --> 00:39:18.860
I'm not a survivalist.

00:39:18.860 --> 00:39:25.400
So, well, stock up on your, iodine tablets and your potable water.

00:39:25.560 --> 00:39:26.300
Oh my God.

00:39:26.400 --> 00:39:27.060
It's so bad.

00:39:29.040 --> 00:39:39.060
Well, so I've got, I've got a friend that like, they've got like a group of friends that have a place like in Southern Oregon that they, they know they can hole up in and stuff.

00:39:39.520 --> 00:39:40.780
If anything happens.

00:39:40.780 --> 00:39:41.960
And I said, oh, okay.

00:39:41.960 --> 00:39:45.660
So, so do you make sure that you always have a full tank of gas?

00:39:45.680 --> 00:39:47.580
So if anything happens, you can make it there.

00:39:47.580 --> 00:39:48.320
Oh no.

00:39:48.680 --> 00:39:51.120
Well, how are you going to get there?

00:39:51.340 --> 00:39:53.000
Are you going to walk to Southern Oregon?

00:39:53.440 --> 00:39:53.660
Anyway.

00:39:55.560 --> 00:39:56.000
So.

00:39:56.340 --> 00:39:56.440
Yeah.

00:39:56.540 --> 00:39:57.040
Good point.

00:39:57.240 --> 00:40:01.000
There's a lot of moving pieces and the one you didn't see coming might be the one that takes you.

00:40:01.000 --> 00:40:05.080
I hope he doesn't listen to this, this podcast, but I hope everybody else does.

00:40:05.320 --> 00:40:05.960
Yes, exactly.

00:40:06.360 --> 00:40:10.060
Well, everyone, hope your supplies are ready and thank you for listening.

00:40:10.520 --> 00:40:11.060
Thank you.

00:40:11.360 --> 00:40:11.760
Bye.

00:40:11.820 --> 00:40:12.340
Thanks everybody.

00:40:12.560 --> 00:40:12.780
Bye.
