WEBVTT

00:00:00.001 --> 00:00:04.300
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:00:04.300 --> 00:00:12.420
your earbuds. This is episode 414, recorded December 16th, 2024. I'm Michael Kennedy.

00:00:12.420 --> 00:00:13.500
And I'm Brian Okken.

00:00:13.500 --> 00:00:18.580
And this episode is brought to you by us, all of our things, books, courses, stuff like that.

00:00:18.580 --> 00:00:23.920
We have many things for you to get better at Python. Check them out, links at the top of the

00:00:23.920 --> 00:00:30.320
show. And we are now pretty active on Bluesky. Brian, thanks for dragging me over. And I want

00:00:30.320 --> 00:00:35.980
to point out that you can go to my profile and click on Starter Pack. And there's a bunch of Python

00:00:35.980 --> 00:00:40.400
people. If you click that, you follow me, you follow Brian, you follow the podcast, plus something

00:00:40.400 --> 00:00:47.060
like 60 other noteworthy Python people like Samuel Colvin and others. So that's a real quick and easy

00:00:47.060 --> 00:00:50.060
way to jump in there and kind of get going on that.

00:00:50.600 --> 00:00:51.920
Starter Packs are pretty cool.

00:00:51.920 --> 00:00:56.680
Starter Packs are a really cool growth hack for Bluesky. Yeah.

00:00:56.680 --> 00:00:57.040
Yeah.

00:00:57.040 --> 00:01:03.700
Bluesky is fun. I'm enjoying it over there. I'm wondering if the surge of momentum is starting

00:01:03.700 --> 00:01:08.300
to fade a little bit, but we'll see. I know people are excited and I think it's a great place. So

00:01:08.300 --> 00:01:14.100
I encourage people to check it out. If you would like to get every week, all the show notes and

00:01:14.100 --> 00:01:19.020
links and everything delivered to your inbox, even if you don't happen to listen that week, which I

00:01:19.020 --> 00:01:21.680
don't know why that would happen, Brian. That would be a big mistake.

00:01:21.680 --> 00:01:22.820
That'd be weird.

00:01:22.820 --> 00:01:28.320
It would be very weird. But even then, if you go to Python by set of M, click on newsletter,

00:01:28.320 --> 00:01:33.960
enter your information. Well, then Brian will send you a handcrafted, artisanal version of

00:01:33.960 --> 00:01:38.880
the show notes. So very awesome. I did say heavy, Django heavy, didn't I, Brian?

00:01:38.880 --> 00:01:39.440
Yeah.

00:01:39.440 --> 00:01:41.200
Let's start. Let's start with Django.

00:01:41.200 --> 00:01:47.540
Well, we're going to start with a small item, but I think it's going to affect me right away. So Jeff

00:01:47.540 --> 00:01:56.680
Triplett announced he's got a new project to shorten Django-admin to just Django. And what we're

00:01:56.680 --> 00:02:02.700
talking about isn't the admin section of Django. It's just the command. So the thing, like on the command

00:02:02.700 --> 00:02:08.720
line, I have it up in like a tutorial. So like, like for instance, the Django tutorial, there's,

00:02:08.720 --> 00:02:15.540
there's, there's a bunch of Django admin command line things that you have to run like start project

00:02:15.540 --> 00:02:21.880
or, and a bunch of other stuff too. So if you type Django-admin and some stuff like that,

00:02:21.880 --> 00:02:27.460
and you've ever thought, why can't I just type Django to do this? Jeff has thought that too. So that

00:02:27.460 --> 00:02:33.380
this new project just makes it so that you, you just pip install it with your stuff. And then you,

00:02:33.380 --> 00:02:39.200
you don't have to use Django admin anymore. You can just use Django for, for the command line

00:02:39.200 --> 00:02:46.240
thing. So the, and the idea, I mean, it's a, it's a great idea. And he does say in his, we've got a

00:02:46.240 --> 00:02:53.380
blog post announcing it that he would like to see this in the normal Django, but the Django-admin won't

00:02:53.380 --> 00:02:59.560
go away anytime because it's already been there for 20 years or more. So, but it'd be great if it

00:02:59.560 --> 00:03:04.460
was just like this, because why not? Yeah. That'd be amazing. I don't see why you couldn't have them

00:03:04.460 --> 00:03:09.920
both. And I think, I mean, what other commands do you type Django on the command line and do stuff for

00:03:09.920 --> 00:03:15.980
most people, right? Yeah, exactly. You just take it. Yeah. So exactly. And you can have multiple entry

00:03:15.980 --> 00:03:21.660
points in the Django package when you install it, which will give you both commands as you see fit. So

00:03:21.660 --> 00:03:28.560
yeah, let's do it. Yeah. Also I've been doing a lot of Django lately and I appreciate just,

00:03:28.560 --> 00:03:33.780
it's half the characters. If I counted them, he mentioned it's half the characters. I'm like,

00:03:33.780 --> 00:03:38.860
really? Yep. It's not just half the characters, even more significantly, it's the dash, right? Which

00:03:38.860 --> 00:03:44.400
requires like a incantation on your keyboard a little bit. Yeah. The different, yeah. It's not as fast to

