We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode #414 Because we are not monsters

#414 Because we are not monsters

2024/12/16
logo of podcast Python Bytes

Python Bytes

AI Deep Dive AI Chapters Transcript
People
B
Brian
Python 开发者和播客主持人,专注于测试和软件开发教育。
M
Michael
帮助医生和高收入专业人士管理财务的金融教育者和播客主持人。
Topics
Brian: Jeff Tripplet 创建了一个名为 `django-cli-no-admin` 的项目,旨在将冗长的 `django-admin` 命令简化为更简洁的 `django` 命令,提升开发效率。这简化了常见的 Django 命令行操作,例如创建项目和应用等。虽然 Django 本身不会默认采用这种简化方式,但该项目为开发者提供了一种更便捷的替代方案。 Michael: Django Unicorn 是一个用于 Django 的反应式组件框架,它结合了服务器端渲染和客户端交互的优势。开发者可以使用它在 Django 模板中添加交互功能,而无需学习新的模板语言或使用复杂的 JavaScript 构建工具。它简化了前后端交互流程,并提升了开发效率。Django Unicorn 提供了诸如表单验证、重定向、脏状态检测、局部更新和轮询等功能,使开发者能够更轻松地构建动态和交互式 Web 应用。 Michael: Django Unicorn 旨在简化 Django 应用中的前端交互开发。它允许开发者在 Django 模板中直接使用类似 React 的组件化方式,而无需编写大量的 JavaScript 代码或使用复杂的构建工具。通过在模板中添加特殊的属性,开发者可以轻松地实现数据绑定、事件处理和 AJAX 请求等功能。这使得开发者可以专注于 Django 后端逻辑的开发,而无需深入了解前端技术细节。 Brian: Ned Batchelder 的文章探讨了多种测试字符串中是否只包含 0 或 1 的方法,并展示了如何使用 pytest 进行测试,文章中也介绍了 `cleandoc`、`partition` 等 Python 工具的使用方法。

Deep Dive

Chapters
Jeff Triplett created django-cli-no-admin to shorten the django-admin command to just django. This improvement enhances developer speed and comfort. The goal is for Django to eventually adopt this as the default.
  • Created django-cli-no-admin to shorten 'django-admin' command.
  • Improves developer speed and comfort.
  • Aims for Django to adopt it as the default.

Shownotes Transcript

Translations:
中文

Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds. This is episode 414 recorded December 16th, 2024. I'm Michael Kennedy. And I'm Brian Ocken. And this episode is brought to you by us, all of our things, books, courses, stuff like that. We have many things for you to get better at Python. Check them out. Links at the top of the show. And we are now...

pretty active on Blue Sky. Brian, thanks for dragging me over. And I want to point out that you can go to my profile and click on Starter Pack. And there's a bunch of Python people. If you click that, you follow me, you follow Brian, you follow the podcast, plus something like 60 other noteworthy Python people like Samuel Colvin and others. So that's a real quick and easy way to jump in there and kind of get going on

on that. If you want to get... Starter packs are pretty cool. Starter packs are a really cool growth hack for Blue Sky, yeah. Yeah. Blue Sky's fun. I'm enjoying it over there. I'm...

I'm wondering if the surge of momentum is starting to fade a little bit, but we'll see. I know people are excited and I think it's a great place. So I encourage people to check it out. If you would like to get every week, all the show notes and links and everything delivered to your inbox, even if you don't happen to listen that week, which I don't know why that would happen, Brian. That would be a big mistake. That'd be weird. It would be very weird. But even then...

If you go to pythonbytes.fm, click on newsletter, enter your information. Well, then Brian will send you a handcrafted, artisanal version of the show notes. So very awesome. I did say heavy, Django heavy, didn't I, Brian? Yeah. Let's start. Let's start with Django. Well, we're going to start with a small item, but I think it's going to affect me right away. So Jeff Triplett announced he's got a new project to shorten Django.

the J shortened Django dash admin to just Django. And what we're talking about isn't the admin section of Django. It's just the command. So the thing like on the command line, Oh, I have it up in like a tutorial. So like, like for instance, the Django tutorial, there's, there's, there's a bunch of Django admin command line things that you have to run, like start project, um,

