WEBVTT

00:00:00.020 --> 00:00:01.480
<v Brian Okken>Hello and welcome to Python Bytes,

00:00:01.650 --> 00:00:04.700
<v Brian Okken>where we deliver Python news and headlines directly to your earbuds.

00:00:05.110 --> 00:00:09.520
<v Brian Okken>This is episode 463, recorded December 22, 2025.

00:00:10.360 --> 00:00:11.060
<v Brian Okken>I'm Brian Okken.

00:00:11.360 --> 00:00:12.240
<v Brian Okken>And I am Michael Kennedy.

00:00:12.560 --> 00:00:14.560
<v Brian Okken>And this episode is sponsored by us.

00:00:14.880 --> 00:00:19.780
<v Brian Okken>So support us by heading over to Michael's courses,

00:00:20.140 --> 00:00:23.940
<v Brian Okken>my courses, Talk Python Training or python test.com,

00:00:24.600 --> 00:00:28.740
<v Brian Okken>or just go over and see what we got at the pythonbytes.fm.

00:00:29.840 --> 00:00:34.380
<v Brian Okken>Let me add one more thing real quick there, Brian. Sorry to hijack your intro, but hey,

00:00:34.900 --> 00:00:41.520
<v Michael Kennedy>we're coming up on 2026 and it's about time to be scheduling sponsors on the ad calendar for the

00:00:41.640 --> 00:00:45.560
<v Michael Kennedy>next year. So if companies out there, if you're listening, you're like, why does my company not

00:00:45.780 --> 00:00:50.000
<v Michael Kennedy>support Python Bytes and sponsor it? Yes, a fine question you should be taking up with your

00:00:50.160 --> 00:00:54.660
<v Michael Kennedy>marketing team. Have them reach out to me. And right now there's a bunch of openings. We'll see

00:00:54.720 --> 00:00:57.040
<v Michael Kennedy>if they get bought up or not as things go.

00:00:57.200 --> 00:00:58.620
<v Michael Kennedy>But yeah, just send me an email.

00:00:58.900 --> 00:01:00.480
<v Brian Okken>Yeah, actually, that'd be great.

00:01:00.660 --> 00:01:02.820
<v Brian Okken>I'd love to have more sponsors on the show.

00:01:04.640 --> 00:01:07.980
<v Brian Okken>If you want to reach us for sponsoring

00:01:08.120 --> 00:01:09.260
<v Brian Okken>or any other ways,

00:01:11.380 --> 00:01:16.020
<v Brian Okken>there's links on the show page, pythonbytes.fm.

00:01:16.740 --> 00:01:19.080
<v Brian Okken>You can also find links to all of our socials.

00:01:19.540 --> 00:01:21.500
<v Brian Okken>We're at Mastodon and Fosstodon,

00:01:21.820 --> 00:01:23.900
<v Brian Okken>both us individually and the show.

00:01:24.660 --> 00:01:27.820
<v Brian Okken>And also, if you'd like to watch us live,

00:01:28.200 --> 00:01:31.180
<v Brian Okken>you can go to pythonbytes.com/live

00:01:31.240 --> 00:01:33.280
<v Brian Okken>and see what it is and find the links.

00:01:33.600 --> 00:01:35.720
<v Brian Okken>And then as well, while you're there,

00:01:36.020 --> 00:01:37.660
<v Brian Okken>sign up for the mailing list

00:01:37.840 --> 00:01:39.700
<v Brian Okken>so we can send you all the links we talk about

00:01:40.000 --> 00:01:40.980
<v Brian Okken>directly to your inbox.

00:01:41.640 --> 00:01:43.940
<v Brian Okken>Alrighty, oh, one more thing before we get started.

00:01:44.620 --> 00:01:48.400
<v Brian Okken>We are taking, normally we record on Monday mornings

00:01:48.960 --> 00:01:51.400
<v Brian Okken>and we are taking next week off

00:01:51.820 --> 00:01:53.500
<v Brian Okken>and we will be back in 2026.

00:01:54.160 --> 00:01:56.120
<v Michael Kennedy>All right. Kick us off, Michael.

00:01:56.740 --> 00:02:01.780
<v Michael Kennedy>It's end of the year. As you said, we'll be back first week of January.

00:02:02.240 --> 00:02:07.180
<v Michael Kennedy>But it's a little bit of an introspective end of the year is what I want to leave people with.

00:02:07.840 --> 00:02:13.680
<v Michael Kennedy>So people may have noticed I usually cover tools, libraries, or updates to those kinds of things and so on.

00:02:14.000 --> 00:02:20.280
<v Michael Kennedy>But on this episode, I want to cover two articles that I came across recently that I think they'll make you think.

00:02:20.540 --> 00:02:23.280
<v Michael Kennedy>They'll make you really evaluate the situation.

00:02:23.740 --> 00:02:29.960
<v Michael Kennedy>One has to do with agentic coding and one has to do with why open source won and continues to win.

00:02:30.540 --> 00:02:34.280
<v Michael Kennedy>But more importantly, what is one of the really key ingredients?

00:02:34.690 --> 00:02:40.640
<v Michael Kennedy>So as we look towards the future for more sustainability, let's not kill the golden goose by changing that thing.

00:02:40.830 --> 00:02:45.740
<v Michael Kennedy>So the first one is, has the cost of building software just dropped 90 percent?

00:02:46.260 --> 00:02:48.500
<v Michael Kennedy>That's a pretty stark headline, isn't it?

00:02:48.860 --> 00:02:49.020
<v Michael Kennedy>Yeah.

00:02:49.270 --> 00:02:50.480
<v Michael Kennedy>And what are the consequences? Right.

00:02:50.660 --> 00:02:56.600
<v Michael Kennedy>Does that mean, does that mean like, well, you thought it was hard to get a job earlier as a junior and just hang on to your pants now?

00:02:57.100 --> 00:02:58.260
<v Michael Kennedy>Or does it mean something else?

00:02:58.330 --> 00:02:58.600
<v Michael Kennedy>We'll see.

00:02:58.860 --> 00:03:02.140
<v Michael Kennedy>Well, at least we'll see what Martin Alderson said, because that's the article.

00:03:02.190 --> 00:03:06.140
<v Michael Kennedy>He wrote this article and I think it is super insightful and interesting.

00:03:06.460 --> 00:03:10.720
<v Michael Kennedy>So I kind of want to just pull out some highlights and put it out there for you all to think about as you got some downtime.

00:03:10.800 --> 00:03:23.180
<v Michael Kennedy>So the premise is basically that many of the recent programming quote advancements that are like gonna change the world, gonna actually absolutely change the way things work, haven't really.

00:03:23.680 --> 00:03:33.100
<v Michael Kennedy>For example, test-driven development, cloud computing, especially hyperscale clouds, microservices, complex front ends like React and so on, Angular, whatever.

00:03:33.640 --> 00:03:38.340
<v Michael Kennedy>Kubernetes, sure, they're advancements and they help in some way or another for various things,

00:03:38.560 --> 00:03:42.980
<v Michael Kennedy>but they're not bending the curve dramatically on how we write software, how much more we get done,

00:03:43.260 --> 00:03:49.520
<v Michael Kennedy>and so on. Somewhat, but not massively. But they say, let me see if I can find it. Yeah, here we go.

00:03:50.360 --> 00:03:56.760
<v Michael Kennedy>The economics have dramatically changed now with agentic coding. And I agree. I think it really

00:03:57.380 --> 00:04:02.540
<v Michael Kennedy>has. And I know a lot of people are frustrated with AI or they don't want to use AI and so on.

00:04:02.900 --> 00:04:08.060
<v Michael Kennedy>I'm not here to make people do that, but I am here to put on your radar that this is something you're going to have to be paying attention to.

00:04:08.480 --> 00:04:09.520
<v Michael Kennedy>And Martin thinks so as well.

00:04:09.690 --> 00:04:13.400
<v Michael Kennedy>Says in 2026 is going to catch a lot of people off guard.

00:04:13.520 --> 00:04:14.320
<v Michael Kennedy>And I think so too.

00:04:14.740 --> 00:04:24.360
<v Michael Kennedy>So it kind of goes through the history a little bit of like changes, how open source actually made a huge change, how cloud was supposed to make a big change, but it just added a crap ton of complexity.

00:04:25.150 --> 00:04:25.900
<v Michael Kennedy>A lot of other things.

00:04:26.240 --> 00:04:30.880
<v Michael Kennedy>So in a lot of just sort of how complexity has grown over time, instead of these things

00:04:31.070 --> 00:04:35.420
<v Michael Kennedy>making us able to write more software or better software, a lot of times it's just handle

00:04:35.530 --> 00:04:37.560
<v Michael Kennedy>more complex software or kind of doing the same thing.

00:04:37.820 --> 00:04:40.640
<v Michael Kennedy>So where's the 90% savings come from?

00:04:41.040 --> 00:04:46.660
<v Michael Kennedy>So he says, like you, probably I was incredibly skeptical of a lot of AI coding tools at the

00:04:46.800 --> 00:04:49.360
<v Michael Kennedy>beginning of the year, but things are changing fast.

00:04:49.840 --> 00:04:55.120
<v Michael Kennedy>And previously, if I want to, let's say I want to add some small capability to my app.

00:04:55.290 --> 00:04:55.840
<v Michael Kennedy>How do you do it?

00:04:55.940 --> 00:04:57.380
<v Michael Kennedy>Well, you're going to assemble a team of people.

00:04:57.600 --> 00:04:58.860
<v Michael Kennedy>You're going to set up continuous integration.

00:04:59.460 --> 00:05:00.940
<v Michael Kennedy>You're going to build out data access patterns,

00:05:01.160 --> 00:05:03.060
<v Michael Kennedy>and you're going to plan that out in an architecture meeting.

00:05:03.480 --> 00:05:06.140
<v Michael Kennedy>Really, it's just a bunch of crud, but people make a big deal out of it.

00:05:06.820 --> 00:05:09.500
<v Michael Kennedy>So you're going to over-engineer it probably.

00:05:10.100 --> 00:05:11.920
<v Michael Kennedy>And you're going to set up some testing and so on.

00:05:12.320 --> 00:05:13.500
<v Michael Kennedy>And that's just direct labor, right?

00:05:13.760 --> 00:05:14.440
<v Michael Kennedy>You've got all the management.

00:05:14.820 --> 00:05:16.780
<v Michael Kennedy>And one of the things that's really interesting about this article

00:05:17.300 --> 00:05:20.020
<v Michael Kennedy>is the mythical man month aspect of this.

00:05:20.220 --> 00:05:21.660
<v Michael Kennedy>Like, okay, well, that's going to take two weeks.

00:05:21.920 --> 00:05:23.380
<v Michael Kennedy>Well, what if we add four people to it?

00:05:23.580 --> 00:05:24.560
<v Michael Kennedy>Well, it'll take one and a half weeks.

00:05:24.720 --> 00:05:26.440
<v Michael Kennedy>Like, wait, why is that not half a week?

00:05:26.800 --> 00:05:28.860
<v Michael Kennedy>You know, it's like the coordination, the communication,

00:05:29.360 --> 00:05:33.040
<v Michael Kennedy>the in factorial ways in which there can be like blocking

00:05:33.560 --> 00:05:36.780
<v Michael Kennedy>or communication or meetings or coordination and so on.

00:05:37.020 --> 00:05:39.200
<v Michael Kennedy>And so these coding tools have got really, really good.

00:05:39.580 --> 00:05:42.800
<v Michael Kennedy>And as you add one of these coding tools in,

