Transcript #399: C will watch you in silence
Return to episode page view on github00:00 Hello, everybody. Hello, Michael.
00:02 Hey there.
00:04 We really should have kicked off the shift to Monday next week instead of this week,
00:10 because this week's a holiday. We're on Tuesday.
00:14 It was a leap Monday.
00:16 Or the reverse of that or something.
00:18 So next week will be on Monday.
00:20 But it's good to be here.
00:22 Should we kick it off?
00:24 Let's kick it off.
00:26 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:32 This is episode 399, recorded September 3rd, 2024.
00:37 And I am Brian Okken.
00:39 And I am Michael Kennedy.
00:41 I always have to check the date, because I write down in the notes what the date is.
00:45 But sometimes I start the notes a day early and I get the date wrong.
00:49 But yeah, it is September 3rd.
00:51 Anyway, thanks everybody for joining.
00:54 Thank you, everybody that has supported our work.
00:57 This episode is sponsored by us.
00:59 So please check out our courses.
01:01 And also thank you to Patreon supporters for helping out.
01:05 If you'd like to connect with us, you can always connect on Mastodon.
01:09 The links are in the show notes.
01:12 And you can join us live.
01:16 If you check out pythonbytes.fm/live, you can see when we are next.
01:22 Usually upcoming, going to be on Mondays at 10 a.m.
01:27 And finally, if you'd like to join the friends of the show list, or what that is, is the email list, so that you get mostly,
01:37 you'll get the show notes with all the links to everything we talk about in your inbox, which is a good thing.
01:43 So send that out.
01:45 But let's get on with the show.
01:46 Michael, what would you like to start with?
01:49 I would like to talk about virtual environments.
01:53 Cool.
01:54 How about that?
01:55 Yeah, actually, this is a really fun topic.
01:57 This comes from Henik.
01:58 He wrote yesterday an article.
02:01 I feel like this is one of the things you write where it's like, "All right, I'll write it down."
02:06 You keep asking me.
02:08 I'll write it down so we can just have it there to point at.
02:12 And that article is entitled, "Why I Still Use Python Virtual Environments in Docker."
02:17 So I was checking out this thing that Henik wrote about using UV and its project management features inside of Docker containers,
02:26 and there's a bunch of funkiness.
02:28 If you look at his article, he links over to a GitHub post, a GitHub issue, I guess.
02:35 And there it's, you know, we've got Henik jumping in.
02:40 You've got Sebastian from FastAPI jumping in.
02:44 So there's like a bunch of pretty significant folks going, "Almost a little more help for us Docker people."
02:52 So as I've talked about before, Python Bytes and all the DocPython things and other infrastructures running in Docker these days, it's glorious.
03:03 We've got one big server with eight CPUs and 17 different multi-tier apps running on it.
03:10 It's fantastic.
03:12 And I happen to use this as well, and I just thought it was really interesting to hear Henik's recommendations, and mostly on the whys.
03:21 Okay.
03:22 Because with Docker, the Python in the Docker container is really only going to be used for the particular app that's being shipped.
03:32 Like you usually put just one thing into a Docker container, one app, and if you need two apps, you often run two Docker containers.
03:40 Why not just blast on the built-in Python or something along those lines, right?
03:45 Yeah, you're not trying to isolate from anything.
03:47 Exactly.
03:49 Well, I can just hear Henik now going, "Yes, but..." Let me write this down.
03:56 So let's flip over to Omnivore app because that's what you should be using.
04:03 If you do long-form reading and note-taking, Omnivore is that.
04:07 And this is great for notes.
04:10 This is why I still use this, right?
04:11 Like what's going on here?
04:12 It says, "As an overarching theme, my goal, Henik's, is not to mindlessly follow some best practices that add complexity for questionable payoffs because a big tech developer advocates so at a conference,
04:26 but to spend a lot of time thinking about what secondary effects things that you do, and it's not so much about how many keys you got to press, but how hard is it to reason about what's going to happen as a consequence of a particular setup, you know?"
04:41 Okay.
04:42 Yeah, so that's fair.
04:44 And basically, it says, "Look, people understand virtual environments really, really well.
04:50 It's the whole goal of virtual environments is to hold a single application.
04:54 If I tell you in documentation or a meeting or a talk or a course or whatever, 'Hey, what we're deploying is a virtual environment,' you're like, 'Ah, I know what that is.
05:04 That's pretty straightforward.'" And this is Henik's words, "It's the closest thing that we have to an enclosed, standardized, and well-understood application build artifact in Python."
05:16 The stretch, he says, but he thinks of virtual environments as the result of linking a dynamic binary and compiled languages, which is pretty interesting.
05:24 Yeah, I can see the analogy.
05:27 Yeah, I do too, totally.
05:28 So you've got your Python source code.
05:30 You've got your list of dependencies.
05:31 That's kind of like your statically linked libraries in your compiler.
05:35 And then what you get out is the actual libraries, not a list of names, and your code, potentially UIC files, precompiled, et cetera, and so on.
05:47 So I think that makes a ton of sense.
05:49 It certainly seems that way to me.
05:52 And it's good to use the same tools and primitives that you have in development and in production so they're not vastly different.
06:00 And in development, you typically use virtual environments, so why not in production, right?
06:05 Yeah.
06:06 Moreover, import complexity debugging says, "Did you know this? You maybe know this. I didn't know this, actually.
06:13 If you pass -I to Python, then it limits where the imports come from and it will only import from either the standard library or the virtual environment and nothing else, as opposed to, say, falling back to, well, it's not in the virtual environment, so it's in the Python path or so it's in the --user version or whatever, right?"
06:41 That's kind of nice.
06:43 And then finally, as a bonus, it says, "I'll have no fury like how I feel about pip install --user."
06:52 So, you know.
06:55 Anyway, it's an interesting thing.
06:57 You can check this out.
06:59 And I follow the same philosophy, but I didn't, in my mind, have it as crystallized as what Henning did.
07:09 So I really like this take on it, and people who get this podcast, visit the website, or even just get the MP3, all that is happening through a virtual environment running Python 3.12 in a Docker container.
07:22 How about that?
07:23 That's pretty cool.
07:24 It is pretty cool.
07:26 It is, it is.
07:27 But I'm not trying to convince you to do anything.
07:30 Okay.
07:32 Kind of is.
07:34 But don't tell me that I'm wrong.
07:36 Yeah, sure. Okay.
07:38 You can get the vibes there.
07:40 Anyway, well done.
07:42 People can check that out.
07:44 Nice.
07:46 I want to talk about the developer survey.
07:48 This is done by the PSF and JetBrains, and this is still not on the screen.
07:55 Ah.
07:56 There we go.
07:57 There you go.
07:59 The developer survey with --it's funny, developer S is on the next line.
08:06 That's funny.
08:08 Anyway, 2023, it's 2024.
08:10 What's going on?
08:11 Well, they do this kind of at the end.
08:14 It's from November of 2023 to February of 2024 is when they're collecting it.
08:18 And then they analyze it and come up with this cool thing.
08:22 And so that's why we get it a few months later, which now we're ready.
08:26 So anyway, let's look at some of the cool results.
08:30 So this is pretty neat.
08:31 They've got the contents broken out into all sorts of stuff, Python versions, data science.
08:35 There's a lot of data science stuff in here now.
08:38 But there's a bunch of stuff I thought was interesting.
08:40 We've got 85% of the survey respondents use Python as their main language versus secondary.
08:48 Hey, Brian, before we go on, I have not seen this at all.
08:51 I didn't even know they were out.
08:53 Oh, really?
08:54 So whatever I say is first reactions.
08:55 I'm loving it.
08:56 I'm getting new experience at this point.
08:58 Cool.
09:00 And, well, did you submit the survey?
09:03 Yeah, I filled it out a long time ago.
09:05 I believe those numbers, the 85% main, 15% secondary, is identical to last year.
09:10 I can't remember for sure, but it's very, very close.
09:13 It's interesting.
09:14 A lot of the results, they show what the last year's results were, but some of them they don't.
09:19 They're just highlighted.
09:20 So maybe you can probably get the data or something.
09:24 Anyway, the Python usage with other languages, I thought it was interesting that the JavaScript
09:32 and HTML is down a little bit, just a little bit.
09:37 It was 37%.
09:39 JavaScript's 37% in 2022, and this time it's 35.
09:44 HTML was 36, now 32, so it's gone down a little bit.
09:49 Super interesting.
09:50 You wonder if is that an actual decrease in use of HTML and JavaScript?
09:55 Are there more people coming into Python, like on the data science side, that don't care about HTML and CSS and JavaScript?
10:05 Maybe it's being diluted but not lessened, or maybe it is less.
10:09 I don't know.
10:10 Yeah, I don't think it's lessened.
10:12 I think just more people are using Python.
10:14 And Paul Everett notes that the drop in HTML and JavaScript might show that data science is increasing its share of Python, and I think that's true.
10:24 I think that machine learning and data science is taking -- there's more people coming into that than web development, I guess.
10:34 So I think that's there.
10:36 The Rust was interesting, because we talk about Python and Rust a lot, and it's increased, but it's still 7% of the respondents are using Rust also.
10:50 But those 7% are doing some cool stuff, so go Rust.
10:56 Anyway, usage with other languages, primary versus secondary.
11:01 Yeah, no surprises.
11:03 JavaScript, HTML, SQL, C++ down at the bottom.
11:09 Let's see.
11:12 Skip down a little bit.
11:14 This is interesting, especially for people like you and me that train other people and teach other people stuff, is to remember that a lot of people have only been using Python for a little while.
11:26 There's 25% less than a year, but if you combine the less than a year and one to two years, it's like 40% have been using it less than two years.
11:40 So you really can't assume that people know a lot of the Python history and stuff like that.
11:47 The other thing that was interesting is absolutely new to coding, even if it's not Python, that's similar.
11:53 It's like 50% of the population is under two years, or at least of the survey respondents.
11:59 But I would have expected the survey respondents to be more edged towards experienced folks, myself.
12:07 Exactly.
12:11 37% of Python developers reported contributing to open source.
12:15 That's awesome. In the last year, that's actually higher than I would have expected.
12:20 But that might be, again, the population of survey respondents.
12:26 But yeah, interesting.
12:30 Most contributions are in code, 77%.
12:33 38% documentation.
12:35 Only 33 tests.
12:38 That's a bummer. We got to bring the tests up a bit.
12:42 I don't know what this is. 34% of Python developers report practicing collaborative development.
12:48 That like pair programming and stuff like that?
12:51 Maybe.
12:54 Let's see. Oh, look at this. Favorite Python related resources.
12:58 I think this is new this year.
13:01 We've got YouTube channels, podcasts, blogs. Of the podcasts, we've got Talk PythonToMe. Congrats.
13:07 It's not ordered. It's just the top, I guess. But I think it might be ordered.
13:12 Talk PythonToMe, Lex Friedman, that's a good one.
13:15 Real Python people. DjangoChat, I love those guys.
13:18 Core.py, Python Bytes, and then PythonTest. I was not expecting to have that show up.
13:25 That's awesome.
13:26 That is awesome.
13:27 We've got three podcasts in that list. That's incredible.
13:30 I probably, I changed, just this last weekend, I changed PythonTest back to test and code.
13:39 Just right click on the page, Brian, and say edit, inspect, and then edit HTML, and it'll be fine.
13:48 I don't know how to save it after that, but it'll look fine for a little while.
13:52 Yeah, so if you click on it, it goes to PythonTest, and you can click on test and code at that point.
13:58 So let's just, I guess I'll leave it at that.
14:03 I'm not changing it again. It's sticking to test and code for a while.
14:06 Anyway, okay. Do you use it for work or fun? 51%. Use it for both work and personal.
14:14 So that's fine. Only 21% for just for work, which is cool because Python is so fun.
14:21 You should do it at home also, I guess.
14:25 Once you learn programming, you see the problems at home, you're like, that has to be fixed.
14:30 There will be some code written that will fix this problem, whatever it is.
14:34 Yeah, yeah.
14:35 They added what you use Python for. They've added some categories.
14:40 So some of the, it's hard to compare the numbers year over year because there's new categories.
14:45 Like for instance, data analysis is still at the top at 44%, but it was 51% last year.
14:52 But there's also data engineering and academic research and ML Ops added.
14:58 And data visualization, yeah.
15:00 Yeah. So, and oh yeah, design, data visualization.
15:05 Those are all, it's like tons of, that's what people are using Python for.
15:11 So we could rename the podcast, the language that uses, that people use data analysis for podcast or something.
15:22 I don't know. Anyway.
15:25 Where's testing? I think testing's in. Oh, testing has gone down to 23%.
15:34 We have so many users now, we don't need to test as much. They can do it.
15:37 I think it's the data analysis people. I don't think they test as much as they should.
15:41 Well, when you're exploring data, you don't need to write tests.
15:44 It's not, you're not going to keep it and throw it away anyway.
15:48 Yeah. Your data doesn't have to actually be right. It could be wrong.
15:53 You're just like making decisions for the country based on it, but you know, whatever.
15:58 Okay. Anyway, a whole bunch of fun stuff through here.
16:03 Oh, there's a whole bunch of stuff around doc data analysis stuff that I didn't really dig into,
16:10 but I did think that the Python version was interesting.
16:14 There's still Python 2 people around. There's 6% of the people using Python 2, which is, I don't know why.
16:22 But anyway, 2 will not die.
16:25 And I think that's pretty much it's got, we went down 1% over last year.
16:31 So that I guess we're making progress. That long tail will take a while.
16:35 Of the other versions of the Python 3, looks like 3.10, 3.11, 3.12 are the tops, which is what you'd expect, I guess.
16:45 So it's good. 75, almost 75% use the last three versions.
16:51 So this is great. And Python.org is the most used way to install.
16:58 So next year we'll see about UV Python install. That's another one.
17:04 That's because they had some others, right?
17:08 Yeah, I might have to add that. I think that we'll probably see that with, that was like virtual environment stuff somewhere.
17:16 Can we look at web frameworks real quick? I know you just scroll by them.
17:20 Web frameworks, Flask, Django, Requests, FastAPI.
17:23 Still don't know how these fit together. It's like, what language do you use? C++ or CSS?
17:30 I don't know the question. So I'm going to say that because we have Flask and Django, but we also have HTTPX, which is a client.
17:38 It's like, do you use Firefox or Flask? It's like, huh, interesting.
17:42 Anyway, it's like Requests.
17:44 Requests as well. I think it's in the web category, but I feel convoluted.
17:50 But nonetheless, Flask, Django, and FastAPI, I think it is super interesting.
17:54 I think Flask is gaining a lot of momentum for a second wind or fifth wind or however many winds it's had plus one.
18:02 It seems like it's getting a lot of momentum these days because I feel like it had fallen a little bit, certainly relative to FastAPI.
18:10 So that's interesting.
18:12 David Lord's been doing a bunch of cool work on it and other people of cleaning it up and getting rid of some of the old stuff.
18:20 I had him on Talk Python to talk about the state of Flask and palettes in 2024.
18:26 Maybe that's where I got my information from. I just listened to that last week.
18:29 Did you? Oh, nice.
18:30 Good episode.
18:32 Test frameworks, pytest is at the top, 52%. Yay.
18:37 Built-in default still carries a lot of weight there, though.
18:41 Unit test, yeah, 25%. 2% for Nose, that must be all those Python 2 people using Nose still, maybe.
18:49 Same with this, like Hypothesis and Mock, those can be used with any of these things.
18:58 Yeah, exactly.
18:59 And I would like to see the numbers from last year. I can't remember. I'll have to look those up.
19:04 I'm hoping that OK is in the list. We haven't talked about that yet, but we'll try to get OK at 2% in a couple years.
19:12 Yeah, more fun stuff for data analysis, whatever.
19:17 Lots of data science, half of it's data science.
19:20 But anyway, fun survey. It's good to check out.
19:24 And especially look around November, then.
19:27 We'll bug you in a couple months to go take the survey for next time.
19:32 Yep. I always really look forward to this. It's insightful.
19:38 Yeah. All right.
19:42 All right. Well, previously, Brian, I remember you had an article that you covered that was like,
19:50 "Python for Excel was not what I wanted it to be," or something like that, right?
19:55 Yeah.
19:56 I needed a replacement for VBA, and what I got was advanced functions in cells, or I don't know.
20:02 One of them types of things.
20:04 One of the limitations, several of the limitations, were somewhat annoying.
20:09 One limitation was, well, you can pip install, or you can import third-party things from this shorthand list of a couple of them that are common,
20:20 like NumPy and Pandas.
20:22 That might make sense.
20:24 And if it's not there, then c'est la vie.
20:27 So it goes.
20:30 The other one was that in order to run your code, do your Excel things, your Excel had to go and upload and actually execute your data and code in Microsoft Azure or somewhere in a container somehow.
20:46 There may be privacy concerns, but even just from a, "I'm on an airplane," or, "I'm in a place that has crappy internet,"
20:52 or, "I'm at a coffee shop and don't have good internet, but I still would like to do some work."
20:57 Just any disconnected scenario whatsoever was not ideal.
21:02 So the Anaconda folks who were providing some of the foundation for that through Anaconda,
21:10 the distributable Python environment for that, they came out with this thing called the Anaconda Code Add-In for Excel, which solves some of these problems.
21:22 It's pretty cool.
21:24 So what's, I guess for some people, the main takeaway might be that you can run it locally, which is pretty awesome.
21:33 But I think what's more interesting is that this is based on PyScript.
21:39 Remember PyScript, the Wasm version of Python on the front end?
21:44 Yeah.
21:45 Yeah, and I imagine it must be based on the Pyrodied, not the MicroPython version,
21:52 which would make it pretty robust in terms of what it can do.
21:56 But what's really cool about that is you can run it locally without any setup or install,
22:02 so you don't even have to have Python locally because it just grabs a Wasm thing off the internet or ships with it.
22:08 Probably ships with it.
22:10 And that's pretty cool.
22:13 It also says it will run cells independently.
22:18 So in addition to running Python cells in row major order, which is kind of tricky,
22:24 meaning any cells with Python code will rerun any time any Python cell has a change,
22:29 it can also run them independently.
22:31 So cells containing Python are only rerun if the cell is modified.
22:35 That's kind of interesting.
22:38 But this is the most interesting, a customizable environment.
22:42 It allows you to basically pick any package from PyPI that can execute on Wasm.
22:50 So there's certain limitations there, right?
22:54 Like if it's based on binaries that are not available or something that can't work.
22:59 But that's a much bigger thing than the four or five packages that came with Python for Excel
23:05 or whatever the official name of that is, right?
23:08 So this is really, really cool.
23:10 On top of that, there's a init.py that fires up whenever you opened up the Microsoft Excel Python variant.
23:21 With this one, that thing's static.
23:23 It's just whatever it is, it is.
23:25 But with this one, you can edit it.
23:27 So for example, if you have functions that you often call and you want to be able just to quick have them
23:33 and not retype them into every Excel sheet or whatever, you can write little utility functions and other helper things and import libraries,
23:43 import whatever library as alias, and then you just have those automatically available.
23:49 So it kind of sets up your spreadsheet for easy use.
23:53 So you can do really advanced things.
23:55 That's pretty cool.
23:56 Yeah, yeah, so that's really cool.
23:58 You can write your own little packages too.
24:00 Exactly, like you could create little helper functions and other types of things
24:04 and not have to do them in the little editor window of Excel.
24:08 Also, it supports better data types for working with NumPy.
24:12 And yeah, I think that's about it.
24:17 But if you were thinking this was pretty close but it's not quite, this might actually push it a little bit farther.
24:25 So it runs locally based on PyScript.
24:28 Install your own libraries as long as they run on PyScript.
24:32 And honestly, this might even push PyScript to be better, right?
24:36 Getting some people to adapt libraries where they're like, "Why would I do that before?"
24:39 Like, "Oh, now it works in Excel." "Okay, I'll do that." Now that seems like a big enough reason to work on compatibility with Wasm.
24:47 Yeah, with both of these solutions though, the things that I know you probably know the answer,
24:52 but when sharing a spreadsheet with somebody else, do you have to have like a save a share requirements file or something like that?
25:01 Sort of.
25:02 So it does say this here.
25:05 It does say once an environment is created, this list of IPI Wasm libraries, like a requirements file, it will be pinned.
25:16 So when users share notebooks, the spreadsheet will retain the exact environment for all of the users.
25:21 So I'm imagining if you've got this add-in installed and it sees the workbook or whatever it's called,
25:29 it's probably got a list of some sort of startup code, like based on this version of PyScript and Python.
25:36 And then here's the list of dependencies, and it probably just grabs it from the internet like a browser would and then goes.
25:41 Yeah.
25:43 But I also don't know what happens if you share one of these with two people.
25:49 Yeah.
25:51 Cool.
25:53 Awesome.
25:54 We were talking about David Lord and Flask already, but now I want to talk about a blog post he has.
25:59 So David Lord, he keeps up a lot of stuff, and he released an article called Disabling Scheduled Dependency Updates.
26:09 Yes, please.
26:11 I kind of see that with Python Bytes, because you have like what, Dependabot turned on and stuff?
26:18 I thought I turned it off, but it won't go off.
26:20 It's driving me nuts.
26:22 So, and David's even had, so he's looked into, he's got like 20 active projects that he is,
26:32 even though they're low activity projects, there's 20 projects that he's keeping an eye on.
26:38 And there's, within those, a lot of them are like libraries.
26:44 So you're not really, you think you don't have to update the dependencies.
26:48 For applications with a requirements.txt file, you totally do.
26:52 You have to keep those up.
26:53 But for projects, for like libraries, we usually keep those open.
26:58 We don't pin dependencies, but we do pin development environment and CI environment and all that stuff.
27:05 And that's a lot of what he's talking about.
27:07 So the environments or what he calls ecosystems are like the requirements file for development environment.
27:15 He keeps those up with pip compile.
27:17 And then you've got pre-commit hooks, because you're testing a lot of stuff and those hooks might update.
27:22 So you have different hook versions.
27:25 And then you also have GitHub actions within CI workflows.
27:29 So there's things like checkout and the other, there's lots of things you can do with GitHub actions.
27:36 Those may have been updated.
27:37 How do you keep track of those?
27:39 So he potentially has three commits, any bot times 20 applications going on because of these dependent bots and things.
27:51 And that's, it could be more if you didn't pull this down.
27:58 But he set everything up to only notify him once a month for these things.
28:02 But still, even only once a month, that's like 60 emails at once a month and having to deal with that.
28:09 So for a lot of these projects, what he's done is he's went down to doing it locally.
28:14 The idea is then you've got, you use talks or something.
28:19 Yeah, he's using talks with some labels to do some stuff.
28:23 So locally, he will run pip compile to do a new development environment.
28:31 And then also GitHub actions.
28:34 And there wasn't a local version available.
28:36 So he wrote GHA update, which is a new little GitHub action updater that you can go out and look to see if there's any updates to your GitHub actions.
28:49 So very cool. Thanks for that.
28:51 And then also pre-commit doing an auto update for everything.
28:55 So yes, this is like you might be a risk to like just update everything on a project.
29:01 But that when should you do this? This is for development environment.
29:05 So instead of having and this is the idea around it also, if you've got a project that isn't doing a lot of development,
29:13 it'll look like there's a lot of development going on with the GitHub history.
29:16 And it's just these dependency updates.
29:19 Or you look at the PRs and it'll say 500 closed PRs, but there's only one real PR.
29:25 Yeah. But then there's also like, it's mind shift to the shifting, you're shifting how things work and remembering,
29:34 you know, what your test situation is and everything for these projects is jumping around.
29:39 So instead, it's when like on a day when he's looking at something, he'll go, oh, these haven't been updated for a while.
29:46 I'll go, I'll go update while I'm working on it.
29:49 I'll update all of these things. And then he can do that as one of the one of the commits on a day that he's working on it anyway.
29:57 So the so the activity looks is closer to when he's actually working on something.
30:02 And, you know, of course, like we're talking about, this is more important.
30:06 If you're it's less important for development environment fixes because that users aren't affected by it for libraries.
30:14 If you have runtime dependencies, you really should be checking that more than once a month.
30:19 But for for for development environment stuff, I think this is cool.
30:24 So I'm going to take a look at this as well.
30:27 I love it. I'm going to make another effort to disable more depend upon stuff because it's so, so wordy.
30:35 There's an issue somewhere on GitHub.
30:37 I can't remember on where you go and complain about Nevada offer feedback and learnings.
30:45 I believe there was one about could we please have a digest instead of a separate email and a separate PR?
30:55 They're like, no. Why would you want that?
30:58 Because I like I'm not quite as bad off as David because a lot of my projects and repos.
31:04 I'm like, no, I'm not trying to depend upon at all, but it's the important ones I did.
31:08 And I woke up this morning and probably 40, 40 PRS.
31:13 You know what?
31:15 Just tell me I could get some updates for this thing.
31:18 I'm not going to do them one at a time.
31:20 I'm not going to say, oh, you know what?
31:23 Let me reschedule this week and we're going to go through one at a time and we're going to see how they work.
31:28 Right. It's it's not. Yeah.
31:30 You know, missions are not enough flight control software for a spaceship.
31:35 It's like it's a website. If it doesn't work, I'll roll it back.
31:38 And I know what I'm using this stuff for.
31:40 Like if if some of these things update, if I got six updates, I'll update them all.
31:47 If all the tests pass, I'll look at it.
31:50 And it's fine if if all if I've got good coverage and I'm really testing the heck out of something,
31:57 it should be fine. If it breaks, then I might, you know, take a go roll.
32:01 Look at that more closely. But it's only usually going to be one dependency that's mucking me up.
32:06 It's not going to be breaking for several reasons.
32:09 Exceedingly rare that a change in a dependency will cause cause a break.
32:15 Is he only using a little bit of the app?
32:17 Usually the last time that I got one was Mongo engine updated and it wasn't dealing with multi threading correctly.
32:26 And even their testing didn't catch it because it only appeared when you're doing production web servers like grain,
32:37 you know, micro is here or something and then processing multi multiple requests in a Reddit scenario.
32:42 So even doing like web test stuff on it.
32:45 It didn't surface those errors, you know, says, well, you know what?
32:50 We're going to roll that one back and wait till they fix it.
32:52 Then I'll roll it back to one step back, two steps forward and we'll be fine.
32:57 And so the way I were, I really usually get hit with with deprecations.
33:04 So I'll run a run the test with with all weren't like deprecation warnings turned all the way up so that so I can see those.
33:14 And then you can have the have the decision of should I should I deal with that deprecation right now?
33:19 Or should I I can schedule it then turn that off and schedule the deprecation notice.
33:24 It's not that it's broken. It's just it's not going to run like this forever.
33:29 I might want to use the new interface or something like that.
33:32 Now, David, I feel your pain and thanks for writing the article.
33:36 Yeah. All right. Now we're done with our main topics.
33:39 Yes, now, indeed, we are.
33:41 And I don't have any extra other than the note that I have decided to switch.
33:47 So, OK, I'll just go and do this right now since I already got my screen up testing code.
33:52 I already have it. Test and.
33:57 Code dot com. I had it up. There we go.
34:01 OK. Episode two hundred twenty one was in June and it was a two parter.
34:06 It's part one of a two part two part episode two episode series.
34:10 I don't know why I just dropped the ball and didn't do part two.
34:13 So this week I'm planning on releasing part two so that people can catch up.
34:19 But it's now a testing code. That's my got to close that loop. Excellent.
34:24 Now, I got a couple some highs and lows, if you will, Brian, and all in between.
34:30 OK, check. This is exciting. Check this. This.
34:34 This merged PR for you need that.
34:37 So you need that manages dependencies across conda and pip managed environments.
34:42 It's super cool. We talked about an episode three sixty six.
34:45 OK, we also talked about. Just path, which added a badge.
34:51 Python bytes three seven seven. Oh, cool. Pretty cool. Right.
34:56 Remember we talked about that. Yeah. Well, this PR adds the badge.
35:00 So if you already you need that. You can see it's got.
35:05 I.P.I. version. I test passing code coverage number stars and Python bytes three sixty six.
35:10 So we have a another badge signing. I would point this out mostly to just say, hey, people,
35:15 if we talk about your stuff and you want to link back to the episode, this badge is a cool way to do it.
35:20 OK, and where where again do people get the code for the badge?
35:23 They can just well, actually, you can look at that PR and it'll show you if you had a file changed.
35:30 It's just this link, this image shields badge, Python bytes, the number of the color.
35:36 Yeah. And then put in the length where it goes to even even links to the time when their topic was discussed.
35:44 So it's pretty cool. Neat. So I would I would say based on the unique depth PR,
35:48 just grab it from there or just grab the code from the readme. Cool. Cool.
35:54 All right. We'll do this one next. Started using this thing called raindrop.io.
36:00 I talked about Omnivore. We talked about before, but it's like reminded people like you should be an omnivore.
36:05 It's awesome. I don't use it, but you should you should be using a brand.
36:09 You should. But if you if you had something like delicious, you remember delicious.
36:13 Yeah. Or those things where you would save links or parts.
36:16 And I don't I don't hardly ever use my bookmarks in my browser because they're so they're so poorly poor to get to and stuff.
36:25 The only reason I make a bookmark is maybe so autocomplete for my browser address bar might pull something from there.
36:33 You know, I started using this thing called raindrop, which gives you a whole bunch more options.
36:38 And it's kind of like a more modern, delicious. And from what I can tell, it's got pretty strong privacy.
36:45 For example, I think when you install it as a browser plug in, which you don't have to even.
36:49 But if you did, it doesn't ask for access to the page content unless you enable certain features like it will completely download the page and save a history for you in case the page changes or goes away.
37:01 The website goes away. Your bookmark will still have the content, stuff like that.
37:05 Anyway, people check that out. It's pretty cool.
37:07 I have to check it out. What I really want is a bookmark manager that like.
37:11 Automatically deletes junk I haven't visited in like a year.
37:15 Yeah, exactly. You don't seem interested in this anymore.
37:18 I, I, before I imported all my bookmarks into it, I had to do I deleted like half of my bookmarks because they were.
37:26 They were bad. They were old and duplicates and weird.
37:30 All right. How about a little bit of drama? I don't want to talk too much about this, but I think it's worth putting out there.
37:36 You can look into it and make from what it what from it you will.
37:40 There was an incident where one of the core developers was suspended, given a three month suspension or something like that.
37:51 And I'm sure a lot of people have heard about this, but then there was a follow up or Gideon Rossum posted something referring to that person, not even by name.
38:03 And their post was removed for violating the guidelines.
38:07 We're mentioning that night. I don't know. This is I feel like this should be.
38:11 People are aware of this kind of stuff is going on, but I don't know enough about it to take a side or have a strong opinion.
38:20 But it seems important.
38:23 So, well, OK, just to make sure that we're aware that the post that they're talking about here did get put back.
38:33 OK, so it got put on. The post got put on timeout.
38:38 Trust. OK.
38:41 Anyway, people can check it out. It's like they're.
38:46 Nearly final call for the coding in a castle in Italy.
38:50 We put up a five hundred dollar last minute special. So so got some seats left and I'd love to see you there and talk Python for six days and.
39:01 Enjoy Italy together. So hopefully people can make that up with that in the links as well. And that's all I got, Brian.
39:07 OK, well, I want to show you that. So the the this is the it was a right choice voting thing.
39:15 And Guido said something and he referred to the band person.
39:21 And for some reason that got hidden for a while and people were like, why would you hide that? But it's not hidden anymore.
39:27 So, yeah, I'll just read the whole post. I don't know much about voting systems, but I know someone who does.
39:32 Unfortunately, he's currently banned. Maybe we can wait until his three month ban expires and ask him for advice.
39:37 It doesn't seem that controversial to me now. But anyway.
39:42 Yeah. Anyway, you know, it's not funny, though, is it?
39:46 It's not very funny. It's not. Well, we need something funny.
39:49 Exactly. Exactly. Well, you know. I know you do some C program and C's pretty funny, right?
39:57 Yeah. So this I believe this is a sidebar from a Rust.
40:04 A Rust book and the title is C will watch in silence. C is a watching.
40:13 And I can't unsee this image. So side note, other programming languages.
40:18 Hold on. You might say other programming languages don't require me to think about lifetimes.
40:22 Why does Rust make it so complicated? The C programming language will happily let you access memory has been freed, leading to undefined behavior.
40:31 It'll watch in silence as you walk off the edge of a cliff.
40:36 He will watch you. Do you feel when a C watched you? Have you ever watched you?
40:42 C is. You do a lot of C. Yeah. Yeah. Right. I read a lot of C.
40:46 Do you feel like it watches you? No. That's the joke I got.
40:53 Yeah. It's an entire tool belt and you can shoot yourself in the foot with it if you want.
40:57 But yeah. No, I mean, it's a fair point the book is making, but it's.
41:01 Yeah. We'll watch you in silence as you walk off the edge.
41:04 OK. I got another funny thing that that sort of a comment from Marco says, if I recall correctly, in 2022, none was the most second most popular testing framework.
41:20 Cry emoji. Well, I expanded the list and none is still 36 percent.
41:27 It is still the second most popular. I love it.
41:31 It was like, we're just going to put under the show more tab.
41:36 36 percent of the answer. None.
41:41 In fact, it's nearly beating all other true test frameworks.
41:47 I think it is maybe all of the true test frameworks other than PI tests combined.
41:53 Yeah. Well, because mock and and doc tests or hypothesis and stuff don't.
41:58 Yeah. Don't combine in that way, I guess.
42:03 Yeah. None. 36 percent. Maybe that's the joke. Maybe that's the joke.
42:08 The joke is the software you write without tests.
42:11 Exactly. It will watch you walk off the edge of a cliff silently.
42:15 Yeah. So anyway, fun day today talking with you about Python.
42:23 And as always, as a reminder, next week, it will be Monday for everybody.
42:28 We hope hopefully that's normal. Hopefully, hopefully we'll see what the holidays do to us. See you later.
42:35 All right. Bye.