And a bunch of other stuff too. So if you type Django dash admin and some stuff like that, and you've ever thought, why can't I just type Django to do this? Jeff has thought that too. So this new project just makes it so that you just pip install it with your stuff. And then you don't have to use Django admin anymore. You can just use Django for the command line 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 blog post announcing it, that he would like to see this in the normal Django, but the Django dash admin won't go away anytime because it's already been there for 20 years or more. So, but,

but it'd be great if it was just like this because why not? Yeah. That'd be amazing. I don't see why you couldn't have them both. And I think, I mean, what other commands do you type Django on the command line and do stuff for most people, right? Yeah, exactly. You just take it. Yeah. So exactly. And you can have multiple entry points in the Django package when you install it, which will give you both commands as you see fit. So yeah, let's do it. Yeah. Oh,

Also, I've been doing a lot of Django lately, and I appreciate just it's half the characters. I counted them. He mentioned it's half the characters. I'm like, really? Yep. It's five. It's half the characters. Even more significantly, it's the dash, right, which requires like an incantation on your keyboard a little bit. Yeah, it's not as fast to type. Thanks, Jeff. So I would like to ask you, Brian, having done some Django lately, have you seen any unicorns?

Yeah. No. Because I have. I saw a Pegasus, but not a unicorn. Yes, the Pegasus. That is like a unicorn, but I don't believe it has a horn or as much magical powers. Okay. I'm not entirely sure of the mythology of Pegasi versus unicorns. But the magical reactive component framework for Jango is the Jango unicorn. This is pretty neat. I just learned about this. Let's see. It's not super new. It's super new to me.

So the idea here is that it's a little bit like a JavaScript front end framework, like React or something. But you can avoid using it. You can avoid writing your own JavaScript front end. Instead, you can just pip install Django Unicorn, add it as an app, and then you've got to include its scripts and so on. But somewhere down here, you can use these Unicorn attribute modifiers in your template. You can say unicorn submit.prevent add.

and then instead tie that to, if I don't scroll too quickly, you can tie that to a model called task. And if you hit escape, what does it do? It'll change, like replace the task text. With that, this thing right here, right? And you can just add a button. When you click this, call the function add 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. And then it just automatically wires together the creation of these. Let's see, where's the example? So yeah, not enough here on the little example on the homepage for me to totally know exactly how it works. But basically when you interact with this UI element, it maps to REST functions implemented previously.

by the unicorn thing automatically, right? So you can just include some, it's a little bit like HCMX. You just include some magical text on there and it'll call back to the server. But the difference is it'll handle it on the server as well, right? - Okay. - So pretty neat. Yeah, so if it says, is it magic? Sort of.

Feels like it. It progressively enhances normal Django views with the initial render being server-side rendering, which is, like I said, like HTMX as well. Depends how you use it, but it can be. So it's good for SEO. Just the pure HTML content is there. It's not just like angle brackets everywhere when you view source. It binds the elements you specify automatically and makes...

the AJAX calls on its own when it needs it. And it comes back and it updates the DOM when the HTML changes or with the HTML changes. So yeah, just write normal Django type stuff. And it takes it, it says it also has other features, form validation, redirections, dirty states, partial updates, polling, et cetera. And then down here somewhere, maybe it's in the docs, it says, here's what you might do instead, right? You might have to use React or you might have to use this other thing. Unfortunately, I

I think that's here on this page.

It says what else you might have to use. Yeah, there's better examples on their landing page. It gives you sort of a comparison to Vue, React, et cetera. What is notably lacking here is HTMX, which like I said, is kind of like it. But nonetheless, if people are doing Django and they want something like Vue or React, but they don't really want to do JavaScript, this could be a pretty interesting thing to check out. 2,400 GitHub stars, pretty decent. And this is a fairly basic like,

low learning curve to just try to, it might be enough before you jump into something else. So yeah, absolutely.

And by the way, real-time follow-up on your item. This is what I thought when I heard about the Django admin. Pat Decker just says, alias Django equals Django-admin. And that's exactly... I'm like, yep. I have so many things like that. I'm like, that's a huge wrong command. That is alias to two letters. Okay, fine. I could do that also. But it's nice. I mean, why impose...

the longer version on everybody until they get either think about it or a lot of people are new when they take these tutorials. They don't know that they can do that kind of stuff. Right. Or you might be like on Windows and I have no idea how to alias anything on Windows. Batch files. It's all batch files.

