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


Transcript #365: Inheritance, but not Inheritance!

Return to episode page view on github
Recorded on Tuesday, Dec 19, 2023.

00:00 Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds.

00:05 This is episode 365. Wow. Recorded.

00:10 It's like we've been doing it for a year.

00:11 Yeah. Recorded December 19th, 2023.

00:17 Yeah. And I'm Brian Okken.

00:19 Hey, I'm Michael Kennedy.

00:21 And yeah, if we did it, if somebody listened to one a day from now on, they would be behind because we'll be way ahead of 365 by the time they finish.

00:32 Still be awesome.

00:36 Well, want to kick us off with something cool?

00:40 Oh, before we kick it off.

00:41 Yeah, go ahead.

00:42 Let's say that this episode is sponsored by us.

00:46 So please support us and other people.

00:49 I'm going to talk about that a little bit later at the end of the show.

00:52 But also check out all the courses that Talk Python Training.

00:57 Check out the complete pytest course.

00:59 You can be a Patreon supporter.

01:00 And also, if you want to connect with us, one of the best ways to do it is through on Mastodon.

01:05 And we're all on Fosstodon, or at least Michael and I are.

01:10 At M. Kennedy, at Brian Okken, and at Python Bytes.

01:14 Indeed.

01:17 Hey, do I feel like I'm really fast, Brian?

01:20 Like Neo in the Matrix?

01:22 Mind-bendingly fast?

01:24 Let's go with yes.

01:26 Okay.

01:27 I appreciate that.

01:28 Because this, I just got fiber, gigabit fiber installed 30 minutes ago.

01:34 I was hoping it wouldn't destroy the show, but it almost didn't make it, but it made it.

01:37 Ooh.

01:38 Nice.

01:39 So hopefully that doesn't curse it, that something doesn't go wrong and it will crash.

01:42 But 950 megabit down, which is fine, but 950 megabit up is glorious.

01:49 We should speed up the playback speed when we release the MP3 so it sounds really fast.

01:54 No, we're talking really fast because it's really uploading.

01:56 Yeah.

01:58 No, let's talk about Hatch because Hatch is awesome.

02:01 Ofek is the maintainer and creator of Hatch.

02:05 And boy, oh boy, has he gone big on his latest release, 1.8.0.

02:10 So Hatch is like Flit, is like PDM, is like PIP, ENV, and many of these other poetry.

02:19 Others, if I'm leaving your version of this out, I apologize.

02:24 But with version 1.8, this has gone in a bit of a different direction.

02:30 You know, I had Ofek on the Python packaging panel.

02:35 I think Steve Dower was there.

02:36 Some other folks were there.

02:37 Really interesting that there's this tension between should there be an app that manages

02:46 Python environments with Python, or should there be a thing that manages the Python itself?

02:54 Right?

02:54 Kind of like PyEMV, for example.

02:57 Right?

02:58 So Hatch has gone in that direction of now Hatch manages Python, not just Python projects.

03:05 And there's this thing to solve this problem in the form of PyApp.

03:11 So PyApp is even maybe more awesome.

03:15 PyApp is a runtime installer for Python projects written in Rust.

03:20 And they can be, you ready for this?

03:23 I'm so, so excited.

03:24 Your Python app can be distributed as a standalone executable, a .exe or .app for users.

03:32 What do you think, Brian?

03:34 I'm very interested in finding out more.

03:36 Now, this whole post is a little bit wordy.

03:39 So let me jump into the omnivore version of it over here, which has a huge icon.

03:44 So Ofek says, look, one of the things that's been a perpetual problem for Hatch and all the

03:49 others I named is that Python itself is a dependency.

03:52 So in order to use Hatch or any of these other tools or any apps, you have to say, well, go

03:57 get Python and then get back to me and we'll start talking.

03:59 Right?

04:00 So he came up with this thing called PyApp that will create installers for the different platforms.

04:06 Claims it's trivial.

04:07 It's probably never trivial, but possible.

04:10 Possible would be awesome even.

04:12 And so starting with this releases, not only are the binaries available for every platform,

04:20 but there are installers as in like install wizards on Windows and a DMG type thing, I'm

04:27 guessing, or a PKG on macOS.

04:30 That's awesome.