00:05:43.260 --> 00:05:45.340
<v Michael Kennedy>you don't have to have meetings with it.

00:05:45.620 --> 00:05:48.520
<v Michael Kennedy>You don't have to have it working with three other ones of them

00:05:48.920 --> 00:05:51.580
<v Michael Kennedy>so that it can coordinate different skill sets and so on.

00:05:51.700 --> 00:05:56.380
<v Michael Kennedy>And so in a sense, it really lowers the number of connections in that mythical man month,

00:05:56.410 --> 00:05:57.600
<v Michael Kennedy>but still adds a lot of capabilities.

00:05:57.630 --> 00:05:58.300
<v Michael Kennedy>So pretty interesting.

00:05:58.660 --> 00:06:02.600
<v Michael Kennedy>So final takeaway is like on the face of it, this seems like incredibly bad news for the

00:06:02.710 --> 00:06:03.800
<v Michael Kennedy>software development industry.

00:06:04.970 --> 00:06:05.080
<v Michael Kennedy>Indeed.

00:06:05.820 --> 00:06:07.040
<v Michael Kennedy>But a look at history.

00:06:07.680 --> 00:06:07.980
<v Michael Kennedy>Let's see.

00:06:08.270 --> 00:06:16.660
<v Michael Kennedy>So Jevons paradox comes from back in the day when coal usage became super efficient, right?

00:06:16.780 --> 00:06:21.660
<v Michael Kennedy>Instead of just burning it in an open pit or whatever to like heat something, we put it

00:06:21.680 --> 00:06:27.460
<v Michael Kennedy>know the steam engines and it does way more work per you know joule of energy or whatever right

00:06:27.660 --> 00:06:32.440
<v Michael Kennedy>it says look at least this guy martin thinks this applies jevon's paradox also is going to apply to

00:06:32.640 --> 00:06:37.220
<v Michael Kennedy>software that when something becomes cheaper to produce it's not that we just use it less it's

00:06:37.300 --> 00:06:41.940
<v Michael Kennedy>like well we've got five developers but now they're way more efficient so let's get rid of four of them

00:06:42.260 --> 00:06:45.900
<v Michael Kennedy>that's one possible outcome the other is like let's just build five times as much software

00:06:46.200 --> 00:06:47.220
<v Michael Kennedy>as we used to, right?

00:06:47.580 --> 00:06:49.240
<v Michael Kennedy>And so an example is from history

00:06:49.520 --> 00:06:51.920
<v Michael Kennedy>is when coal became way cheaper,

00:06:52.420 --> 00:06:54.100
<v Michael Kennedy>its use skyrocketed,

00:06:54.440 --> 00:06:56.060
<v Michael Kennedy>not cheaper, efficient, right?

00:06:56.200 --> 00:06:58.020
<v Michael Kennedy>Like you didn't need to spend as much coal

00:06:58.340 --> 00:06:58.960
<v Michael Kennedy>to get stuff done.

00:06:59.180 --> 00:07:02.400
<v Michael Kennedy>But in fact, it actually blew up way, way more.

00:07:02.620 --> 00:07:03.660
<v Michael Kennedy>So super interesting.

00:07:03.900 --> 00:07:04.900
<v Michael Kennedy>And I think there's something to that.

00:07:04.900 --> 00:07:07.860
<v Michael Kennedy>I think there's a ton of latent demand for software.

00:07:08.500 --> 00:07:10.660
<v Michael Kennedy>So anyway, there's a whole section on that

00:07:10.740 --> 00:07:11.900
<v Michael Kennedy>that's pretty interesting, I think.

00:07:12.540 --> 00:07:14.260
<v Brian Okken>Yeah, I think there is a lot of,

00:07:14.840 --> 00:07:17.640
<v Brian Okken>I've mixed emotions about this.

00:07:17.640 --> 00:07:19.160
<v Brian Okken>I think there is a lot of light in demand.

00:07:19.540 --> 00:07:27.460
<v Brian Okken>I am dealing with both agent-driven or agent-developed software on a professional basis,

00:07:27.880 --> 00:07:32.520
<v Brian Okken>both from experts and from novices in a company.

00:07:33.460 --> 00:07:39.580
<v Brian Okken>And it's producing five times as much code, but you get five times as much bad code from

00:07:39.960 --> 00:07:40.520
<v Brian Okken>bad developers.

00:07:41.180 --> 00:07:50.280
<v Brian Okken>I'm just saying, there is a, like, let's say we have five times the amount of code or five times the product, you know, do more things.

00:07:50.900 --> 00:07:55.200
<v Brian Okken>That's 5xing your code base that you have to maintain in the future, too.

00:07:55.620 --> 00:08:04.060
<v Brian Okken>And we really haven't figured out how to deal with the increased maintenance cost of this agent-driven software yet.

00:08:04.840 --> 00:08:06.080
<v Brian Okken>Yeah, I agree with that.

00:08:06.420 --> 00:08:12.780
<v Brian Okken>Also, the test-driven development, I think we didn't get the gains out of that because people were teaching it wrong.

00:08:14.240 --> 00:08:16.100
<v Brian Okken>Just kind of a point from my book.

00:08:16.980 --> 00:08:17.640
<v Michael Kennedy>Of course.

00:08:17.870 --> 00:08:24.260
<v Michael Kennedy>But I think also there's a difference between full-on extreme programming and just, hey, let's make sure we have tests for our code.

00:08:25.020 --> 00:08:28.480
<v Brian Okken>Yeah, there's also, should we test our code and should we unit test it?

00:08:28.780 --> 00:08:31.700
<v Brian Okken>And that's the big part that I get.

00:08:32.050 --> 00:08:35.919
<v Brian Okken>But also, can we scroll up to that complexity chart?

00:08:36.400 --> 00:08:37.320
<v Brian Okken>or the little graph,

00:08:37.760 --> 00:08:42.060
<v Brian Okken>I think that AI agents are going to not drive down complexity.

00:08:42.979 --> 00:08:45.940
<v Brian Okken>I think we might get efficiency gains,

00:08:46.220 --> 00:08:47.240
<v Brian Okken>but I don't think,

00:08:47.370 --> 00:08:48.320
<v Brian Okken>I think we're going to get some,

00:08:48.640 --> 00:08:51.060
<v Brian Okken>the complexity is going to go up just like it did with cloud.

00:08:52.500 --> 00:08:54.460
<v Michael Kennedy>You know, what's really interesting about all this discussion,

00:08:54.840 --> 00:08:56.220
<v Michael Kennedy>and I'm not disagreeing with you on this.

00:08:56.530 --> 00:08:57.760
<v Michael Kennedy>I think it's,

00:08:58.180 --> 00:09:01.280
<v Michael Kennedy>if people have the opinion that are just going to like cut,

00:09:01.520 --> 00:09:03.180
<v Michael Kennedy>set these things loose on code bases,

00:09:03.350 --> 00:09:05.100
<v Michael Kennedy>or especially on greenfield projects,

00:09:05.460 --> 00:09:08.980
<v Michael Kennedy>you're going to end up with all sorts of mishmashes of stuff.

00:09:09.030 --> 00:09:11.400
<v Michael Kennedy>Like, oh, this time it decided it wanted to react,

00:09:11.640 --> 00:09:12.660
<v Michael Kennedy>but last time it used Vue.

00:09:12.750 --> 00:09:13.900
<v Michael Kennedy>Like, now I have to know two frameworks.

00:09:13.990 --> 00:09:15.280
<v Michael Kennedy>Like, why am I doing this, right?

00:09:15.580 --> 00:09:15.860
<v Michael Kennedy>Yeah.

00:09:16.120 --> 00:09:19.920
<v Michael Kennedy>There are a bunch of engineering practices and tools

00:09:20.100 --> 00:09:22.760
<v Michael Kennedy>to apply to this stuff to get much more constrained,

00:09:23.240 --> 00:09:26.260
<v Michael Kennedy>uniform output out of it than just letting it go free, right?

00:09:26.460 --> 00:09:28.740
<v Michael Kennedy>And also, to Martin's defense, he says, like, look,

00:09:29.120 --> 00:09:30.340
<v Michael Kennedy>this is not vibe coding.

00:09:30.480 --> 00:09:32.180
<v Michael Kennedy>This is not just letting the thing go.

00:09:32.340 --> 00:09:34.580
<v Michael Kennedy>This is, like, engineer plus...

00:09:34.580 --> 00:09:35.100
<v Michael Kennedy>Working with it.

00:09:35.180 --> 00:09:40.320
<v Michael Kennedy>these tools right like human in the loop all the way and even if we can get like your expert

00:09:40.600 --> 00:09:44.740
<v Brian Okken>engineers at your company to work twice as fat like get twice as much productivity out of them

00:09:44.920 --> 00:09:50.100
<v Brian Okken>and they're going to actually be happier because they're um it's like they've got a second brain

00:09:50.440 --> 00:09:57.460
<v Brian Okken>working with them even 2x like is incredible to get incredible yeah to get your best engineers

00:09:58.140 --> 00:10:05.140
<v Brian Okken>um to get to figure out stuff faster also um even not generating code but even just having stuff

00:10:05.160 --> 00:10:08.340
<v Brian Okken>explain it to you. Like, how does this algorithm work? What should I care about?

00:10:09.820 --> 00:10:15.160
<v Brian Okken>Asking it what tests you should write, asking it where the problem areas might be. Those are

00:10:15.340 --> 00:10:20.820
<v Brian Okken>incredible things that we couldn't do before without trying to pull other people off of their

00:10:20.820 --> 00:10:25.900
<v Michael Kennedy>own projects. So, yeah. Yeah, absolutely. So two more thoughts before we wrap this up quickly.

00:10:27.120 --> 00:10:33.240
<v Michael Kennedy>One down at the bottom here talks about, hold on before I lose track of where I was. Yeah,

00:10:33.400 --> 00:10:37.860
<v Michael Kennedy>Greenfield. Okay. So one objection is just not in a header sort of thing. One objection that I hear

00:10:37.860 --> 00:10:42.940
<v Michael Kennedy>a lot is LLMs are only good at Greenfield projects. And you were kind of talking about that as well,

00:10:43.080 --> 00:10:48.720
<v Michael Kennedy>Brian, but I actually strongly disagree with this based on my experience. And so does Martin,

00:10:48.840 --> 00:10:54.920
<v Michael Kennedy>by the way. Yeah, I do too. So I think when you turn an agentic LLM loose on a Greenfield project,

00:10:55.340 --> 00:11:00.340
<v Michael Kennedy>it just does whatever is popular on the internet that it's done, or it thinks it's trained on or

00:11:00.360 --> 00:11:04.520
<v Michael Kennedy>whatever, when you turn it loose on a greenfield project, if you're careful and you set up the

00:11:04.640 --> 00:11:08.860
<v Michael Kennedy>guidelines, it can follow the same patterns that are already established in the code and use the

00:11:08.980 --> 00:11:15.460
<v Michael Kennedy>same libraries and use the same techniques. And I just used, I spent, I would say probably an hour

00:11:15.880 --> 00:11:22.000
<v Michael Kennedy>coming up with a prompt to do a security review for some of my code, an hour before I started,

00:11:22.400 --> 00:11:28.640
<v Michael Kennedy>even before I try that, working on exactly what I wanted it to do, how I wanted to do it,

00:11:28.700 --> 00:11:30.300
<v Michael Kennedy>how I wanted to go about fixing it.

