WEBVTT

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

00:00:05.680 --> 00:00:11.360
This is episode 383, recorded May 14th, 2024.

00:00:11.360 --> 00:00:12.720
And I am Brian Okken.

00:00:12.720 --> 00:00:13.900
And I am Michael Kennedy.

00:00:13.900 --> 00:00:18.880
And today's episode is sponsored by a new sponsor, Mailtrap.

00:00:18.880 --> 00:00:21.980
Thank you, Mailtrap. Listen to their spot later in the show.

00:00:21.980 --> 00:00:27.460
And if you want to connect to us, we're all on Fosstodon and on Mastodon.

00:00:27.460 --> 00:00:29.960
And those links are all in the show notes, of course.

00:00:30.400 --> 00:00:37.080
And also in the show notes or just at pythonbytes.fm, you can find out information to join us live on YouTube.

00:00:37.080 --> 00:00:39.780
It's always fun. And if not, that's okay.

00:00:39.780 --> 00:00:41.260
But you can catch us later.

00:00:41.260 --> 00:00:44.380
If you sign up to be a friend of the show, you can get the email.

00:00:44.380 --> 00:00:47.600
And the friend of the show emails are going well.

00:00:47.600 --> 00:00:50.980
It's growing well. I'm excited about that.

00:00:50.980 --> 00:00:54.060
And also the open rate is staying very high.

00:00:54.060 --> 00:00:55.240
So that's pretty exciting.

00:00:55.240 --> 00:00:56.220
So thank you.

00:00:56.220 --> 00:00:57.800
People must care. I think it's cool.

00:00:57.800 --> 00:00:59.560
I enjoy getting it myself, actually.

00:00:59.900 --> 00:01:00.540
Yeah, I do too.

00:01:00.540 --> 00:01:06.500
So also, I enjoy hearing from Michael about the exciting news in Python.

00:01:06.500 --> 00:01:08.720
So, Michael, what do you got for us first?

00:01:08.720 --> 00:01:10.840
Brian, why aren't you shipping code faster?

00:01:10.840 --> 00:01:11.420
Come on.

00:01:11.420 --> 00:01:12.880
What's taking so long?

00:01:12.880 --> 00:01:13.560
Well...

00:01:13.560 --> 00:01:18.000
You know that feeling when you start a new project and everything's going quick.

00:01:18.000 --> 00:01:22.220
And then after a couple of years, you're like, why do we have so many meetings to add a button?

00:01:23.220 --> 00:01:24.040
You know what I mean?

00:01:24.040 --> 00:01:24.900
Or something like that.

00:01:24.900 --> 00:01:26.460
Yeah.

00:01:26.460 --> 00:01:28.680
It's tricky.

00:01:28.680 --> 00:01:32.300
And so we're not the only ones to wonder this.

00:01:32.740 --> 00:01:39.440
Bhasky Gupta said, I was also wondering this, but he took more action than most people, I imagine, would.

00:01:39.440 --> 00:01:43.860
And said, I'm going to ask a hundred developers why they aren't shipping code faster.

00:01:43.860 --> 00:01:44.820
And then write it up.

00:01:45.060 --> 00:01:46.760
So I read it up and let's share it.

00:01:46.760 --> 00:01:48.800
There's some interesting things in here, basically.

00:01:48.800 --> 00:01:53.380
Like, look, I talk to people from a lot of the tech companies you would know.

00:01:53.380 --> 00:01:57.120
Meta, Pinterest, Heroku, Roblox, et cetera, et cetera.

00:01:57.120 --> 00:02:00.980
Something that I could probably make a joke out of, but I'm going to try not to.

00:02:02.020 --> 00:02:03.100
I'm going to try not to.

00:02:03.100 --> 00:02:05.820
But I thought it might be fun to summarize this for you.

00:02:05.820 --> 00:02:06.800
All right.

00:02:06.800 --> 00:02:15.200
So they broke it down into multiple big categories like meetings or human interaction type stuff.

00:02:15.200 --> 00:02:18.460
And the first big category is code bases.

00:02:18.460 --> 00:02:19.800
So code.

00:02:19.800 --> 00:02:22.960
And right at the top is tendency bugs.

00:02:23.800 --> 00:02:31.020
So you kind of got to look at these a little bit of where, what are your current today blockers?

00:02:31.020 --> 00:02:41.340
And maybe the person who said I'm blocked by this is a 27 year old who never worked when your only resource was a book and there were no packages, no dependencies.

00:02:41.340 --> 00:02:42.740
You want a dependency?

00:02:42.740 --> 00:02:45.800
You crack it open and you get the algorithm and you start writing.

00:02:45.800 --> 00:02:46.540
You know what I mean?

00:02:46.540 --> 00:02:46.980
Like that.

00:02:46.980 --> 00:02:53.700
So, so the problem is they say, look, if I hit, they've got a bunch of quotes that are actually nice.

00:02:53.700 --> 00:02:59.620
So Jack, an ex Microsoft person says the number one barrier to shipping faster is dependency bugs.

00:02:59.620 --> 00:03:09.000
So hitting a random mysterious bug with libraries that require, require reading tons of old code or stack overflow links and GitHub issues.

00:03:09.000 --> 00:03:12.360
They're just trying to figure out like, why does this thing, why did it stop working?

00:03:12.360 --> 00:03:13.240
You know what I mean?

00:03:13.240 --> 00:03:15.620
And I would change that a little bit.

00:03:15.620 --> 00:03:22.980
Or maybe Michael's version is when something changes and it becomes incompatible and a worst case scenario.

00:03:23.600 --> 00:03:34.360
Is especially with the modern resolver and pipe and pip basically is if we can't find a matching fit for you, you don't get it.

00:03:34.360 --> 00:03:39.340
Rather than we're going to give you a warning that it's not a great idea, but we're going to let you run it.

00:03:39.340 --> 00:03:39.620
Right.

00:03:39.940 --> 00:03:50.300
So if there's something that says, I have to have this version of a library less than a version and something else says, I have to have this library greater than a version and there's not an intersection there.

00:03:50.300 --> 00:03:54.360
You're now hunting around and it's, you're like, well, guess we're done.

00:03:55.000 --> 00:03:56.400
And you can roll back.

00:03:56.400 --> 00:03:56.780
Right.

00:03:56.780 --> 00:04:01.900
You could say, okay, well, what of this like weird combination of things that it's coming up that I got to deal with?

00:04:01.900 --> 00:04:04.500
Can I roll back so that there is an intersection?

00:04:04.500 --> 00:04:09.260
But if you need a new feature, all right, then it's hard.

00:04:09.420 --> 00:04:13.000
Or even if it's not any feature you need, it's just like, well, here's an hour and a half.

00:04:13.000 --> 00:04:19.240
I spent juggling the intersection of these dependencies such that I didn't care about their interaction.

00:04:19.240 --> 00:04:19.660
Really.

00:04:19.660 --> 00:04:24.180
I just want the, I just want them both to be here, but there's this bizarre interaction I got to deal with.

00:04:24.280 --> 00:04:29.860
And my, my complaint about the pip being a hundred percent, like, no, we can't find it.

