Brought to you by Talk Python Courses and Six Feet Up consulting

#495: Banned

Published Tue, Sep 8, 2026, recorded Tue, Sep 8, 2026
0:00
00:27:46
Watch this episode on YouTube
Play on YouTube
Watch the live stream replay

Sponsored by us! Support our work through:

  • Our courses at Talk Python
  • Consulting from Six Feet Up

Connect with the hosts

  • Michael: Mastodon / BlueSky / X / LinkedIn
  • Calvin: Mastodon / BlueSky / X / LinkedIn
  • Show: Mastodon / BlueSky / X

Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am PT. Older video versions available there too.

Finally, if you want an artisanal digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

Michael #1: EuroPython 2026 videos are online

The EuroPython Society has published all 117 recordings from EuroPython 2026 on the official EuroPython Conference YouTube channel. The conference ran July 13-19 in Krakow, Poland and celebrated the conference series' 25th anniversary. The playlist covers keynotes, panels, lightning talks, and full talk recordings across Python core, web, DevOps, data/ML, embedded, and other tracks.

  • If you missed EuroPython 2026 in Krakow, this is the complete free on-demand archive of one of the year's biggest European Python events.
  • 117 videos now live on the EuroPython Conference YouTube channel, last updated Aug 17, 2026.
  • Michael’s personal watch list.

Calvin #2: The State of Django 2026: Boring is so back

  • State of Django 2026 (JetBrains/DSF survey, ~3,500 devs, 40+ countries) - "boring is so back": Django's core stays reliable while everything around it moves fast
  • Core is stable: Postgres 76–79% for 5 years running, templates ~80%, 43% already on Django 6.0
  • AI is routine now (only 10% use none) but workflow's unsettled - Claude Code leads at 35%, and 56% still just use it for chat, not autonomous edits
  • Tooling is consolidating: uv and Ruff both at 43% adoption, each replacing several older single-purpose tools
  • Type hints are winning (57% use them) but the checker is up for grabs - IDE-built-in leads at 40%, Mypy 32%, with ty/Pyrefly emerging
  • Two Django communities coexist happily: 72% server-rendered templates vs. 53% API-only - and htmx adoption jumped from 5% to 34% in five years

Michael #3: htmx 4.0.0 has been released

After 8 months of work, the htmx team shipped 4.0.0, a rewrite that moves internals from XMLHttpRequest to fetch() while keeping the API almost identical to htmx 2. Three changes may need action: attribute inheritance is now explicit via an :inherited suffix, event names follow a htmx:phase:action pattern, and history no longer caches pages in localStorage. Additions include built-in morph swaps, the new hx-partial tag, and many core extensions. htmx 2 stays supported and remains latest on npm until early 2027.

  • htmx is the go-to frontend layer for Python server-rendered apps (Flask, Django, FastAPI), and 4.0 is deliberately low-drama: nearly behavior-compatible, so teams can upgrade on their own schedule and pick up morph swaps and streaming extensions.
  • Explicit inheritance is the biggest migration item: hx-confirm, hx-headers, hx-target and friends no longer cascade to children unless you append :inherited; hx-disinherit and hx-inherit are gone
  • A CLI upgrade checker (npx htmx.org@4.0.0 upgrade-check) flags spots needing :inherited, renames like hx-disable to hx-ignore, removed attrs like hx-vars, and old event names in templates and JS
  • Events follow htmx:phase:action (htmx:beforeRequest becomes htmx:before:request); most error events collapse into htmx:error and htmx:xhr:* events are removed with XMLHttpRequest
  • History no longer snapshots pages in localStorage; back navigation re-fetches and swaps into the body, fixing a chronic support headache, with a new hx-history-cache extension for sessionStorage caching
  • New features: out-of-the-box morphing swaps, the [HTML_REMOVED] tag for multi-element updates, streaming over SSE/WebSockets/multipart, and hx-live, their Alpine-inspired DOM scripting solution
  • No forced upgrade: 2.x stays latest on npm until early 2027 (4.0 remains next) and is supported indefinitely; the team even ships official LLM skill files for guidance and upgrading