00:11:30.480 --> 00:11:36.600
<v Michael Kennedy>And I got what looks like top tier security pen testing analysis on a code base.

00:11:36.980 --> 00:11:38.240
<v Michael Kennedy>And I thought that is awesome.

00:11:38.380 --> 00:11:40.380
<v Michael Kennedy>And that's because it was not a greenfield project.

00:11:40.780 --> 00:11:44.760
<v Michael Kennedy>It was thousands and thousands of lines of code that had been around for a long time

00:11:44.880 --> 00:11:46.560
<v Michael Kennedy>with established patterns of solving things.

00:11:46.700 --> 00:11:48.260
<v Michael Kennedy>And it was very, very, very good.

00:11:48.540 --> 00:11:53.200
<v Michael Kennedy>So yeah, I would like to put it on the world that that is when done right.

00:11:53.340 --> 00:11:56.600
<v Michael Kennedy>That is not, I think greenfield projects are less good, not better.

00:11:56.960 --> 00:11:57.060
<v Michael Kennedy>Yeah.

00:11:57.200 --> 00:11:58.560
<v Michael Kennedy>Because they have nothing to go on.

00:11:58.680 --> 00:12:02.740
<v Michael Kennedy>right they just go on whatever they feel like i haven't really done a lot of greenfield on

00:12:03.030 --> 00:12:10.840
<v Brian Okken>stuff i think greenfield for for throwaway code or for just like uh like scripts that you it just has

00:12:10.840 --> 00:12:16.560
<v Brian Okken>to get the job done sort of the internal thing i think those are fine but um oh gosh i had an

00:12:16.960 --> 00:12:23.160
<v Brian Okken>incredible recent experience with just um getting stuck on an algorithm that was too slow and uh

00:12:23.300 --> 00:12:31.120
<v Brian Okken>i spent an hour with an llm uh and an agent um trying to um get it faster and it was like an

00:12:31.360 --> 00:12:37.840
<v Brian Okken>intense hour you know yeah exactly and then i just threw it in a branch and slept on it and

00:12:37.980 --> 00:12:43.200
<v Brian Okken>came back the next day and made spent another hour trying to make sure i understood all of it

00:12:43.370 --> 00:12:48.800
<v Brian Okken>and i and um and tweaking it more there were some non-pythonic things that i got rid of it had

00:12:48.700 --> 00:12:53.140
<v Brian Okken>recursion in there and i'm like let's get rid of that and we actually made it faster than we did

00:12:53.300 --> 00:12:59.300
<v Brian Okken>before so spending a like don't don't stop with it works go a little bit further to make sure that

00:12:59.400 --> 00:13:03.740
<v Brian Okken>you can maintain it in the future it doesn't take that much extra time and you're going to still be

00:13:03.840 --> 00:13:08.620
<v Brian Okken>proud of it and it was an incredible experience and i'm definitely going to do that again so yeah

00:13:09.280 --> 00:13:15.519
<v Michael Kennedy>definitely should be partners like a like a super excited coding buddy not not just a junior you just

00:13:16.420 --> 00:13:22.460
<v Brian Okken>send stuff to and make it go and then i but i also spent some time an hour recently or two

00:13:22.960 --> 00:13:30.000
<v Brian Okken>reviewing some test code from a junior developer and i obviously this stuff was just spit out by a

00:13:30.140 --> 00:13:38.980
<v Brian Okken>agent and um and it didn't make sense and i and so it just took time away for me to review bad code

00:13:39.110 --> 00:13:44.660
<v Brian Okken>and that's going to take away from your experts as well so yeah yeah that's a very good

00:13:44.460 --> 00:13:44.540
<v Brian Okken>Good point.

00:13:45.060 --> 00:13:46.220
<v Brian Okken>It is indeed.

00:13:47.400 --> 00:13:47.720
<v Brian Okken>All right.

00:13:47.760 --> 00:13:49.240
<v Brian Okken>We should have a warning or something about that, Brian.

00:13:49.360 --> 00:13:50.460
<v Brian Okken>A warning, yeah.

00:13:50.730 --> 00:13:54.600
<v Brian Okken>So last episode, we talked about deprecation warnings.

00:13:55.480 --> 00:13:59.180
<v Brian Okken>And I have to admit, I didn't do enough research on that.

00:13:59.250 --> 00:14:01.160
<v Brian Okken>So I'm glad that listeners chimed in.

00:14:01.820 --> 00:14:03.380
<v Brian Okken>We got a couple of listener feedbacks.

00:14:03.400 --> 00:14:06.500
<v Brian Okken>One of them I'm going to credit because we got his email right up here.

00:14:06.660 --> 00:14:12.140
<v Brian Okken>John Hagan mentioned you should totally use from warnings, import deprecated,

00:14:12.360 --> 00:14:17.500
<v Brian Okken>And instead of calling your own, calling warn, use the decorator deprecating.

00:14:17.820 --> 00:14:20.900
<v Brian Okken>And I totally, now after playing with it, totally agree.

00:14:21.120 --> 00:14:21.420
<v Brian Okken>It's awesome.

00:14:21.580 --> 00:14:22.940
<v Brian Okken>So let's back up a little bit.

00:14:23.100 --> 00:14:29.440
<v Brian Okken>We started with this Seth Larson article about deprecations via warnings don't work for Python libraries.

00:14:29.760 --> 00:14:34.860
<v Brian Okken>And I kind of agree after experimenting because I played with it a bit.

00:14:35.020 --> 00:14:41.880
<v Brian Okken>And one of the things that I found out was in, so in the Python documentation, one of the things that's cool.

00:14:42.020 --> 00:14:45.440
<v Brian Okken>somebody mentioned this and I didn't really know about it is development mode.

00:14:45.690 --> 00:14:51.220
<v Brian Okken>So there's dash X dev and you can also set it with a Python dev mode environmental variable.

00:14:52.740 --> 00:14:57.020
<v Brian Okken>And it sets a bunch of stuff, including setting the default warnings to W.

00:14:57.340 --> 00:15:00.320
<v Brian Okken>And the reason why that's important, I'm like, why is that important?

00:15:00.680 --> 00:15:04.900
<v Brian Okken>The reason is important in Seth alludes to it, but doesn't point it out directly,

00:15:05.300 --> 00:15:10.820
<v Brian Okken>is in the dash WR argument for Python, you could say just ignore,

00:15:11.420 --> 00:15:12.640
<v Brian Okken>like ignore all warnings.

00:15:13.420 --> 00:15:14.720
<v Brian Okken>And I think it's just,

00:15:14.880 --> 00:15:16.200
<v Brian Okken>you can either ignore all warnings

00:15:16.440 --> 00:15:18.140
<v Brian Okken>or it even tells you, for example,

00:15:18.520 --> 00:15:20.300
<v Brian Okken>to ignore all your deprecation warnings,

00:15:20.440 --> 00:15:20.920
<v Brian Okken>do this.

00:15:21.400 --> 00:15:24.360
<v Brian Okken>Ouch, I kind of wish they hadn't mentioned that.

00:15:25.520 --> 00:15:26.960
<v Brian Okken>Don't encourage people, come on.

00:15:27.160 --> 00:15:28.000
<v Brian Okken>Don't encourage people.

00:15:28.400 --> 00:15:29.980
<v Brian Okken>Instead of ignore, somebody else,

00:15:30.540 --> 00:15:33.280
<v Brian Okken>and then again, sorry for whoever mentioned this,

00:15:33.280 --> 00:15:36.480
<v Brian Okken>but somebody mentioned just use once.

00:15:36.860 --> 00:15:40.180
<v Brian Okken>Ignore, like dash W once makes any warning

00:15:40.180 --> 00:15:42.960
<v Brian Okken>in your code show up once and not a whole bunch of times.

00:15:43.200 --> 00:15:47.220
<v Brian Okken>And it's the whole bunch of times that I think people turn it off for because it fills up

00:15:47.220 --> 00:15:48.860
<v Brian Okken>your CI logs and everything like that.

00:15:49.240 --> 00:15:50.680
<v Brian Okken>But you really should see it at least once.

00:15:51.000 --> 00:15:51.640
<v Brian Okken>I like the once.

00:15:51.820 --> 00:15:53.020
<v Michael Kennedy>You know what else I like about once?

00:15:53.120 --> 00:15:57.140
<v Michael Kennedy>The W once is the pronunciation is the same as just once.

00:15:57.460 --> 00:15:58.320
<v Brian Okken>That's just once.

00:15:58.780 --> 00:15:58.900
<v Brian Okken>Yeah.

00:16:00.040 --> 00:16:00.200
<v Brian Okken>Okay.

00:16:00.360 --> 00:16:01.540
<v Brian Okken>So I played with it.

00:16:01.580 --> 00:16:03.340
<v Brian Okken>I looked at this deprecation warning thing.

00:16:04.900 --> 00:16:10.160
<v Brian Okken>And we'll link to the documentation in Python as well.

00:16:10.560 --> 00:16:14.980
<v Brian Okken>But you can do it, combine both solutions, which I love.

00:16:15.200 --> 00:16:20.240
<v Brian Okken>So you can just go ahead and declare your own warning and use the deprecated.

00:16:20.560 --> 00:16:23.020
<v Brian Okken>And so I tried this out.

00:16:24.340 --> 00:16:30.580
<v Brian Okken>So what you do is you just say, create your own, just a class and derive it from user warning.

00:16:31.040 --> 00:16:32.660
<v Brian Okken>And you don't have to import anything for this.

00:16:32.820 --> 00:16:33.700
<v Brian Okken>This is just built in.

00:16:34.320 --> 00:16:36.100
<v Brian Okken>It doesn't have to do anything, just a passing class.

00:16:36.450 --> 00:16:49.140
<v Brian Okken>But then if you use this deprecated decorator and pass your new warning category as deprecated,

00:16:49.280 --> 00:16:52.120
<v Brian Okken>and this sounds complicated on the air, it's not.

00:16:53.860 --> 00:16:54.800
<v Brian Okken>We'll do a code example.

00:16:55.580 --> 00:17:01.360
<v Brian Okken>But what you get is this, I had it, warning both.

00:17:01.620 --> 00:17:03.880
<v Brian Okken>Oh, yeah, it's over just right on the same screenshot.

00:17:04.400 --> 00:17:12.140
<v Brian Okken>The cool thing is that mypy and other type checkers, when you use the deprecated, will flag that it's a problem.

00:17:13.100 --> 00:17:14.500
<v Brian Okken>And I was doing it.

00:17:14.520 --> 00:17:18.839
<v Brian Okken>I think PyCharm does the same thing, but I was doing it in VS Code.

00:17:19.060 --> 00:17:24.800
<v Brian Okken>And what happens if you've got this deprecated decorator is that the IDE will just cross it out.

00:17:25.180 --> 00:17:26.760
<v Brian Okken>And they're like, why is this crossed out?

00:17:26.860 --> 00:17:29.500
<v Brian Okken>And if you hover over it, it'll say, oh, this is deprecated.

00:17:29.820 --> 00:17:30.880
<v Brian Okken>Yeah, it's like a strikethrough.

00:17:30.880 --> 00:17:31.780
<v Michael Kennedy>It says, don't use it.

00:17:31.780 --> 00:17:32.220
<v Michael Kennedy>I love it.

00:17:32.460 --> 00:17:36.360
<v Brian Okken>Yeah, it's very visual and it will make you like look at it.

00:17:36.390 --> 00:17:41.600
<v Brian Okken>So I think that instead of just calling more and yeah, please use the deprecated.