00:04:29.860 --> 00:04:32.040
So you don't get it is that incompatibility.

00:04:32.040 --> 00:04:37.080
The one thing that said less than the other thing said greater than maybe that has to do with multi multi-processing.

00:04:37.080 --> 00:04:40.040
If you're not using multi-processing, it would probably be fine.

00:04:40.040 --> 00:04:46.940
Even though there's like a known intersection bug, if you're not using that part of the code path, it's not your problem.

00:04:46.940 --> 00:04:48.260
And you can say, like, I tested it.

00:04:48.260 --> 00:04:50.400
I don't care if it's says it's the wrong version.

00:04:50.400 --> 00:04:51.620
I want to just keep working.

00:04:51.620 --> 00:04:51.880
Right.

00:04:52.140 --> 00:04:55.240
And so, well, that's a lot of timing spent on that.

00:04:55.240 --> 00:04:55.420
Right.

00:04:55.420 --> 00:04:55.980
Okay.

00:04:55.980 --> 00:04:58.680
There also is bugs in your dependencies.

00:04:58.680 --> 00:05:02.120
And I don't, I don't know if that was covered by this or not.

00:05:02.120 --> 00:05:03.960
Yes, that's true.

00:05:03.960 --> 00:05:05.020
That's true.

00:05:05.020 --> 00:05:06.200
But that's, that's one of those.

00:05:06.200 --> 00:05:11.920
I think there's expectations that don't match really how they, what reality should be.

00:05:11.920 --> 00:05:19.320
So we, like you said, we used to write all of our code and even if, even if you got it out of a book, you wouldn't blame the book author.

00:05:19.320 --> 00:05:21.380
If there was a bug in it, you would fix it yourself.

00:05:21.380 --> 00:05:21.900
Yeah.

00:05:21.900 --> 00:05:22.060
Yeah.

00:05:22.060 --> 00:05:30.520
But now we've got tons of dependencies and there's a lot of projects that are really 10 to 20% new code and the rest of it we're pulling in from everybody else.

00:05:30.520 --> 00:05:37.680
Now, if those other things have a bug, do we think that it's, we just save time to not have to write all that.

00:05:37.680 --> 00:05:42.640
Do we go out and fix those in the dependent projects or do we just complain about it or?

00:05:42.640 --> 00:05:43.880
Exactly.

00:05:43.880 --> 00:05:44.660
Exactly.

00:05:44.780 --> 00:05:45.900
And it's usually open source.

00:05:45.900 --> 00:05:47.960
Usually PRs are welcome, right?

00:05:47.960 --> 00:05:49.360
You don't want to do it.

00:05:49.360 --> 00:05:58.460
But that's why I brought up like the younger developer who didn't have to live through the time where there were no package or no package management things.

00:05:58.460 --> 00:06:00.000
Because there were no packages, right?

00:06:00.000 --> 00:06:05.960
You just, maybe if you're lucky, you download some random code off the internet and you like work it into your app.

00:06:05.960 --> 00:06:06.920
Right?

00:06:06.920 --> 00:06:12.400
And so the velocity of writing software is so much faster than it used to be.

00:06:12.400 --> 00:06:19.220
And when it takes a step back by 20% because that thing has drawbacks, it's still vastly better than it used to be.

00:06:19.220 --> 00:06:20.400
So that was all I was saying there.

00:06:20.400 --> 00:06:20.840
Yeah.

00:06:20.840 --> 00:06:21.280
Yeah.

00:06:21.380 --> 00:06:23.600
And I know you live, you live through the same thing, right?

00:06:23.600 --> 00:06:24.480
Yeah.

00:06:24.480 --> 00:06:24.980
Yeah.

00:06:24.980 --> 00:06:25.660
Okay.

00:06:25.660 --> 00:06:26.780
So that's not the only one.

00:06:26.780 --> 00:06:27.380
No, no.

00:06:27.380 --> 00:06:29.260
There's plenty more complicated code bases.

00:06:29.260 --> 00:06:30.920
It's, it's true.

00:06:30.920 --> 00:06:31.720
Yeah.

00:06:31.720 --> 00:06:32.260
It's tricky.

00:06:32.260 --> 00:06:34.420
I would have put this at number one if it was me.

00:06:34.420 --> 00:06:34.780
Yeah.

00:06:34.780 --> 00:06:35.040
Yeah.

00:06:35.040 --> 00:06:38.400
So it says here, look, the law, the logic is sound.

00:06:38.400 --> 00:06:39.660
You've got a growing startup.

00:06:39.660 --> 00:06:40.640
You've got to ship faster.

00:06:40.640 --> 00:06:41.320
You're going to die.

00:06:41.320 --> 00:06:42.660
No time to write docs.

00:06:42.660 --> 00:06:44.960
Early engineers churn out as the company grows.

00:06:44.960 --> 00:06:50.740
New engineers come into a big mess and they've got to deal with it, but they still got to grow fast,

00:06:50.740 --> 00:06:51.200
ship fast.

00:06:51.260 --> 00:06:51.600
et cetera.

00:06:51.600 --> 00:06:51.920
Right.

00:06:51.920 --> 00:06:59.180
It says Maria from Amazon says there's so much undocumented in our service, including poor

00:06:59.180 --> 00:07:04.480
records of new features, non-existent or outdated info in our dependencies, or even essential

00:07:04.480 --> 00:07:06.360
things like best practices for testing.

00:07:06.360 --> 00:07:10.740
A lot of time is wasted and things trying to find what this is all about.

00:07:10.740 --> 00:07:11.020
Right.

00:07:11.020 --> 00:07:14.960
And the nobody has time to write documentation, which creates a vicious cycle.

00:07:14.960 --> 00:07:16.320
This is your number one.

00:07:16.320 --> 00:07:21.140
The complicated code base would definitely be number one, but the documents,

00:07:21.140 --> 00:07:24.020
the documentation and comments part.

00:07:24.020 --> 00:07:31.060
I used to have a tool handy that would strip out, do a fork of a repo and strip out all

00:07:31.060 --> 00:07:31.560
the comments.

00:07:31.560 --> 00:07:32.700
I love it.

00:07:32.700 --> 00:07:36.340
Because it was so much easier to navigate some code bases without the comments.

00:07:36.340 --> 00:07:37.260
But yeah.

00:07:37.740 --> 00:07:38.580
Comments are great.

00:07:38.580 --> 00:07:38.600
Comments are great.

00:07:38.600 --> 00:07:43.560
But if it's, and I don't really know what else you do for this, but if the function is,

00:07:43.560 --> 00:07:51.060
let's say 10 lines, but the documentation is 20 or 30, all of a sudden you're like, okay,

00:07:51.060 --> 00:07:51.900
okay, I'm trying to see.

00:07:51.900 --> 00:07:52.860
I'm trying, you know what I mean?

00:07:52.860 --> 00:07:53.760
It's like a little tricky.

00:07:53.960 --> 00:07:54.700
And you can do stuff.

00:07:54.700 --> 00:07:59.680
I have, for example, in editors, you can code fold the comments and things like that.

00:07:59.680 --> 00:07:59.840
Right.

00:07:59.840 --> 00:08:00.380
That could help.