00:03:44.400 --> 00:03:50.300
type. So yeah. Thanks Jeff. So I would like to ask you, Brian, having done some Django lately,

00:03:50.300 --> 00:03:57.980
have you seen any unicorns? Yeah. No. Because I have. I saw a Pegasus, but not a unicorn. Yes. The

00:03:57.980 --> 00:04:03.100
Pegasus. That is like a unicorn, but I don't believe it has a horn or as much magical powers. Okay.

00:04:03.460 --> 00:04:11.360
I'm not entirely sure of the mythology of Pegasi versus unicorns, but the magical reactive component

00:04:11.360 --> 00:04:17.100
framework for Django is the Django unicorn. This is pretty neat. I just learned about this. Let's see,

00:04:17.100 --> 00:04:24.640
is it, it's, it's not super new. I just, it's super new to me. Okay. So the idea here is that it's a

00:04:24.640 --> 00:04:32.220
little bit like a JavaScript front end framework, like react or something, but you can avoid using

00:04:32.220 --> 00:04:36.960
it, right? You can avoid writing your own JavaScript front end. Instead, you can just pip install Django

00:04:36.960 --> 00:04:42.100
unicorn, add it as an app. And then you've got to include it scripts and so on. But somewhere down

00:04:42.100 --> 00:04:49.140
here, you can use these unicorn attribute modifiers in your template, right? You can say unicorn submit.prevent

00:04:49.140 --> 00:04:55.700
add, add, and then instead tie that to, if I don't scroll too quickly, you can tie that to a model

00:04:55.700 --> 00:05:02.580
called task. And if you hit escape, what does it do? It'll change, like replace the task text with that,

00:05:02.580 --> 00:05:08.200
this thing right here, right? And you can just add a button when you click this, call the function add

00:05:08.200 --> 00:05:15.180
and so on. And then what you do is you go and you create like a form object and an item that maps to it.

00:05:15.420 --> 00:05:20.460
And then it just automatically wires together the creation of, of these, let's see, where's the

00:05:20.460 --> 00:05:25.620
example. So yeah, not enough here on the little example on the homepage for me to totally know

00:05:25.620 --> 00:05:32.540
exactly how it works. But basically when you interact with this UI element, it maps to rest functions

00:05:32.540 --> 00:05:39.020
implemented by the unicorn thing automatically, right? So you can just include some, it's a little bit

00:05:39.020 --> 00:05:44.140
like HCMX. You just include some magical text on there and it'll call back to the server. But the

00:05:44.140 --> 00:05:49.960
difference is it'll handle it on the server as well. Right. So pretty neat. Yeah. So if it says,

00:05:49.960 --> 00:05:57.920
is it magic? Sort of feels like it, it progressively enhances normal Django views with the initial render

00:05:57.920 --> 00:06:03.360
being server side rendering, which is like I said, like HTMX as well, depends how you use it, but it

00:06:03.360 --> 00:06:09.280
can be. So it's good for SEO. It just the pure HTML content is there. It's not just like angle

00:06:09.280 --> 00:06:14.300
brackets everywhere. When you view source, it binds the elements you specify automatically and makes the

00:06:14.300 --> 00:06:20.780
Ajax calls on its own when it needs it. And it comes back and it updates the DOM when the HTML changes

00:06:20.780 --> 00:06:25.700
or with the HTML changes. So yeah, just write normal Django type stuff. And it takes it, it says,

00:06:25.700 --> 00:06:31.200
it also has other features, form validation, redirections, dirty states, partial updates, polling,

00:06:31.220 --> 00:06:37.560
etc. And then down here somewhere, maybe it's in the docs. It says, here's what you might do instead.

00:06:37.560 --> 00:06:43.300
Right. You might have to use reactor. You might have to use this other thing. Unfortunately, I think

00:06:43.300 --> 00:06:48.460
that's here on this page. It says what else you might have to use. Yeah, there's better examples on

00:06:48.460 --> 00:06:56.000
their landing page. It gives you sort of a comparison to view, react, etc. What is notably lacking here is

00:06:56.000 --> 00:07:01.140
HTML, which like I said, is kind of like it. But nonetheless, if people are doing Django and they

00:07:01.140 --> 00:07:05.840
want something like viewer react, but they don't really want to do JavaScript, this could be a pretty

00:07:05.840 --> 00:07:11.260
interesting thing to check out 2400 GitHub stars, pretty decent. And this is and this is a fairly basic,

00:07:11.260 --> 00:07:18.560
like low learning curve to just try to it might be enough before you jump into something else. So

00:07:18.560 --> 00:07:24.540
Yeah, absolutely. And by the way, real time follow up on your, your item. This is what I thought when I

00:07:24.540 --> 00:07:29.780
heard about the Django admin, Pat Decker just says alias Django equals Django dash admin. And that's

00:07:29.780 --> 00:07:34.160
exactly I'm like, yep, I have so many things like that. Like that's a huge long command. That is

00:07:34.160 --> 00:07:40.620
alias to two or two letters. Okay, fine. I could do that also. But but it's nice. I mean, why why impose