04:31 If you have ever in the recent days tried to put something onto macOS or Windows, there's

04:41 a whole nightmare of digitally signing around it, Brian.

04:44 So you can't just get a binary and give it to somebody.

04:47 The platforms will freak out.

04:49 They won't let you open it.

04:50 Like macOS will not let you open it unless you go into settings and say, allow me to run

04:54 apps from untrusted developers.

04:57 And Windows gives you this big, scary dialogue and tries to not run it.

05:01 So that's why this next part-

05:03 It's not developers that you don't trust.

05:05 It's developers that Apple doesn't trust.

05:07 Yes, exactly.

05:08 You may or may not trust them, but that's a different conversation.

05:12 It's a fair feature, but it makes creating desktop distributable apps super painful.

05:18 So check this out.

05:20 Halfway there.

05:21 The installer for macOS is signed using a certificate.

05:26 So you already, your apps built with this are already trusted.

05:30 Honestly, I don't know how this is possible.

05:32 I mean, I know why, how it works.

05:36 I'm not sure that it, how it's allowed, but I'm all for it.

05:40 So, because I have dealt with Apple and they are not lenient in any way, shape or form when

05:46 it comes to stuff running on their platform.

05:48 But so the installer for the macOS is signed using the certificate from the same account

05:53 used to sign the official distributions of Python.

05:55 So you won't get any security warnings or blocking.

05:58 Thank you, Ederbin, for helping out with that.

06:00 And Hatch itself with any good system is self-updating.

06:04 So you can hatch self-update.

06:06 What else I want to point out?

06:07 There's also a new Python, like hatch space Python command group that will allow you to

06:14 manage things.

06:14 So you can show what you have installed.

06:17 You can install different versions of Python, CPython and PyPy for those.

06:22 It works with virtual environments.

06:25 It has built in rough and Ruff format integrations.

06:28 And traditionally, it's been somewhat slow to like activate and set up a virtual environment

06:36 that's already previously been installed because it'll refresh and recheck that all of the dependencies

06:43 are there and everything.

06:44 So now it does a hash of those.

06:46 And so only if the dependency statement doesn't match the hash, right?

06:51 Basically, so it'll pre-compute all that stuff.

06:53 So now it should be basically instant.

06:56 So also some minor breaking changes around build defaults.

07:01 And the new app build target is what I've been raving about.

07:04 So, OFAC, you killed it.

07:06 Can't believe it.

07:07 It's awesome.

07:07 Awesome.

07:08 So Hatch has hashes?

07:11 If you hash a hatch with hashling and, you know, like there's some kind of tongue twister

07:19 in there we could do.

07:20 I'm not doing it though.

07:21 Gotta be.

07:22 I'm excited about this.

07:24 It's very cool.

07:25 I definitely want to play with it.

07:27 Yeah.

07:27 Yes, indeed.

07:29 Over to you.

07:30 All right.

07:31 Well, I'm not sure how long this has been out, but Hinnick has been promoting a new project

07:41 that he's got called services.

07:42 He's got called services or SVCS, which is short for services and pronounced services.

07:48 And it is a, I think it could be used for more than web stuff.

07:56 And it was for removing some of the web.

08:04 Like your database and your cache and all sorts of stuff to an application.

08:10 typically a web application.

08:11 Typically a web application.

08:12 But I think it could really be anything.

08:13 But it's a flexible service locator.

08:16 And one of the reasons why I haven't covered it yet on Python bytes.

08:22 I don't think I have is because I didn't quite understand what it was doing.

08:27 And it took me a while to get my head around it.

08:29 But it's pretty cool.

08:32 And Hinnick apparently realizes that it is a bit difficult to get your head around what

08:38 this is doing.

08:39 So he just recently released a video describing this project.

08:45 So really great video describing services, what you can do with it, and also how to pronounce

08:55 his name.

08:55 He doesn't pronounce his last name, though.

08:57 Apparently that's left for maybe episode two.

09:00 But I love, I guess.

09:04 Anyway, it's pretty cool.

09:08 Actually, I'm pretty excited about it after watching it, watching the video.

09:12 I thought maybe it wouldn't be for me, but especially for keeping services contained or the setting