00:08:00.380 --> 00:08:00.740
Yeah.

00:08:00.740 --> 00:08:03.820
But also like when you fix a bug, do you go back and fix the comment?

00:08:03.820 --> 00:08:05.880
Sometimes not.

00:08:05.880 --> 00:08:07.700
Sometimes not.

00:08:07.700 --> 00:08:09.020
Okay.

00:08:09.020 --> 00:08:09.580
Let's move on.

00:08:09.660 --> 00:08:09.820
All right.

00:08:09.820 --> 00:08:12.960
Next major section is process and QA loops.

00:08:12.960 --> 00:08:18.460
I can see what you think about this, but it's not so much a test or no test, but when you

00:08:18.460 --> 00:08:23.820
have a, say a QA department and so on, it says Taylor, who's worked for a series of high

00:08:23.820 --> 00:08:30.520
growth startups, says me creating a test spec for QA, QA finding problems, getting a list

00:08:30.520 --> 00:08:35.940
of problems two days later, fixing the merge conflicts because the code has changed since

00:08:35.940 --> 00:08:39.240
then, switching back, back to QA, keep looping.

00:08:39.240 --> 00:08:40.620
And that kind of thing, right?

00:08:40.620 --> 00:08:43.960
Maybe the challenge here is depending on other people for your code quality.

00:08:43.960 --> 00:08:44.380
Yeah.

00:08:44.380 --> 00:08:49.400
Or I think that's always in large projects, always going to be a thing, but having one

00:08:49.400 --> 00:08:50.520
of the things that helps with that.

00:08:50.520 --> 00:08:55.560
I know we're not trying to fix this here, but having embedded QA developers in the development

00:08:55.560 --> 00:08:55.900
teams.

00:08:55.900 --> 00:08:59.060
But yeah, that's an interesting suggestion for sure.

00:08:59.060 --> 00:09:05.180
Waiting for specs on larger companies, you know, just waiting for what are we going to

00:09:05.180 --> 00:09:05.400
build?

00:09:05.400 --> 00:09:10.700
Well, I got to wait for people to approve, you know, the schemas or the API points or

00:09:10.700 --> 00:09:10.980
whatever.

00:09:10.980 --> 00:09:13.800
These people wishing we had waterfall again.

00:09:13.800 --> 00:09:14.980
I don't know what's going on.

00:09:14.980 --> 00:09:15.960
Yeah, exactly.

00:09:15.960 --> 00:09:18.700
Just design it all up front and give it to me.

00:09:18.700 --> 00:09:24.020
I think a lot of the next one also is awaiting stakeholder approval.

00:09:24.020 --> 00:09:26.980
I think there's just a lot of, a lot of that kind of stuff.

00:09:27.120 --> 00:09:30.600
So we, we, we're a pure vegetarian team, so we have no stakeholder.

00:09:30.600 --> 00:09:33.960
Put the stake down.

00:09:33.960 --> 00:09:34.600
Okay.

00:09:34.600 --> 00:09:38.060
Raj from AWS said it.

00:09:38.060 --> 00:09:43.100
Amazon meetings approval, taking 10 different stakeholder, talking to 10 different stakeholders

00:09:43.100 --> 00:09:47.400
because changing the color over a button affects 15 microservices.

00:09:47.400 --> 00:09:49.820
Oh, microservices.

00:09:49.820 --> 00:09:51.000
Could that just be its own thing?

00:09:51.000 --> 00:09:51.820
Like microservices.

00:09:52.200 --> 00:09:52.400
Okay.

00:09:52.400 --> 00:09:52.980
Let's go.

00:09:52.980 --> 00:09:55.060
Writing tests.

00:09:55.060 --> 00:10:01.620
Devs complain around tests could be basically divided into one, not enough tests or bad tests.

00:10:01.620 --> 00:10:04.480
So grant at a FinTech unicorn.

00:10:04.480 --> 00:10:08.380
The biggest thing was we didn't have good tests or good types.

00:10:08.380 --> 00:10:13.260
So I had to do a whole lot of work to do end to end testing of stuff whenever I wanted to

00:10:13.260 --> 00:10:13.760
ship things.

00:10:13.760 --> 00:10:15.020
Yeah.

00:10:15.020 --> 00:10:15.460
Yeah.

00:10:15.460 --> 00:10:16.440
You could have read them.

00:10:16.440 --> 00:10:17.220
He could have wrote them.

00:10:17.500 --> 00:10:17.720
Yeah.

00:10:17.720 --> 00:10:18.080
Yeah.

00:10:18.080 --> 00:10:18.220
Yeah.

00:10:18.220 --> 00:10:18.340
Yeah.

00:10:18.340 --> 00:10:24.680
Another one has to do with, it doesn't at first sound like bad tests, but CI/CD taking

00:10:24.680 --> 00:10:25.440
so long.

00:10:25.440 --> 00:10:31.140
So running pipelines for shipping takes a lot of time and ensures proper code coverage.

00:10:31.140 --> 00:10:34.980
The tests sometimes require these pipelines to take their time, which slows us down.

00:10:34.980 --> 00:10:35.480
Yeah.

00:10:35.480 --> 00:10:35.920
Yeah.

00:10:35.920 --> 00:10:41.540
There's a, I know there's more here, but one of the, one of the metrics that I love is, is

00:10:41.540 --> 00:10:41.860
throughput.

00:10:42.500 --> 00:10:46.760
So was it, is it throughput or cycle time?

00:10:46.760 --> 00:10:47.260
I don't know.

00:10:47.260 --> 00:10:48.460
I think it's cycle time.

00:10:48.460 --> 00:10:54.020
Basically, how long does it take you to get from like a single line code change that's to

00:10:54.020 --> 00:10:59.740
shipping and, and how like all that process through the CI, the pipeline, the testing approvals,

00:10:59.740 --> 00:11:03.660
whatever you have to do to measure that and try to get that as low as possible and get the

00:11:03.660 --> 00:11:04.400
junk out of it.

00:11:04.400 --> 00:11:07.060
Because that does, that is a problem.

00:11:07.060 --> 00:11:08.120
Yeah, absolutely.

00:11:08.120 --> 00:11:08.660
All right.

00:11:08.680 --> 00:11:10.540
I kind of also blended the last one together with this.

00:11:10.540 --> 00:11:13.280
So people are waiting for PRs to be approved.

00:11:13.280 --> 00:11:14.800
Scope creep.

00:11:14.800 --> 00:11:22.820
Josh says the human tendency to stuff last minute items into the crevices of their luggage

00:11:22.820 --> 00:11:27.640
minutes before leaving for the airport manifests itself at software companies as scope creep

00:11:27.640 --> 00:11:33.480
slowly and surely it will push back your release date with every incremental edition feeling

00:11:33.480 --> 00:11:39.300
like an insignificant task, but in aggregate adding significant molasses to the team's

00:11:39.300 --> 00:11:39.680
velocity.

00:11:39.680 --> 00:11:41.460
Yes.

00:11:41.460 --> 00:11:42.000
Yes.

00:11:42.000 --> 00:11:42.580
Just ship it.

00:11:42.580 --> 00:11:44.400
And then, then add those features later.