00:07:40.620 --> 00:07:46.400
the longer version on everybody until they get either think about it or you know, a lot of people are new

00:07:46.400 --> 00:07:49.440
when they take these tutorials, they don't know that they can do that kind of stuff.

00:07:49.440 --> 00:07:53.980
Right. Or you might be like on Windows, and I have no idea how to alias anything on Windows.

00:07:53.980 --> 00:07:59.120
So batch files, it's all batch files. All right, over to you.

00:07:59.120 --> 00:08:06.800
Oh, what am I talking about? I wanted to talk about testing a little bit. I had fun time reading

00:08:06.800 --> 00:08:13.340
this article from Ned Batchelder called testing some tidbits. So this is sort of a fun thing. So he posted,

00:08:13.340 --> 00:08:19.120
he just posted, like, let's say you had this, you wanted to, he wanted to look at different ways to

00:08:19.120 --> 00:08:26.540
check to see if a string only had zeros or ones in it, and nothing else. And there's a lot of ways you

00:08:26.540 --> 00:08:33.280
could do this. He presented, let's see, one, two, three, four, five, six different ways in a post on

00:08:33.280 --> 00:08:40.540
both Mastodon and Bluesky. And then he got a whole bunch of replies saying, like other ways to do it.

00:08:41.580 --> 00:08:47.740
And, and one, it's kind of a fun, just like, like, how would I do this sort of thing? And there's a lot

00:08:47.740 --> 00:08:53.300
of ways to handle it, which is fun. Anyway, so he, he also wanted to test how to do it. And since

00:08:53.300 --> 00:09:00.580
there's testing in the title, I thought maybe he'd use my test or something. But yeah, no, he's got

00:09:00.580 --> 00:09:06.820
like a set of good input that should be just all zeros and ones. And then a set of bad input that has,

00:09:06.820 --> 00:09:12.240
you know, it's not all, and some of it's like a whole bunch of zeros and just one non zero. The

00:09:12.240 --> 00:09:17.620
empty string is used. That would be considered good. And then I, even a thousand character,

00:09:17.620 --> 00:09:25.220
a rain, a string with a thousand characters in it or 10,000, it's 10,000. Wow. So big, long string.

00:09:25.220 --> 00:09:30.780
So, and then a whole bunch of different ways that he had, he has original checks, but plus a whole

00:09:30.780 --> 00:09:36.620
bunch of others that other people used. And then his, he just runs through them. But that one of the

00:09:36.620 --> 00:09:41.780
things I really loved about this is I learned some stuff about pytest or Python. I learned about

00:09:41.780 --> 00:09:50.780
clean doc from inspect.clean doc. It's a way to strip out a white space that I usually use. What did I use?

00:09:50.780 --> 00:09:58.220
I use, usually used a like text rapid D dent for something like this, but so I'm going to have to

00:09:58.220 --> 00:10:04.060
run some testing to find out which one deals with stuff better clean doc. That might be better. Yeah,

00:10:04.060 --> 00:10:09.340
that's cool. And then there's a partitioning. I don't use partition much, so I couldn't, I didn't

00:10:09.340 --> 00:10:14.540
remember what that does. So partition, he was using partition to strip out comments. And what it does is

00:10:14.540 --> 00:10:21.180
split a string on, on whatever you pass it in, in this case, the pound sign or, or hash or whatever

00:10:21.180 --> 00:10:28.860
you want to call it. And then he used a, and then it splits that into three strings before the, before

00:10:28.860 --> 00:10:34.300
the delimiter, what the delimiter was and after. And so this is, this is a way to just grab everything

00:10:34.300 --> 00:10:40.220
before the comment, which is cool. And then he used, what else did I learn? Oh, I didn't understand what

00:10:40.220 --> 00:10:46.300
this if not test is in here for first, but this was checking for blank lines, which makes sense or

00:10:46.300 --> 00:10:54.300
stuff with just a comment. But then there's this eval, which I am so afraid of evals, but in this case,

00:10:54.300 --> 00:11:01.180
you're writing the stuff it's from right here. So it's pretty safe, but eval the code and then passing

00:11:01.180 --> 00:11:08.060
in a variable like the S variable into the code. So everywhere in this code, you're the S means the

00:11:08.060 --> 00:11:14.620
string you're passing in, but this or G, what does or G do? And what he's doing is it's, it's a way

00:11:14.620 --> 00:11:21.340
with eval to pass in imported stuff. So it imports, it'll import the regular expression and the counter

00:11:21.340 --> 00:11:28.220
modules into the eval statement. So I didn't know you could do that. So I was thinking bitwise or

00:11:28.220 --> 00:11:34.300
yeah. No, it's a way to get these imports in there, which is pretty cool. Anyway, that's fun.

00:11:34.300 --> 00:11:39.740
And then he lists some other ways, but I was still frustrated that there's no pytest in here.

00:11:39.740 --> 00:11:46.860
So I thought, how would I do this with pytest? So I just wrote up a quick blog post, actually just

00:11:46.860 --> 00:11:53.020
praising Ned as well, because I learned some stuff and I like learning new things. But then what did I