00:17:42.500 --> 00:17:44.840
<v Brian Okken>And then I was playing with pytest as well.

00:17:45.440 --> 00:17:46.740
<v Brian Okken>And what did we get?

00:17:47.620 --> 00:17:49.220
<v Brian Okken>I wrote it down in the show notes.

00:17:50.900 --> 00:17:54.260
<v Brian Okken>Yeah, you want to pass in the dash W just like you would for Python.

00:17:54.460 --> 00:18:02.260
<v Brian Okken>If you do dash W error within pytest, at least in one of your tests to find out actually all of the tests.

00:18:02.360 --> 00:18:03.220
<v Brian Okken>So that'll turn.

00:18:03.630 --> 00:18:07.320
<v Brian Okken>Well, even by default, pytest will warn you and do the warnings.

00:18:07.700 --> 00:18:10.060
<v Brian Okken>But if you're in CI, maybe you're not watching those.

00:18:10.990 --> 00:18:18.060
<v Brian Okken>So in CI, having a check for those deprecation warnings with dash W error will flag all those failures.

00:18:18.620 --> 00:18:22.540
<v Brian Okken>So anyway, lots of great information from readers.

00:18:22.770 --> 00:18:23.920
<v Brian Okken>So thank you for listening.

00:18:24.420 --> 00:18:28.720
<v Michael Kennedy>We got, if they read the newsletter you send, they could be readers.

00:18:29.160 --> 00:18:30.060
<v Brian Okken>Yeah, they could be readers.

00:18:31.040 --> 00:18:34.520
<v Michael Kennedy>John pointed out that you can set an environment variable,

00:18:34.980 --> 00:18:39.660
<v Michael Kennedy>and people may be hesitant to just set an environment variable for their computer

00:18:40.020 --> 00:18:44.160
<v Michael Kennedy>to turn Python into dev mode, which makes it slower potentially.

00:18:44.580 --> 00:18:47.920
<v Michael Kennedy>But if you create a virtual environment, which you should be doing,

00:18:48.360 --> 00:18:51.000
<v Michael Kennedy>there's an activation script in that virtual environment,

00:18:51.420 --> 00:18:56.520
<v Michael Kennedy>And you can just go and export that environment variable

00:18:56.860 --> 00:18:59.220
<v Michael Kennedy>set to debug or whatever mode you want to set it to.

00:18:59.300 --> 00:18:59.620
<v Michael Kennedy>- Oh yeah.

00:19:00.500 --> 00:19:02.560
<v Michael Kennedy>- Only when you activate that virtual environment.

00:19:02.630 --> 00:19:03.920
<v Michael Kennedy>So if you're on a particular project,

00:19:04.160 --> 00:19:05.040
<v Michael Kennedy>you're like this one really,

00:19:05.470 --> 00:19:06.540
<v Michael Kennedy>I don't care about speed right now,

00:19:06.540 --> 00:19:07.800
<v Michael Kennedy>I just care about getting things right.

00:19:08.300 --> 00:19:09.340
<v Michael Kennedy>Tweak its virtual environment,

00:19:09.960 --> 00:19:11.580
<v Michael Kennedy>that doesn't have really many knock on effects.

00:19:11.760 --> 00:19:13.400
<v Michael Kennedy>So that's a cool hack I think.

00:19:13.740 --> 00:19:15.760
<v Brian Okken>- Yeah, it's a great place to throw in

00:19:15.940 --> 00:19:19.340
<v Brian Okken>temporary pytest flags as well or any runtime flags.

00:19:19.780 --> 00:19:21.380
<v Brian Okken>- Exactly, it's not just about

00:19:21.400 --> 00:19:24.240
<v Michael Kennedy>This dev thing, like it's like a little shell script basically.

00:19:24.760 --> 00:19:24.840
<v Michael Kennedy>Yeah.

00:19:25.380 --> 00:19:25.500
<v Michael Kennedy>Indeed.

00:19:26.020 --> 00:19:27.320
<v Michael Kennedy>You could do it for open source things, Brian.

00:19:27.720 --> 00:19:28.540
<v Michael Kennedy>I love open source.

00:19:29.580 --> 00:19:30.260
<v Michael Kennedy>So, oh yeah.

00:19:30.280 --> 00:19:31.220
<v Michael Kennedy>So here's another article.

00:19:31.680 --> 00:19:36.340
<v Michael Kennedy>And this one is by Thomas Dupree called How Foss One and Why It Matters.

00:19:36.440 --> 00:19:38.060
<v Michael Kennedy>This is a pretty interesting article.

00:19:38.620 --> 00:19:43.940
<v Michael Kennedy>And what it looks at open source, free and open source software angle from is not just

00:19:44.320 --> 00:19:46.520
<v Michael Kennedy>why do people like writing open source software?

00:19:46.820 --> 00:19:56.060
<v Michael Kennedy>Why do they like it better than having locked away software or having to pay or having bugs you can't fix or black box security issues potentially?

00:19:56.460 --> 00:20:00.820
<v Michael Kennedy>As we've seen lately, open source has its whole supply chain story on that.

00:20:00.940 --> 00:20:02.600
<v Michael Kennedy>That's different in a different way.

00:20:02.740 --> 00:20:09.300
<v Michael Kennedy>But anyway, it really looks at it from why has it won from a company perspective, especially large companies.

00:20:09.800 --> 00:20:09.880
<v Michael Kennedy>Okay.

00:20:10.240 --> 00:20:10.440
<v Brian Okken>Okay.

00:20:10.660 --> 00:20:13.120
<v Michael Kennedy>So it's really interesting.

00:20:13.600 --> 00:20:16.360
<v Michael Kennedy>So it says like, look, why did it win?

00:20:16.500 --> 00:20:17.680
<v Michael Kennedy>Well, people want to pay less.

00:20:19.000 --> 00:20:23.320
<v Michael Kennedy>So paying less, aka free software, that's great, right?

00:20:23.720 --> 00:20:25.420
<v Michael Kennedy>Well, how do companies make more money?

00:20:25.680 --> 00:20:30.280
<v Michael Kennedy>They either make more profit or they have fewer expenses for a fixed level of profit.

00:20:30.480 --> 00:20:32.140
<v Michael Kennedy>So not paying for software is great.

00:20:32.420 --> 00:20:34.400
<v Michael Kennedy>But that's not just open source software.

00:20:34.560 --> 00:20:35.660
<v Michael Kennedy>That's for everything.

00:20:35.940 --> 00:20:38.620
<v Michael Kennedy>And so companies implement what's called cost control.

00:20:38.880 --> 00:20:44.020
<v Michael Kennedy>So business term for making buying things painful, hard, and time consuming as possible.

00:20:44.100 --> 00:20:47.220
<v Michael Kennedy>So employees will either not or hate doing it.

00:20:47.520 --> 00:20:47.760
<v Michael Kennedy>All right.

00:20:48.580 --> 00:20:54.300
<v Michael Kennedy>So an example is like, hey, I need a cool date picker for our site that imagine open source doesn't exist.

00:20:54.740 --> 00:21:00.320
<v Michael Kennedy>Well, someone's going to have to start by creating a ticket to get this date picker.

00:21:00.420 --> 00:21:04.480
<v Michael Kennedy>And then, well, we have to research the various commercial options.

00:21:05.000 --> 00:21:07.060
<v Michael Kennedy>We could go to procurement and have them find it.

00:21:07.060 --> 00:21:08.260
<v Michael Kennedy>But what do they know about date pickers?

00:21:08.360 --> 00:21:09.260
<v Michael Kennedy>So we're going to do that ourself.

00:21:09.440 --> 00:21:10.460
<v Michael Kennedy>We're going to get a report.

00:21:10.840 --> 00:21:12.640
<v Michael Kennedy>We're going to bring it to procurement.

00:21:13.000 --> 00:21:15.780
<v Michael Kennedy>And when we get there, then procurement says, okay, great.

00:21:16.320 --> 00:21:17.820
<v Michael Kennedy>You're going to go with this company? Fine.

00:21:17.960 --> 00:21:21.460
<v Michael Kennedy>So what we're going to do is first we're going to need to set up a vendor agreement with them

00:21:21.600 --> 00:21:23.700
<v Michael Kennedy>because it turns out they're not currently a vendor of ours.

00:21:24.480 --> 00:21:29.460
<v Michael Kennedy>So we have contracts, we have reviews, we have negotiations, all for a stupid date picker, right?

00:21:30.440 --> 00:21:31.880
<v Michael Kennedy>It's just like, what is going on?

00:21:32.660 --> 00:21:37.480
<v Michael Kennedy>And then on top of it, there's all these copyright laws like indemnification of like,

00:21:37.520 --> 00:21:42.620
<v Michael Kennedy>you prove you haven't stolen from another company then to resell this to me in like some other way

00:21:42.640 --> 00:21:47.180
<v Michael Kennedy>of that stuff, it's like eventually you get permission to buy the thing and then you could

00:21:47.210 --> 00:21:51.860
<v Michael Kennedy>start using it. So open source software enters the scene. It says this comes with a pre-agreed,

00:21:52.010 --> 00:21:57.800
<v Michael Kennedy>pre-reviewed license, MIT, Apache, whatever. And so the lawyers are already like, yep,

00:21:57.890 --> 00:22:01.320
<v Michael Kennedy>we know what that is. We know how to deal with that. There's no pain. So there's no

00:22:01.780 --> 00:22:07.640
<v Michael Kennedy>vendor research, vendor approval, contracts, copyright, all that kind of stuff. And so it

00:22:07.620 --> 00:22:13.440
<v Michael Kennedy>really interesting like is this hack to skip around this like make buying stuff at companies

00:22:13.980 --> 00:22:19.240
<v Brian Okken>super hard right so it wasn't always that way though it took a long time for companies to

00:22:19.390 --> 00:22:24.040
<v Brian Okken>realize that open source was fine yes that's for sure i mean they did have to work through it but

00:22:24.040 --> 00:22:28.120
<v Michael Kennedy>i think once they kind of it feels like they had to go through this the same process we're kind of

00:22:28.280 --> 00:22:33.620
<v Michael Kennedy>describing once in a sort of an abstract sense like okay then well now you can just go you know

00:22:33.460 --> 00:22:38.700
<v Michael Kennedy>know what I mean? It says, Hey, look, it also works both ways. If you're a FOSS maintainer,

00:22:39.010 --> 00:22:43.980
<v Michael Kennedy>the miracle of your software passing, bypassing copyright laws and liabilities and procurement

00:22:44.520 --> 00:22:49.360
<v Michael Kennedy>means that you can get your software out there and have people use it pretty easy, right? Because

00:22:49.880 --> 00:22:55.440
<v Michael Kennedy>your stuff is much easier to adopt because it's open source. I mean, I've been on the vendor side

00:22:55.440 --> 00:23:03.340
<v Michael Kennedy>of these negotiations and paperwork and accounting and legal more than once. And it sucks. It sucks.

00:23:03.480 --> 00:23:05.880
<v Michael Kennedy>I mean, look, Hey, people want to put me in as a vendor and buy stuff.

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

00:23:06.600 --> 00:23:08.620
<v Michael Kennedy>But at the same time, it is not fun.

00:23:08.900 --> 00:23:08.960
<v Michael Kennedy>Right.

00:23:09.020 --> 00:23:11.540
<v Michael Kennedy>And there needs to be like, if you're just a hobbyist, like, well, no.

00:23:12.000 --> 00:23:12.260
<v Michael Kennedy>All right.