- All right, over to you. - Oh, what am I talking about? I wanted to talk about testing a little bit. I had a fun time reading this article from Ned Betchelder called "Testing Some Tidbits." So this is sort of a fun thing. So he posted, he just posted, like, let's say you had this, he wanted to look at different ways to check to see if a string only had zeros or ones in it and nothing else.

And there's a lot of ways you could do this. He presented, let's see, one, two, three, four, five, six different ways in a post on both Mastodon and Blue Sky. And then he got a whole bunch of replies saying like other ways to do it. And one, it's kind of a fun, just like, how would I do this sort of thing? And there's a lot of ways to handle it, which is fun. Anyway, so he also wanted to test how to do it. And

since there's testing in the title, I thought maybe he'd use my test or something, but, um, yeah, no, um, uh, he's got like a set of good input that should be just all zeros and ones. And then a set of bad input that has, you know, it's not all. And some of it's like a whole bunch of zeros and just one non on zero, the empty string is used. That would be considered good. Um, and then I, even a thousand character, uh, uh,

a string with a thousand characters in it or 10,000. It's 10,000. Wow. So big, long string. So, and then a whole bunch of different ways that he had, he has original checks, but plus a whole bunch of others that other people used. And then his, he just runs through them. But that one of the things I really loved about this is I learned some stuff about PyTest or Python. I learned about CleanDoc from inspect.cleandoc.com.

it's a way to strip out white space that i usually use what did i use i use usually used uh like text rapid d dent for something like this but um so i'm gonna have to run some testing to find out

Which one deals with stuff better? CleanDocs. That might be better. Yeah, that's cool. And then there's partitioning. I don't use partition much, so I didn't remember what that does. So partition, he was using partition to strip out comments. And what it does is split a string on whatever you pass it in, in this case the pound sign or hash or whatever you want to call it. And then it splits that into three strings.

before the, before the delimiter, what the delimiter was and after. And so this is, this is a way to just grab everything before the comment, which is cool. And then he used, what else did I learn? Oh, I didn't understand what this, if not test is in here for first, but this was checking for blank lines, which makes sense or stuff with just a comment. But then there's this eval, which I,

I am so afraid of evals, but in this case, you're writing the stuff. It's from right here, so it's pretty safe. But evaling the code and then

passing in a variable like the S variable into the code. So everywhere in this code, the S means the string you're passing in. But this or G, what does or G do? And what he's doing is it's a way with eval to pass in imported stuff. So it imports, it'll import the regular expression and the counter modules into the

the eval statement. So, I didn't know you could do that. I was thinking bitwise or. Yeah. No, it's a way to get these imports in there, which is pretty cool. Anyway, that's fun. And then he lists some other ways. But I was still frustrated that there's no PyTest in here. So I thought, how would I do this with PyTest? So I just wrote up a quick blog post, actually just praising Ned as well, because I learned some stuff. I like learning new things. But

But then what did I do? I imported PyTest, the same imports that he used, and then the same good and bad in tests. But then I just split it up a bit different and used parameterization to write...

the test code. So if anybody wants to use PyTest instead, here we go. The one fun thing that I had was this 10,000 character. I'm using, with parameterization, I was able to take the input as part of when you do PyTest-v, it prints out all this. It's the parameterization prints out.

which is nice. But I didn't want 10,000 characters printed out. So I also got to use the ID function to shorten that up a bit, shorten it to 20 characters. But anyway, testing tickets. Yeah, I love the compare and contrast as well. Yeah. Yeah. Awesome. Let's talk some trends, huh? Okay. So this was originally just going to be an extra. The more I looked at it, I'm like, this actually could be a fun conversation for you and me to have. So I wrote an article

article for the JetBrains blog called The State of Python in 2024. So I thought that'd be pretty fun. And there's eight key trends or whatever I pulled out. So I thought, hey, you know, maybe that'd be fun to talk about the eight trends and get your thoughts on it. All right. So let's do it real quick. So first of all, Python keeps growing, but it's interesting that actually if you look at the

amount of other languages used along with Python, they're decreasing, right? So for example, in 2021, 40% of Python people did JavaScript plus Python. Now it's only 35. If you look at bash, 33% of people did now 29 do and

And a lot of languages are going down like that, except for Rust. So that's pretty interesting. And that's because so many people are coming into Python from non-traditional programming languages like data science and other scientists and so on. GitHub just announced that, I think we covered this, that GitHub said that Python is the most popular language on GitHub now.