00:11:44.400 --> 00:11:47.180
Excessive meetings.

00:11:47.180 --> 00:11:48.160
I agree.

00:11:48.160 --> 00:11:49.140
This, okay.

00:11:49.140 --> 00:11:51.560
I'm going to wrap it up with this one, Brian, because it's been kind of long, but this is

00:11:51.560 --> 00:11:51.940
interesting.

00:11:51.940 --> 00:11:52.660
Motivation.

00:11:52.660 --> 00:11:59.140
Diane, a former engineer at Meta said the number one reason that slowed her down was motivation.

00:11:59.600 --> 00:12:05.080
So honest answer is I was working on ads and that's a very old, complicated and large stack.

00:12:05.080 --> 00:12:06.260
I didn't understand it.

00:12:06.260 --> 00:12:08.920
My friends on younger teams seemed happier.

00:12:08.920 --> 00:12:09.960
I was miserable.

00:12:09.960 --> 00:12:11.000
Yeah.

00:12:11.000 --> 00:12:13.380
Like, so basically shouldn't be surprising.

00:12:13.380 --> 00:12:15.620
People want to work on inspiring projects.

00:12:15.620 --> 00:12:17.540
And when you're inspired, think more about it.

00:12:17.540 --> 00:12:18.680
You put more time into it.

00:12:18.680 --> 00:12:24.380
And it's like, well, can we squeeze a percent of a percent out of this retargeting thing to

00:12:24.380 --> 00:12:26.240
squeeze a bit more money for the company?

00:12:26.240 --> 00:12:28.900
Like not the same as sort of inspiration is it?

00:12:29.480 --> 00:12:29.940
All right.

00:12:29.940 --> 00:12:34.740
Well, people can check this list out and hopefully, you know, maybe bring some of these ideas

00:12:34.740 --> 00:12:37.540
together to push back some of these problems at your company.

00:12:37.540 --> 00:12:38.080
Yeah.

00:12:38.080 --> 00:12:38.500
Yeah.

00:12:38.500 --> 00:12:39.360
All right.

00:12:39.360 --> 00:12:39.860
Back to you, Brian.

00:12:39.860 --> 00:12:43.260
Well, I want to talk about Python 3.13.

00:12:43.260 --> 00:12:44.060
Yay.

00:12:44.060 --> 00:12:45.640
Speaking of shipping things.

00:12:45.640 --> 00:12:46.080
Yeah.

00:12:46.080 --> 00:12:47.060
Shipping things.

00:12:47.060 --> 00:12:55.040
3.13, 3.13.0 Beta 1 is released as of May 8th.

00:12:55.040 --> 00:12:56.600
I guess this is like a week old.

00:12:56.840 --> 00:13:01.400
Anyway, Beta 1 released and there's some fun stuff in here.

00:13:01.400 --> 00:13:03.840
So betas are available to play with.

00:13:03.840 --> 00:13:07.620
And reminder, the beta does not mean that it's completely done.

00:13:07.620 --> 00:13:08.800
It is half-baked.

00:13:09.440 --> 00:13:14.500
So the feature freeze for Python, is it an feature freeze?

00:13:14.500 --> 00:13:15.220
I guess.

00:13:15.220 --> 00:13:15.980
Is it a feature freeze?

00:13:15.980 --> 00:13:16.420
I believe so.

00:13:16.420 --> 00:13:17.220
Oh, okay.

00:13:17.220 --> 00:13:17.320
Yeah.

00:13:17.320 --> 00:13:20.500
I believe when they hit beta, they say, what's here is here.

00:13:20.500 --> 00:13:21.000
Yeah.

00:13:21.000 --> 00:13:21.440
Okay.

00:13:21.440 --> 00:13:25.060
Ideally, unless maybe they have to got to take something out because they can't get it to

00:13:25.060 --> 00:13:25.600
work in the end.

00:13:25.960 --> 00:13:26.460
All right.

00:13:26.460 --> 00:13:33.620
So disclaimer, it is still under development, but there are four beta releases, previews

00:13:33.620 --> 00:13:35.020
planned for 3.13.

00:13:35.520 --> 00:13:42.520
So this is a good time to, it says, we bold, strongly encourage maintainers of third-party

00:13:42.520 --> 00:13:44.040
projects to test with 3.13.

00:13:44.040 --> 00:13:49.960
So time to turn on your, or at least check to see if you can turn on your 3.13 pipelines

00:13:49.960 --> 00:13:50.340
in CI.

00:13:51.420 --> 00:13:55.340
So a whole bunch of fun new things in 3.13.

00:13:55.340 --> 00:14:00.500
A lot of these are sort of internal stuff that are, that I'm excited about, but, you know,

00:14:00.500 --> 00:14:02.720
end users maybe might not care about.

00:14:02.720 --> 00:14:08.860
There's the experimental Fred, free threaded build mode with, to disable the GIL.

00:14:08.860 --> 00:14:09.800
That's kind of fun.

00:14:09.800 --> 00:14:14.160
A preliminary experimental just in time compiler.

00:14:14.160 --> 00:14:15.940
That's kind of neat.

00:14:15.940 --> 00:14:17.160
This is cool.

00:14:17.160 --> 00:14:25.120
A cyclic garbage collector that is now incremental, which should mean shorter pauses for collection

00:14:25.120 --> 00:14:31.120
and programs with a lot of objects and a different version of MimeAlloc.

00:14:31.120 --> 00:14:32.040
MimeAlloc?

00:14:32.040 --> 00:14:33.380
I don't know how to pronounce that.

00:14:33.380 --> 00:14:38.280
That, yeah, some possible memory improvements, which is kind of neat.

00:14:38.280 --> 00:14:41.760
The thing that I'm really, okay, a couple other notes.

00:14:41.760 --> 00:14:44.140
I'll get to the exciting thing that I'm excited about.

00:14:44.140 --> 00:14:45.720
There's a bunch of removals.

00:14:46.200 --> 00:14:49.640
So I guess we're getting rid of CGI now.

00:14:49.640 --> 00:14:50.200
Whatever.

00:14:50.200 --> 00:14:52.260
That's how you run the web.

00:14:52.260 --> 00:14:53.580
However will I run my website?

00:14:53.580 --> 00:14:58.440
And last week I did, I mentioned this last week.

00:14:58.440 --> 00:15:00.240
Typing.type is.

00:15:00.240 --> 00:15:01.000
Type is.

00:15:01.000 --> 00:15:03.340
I think I pronounced it type LS.

00:15:03.340 --> 00:15:04.300
It's IS.

00:15:04.300 --> 00:15:05.720
That makes more sense.

00:15:05.720 --> 00:15:08.040
I was looking at the wrong font, I guess.

00:15:08.840 --> 00:15:18.920
But some of the exciting bits are that we have a new improved REPL or interactive interpreter.

00:15:18.920 --> 00:15:24.160
And this is so exciting that actually Trey Hunter wrote an article about it.

00:15:24.360 --> 00:15:32.240
So even like the URL for this is, oh, I have the URL hidden, is like my favorite thing of Python 3.13.

00:15:32.240 --> 00:15:36.980
So what's cool about the REPL is there's a bunch of cool stuff.

