Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 377, recorded April 2nd, 2024, so it's not an April Fool's joke.
And I am Brian Okken.
I am Michael Kennedy.
This episode is sponsored by Scout APM.
Please listen to their segment later in the show.
If you want to connect with us, we're at Fostadon on Mastodon at Adam Kennedy at Brian Okken and at Python Bytes at Fostadon.org.
And if you'd like to join us live for the live show, show up at pythonbytes.fm/live.
Actually, you can just go there anytime and it tells you when the next recording is so you can put it on your calendar.
And finally, if you want an artisanal handcrafted digest of every week of show notes in your email, so maybe you don't want to take notes while you're listening or you miss an episode, you can get it right in your email.
Just go to the pythonbytes.fm and look for friends of the show and you'll get an email.
Yeah, that's a cool thing we just started doing.
So if you want to just, you don't have time to listen or you forget to show up for an episode, it'll just show up.
And I love the artisanal part, Brian.
Well done on that.
Very, it's very craftsman-like.
Yeah, anyway.
I just want to talk about paths today.
Can we just talk about paths?
Yeah, just paths.
Nothing else.
No, nothing.
Just paths.
Actually, that's what it's called.
Just paths.
Okay, so here's a tool that is built in Python and just is just a language.
It's 1.2% just.
I don't know.
This is too meta.
Anyway, it's a quick CLI tool built with Python.
And when you hear that, the first thing you should think is, PipX install the thing.
Because that's how you install CLI tools for Python, right?
It gets managed on its own.
It's upgradable through PipX and all the things.
They made a little mistake here.
Like, I should do a PR and put an X on the PipX install just path.
Okay.
So what is this thing?
What it does is it's for Windows and macOS, I believe is what it's for.
No.
Windows, Linux, and macOS as well.
Because it basically pretends macOS is Linux.
And what it does is it will look at your path variable and see, help you determine if it's good.
So if you want to answer questions like, when I type Python, I always get Python 2.
Why is that?
When I type Python, I get Python 3.10, but I have 3.12 installed.
Why is that?
When I pip install or PipX install a thing, it claims that stuff that gets installed by it won't be in the path.
Wait, I thought it was.
Oh, no, wait.
That was 3.11, not the 3.12 version of that.
All these complicated little weird things that you run into all the time.
This is just a CLI tool that you just say, tell me how am I doing?
What is my path?
What stuff?
Like, do I have something in my path that links to a directory, but the directory is no longer there?
So, for example, if I have Python 3.10 in my path, but I've uninstalled Python 3.10, but it's still in my .cshrc or bashrc file or Windows path environment variables or whatever, right?
That kind of stuff.
Cool, huh?
Yeah, actually, very cool.
Yeah, so it does a bunch of different things.
It can do just --raw to show you what it is.
You can just run it by itself, and it gives you this colored output of each element in your path.
So it parses the path, and then it goes line by line and tells you green this exists, yellow it's a duplicate of something that was there before.
So if you have something in your path multiple times, maybe it's earlier and later, and you thought it should be later, so that's also a weird thing going on.
Or it'll turn it red if there are some that don't exist.
Yeah?
So that's pretty cool.
You can ask for just the invalids just for the duplicates.
You can ask it to follow symlinks and then resolve whether those are duplicates or not.
And then you can say, give me a corrected version as a string or not as a string, as a list.
And then that will let you basically remove the duplicates, remove the missings, and go from there.
There's a little video here that's a giffy or something.
I don't know.
But if you want to watch the video, you can pull it up, and you'll see what it looks like when it runs and all the colors and stuff.
But it's super easy to try out.
So I recommend people check out JustPath.
I think it's handy.
My score is not that amazing.
I just ran it, Brian.
42 directories in my path.
12 do not exist.
Fully 12 of them.
And four of which that do are duplicates.
Yeah.
I've got a bunch of problems with mine.
Okay.
Who knew, right?
Well, you kind of keep things around.
You install stuff, change things.
Yeah.
This stuff is write only, right?
Why would you take stuff out of your path?
You just keep adding to it and adding to it.
But then, like you say, you uninstall things, stuff changes, et cetera.
Yeah.
I have added my user's Okken.local slash bin.
Apparently, that doesn't exist anymore, and I don't even remember ever using that.
Okay.
Cool.
Interesting.
Yeah.
It's easy to adopt and use.
You just pipX install it, and you just run the thing, and it tells you what's up.
Cool.
Well, that's exciting.
I have, like, you know, doom and gloom next.
Oh, no.
Yeah.
The XZ backdoor.
I don't know if everybody's heard about this.
It just really sort of popped up last Friday, so it's fairly recent.
Have you been keeping up on XZ?
Yeah, it definitely has caught my attention and makes me quite nervous.
I think we just missed this in getting released to basically every server on the internet,
which is really good.
Yeah.
So if you've just sort of heard about it, I'm going to provide a lot of articles on it,
and some of it has good information.
Some of it has dubious, a little bit, maybe opinionated stuff, which is fine.
But I'm linking to an article from Evan Bowen.
Evan Bowes?
B-O-E-H-S.
Not sure how to pronounce that.
Anyway.
Everything I know about the XZ backdoor.
And it's a fairly curated timeline of what the backdoor is.
But, well, it's about the timeline of how it happened.
But the gist, if you haven't heard about it, this is that there was a backdoor added to,
I think it's XZ Utils.
XZ is the compression or like an unzipper, zipper, unzipper sort of thing.
And archive tool for Linux and other Unix-like distributions.
So it's a weird story that start this multi-year.
That's the part that's freaky, is a little utility that's included everywhere that starting
in 2021, somebody, well, they went by the name of GIA Tan, but nobody really believes
that that's really their name, started contributing to open source, added a patch.
And these patches were added like in long, long times apart.
And then ended up becoming a maintainer of XZ and then creating in part of the test code.
And there wasn't a vulnerability in GitHub, but there was in the distributed TAR release.
I don't know.
There's a lot of details that I didn't quite follow all of it.
However, yuck and weird.
And so the part that I want to talk about really is one, you should just be aware of this.
And we're going to link to a good article.
I think it's-
Brian, before you go on a little farther, because before we watch this, the real basics of it,
basically this vulnerability was intentionally put there as a backdoor to break open SSH connections.
So the idea was if you can SSH to your server, this was going to give other people SSH access to your server, which is extraordinarily bad.
Yeah.
And SSH into it with root access.
So they have like full access, really.
Yeah.
Terrible.
Would have been a terrible backdoor.
Glad it got caught.
So it got caught by like somebody at Microsoft, Microsoft Postgres team, I think, looking at some of their over like an update of XZ causing or actually a slowdown in some of their, I think it was in their test suite or something.
They were running micro benchmarks and they saw like a 600 millisecond slowdown or something like, geez, that's weird.
How about that?
Testing for the win, Brian.
Yeah.
And then also, I guess, Valgrind caught some problems with it as well.
So I guess good thing that people were paying attention to that and then tracked it down fairly rapidly to a update of XZ.
And then, but then some of the unraveling of this is just, okay, so there was a vulnerability.
It got caught.
People are updating.
That's good because you really don't want this here.
However, some of the ways in which this happened are disturbing.
And so that's why I think it's useful to read up on this a little bit, partly because this XZ utility was not, it's mostly maintained by one person over years.
Right.
So, and then somebody comes along and wants a patch and is sort of, there's some, some sort of kind of not nice things said, including things like clearly don't, don't do patches to this because they're, they don't, the current maintainers lost interest or doesn't care anymore.
So, and then they're saying mean things like this kind of pressured, then this is way back in 2022, pressuring the person into adding another maintainer, then, Hey, there's another maintainer ready and they're adding garbage to it.
So.
And they just happened to work for some state sponsored hacker group.
I'm sure they'll do a good job maintaining it for us.
Yeah.
So maybe.
And, and there's, you know, basically, I guess, watch out for this, but also I think.
So one of the things I wanted to talk about is how do we, how do we avoid stuff like this?
This is, I don't have an answer for it, but there's a lot of people discussing like, what do we do about it?
Including a glyph whose answer may have been just is I'm willing to link to his article called software needs to be more expensive.
Essentially.
We, we get a lot of free software.
Maybe we should start paying the maintainers so that people, I mean, burnout is a real thing, but you pay people, they will work on stuff or somebody else will.
However, don't think that's this.
That's quite one of the interesting, his idea.
I'll just mention this because I think it's interesting is he's got an idea called just JGMM, just give maintainers money.
And his idea is not to have companies try to figure out who to give money to.
It's, it's a, his idea is just give every software engineer with your company a discretionary budget of like, say, 50 bucks a month or whatever you want to do.
And, and they can distribute that money to open source maintainers however they want.
Interesting idea.
I don't think if, even if that was in place, I don't think that it, which I think is a good idea.
I don't think it would be, have gone to XZ really.
Cause I would have thought things like, you know, Django or, you know, it's Python, but, but would I give money to a little zip utility?
Probably not.
Anyway.
So I think this is a good thing to keep up on.
And, and I do this idea of like bringing on maintainers.
You didn't have to be able to do that, but you have to, how do you tell somebody who's going to be malicious a couple of years from now?
I don't know.
That's, that's how do you, I don't think you can check for it.
It is tough.
Yeah.
That person, that person played the long game for sure.
Yeah.
So I thought, well, okay, well, I don't run any servers, so I'm fine.
But then I ran across Jeff Triplett's article called upgrade, update and upgrade homebrew and the XZ versions.
I'm like, what?
Yeah.
So if you, you should, if you run homebrew on your Mac, you should run brew info XZ.
And if, if it shows up at 5.6 X you need to update.
And sure enough, I had the vulnerability on my machine.
I checked it and I was, I was out of date or I actually, I was, I had upgraded.
To the new one.
Thanks.
Yeah.
I just checked.
I don't seem to have it, which is very good.
I don't know.
But the thing is you probably didn't install XZ.
You probably installed.
Yeah.
Other thing, which depended on something, which depended on XZ, which is all parts of the supply
chain problems, which is scary.
Yeah.
But I guess, thanks dude at Microsoft that found this.
Yeah, indeed.
You know, you say you probably would think that the 50 bucks wouldn't go to XZ, but I
really like Glyph's article.
First of all, well done Glyph.
That was a very nice article you wrote and I enjoyed reading it.
It's also a very thoughtful idea.
I think his idea is basically instead of trying to get large companies to come on and be sponsors
of open source projects.
Usually that's a huge negotiation and there's all sorts of stuff and right.
It's just not easy.
Just give everybody 50 bucks a year or a month.
I can't remember.
I think it was maybe a month.
Anyway, give people a card and they could just donate it to whichever open source project
that they would like.
And I agree if there's a thousand people that did that, Brian, that XZ probably wouldn't
make it.
But wouldn't it be awesome if there was a world where there were so many people who were
just donating to open source that it became super lucrative that second tier projects were
even potentially full-time things like rockstar developers, you know, like ballers are rolling
up in their Ferrari because they're running FastAPI or, you know, Sebastian is doing that.
I mean, that would be really cool.
Think of how much more open source to get created if it was sort of a gold rush as well.
So yeah, I think it would be neat.
And also even not necessarily a full-time job, but just to be able to say, even if I have to
take the time unpaid from my normal job, if I took like a day a week off and just worked
on open source, my open source project instead.
And sometimes it's not even adding features.
It's just going through issues, doing all of the bookkeeping and the maintenance and everything.
There's a lot.
Review PRs.
Yeah.
Or maybe you're a consultant.
You take one for your clients on something like that, right?
Yeah, exactly.
So thanks for that.
Very cool.
Yeah.
I'm glad you covered this.
Well, we would like to thank Scout APM for sponsoring this episode.
Thanks, Scout.
Let me tell you real quick about Scout APM.
They're big supporters of Python Bytes, so we appreciate that very much.
So if you are tired of spending hours trying to find the root cause of issues impacting your
performance, then you owe it to yourself to check out Scout APM.
They're a leading Python application performance monitoring tool, APM, that helps you identify
and solve performance abnormalities faster and easier.
Scout APM ties bottlenecks such as memory leaks, slow database queries, background jobs, and
the dreaded N plus one queries that you can end up if you do lazy loading in your ORM.
And then you say, oh, no, why is it so slow?
Why are you doing 200 database queries for what should be one?
So you can find out things like that.
And it links it back directly to source code so you can spend less time in the debugger and
tailing logs and just finding the problems and moving on.
And you'll love it because it's built for developers by developers.
It makes it easy to get set up.
Seriously, you can do it in less than four minutes.
So that's awesome.
And the best part is the pricing is straightforward.
You only pay for the data that you use with no hidden overage fees or per seat pricing.
And I just learned this, Brian.
They also have they provide the pro version for free to all open source projects.
So if you're an open source maintainer and you want to have Scout APM for that project,
just shoot them a message or something on their pricing page about that.
So you can start your free trial and get instant insights today.
Visit by them by set of him slash Scout.
The link is in your podcast player show notes as well.
And please use that link.
Don't just search for them because otherwise they don't think you came from us.
And then they'd stop supporting the show.
So please use our link by them by set of him slash Scout.
Check them out.
It really supports the show indeed.
All right.
Now, Brian, let's talk about some fast stuff.
Okay.
L Python.
Have you heard of L Python?
No.
This is news to me.
So L Python is a high performance type Python compiler.
So basically if you type annotations or type hints on your Python code,
it can aggressively optimize and compile your Python code.
And it uses multiple backends, which is pretty interesting.
So you can compile it using LLVM.
You can compile it to C.
You can compile it to C++ or you can compile it to WASM WebAssembly.
That's wild, right?
Yeah.
So right now, just a heads up before people get too excited.
It's an alpha stage.
So it's not quite ready for maybe adoption.
But if you're curious about it, you should definitely check it out.
You can play with it and so on.
And so it's starting to pick up speed.
It's got a little over a thousand GitHub stars.
Cool.
And you can try it in your browser.
Let's try the browser, huh?
Before I move on though, let's say it's fast.
It's built from the ground up to translate primarily data science-y code because that's
primarily where things get slow and actually matter in Python.
But numerical array-oriented code into simple, readable, and fast code.
Basic math.
So it knows about, you know, sized integers, for example, in 32 and so on.
It has a just-in-time compilation, which you can get if you don't want to run a compiler
itself.
You can just put a at lpython decorator onto a function and it'll just compile at a runtime,
which is kind of cool because then I guess you probably don't need to distribute binary
versions on your packages, your wheels, and so on.
It's interoperable with CPython.
So basically, you can call all the CPython functions.
And it's also, if it works in CPython, it works here, it'll work in CPython, basically.
Is it a subset, I guess, in a sense?
And open source.
All right, let's play with it for just a second.
So if you go to dev.lpython.org, it loads up in the browser.
And you can notice it loaded pretty quickly, although I have gigabit internet.
It's still loaded pretty quickly.
See this picture here on the screen behind?
This is the Mandelbrot set, which I don't know how many people have done fractals, but it's
drawing two different copies of the Mandelbrot set in, what is that, a 600 by 600 image, maybe?
Okay.
About a black and white one and a color map one.
It says it took a little under half a second to compile it and 80 milliseconds to generate
those two images.
And you can come over here and you can say, like, all right, what I'm going to do is, what
is that number?
I'm going to make this, let's say, 355 iterations.
And then we'll run it again.
And 100 milliseconds, right?
If I make that, if I make this something really silly here, like, oh no, why did that
go away?
Back button is not supposed, or the delete button is not supposed to navigate backwards.
Hold on.
Ooh, really big.
There we go.
All right, there we go.
Okay.
So if I run it again, though, watch how fast this is.
Like, boom, that's it.
And then I'll put it back to, what was it before?
I'm going to be real weird the way it's like capturing my mouse.
But anyway, people can come check this out and see it running.
It runs super fast as Python.
And you think all this iterative generating a ton of paralyzed computation in WebAssembly,
in the browser, with Python.
I'm pretty impressed.
Yeah, that's pretty cool.
Neat.
Who's behind this?
Do you know?
Mr. L Python?
I have no idea, honestly.
Okay.
It's by L Compilers, is what it says at the bottom.
So what is that?
Lcompilers.org.
Yeah.
Good question.
It has no public members.
Okay.
But it is exciting.
So yeah, nor does it have a web page.
Hopefully it's not an APT crew.
Anyway, no, seriously, it looks like a cool project and people can check it out.
There's a lot of these ideas happening now, but yeah, it's quite interesting.
Yeah.
Well, my last topic was kind of dramatic with the whole XZ thing.
So I'd like to continue the drama and bring it into Python.
And with the help of Trey Hunter, and he has a way to make your Python more dramatic.
Actually, your Python output more dramatic with a, I'm just kind of joking,
but it's kind of fun with the name.
He's got a tool called Dramatic.
And what it does is it slows down the print output, which, you know, why would you want this?
I don't know.
It might be kind of fun if you're doing a demo or doing a presentation or something,
but it does, it's just pretty fun.
There's a lot of ways you can use Dramatic.
You can, once you install it, you can just use a context manager so that it's only around certain print statements.
You can decorate certain functions.
So it temporarily does it.
And you can even, there's a start and print that to do it targeted.
One of the fun things, and he's got examples on his readme how to do this.
One of the fun things you can do, I'm not sure why he included this, is you can do it outside the whole thing.
He's got a Dramatic interpreter.
So if you run like Python-M Dramatic, it just slows down everything.
So you can turn it off, though.
He's got a way to turn it off as well.
But you can do speedups and make it.
Anyway, I think this is...
You want your Python code to look like ChatGPT or something like that, right?
Yeah, as it's typing out and stuff.
I think it's kind of, especially if you're running, I think it'd be useful.
He gives an example of doing it.
Like, for instance, I guess this isn't an example.
But if you're doing command line interface interactions with a user, I think it is helpful sometimes to have the output go slowly so that it's visually interesting to have it not just pop up with a mountain of text for people to read.
But don't do it too slow, because that's annoying also.
But anyway, I think it's kind of a fun thing.
Related to this, I thought it'd be...
When he submitted this the other day, I remembered somebody named Alan submitted a comment to us that Terminal Text Effects library is pretty cool.
And so I'll go ahead and link to that also.
That's a fun thing.
It's very dramatic.
That's quite dramatic.
You've got a whole bunch of cool effects.
There's a grid one where things show up gradually in a grid.
There's a bunch of great examples.
There's beams that pop back and forth.
This is beautiful.
Laser beams.
I like that one.
Yes, let's do it.
The binary path kind of looks kind of, what was it, matrix-y sort of a look.
Listen, Neil, you can't go down there.
There was one that I really liked a lot.
The burn is neat.
Crumbles.
These are all animated GIFs on the GitHub repo that Brian's thinking, too.
Yeah.
So I think it'd be cool for your...
I wouldn't do it all over the place.
But for instance, if you had a...
Probably not a help, but an about.
And that's sort of where it's showing here.
Where you show the credits and who's worked on it and some more info and stuff.
That'd be fun to do a fancy dramatic output for that.
All right.
With this terminal text effects thing.
Yeah.
I think if you work in the movie industry and you need to have a hacker breaking into a thing
or somebody jacking into cyberspace or whatever one of these weird things are,
where you're going to show a terminal and make it dramatic.
Oh my goodness.
You could just basically do this for Hollywood.
Yeah.
Couldn't you?
Yeah, definitely.
What is this language?
Oh my gosh.
This is VB6.
I know this.
I'm tracking his IP.
Like, wait a minute.
What?
What do you think about this?
It would be a little bit better.
Yeah.
It'd be great.
So anyway, that'd be fun.
If you use both this and Textual to turn it into like a Vim clone or something like that
with fun effects.
Ooh, that's fun.
The pour is neat.
Yeah.
It's almost like the Tetris terminal in a sense.
Not quite, but almost.
Anyway, I guess that is just a fun wrap up of our topics.
But we have some extras.
Do you have any extras?
Go do your first since you got your screen up.
Yeah.
Okay.
So the only thing I mentioned Textual a little bit, I'll go ahead and say that Textual
has released a new version.
And I'm highlighting this because there's an inline feature, which is fun.
So with the inline feature, let's see if we can get an example up.
You can kind of run Textual in, run?
It's not running for me.
But anyway, you can run it inline.
So normally, if you run a Textual application, it takes up your whole terminal area.
But this will just take a subset.
So you can have a little input screen.
So you can have kind of like an input dialogue maybe.
And it's very visual, but doesn't take over everything.
So anyway, kind of fun.
Textual and rich, continue to impress.
Yeah.
How about you?
Any extras?
I've got a few.
Let's see.
Let's start with broadcasts straight out of the Philippines.
So my keynote, which was entitled The State of Python in 2024, I give two weeks ago at PyCon
Philippines is out.
And the production quality is super high on this video.
So they did a really great job.
It was a fun conference.
But if you would have loved to hear me give a presentation on The State of Python in 2024,
but you weren't there, then you can still check it out now.
It's awesome.
And I really enjoyed it, by the way.
Yeah.
Oh, thanks so much.
A bunch of the people whose projects we talk about on this show actually get a shout out
there.
So all right.
That's thing one.
Thing two, I just want to encourage people.
I've not logged in my GitHub, so I can't unfortunately show it here.
But Brian, do you go to your GitHub and you know there's that feed in the middle that shows
all the stuff that's going on and who starred this and who's doing that and stuff.
Do you ever use that thing?
No.
That's the way I'm like, that's the thing's stupid.
This is like 80% of the page and it's in the way.
What is this?
How do I get past this?
I've started paying attention to it and I've found so many cool projects.
So I want to inspire people to follow people on GitHub.
You can follow Brian and me and see what we're starring.
But who's starred what?
Who's forked what?
I found probably three or four really interesting projects just last week by just kind of skimming
that for five minutes a week, you know?
That's pretty cool.
Yeah.
I was really surprised that it was useful.
I guess I need to follow more people.
I don't know.
Exactly.
Because I should as well.
Because I hadn't really been following more people because why do you follow them?
Well, maybe this is why.
On to the thing that continues to perplex me, which is interesting, is that the official
way that Python works is through blogspot.com.
But nonetheless, important stuff for you all.
If you are living in the past, like when I ran JustPath earlier, it said your Python 310 thing is stupid because that doesn't exist on your computer anymore.
But if you have 310, 3.9 or 3.8, there are security updates for the older versions of Python, but not the new one.
They call them boring security releases.
I never think of security releases as boring.
They either go from slightly interesting to, oh my gosh, you have my full attention, like the XZ thing.
Anyway, people can check that out and should probably upgrade if they're running one of those versions, 310, 3.9 or 3.8.
And if you're running 3.7 or older, too bad, so sad, no updates for you.
They may be vulnerable.
They may be not.
I don't know.
And that's just the way it works if you're out of support.
That's why you should stay on some of the new stuff somewhat.
Like the new stuff's really been fairly easy to upgrade to.
I haven't.
It has been.
In a lot of, most of the, well, maybe it's just my projects, but I haven't run into any issues really.
I think if you stay one version behind, it's, it's, there's no effort at all almost to do it.
Going from 3.11 to 3.12 was actually the hardest upgrade I've ever done because there was quite a few dependencies I had that use something that was removed as part of the dead batteries thing.
Or something like that.
And I can't, and it just wouldn't run.
And I'm like, oh my gosh, I got to, I was just waiting until some dependency of a dependency got fixed, but it was slow for some reason.
I don't know why.
But, you know, that got fixed within a few weeks, right?
So if you waited a little bit longer, it should be easy.
Yeah.
So one of the questions I got while we're looking at this, how many, I used to run a lot of versions of Python on my, on my Mac.
But I got a new Mac recently and I decided to mostly push most, I only run a couple.
And then I push, do most of my multi Python version testing in CI instead of locally.
How many do you have on your machine or regularly?
Or do you?
Let's see.
Which Python?
Oh, we're here.
Python rather.
I think.
Oh.
I'm sorry to put you on the spot.
No problem.
You know, I think I have, I think I have three 11 and three 12 and that's it.
Yeah.
I think that I don't have three nine.
I don't have three 10.
I definitely don't have anything else.
So three 11 or three 11 or three 12.
Those are the ones that I got right now.
So I'm with you.
I tried to, I did not put too much stuff on there.
The only reason I really have older stuff on there is because I haven't gone to the trouble
of removing it because there's so a bunch of virtual environments I've created off it that
I wanted to deal with.
But ideally I would just have the latest.
Yeah.
I think, I think my normal, I don't know what I've got, but it's, it's the, well, with
the packages I maintain, I usually have the newest and the oldest that I maintain.
And so three 12 and then however far back I wanted to go.
Yeah.
And then so that, so that talks can find those and I can find those locally, but yeah.
Yeah.
You know what I might do?
I'm not doing it because I don't have a huge set of older pythons I test for.
But if I was like you where I did that, maybe I'd have Docker.
We have some Docker container, so older ones, you could just do Docker run Python, this
command, you know, this file or whatever.
I don't know.
Yeah, maybe.
Keep it cleaned up.
Yeah, but they run side by side pretty well.
So.
Yeah, they do.
Anyway.
Just got to keep your path in order.
So just path.
Just path.
Just Jack.
So should we have some fun, something funny?
Ah, yes.
This one, actually I got it pulled up, but this one is from you.
So I'm going to let you take the lead on telling us about this joke here.
Okay.
So I saw this on LinkedIn, actually.
It's from Matt Watson.
Don't know him.
But it's pretty funny.
So we've got some definitions of some software definitions for you.
So starting, I've got a whole bunch of them.
So we'll try to go through them.
Technical debt.
What technical debt is move fast and don't fix things.
Agile development is admitting you have no plan.
Test driven development, guessing the future one test at a time.
I love that.
Open source is asking somebody else to fix it.
Yeah.
It's not always working.
Maybe a slightly different term based on the topic I said this week.
Running someone else's code from the internet.
Yeah.
Right.
Yeah.
Right.
So CICD, automating your mistakes into production.
That's awesome.
API is also asking somebody else to do it.
DevOps.
I love this.
DevOps is the belief that more tools fix any problem.
Microservices are creating enough small problems to avoid one big one.
Cyber security is playing hide and seek with hackers.
And serverless is pretending servers don't exist until the bill comes.
Oh, yeah.
Scrum.
I like that.
Scrum is group therapy for being behind schedule.
Nice.
Hi.
My name is Michael.
I'm blocked.
Hi, Michael.
I've been blocked for two months.
Yeah.
That's great.
Yeah.
We have to do that.
Next, I'll have to try to incorporate that.
There you go.
Thanks, Brian.
Well, thanks a lot.
Thanks again for a wonderful episode.
And thank you, everybody, for helping to make Python Bytes a wonderful podcast.
And we don't ask this much, but if you find this amusing or helpful, please share with a friend.
And you can sign up for one of the great ways to do that is to sign up as a friend of the show.
Get the newsletter, and then you can send that.
You can spam your friends with that.
We're not going to spam people, but you can.
So thanks.
Indeed.
Yeah.