00:11:53.020 --> 00:12:00.540
do? I imported pytest, the same imports that he used, and then the same good and bad and tests.

00:12:00.540 --> 00:12:06.780
But then I just split it up a bit different and used parameterization to write the test code. So

00:12:06.780 --> 00:12:13.820
if anybody wants to use pytest instead, here we go. The excellent, the one fun thing that I had was this

00:12:13.820 --> 00:12:21.340
10,000 character I'm using with parameterization. I was able to take the input as part of when you,

00:12:21.340 --> 00:12:28.380
you do pytest dash fee, it prints out all this. It's the parameterization prints out, which is nice. But I

00:12:28.380 --> 00:12:34.540
I didn't want 10,000 characters printed out. So I also got to use the ID function to shorten that up a

00:12:34.540 --> 00:12:38.380
bit, shorted it to 20 characters. But anyway, testing.

00:12:38.380 --> 00:12:41.500
Very nice. Yeah. I love the compare and contrast as well.

00:12:41.500 --> 00:12:44.860
Yeah. Yeah. Awesome. Let's talk some trends, huh?

00:12:44.860 --> 00:12:45.420
Okay.

00:12:45.420 --> 00:12:49.740
So this was originally just going to be an extra. The more I looked at them, like this actually could be a fun

00:12:49.740 --> 00:12:56.860
conversation for you and me to have. So I wrote a article for the JetBrains blog called "The State

00:12:56.860 --> 00:12:59.740
of Python in 2024." Okay.

00:12:59.740 --> 00:13:03.980
I thought that'd be pretty fun. And there's eight key trends or whatever I pulled out. So I thought,

00:13:03.980 --> 00:13:08.620
hey, you know, maybe, maybe that'd be fun to talk about the eight trends and get your thoughts on it.

00:13:08.620 --> 00:13:15.020
All right. So let's do it real quick. So first of all, Python keeps growing. But it's interesting

00:13:15.020 --> 00:13:22.940
that actually, if you look at the amount of other languages used along with Python, they're decreasing.

00:13:22.940 --> 00:13:28.780
Right? So for example, in 2021, 40% of Python people did JavaScript plus Python. Now it's only 35.

00:13:28.780 --> 00:13:35.420
If you look at Bash, 33% of people did. Now 29 do. And a lot of languages are going down like that,

00:13:35.420 --> 00:13:42.460
except for Rust. So that's pretty interesting. And that's because so many people are coming into Python

00:13:42.460 --> 00:13:48.700
from non-traditional programming languages like data science and other scientists and so on. You know,

00:13:48.700 --> 00:13:54.700
GitHub just announced that, I think we covered this, that GitHub said that Python is the most popular

00:13:54.700 --> 00:14:00.620
language on GitHub now. It's pretty awesome. But most of those people are coming from non-traditional

00:14:00.620 --> 00:14:05.020
backgrounds, meaning they're just going into like Jupyter Notebooks or something like that, right?

00:14:05.020 --> 00:14:07.500
Like this is their only Py programming language is Python.

00:14:07.500 --> 00:14:12.700
Yes, exactly. Exactly. They're like, they just became programmers. So they're not doing the other

00:14:12.700 --> 00:14:17.420
stuff. So it's interesting to see these like, hey, you're doing less JavaScript as a community,

00:14:17.420 --> 00:14:21.260
which is kind of the opposite of what I would imagine. And very, very closely to what you said,

00:14:21.260 --> 00:14:27.660
41% of Python developers have been working professionally in any language for less than two years.

00:14:27.660 --> 00:14:29.180
Like almost everyone is new here.

00:14:29.180 --> 00:14:35.340
Yeah. And actually, I remember somebody talking about this, this, this question,

00:14:35.340 --> 00:14:40.140
like maybe it was a different question, but like how long have you been a professional Python developer?

00:14:40.140 --> 00:14:50.140
And a lot of people taking this survey don't think of themselves as developers. They think of themselves as just some other job. They happen to use programming also.

00:14:50.140 --> 00:14:54.460
Yeah, exactly. So yeah. And then if you throw in three to five years at like, that's pretty much it.

00:14:54.460 --> 00:14:55.820
Yeah. Trend three.

00:14:55.820 --> 00:14:58.540
Oh, let's go up to the years again. Where are we at?

00:14:58.540 --> 00:15:03.180
Oh, just 11 plus. So we're just in one bucket of 13% of the people.

00:15:03.180 --> 00:15:09.260
And even so that's only like over 10 years is basically only 13%, which is wild.

00:15:09.260 --> 00:15:14.140
Yeah, that's really wild. Yeah, yeah, yeah. Where do people learn Python? They learn it on YouTube,

00:15:14.140 --> 00:15:21.740
on our John codes, and coding. And if they listen to podcasts, talk Python to me, who's the number one out there.

00:15:21.740 --> 00:15:29.180
Nice. But I'm sure Python buys us just under, just under. Trend four, Python two versus three,

00:15:29.180 --> 00:15:37.500
that's over. We've raged on about the legacy Python long enough. There will be no 2.8 says Guido all

00:15:37.500 --> 00:15:43.580
the way back in 2014. Right. But if you look at it, it's like asymptotically, like whoever's still