00:15:36.980 --> 00:15:39.840
There's a, it's colored prompt, which is fun.

00:15:39.840 --> 00:15:40.840
We like colors now.

00:15:41.800 --> 00:15:44.200
And then, ooh, it's like blue.

00:15:44.200 --> 00:15:47.200
There's, you can exit now.

00:15:47.200 --> 00:15:50.360
You used to have to do, it used to say like exit, bracket, bracket.

00:15:50.360 --> 00:15:51.240
Or exit.

00:15:51.240 --> 00:15:51.480
What?

00:15:51.480 --> 00:15:52.140
It'll exit?

00:15:52.140 --> 00:15:52.920
Yeah.

00:15:52.920 --> 00:15:53.840
Exit works now.

00:15:53.840 --> 00:15:54.960
Oh my gosh.

00:15:55.160 --> 00:15:57.160
I was thinking of doing a PR to make this happen.

00:15:57.160 --> 00:15:58.940
I'm just like, why is this so clunky?

00:15:58.940 --> 00:16:00.620
Yay.

00:16:00.620 --> 00:16:01.940
I mean, I mean, a pep.

00:16:01.940 --> 00:16:04.200
Just like, we gotta, like, we gotta rally, folks.

00:16:04.200 --> 00:16:07.420
Oh, this is worth 3.13 just to get exit to work.

00:16:07.420 --> 00:16:10.940
Block level history.

00:16:10.940 --> 00:16:11.640
Really cool.

00:16:11.640 --> 00:16:18.820
So basically, this is like some of these niceties that you used to get from other sort of alternative

00:16:18.820 --> 00:16:19.400
REPLs.

00:16:19.400 --> 00:16:24.720
Things like being able to edit the block and, you know, some little block history.

00:16:25.160 --> 00:16:28.840
It's really pretty cool to be able to, like, go back and modify things.

00:16:28.840 --> 00:16:30.760
And pasting code works better.

00:16:30.760 --> 00:16:36.120
So if you copy some stuff out of the REPL and paste it in the REPL, it doesn't paste in the

00:16:36.120 --> 00:16:37.500
dot, dot, dots correctly.

00:16:37.500 --> 00:16:39.440
You know, it does that right now.

00:16:39.440 --> 00:16:40.360
So neat.

00:16:40.360 --> 00:16:48.620
The downside, it's curses, so it won't work correctly on, doesn't currently work on Windows.

00:16:48.620 --> 00:16:51.320
So that's, actually, it's a pretty big deal.

00:16:51.320 --> 00:16:53.980
But, you know, anyway, some fun stuff.

00:16:54.100 --> 00:16:55.060
Why not Rich?

00:16:55.060 --> 00:16:56.160
Why not Rich?

00:16:56.160 --> 00:16:57.660
Rich and Textual.

00:16:57.660 --> 00:16:59.600
That would have been awesome if they'd done that.

00:16:59.600 --> 00:17:01.220
Right?

00:17:01.220 --> 00:17:02.060
I mean, I'm not joking.

00:17:02.060 --> 00:17:04.080
Like, there's, it works all cross-platform.

00:17:04.080 --> 00:17:06.440
It's got some incredible UI stuff.

00:17:06.440 --> 00:17:07.180
Would have been cool.

00:17:07.180 --> 00:17:08.260
Yeah.

00:17:08.260 --> 00:17:11.340
Rich and Textual don't work everywhere either.

00:17:11.340 --> 00:17:13.280
But, you know, but more places.

00:17:13.280 --> 00:17:16.560
Maybe, maybe this is a to be done.

00:17:16.560 --> 00:17:19.320
Or maybe just you get the old terminal on Windows.

00:17:19.320 --> 00:17:21.720
But, you know, that's 50% of the user base, right?

00:17:21.720 --> 00:17:30.840
That's like a, not, it's not like, well, there's, there's one, one particular MicroPython type of device.

00:17:30.840 --> 00:17:35.120
It's like this odd $5 thing that goes into tractors that it won't work.

00:17:35.120 --> 00:17:37.220
Like, it's like half of the user base.

00:17:37.220 --> 00:17:37.760
Yeah.

00:17:37.760 --> 00:17:38.680
So, I don't know.

00:17:38.680 --> 00:17:39.040
That's a.

00:17:39.040 --> 00:17:45.240
Well, Blaze recommends instead of exit, we should just require people to do colon Q.

00:17:46.100 --> 00:17:47.320
How do you exit the ruffle?

00:17:47.320 --> 00:17:48.340
You reboot your computer.

00:17:48.340 --> 00:17:48.740
Okay.

00:17:48.740 --> 00:17:49.140
Next.

00:17:49.140 --> 00:17:51.620
Anyway.

00:17:51.620 --> 00:17:52.600
All right.

00:17:52.600 --> 00:17:55.480
Well, should we talk about our lovely sponsor, Mailtrap?

00:17:55.480 --> 00:17:57.140
Yes, indeed.

00:17:57.140 --> 00:17:59.100
Although, I would like to add two things real quick.

00:17:59.100 --> 00:18:01.400
And then I'll tell everyone about them.

00:18:01.400 --> 00:18:03.700
One, this is very exciting.

00:18:03.700 --> 00:18:07.240
It's going to be interesting to see where the free-threaded Python stuff goes.

00:18:07.240 --> 00:18:09.400
Because that's another one of the big deals.

00:18:09.400 --> 00:18:11.540
But it's weird, right?

00:18:11.540 --> 00:18:12.800
You've got to have a separate build.

00:18:12.800 --> 00:18:15.240
It's not even a flag or something you can set.

00:18:15.360 --> 00:18:17.140
But it's going to be something else.

00:18:17.140 --> 00:18:22.520
But also the high-performance changes outside of this free-threaded thing with a JIT.

00:18:22.520 --> 00:18:23.120
Excuse me.

00:18:23.120 --> 00:18:23.620
A JIT.

00:18:23.620 --> 00:18:24.640
Not just interpreted.

00:18:24.640 --> 00:18:26.220
This is great.

00:18:26.220 --> 00:18:27.420
So, very interesting.

00:18:27.420 --> 00:18:29.060
And then a follow-up.

00:18:29.060 --> 00:18:29.780
I apologize.

00:18:29.780 --> 00:18:32.020
I can't remember who said it in the comments.

00:18:32.020 --> 00:18:38.900
But Dora, DevOps Research and Assessment Metrics, includes four key metrics divided into these areas.

00:18:38.900 --> 00:18:44.140
Deployment frequency or lead time for changes to measure team velocity.

00:18:44.540 --> 00:18:47.860
Change failure rate and time to restore service.

00:18:47.860 --> 00:18:49.220
Measure stability.

00:18:49.220 --> 00:18:50.760
So, that's pretty cool.

00:18:50.760 --> 00:18:51.640
Dora metrics.

00:18:51.640 --> 00:18:52.180
Yeah.

00:18:52.440 --> 00:18:54.780
How about we talk Mailtrap now?

00:18:54.780 --> 00:18:55.300
Okay.

00:18:55.300 --> 00:18:59.660
This episode is sponsored by Mailtrap, an email delivery platform that developers love.