09:20 up services, looking them up within different parts of your application, and then getting them

09:27 all cleaned up correctly at the end.

09:29 That's kind of what it does, plus a whole bunch of other stuff.

09:31 And one of the neat things is throughout all of this documentation, the documentation is

09:35 amazing.

09:36 Throughout all the documentation, he has examples in AIo HTTP, FastAPI, Flask, Pyramid, and Starlet.

09:45 Nice.

09:46 So the video is talking about Flask, but it's cool that he just already hit all the bases.

09:52 Like, how do I do this in Starlet?

09:54 Well, it's just a little different.

09:56 Most of them, mostly they're similar, but little different ways to use it throughout the different

10:03 applications.

10:04 So it's pretty cool.

10:05 He also mentions in the video that he took a really long time really talking about the

10:12 terminology and the glossary of the documentation.

10:15 And actually, I really appreciate this of somebody saying, okay, this is generally what I think

10:22 of is what the meanings for all of these words are.

10:26 And it's a lot of these words are, they're overused in the English language to begin with.

10:33 And even in talking about programming, web programming, but things like what is the service?

10:37 What is a resource?

10:38 What is a dependency?

10:39 Service layer.

10:41 He goes through a whole bunch of different terms, what it means to him and probably to

10:46 everybody else.

10:47 But if you're unfamiliar with them, and even a decent discussion of dependency injection.

10:52 So one of the things he talks about is that this is not really a dependency injection

10:58 thing.

10:59 It's inversion of control, but it's a little different than service.

11:03 Service locators are a little different than dependency injection.

11:06 And I kind of appreciate that discussion.

11:09 It's pretty cool.

11:10 So anyway, kudos to Hinnick for doing this and for helping us pronounce his name.

11:15 Yeah, this looks cool.

11:18 I definitely want to check this out.

11:19 It's news to me, so I will be checking out.

11:22 Cool.

11:26 We have new leaders, Brian.

11:29 We do.

11:30 Yes.

11:31 For the Python world, we have new leaders.

11:33 And specifically, the steering council election results are in for next year.

11:39 Okay.

11:40 So for the 2024 term, we have Pablo Galindo Salgado.

11:47 We've got Gregory Smith, Emily Morehouse, Barry Warsaw, and Thomas Werther's orders.

11:52 So very cool to see them all leading the way.

11:56 There's a lot of familiar faces there.

11:58 So that's.

11:59 That's pretty cool.

12:00 I don't expect a whole lot of different from the year before, but here's the results.

12:06 You can actually see in PEP 8105, you see everybody who was potentially a candidate, how many votes they got by people who are disenfranchised.

12:18 I don't know what that means.

12:18 Or the not the franchised voters, the one who are enfranchised, how many votes that they got.

12:25 And you can put that all together.

12:27 So this begs the question, like, well, how do you get on this list?

12:31 You get on this list by being nominated by a core developer.

12:36 So everyone on the list was nominated by a core developer.

12:38 If you are a core developer, you can nominate yourself.

12:43 So that could be the person you see here, because everyone I see, I think, is a core developer.

12:48 Okay.

12:50 But anyway, the results, the results are in.

12:53 And we have those five folks.

12:54 Welcome and congrats.

12:56 Awesome.

12:56 Nice.

12:58 That's a good set of names, too.

13:00 Yeah.

13:01 So.

13:02 Yeah.

13:04 All right.

13:04 Indeed.

13:05 Well, there probably is some protocol around the election results, right?

13:12 No, you could model it with classes, or you could functionally model it, like, in an immutable way, but I don't know about a protocol.

13:19 Okay.

13:20 We're just great at transitions on this podcast.

13:26 The next, I want to talk about Python protocols.

13:28 So there's an article from Carlos Vecina, I think, called Python protocols, defining a protocol and when to use it.

13:39 And actually, this is something that I have, I've been meaning to play with for actually some years, and I haven't really done much with it yet.

13:47 So I really appreciate this article.

13:48 He's talking about protocols are a feature of Python that were added in Python 3.8.

13:56 So really anything maintainable right now can use protocols.

14:01 But they're, and you kind of, they're, mentally, I think of them kind of like class inheritance or mix-ins or abstract-based classes.