00:23:12.520 --> 00:23:16.240
<v Michael Kennedy>So the final bit of this article, the final bit of this thought piece is you can't go back.

00:23:16.800 --> 00:23:22.400
<v Michael Kennedy>So if we're trying to solve, if we're trying to solve the sustainability of open source

00:23:22.680 --> 00:23:27.140
<v Michael Kennedy>software, you have to keep in mind the reason, one of the main reasons it's so popular is

00:23:27.200 --> 00:23:29.920
<v Michael Kennedy>it skipped the copyright rule stuff.

00:23:30.040 --> 00:23:33.260
<v Michael Kennedy>It skipped the vendor onboarding and all these things.

00:23:33.340 --> 00:23:41.180
<v Michael Kennedy>So if your solution to fix sustainability is to recreate any of the supply chain framework problem, your solution is dead on arrival.

00:23:41.420 --> 00:23:45.220
<v Michael Kennedy>So I think that's what this is why I wanted to bring up this article.

00:23:45.430 --> 00:23:46.720
<v Michael Kennedy>I put it at the end of the year.

00:23:46.780 --> 00:23:50.920
<v Michael Kennedy>It's kind of like I would love to see more sustainability options for open source.

00:23:51.130 --> 00:23:54.060
<v Michael Kennedy>But I do think that this guy is on to something here.

00:23:54.310 --> 00:23:59.360
<v Michael Kennedy>I do think that Thomas is on to something with his skipping the legal, skipping the procurement.

00:23:59.920 --> 00:24:02.780
<v Michael Kennedy>And if we put it back and say, well, you got to set up a vendor agreement with us again.

00:24:02.900 --> 00:24:06.800
<v Michael Kennedy>And then you're unraveling a lot of the things that made it a really good fit.

00:24:07.360 --> 00:24:07.580
<v Brian Okken>Yeah.

00:24:08.740 --> 00:24:11.860
<v Michael Kennedy>The article does a lot more detailed explanation than I did,

00:24:11.960 --> 00:24:13.340
<v Michael Kennedy>but they're for people to think about.

00:24:13.580 --> 00:24:16.580
<v Brian Okken>I hope this, yeah, I hope we don't go back.

00:24:17.340 --> 00:24:19.480
<v Brian Okken>There are pressures to push it back.

00:24:20.160 --> 00:24:23.880
<v Brian Okken>Like you were saying, there's the projects that just, they can't,

00:24:24.120 --> 00:24:27.520
<v Brian Okken>they know that enterprise is using it and they're not getting paid.

00:24:27.820 --> 00:24:29.320
<v Brian Okken>And that isn't as a bummer.

00:24:31.000 --> 00:24:34.660
<v Brian Okken>And if you're not charging anything, you can't just make it up in volume.

00:24:37.160 --> 00:24:39.500
<v Michael Kennedy>We've tripled our revenue from what it was last year.

00:24:39.620 --> 00:24:40.040
<v Brian Okken>Still zero.

00:24:40.280 --> 00:24:51.520
<v Brian Okken>With things like trying to secure the supply chain, we are, I mean, even open source is part of the supply chain, whether or not you want to believe it is.

00:24:51.780 --> 00:25:00.200
<v Brian Okken>And so there are pressures to, you know, put SBOMs on or the software bill of materials to verify all your subcomponents and all that stuff.

00:25:01.020 --> 00:25:07.660
<v Brian Okken>Python is helping to make that easier for individual maintainers of projects, which is cool.

00:25:08.280 --> 00:25:10.580
<v Brian Okken>But it's still some extra work.

00:25:10.620 --> 00:25:14.720
<v Brian Okken>And I don't think it's fair that maintainers are having to do that work.

00:25:15.020 --> 00:25:17.040
<v Brian Okken>And they don't benefit from it.

00:25:17.120 --> 00:25:17.880
<v Brian Okken>The companies benefit.

00:25:19.459 --> 00:25:26.480
<v Brian Okken>And we do need to find a way to get money to vendors better or money to contributors.

00:25:27.300 --> 00:25:28.420
<v Brian Okken>Yeah, I 100% agree.

00:25:28.720 --> 00:25:29.000
<v Brian Okken>I do.

00:25:30.660 --> 00:25:31.180
<v Michael Kennedy>But yeah.

00:25:31.540 --> 00:25:35.160
<v Michael Kennedy>I don't have a great direct, like force them to do it type of answer.

00:25:35.440 --> 00:25:35.960
<v Michael Kennedy>But yeah.

00:25:36.280 --> 00:25:39.520
<v Michael Kennedy>Hopefully many of them will see like, hey, we benefit from this thing.

00:25:39.860 --> 00:25:42.900
<v Michael Kennedy>If we were a major sponsor of this project,

00:25:43.440 --> 00:25:45.920
<v Michael Kennedy>we could have the ear of the maintainer team

00:25:46.330 --> 00:25:47.680
<v Michael Kennedy>to get the thing that we really want.

00:25:47.860 --> 00:25:49.500
<v Michael Kennedy>I think that's a possibility.

00:25:50.380 --> 00:25:54.500
<v Brian Okken>Yeah, there might also be some like maintenance agreements sort of stuff.

00:25:55.900 --> 00:25:57.280
<v Brian Okken>It's definitely open source,

00:25:57.500 --> 00:26:01.300
<v Brian Okken>but also whoever the main maintainer is,

00:26:02.639 --> 00:26:06.960
<v Brian Okken>is for a small fee promising to look at your defect reports

00:26:08.039 --> 00:26:09.280
<v Brian Okken>or things like that.

00:26:09.820 --> 00:26:13.400
<v Michael Kennedy>Yeah, there's this whole productized consulting sort of thing

00:26:13.580 --> 00:26:14.400
<v Michael Kennedy>I think would be pretty good,

00:26:14.500 --> 00:26:15.760
<v Michael Kennedy>where it's like you're going to pay,

00:26:15.860 --> 00:26:17.620
<v Michael Kennedy>basically I'm going to pay you a retainer

00:26:17.860 --> 00:26:20.020
<v Michael Kennedy>and you have a certain amount of credits you can redeem

00:26:20.300 --> 00:26:21.540
<v Michael Kennedy>that expire at the end of the month

00:26:21.800 --> 00:26:24.220
<v Michael Kennedy>for me to potentially come and do exactly like what you're suggesting.

00:26:24.700 --> 00:26:25.740
<v Michael Kennedy>And if you don't use it, that's fine.

00:26:25.800 --> 00:26:29.400
<v Michael Kennedy>but I'm here at the drop of a hat if you need me, sort of.

00:26:29.660 --> 00:26:29.980
<v Michael Kennedy>Yeah.

00:26:30.060 --> 00:26:33.300
<v Michael Kennedy>You pay me $5,000 a month and I may or may not have to work for you that month,

00:26:33.480 --> 00:26:35.000
<v Michael Kennedy>but you know what, that'd be good.

00:26:35.360 --> 00:26:38.720
<v Brian Okken>But at the very least, or even having lower ones so more people do it

00:26:38.940 --> 00:26:42.940
<v Brian Okken>and to make sure that things are actually stayed maintained

00:26:43.640 --> 00:26:45.420
<v Brian Okken>because there's a lot of stuff that's just done

00:26:45.660 --> 00:26:48.140
<v Brian Okken>and you can't tell whether or not it's really maintained.

00:26:48.440 --> 00:26:48.540
<v Michael Kennedy>Anyway.

00:26:49.220 --> 00:26:50.700
<v Michael Kennedy>Yeah, that's 100%.

00:26:51.480 --> 00:26:51.880
<v Michael Kennedy>100%.

00:26:52.280 --> 00:26:55.080
<v Michael Kennedy>In fact, you might even want to go and find just a complete,

00:26:55.200 --> 00:26:56.640
<v Michael Kennedy>I don't even put it on GitHub anymore.

00:26:56.840 --> 00:26:58.640
<v Michael Kennedy>That's how much I'm changing my mind about open source.

00:26:59.440 --> 00:27:08.520
<v Brian Okken>Yeah, so this next topic was going to be about looking for GitHub alternatives.

00:27:09.300 --> 00:27:11.360
<v Brian Okken>And so I just left it as the title.

00:27:12.600 --> 00:27:14.400
<v Brian Okken>Should I be looking for GitHub alternatives?

00:27:14.570 --> 00:27:16.200
<v Brian Okken>And why am I talking about that?

00:27:16.290 --> 00:27:17.160
<v Brian Okken>I mean, GitHub's awesome.

00:27:17.270 --> 00:27:17.700
<v Brian Okken>Why would you?

00:27:18.060 --> 00:27:19.140
<v Brian Okken>Anyway, I think it's great.

00:27:19.740 --> 00:27:20.860
<v Brian Okken>I'm still happy with GitHub.

00:27:21.300 --> 00:27:23.020
<v Brian Okken>But they sort of fumbled recently.

00:27:23.150 --> 00:27:24.820
<v Brian Okken>Did you hear about all this, Michael?

00:27:25.680 --> 00:27:31.380
<v Michael Kennedy>yes with the billing oh yes I heard about oh yeah so so what happened what bothers me more even is

00:27:31.500 --> 00:27:38.080
<v Michael Kennedy>the the clear lack of craftsmanship and care around the code that runs these it's like you get janky

00:27:38.200 --> 00:27:42.460
<v Michael Kennedy>code and we're gonna charge you oh and our bug is also gonna sometimes make it run for hours and

00:27:42.460 --> 00:27:48.420
<v Michael Kennedy>then we'll charge you still for that too yeah so there's some pricing changes and the message

00:27:49.160 --> 00:27:53.920
<v Brian Okken>pricing changes and they like released it on December 15th and then they they think and then

00:27:53.880 --> 00:27:59.860
<v Brian Okken>just recently updated it i can't i don't know when the update was on oh the original announcement

00:27:59.920 --> 00:28:07.820
<v Brian Okken>was on the 16th um there's an update to it so they um the gav actions it's way popular than they

00:28:08.000 --> 00:28:12.760
<v Brian Okken>thought it would be and actually like just tons of people just switched from and it happened at a

00:28:13.020 --> 00:28:17.340
<v Brian Okken>similar a lot of times where people were like travis was imploding so people were trying to

00:28:17.560 --> 00:28:23.840
<v Brian Okken>uh leave travis and were like oh you have actions is here let's just use that um that's part of it

00:28:24.200 --> 00:28:26.500
<v Brian Okken>But it also benefited GitHub a lot.

00:28:26.510 --> 00:28:29.820
<v Brian Okken>A lot of projects started using it more.

00:28:31.100 --> 00:28:34.560
<v Brian Okken>However, I get that they have to pay for that compute somehow.

00:28:35.060 --> 00:28:37.800
<v Brian Okken>However, they've said, let's see,

00:28:38.590 --> 00:28:42.740
<v Brian Okken>they're going to have GitHub or hosted runners

00:28:43.320 --> 00:28:46.260
<v Brian Okken>are going to reduce their price by 39%.

00:28:46.280 --> 00:28:48.180
<v Brian Okken>And I actually didn't realize that they were charging

00:28:48.480 --> 00:28:51.680
<v Brian Okken>because apparently I don't use it enough to get billed for it.

00:28:52.240 --> 00:28:58.260
<v Brian Okken>But in the announcement, they also said that you could see the hosted the non hosted runner.

00:28:58.310 --> 00:29:03.080
<v Brian Okken>So like the code that you you've got your own computer set up to run your stuff.