which is pretty awesome. But most of those people are coming from non-traditional backgrounds, meaning they're just going into like Jupyter Notebooks or something like that, right? Like this is their only programming language is Python. Yes, exactly, exactly. They're like, they just became programmers. So they're not doing the other stuff. So it's interesting to see these like, hey, you're doing less JavaScript as a community, which is kind of the opposite of what I would imagine. And very, very closely to what you said, 41% of Python developers

have been working professionally in any language for less than two years. Like almost everyone is new here. Yeah. And actually I remember somebody talking about this, this, this question, like maybe it was a different question, but like how long have you been a professional Python developer? 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 per

programming also. Yeah, exactly. Yeah. And then if you throw in three to five years at like, that's pretty much it. Trend three. Oh, let's go up to the years again. Where, where are we at?

Oh, just 11 plus. So we're just in one bucket of 13% of the people. And even so, that's only like over 10 years is basically only 13%, which is wild. Yeah, that's really wild. Yeah, yeah, yeah. Where do people learn Python? They learn it on YouTube, on R John Codes, M Coding. And if they listen to podcasts, talk Python to me. This is the number one out there. Nice. But I'm sure Python Bites is just under, just under.

Trend four, Python 2 versus 3, that's over. We've raged on about the legacy Python long enough. There will be no 2.8, says Guido, all the way back in 2014. But if you look at it, it's like asymptotically. Whoever's still on Python 2, those people aren't leaving. Yeah. What's surprising to me is the people that are still on that end are participating in surveys. Yeah.

I think they just fully have checked out. I imagine a lot of those people, which is 6% for this year that are still on Python 2, that they're on some huge project. I know there's some banks that have... They're not going to migrate the project. The project will not migrate, but those people would very much like to. And they probably, in their spare time, work with FastAPI and other modern things. But when they go back to work, they're here. You know what I mean? Yeah, or at least some of their project is using that. Yeah, exactly. But still...

Let's keep going. All right. Flask, Django, and FastAPI are all the top three frameworks, which is nearly a dead heat, which is pretty interesting. We just talked a lot about Django. But what's interesting is if you ask web developers who are Python people, not just Python people, but we talked about there's a lot of people who don't consider themselves developers. But if you say, hey, web developers who are also Python people, Django is used one and a half times as

as much as Flask or FastAPI. Oh, yeah. So amongst the web developers, Django is clearly leading the pack. But amongst data scientists, Flask and FastAPI are ahead because they're more about building APIs and getting their models online and so on. So that's a pretty interesting difference, right?

Yeah. And I'm thinking there's a lot of data or data science stuff that doesn't have a back database or anything or some huge thing. Yeah. Yeah. Where do you host your stuff? It's all about the hyperscale clouds, apparently, which is blowing my mind, actually. AWS, Google Cloud and Azure represent. Gosh, how much did it say? I wrote it down. Maybe at the top represent something like 78 percent of where people host their code. Yeah. 78 percent are on one of the three massive clouds. Wow.

Hetzner is showing up. Hetzner is there, yeah. I mean, we put a dent in Hetzner. We definitely did.

We got one server there. Yeah, and also Heroku interestingly went down, but I think that's because when they canceled their free tier, a lot of people decided to turn off their for move elsewhere. But Python Anywhere is going strong, actually, above all the other small providers, right? DigitalOcean, HeadSnerd, Linode, and so on. Python Anywhere, interesting. Yeah, that's pretty wild, right? All right, two more. People prefer containers over VMs, and they prefer VMs over...

bare hardware. That shouldn't be a surprise, should it? I mean, maybe the containers versus VMs, but certainly not just straight hardware. Straight hardware is not even on the picture, by the way. It's like lower. And last trend of 2024 is UV takes the Python packaging, takes Python packaging by store. Yes. I think that's

Obviously, we've covered it a bunch of times. It's not just that it's fast. It's that it combines a bunch of functionality from different tools into different places. Yeah, it's super neat. It installs Python. It installs, it creates virtual environments. It manages projects if you wish.

It updates. There's a lot of good stuff there. And I think a big part of the UV uptick is the UV team tried to make it so that you could use it with your current workflow. You didn't really have to change your workflow. Yeah, I think that is very much an important part of it. That's why I adopted it for sure. So, cool. Yeah. So, anyway, these are my trends. Hopefully people find those interesting. There's a lot of writing and data to back that up in the link. Yeah. All right. Yeah.