14:13 And that's one of the things he talks about in this article is, is they are in that same similar space, but you use them a little different.

14:22 And you might use them together with other forms too, like with mix-ins and abstract-based classes.

14:27 So the article just goes through on how to define a protocol and really, and he's also discussed, also a decent tutorial on abstract-based classes and mix-ins as well, which is nice to kind of describe them all together.

14:42 But the protocol thing is just sort of, let me see if I can find an example.

14:47 So you inherit, you have a class that's inherited from protocol and you give it, you kind of give it function definitions, but don't fill in the body.

14:58 So that's kind of what a protocol is.

15:00 And then other classes that use the protocol derive from that, you know, from that protocol, from like in his example, there's a class called,

15:12 explainable, that something that has an explain function.

15:15 And so you would derive from explainable and then your new class would have, would, would be a instances of protocol.

15:24 But all it really says is that you can, other places that use it for types and stuff can declare that they need some, need a protocol passed in or a explainable class.

15:34 And then you can use anything that derives from that.

15:36 So pretty cool.

15:38 Yeah.

15:39 Brian, let me jump in and just say one extra point.

15:42 Brian, let me jump in and say, hey, what's awesome about this stuff is we've had duck typing like this.

15:48 There's an assess fairness function that it has to call explain on the object passed in.

15:52 And duck typing said, well, if it takes that, if you can pass it in there and it will run when you call explain on it, it must fit.

15:59 Right.

16:00 But the typing tools don't check.

16:02 So like PyCharm, for example, would just go, well, it's a whatever.

16:04 So good luck with that.

16:06 But once you do this protocol stuff, if you say the function takes an explainable and you have explainable as a protocol, you can pass stuff in and it doesn't even have to derive from or be related to that protocol in a base class.

16:20 Like anything that is passed in there, the type system will look at it and verify it hasn't explained, even if it's in a third party package and you don't control it.

16:28 So it's like a way to project typing structure onto a dynamic thing that is not necessarily your code.

16:34 It's wild.

16:35 Oh, cool.

16:36 I kind of had that a little bit wrong then.

16:38 Awesome.

16:39 You can drive from it.

16:40 It gives you more information potentially.

16:41 But it doesn't have to be.

16:42 You don't even have to, which that's the totally wild aspect.

16:46 That's what I think is really different for this.

16:48 Okay.

16:48 Yeah.

16:49 Oh, awesome.

16:51 That's pretty cool.

16:53 No.

16:54 Yeah.

16:54 So clearly I haven't thoroughly read this article, but I do want to get into really getting my head around abstract based classes, mix ins and protocols and stuff.

17:04 And I would say that though, because like your experiences in C++, mine also is in C++ and C# and all of those languages have these interface ideas.

17:13 But they're put into the type system through inheritance.

17:17 And so you can inherit from it and it does what you expect.

17:19 And it seems the right thing.

17:20 But what's weird is you don't even have to.

17:22 That's what's weird about it.

17:23 Okay.

17:24 Cool.

17:25 Oh, awesome.

17:26 Now I definitely want to play with it more.

17:29 Yeah.

17:30 Because I've kind of missed that aspect of C++ in Python.

17:34 Yeah.

17:34 So nice.

17:36 Anyway.

17:37 Also, I'm assuming it's an AI generated image, but really cool image at the top of the article.

17:43 I'm not sure what my opinion is about it.

17:46 I'll ask GPT how I feel about it.

17:48 It's hard to describe how I feel.

17:51 So I'll, you know.

17:52 Yeah.

17:54 I'm actually sort of, I don't know, this is a tangent, but I've switched to, I was playing with like Bing as my primary search engine at work.

18:04 I just, I don't know, a new computer, it just was there and I'm just going with it for a while.

18:08 But everything I search is like, it gives me an AI generated answer first.

18:13 And I'm like, I don't know if I like that very much.

18:16 Yeah, I know.

18:17 I know.

18:18 Anyway.

18:19 Well, that's it for our main stuff.

18:22 Do you have any extras?

18:23 I could have almost made it an extra, extra, extra this time.

18:27 So yeah, sure I do.

18:28 First of all, I've been wanting to say this several times and I'm usually like looking at my screen and see what I want to share and stuff.