00:29:03.470 --> 00:29:04.920
<v Brian Okken>They were going to charge for that, too.

00:29:05.600 --> 00:29:08.660
<v Brian Okken>Look, I think that's insane.

00:29:09.120 --> 00:29:09.960
<v Brian Okken>It was not a lot.

00:29:09.960 --> 00:29:13.940
<v Brian Okken>It was like two tenths of a cent per minute or something like that.

00:29:14.580 --> 00:29:21.240
<v Brian Okken>But but that's like it's just sitting there waiting for your GitHub runner, your get runner to finish.

00:29:21.580 --> 00:29:22.860
<v Brian Okken>Why would they charge for that?

00:29:23.070 --> 00:29:23.720
<v Brian Okken>Anyway, I don't know.

00:29:24.480 --> 00:29:25.260
<v Brian Okken>There's been a change.

00:29:25.620 --> 00:29:29.180
<v Brian Okken>So we're going to link to the announcement of the pricing change.

00:29:29.290 --> 00:29:33.260
<v Brian Okken>I didn't get too much into the details of the pricing change,

00:29:34.380 --> 00:29:37.680
<v Brian Okken>but it's kind of weird to charge the same amount for both,

00:29:37.950 --> 00:29:40.220
<v Brian Okken>whether or not you're using a hosted runner or your own runner.

00:29:41.140 --> 00:29:41.560
<v Brian Okken>That's weird.

00:29:41.820 --> 00:29:43.220
<v Brian Okken>So they've actually backed off.

00:29:43.440 --> 00:29:49.580
<v Brian Okken>So they're going to postpone the billing for the self-hosted.

00:29:49.880 --> 00:29:51.640
<v Brian Okken>They didn't say they're going to not do it, though.

00:29:51.800 --> 00:29:52.440
<v Brian Okken>It's just postponed.

00:29:52.520 --> 00:29:53.200
<v Michael Kennedy>Yeah, that's weird.

00:29:53.340 --> 00:30:00.640
<v Michael Kennedy>So I get the argument like, wow, we thought we'd have to buy 100 computers and we're on our 100,000th VM.

00:30:00.820 --> 00:30:02.140
<v Michael Kennedy>We've set up this as a little out of control.

00:30:02.490 --> 00:30:03.880
<v Michael Kennedy>That doesn't apply to self-hosted.

00:30:04.840 --> 00:30:10.480
<v Brian Okken>Well, I mean, the actions are still running, so they're not really charging that much for the actions.

00:30:10.840 --> 00:30:16.840
<v Brian Okken>Just the, I mean, all the rest of the stuff is mostly coming for free.

00:30:17.320 --> 00:30:17.740
<v Brian Okken>It's just.

00:30:17.770 --> 00:30:18.120
<v Michael Kennedy>Right, right.

00:30:18.280 --> 00:30:21.220
<v Michael Kennedy>But I mean, if you have a self-hosted GitHub Action runner,

00:30:21.780 --> 00:30:23.500
<v Michael Kennedy>they're not paying for the compute to run it

00:30:23.500 --> 00:30:25.720
<v Michael Kennedy>because you're self-hosting.

00:30:26.060 --> 00:30:26.280
<v Brian Okken>Yeah.

00:30:27.100 --> 00:30:30.020
<v Brian Okken>Like maybe, like, and if they are having to,

00:30:30.320 --> 00:30:32.060
<v Brian Okken>I mean, they have to have something that sits around

00:30:32.130 --> 00:30:33.320
<v Brian Okken>and like waits for it or something.

00:30:33.410 --> 00:30:33.780
<v Brian Okken>I don't know.

00:30:34.320 --> 00:30:37.480
<v Brian Okken>But figure out how to do that way cheaper.

00:30:37.570 --> 00:30:39.480
<v Brian Okken>It should be like super cheap.

00:30:40.140 --> 00:30:41.200
<v Brian Okken>Anyway, because that's like,

00:30:41.440 --> 00:30:43.380
<v Brian Okken>that's one of the reasons why people have their own runner

00:30:43.600 --> 00:30:45.480
<v Brian Okken>is to save on compute.

00:30:45.820 --> 00:30:46.940
<v Michael Kennedy>So yeah, that was weird.

00:30:47.360 --> 00:30:50.640
<v Brian Okken>So I went ahead and like, you know, why not look at other stuff?

00:30:50.690 --> 00:30:51.860
<v Brian Okken>So let's look at some other.

00:30:52.500 --> 00:30:53.420
<v Brian Okken>That's the warning thing.

00:30:53.880 --> 00:30:54.920
<v Brian Okken>Some other alternatives.

00:30:55.280 --> 00:30:56.280
<v Brian Okken>So I found this article.

00:30:56.690 --> 00:30:57.560
<v Brian Okken>I just searched for it.

00:30:57.820 --> 00:31:01.700
<v Brian Okken>There's four GitHub alternatives that are just as good or better.

00:31:02.100 --> 00:31:03.760
<v Brian Okken>And there's some that I hadn't heard of.

00:31:03.960 --> 00:31:04.740
<v Brian Okken>So this is kind of fun.

00:31:05.260 --> 00:31:06.300
<v Brian Okken>I hadn't heard of Codeberg.

00:31:06.740 --> 00:31:13.980
<v Brian Okken>So nonprofit community-led effort that provides Git hosting and other services for free and open source projects.

00:31:14.400 --> 00:31:18.800
<v Brian Okken>Okay, so it's not for private projects or something, but there's a lot here.

00:31:19.040 --> 00:31:20.440
<v Brian Okken>So maybe something to look into.

00:31:21.480 --> 00:31:24.340
<v Brian Okken>But I don't think that GitHub is charging that much for open source either.

00:31:26.550 --> 00:31:28.100
<v Brian Okken>But it's fun to look at some of these alternatives.

00:31:28.500 --> 00:31:32.220
<v Brian Okken>Yeah, I think Codeberg only lets you have open source.

00:31:32.440 --> 00:31:33.660
<v Michael Kennedy>Just only open source.

00:31:33.680 --> 00:31:34.780
<v Michael Kennedy>Yeah, it's like free.

00:31:34.850 --> 00:31:37.520
<v Michael Kennedy>You almost got to apply to a join sort of thing.

00:31:39.060 --> 00:31:40.300
<v Brian Okken>And then Bitbucket.

00:31:40.620 --> 00:31:44.040
<v Brian Okken>I mean, like, I didn't, I guess I forgot it's around.

00:31:44.680 --> 00:31:45.380
<v Michael Kennedy>Sorry, Bitbucket.

00:31:45.380 --> 00:31:45.400
<v Michael Kennedy>I did too.

00:31:46.160 --> 00:31:53.440
<v Michael Kennedy>I use SourceTree all the time, which was, I believe, made sort of as the front end of Bitbucket if you want to desktop thing.

00:31:53.780 --> 00:31:53.920
<v Michael Kennedy>Yeah.

00:31:54.120 --> 00:31:55.540
<v Michael Kennedy>And still, I forgot Bitbucket exists.

00:31:57.660 --> 00:32:03.340
<v Brian Okken>So, Bitbucket, yeah, it's not, oldest established competitor of GitHub.

00:32:03.700 --> 00:32:05.120
<v Brian Okken>I think it predates GitHub.

00:32:05.360 --> 00:32:05.780
<v Brian Okken>I'm not sure.

00:32:06.380 --> 00:32:09.140
<v Brian Okken>But it launched around the same time in 2008.

00:32:09.220 --> 00:32:14.140
<v Brian Okken>it's still maintained it's still there so you can um and the interface is a lot better than it was

00:32:14.250 --> 00:32:21.480
<v Brian Okken>way back in the 2008 9 10 time frame when i was using it but uh bit bucket git lab and actually

00:32:21.860 --> 00:32:28.680
<v Brian Okken>git lab's a solid alternative i use uh git lab at work and um the thing that yeah i like git lab

00:32:28.890 --> 00:32:37.459
<v Brian Okken>uh definitely a an option to look into it uh git ea g g-i-t-e-a haven't heard of this before but

00:32:37.480 --> 00:32:42.480
<v Brian Okken>it's around as well and then while i was looking around for this i also came up came around some

00:32:42.820 --> 00:32:48.480
<v Brian Okken>some comments on socials about tangled it's an alpha it's a new it's a new thing it came out

00:32:48.650 --> 00:32:56.780
<v Brian Okken>this year i think um a uh tightly knit social coding so they're really trying to um and they're

00:32:57.260 --> 00:33:04.220
<v Brian Okken>launching as a lightweight lightweight github repo get repo hosting but the way they're

00:33:04.220 --> 00:33:09.420
<v Brian Okken>dealing with it, I think, is the pipelines and the runs are running. I don't know if they have

00:33:09.600 --> 00:33:14.580
<v Brian Okken>runners in the cloud. I think it looks like they're mainly trying to get you to run your own runners.

00:33:15.100 --> 00:33:21.500
<v Brian Okken>So it's interesting. I could be wrong, but there are definitely some different options around there

00:33:21.680 --> 00:33:27.380
<v Brian Okken>if you really do want to get off GitHub. I like GitLab and GitHub mostly.

00:33:28.460 --> 00:33:33.280
<v Michael Kennedy>I'm always tempted to do some self-hosted thing. I love the idea of it so much.

00:33:33.600 --> 00:33:33.740
<v Michael Kennedy>Yeah.

00:33:34.460 --> 00:33:36.400
<v Michael Kennedy>So I have to talk myself off the ledge periodically.

00:33:37.460 --> 00:33:40.400
<v Michael Kennedy>And if you're doing something just for you,

00:33:40.420 --> 00:33:43.200
<v Michael Kennedy>I think it's cool to pick something based on features, right?

00:33:43.400 --> 00:33:46.180
<v Michael Kennedy>Or some kind of philosophy of the company.

00:33:46.300 --> 00:33:48.860
<v Michael Kennedy>Like this one is only open source, or this one is super privacy,

00:33:48.940 --> 00:33:52.260
<v Michael Kennedy>or this one is European-based or whatever, right?

00:33:52.580 --> 00:33:54.920
<v Michael Kennedy>However, if you're doing open source

00:33:55.200 --> 00:33:57.500
<v Michael Kennedy>and you actually want it to be used by people,

00:33:57.880 --> 00:33:58.860
<v Michael Kennedy>there's no other option than GitHub.

00:33:59.600 --> 00:34:00.520
<v Brian Okken>Well, okay.

00:34:00.880 --> 00:34:05.220
<v Brian Okken>I think if you really want people to interact with it,

00:34:05.860 --> 00:34:07.720
<v Brian Okken>GitHub, and contribute.

00:34:07.740 --> 00:34:09.220
<v Brian Okken>I mean, contributors, yes, exactly.

00:34:09.639 --> 00:34:13.700
<v Brian Okken>And file defects and all that sort of stuff, GitHub.

00:34:14.060 --> 00:34:17.840
<v Brian Okken>But I've seen a lot of projects that a lot of the community

00:34:17.980 --> 00:34:21.159
<v Brian Okken>is just complaining, either complaining

00:34:21.520 --> 00:34:24.100
<v Brian Okken>or asking for features that aren't even part of it.

00:34:24.399 --> 00:34:28.940
<v Brian Okken>So you're doing, basically, if you don't want interact,

00:34:29.179 --> 00:34:32.080
<v Brian Okken>if you want people to use it, it needs to be on PyPI for Python.

00:34:32.409 --> 00:34:38.340
<v Brian Okken>But if you really don't want people to file defects and contribute junk,