00:15:43.580 --> 00:15:45.900
on Python two, they just, those people aren't leaving.

00:15:45.900 --> 00:15:52.060
Yeah. It's what's surprising to me is the people that are still on that and are participating in

00:15:52.060 --> 00:15:59.900
surveys. I think they just fully have checked out. I imagine a lot of those people, which is 6%

00:15:59.900 --> 00:16:05.180
for this year that are still on Python two, that they're on some huge project. I know there's some,

00:16:05.180 --> 00:16:09.740
they're not going to migrate the project. The project will not migrate, but those people would

00:16:09.740 --> 00:16:16.380
very much like to, and they probably in their spare time work with him FastAPI and other modern things.

00:16:16.380 --> 00:16:18.860
But when they go back to work, they're here. You know what I mean?

00:16:18.860 --> 00:16:21.900
Yeah. Or at least some of their project is using that. Yeah.

00:16:21.900 --> 00:16:29.420
Yeah, exactly. But still, let's keep going. All right. Flask, Django and FastAPI are all the top

00:16:29.420 --> 00:16:34.780
three frameworks, which is nearly a dead heat, which is pretty interesting. We just talked a lot about

00:16:34.780 --> 00:16:39.660
Django. But what's interesting is if you ask web developers who are Python people,

00:16:39.660 --> 00:16:43.500
not just Python people, but we talked about there's a lot of people who don't consider themselves

00:16:43.500 --> 00:16:47.820
like developers or whatever. But if you say, hey, web developers who are also Python people,

00:16:47.820 --> 00:16:54.060
Django is used one and a half times as much as Flask or FastAPI.

00:16:54.060 --> 00:16:54.620
Oh, yeah.

00:16:54.620 --> 00:17:00.700
So amongst the web developers, Django is clearly leading the pack. But amongst data scientists,

00:17:00.700 --> 00:17:05.580
Flask and FastAPI are ahead because they're more about building APIs and getting their models online

00:17:05.580 --> 00:17:08.000
and so on. So that's a pretty interesting difference, right?

00:17:08.660 --> 00:17:13.220
Yeah. And I'm thinking there's a lot of data or data science stuff that doesn't have a back

00:17:13.220 --> 00:17:16.420
database or anything or some huge thing. Yeah.

00:17:16.420 --> 00:17:21.300
Yeah. Where do you host your stuff? It's all about the hyperscale clouds, apparently, which is

00:17:21.300 --> 00:17:28.420
blowing my mind, actually. AWS, Google Cloud and Azure represent, gosh, how much did it say?

00:17:28.420 --> 00:17:34.020
I wrote it out maybe at the top. Represent something like 78% of where people host their code. Yeah,

00:17:34.020 --> 00:17:37.460
78% are on one of the three massive clouds. Wow.

00:17:37.460 --> 00:17:38.580
Hetzner is showing up.

00:17:38.580 --> 00:17:41.780
Hetzner is there. Yeah. I mean, we put a dent in Hetzner.

00:17:41.780 --> 00:17:48.340
We definitely did. We got one server there. Yeah. And also Heroku interestingly went down,

00:17:48.340 --> 00:17:52.260
but I think that's because when they canceled their free tier, a lot of people stopped. They

00:17:52.260 --> 00:17:57.060
decided to turn off their for move elsewhere. But Python Anywhere is going strong, actually,

00:17:57.060 --> 00:18:01.220
above all the other small providers, right? DigitalOcean, Hetzner, Linode, and so on.

00:18:01.220 --> 00:18:02.500
Python Anywhere. Interesting.

00:18:02.500 --> 00:18:06.900
Yeah. Yeah. That's pretty wild, right? All right. Two more. People prefer containers over VMs and

00:18:06.900 --> 00:18:11.460
they prefer VMs over bare hardware. That shouldn't be a surprise, should it? I mean,

00:18:11.460 --> 00:18:16.420
maybe the containers versus VMs, but certainly not just straight hardware. Straight hardware is not

00:18:16.420 --> 00:18:22.900
even on the picture, by the way. It's like lower. And last trend of 2024 is uv takes the Python

00:18:22.900 --> 00:18:25.620
packaging, takes Python packaging by store. Yes.

00:18:25.620 --> 00:18:30.260
I think that's obviously it's, we've covered it a bunch of times. It's not just that it's fast.

00:18:30.260 --> 00:18:35.300
It's that it combines a bunch of functionality from different tools into different places. Yeah.

00:18:35.300 --> 00:18:42.020
It's super neat. It installs Python. It installs, it creates virtual environments. It manages projects,

00:18:42.020 --> 00:18:45.940
if you wish. It updates. There's a lot of, a lot of good stuff there.

00:18:45.940 --> 00:18:52.260
And anyway, I think a big part of the uv uptick is the uv team tried to make it so that you could use

00:18:52.260 --> 00:18:55.620
it with your current workflow. You didn't really have to change your workflow.

00:18:55.620 --> 00:18:59.620
Yeah. I think that is very much an important part of it. That's why I adopted it for sure.