18:34 And I didn't have this anywhere.

18:35 So I just pulled up Mastodon to remind me.

18:38 There are tons of people interacting with us over on Mastodon and I've had some great conversations.

18:43 And I want to, I'm sure you do too, Brian, want to follow people back.

18:46 So there's, there's kind of a, at least for, I'll say these are Michael's Mastodon's conventions.

18:53 You, you could take them for what you want.

18:56 I just made them up, but this is how I think about it.

18:58 So people will follow me and I'm like, huh, did that person follow me?

19:01 Cause they listened to the show and listened to Brian say, you should come join us and have a conversation.

19:04 Hey, I'd like to follow that person.

19:06 But a lot of times they have no picture, no description, no web pages, no posts.

19:10 You're like, yeah, maybe not next, you know?

19:13 And so I'm just going to say, if you have a picture and a description, a description seems

19:19 somewhat relevant.

19:19 I will certainly follow you back.

19:21 If you have posts, that's plus one.

19:23 If you have a verified webpage, which is easy, another plus one.

19:26 And a lot of people have private accounts who follow me.

19:31 I'm like, why are you in social media?

19:33 If you want a private account, I don't understand what this is because your profile is public.

19:37 Just your posts are private, but the platform has a way to have private posts.

19:41 I don't understand.

19:43 So anyway, probably not going to get a lot of engagement.

19:46 If you have a private account, just post private messages for things you don't want to see.

19:50 So, and while I'm on the topic of Mastodon, I had a really nice and productive conversation

19:55 with the PSF around my mask rant on PyCon.

19:59 So that was nice over there.

20:00 Some people weren't nice as they sent me, like not necessarily nice responses, but the PSF did.

20:05 And that was cool.

20:05 That's nice.

20:06 Yeah.

20:07 All right.

20:08 Next one.

20:09 Oh, wait, before you move on.

20:11 I just want to add my two cents on the, the picture.

20:14 I also prefer to be able to see who it is, but also primarily if the picture is something

20:21 that they're using on other stuff.

20:22 So like if a lot of people have a, their profile picture on their, like the profile picture

20:27 on their blog and on their, and in their primarily a GitHub user and, and they have the

20:34 same profile there, even if it's like a stylized something, but if it's the, if it's distinctive

20:39 and the same everywhere, like glyph, for instance, has a, has a, a different thing for them.

20:45 I I'm okay with that, but most people I think go with their picture.

20:49 I think it's the right answer.

20:50 Yeah.

20:51 When I say picture, I don't mean necessarily it has to be your picture.

20:54 Just the fact that it's not the default icon.

20:56 You've taken enough effort to put in something, even if it's just a picture of a triangle, I

21:01 don't care.

21:01 You know?

21:02 Yeah.

21:04 All right.

21:05 Paul is asking in the audience, what is your secret?

21:08 Okay.

21:11 Well, we'll do this.

21:13 we, earlier on, we were talking about how Michael's got a faster internet now, so we

21:19 should make it really fast speed.

21:21 and then somebody commented, wagrants, wagrants, commented, I played it at one and a half

21:27 times speed.

21:28 Then I got up to a live event.

21:30 and all of a sudden Brian should sounded like he got drunk in one second.

21:35 and so I said, Brian's secret is out.

21:40 So nice.

21:41 I'll just have another drink in my, Irish coffee.

21:44 It's coffee.

21:45 Trust me.

21:46 Oh, all right.

21:48 more extras.

21:49 So, Dropbox spooks users with turning on new AI features that can almost automatically

21:57 send your private documents to open AI.

22:00 Now you have to interact with part of the site for it to happen, but it doesn't say, Hey,

22:04 necessarily, cause you does, you touch this.

22:07 We're now sending your social security number away.

22:10 but anyway, that's kind of.

22:13 Well, I mean, yeah.

22:15 So you can check that out on defaulted on if you're not subject to the GDPR, but defaulted

22:22 to off if you are.

22:24 So, you know, plus one for GDPR there, I suppose.

22:26 So mine was turned on.

22:28 Okay.

22:29 So you have to go check to make sure that they're not sharing all of your.

22:32 Yes, exactly.

22:34 And it's on by default for you, Brian.

22:35 So you might want to check.