00:34:39.310 --> 00:34:42.600
<v Brian Okken>yeah, I think switching to GitLab or something like that totally makes sense.

00:34:42.899 --> 00:34:43.139
<v Brian Okken>Yeah.

00:34:43.350 --> 00:34:45.679
<v Michael Kennedy>I mean, it's like saying, I don't like that Twitter went away,

00:34:45.919 --> 00:34:48.379
<v Michael Kennedy>so I'm going to set up my own private social media

00:34:48.550 --> 00:34:49.720
<v Michael Kennedy>and then invite my friends to join.

00:34:50.240 --> 00:34:52.379
<v Michael Kennedy>They may or may, they probably are not going to come.

00:34:52.710 --> 00:34:55.200
<v Michael Kennedy>If they do, they're probably going to not visit it after three days.

00:34:55.379 --> 00:34:55.679
<v Michael Kennedy>You know what I mean?

00:34:55.840 --> 00:34:58.199
<v Michael Kennedy>It's like, even though these things are awesome in GitHub

00:34:58.220 --> 00:35:00.140
<v Michael Kennedy>as being not ideal in some ways.

00:35:00.500 --> 00:35:00.700
<v Michael Kennedy>Yeah.

00:35:01.060 --> 00:35:02.480
<v Michael Kennedy>The truth of social stuff

00:35:02.540 --> 00:35:03.880
<v Michael Kennedy>is you got to be where the people are.

00:35:04.280 --> 00:35:05.480
<v Michael Kennedy>Otherwise, it's tough to work with.

00:35:05.660 --> 00:35:08.580
<v Michael Kennedy>So anyway, that's mostly a note to myself in the future.

00:35:08.940 --> 00:35:10.340
<v Michael Kennedy>Anyway, okay.

00:35:11.600 --> 00:35:11.960
<v Michael Kennedy>All right.

00:35:12.340 --> 00:35:13.400
<v Michael Kennedy>How are we feeling about extras?

00:35:13.960 --> 00:35:15.900
<v Michael Kennedy>I have a couple extras, but why don't you go?

00:35:16.260 --> 00:35:16.360
<v Michael Kennedy>Okay.

00:35:16.820 --> 00:35:18.700
<v Michael Kennedy>Let's talk about PyCharm for a second.

00:35:19.040 --> 00:35:21.060
<v Michael Kennedy>So I'm a big fan of Ruff.

00:35:21.500 --> 00:35:22.540
<v Michael Kennedy>No doubt about that.

00:35:22.740 --> 00:35:25.020
<v Michael Kennedy>I'm also a fan of Pyrefly,

00:35:25.260 --> 00:35:26.380
<v Michael Kennedy>which I've been using a lot lately,

00:35:26.740 --> 00:35:29.520
<v Michael Kennedy>And ty, which I believe ty just went into beta.

00:35:29.820 --> 00:35:30.760
<v Michael Kennedy>Shouldn't that be one of our items?

00:35:30.930 --> 00:35:31.940
<v Michael Kennedy>I believe it should be.

00:35:31.940 --> 00:35:32.680
<v Michael Kennedy>It probably should.

00:35:33.060 --> 00:35:39.820
<v Michael Kennedy>But ty, the one from Astral, that is sort of the high-performance companion or frenemy of Pyrefly,

00:35:40.250 --> 00:35:43.640
<v Michael Kennedy>they both are now in beta mode.

00:35:44.300 --> 00:35:49.740
<v Michael Kennedy>And with the latest release of PyCharm, it expands its LSP support

00:35:49.810 --> 00:35:54.940
<v Michael Kennedy>so that it has native integration for Ruff, ty, and Pyrefly plus Pyrite.

00:35:55.300 --> 00:35:57.660
<v Michael Kennedy>And this news comes to us from Daniel Muldmer, if I haven't said so.

00:35:57.690 --> 00:35:58.820
<v Michael Kennedy>So thanks, Dean, for sending that in.

00:35:59.180 --> 00:36:06.140
<v Michael Kennedy>And there's actually a whole link, a page which I'll link to about the LSP support and how you turn that on if you want.

00:36:06.150 --> 00:36:09.440
<v Michael Kennedy>So you can have, like, native Ruff integration and so on.

00:36:09.760 --> 00:36:11.060
<v Michael Kennedy>So anyway, shout out.

00:36:11.620 --> 00:36:12.260
<v Michael Kennedy>Shout out to that.

00:36:12.560 --> 00:36:15.360
<v Michael Kennedy>Also, RUF's page has a setup for how to do it in reverse.

00:36:15.840 --> 00:36:19.260
<v Brian Okken>The LSP being for language servers always throws me.

00:36:19.380 --> 00:36:21.760
<v Brian Okken>So I'm like, PyCharm now supports LISP, but that's weird.

00:36:22.240 --> 00:36:22.740
<v Michael Kennedy>I know.

00:36:24.640 --> 00:36:27.440
<v Michael Kennedy>Also, it feels redundant, an LSP server.

00:36:28.080 --> 00:36:29.420
<v Michael Kennedy>It's already a language server.

00:36:29.880 --> 00:36:31.420
<v Michael Kennedy>I guess a language server, protocol server.

00:36:31.960 --> 00:36:32.840
<v Michael Kennedy>Shouldn't it just be a language server?

00:36:33.040 --> 00:36:33.460
<v Michael Kennedy>I don't know.

00:36:33.820 --> 00:36:38.180
<v Michael Kennedy>It's like saying it's an HTTP website or something.

00:36:38.260 --> 00:36:38.680
<v Michael Kennedy>I don't know.

00:36:39.700 --> 00:36:41.420
<v Michael Kennedy>It's HTTP protocol.

00:36:41.940 --> 00:36:42.020
<v Michael Kennedy>Yeah.

00:36:42.200 --> 00:36:42.300
<v Michael Kennedy>Right.

00:36:42.380 --> 00:36:45.200
<v Michael Kennedy>It's an HTTP protocol website that you access with your browser now.

00:36:45.520 --> 00:36:45.660
<v Michael Kennedy>Okay.

00:36:45.880 --> 00:36:46.140
<v Michael Kennedy>Last thing.

00:36:46.660 --> 00:36:52.219
<v Michael Kennedy>I didn't save the link to this, but I thought this was a fun...

00:36:52.240 --> 00:36:55.380
<v Michael Kennedy>I saw this on xTwitter, and it's just like a little sign off,

00:36:55.780 --> 00:36:57.560
<v Michael Kennedy>like sort of wishing you well or like,

00:36:57.980 --> 00:36:59.220
<v Michael Kennedy>take care till next time I see you.

00:36:59.510 --> 00:37:00.680
<v Michael Kennedy>But here's the developer version.

00:37:01.030 --> 00:37:02.800
<v Michael Kennedy>May your bug tracker be forever empty.

00:37:03.100 --> 00:37:03.600
<v Brian Okken>Oh, nice.

00:37:03.800 --> 00:37:04.400
<v Michael Kennedy>Yeah, very nice.

00:37:04.540 --> 00:37:06.820
<v Michael Kennedy>It's a little bit of a play on Hunger Games, I believe.

00:37:07.100 --> 00:37:08.280
<v Michael Kennedy>May the odds be forever in your favor.

00:37:08.620 --> 00:37:09.160
<v Michael Kennedy>You know, that sort of thing.

00:37:09.300 --> 00:37:11.380
<v Brian Okken>Yeah, and like I was saying, if you really

00:37:11.540 --> 00:37:14.140
<v Brian Okken>want your bug tracker to be empty, move it away from GitHub.

00:37:15.119 --> 00:37:15.480
<v Brian Okken>Yep.

00:37:17.200 --> 00:37:19.560
<v Brian Okken>A couple of things, just a reminder to people,

00:37:20.100 --> 00:37:25.220
<v Brian Okken>I am taking this the rest of December off from updates to the lean TDD book,

00:37:25.560 --> 00:37:25.680
<v Brian Okken>but,

00:37:25.940 --> 00:37:29.960
<v Brian Okken>but this is an attempt to explain to people how to actually get productivity

00:37:30.200 --> 00:37:31.420
<v Brian Okken>gains from test driven development.

00:37:32.740 --> 00:37:33.760
<v Brian Okken>But I'll pick it up in January.

00:37:34.000 --> 00:37:35.180
<v Brian Okken>I'm hoping actually to finish the,

00:37:35.490 --> 00:37:36.980
<v Brian Okken>finish the entire first draft in January.

00:37:37.220 --> 00:37:37.640
<v Brian Okken>That's the goal.

00:37:37.960 --> 00:37:38.220
<v Brian Okken>That's a,

00:37:38.500 --> 00:37:39.400
<v Brian Okken>that's an aggressive goal,

00:37:39.700 --> 00:37:39.840
<v Brian Okken>but,

00:37:40.440 --> 00:37:41.740
<v Brian Okken>but I have all the stuff I want to do.

00:37:41.840 --> 00:37:42.260
<v Brian Okken>So we'll see.

00:37:43.400 --> 00:37:43.540
<v Brian Okken>Okay.

00:37:44.140 --> 00:37:44.360
<v Brian Okken>Finally,

00:37:45.060 --> 00:37:45.240
<v Brian Okken>pie,

00:37:45.660 --> 00:37:46.500
<v Brian Okken>the pie test course.

00:37:46.730 --> 00:37:48.200
<v Brian Okken>I just had somebody asked me this morning,

00:37:48.480 --> 00:37:51.240
<v Brian Okken>sent me an email and said, hey, I bought the book.

00:37:51.770 --> 00:37:53.780
<v Brian Okken>Love the Python Testament by this book.

00:37:54.600 --> 00:37:56.020
<v Brian Okken>And I'd like the course.

00:37:56.160 --> 00:37:56.740
<v Brian Okken>Can I get a discount?

00:37:57.040 --> 00:37:58.880
<v Brian Okken>And I just love people that just ask.

00:37:59.160 --> 00:38:01.320
<v Brian Okken>So I gave him a discount, of course,

00:38:01.540 --> 00:38:04.340
<v Brian Okken>but also so you can always email and ask.

00:38:04.840 --> 00:38:08.580
<v Brian Okken>But I also just decided to throw a 50% off sale

00:38:08.920 --> 00:38:10.040
<v Brian Okken>for the Christmas time.

00:38:10.240 --> 00:38:12.440
<v Brian Okken>So last minute Christmas shopping for yourself.

00:38:13.000 --> 00:38:14.320
<v Brian Okken>I'll put this in the show notes,

00:38:14.460 --> 00:38:18.620
<v Brian Okken>But if you use the code Xmas, X-M-A-S 2025,

00:38:19.480 --> 00:38:20.440
<v Brian Okken>I'll give you 50% off.

00:38:21.420 --> 00:38:22.240
<v Michael Kennedy>Very, very nice.

00:38:22.420 --> 00:38:24.280
<v Michael Kennedy>And I'm looking forward to a more efficient

00:38:24.980 --> 00:38:27.780
<v Michael Kennedy>and error-free 2026 Christmas

00:38:28.320 --> 00:38:31.120
<v Michael Kennedy>after Rudolph and team use your discount,

00:38:31.620 --> 00:38:32.860
<v Michael Kennedy>learn test-driven better.

00:38:33.320 --> 00:38:34.780
<v Michael Kennedy>And then, you know, next year round,

00:38:35.020 --> 00:38:36.540
<v Michael Kennedy>their deliveries will be more error-free.

00:38:36.980 --> 00:38:38.120
<v Michael Kennedy>You're doing a service for all the kids.