00:19:00.020 --> 00:19:04.460
An email sending solution with industry-based analytics.

00:19:04.460 --> 00:19:05.460
And email API.

00:19:05.460 --> 00:19:05.560
And email API.

00:19:05.560 --> 00:19:09.120
As well as SDKs for major programming languages.

00:19:09.120 --> 00:19:11.660
And 24-7 human support.

00:19:11.660 --> 00:19:14.580
Try for free at Mailtrap.io.

00:19:14.580 --> 00:19:15.040
Yeah.

00:19:15.040 --> 00:19:17.360
Thank you, Mailtrap, for supporting the show.

00:19:17.360 --> 00:19:18.720
Awesome to have them on board.

00:19:18.720 --> 00:19:21.960
We'll be telling you about them on upcoming shows as well.

00:19:22.200 --> 00:19:22.520
All right.

00:19:22.520 --> 00:19:25.200
So, if you do Jupyter Notebooks, Brian.

00:19:25.200 --> 00:19:27.180
Let me zoom in so we see some pictures.

00:19:27.180 --> 00:19:34.560
If you do Jupyter Notebooks or JupyterLab in particular, it's got the way it looks and so on.

00:19:34.620 --> 00:19:38.580
But what if you could have a nice theming system for it?

00:19:38.580 --> 00:19:51.380
So, there's an extension that I want to highlight, JupyterLab Theme Editor, which is an extension to provide basically editing colors, font families, font sizes of different elements in the user interface.

00:19:51.380 --> 00:19:51.880
Right?

00:19:51.880 --> 00:19:52.340
Yeah.

00:19:52.340 --> 00:19:53.400
So, pretty cool.

00:19:53.400 --> 00:19:54.440
You can just install it.

00:19:54.440 --> 00:20:04.020
And then you can open up this little sidebar, and it lets you pick the layout color, the ax out color, the border color, the UI font size, the content font size.

00:20:04.100 --> 00:20:10.720
So, one of the things that sometimes drives me crazy about UIs, you know, think about like Zoom.

00:20:10.720 --> 00:20:13.920
If you go to VS Code and you say Zoom, but Zoom's everything.

00:20:13.920 --> 00:20:17.820
Like, what if I just want to Zoom just the stuff I actually care about, like the text?

00:20:17.820 --> 00:20:22.380
And I don't want all the other crap to take up more space on my screen to make the text even harder to read.

00:20:22.380 --> 00:20:24.820
Well, let's just stay over there and just see.

00:20:24.820 --> 00:20:25.060
All right.

00:20:25.060 --> 00:20:30.660
So, having different settings for like content size versus UI element size is really awesome.

00:20:30.660 --> 00:20:32.200
So, there's a bunch of things like that.

00:20:32.200 --> 00:20:33.460
And, yeah.

00:20:33.580 --> 00:20:37.200
You can basically pick all these different colors that you like, you know.

00:20:37.200 --> 00:20:43.900
You want a styler to be light blue on dark blue or dark blue on light blue or purple or whatever you want.

00:20:43.900 --> 00:20:47.700
There's a bunch of color palettes you can pick from, which is pretty nice.

00:20:47.700 --> 00:20:50.620
And it's not a huge thing, but it's kind of interesting.

00:20:51.160 --> 00:20:53.900
So, pip install Jupyter theme editor and off you go.

00:20:53.900 --> 00:20:54.400
Yeah.

00:20:54.400 --> 00:20:59.420
I want to try to make it themed like an early 2000s.

00:20:59.420 --> 00:21:00.060
Yeah.

00:21:00.060 --> 00:21:03.480
Where's like the blinking elements and the gradients?

00:21:03.480 --> 00:21:05.080
Come on now.

00:21:05.080 --> 00:21:06.740
Yeah.

00:21:06.780 --> 00:21:07.780
Yeah.

00:21:07.780 --> 00:21:08.640
So, that's a quick one.

00:21:08.640 --> 00:21:11.120
But people can check it out if they use JupyterLab.

00:21:11.120 --> 00:21:11.640
Nice.

00:21:11.640 --> 00:21:12.100
Yeah.

00:21:12.100 --> 00:21:12.660
All right.

00:21:12.660 --> 00:21:15.280
Well, I've got another quick one a little bit.

00:21:16.300 --> 00:21:23.460
We were talking about using rich and textual for colors and stuff.

00:21:23.460 --> 00:21:25.280
And love both of those projects.

00:21:25.280 --> 00:21:32.320
One of the things that, and you can get colors and nice help output if you're using like Typer,

00:21:32.320 --> 00:21:36.260
Click, or some of the other extensions for different argument parsing.

00:21:36.260 --> 00:21:40.640
But a lot of people, and I do too, on simple projects, I just use arg parse.

00:21:40.640 --> 00:21:44.100
It works great for simple things.

00:21:44.100 --> 00:21:45.320
It's nice to test.

00:21:45.320 --> 00:21:48.720
However, it's more black and white.

00:21:48.720 --> 00:21:51.880
So, today we've got rich arg parse.

00:21:51.880 --> 00:21:54.380
So, rich arg parse is cool.

00:21:54.380 --> 00:21:59.740
It's not, so if you're having a command line program that you want to use colors, of course,

00:21:59.740 --> 00:22:01.380
you could use rich, just use the colors.

00:22:01.380 --> 00:22:03.340
But the help is auto-generated.

00:22:03.340 --> 00:22:06.880
Well, rich arg parse, or it auto-generates the format.

00:22:06.880 --> 00:22:09.320
Rich arg parse gets colors in those.

00:22:09.320 --> 00:22:15.780
So, it's got, you know, nice orange color, orange and blue and white and green, and some

00:22:15.780 --> 00:22:18.920
different great colors to really highlight.

00:22:18.920 --> 00:22:21.700
It's a lot easier to read the help text if it's in color.

00:22:21.700 --> 00:22:26.420
So, if you can add, if you're okay with adding a dependency, this is great.

00:22:26.420 --> 00:22:29.380
And it's also like really easy to add.

00:22:29.380 --> 00:22:32.120
I was like, is it possible that this is so easy?

00:22:32.220 --> 00:22:35.600
And so, how you add it, there is a whole bunch of features.

00:22:35.600 --> 00:22:38.820
So, there's built-in formatters.

00:22:38.820 --> 00:22:44.400
So, rich arg parse defines different formatters to help with the help formatter or the raw description

00:22:44.400 --> 00:22:45.180
help formatter.

00:22:45.180 --> 00:22:46.280
They're different types.

00:22:46.280 --> 00:22:52.980
But the easiest thing to do to try it out is all you have to do is import rich help formatter.

00:22:52.980 --> 00:23:02.400
And when you're instantiating your argument parser, you just pass in rich help formatter as the formatter class.

00:23:02.400 --> 00:23:05.140
And those two lines of code, that's all we did.

00:23:05.140 --> 00:23:10.180
So, I wanted to try this out to see how fun colors were in your help.

00:23:10.180 --> 00:23:13.820
And I've got a little test project called test arg parse apps.

00:23:14.240 --> 00:23:18.420
Basically, a hello world app that uses arg parse and runs testing on it.

00:23:18.420 --> 00:23:19.800
And I'm like, how do I do that?