22:39 The whole conversation it's on ours.

22:41 The, the, the comment section of our second is like the top notch place for comments, I

22:46 think.

22:46 So really good.

22:47 Okay.

22:49 Yeah.

22:50 There's, it talks about how to go find it.

22:51 So anyway, this like made me think, you know what?

22:53 I should really be a little more.

22:54 I have, I have like three terabytes of data and Dropbox.

22:58 So I'm like, maybe I should be a little more specific and intentional about where I put

23:01 my stuff.

23:02 So I went on this, this right on Mastodon, by the way, a bunch of people sent me all sorts

23:05 of options of like, okay, if not Dropbox, then what?

23:08 And I decided whatever I'm doing is probably good to have it end to end encrypted.

23:14 Cause then I don't care what they try to do with it.

23:16 Right.

23:16 Cause they can't decrypt it.

23:17 Yeah.

23:18 That, that solves a whole lot of problems.

23:20 I don't, you care about the security, but it doesn't matter as much as if you're just

23:24 exposing files or leaking stuff or whatever.

23:27 Right.

23:27 So I decided to go, I already have a, a paid Proton account.

23:32 So all my private stuff, all my private documents and like my scans of things I want to save that

23:37 might be sensitive.

23:38 They're going to Proton drive where I have 500 gigs and it's already paid for and

23:44 encrypted.

23:45 There's async thing you can install.

23:46 That's pretty excellent.

23:47 I looked around and some people suggested next cloud, which is really interesting.

23:53 It's maybe more than I want.

23:54 It's almost like a document calendar, everything self-hosted.

23:59 Maybe do that next.

24:00 Yeah.

24:01 Own cloud got like super owned just last week and is a similar self-hosted thing, which

24:08 makes me a little nervous to self-host stuff.

24:09 I know there are people host it for you, but it's not next cloud.

24:12 It's a little bit indirect.

24:14 So maybe violin.

24:16 I don't know if you've heard of this, but they have encrypted, cloud storage and

24:23 the end again, pretty nice.

24:25 I think this is, is it British?

24:27 I don't, I don't remember exactly.

24:28 UG.

24:29 Not sure.

24:31 but somewhere in Europe, this company, it looks pretty good.

24:36 I have not tried it, but, and, and encrypted there's ice drive, the next generation cloud

24:41 storage.

24:41 Also, I think this might be the British one.

24:43 Yeah.

24:44 This isn't Wales.

24:44 I mean, British, I mean, UK.

24:47 Sorry folks.

24:47 So that's pretty interesting.

24:49 And I think, I think I'm going to go with sync.com.

24:53 Super simple.

24:54 All they do is sync and then encrypted for six terabytes.

24:59 It's like 140 bucks a year or something like that, which is a lot, you know, versus 240 for

25:04 less than that in Dropbox.

25:05 Anyway, if people are in this zone of like, I'm looking for all this stuff.

25:09 Oh my gosh, like, what am I going to do regardless of whether you care about the Dropbox fiasco?

25:14 Here's a bunch of options.

25:16 Can people can pick?

25:17 There was one comment in this whole discussion that was pretty interesting.

25:21 I think it was in the ours, just ours technica thing.

25:24 And it said, look, if you give your data unencrypted to somebody, another company, even if you trust

25:30 them, you don't really necessarily control that anymore, especially if they decide to pass

25:34 it along.

25:34 So, somebody pointed out cryptometer.

25:38 Have you heard of this, Brian?

25:39 No.

25:40 So cryptometer is cool.

25:42 I have used something like it, but it's older and no longer supported, which makes me sad.

25:47 So what you do is you run this app.

25:49 It does like super strong encryption.

25:51 You control the key, right?

25:53 It's just like a thing you make up and don't give away.

25:55 And then it will create a drive, a mountable drive on your Mac or on windows, like a D driver,

26:04 E drive or whatever.

26:05 And that thing is encrypted.

26:06 So when you mount it with this software, it looks like a drive, but then when you unmount

26:10 it, it becomes just an encrypted pile of files.

26:12 So you put that in Dropbox, you put that in sync or whatever, and then no matter what happens,

26:17 they just get an encrypted blob of stuff.

26:20 So things I super care about, I have encrypted in something either cryptometer or something like it.