00:38:39.840 --> 00:38:39.940
<v Michael Kennedy>Yeah.

00:38:41.080 --> 00:38:41.200
<v Michael Kennedy>All right.

00:38:41.340 --> 00:38:41.680
<v Michael Kennedy>All right.

00:38:42.120 --> 00:38:43.220
<v Michael Kennedy>We got a couple of funny things.

00:38:43.680 --> 00:38:44.000
<v Michael Kennedy>We do.

00:38:44.200 --> 00:38:45.400
<v Michael Kennedy>One is mine, one is yours.

00:38:46.519 --> 00:38:48.560
<v Michael Kennedy>So what if you have errors in your code?

00:38:49.000 --> 00:38:52.920
<v Michael Kennedy>Well, that's what structured error handling is for.

00:38:53.200 --> 00:38:56.640
<v Michael Kennedy>Exceptions, you know, try, catch, try, accept, depending on your language.

00:38:57.080 --> 00:38:59.320
<v Michael Kennedy>But what do you do when the error happens, Brian?

00:38:59.700 --> 00:39:00.840
<v Michael Kennedy>What do you do when the error happens?

00:39:01.040 --> 00:39:02.580
<v Michael Kennedy>One possibility is to log it.

00:39:02.780 --> 00:39:04.320
<v Michael Kennedy>You've got to already have your login set up.

00:39:04.500 --> 00:39:05.780
<v Michael Kennedy>So, you know, there's a few steps.

00:39:05.840 --> 00:39:06.820
<v Michael Kennedy>I guess you could print it.

00:39:06.960 --> 00:39:07.780
<v Michael Kennedy>That's a bit of a help.

00:39:07.980 --> 00:39:11.320
<v Michael Kennedy>Maybe you just have a beep, play the beep sound when an exception happens.

00:39:11.420 --> 00:39:11.820
<v Michael Kennedy>I don't know.

00:39:12.100 --> 00:39:16.620
<v Michael Kennedy>Well, this person decided to write a simple two-liner.

00:39:17.080 --> 00:39:19.920
<v Michael Kennedy>This is in JavaScript in the example, but it could be just as well.

00:39:20.660 --> 00:39:25.080
<v Michael Kennedy>It says, if I catch an exception, I'm going to create a string that's

00:39:25.300 --> 00:39:29.860
<v Michael Kennedy>HTTP colon slash slash stackoverflow.com slash search question mark Q equals.

00:39:30.540 --> 00:39:34.440
<v Michael Kennedy>And you put the exception message in the end and then you open a browser to that.

00:39:34.760 --> 00:39:35.020
<v Brian Okken>Wow.

00:39:35.370 --> 00:39:35.780
<v Michael Kennedy>Problem solved.

00:39:36.260 --> 00:39:36.620
<v Michael Kennedy>Old school.

00:39:37.000 --> 00:39:37.540
<v Michael Kennedy>That's old school.

00:39:37.570 --> 00:39:40.980
<v Michael Kennedy>I think the modern version is to just call an open AI API.

00:39:41.720 --> 00:39:48.320
<v Brian Okken>Yeah, just ask your agent to run it, catch all exceptions, and fix it for you with PRs.

00:39:48.560 --> 00:39:49.000
<v Michael Kennedy>Exactly.

00:39:49.320 --> 00:39:52.380
<v Michael Kennedy>Yeah, just feel free to go ahead and auto-commit and publish it at production.

00:39:52.480 --> 00:39:53.320
<v Michael Kennedy>I don't need to review it.

00:39:53.740 --> 00:39:58.720
<v Brian Okken>Yeah, but be sure to label it with the prompt for that we discussed last week.

00:39:58.980 --> 00:39:59.260
<v Michael Kennedy>Exactly.

00:40:00.240 --> 00:40:00.580
<v Michael Kennedy>Let's see.

00:40:01.340 --> 00:40:01.920
<v Michael Kennedy>Any good comments?

00:40:02.120 --> 00:40:02.640
<v Michael Kennedy>Is this real?

00:40:02.900 --> 00:40:04.220
<v Michael Kennedy>This is hilarious, whether or not.

00:40:04.480 --> 00:40:09.620
<v Michael Kennedy>This is perfectly fine for local prod as well, as far as I'm concerned, production as in live.

00:40:10.700 --> 00:40:11.880
<v Michael Kennedy>Cutting out the middle, man.

00:40:12.540 --> 00:40:14.420
<v Michael Kennedy>Literally saves a precious three seconds.

00:40:14.820 --> 00:40:16.680
<v Michael Kennedy>3.531, actually.

00:40:18.580 --> 00:40:23.220
<v Michael Kennedy>Oh, and someone literally did write a ChatGPT alternative in the comments.

00:40:23.380 --> 00:40:23.480
<v Michael Kennedy>Nice.

00:40:24.240 --> 00:40:24.760
<v Michael Kennedy>Yeah, there you go.

00:40:25.160 --> 00:40:25.640
<v Michael Kennedy>Yeah, perfect.

00:40:26.060 --> 00:40:27.820
<v Michael Kennedy>So it even came up with a prompt for you.

00:40:28.000 --> 00:40:29.900
<v Michael Kennedy>Following error, it's occurred in my JavaScript application.

00:40:30.340 --> 00:40:31.880
<v Michael Kennedy>Please write code that resolves this issue.

00:40:31.980 --> 00:40:32.940
<v Michael Kennedy>Respond only with code.

00:40:33.000 --> 00:40:33.600
<v Michael Kennedy>Here's the exception.

00:40:35.840 --> 00:40:36.620
<v Michael Kennedy>Oh, yeah.

00:40:36.920 --> 00:40:37.180
<v Michael Kennedy>Pretty good.

00:40:37.360 --> 00:40:37.800
<v Michael Kennedy>Pretty good stuff.

00:40:37.920 --> 00:40:38.140
<v Michael Kennedy>All right.

00:40:38.460 --> 00:40:38.940
<v Michael Kennedy>This one's for you.

00:40:39.180 --> 00:40:39.580
<v Michael Kennedy>You got it.

00:40:40.180 --> 00:40:40.340
<v Brian Okken>Okay.

00:40:40.540 --> 00:40:44.000
<v Brian Okken>So last week, what did we title our podcast episode?

00:40:44.260 --> 00:40:46.920
<v Brian Okken>Something like LinkedIn something?

00:40:47.270 --> 00:40:52.860
<v Brian Okken>Anyway, somebody responded with, oh, LinkedIn Cringe.

00:40:53.100 --> 00:40:59.560
<v Brian Okken>Somebody called Archtoad said, LinkedIn Cringe made me think of this.

00:40:59.980 --> 00:41:02.120
<v Brian Okken>It's AI blockchain kombucha startup.

00:41:02.380 --> 00:41:09.739
<v Brian Okken>Anyway, this comes from Archtoad referring to a post by Tim Kellogg

00:41:10.000 --> 00:41:16.140
<v Brian Okken>using nano banana prompt, create a super annoying LinkedIn profile, which is amazing.

00:41:17.060 --> 00:41:19.040
<v Brian Okken>So the profile is great.

00:41:19.240 --> 00:41:26.780
<v Brian Okken>The with a with a like a hero image with somebody giving a speech and the on the screen is disrupt

00:41:26.880 --> 00:41:30.040
<v Brian Okken>or die, which is great, great screen capture.

00:41:30.980 --> 00:41:33.200
<v Brian Okken>But the let's see, let's read his profile.

00:41:33.620 --> 00:41:42.440
<v Brian Okken>He's a visionary, 10X growth ninja, chief evangelist at stealth mode, at a stealth mode AI blockchain kombucha startup.

00:41:43.640 --> 00:41:44.060
<v Brian Okken>That's awesome.

00:41:45.020 --> 00:41:49.680
<v Brian Okken>Helping Fortune 500 CEOs maximize human synergy means nothing.

00:41:51.040 --> 00:41:52.840
<v Brian Okken>A TEDx speaker applicant.

00:41:56.260 --> 00:41:58.300
<v Brian Okken>Not even TED, just like a TEDx.

00:41:58.600 --> 00:42:00.620
<v Brian Okken>Yeah, sure, TEDx, which is like the original.

00:42:01.300 --> 00:42:03.040
<v Brian Okken>I applied to speak.

00:42:03.280 --> 00:42:05.100
<v Brian Okken>I didn't get it, but I applied.

00:42:06.720 --> 00:42:08.280
<v Brian Okken>Forbes 30 Under 30 nominee.

00:42:08.340 --> 00:42:09.000
<v Brian Okken>Oh, my gosh.

00:42:09.280 --> 00:42:10.860
<v Brian Okken>A dog dad, coffee addict.

00:42:12.040 --> 00:42:13.800
<v Brian Okken>Why are you still reading this?

00:42:13.980 --> 00:42:14.540
<v Brian Okken>Let's connect.

00:42:17.360 --> 00:42:19.560
<v Brian Okken>About Bryden just doesn't just work.

00:42:19.720 --> 00:42:21.280
<v Brian Okken>Bryden shifts paradigms.

00:42:22.480 --> 00:42:23.600
<v Brian Okken>That's awesome.

00:42:24.020 --> 00:42:30.260
<v Brian Okken>Anyway, really good things I'd like to see in a LinkedIn profile.

00:42:30.260 --> 00:42:30.860
<v Michael Kennedy>This is pretty good.

00:42:31.200 --> 00:42:33.900
<v Michael Kennedy>I didn't realize that this originally came from Nana Banana.

00:42:34.070 --> 00:42:37.060
<v Michael Kennedy>I feel like the challenge is on for the follow-ups.

00:42:39.080 --> 00:42:39.200
<v Michael Kennedy>Yeah.

00:42:40.160 --> 00:42:40.680
<v Michael Kennedy>Pretty amazing.

00:42:40.930 --> 00:42:41.300
<v Michael Kennedy>Pretty amazing.

00:42:43.160 --> 00:42:49.600
<v Brian Okken>Anyway, it's been an amazing run for us and an amazing 2025, I think.

00:42:49.780 --> 00:42:50.400
<v Brian Okken>Things are going good.

00:42:50.820 --> 00:42:55.240
<v Brian Okken>And, I mean, aside from, like, you know, our entire country imploding.

00:42:55.720 --> 00:42:58.540
<v Brian Okken>But, you know, other than that, things have been going pretty good for you and I.

00:42:58.840 --> 00:43:04.600
<v Michael Kennedy>So it's been a, you know, the backhanded compliment curses, may you live in interesting

00:43:04.820 --> 00:43:05.880
<v Michael Kennedy>times while things are interesting.

00:43:06.340 --> 00:43:07.100
<v Michael Kennedy>Definitely interesting.

00:43:07.540 --> 00:43:11.760
<v Michael Kennedy>I do want to say though, thank you to everyone for listening this year, all the years and

00:43:11.860 --> 00:43:12.960
<v Michael Kennedy>here's to 2026.

00:43:13.560 --> 00:43:13.740
<v Brian Okken>Yeah.

00:43:14.060 --> 00:43:16.800
<v Brian Okken>happy holidays and hope everybody has a good new year.

00:43:17.120 --> 00:43:17.220
<v Brian Okken>Yep.

00:43:17.500 --> 00:43:17.560
<v Brian Okken>Bye.

00:43:17.800 --> 00:43:17.860
<v Brian Okken>Bye.

00:43:18.060 --> 00:43:18.280
<v Michael Kennedy>Thanks, Brian.