Calvin #4: 🐍 Functionally Zen

  • Functionally Zen (Kyle Adams, Test Double) - riffs on "simple is better than complex" with 7 extra tenets for Python simplicity
  • Core claims: idiomatic > non-idiomatic, data > functions, pure functions > impure functions > classes
  • Favorite example: a medical-dosage calculator replaced with a plain lookup dict - no logic, no tests needed
  • Big idea: keep a thin "impure shell" around a "pure core" (Gary Bernhardt's functional core / imperative shell) - push side effects (API calls, DB, files) to the edges
  • Side note: constructors that do I/O are "poison pills" - the side effect infects every class that depends on them
  • Payoff: pure functions and no-mock tests are just easier to read and reason about than the alternative

Extras

Calvin:

Michael:

  • Steering council voting is now open

Joke: Makes you look like this?

Episode Transcript

Collapse transcript

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:04 your earbuds. This is episode 495, recorded on Tuesday, September 8th. I'm Calvin Hendricks

00:11 Parker. And I'm Michael Kennedy. Glad to have you, Michael. If you want to support the people who

00:16 make this possible, make sure you support our sponsors, the fine folks at, oh, Talk Python.

00:21 Make sure you check out Michael's courses. He is doing incredible work over there. It's a great way

00:26 to brush up on some technology you weren't sure about,

00:29 try something new.

00:30 He's got some really cool notes.

00:31 You just released a couple of new courses, right?

00:33 Yeah, we just released a Rust course, which I think is really nice.

00:37 Yeah.

00:38 Very cool.

00:38 And then also check out the fine folks over at Six Feet Up.

00:41 They are the ones who love solving hard problems.

00:44 They do a lot of Python work.

00:45 They've been around for 27 years.

00:47 And we'd love to talk to you about doing some cool projects.

00:50 If you want to connect with the hosts online, you can find Michael, myself, and the show

00:54 on Mastodon, Bluesky, and X.

00:56 And you can also find Michael and I on LinkedIn.

00:59 But make sure you join us on YouTube for the live stream at pythonbytes.fm/live to

01:03 be part of the audience.

01:04 Usually it's Tuesday mornings, Pacific time.

01:07 Older video versions are available there too.

01:09 And finally, if you want our artisanal digest of every week's show notes in email form,

01:15 add your name to our friends of the show list and we'll never share it, but you'll get a

01:19 really cool recap of everything we talked about.

01:21 Michael, thinking about recaps, what you got?

01:23 I always look forward to when the videos of the conferences come out.

01:28 How about you?

01:29 Same. I do too.

01:30 I mean, sometimes I'm at the conference and I just miss a great talk.

01:34 And I'm so glad that many of the good ones are recorded.

01:37 Exactly the same.

01:38 And sometimes you don't miss it because you just want to...

01:42 There's trade-offs, right?

01:42 Like, I'm going to go to that talk instead of that one.

01:44 Or, oh, there's a really interesting group of people having this conversation.

01:48 And the talk is starting now.

01:49 You got to decide, do I join the group and have the experience that's not going to be recorded or do I go to the talk?

01:56 So, EuroPython2026 has all of the videos out.

02:02 And I realize I need to update what I put in the show notes because this is just my subset.

02:08 So, if you want to watch all the talks for EuroPython, 117 videos are now online on YouTube, which is great.

02:17 That is fantastic.

02:18 And quick.

02:18 Yes.

02:19 Because the conference just happened.

02:20 Yes, I know.

02:21 It's really, really good.

02:22 And I went through and said, hmm, what might make an interesting thing that I personally

02:29 would be interested in?

02:30 This is not a voting.

02:31 This is not a ranking.

02:32 This is not a good, bad.

02:33 This is Michael wants to watch this for two reasons.

02:35 Either one is relevant to me, or I might be considering it for a Talk Python episode.

02:40 Like, for example, the very first one by Giovanni Bairoliari is already out over on Talk Python

02:47 Oh, nice.

02:48 As the latest, he did a cool project rewriting asyncio

02:54 from a perspective of what if there was only free-threaded Python?

02:58 You wouldn't write asyncio exactly the same because you have the potential to split that work

03:03 across multiple threads, whereas asyncio is single-threaded, et cetera, et cetera.

03:07 So I'm finding these really interesting.

03:09 We've got Marlene Magami.

03:12 Her talk, her keynote is up.

03:14 Updates on the JIT, update on free threaded Python by Thomas Warters.

03:20 Paul Everitt is in here somewhere because it's Paul Everitt.

03:23 Yeah, look, I haven't watched, I have not watched his talk yet, but I really want to,

03:26 because he talks a lot about kind of the future of AI-driven development and local models and controlling your destiny and your data.

03:33 Yeah, exactly.

03:34 Stefan Ostrowski deploying Python web apps by Will Vincent, probably with a lean towards Django, hinted to your topics, maybe.

03:43 Maybe.

03:43 But anyway, I thought I would make my, like this morning I did it, made my watch list public because I don't know.

03:51 I went through all 117 videos and said, okay, maybe, probably.

03:55 And now I'm down to 29.

03:57 So people can check that out or they can just look at the full list.

04:00 I love that you make it a watch list so you get Michael's curated version.

04:04 And so I can go enjoy what you think might be important because maybe I follow similar topics.

04:09 So I think more folks should do that with conference videos because it's so hard to go.

04:13 I mean, there's, you said what, 117 videos, what you said?

04:16 Yeah, that's a lot.

04:17 That's a lot of time to invest.

04:19 I would venture there's probably not a single person that watches all videos all the way through, you know?

04:26 Yeah, that'd be hard.

04:27 That would be super hard.

04:28 That's just a lot of time.

04:29 That's a lot of time.

04:31 Well, and I just got back from DjangoCon, which was in Chicago.

04:34 And same time, just shortly afterwards, the PyCharm folks and the Django Software Foundation have

04:41 released the 2026 State of Django. And I love so that William Vincent also published this over on

04:48 the PyCharm blog. I love the fact that it's called Boring is Back. If you've ever read the blog post

04:56 about boring tokens, like you only get to have so many new shiny technologies, shiny tokens,

05:02 You only get so many new shiny technologies in your project.

05:05 The good news is you can have Django and you can have Postgres and they're both considered very boring and very stable.

05:11 If you look through here, it's very thriving.

05:14 Postgres is actually the database of choice for almost 80% of the respondents who are doing Django work out there, which I think is a really telling mark.

05:22 Another nice thing to see here is 43% are already on Django 6.0 months after it shipped.

05:28 So folks are staying up to date and pretty well on the stable side of things.

05:33 It was 3,500 Django developers across more than 40 countries.

05:36 So it's a fairly good representation of the world's uses of Django.

05:41 I'm sure there's a lot more.

05:42 Statistically, I think that that's a pretty big sample size.

05:45 Yeah.

05:45 I mean, they did a good job of promoting it across multiple podcasts and conferences and

05:51 things like that.

05:51 And I think it's been really well received.

05:54 They got a nice little infographic here.

05:56 What I thought was interesting is this relates to maybe a future topic of yours.

06:00 HTMX is closing in on React for the front end.

06:04 You see here we've gone from 2025, 26% of projects maybe using, or we're using HTMX to

06:10 now 34% catching up to React, which is only at 38% on the front end.

06:16 I'm pro that.

06:17 I think that's a really great sign of maybe people are looking for the simpler, more boring

06:22 side of the web.

06:23 And Django is a great place to do it.

06:25 folks obviously using AI. So it's interesting, they had a couple of special sections in here.

06:29 AI is mainstream, but no workflow is one. So whether they're using it all the time,

06:34 several days a week, once or more often, AI is dominating the workflow, but it's still supervised,

06:40 which I think it should be. The AI is here to make us better developers, not replace us as

06:45 developers. I think we've seen that time and time again, as we talk about AI on the various shows.

06:50 And so the report here, the stats definitely show it.

06:53 I mean, that's the way to get the most out of these tools.

06:57 VM is still the top of the list for managing your Python environment,

07:01 not necessarily your Python dependencies, but the Python environment.

07:04 I have a feeling uv will overtake here real soon

07:07 because once you see uv work for getting your Python version,

07:11 it's hard to go back seeing how fast and easy that is to be managed.

07:15 Docker at 31%.

07:16 So I'm also quite excited to see the fact that folks are containerizing and just using the Python coming out of the containers. That's also

07:22 a very simple and easy way to just get started on the right foot with Python and Django is use

07:28 Python that's already in a Docker container. Yeah, yeah. And we're both on team Docker.

07:32 Oh, yeah, for sure. And in fact, I'm on team VE and V in Docker for consistency across the dev

07:40 workflow. Me and Hennig. Right. I am on, actually, I use Docker, but a standard container

07:48 and install my own uv python via uv for consistency exactly same like i don't yeah i don't want to

07:53 pick some pre-made thing like well python comes with it's like it's so easy to install python

07:58 into it pick pick yeah specifically i think and you can you run into weird edge cases if you start

08:04 just kind of coloring slightly outside the lines with one of the standard python ones it could be a

08:08 c dependency or just a weirdness of you want to install something and it gets it gets hard so i

08:18 to install this way to go. Rough top of the list for code tooling. No surprises there. I think we

08:25 should see more pre-commit coming up given what we'll see down here later. There's lots of testing

08:30 going on. AI is write more code. Verification matters more. You see right here, pytest 45%.

08:37 So we will, we see lots more testing happening, which I think is also a very good sign. And I'll

08:42 talk a little bit about that in my second article as well. So I think, yeah, go check it out.

08:48 This was also part of a fundraiser.

08:50 So if you are renewing your PyCharm Pro license or looking for one, you can get 30% off.

08:56 And then you also get 100% of that purchase price goes to the Django Software Foundation.

09:00 So not an ad for PyCharm necessarily, but they are doing good out there in the world.

09:04 I like a lot about this.

09:06 Specifically, I also think this is a deeper view into Python in general.

09:11 When I saw the headline for the survey, I thought, oh, it's going to survey Django things.

09:16 Like who's using this feature, the ORM, and then who's deploying this way versus that way.

09:21 And no, it's more of a general thing.

09:23 Just let's ask the Django people what they're up to.

09:27 Yeah.

09:27 Yeah.

09:28 Nope.

09:28 Really good stuff.

09:29 It is good stuff.

09:29 I'm glad you covered it.

09:31 Speaking of good stuff.

09:32 Well, I mean, boring is good.

09:33 But you mentioned HTMX.

09:35 Well, HTMX 4 is now out.

09:39 And that's officially released.

09:40 Officially.

09:41 And it's a Jeep.

09:43 No, it's not.

09:43 Excuse me.

09:44 No, it's a horse.

09:45 It's a Land Cruiser, I believe, not a Jeep.

09:49 Anyway, there's a big picture on the announcement of some Land Cruiser jumping.

09:54 That's the same cover art for the Game Boy Color cartridge that they produced in the announcement as well, which I have.

10:01 You have? Okay.

10:02 I have. I've been playing it too.

10:03 So thank you, Carson, for doing that.

10:05 In the release, HTMX 4.000, yay for non-zero ver.

10:11 It says, after eight months of work, plus a game, and if you go to the game,

10:16 this is a real Game Boy cartridge you can get, yeah?

10:19 Yep, I have said cartridge is not made up.

10:21 It is legitimately a cartridge you can play through.

10:24 If you play all the way through, your reward is to see the source code for HTMX 4.0.

10:31 Incredible.

10:32 It is.

10:32 All right, so there's a lot of interesting changes here.

10:36 I think, first of all, HTMX has been really broadly adopted

10:40 by people who are just like, I don't want to take on a React front-end framework or something

10:45 like that. Even though all of the AI tools leap at using React for stuff, it's still really popular,

10:53 which I think people are choosing. Why do you want to develop your models twice?

10:58 Yeah. Why do you want a bunch of build steps and all that stuff just to get your app out?

11:05 Yeah. If you don't need it, don't go all in. Also, a lot of these

11:10 front-end frameworks, not HTML, but many of them encourage you to treat your back-end as a dumb

11:16 pipe that just routes data to the front-end where the smarts live. And it's fine if you want to write

11:22 your code on the front-end in JavaScript, but if you want to leverage the things that are really

11:26 nice about Django or Flask or whatever you're writing against, and just Python in general,

11:31 well, then it kind of undermines that, right? Yeah, but it's the last you just stay in the

11:35 batteries included world especially with Django like all the html like filters and helpers that

11:42 are built in to Django the framework are all still very useful with a tool like this they become

11:47 useless if you're on react like you're not going to use it right exactly exactly so major changes

11:53 attribute inheritance is now explicit it's a little is on a python isn't it um so it used to be you

12:00 could do like an hx-confirm and if some action was going to happen first a dialogue would pop up

12:06 and say are you sure you want to delete all the data and you would say yes or no but you could put

12:11 that in say a div that contains some elements and then there was a button way down if you click the

12:15 button the confirm would fire that no longer happens so you have to explicitly say at the top

12:20 in the confirm and i want this to cascade down to the children biggest part yeah except for that it

12:26 it stops working. That's the only problem. On the older code, so there's an upgrade path. It's not

12:30 major, but there is, I mean, it's kind of a find and replace upgrade path, so it's not a huge deal.

12:35 The event names have been changed a little bit. Yeah, we'll go through some examples, I guess.

12:40 So yeah, there's like, you could do an hx confirm and then a button with an hx delete, and now you've

12:46 got to say colon inherited. The events are also used to be able to say disinherit, so you could

12:52 block a child from having stuff inherited upon it? Leave this part alone.

12:56 Get away from me.

12:58 Now that's gone. Now that's gone because you just that's the default is not to inherit.

13:02 So you don't have to say don't cascade it down.

13:04 Some events were renamed. Here's the find and replace. So it used

13:08 to be htmx before request now it's htmx colon

13:12 before colon request and so on. What else? History. This is

13:16 actually, I didn't know this was happening.

13:18 This is not ideal. So history support allows you go forwards and backwards, even if, so your forwards and backwards can navigate

13:26 between HTMX events, not through just the page loads, right? So if I click a button, yeah,

13:33 and it does a load, it changes something else. And I click another, maybe another row in a grid and a

13:38 master detail, like another detail thing loads, you can go backwards, forwards between those.

13:43 I didn't know this. It used to be that in HTMX2, the way backwards and forwards worked is it would

13:49 save a copy of the pages for restoration and local storage.

13:53 I forget the storage part.

13:54 Like, wait, what if that data changed?

13:58 You know, there's two hard things.

14:00 Yeah, dangerous.

14:02 Exactly.

14:02 There's like two hard things in computer science.

14:05 Caching, naming things, and off by one errors, right?

14:08 Love that joke.

14:09 Yeah, it's there for a reason.

14:11 The caching is super hard.

14:12 And this was so, like, I thought it was just reloading it.

14:15 What's going on?

14:15 So anyway, that's gone.

14:17 Nice.

14:17 It just literally reloads it like I always thought it did.

14:20 So there's that.

14:21 And the last one is, well, there's like two things.

14:24 There's morph swaps.

14:25 So what this is, I had to look this up, folks, is a morph swap is that instead of saying this portion of the page is changing,

14:35 so we're going to get the new partial or fragment from the server

14:38 and just replace that, a morph swap will rewrite the DOM to match the new segment.

14:44 So for example, it doesn't jump around as much and those kinds of things, right?

14:49 If maybe only some tiny element, even though you replaced a whole section,

14:53 changes, it's like, okay, we'll just change the little element

14:56 because, again, master detail, like there's a whole structure of the HTML there,

15:00 but really as you click from page to page, it's just the values inside that structure.

15:04 That sounds hard as a framework, but much easier for the end user

15:07 who's building with the framework.

15:08 Exactly.

15:10 Let them suffer.

15:11 Apparently they did the suffering for us, which I love.

15:13 Yes.

15:14 I mean, honestly, it's not the point of a framework.

15:15 It is.

15:16 I mean, why would you do a framework if you're not going to leverage that?

15:20 And then the HX partial tag.

15:23 So this for outer band changes.

15:26 This is where HTMX used to be really brutal.

15:29 And honestly, I've worked on a project before.

15:31 And in the end, I'm like, oh, I kind of wish I didn't choose HTMX for this.

15:34 Because I want to update something over here and something over there.

15:37 And this part here.

15:38 And it was tough.

15:40 So this lets you specify partials.

15:43 then um elements of it that change right so pretty pretty neat um that's slick it allows you to to

15:49 sort of glue that stuff together very nice yeah so there there it is i mean and they definitely get

15:56 best launch swag gifts or whatever the game boy cartridge over the top and real i love it

16:03 i know the website you can go to the website and play it too but i didn't even have the

16:08 eminid version that's cool so everyone can enjoy it if you don't have a game boy

16:12 but that's crazy right it is super good it works yeah it's a beautiful cartridge really well done

16:17 like the game was surprisingly well done for i can't imagine what how much time they spent on it

16:22 well carson definitely is known for um interesting and catchy stuff so well played well well played

16:30 well played i love it that's awesome yeah let's head over you mentioned zen some zen of python

16:36 things. So for the final news article for me, this is actually a local IndyPy person. He presented

16:44 about two IndyPys ago, Kyle from Testable. He gave a little nice little blog post about

16:49 functionally Zen. And I kind of like going back over Zen of Python things. It's one of my favorite

16:55 talks to give at PyCon and other conferences is something more around these initial tenants of

17:02 Python and simplicity and why we love it. And for those of you who don't know, you can go to your

17:07 command line, you can type Python minus m this, and you will see the little Easter egg, which is the

17:12 Zen of Python that is in Python. Everyone should print it out, they should frame it, and you should

17:16 put it in your, above your sink when you brush your teeth at night so you can read it every night.

17:21 And you'll become a better human being instantly because you've got the Zen of Python there

17:25 available to you. But Kyle took the Zen of Python and he actually put, took kind of added into it

17:30 like seven extra tenants for Python simplicity.

17:33 So he took specifically the simple is better than complex tenant of Python

17:39 and then added these seven additional pieces that are about idiomatic code, data,

17:45 pure functions being simpler than impure functions.

17:48 It kind of goes on like in class functions being maybe simpler than classes.

17:53 So it's just a way to think about how to keep your code again simple.

17:57 There's no reason to get overly complex if you don't have to.

18:01 And Python gives you all the tools that are right here.

18:04 So you can talk about, again, he talks about being idiomatic.

18:07 There's things you need to watch out for.

18:08 For example, side effects, especially with classes that have constructors,

18:12 they can have side effects in subclasses that you aren't aware of.

18:16 So it just adds to the complexity and overhead as a developer.

18:20 Some good examples in here.

18:21 So if you looked at the idiomatic code is simpler than non-idiomatic code,

18:25 some functional programmers might be tempted to use the map function of Python to extend a list.

18:32 But there's actually a simpler way.

18:33 Just using a list comprehension is actually a clearer, probably cleaner way

18:38 for writing what you're looking for there.

18:40 So this actually loops through and does the x times 2

18:43 for x in a list of 1, 2, 3.

18:45 So now you've got 2, 4, 6.

18:46 And sometimes I think even better performance.

18:48 Not hugely, but a little bit.

18:50 Well, now the docs should be able to tell us, right?

18:51 Because I've got the notation for those things in there.

18:55 It's right in the docs.

18:56 Data is simpler than functions.

18:58 This one's a little harder to do.

18:59 I think the example was a little contrived because if you have an object that has age

19:04 with a sub-element of weight and a sub-element of lab measurement,

19:08 I don't know if you'd have that structure necessarily all the time,

19:10 but if you can get your data structured that way,

19:12 it's probably easier to use, again, a dictionary lookup,

19:15 and actually it's probably faster to use a dictionary lookup

19:18 than it is to run a function that would be taking in arguments

19:21 and looking up things based on those arguments.

19:23 So I mostly agree with that example.

19:27 This is about the impure functions or pure functions versus impure. So this pure function, for example

19:33 You're certain is always going to return an integer like it has a reliable return to it

19:39 This the second example where they're talking about fetch doubles

19:42 The first one was like a double where you just to return x times two

19:45 So it doubles the number the second one which was like fetch

19:48 Under double it actually uses requests to get the response and then it tries to return the body

19:54 looking for an answer key, that is not as stable.

19:58 It could be it returns two or four.

20:01 It could be the returns of 500 server error.

20:03 Could be the returns some other, if a developer makes a mistake someplace,

20:06 some other not expected answer or a string.

20:09 So that's just an example of what It might even return an exception,

20:13 like network not available.

20:15 And then the pure functions versus classes.

20:18 I mean, if you look at the example here, a function you can do in as simply as two lines

20:23 with a definition of the function and a return.

20:26 When you start talking about classes, you just get a lot more boilerplate going on inside the class.

20:31 So if you don't need the classes, there's probably no reason to go that direction.

20:35 And it kind of goes on and on and on here with more and more examples

20:39 that just show some simpler ways to do that.

20:42 This is the last one I'll talk about, which is the side effects.

20:45 If you have a class that has a constructor in it,

20:48 so you've defined a __init__() method, that __init__() can affect subclasses

20:52 and you may not be aware of it because you've not looked at the code for it.

20:55 So they have a time client example here with a __init__() that initializes a token

21:02 using a request post.

21:03 So it actually makes an API call in the base class.

21:06 These other ones for time service and time controller

21:09 are calling a constructor that uses that client,

21:12 which means that every one of these will also make an API request.

21:16 So you may want to manage that a little cleaner

21:19 and reduce them or say, for example, external calls

21:21 you're making in that case. The last bit I'll call out in honor of Brian Okken and his Lean TDD book,

21:28 tests with no mocking are simpler than tests with mocking. I think we can all agree, but I think

21:33 there's a world that needs to hear it. And there's a book about it. So if you check out Brian's Lean

21:37 TDD book, he talks about this as well as part of that book. So I thought that was pretty apt and

21:43 timely that this came up. And thanks, Kyle, for helping remind folks of the simpler ways and the

21:49 nice idioms that Python gives us out of the box. I really like it. I remember when I first got into

21:53 Python, I hear Pythonic. I'm like, but I need examples. These words are great, but give me

21:58 examples so much. Yeah. I learned by example. And these are just great examples of like, oh,

22:03 that's how I should do that. Okay. I can follow that pattern every time. Yeah, absolutely. That's

22:07 good stuff. Speaking of following a pattern, your screen's already up. Maybe you just take the extras.

22:11 Yeah, I will. I'll go with the extras first. And continuing in my three-week streak of talking

22:17 about uv releases and new features. The latest one released four days ago, uv 0.12.10, now ships the

22:26 trusted publisher token revocation, and it has Python 3.15 support. So uv is on a terror of keeping

22:33 up with all the latest bits that are going on, including the Python 3.15 releases coming up. So

22:40 that's really cool that they're doing that. And then the other bit, I saw a fun little

22:44 right release here making a python interpreter in 1024 bytes so kind of a little example of

22:51 of if you've ever done code golf and do something in in such and such a number of steps this person

22:57 implemented a full python interpreter in 1024 bytes of good old c code so that's pretty wild

23:05 he i think he first attempted with 512 bytes uh which seems kind of crazy yeah good for you austin

23:12 the subtitle was 512 bytes. It's not enough. Like, right. No kidding. Wow.

23:18 So yeah, he, he chronicled his whole journey. I just thought that was fun. not necessarily a

23:23 full news article, but it's pretty cool. The people out there doing still cool stuff like this.

23:27 That's some minified Python, not something you normally see.

23:30 Right. But yeah.

23:32 Wow. Okay. I just got a one quick one. Steering council elections are going on. So

23:41 Oh, two week nomination period followed by a voting period.

23:46 When is this actually?

23:48 I saw that the votes were coming up, but I don't see the actual.

23:50 Anyway, it's previously been November through December or November through November.

23:54 I think it's not yet up or just started.

23:57 Anyway, this is the 2026 one.

23:59 And so candidates, the nominees are here.

24:02 Lots of folks I see.

24:04 Yeah, it's a good list.

24:05 So check it out, folks.

24:07 And yeah.

24:08 So anyway, I just want to give a shout out to that being a thing.

24:10 Hey, Michael, you got any jokes for us?

24:12 I have a band joke.

24:14 A band joke?

24:16 Oh my God.

24:17 You mean like band as in not allowed?

24:18 We're going to be kicked off of YouTube and all the

24:21 Yes, as in disallowed.

24:22 Disallowed.

24:23 We'll only get kicked off Reddit.

24:25 This is not like a trombone versus trumpet.

24:27 Like, what can you do with a trombone?

24:29 You can't hit him with a little slider thing?

24:31 I don't know.

24:32 I used to play the trombone.

24:33 I never really enjoyed it though.

24:37 It was a requirement.

24:39 No, the joke is, keep in mind, there's not programming exactly it's it but i think we can all just like enjoy a little it uh

24:45 stuff you know and it says what single word in it makes you look like this and there used to be a

24:50 picture that had a ah like i can't take it anymore and sorry this post was removed by reddit's filters

24:56 and all it was was a picture of somebody making a weird face like honestly i don't know what was

24:59 wrong with it but someone got up in arms this one this one took me a minute to understand what the

25:05 the heck it was. It said, hello. Do you know what this is about? Why would this make IT people wig

25:12 out? Maybe, you know, I didn't either. It's apparently on Teams or Slack. If somebody just

25:18 says hello, and then they're going to write more, but then they kind of don't, you're like, hi.

25:22 Okay. That could make me a little, okay, let's go. Okay. All right. Not a single word, but anytime

25:28 I get a direct message along the lines, you got a minute? Or can I ask a question? Yes, exactly.

25:35 Oh, let's see.

25:36 So I got to collapse them because they all go down at like,

25:39 this person says printer.

25:41 Just no, no.

25:43 Can't do it.

25:44 What year is this and we still can't reliably print?

25:46 I know.

25:46 I just, this other, just like last week, I print maybe twice a year and I just needed to print.

25:52 And it's like, the printer's out of ink.

25:53 Like, I just bought an ink.

25:54 I haven't printed since the last time I bought an ink.

25:56 Anyway, but as in, not to interrupt your lunch, but.

26:02 Could you add in a well actually?

26:04 Yeah.

26:05 Rico or scan to mail.

26:09 Now I get hello.

26:11 That's pretty good.

26:12 Yeah.

26:13 All right.

26:13 Now I'm in my zone now.

26:15 DNS.

26:16 There's even like a little like Japanese style like water painting.

26:20 It says it's not DNS.

26:22 There's no way it's DNS.

26:23 It's always DNS.

26:24 Like some philosopher.

26:25 Yeah.

26:26 In the early days of Six Feet Up, Gabrielle made a comic about DNS because it was so hard to explain to folks.

26:32 And every time I say there's a problem, she's like, is it DNS?

26:35 and so this is my co-founder partner in life and she totally gets it dns is absolutely the problem

26:41 this one might be for me outlook crowd strike i'll just not ever since you owe this one oh my god

26:47 ever since you xyz this doesn't work anymore um update i'm surprised yeah i'm surprised update's

26:54 not in there oracle i'm on that bandwagon um sharepoint let's see what else we got cve or just

27:01 Citrix, teams, SAP, you got my vote on SAP.

27:07 Oh my gosh.

27:08 Anyway, I thought this was a really fun list.

27:10 I don't understand why.

27:11 That was a good thread.

27:12 I don't understand why they banned it, but whatever.

27:14 Now that makes it even better.

27:15 Because it's Reddit apparently.

27:17 Yeah, I know.

27:17 Awesome.

27:18 I put stuff up there and it'll be like, well, it looks like you're trying to share an announcement

27:23 and that's not allowed.

27:24 So blocked.

27:25 Like just, I wrote a blog post.

27:27 I thought this community would think was interesting.

27:28 So I wanted to share it.

27:29 It's like, I'm not selling you anything.

27:31 I promise.

27:32 Not in this case anyway.

27:33 Not on my blog.

27:35 Sorry, Michael.

27:36 Not allowed.

27:36 Banned.

27:37 Banned.

27:38 Well, that was a good episode.

27:39 Thanks for hanging out.

27:40 And we'll see you all next week.

27:41 I'll still be in France next week, I believe.

27:43 Au revoir.

27:44 Au revoir.


Want to go deeper? Check our courses




Subscribe to Python Bytes