26:26 On top of all the safety around the cloud drive and trust and whatever you might have there, like worst case scenario,

26:32 they get a huge, hard, hard to decrypt a blob of stuff that they don't know the value of.

26:37 And I don't know if it has Linux.

26:39 Someone's asking does it have Linux.

26:42 I think it might.

26:44 Let's see.

26:46 Mac.

26:47 No, let's see if I go to download what it says.

26:50 Yeah.

26:52 For people with downloads.

26:54 Use your DMG.

26:56 Yeah.

26:57 Windows, Mac, Linux, Android, and iOS even.

27:01 Yeah.

27:01 So that's that.

27:02 I think that it's a loss.

27:05 I mean, cool.

27:07 But cryptometer would have been great as a rotten tomato sort of thing to rate different cryptocurrencies.

27:13 I know.

27:15 The word is taken.

27:18 I'm pretty sure this has been around before crypto became a thing.

27:22 I'm not sure how old this is.

27:25 Yeah.

27:26 There's 17 pages of releases on GitHub from 2017.

27:31 So yeah, they were ahead of their time in that.

27:33 But yeah, this is super cool, Brian.

27:35 Like you can just say, I don't really care that much about the security of where these files go.

27:39 You're not getting them.

27:41 Interesting.

27:43 So I suggest a sweet combination of these things.

27:47 I'm going through like a super digital decluttering as part of this.

27:51 And it's glorious.

27:51 I'm having like a tech love affair with Notion.

27:55 It's so good.

27:55 But yeah, anyway, I'll leave it there.

27:59 Maybe I'll come back and tell you more about this.

28:01 Last thing for me, I'm doing the keynote at PyCon Philippines 2024 in February.

28:08 How awesome is that?

28:09 Slightly jealous, man.

28:11 Somewhere I scroll down and over.

28:14 Woo.

28:14 Yeah.

28:15 Cool.

28:16 Three of us and I get to be one of them.

28:18 So that'll be awesome.

28:19 Thank you for inviting me.

28:20 And if you're going to be there, I will see you there.

28:22 Nice.

28:22 Yeah.

28:23 In February.

28:25 Cool.

28:25 Oops.

28:27 What were you for your extras?

28:29 Well, I just deleted one.

28:31 So sorry about that.

28:32 But shift command T.

28:35 Oh, shift commit.

28:38 Oh, whatever.

28:39 I'll just tell you guys about it.

28:43 So this is the kind of time of year that some people like to donate some money to different

28:50 people, different groups.

28:50 I had the link up for the Python Software Foundation.

28:55 So Python Software Foundation is not hard to find.

28:59 So I would encourage people to consider giving some money to the PSF.

29:04 So Django Software Foundation is doing a drive.

29:08 So giving some money.

29:09 If you use Django, of course.

29:11 If you enjoy Python Bytes, of course, you can check out Patreon.

29:15 At Patreon, we do accept money for Python Bytes to help keep the show going.

29:23 This is great.

29:25 Also, I wanted to highlight as well just the idea that to just go on GitHub.

29:32 So the different things you use on GitHub, like adders, for instance, you can go down and

29:37 you can sponsor this project.

29:40 You can throw some money that way.

29:42 pytest has a sponsor link.

29:44 Pallets and Flask has a way to sponsor either all of Pallets or particular projects within

29:52 the Pallets program.

29:54 And really, a lot of projects that you use every day have a sponsor of this project on GitHub.

30:02 So I think it'd be great, too, for people.

30:04 If you have extra and you want to help out, I think it's a good idea.

30:09 Sometimes I help out different projects and I kind of shift it up every year and local

30:14 things.

30:14 And I think the things that I use.

30:17 And somebody asked me once recently about some projects don't really need the money.

30:24 And I guess, for instance, I really love having people support Python Bytes through Patreon.

30:31 It's fun to have our community help support us.

30:33 If you, in particular, don't donate, we're not going to disappear.

30:38 Michael and I are going to keep doing it anyway.

30:40 It is totally up to you.

30:42 And definitely don't do it if it's a hardship.

30:44 But I think it's a fun thing to do this time of year is to spread the love around.

30:49 That's all I wanted to say.