00:18:59.620 --> 00:19:04.660
So, yeah. So anyway, these are, these are my trends. Hopefully people find those interesting.

00:19:04.660 --> 00:19:07.460
There's a lot of like writing and data to back that up in the link.

00:19:07.460 --> 00:19:09.220
Right. Yeah. All right. Yeah.

00:19:09.220 --> 00:19:10.820
Yeah. Extra.

00:19:10.820 --> 00:19:12.180
I've just got.

00:19:12.180 --> 00:19:12.980
We've come to extras.

00:19:12.980 --> 00:19:21.940
I just got one extra toggling back to Django just for a moment is I noticed that Django admin has a

00:19:21.940 --> 00:19:29.060
Dracula theme now under the Dracula theme.com. And I can't, I can't remember where I learned it from.

00:19:29.060 --> 00:19:35.780
One of the maintainers posted this on, on, on blue sky, I think. But anyway, it looks great.

00:19:35.780 --> 00:19:43.380
Great colors. And I also, because of this learned that there is a thing called Dracula theme.com that

00:19:43.380 --> 00:19:48.420
contains like a whole bunch of different projects that all have Dracula theme. So.

00:19:48.420 --> 00:19:56.500
Oh, nice. So let's see what I love it. Yeah. And it has cool bats. Oh no. No pad plus. That's funny.

00:19:56.500 --> 00:20:07.140
Nice. VS Code. Cool. Yeah. Yeah. Obviously. Obviously. no visual studio. Oh, oh yeah. I guess people use visual studio still.

00:20:07.140 --> 00:20:09.860
anyway. Yeah. viewer on windows. Yeah.

00:20:09.860 --> 00:20:14.980
Yeah. Jet brains. Of course. Nice. Cool. So yeah, I had no idea about this site. That's super cool.

00:20:14.980 --> 00:20:16.580
That's fun.

00:20:16.580 --> 00:20:24.580
How about extras for you? I have a couple. Let's see here. First of all, my Zen browser experiment is

00:20:24.580 --> 00:20:29.460
still going strong. I'm absolutely loving the Zen browser. It's based on Firefox, which I really like.

00:20:29.460 --> 00:20:35.620
Okay. But that also means that you're limited to the Firefox limitations. Like I can't use it for our

00:20:35.620 --> 00:20:41.380
live stream because our live stream only supports Chrome, which really means Chromium based browsers.

00:20:41.380 --> 00:20:46.980
Right? So I, there's certain times that I'm not using it, but yeah, I'm enjoying people can check that out.

00:20:46.980 --> 00:20:51.700
I feel, I talked to somebody and they're like, this is what Firefox should have built. This is like fire.

00:20:51.700 --> 00:20:58.260
Why is Firefox not doing this? Yeah. You know, it's, it's a good question. I do think I honestly,

00:20:58.260 --> 00:21:02.260
you know, as sort of a sidebar, I'm, I'm a little worried what's going to happen to Mozilla and

00:21:02.260 --> 00:21:09.700
Firefox if the antitrust thing against Google goes through, right? Because if that goes through 90% of

00:21:09.700 --> 00:21:15.460
Mozilla's revenue instantly gets declared illegal and cut off, not illegal for Firefox and Mozilla,

00:21:15.460 --> 00:21:20.500
but illegal for Google. So they would have to stop. Right? Yeah. Maybe I'm not following that. So,

00:21:20.500 --> 00:21:27.700
well, one of the big problems is Google has used their monopoly and their money and all that to buy

00:21:27.700 --> 00:21:33.700
off locations to basically pay to either be the default or to prevent competition in different

00:21:33.700 --> 00:21:39.060
ways. For example, they're paying something like $23 billion to Apple to be the default search engine,

00:21:39.060 --> 00:21:45.300
not just in Safari on iOS, but in, if you go to Siri and you ask it a question, right? Like where does it,

00:21:45.300 --> 00:21:48.260
it says, Oh, here, I'm going to search the web for you. Like, how do you think it's going to search

00:21:48.260 --> 00:21:54.340
the web? Yeah, that's paid. That's okay. Right. But they're also paying, I don't remember the number,

00:21:54.340 --> 00:21:59.940
but it's 90% of the revenue of Mozilla to support Mozilla. But I, you know, there's a lot of

00:21:59.940 --> 00:22:05.460
thinking that that is to, to be the default search engine on Firefox. Right. But so that would make

00:22:05.460 --> 00:22:10.580
it illegal for them to do that. Okay. It's the double whammy of like, they're kind of paying Mozilla to

00:22:10.580 --> 00:22:15.060
keep Firefox around so they can say that there's competition. Yeah. Right. But if they can no longer

00:22:15.060 --> 00:22:22.820
pay Mozilla to be the default search engine. Hmm. It's fishy though. If is there really competition

00:22:22.820 --> 00:22:29.380
when you're only competitors paying you to be there? I know it's well, I mean, why is there a lawsuit?

00:22:29.380 --> 00:22:35.380
Right? Yeah. So we'll, we'll see. Anyway. I think it's really cool. I'm enjoying it. Still a big fan of

00:22:35.380 --> 00:22:39.300
Vivaldi as well, which is what I'm talking to you around on right now. Yeah. But also, did you know that

