Transcript #414: Because we are not monsters
Return to episode page view on github00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to
00:04 your earbuds. This is episode 414, recorded December 16th, 2024. I'm Michael Kennedy.
00:12 And I'm Brian Okken.
00:13 And this episode is brought to you by us, all of our things, books, courses, stuff like that.
00:18 We have many things for you to get better at Python. Check them out, links at the top of the
00:23 show. And we are now pretty active on Blue Sky. Brian, thanks for dragging me over. And I want
00:30 to point out that you can go to my profile and click on Starter Pack. And there's a bunch of Python
00:35 people. If you click that, you follow me, you follow Brian, you follow the podcast, plus something
00:40 like 60 other noteworthy Python people like Samuel Colvin and others. So that's a real quick and easy
00:47 way to jump in there and kind of get going on that.
00:50 Starter Packs are pretty cool.
00:51 Starter Packs are a really cool growth hack for Blue Sky. Yeah.
00:56 Yeah.
00:57 Blue Sky is fun. I'm enjoying it over there. I'm wondering if the surge of momentum is starting
01:03 to fade a little bit, but we'll see. I know people are excited and I think it's a great place. So
01:08 I encourage people to check it out. If you would like to get every week, all the show notes and
01:14 links and everything delivered to your inbox, even if you don't happen to listen that week, which I
01:19 don't know why that would happen, Brian. That would be a big mistake.
01:21 That'd be weird.
01:22 It would be very weird. But even then, if you go to Python by set of M, click on newsletter,
01:28 enter your information. Well, then Brian will send you a handcrafted, artisanal version of
01:33 the show notes. So very awesome. I did say heavy, Django heavy, didn't I, Brian?
01:38 Yeah.
01:39 Let's start. Let's start with Django.
01:41 Well, we're going to start with a small item, but I think it's going to affect me right away. So Jeff
01:47 Triplett announced he's got a new project to shorten Django-admin to just Django. And what we're
01:56 talking about isn't the admin section of Django. It's just the command. So the thing, like on the command
02:02 line, I have it up in like a tutorial. So like, like for instance, the Django tutorial, there's,
02:08 there's, there's a bunch of Django admin command line things that you have to run like start project
02:15 or, and a bunch of other stuff too. So if you type Django-admin and some stuff like that,
02:21 and you've ever thought, why can't I just type Django to do this? Jeff has thought that too. So that
02:27 this new project just makes it so that you, you just pip install it with your stuff. And then you,
02:33 you don't have to use Django admin anymore. You can just use Django for, for the, the command line
02:39 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
02:46 blog post announcing it that he would like to see this in the normal Django, but the Django-admin won't
02:53 go away anytime because it's already been there for 20 years or more. So, but it'd be great if it
02:59 was just like this, because why not? Yeah. That'd be amazing. I don't see why you couldn't have them
03:04 both. And I think, I mean, what other commands do you type Django on the command line and do stuff for
03:09 most people, right? Yeah, exactly. You just take it. Yeah. So exactly. And you can have multiple entry
03:15 points in the Django package when you install it, which will give you both commands as you see fit. So
03:21 yeah, let's do it. Yeah. Also I've been doing a lot of Django lately and I appreciate just,
03:28 it's half the characters. If I counted them, he mentioned it's half the characters. I'm like,
03:33 really? Yep. It's not just half the characters, even more significantly, it's the dash, right? Which
03:38 requires like a incantation on your keyboard a little bit. Yeah. The different, yeah. It's not as fast to
03:44 type. So yeah. Thanks Jeff. So I would like to ask you, Brian, having done some Django lately,
03:50 have you seen any unicorns? Yeah. No. Because I have. I saw a Pegasus, but not a unicorn. Yes. The
03:57 Pegasus. That is like a unicorn, but I don't believe it has a horn or as much magical powers. Okay.
04:03 I'm not entirely sure of the mythology of Pegasi versus unicorns, but the magical reactive component
04:11 framework for Django is the Django unicorn. This is pretty neat. I just learned about this. Let's see,
04:17 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
04:24 little bit like a JavaScript front end framework, like react or something, but you can avoid using
04:32 it, right? You can avoid writing your own JavaScript front end. Instead, you can just pip install Django
04:36 unicorn, add it as an app. And then you've got to include it scripts and so on. But somewhere down
04:42 here, you can use these unicorn attribute modifiers in your template, right? You can say unicorn submit.prevent
04:49 add, add, and then instead tie that to, if I don't scroll too quickly, you can tie that to a model
04:55 called task. And if you hit escape, what does it do? It'll change, like replace the task text with that,
05:02 this thing right here, right? And you can just add a button when you click this, call the function add
05:08 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.
05:15 And then it just automatically wires together the creation of, of these, let's see, where's the
05:20 example. So yeah, not enough here on the little example on the homepage for me to totally know
05:25 exactly how it works. But basically when you interact with this UI element, it maps to rest functions
05:32 implemented by the unicorn thing automatically, right? So you can just include some, it's a little bit
05:39 like HCMX. You just include some magical text on there and it'll call back to the server. But the
05:44 difference is it'll handle it on the server as well. Right. So pretty neat. Yeah. So if it says,
05:49 is it magic? Sort of feels like it, it progressively enhances normal Django views with the initial render
05:57 being server side rendering, which is like I said, like HTMX as well, depends how you use it, but it
06:03 can be. So it's good for SEO. It just the pure HTML content is there. It's not just like angle
06:09 brackets everywhere. When you view source, it binds the elements you specify automatically and makes the
06:14 Ajax calls on its own when it needs it. And it comes back and it updates the DOM when the HTML changes
06:20 or with the HTML changes. So yeah, just write normal Django type stuff. And it takes it, it says,
06:25 it also has other features, form validation, redirections, dirty states, partial updates, polling,
06:31 etc. And then down here somewhere, maybe it's in the docs. It says, here's what you might do instead.
06:37 Right. You might have to use reactor. You might have to use this other thing. Unfortunately, I think
06:43 that's here on this page. It says what else you might have to use. Yeah, there's better examples on
06:48 their landing page. It gives you sort of a comparison to view, react, etc. What is notably lacking here is
06:56 HTML, which like I said, is kind of like it. But nonetheless, if people are doing Django and they
07:01 want something like viewer react, but they don't really want to do JavaScript, this could be a pretty
07:05 interesting thing to check out 2400 GitHub stars, pretty decent. And this is and this is a fairly basic,
07:11 like low learning curve to just try to it might be enough before you jump into something else. So
07:18 Yeah, absolutely. And by the way, real time follow up on your, your item. This is what I thought when I
07:24 heard about the Django admin, Pat Decker just says alias Django equals Django dash admin. And that's
07:29 exactly I'm like, yep, I have so many things like that. Like that's a huge long command. That is
07:34 alias to two or two letters. Okay, fine. I could do that also. But but it's nice. I mean, why why impose
07:40 the longer version on everybody until they get either think about it or you know, a lot of people are new
07:46 when they take these tutorials, they don't know that they can do that kind of stuff.
07:49 Right. Or you might be like on Windows, and I have no idea how to alias anything on Windows.
07:53 So batch files, it's all batch files. All right, over to you.
07:59 Oh, what am I talking about? I wanted to talk about testing a little bit. I had fun time reading
08:06 this article from Ned Batchelder called testing some tidbits. So this is sort of a fun thing. So he posted,
08:13 he just posted, like, let's say you had this, you wanted to, he wanted to look at different ways to
08:19 check to see if a string only had zeros or ones in it, and nothing else. And there's a lot of ways you
08:26 could do this. He presented, let's see, one, two, three, four, five, six different ways in a post on
08:33 both Mastodon and Blue Sky. And then he got a whole bunch of replies saying, like other ways to do it.
08:41 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
08:47 of ways to handle it, which is fun. Anyway, so he, he also wanted to test how to do it. And since
08:53 there's testing in the title, I thought maybe he'd use my test or something. But yeah, no, he's got
09:00 like a set of good input that should be just all zeros and ones. And then a set of bad input that has,
09:06 you know, it's not all, and some of it's like a whole bunch of zeros and just one non zero. The
09:12 empty string is used. That would be considered good. And then I, even a thousand character,
09:17 a rain, a string with a thousand characters in it or 10,000, it's 10,000. Wow. So big, long string.
09:25 So, and then a whole bunch of different ways that he had, he has original checks, but plus a whole
09:30 bunch of others that other people used. And then his, he just runs through them. But that one of the
09:36 things I really loved about this is I learned some stuff about pytest or Python. I learned about
09:41 clean doc from inspect.clean doc. It's a way to strip out a white space that I usually use. What did I use?
09:50 I use, usually used a like text rapid D dent for something like this, but so I'm going to have to
09:58 run some testing to find out which one deals with stuff better clean doc. That might be better. Yeah,
10:04 that's cool. And then there's a partitioning. I don't use partition much, so I couldn't, I didn't
10:09 remember what that does. So partition, he was using partition to strip out comments. And what it does is
10:14 split a string on, on whatever you pass it in, in this case, the pound sign or, or hash or whatever
10:21 you want to call it. And then he used a, and then it splits that into three strings before the, before
10:28 the delimiter, what the delimiter was and after. And so this is, this is a way to just grab everything
10:34 before the comment, which is cool. And then he used, what else did I learn? Oh, I didn't understand what
10:40 this if not test is in here for first, but this was checking for blank lines, which makes sense or
10:46 stuff with just a comment. But then there's this eval, which I am so afraid of evals, but in this case,
10:54 you're writing the stuff it's from right here. So it's pretty safe, but eval the code and then passing
11:01 in a variable like the S variable into the code. So everywhere in this code, you're the S means the
11:08 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
11:14 with eval to pass in imported stuff. So it imports, it'll import the regular expression and the counter
11:21 modules into the eval statement. So I didn't know you could do that. So I was thinking bitwise or
11:28 yeah. No, it's a way to get these imports in there, which is pretty cool. Anyway, that's fun.
11:34 And then he lists some other ways, but I was still frustrated that there's no pytest in here.
11:39 So I thought, how would I do this with pytest? So I just wrote up a quick blog post, actually just
11:46 praising Ned as well, because I learned some stuff and I like learning new things. But then what did I
11:53 do? I imported pytest, the same imports that he used, and then the, the same good and bad and tests.
12:00 But then I just split it up a bit different and used parameterization to write the test code. So
12:06 if anybody wants to use pytest instead, here we go. The excellent, the one fun thing that I had was this
12:13 10,000 character I'm using with parameterization. I was able to take the, the input as part of when you,
12:21 you do pytest dash fee, it prints out all this. It's the parameterization prints out, which is nice. But I
12:28 I didn't want 10,000 characters printed out. So I also got to use the ID function to shorten that up a
12:34 bit, shorted it to 20 characters. But anyway, testing.
12:38 Very nice. Yeah. I love the compare and contrast as well.
12:41 Yeah. Yeah. Awesome. Let's talk some trends, huh?
12:44 Okay.
12:45 So this was originally just going to be an extra. The more I looked at them, like this actually could be a fun
12:49 conversation for you and me to have. So I wrote a article for the JetBrains blog called "The State
12:56 of Python in 2024." Okay.
12:59 I thought that'd be pretty fun. And there's eight key trends or whatever I pulled out. So I thought,
13:03 hey, you know, maybe, maybe that'd be fun to talk about the eight trends and get your thoughts on it.
13:08 All right. So let's do it real quick. So first of all, Python keeps growing. But it's interesting
13:15 that actually, if you look at the amount of other languages used along with Python, they're decreasing.
13:22 Right? So for example, in 2021, 40% of Python people did JavaScript plus Python. Now it's only 35.
13:28 If you look at Bash, 33% of people did. Now 29 do. And a lot of languages are going down like that,
13:35 except for Rust. So that's pretty interesting. And that's because so many people are coming into Python
13:42 from non-traditional programming languages like data science and other scientists and so on. You know,
13:48 GitHub just announced that, I think we covered this, that GitHub said that Python is the most popular
13:54 language on GitHub now. It's pretty awesome. But most of those people are coming from non-traditional
14:00 backgrounds, meaning they're just going into like Jupyter Notebooks or something like that, right?
14:05 Like this is their only Py programming language is Python.
14:07 Yes, exactly. Exactly. They're like, they just became programmers. So they're not doing the other
14:12 stuff. So it's interesting to see these like, hey, you're doing less JavaScript as a community,
14:17 which is kind of the opposite of what I would imagine. And very, very closely to what you said,
14:21 41% of Python developers have been working professionally in any language for less than two years.
14:27 Like almost everyone is new here.
14:29 Yeah. And actually, I remember somebody talking about this, this, this question,
14:35 like maybe it was a different question, but like how long have you been a professional Python developer?
14:40 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.
14:50 Yeah, exactly. So yeah. And then if you throw in three to five years at like, that's pretty much it.
14:54 Yeah. Trend three.
14:55 Oh, let's go up to the years again. Where are we at?
14:58 Oh, just 11 plus. So we're just in one bucket of 13% of the people.
15:03 And even so that's only like over 10 years is basically only 13%, which is wild.
15:09 Yeah, that's really wild. Yeah, yeah, yeah. Where do people learn Python? They learn it on YouTube,
15:14 on our John codes, and coding. And if they listen to podcasts, talk Python to me, who's the number one out there.
15:21 Nice. But I'm sure Python buys us just under, just under. Trend four, Python two versus three,
15:29 that's over. We've raged on about the legacy Python long enough. There will be no 2.8 says Guido all
15:37 the way back in 2014. Right. But if you look at it, it's like asymptotically, like whoever's still
15:43 on Python two, they just, those people aren't leaving.
15:45 Yeah. It's what's surprising to me is the people that are still on that and are participating in
15:52 surveys. I think they just fully have checked out. I imagine a lot of those people, which is 6%
15:59 for this year that are still on Python two, that they're on some huge project. I know there's some,
16:05 they're not going to migrate the project. The project will not migrate, but those people would
16:09 very much like to, and they probably in their spare time work with him FastAPI and other modern things.
16:16 But when they go back to work, they're here. You know what I mean?
16:18 Yeah. Or at least some of their project is using that. Yeah.
16:21 Yeah, exactly. But still, let's keep going. All right. Flask, Django and FastAPI are all the top
16:29 three frameworks, which is nearly a dead heat, which is pretty interesting. We just talked a lot about
16:34 Django. But what's interesting is if you ask web developers who are Python people,
16:39 not just Python people, but we talked about there's a lot of people who don't consider themselves
16:43 like developers or whatever. But if you say, hey, web developers who are also Python people,
16:47 Django is used one and a half times as much as Flask or FastAPI.
16:54 Oh, yeah.
16:54 So amongst the web developers, Django is clearly leading the pack. But amongst data scientists,
17:00 Flask and FastAPI are ahead because they're more about building APIs and getting their models online
17:05 and so on. So that's a pretty interesting difference, right?
17:08 Yeah. And I'm thinking there's a lot of data or data science stuff that doesn't have a back
17:13 database or anything or some huge thing. Yeah.
17:16 Yeah. Where do you host your stuff? It's all about the hyperscale clouds, apparently, which is
17:21 blowing my mind, actually. AWS, Google Cloud and Azure represent, gosh, how much did it say?
17:28 I wrote it out maybe at the top. Represent something like 78% of where people host their code. Yeah,
17:34 78% are on one of the three massive clouds. Wow.
17:37 Hetzner is showing up.
17:38 Hetzner is there. Yeah. I mean, we put a dent in Hetzner.
17:41 We definitely did. We got one server there. Yeah. And also Heroku interestingly went down,
17:48 but I think that's because when they canceled their free tier, a lot of people stopped. They
17:52 decided to turn off their for move elsewhere. But Python Anywhere is going strong, actually,
17:57 above all the other small providers, right? DigitalOcean, Hetzner, Linode, and so on.
18:01 Python Anywhere. Interesting.
18:02 Yeah. Yeah. That's pretty wild, right? All right. Two more. People prefer containers over VMs and
18:06 they prefer VMs over bare hardware. That shouldn't be a surprise, should it? I mean,
18:11 maybe the containers versus VMs, but certainly not just straight hardware. Straight hardware is not
18:16 even on the picture, by the way. It's like lower. And last trend of 2024 is UV takes the Python
18:22 packaging, takes Python packaging by store. Yes.
18:25 I think that's obviously it's, we've covered it a bunch of times. It's not just that it's fast.
18:30 It's that it combines a bunch of functionality from different tools into different places. Yeah.
18:35 It's super neat. It installs Python. It installs, it creates virtual environments. It manages projects,
18:42 if you wish. It updates. There's a lot of, a lot of good stuff there.
18:45 And anyway, I think a big part of the UV uptick is the UV team tried to make it so that you could use
18:52 it with your current workflow. You didn't really have to change your workflow.
18:55 Yeah. I think that is very much an important part of it. That's why I adopted it for sure.
18:59 So, yeah. So anyway, these are, these are my trends. Hopefully people find those interesting.
19:04 There's a lot of like writing and data to back that up in the link.
19:07 Right. Yeah. All right. Yeah.
19:09 Yeah. Extra.
19:10 I've just got.
19:12 We've come to extras.
19:12 I just got one extra toggling back to Django just for a moment is I noticed that Django admin has a
19:21 Dracula theme now under the Dracula theme.com. And I can't, I can't remember where I learned it from.
19:29 One of the maintainers posted this on, on, on blue sky, I think. But anyway, it looks great.
19:35 Great colors. And I also, because of this learned that there is a thing called Dracula theme.com that
19:43 contains like a whole bunch of different projects that all have Dracula theme. So.
19:48 Oh, nice. So let's see what I love it. Yeah. And it has cool bats. Oh no. No pad plus. That's funny.
19:56 Nice. VS Code. Cool. Yeah. Yeah. Obviously. Obviously. no visual studio. Oh, oh yeah. I guess people use visual studio still.
20:07 anyway. Yeah. viewer on windows. Yeah.
20:09 Yeah. Jet brains. Of course. Nice. Cool. So yeah, I had no idea about this site. That's super cool.
20:14 That's fun.
20:16 How about extras for you? I have a couple. Let's see here. First of all, my Zen browser experiment is
20:24 still going strong. I'm absolutely loving the Zen browser. It's based on Firefox, which I really like.
20:29 Okay. But that also means that you're limited to the Firefox limitations. Like I can't use it for our
20:35 live stream because our live stream only supports Chrome, which really means Chromium based browsers.
20:41 Right? So I, there's certain times that I'm not using it, but yeah, I'm enjoying people can check that out.
20:46 I feel, I talked to somebody and they're like, this is what Firefox should have built. This is like fire.
20:51 Why is Firefox not doing this? Yeah. You know, it's, it's a good question. I do think I honestly,
20:58 you know, as sort of a sidebar, I'm, I'm a little worried what's going to happen to Mozilla and
21:02 Firefox if the antitrust thing against Google goes through, right? Because if that goes through 90% of
21:09 Mozilla's revenue instantly gets declared illegal and cut off, not illegal for Firefox and Mozilla,
21:15 but illegal for Google. So they would have to stop. Right? Yeah. Maybe I'm not following that. So,
21:20 well, one of the big problems is Google has used their monopoly and their money and all that to buy
21:27 off locations to basically pay to either be the default or to prevent competition in different
21:33 ways. For example, they're paying something like $23 billion to Apple to be the default search engine,
21:39 not just in Safari on iOS, but in, if you go to Siri and you ask it a question, right? Like where does it,
21:45 it says, Oh, here, I'm going to search the web for you. Like, how do you think it's going to search
21:48 the web? Yeah, that's paid. That's okay. Right. But they're also paying, I don't remember the number,
21:54 but it's 90% of the revenue of Mozilla to support Mozilla. But I, you know, there's a lot of
21:59 thinking that that is to, to be the default search engine on Firefox. Right. But so that would make
22:05 it illegal for them to do that. Okay. It's the double whammy of like, they're kind of paying Mozilla to
22:10 keep Firefox around so they can say that there's competition. Yeah. Right. But if they can no longer
22:15 pay Mozilla to be the default search engine. Hmm. It's fishy though. If is there really competition
22:22 when you're only competitors paying you to be there? I know it's well, I mean, why is there a lawsuit?
22:29 Right? Yeah. So we'll, we'll see. Anyway. I think it's really cool. I'm enjoying it. Still a big fan of
22:35 Vivaldi as well, which is what I'm talking to you around on right now. Yeah. But also, did you know that
22:39 Microsoft has a browser? I heard of that. Oh, you know what? It's actually just based on Chrome.
22:43 Although Google doesn't pay for that one. I don't believe. Okay. I bet you get Bing as your default
22:48 search engine there. All right. refresh my desk setup. I just, I really, I'm enjoying this way more.
22:54 I set up a little separate table and a little separate computer. So I have a nice view. So I'm not
22:58 looking at like cameras and lights and junk all day. Oh, wow. Even if they're turned off,
23:03 I'm still just staring at a wall with like sound padding and stuff. And I enjoy it way more than
23:09 I realized. And I just want to encourage people. Like you're kind of frustrated with where you're
23:12 sitting, where you're looking while you're at work. Like maybe it's not that much work. It took a couple
23:16 hours. So I can look at trees instead of recording foam, which I encourage. All right. And while I was
23:21 sitting at this fun new desk, Brian, I added a really cool feature to our RSS feed. When I realized that,
23:28 there's an updated spec to RSS, which allows you to specify transcripts in subtitle format. So VTT,
23:36 web VTT or SRT files. Right. Okay.
23:39 So I added those to our set of transcripts to the website supplies to RSS feed. And now you get real
23:45 time follow along as you and I speak transcripts. Oh, wow.
23:50 And that cool. So you can just say, show the transcripts. And it's kind of like a Spotify or
23:54 YouTube music. It's just like follows along as we speak in the real transcripts. And I think you can
23:59 even search them. Although that's probably a per player type of thing. So this doesn't work in
24:04 overcast sadly, but it does work as far as I can tell in Apple podcasts and pocket casts. So at least
24:11 in those two, if you see a little transcript thing and you click it, that means it's going to follow
24:15 along in real time with our conversation. I wanted to have the little bouncy ball, like,
24:19 like, you know, the singalong movies when we're kids.
24:22 Boop, boop, boop, boop. Yeah, exactly. And, it works really good on an iPad. Like you can have
24:27 the, the view of the control and the art and everything. And then next to it, it has.
24:31 Oh, nice. Yeah. Yeah. But it's still also works on the phone. All right. that's it for my extras.
24:36 All right. Oh, I just wanted to add, it took five days to generate those transcripts with the computer
24:42 running 24 hours a day. So I regenerated these cause only, only maybe a third of our episodes had
24:50 VTT format. They had a different format. Just, it's like a pure text type thing that our website
24:55 understands and people can read. But VTT is more of us. It's like not JSON, but imagine like,
25:01 here's your JSON transcript to read, right? It would feel a little bit like that. Yeah. So I've always
25:06 thought of VTT is like some extra setting that is completely useless because I'd never use it. So,
25:12 so I'm glad that you are. You could use SRT. Those are the two that are supported here. Those are
25:16 like the two well-known subtitle formats or whatever. But yeah, I fired up. I have my old M1 Mac mini
25:22 laying around and I'm like, I'm just going to go over there and have it generate these for Python
25:27 bytes and talk Python five days later. It was done. And then I have a whole bunch of Python software
25:34 that goes through and like correct stuff. Like Ruff formatter is like R O U G H. I'm like,
25:41 no, not really. That's not what we meant to say. And it'll sometimes get your, you'll be Brian Aiken.
25:48 I'm like, Nope, we're going to fix that. And so on. Sometimes I'm Brian Aiken.
25:52 I don't know.
25:52 Oh, we're good. Oh, I'm Aiken.
25:55 Yeah. So there's a lot of work that went in to make this happen. So hopefully people enjoy it. And
26:00 yeah, cool. Thanks for it. And I appreciate you keeping improving the back, the back end of Python
26:07 bytes. So yeah, you're welcome. No problem. Okay. You know what? If you were,
26:13 if you were working on software, you taught, you started this show off with testing, right?
26:17 Yeah. Well, if, if no, you start off with the jingle, but we did talk a lot about testing.
26:23 Second item. Anyway, if you were doing testing and you wanted to make sure your tests pass,
26:29 you have many options, Brian, you could not run the test, but if the tests are going to run and say
26:33 continuous integration, whoa, boy, you better make those tests pass or continuous integration is going to
26:38 fail. So Martin Bettman shared this joke with us on blue sky said, how about Volkswagen? You know,
26:48 they kind of gotten a little bit of trouble for writing their car software to say, yes, these diesels,
26:55 they're so clean. You should absolutely get clean diesel, not dirty diesel, get a Volkswagen. What
27:00 that really meant was while it's under test, it's going to change how it behaves to have a better
27:06 emissions test than not. Right? So this is riffing on that and says, Volkswagen, this is a thing you
27:12 can install into your apps is it detects when your tests are being run in a CI server and make sure they
27:17 pass. Okay, I got to check this out. That's hilarious. Yeah, it says why? Well, if you want your software
27:23 to be adopted by Americans, because that's where VW got caught for their cheating, test scores from the CI
27:31 server are very important. Volkswagen uses a defeat device to detect when it's being tested in CI server
27:37 will automatically reduce the errors to an acceptable level for the test to pass. This allows you to spend
27:43 less time worrying about testing and more time enjoying the good life as a trust, trustful software
27:48 developer. They even have a badge like a read me for your GitHub read me. Yeah, with a build passing with
27:57 a little Volkswagen symbol. That's great. Works for Travis CI, Circle CI, Jenkins, Hudson's Bamboo, Team
28:04 City, TFS, Visual Studio Online CI, GitLab, etc., etc., etc. And it defeats assert, tap, tape, and shy.
28:14 And any actual, any test actually that is set to exit code or throw an error. That's funny.
28:21 That's bad, right? I gotta check out and see all the ways they're doing it. Yeah.
28:24 I know. I was wondering like, how does this actually work? People don't really do this. It's a joke.
28:30 Well, so I've actually had cases where, especially during development, where I didn't want the CI to
28:38 jump out at the end of the test, even if there's failures. So there is a pytest feature where you
28:44 can change the exit code. It's a pytest custom exit code internal plugin or something.
28:50 pytest dash always exit zero?
28:53 Pretty much, yeah. To override the exit code so that you can debug the rest of the tool chain
29:00 or get data on something. But yeah.
29:02 That's the only time I've done that. But that's funny.
29:05 It's a little, the image or the logo of it or whatever is like a little Volkswagen bug from
29:11 the 70s that transforms into a transformer robot. I'm using.
29:15 Nice.
29:15 There's 13 contributors to this. There's 15 releases. What is this?
29:20 How many stars?
29:23 Okay, okay. Let's find out.
29:25 Oh, 15,000 stars.
29:27 People are using this thing. Oh my goodness.
29:30 Or just amused by it. It's been nine years old or something.
29:34 Yeah, it has been around for a while, but I ran across this and thought it's pretty funny.
29:38 So this is good. Yeah.
29:40 Yeah. All right. Well, as always, thanks for being here. Thanks everyone for listening.
29:44 Thank you.
29:44 Bye.