00:23:19.800 --> 00:23:23.660
And so, the help for my little program looks like this.

00:23:23.660 --> 00:23:25.800
It's just white, normal.

00:23:25.800 --> 00:23:32.620
And when I added just these two lines of code for rich arg parse, you just get a nice orange and blue.

00:23:32.620 --> 00:23:33.660
It's really much nicer.

00:23:34.120 --> 00:23:37.880
Color in the terminal is, I feel it's kind of non-optional.

00:23:37.880 --> 00:23:41.020
I will say that it is one more dependency, though.

00:23:41.020 --> 00:23:45.980
And one of the reasons why I use arg parse a lot of times is because I don't want to add any dependencies.

00:23:45.980 --> 00:23:47.480
And I still want argument parsing.

00:23:47.480 --> 00:23:49.160
So, keep that in mind.

00:23:49.160 --> 00:23:50.880
That's a totally good point.

00:23:50.880 --> 00:23:55.040
But I can imagine plenty of projects that said, we're not going to have dependencies.

00:23:55.040 --> 00:23:56.260
Let's just use arg parse.

00:23:56.260 --> 00:23:58.340
And then, eventually, they start having some.

00:23:58.340 --> 00:24:01.640
And once you're already there, you might as well throw this on here and make it look nicer.

00:24:01.640 --> 00:24:03.380
Without writing much different code, right?

00:24:03.380 --> 00:24:03.860
Yeah.

00:24:03.860 --> 00:24:07.320
And I love that it's, I mean, there are more features.

00:24:07.320 --> 00:24:09.300
You go through, go look at the documentation.

00:24:09.300 --> 00:24:15.500
But I love projects where you can make your program better by just adding a couple lines of code.

00:24:15.500 --> 00:24:15.980
Pretty great.

00:24:15.980 --> 00:24:16.400
Indeed.

00:24:16.400 --> 00:24:18.620
Jeff out there likes to bring it full circle.

00:24:18.620 --> 00:24:23.620
So, wasn't dependency issues one of the biggest causes for slowdown development?

00:24:23.620 --> 00:24:24.040
Yes.

00:24:24.040 --> 00:24:27.520
Well, it's also, it's just two lines of code to change back.

00:24:27.520 --> 00:24:30.200
If you've got a test break, you can take that out.

00:24:30.200 --> 00:24:33.600
That's assuming that the original developer that knows that is still there.

00:24:33.660 --> 00:24:34.400
They could have left.

00:24:34.400 --> 00:24:35.620
And then, no, I'm just kidding.

00:24:35.620 --> 00:24:38.380
It's a fair point, honestly.

00:24:38.380 --> 00:24:39.640
So, anyway.

00:24:39.640 --> 00:24:40.480
I like it.

00:24:40.480 --> 00:24:42.120
Well, those are our items.

00:24:42.120 --> 00:24:43.780
Do you have any extras for us?

00:24:43.780 --> 00:24:45.080
Only one.

00:24:45.080 --> 00:24:45.680
Okay.

00:24:45.680 --> 00:24:46.160
Only one.

00:24:46.160 --> 00:24:47.520
But I will, it's very exciting.

00:24:47.520 --> 00:24:49.680
So, I'm, but it's just one of them.

00:24:49.680 --> 00:24:50.100
It was good.

00:24:50.100 --> 00:24:50.680
It's the only one.

00:24:50.680 --> 00:24:53.300
We have a brand new course over at Talk Python.

00:24:53.300 --> 00:24:58.260
And this is done by Vincent, who's been on the podcast before with us.

00:24:58.260 --> 00:25:02.700
So, it's called Getting Started with NLP and spaCy.

00:25:02.700 --> 00:25:03.520
Oh, neat.

00:25:03.880 --> 00:25:04.080
Yeah.

00:25:04.080 --> 00:25:09.360
So, basically, if you have a lot of text and you want to process it, pull out entities,

00:25:09.360 --> 00:25:11.880
understand things about it, right?

00:25:11.880 --> 00:25:17.720
Like, at a real deep level, you know, NLP, spaCy is one of the most important ways that you can,

00:25:17.720 --> 00:25:19.760
one of the most important libraries for doing that.

00:25:19.940 --> 00:25:24.140
And so, here's an awesome course that talks about how to do that with spaCy,

00:25:24.140 --> 00:25:31.840
but also even goes into using a little bit, some of the extensions and fun things like spaCy LLM

00:25:31.840 --> 00:25:38.600
to integrate, say, ChatGPT or other LLMs along with the spaCy processing to pull things out.

00:25:38.600 --> 00:25:41.300
Talks about training custom spaCy models.

00:25:41.300 --> 00:25:49.300
Vincent did a really cool job where basically all the examples of this course are based on Talk Python

00:25:49.860 --> 00:25:51.880
to me podcast transcripts.

00:25:51.880 --> 00:25:57.700
So, he wrote a single function that will give you every line ever spoken on Talk Python

00:25:57.700 --> 00:26:03.560
over the last eight years as a generator, which is insanely awesome.

00:26:03.560 --> 00:26:05.400
And completely not useful.

00:26:05.400 --> 00:26:08.060
Very interesting, right?

00:26:08.060 --> 00:26:09.640
Very interesting use of generators.

00:26:09.640 --> 00:26:13.600
But then you can just start feeding that kind of information and say, well, you know,

00:26:13.600 --> 00:26:15.880
who has talked about FastAPI?

00:26:15.880 --> 00:26:19.720
And when you do talk about FastAPI, what other projects and libraries were

00:26:19.720 --> 00:26:25.540
talked about and like, you could do things to discover sort of the zeitgeist of a topic

00:26:25.540 --> 00:26:30.460
or a tool over time by seeing how much other guests on the show talk about it and stuff.

00:26:30.460 --> 00:26:32.680
It's a really cool, really cool course.

00:26:32.680 --> 00:26:35.500
And I think people should definitely check it out.

00:26:35.500 --> 00:26:37.160
You can train and annotate your own data.

00:26:37.160 --> 00:26:38.120
I do all sorts of fun things.

00:26:38.120 --> 00:26:40.160
So, the link is in the show notes.

00:26:40.160 --> 00:26:44.220
And if you're on the list, I will probably be sending you an email about it as well.

00:26:44.220 --> 00:26:46.780
But yeah, very excited to have this new course up for everybody.

00:26:46.780 --> 00:26:47.580
It's going to be a lot of fun.

00:26:47.900 --> 00:26:48.020
Yeah.

00:26:48.020 --> 00:26:54.040
The one extra I've got is last week I announced that I was going to switch the pytest course,

00:26:54.040 --> 00:26:56.600
the one at pythontest.com.

00:26:56.600 --> 00:27:01.020
Of course, there is also a pytest course at Talk Python Training.

00:27:01.020 --> 00:27:03.140
Definitely still worth trying out.

00:27:03.140 --> 00:27:08.160
But there's the complete pytest course that covers the entire Python or the pytest book.

00:27:09.300 --> 00:27:12.800
That switched to Podia and that switch is done to Podia.

00:27:12.800 --> 00:27:14.820
So, well, almost done.

