Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book


Transcript #414: Because we are not monsters

Return to episode page view on github
Recorded on Monday, Dec 16, 2024.

00: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.

Back to show page