30:50 Indeed, I second that as well.

30:55 That's kind of serious, though.

30:59 Do you have something funny for us?

31:01 Let's lighten it up.

31:02 No, this is not funny.

31:03 This is too close to home.

31:04 You tell me how you feel about this.

31:06 So here's the joke.

31:07 Here's the joke.

31:08 So there's two red buttons.

31:09 Think Ren and Stimpy or something like that.

31:11 And a huge, scary red button.

31:13 You can press either of them.

31:14 One of them says, pay $12.

31:17 The other one says, admit to yourself, your dream is dead.

31:22 There's somebody sweating trying to decide which button to press.

31:25 And it's the domain renewal.

31:27 Oh, yeah.

31:28 Totally.

31:29 This is way too close for home to home for me because I just transferred 25 domains from all the different places into hovers I talked about like a while ago.

31:40 And I talked about all the name servers and all that.

31:42 And there was a few where I'm like, God, is the dream dead or do I just move this?

31:47 So how many are you using still out of those?

31:50 Well, lots of them are to like protect people from doing crappy stuff.

31:55 For example, I've talked by thon.com.

31:57 I don't technically use it.

31:59 It redirects to talk by thon.fm.

32:01 But if I don't have it, someone will get it.

32:05 And then all sorts of badness.

32:06 Like there's a bunch of these cards.

32:08 I would say half of them fall into that realm.

32:10 Okay.

32:10 And then maybe another third I'm directly using.

32:14 And then there's the whatever the balance, the one six that's left is the dream could be dead.

32:19 Or it could be not there yet.

32:21 Not realized yet.

32:22 We'll see.

32:22 I had about eight that I was not really using last year.

32:27 And I admitted that about half of those are not going to go anywhere and let them expire.

32:35 Let them go.

32:36 Although, I mean, the domain companies don't make it easy.

32:39 You're like, okay, I'm just going to let it expire.

32:42 But you get like emails.

32:43 No, it's going to go.

32:44 Oh, it's gone.

32:45 But we're going to save it for you for a couple more months.

32:48 And you get a whole bunch of guilt emails.

32:51 But yeah.

32:52 Anyway.

32:53 Yeah.

32:54 Yeah, exactly.

32:54 I have one real quick sad story to round this out, Brian.

32:58 Okay.

32:59 A friend of mine and I decided we're going to write some iPhone apps right when the iPhone came out.

33:02 Like 2007 or whatever it was.

33:05 And he had the clever idea of like, let's get a domain.

33:09 I probably did it together.

33:10 I don't know.

33:10 Got the domain iPhone.ly.

33:16 And we worked on stuff for like a year.

33:18 Because we didn't know we're going to build.

33:21 We'll just come up with this.

33:21 We'll put stuff there.

33:22 Never really came up with stuff.

33:25 It looked like there was nothing on the horizon.

33:27 We're like, you know, after three years, the LY, it was like the FM.

33:29 It was like kind of expensive.

33:30 Like, ah, just let it go.

33:31 A week later, somebody says, hey, I'll give you $5,000 for that domain.

33:35 So I shoot my friend like, hey, don't let it expire yet.

33:39 Let's do this instead.

33:41 He's like, it expired last week.

33:42 Like, no.

33:43 Oh, no.

33:45 Oh, well.

33:46 So it goes.

33:47 So somebody could have paid you $5,000, but they instead got it for like $20.

33:51 Yeah, for like $20 or something.

33:53 I'm sorry to laugh at your pain.

33:56 No, it's okay.

33:58 I mean, like, I'm telling you, this is not a joke.

34:01 Admit to yourself your dream is dead or pay $12 for the rest of your life every year.

34:05 That's where you are.

34:06 No, it's good.

34:08 It's a good joke.

34:09 And people can hopefully laugh at it.

34:11 Yeah.

34:11 Everybody, most people that listen to this podcast probably are feeling this.

34:15 Yeah.

34:16 All right.

34:17 All right.

34:18 Well, I'm feeling good about our year's worth of show every day.

34:21 Yeah.

34:22 365.

34:23 Pretty cool.

34:24 Yeah.

34:24 All right.

34:25 Talk to you later.

34:26 Yeah.

34:27 See you.

Back to show page