00:27:14.820 --> 00:27:15.600
It's there.

00:27:15.600 --> 00:27:18.540
Everybody's been invited except for one person.

00:27:18.540 --> 00:27:19.700
So, they didn't get their invite.

00:27:19.700 --> 00:27:21.240
I'll get that out later today.

00:27:21.240 --> 00:27:30.460
But if you're still using the teachable version, it'll still be around until a little bit into June.

00:27:30.460 --> 00:27:32.560
But please switch over soon.

00:27:32.560 --> 00:27:38.720
And then the next step of this is Podia comes with email services too.

00:27:38.720 --> 00:27:42.540
So, I'm switching from ConvertKit to Podia for email.

00:27:42.540 --> 00:27:45.060
And I'm starting that this week.

00:27:45.060 --> 00:27:45.900
So, doing that.

00:27:45.900 --> 00:27:47.800
That's the news on my end.

00:27:48.320 --> 00:27:55.320
And a lot of this has to do with just since I'm not as a turbo of a course creator as Michael is,

00:27:55.320 --> 00:28:04.080
it's to keep my overhead down so that I can do smaller courses cheaper and get more of them out to you.

00:28:04.080 --> 00:28:05.840
There's still good quality stuff.

00:28:05.840 --> 00:28:06.820
It's just awesome.

00:28:06.820 --> 00:28:08.380
Yeah, you keep the optionality, right?

00:28:08.380 --> 00:28:09.780
Keep the optionality open.

00:28:09.780 --> 00:28:10.500
So, yeah.

00:28:10.500 --> 00:28:12.240
All right.

00:28:12.240 --> 00:28:13.280
Yeah, congratulations.

00:28:13.280 --> 00:28:15.860
I know that's a big deal to move all that stuff around.

00:28:15.860 --> 00:28:17.120
Yeah, it was a little stressful.

00:28:17.320 --> 00:28:19.240
I was worried that tons of people are going to be mad.

00:28:19.240 --> 00:28:22.160
But I haven't had any complaints so far.

00:28:22.160 --> 00:28:24.340
And I'm not inviting other people to complain.

00:28:24.340 --> 00:28:25.320
But...

00:28:25.320 --> 00:28:27.700
You want to need to complain?

00:28:27.700 --> 00:28:28.280
No, just kidding.

00:28:28.280 --> 00:28:29.140
Anyway.

00:28:29.140 --> 00:28:35.200
Oh, one of the cool things that it has that I hadn't used before is there's comments within the course.

00:28:35.200 --> 00:28:37.180
So, people can ask questions like right there.

00:28:37.180 --> 00:28:38.460
I know it's a complicated topic.

00:28:38.460 --> 00:28:40.240
So, it's kind of cool to have comments.

00:28:40.240 --> 00:28:41.000
Yeah, that is cool.

00:28:41.000 --> 00:28:41.780
Anyway.

00:28:41.780 --> 00:28:43.960
Do you have anything funny for us, Michael?

00:28:43.960 --> 00:28:45.940
I do.

00:28:45.940 --> 00:28:46.780
I do.

00:28:46.880 --> 00:28:47.220
I do?

00:28:47.220 --> 00:28:48.700
Let's see.

00:28:48.700 --> 00:28:49.880
Let me put it up here.

00:28:49.880 --> 00:28:53.060
So, another testing one to follow up with your extra, of course.

00:28:53.060 --> 00:28:56.420
Comes to us from the venerable XKCD.

00:28:56.420 --> 00:28:58.440
This is 2928.

00:28:58.440 --> 00:28:59.200
Okay.

00:28:59.200 --> 00:29:01.880
So, it's called Software Testing Day.

00:29:01.880 --> 00:29:03.740
Did you know there was a Software Testing Day, Brian?

00:29:03.740 --> 00:29:04.360
No.

00:29:04.360 --> 00:29:04.920
Yeah.

00:29:04.920 --> 00:29:07.740
It's right behind Valentine's Day, apparently.

00:29:07.740 --> 00:29:12.480
So, do you and the other QA engineers have any fun plans for the holiday?

00:29:12.480 --> 00:29:13.100
Yeah.

00:29:13.100 --> 00:29:15.120
Assuming the schedule system doesn't crash.

00:29:15.120 --> 00:29:21.680
Software Testing Day is a holiday celebrated every negative one years on January 0th at 2571 p.m.

00:29:22.860 --> 00:29:24.300
That's why I don't celebrate.

00:29:24.300 --> 00:29:36.220
And then if you look at the hover, as you do on XKCD, it says, the company tried to document how often employees were celebrating Software Testing Day, but their record-keeping system kept mysteriously crashing.

00:29:37.560 --> 00:29:38.640
This is good.

00:29:38.640 --> 00:29:40.320
It's a subtle one, right?

00:29:40.320 --> 00:29:41.000
Yeah.

00:29:41.000 --> 00:29:43.260
Celebrate every negative one years.

00:29:43.260 --> 00:29:57.660
I actually had the question today from somebody as to why we can't structure our tests so that we can completely test our complicated software so that we never see anything after we write the code.

00:29:57.660 --> 00:29:58.760
Yeah.

00:29:58.760 --> 00:30:02.180
What was a messy place?

00:30:02.500 --> 00:30:12.900
I wanted to ask him how much time he had because proving software is correct is something we tried to do a long time ago, and it's not worth going down that road.

00:30:12.900 --> 00:30:13.460
Yeah.

00:30:13.460 --> 00:30:20.500
The only few places it might make sense is like the Voyager probe or something like that.

00:30:20.500 --> 00:30:20.960
You know what?

00:30:20.960 --> 00:30:23.740
We're sending it out, and we want it to run 50 years from now.

00:30:23.740 --> 00:30:29.740
No, thoroughly testing is good, but you still can't prove that you've caught all the bugs.

00:30:29.740 --> 00:30:31.140
You just can't.

00:30:31.140 --> 00:30:32.080
Yeah, absolutely.

00:30:32.080 --> 00:30:32.720
All right.

00:30:32.720 --> 00:30:35.860
Well, here's a nice little test case for him to use.

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

00:30:36.360 --> 00:30:38.040
Every negative one years.

00:30:38.040 --> 00:30:39.400
Indeed.

00:30:39.400 --> 00:30:40.140
Nice.

00:30:40.140 --> 00:30:40.860
All right.

00:30:40.860 --> 00:30:42.700
Well, oh, fun.

00:30:42.700 --> 00:30:43.000
Cool.

00:30:43.000 --> 00:30:51.980
Blaze just mentioned, speaking of testing, BlazeTube says, fun fact, right after this session, they're meeting to go through chapter six of the pytest book.

00:30:51.980 --> 00:30:52.460
Yay.

00:30:52.460 --> 00:30:53.120
Anyway.

00:30:53.120 --> 00:30:53.740
Awesome.

00:30:53.740 --> 00:30:54.100
Cool.

00:30:54.100 --> 00:30:56.780
Well, thanks a lot for this wonderful episode, Michael.

00:30:56.780 --> 00:30:57.340
Yep.

00:30:57.340 --> 00:30:58.480
As always.

00:30:58.480 --> 00:30:59.380
Bye, Brian.