00:22:39.300 --> 00:22:43.860
Microsoft has a browser? I heard of that. Oh, you know what? It's actually just based on Chrome.

00:22:43.860 --> 00:22:48.420
Although Google doesn't pay for that one. I don't believe. Okay. I bet you get Bing as your default

00:22:48.420 --> 00:22:54.180
search engine there. All right. refresh my desk setup. I just, I really, I'm enjoying this way more.

00:22:54.180 --> 00:22:58.980
I set up a little separate table and a little separate computer. So I have a nice view. So I'm not

00:22:58.980 --> 00:23:03.940
looking at like cameras and lights and junk all day. Oh, wow. Even if they're turned off,

00:23:03.940 --> 00:23:09.060
I'm still just staring at a wall with like sound padding and stuff. And I enjoy it way more than

00:23:09.060 --> 00:23:12.180
I realized. And I just want to encourage people. Like you're kind of frustrated with where you're

00:23:12.180 --> 00:23:16.180
sitting, where you're looking while you're at work. Like maybe it's not that much work. It took a couple

00:23:16.180 --> 00:23:21.700
hours. So I can look at trees instead of recording foam, which I encourage. All right. And while I was

00:23:21.700 --> 00:23:28.340
sitting at this fun new desk, Brian, I added a really cool feature to our RSS feed. When I realized that,

00:23:28.340 --> 00:23:36.500
there's an updated spec to RSS, which allows you to specify transcripts in subtitle format. So VTT,

00:23:36.500 --> 00:23:39.620
web VTT or SRT files. Right. Okay.

00:23:39.620 --> 00:23:45.940
So I added those to our set of transcripts to the website supplies to RSS feed. And now you get real

00:23:45.940 --> 00:23:50.580
time follow along as you and I speak transcripts. Oh, wow.

00:23:50.580 --> 00:23:54.820
And that cool. So you can just say, show the transcripts. And it's kind of like a Spotify or

00:23:54.820 --> 00:23:59.700
YouTube music. It's just like follows along as we speak in the real transcripts. And I think you can

00:23:59.700 --> 00:24:04.180
even search them. Although that's probably a per player type of thing. So this doesn't work in

00:24:04.180 --> 00:24:11.700
overcast sadly, but it does work as far as I can tell in Apple podcasts and pocket casts. So at least

00:24:11.700 --> 00:24:15.620
in those two, if you see a little transcript thing and you click it, that means it's going to follow

00:24:15.620 --> 00:24:19.780
along in real time with our conversation. I wanted to have the little bouncy ball, like,

00:24:19.780 --> 00:24:22.500
like, you know, the singalong movies when we're kids.

00:24:22.500 --> 00:24:27.300
Boop, boop, boop, boop. Yeah, exactly. And, it works really good on an iPad. Like you can have

00:24:27.300 --> 00:24:31.300
the, the view of the control and the art and everything. And then next to it, it has.

00:24:31.300 --> 00:24:36.820
Oh, nice. Yeah. Yeah. But it's still also works on the phone. All right. that's it for my extras.

00:24:36.820 --> 00:24:42.420
All right. Oh, I just wanted to add, it took five days to generate those transcripts with the computer

00:24:42.420 --> 00:24:50.500
running 24 hours a day. So I regenerated these cause only, only maybe a third of our episodes had

00:24:50.500 --> 00:24:55.540
VTT format. They had a different format. Just, it's like a pure text type thing that our website

00:24:55.540 --> 00:25:01.460
understands and people can read. But VTT is more of us. It's like not JSON, but imagine like,

00:25:01.460 --> 00:25:06.500
here's your JSON transcript to read, right? It would feel a little bit like that. Yeah. So I've always

00:25:06.500 --> 00:25:12.020
thought of VTT is like some extra setting that is completely useless because I'd never use it. So,

00:25:12.020 --> 00:25:16.900
um, so I'm glad that you are. You could use SRT. Those are the two that are supported here. Those are

00:25:16.900 --> 00:25:22.900
like the two well-known subtitle formats or whatever. But yeah, I fired up. I have my old M1 Mac mini

00:25:22.900 --> 00:25:27.620
laying around and I'm like, I'm just going to go over there and have it generate these for Python

00:25:27.620 --> 00:25:34.820
bytes and talk Python five days later. It was done. And then I have a whole bunch of Python software

00:25:34.820 --> 00:25:41.700
that goes through and like correct stuff. Like Ruff formatter is like R O U G H. I'm like,

00:25:41.700 --> 00:25:48.100
no, not really. That's not what we meant to say. And it'll sometimes get your, you'll be Brian Aiken.

00:25:48.100 --> 00:25:52.100
I'm like, Nope, we're going to fix that. And so on. Sometimes I'm Brian Aiken.

00:25:52.100 --> 00:25:52.820
I don't know.

00:25:52.820 --> 00:25:55.700
Oh, we're good. Oh, I'm Aiken.

00:25:55.700 --> 00:26:00.980
Yeah. So there's a lot of work that went in to make this happen. So hopefully people enjoy it. And

