Transcript #365: Inheritance, but not Inheritance!
Return to episode page view on github00: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.