Extra. We've come to extras. I just got one extra. Toggling back to Django just for a moment is I noticed the Django admin has a Dracula theme now under the draculatheme.com. And I can't...

I can't remember where I learned it from. One of the maintainers posted this on Blue Sky, I think. But anyway, it looks great. Great colors. And I also, because of this, learned that there is a thing called DraculaTheme.com that contains...

like a whole bunch of different projects that all have Dracula theme. Oh, nice. So let's see what, I love it. Yeah. And it has cool bats. Oh, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no

Oh, yeah. I guess people use Visual Studio still. Anyway. Yeah. Viewer on Windows. JetBrains, of course. Nice. Cool. Yeah, I had no idea about this site. That's super cool. That's fun. How about extras for you? I have a couple. Let's see here. First of all,

My Zen browser experiment is still going strong. I'm absolutely loving the Zen browser. It's based on Firefox, which I really like. Okay. But that also means that you're limited to the Firefox limitations. Like, I can't use it for our live stream because our live stream only supports Chrome, which really means Chromium-based browsers, right? So I...

There's certain times that I'm not using it, but yeah, I'm enjoying it. People can check that out. I talked to somebody and they're like, this is what Firefox should have built. This is like, why is Firefox not doing this? You know, it's a good question. I do think I honestly, you know, as sort of a sidebar, I'm a little worried what's going to happen to Mozilla and Firefox if the antitrust thing occurs.

against Google goes through, right? Because if that goes through, 90% of Mozilla's revenue instantly gets declared illegal and cut off. Not illegal for Firefox and Mozilla, but illegal for Google, so they would have to stop, right? Yeah, maybe. I'm not following that, so... Well, one of the big problems is Google has used...

their monopoly and their money and all that to buy off locations to basically pay to either be the default or to prevent competition in different ways. For example, they're paying something like $23 billion to Apple to be the default search engine, not just in Safari on iOS, but in, if you go to Siri and you ask it a question, right? Like where does it, it says, Oh, here, I'm going to search the web for you. Like, how do you think it's going to search the web? Yeah, that's a paid. Interesting.

That's okay. Right. But they're also paying, I don't remember the number, but it's 90% of the revenue of Mozilla to support Mozilla. But I, you know, there's a lot of thinking that that is to, to be the default search engine on Firefox. Right. But so that would make it illegal for them to do that. Okay. It's the double whammy of like, they're kind of paying Mozilla to keep Firefox around so they can say that there's competition. Yeah. Right. But if they can no longer pay Mozilla to be the default search engine, right.

It's fishy though. Is there really competition when you're only competitors paying you to be there? I know it's well, I mean, why is there a lawsuit? Right. Yeah. So we'll, we'll see. Anyway. I think it's really cool. I'm enjoying it. Still a big fan of Vivaldi as well, which is what I'm talking to you around on right now. Yeah. But also did you know that Microsoft has a browser? I heard.

I heard of that. Oh, you know what? It's actually just based on Chrome. Although Google doesn't pay for that one, I don't believe. I bet you get Bing as your default search engine there. All right. Uh...

Refresh my desk setup. I just, I really, I'm enjoying this way more. I set up a little separate table and a little separate computer. So I have a nice view. So I'm not looking at like cameras and lights and junk all day. Oh, wow. Even if they're turned off, I'm still just staring at a wall with like sound padding and stuff. And I enjoy it way more than I realized. And I just want to encourage people, like you're kind of frustrated with where you're sitting, where you're looking while you're at work. Like maybe it's not that much work. It took a couple hours.

So I can look at trees instead of recording foam, which I encourage. All right. And while I was sitting at this fun new desk, Brian, I added a really cool feature to our RSS feed when I realized that

there's an updated spec to RSS, which allows you to specify transcripts in subtitle format. So VTT, web VTT or SRT files. Right. Okay. So I added those to our set of transcripts to the website supplies to RSS feed. And now you get real time follow along as you and I speak transcripts. Oh, wow. Isn't that cool? So you can just say show the transcripts and it's kind of like a Spotify or YouTube music. It's just like,

follows along as we speak in the real transcripts. And I think you can even search them, although that's probably a per player type of thing. So this doesn't work in Overcast, sadly, but it does work, as far as I can tell, in Apple Podcasts and Pocket Casts. So at least in those two, if you see a little transcript thing and you click it, that means it's going to follow along in real time with our conversation. I wanted to have the little bouncy ball, like, you know, the sing-along movies when we were kids. Yeah, exactly. Yeah.