00:26:00.980 --> 00:26:07.780
yeah, cool. Thanks for it. And I appreciate you keeping improving the back, the back end of Python

00:26:07.780 --> 00:26:12.900
bytes. So yeah, you're welcome. No problem. Okay. You know what? If you were,

00:26:13.380 --> 00:26:17.700
if you were working on software, you taught, you started this show off with testing, right?

00:26:17.700 --> 00:26:23.780
Yeah. Well, if, if no, you start off with the jingle, but we did talk a lot about testing.

00:26:23.780 --> 00:26:29.380
Second item. Anyway, if you were doing testing and you wanted to make sure your tests pass,

00:26:29.380 --> 00:26:33.620
you have many options, Brian, you could not run the test, but if the tests are going to run and say

00:26:33.620 --> 00:26:38.980
continuous integration, whoa, boy, you better make those tests pass or continuous integration is going to

00:26:38.980 --> 00:26:48.500
fail. So Martin Bettman shared this joke with us on blue sky said, how about Volkswagen? You know,

00:26:48.500 --> 00:26:55.300
they kind of gotten a little bit of trouble for writing their car software to say, yes, these diesels,

00:26:55.300 --> 00:27:00.820
they're so clean. You should absolutely get clean diesel, not dirty diesel, get a Volkswagen. What

00:27:00.820 --> 00:27:06.500
that really meant was while it's under test, it's going to change how it behaves to have a better

00:27:06.500 --> 00:27:12.420
emissions test than not. Right? So this is riffing on that and says, Volkswagen, this is a thing you

00:27:12.420 --> 00:27:17.620
can install into your apps is it detects when your tests are being run in a CI server and make sure they

00:27:17.620 --> 00:27:23.540
pass. Okay, I got to check this out. That's hilarious. Yeah, it says why? Well, if you want your software

00:27:23.540 --> 00:27:31.060
to be adopted by Americans, because that's where VW got caught for their cheating, test scores from the CI

00:27:31.060 --> 00:27:37.620
server are very important. Volkswagen uses a defeat device to detect when it's being tested in CI server

00:27:37.620 --> 00:27:43.380
will automatically reduce the errors to an acceptable level for the test to pass. This allows you to spend

00:27:43.380 --> 00:27:48.580
less time worrying about testing and more time enjoying the good life as a trust, trustful software

00:27:48.580 --> 00:27:57.620
developer. They even have a badge like a read me for your GitHub read me. Yeah, with a build passing with

00:27:57.620 --> 00:28:04.180
a little Volkswagen symbol. That's great. Works for Travis CI, Circle CI, Jenkins, Hudson's Bamboo, Team

00:28:04.180 --> 00:28:14.260
City, TFS, Visual Studio Online CI, GitLab, etc., etc., etc. And it defeats assert, tap, tape, and shy.

00:28:14.260 --> 00:28:21.540
And any actual, any test actually that is set to exit code or throw an error. That's funny.

00:28:21.540 --> 00:28:24.100
That's bad, right? I gotta check out and see all the ways they're doing it. Yeah.

00:28:24.100 --> 00:28:29.540
I know. I was wondering like, how does this actually work? People don't really do this. It's a joke.

00:28:30.740 --> 00:28:38.660
Well, so I've actually had cases where, especially during development, where I didn't want the CI to

00:28:38.660 --> 00:28:44.100
jump out at the end of the test, even if there's failures. So there is a pytest feature where you

00:28:44.100 --> 00:28:50.020
can change the exit code. It's a pytest custom exit code internal plugin or something.

00:28:50.020 --> 00:28:53.060
pytest dash always exit zero?

00:28:53.060 --> 00:28:59.780
Pretty much, yeah. To override the exit code so that you can debug the rest of the tool chain

00:29:00.580 --> 00:29:02.660
or get data on something. But yeah.

00:29:02.660 --> 00:29:05.220
That's the only time I've done that. But that's funny.

00:29:05.220 --> 00:29:11.220
It's a little, the image or the logo of it or whatever is like a little Volkswagen bug from

00:29:11.220 --> 00:29:15.300
the 70s that transforms into a transformer robot. I'm using.

00:29:15.300 --> 00:29:15.620
Nice.

00:29:15.620 --> 00:29:20.100
There's 13 contributors to this. There's 15 releases. What is this?

00:29:20.100 --> 00:29:23.300
How many stars?

00:29:23.300 --> 00:29:25.140
Okay, okay. Let's find out.

00:29:25.140 --> 00:29:27.060
Oh, 15,000 stars.

00:29:27.060 --> 00:29:30.980
People are using this thing. Oh my goodness.

00:29:30.980 --> 00:29:34.420
Or just amused by it. It's been nine years old or something.

00:29:34.420 --> 00:29:38.340
Yeah, it has been around for a while, but I ran across this and thought it's pretty funny.

00:29:38.340 --> 00:29:40.020
So this is good. Yeah.

00:29:40.020 --> 00:29:44.260
Yeah. All right. Well, as always, thanks for being here. Thanks everyone for listening.

00:29:44.260 --> 00:29:44.600
Thank you.

00:29:44.600 --> 00:29:45.000
Bye.