And it works really good on an iPad. Like you can have the view of the control and the art and everything. And then next to it, it has. Oh, nice. Yeah. But it still also works on the phone. All right. That's it for my extras. All right. Oh, I just wanted to add, it took five days to generate those transcripts with the computer running 24 hours a day. So I regenerated these because only maybe a third of our episodes had transcripts.

vtt format they had a different format just it's like a pure text type thing that our website understands and people can read but vtt is more of a it's like not json but it imagine like here's your json transcript to read right it would feel a little bit like that yeah so i've always thought of vtt as like some extra setting that is completely useless because i'd never use it so um so i'm glad that you're having a

You could use SRT. Those are the two that are supported here. Those are like the two well-known subtitle formats or whatever. But yeah, I fired up. I have my old M1 Mac mini laying around. I'm like, I'm just going to go over there and have it generate these for Python Bytes and TalkPython. Five days later, it was done.

And then I have a whole bunch of Python software that goes through and like correct stuff. Like rough formatter is like R O U G H. I'm like, eh, no, not really. That's not what we meant to say. And it'll sometimes get your, you'll be Brian Aiken. I'm like, Nope, we're going to fix that. And so on. Sometimes I'm Brian Aiken.

Oh, we're good. Oh, I'm making... So there's a lot of work that went into making this happen, so hopefully people enjoy it. And, yeah. Cool. Thanks for... There it is. And I appreciate you keeping improving the back end of Python Bytes. Yeah, you're welcome. No problem. Okay. You know what? If you were working on software, you started this show off with testing, right? Yeah. Well... If...

No, you start off with the jingle, but we did talk a lot about testing. Second item. Anyway, if you were doing testing and you wanted to make sure your tests pass, you have many options, Brian. You could not run the test, but if the tests are going to run and say continuous integration, whoa, boy, you better make those tests pass or continuous integration is going to fail. So Martin Bettman shared this joke with us on BlueStack.

Blue Sky said, how about Volkswagen? You know, they kind of got in a little bit of trouble for writing their car software to say, yes, these diesels, they're so clean. You should absolutely get clean diesel, not dirty diesel, get a Volkswagen. What that really meant was while it's under test, it's going to change how it behaves to have a better emissions test than not. Right. So, yeah.

This is riffing on that and says, Volkswagen, this is a thing you can install into your app. It says, it detects when your tests are being run in a CI server and makes sure they pass. Okay, I got to check this out. That's hilarious. Yeah, it says, why? Well, if you want your software to be adopted by Americans, because that's where VW got caught for their cheating.

Test scores from the CI server are very important. Volkswagen uses a defeat device to detect when it's being tested and see a CI server will automatically reduce the errors to an acceptable level for the test to pass. This allows you to spend less time worrying about testing and more time enjoying the good life as a trustful software developer.

They even have a badge, like a readme for your GitHub readme. Yeah, with a build passing with a little Volkswagen symbol. That's great. Works for Travis CI, Circle CI, Jenkins, Hudson's, Bamboo, TeamCity, TFS, Visual Studio Online CI, GitLab, et cetera, et cetera, et cetera. And it defeats Astert, Tap, Tape, and Shy in any actual...

Any test actually that is set to exit code or throw an error. That's funny. I got to check out to see all the ways they're doing it. Yeah. I know. I was wondering, like, how does this actually work? People don't really do this. It's a joke. Well, so I've actually had cases where, especially during development, where I didn't want the CI to jump out at the end of the test, even if there's failures.

So there is a PyTest feature where you can change the exit code. It's a PyTest custom exit code internal plugin or something. PyTest dash always exit zero? Pretty much, yeah, to override the exit code so that you can debug the rest of the tool chain or get data on something. But yeah, that's the only time I've done that. But that's funny.

It's a little, the image or the logo of it or whatever is like a little Volkswagen bug from the 70s that transforms into a transformer robot. Amazing. Nice. There's 13 contributors to this. There's 15 releases. What is this?

How many stars? Okay, okay. Let's find out. 15,000 stars. People are using this thing. Oh, my goodness. Or just amused by it. It's nine years old. Yeah, it has been around for a while. But I ran across this and thought it was pretty funny. This is good. Yeah. All right. Well, as always, thanks for being here. Thanks, everyone, for listening. Thank you. Bye. Bye.