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.
00:09 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.
00:51 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@mkennedy at Brian Okken and at Python Bytes.
01:14 Indeed.
01:16 Hey, do I feel like I'm really fast, Brian?
01:20 Like.
01:21 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 and gigabit fiber installed 30 minutes ago.
01:34 I was hoping it wouldn't destroy the show, but it almost, almost didn't make it, but it made it.
01:38 Ooh, 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:47 We should like.
01:50 Sorry.
01:50 We should speed up.
01:51 We should speed up the playback speed when we release the MP3.
01:53 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, let's talk about, let's talk about Hatch because Hatch is awesome.
02:01 Ofec is the maintainer creator of Hatch 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 here.
02:20 I'm going to have to get another version of this out.
02:22 I apologize.
02:23 But with version 1.8, this has gone in a bit of a different direction.
02:31 Now I had Ofec on, on the Python packaging panel.
02:35 I think Steve Dower was there.
02:37 Some other folks were there.
02:38 Really interesting that there's this tension between should there be an app that manages Python environments with Python?
02:50 Or should there be a third party?
02:50 Or should there be a thing that manages the Python itself?
02:53 Right.
02:54 Kind of like Pi EMV, for example.
02:57 Right.
02:58 So Hatch has gone in that direction of now Hatch manages Python, not just Python projects.
03:06 And there's this thing to solve this problem in the form of Pi app.
03:12 So Pi app is even maybe more awesome.
03:15 Pi app 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 dot exe or a dot app for users.
03:33 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:45 So Ofec says, look, one of the things has been a perpetual problem for Hatch and all the others I named is that it's not working.
03:49 It's not working.
03:50 It's not working.
03:50 It's not working.
03:50 It's not working.
03:50 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 get Python and then get back to me and we'll start talking.
03:59 Right.
03:59 So he came up with this thing called Pi app 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 guessing, or a PKG on macOS.
04:29 That's awesome.
04:31 If you have ever in the recent days, try to put something onto macOS or Windows.
04:39 There's a whole nightmare of digitally signing around it, Brian.
04:44 So you can't just get a binary and give it to somebody that 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 apps from untrusted developers.
04:56 And Windows gives you this big, scary doll dialogue and tries to not run it.
05:00 So that's why this is 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:13 It's a fair feature, but it makes creating desktop distributor 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:25 So 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 how it's allowed, but I'm all for it.
05:40 Because I have dealt with Apple, and they are not lenient in any way, shape, or form when it comes to stuff running on their platform.
05:48 But so the installer for the macOS is signed using a certificate.
05:50 So the macOS is signed using a certificate from the same account used to sign the official distributions of Python.
05:55 So you won't get any security warnings or blocking.
05:58 Thank you, E. Durbin, for helping out with that.
06:00 And Hatch itself, with any good system, is self-updating.
06:05 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 Python command group that will allow you to manage things.
06:14 So you can show what you have installed.
06:17 You can install different versions of Python.
06:19 See Python.
06:20 There's Python and PyPy for those.
06:23 It works with virtual environments.
06:25 It has built-in rough and rough format integrations.
06:29 And traditionally, it's been somewhat slow to activate and set up a virtual environment that's already previously been installed because it will refresh and recheck that all of the dependencies 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 work, does it.
06:50 So it doesn't match the hash, right, basically.
06:52 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, Ophac, you killed it.
07:06 I 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 in there.
07:20 I'm not doing it, though.
07:21 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 What about 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 that he's got called Services or SVCS, which is short for services and pronounced services.
07:48 And it.
07:50 Is a.
07:50 I think it could be used for more than web stuff.
07:54 But the the intent, I think, was for removing some of the border plate code from hooking up dependencies and different like like your database and your cache and all sorts of stuff to an application, typically a web application.
08:12 But I think it could really be anything.
08:13 But it's a flexible service locator.
08:17 And one of the reasons why I.
08:20 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 and it took me a while to get my head around it.
08:29 Why does this exist?
08:29 But it's it's pretty cool.
08:32 And Hinnick apparently realizes that it is a bit difficult to get your head around what this is doing.
08:39 So he he just recently released a video describing this this project.
08:45 So really great.
08:49 Great, great video describing services, what you can do with it and also how to pronounce 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 guess.
09:03 Anyway, it's it's pretty cool.
09:08 Actually, I'm pretty excited about it after after watching it, watching the video.
09:12 I thought maybe it wouldn't be for me, but especially for keeping services contained.
09:18 Or.
09:19 For the setting up services, looking them up within different parts of your application and then and then getting them 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 amazing.
09:36 Throughout all the documentation, he has examples in AIO, AIO, HTTP, FastAPI, Flask, Pyramid and Starlet.
09:45 So nice.
09:47 And some of the videos.
09:49 Talking about Flask.
09:50 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.
09:57 Mostly they're similar, but a little different ways to use it throughout the different applications.
10:03 So it's pretty cool.
10:05 He also mentions in the video that he took a really long time really talking about the terminology in the glossary of the documentation.
10:15 And actually, I really appreciate this.
10:18 Of somebody.
10:19 Saying, okay, this is generally what I think of is what the the meanings for all of these words are.
10:27 And it's a lot of these words are are they're overused in the English language to begin with.
10:33 And even in talking about programming web programming.
10:35 But things like what is the service?
10:37 What is a resource?
10:38 What is a dependency service layer?
10:41 He goes through a whole bunch of different terms, what it means to him and probably to everybody else.
10:47 But if you're unfamiliar with them.
10:49 And even a decent discussion of dependency injection.
10:52 So the one of the things he talks about is that this is not a not really a dependency injection 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 Henick for doing this and for helping us pronounce his name.
11:15 Yeah, this looks cool.
11:18 I definitely want to check.
11:19 This out.
11:19 It's news to me.
11:20 So I will be checking out.
11:22 Cool.
11:23 Mm hmm.
11:25 We have new leaders.
11:28 Brian, 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, we've got Gregory Smith, Emily.
11:49 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 pretty cool.
12:00 I don't expect a whole lot of different from the year before.
12:04 But here's the results you could actually see in Pep 8105.
12:09 Let's 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:19 Yeah.
12:19 So the number of votes that they got, or the not the franchise voters, the one or in franchise, how many votes that they got, and you can put that all together.
12:29 So this begs the question like, well, how do you get on this list?
12:33 You get on this list by being nominated by a core developer.
12:37 So everyone on the list was nominated by a core developer.
12:39 If you are a core not core developer, your core developer, you can nominate yourself.
12:44 So that could be the person you see here, because everyone I see, I think is a core developer.
12:49 So I think that's the way to go.
12:50 Okay.
12:51 But anyway, the results, the results are in and we have those five folks.
12:55 Welcome and congrats.
12:56 Awesome.
12:57 Nice.
12:58 That's a good set of names too.
13:01 Yeah.
13:02 So yeah.
13:03 All right.
13:04 Indeed.
13:05 Well, there probably is some protocol around elect the election results, right?
13:13 Now you could model it with classes, or you could functionally model it like in a immutable way.
13:17 But I don't know about you.
13:18 I don't know.
13:19 I don't know about a protocol.
13:20 Okay.
13:21 We're just great at transitions on this podcast.
13:25 The next I want to talk about Python protocols.
13:29 So there's an article from Carlos Vecina, I think, called Python protocols, defining a protocol and when to use it.
13:40 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:49 He's talking about the protocols are a feature of Python that were added in Python three, eight.
13:56 So really anything maintainable right now can use this can you can use protocols, but they're and you kind of they're in mentally I think of them kind of like, like class inheritance or mix ins or abstract base classes.
14:13 And that's one of the things he talks about this in this article is, is they are in that same similar context.
14:19 So you can use them in a similar space, but, but you use them a little different.
14:22 And you might use them together with other with other forms to like with with mix ins and abstract base classes.
14:28 So the article just goes through on how to define a protocol and really, and he's also discussed you also a decent tutorial on abstract base classes and mix ins as well, which is nice to kind of describe them all together.
14:42 But the, the protocol thing is just sort of let's see if I find an example.
14:49 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 other classes that you that use the protocol derived from that, you know, from that protocol from like in his example, there's a class called explainable, that something that has an explained function.
15:15 And so you would derive from explainable.
15:19 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 and then you can use anything that derives from that.
15:37 So pretty cool.
15:39 Yeah, Brian, let me jump in and say one extra point here.
15:42 Like what's awesome about this stuff is we've had duck typing like this.
15:47 There's an assess function.
15:49 It's a fairness function that it has to call explain on the object passed in 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 right.
16:01 But the typing tools don't check.
16:03 So like PyCharm, for example, would just go well, it's a whatever.
16:05 So good luck with that.
16:07 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.
16:19 So it's like a way to project that protocol in a base class, like anything that is passed in there.
16:23 The type system will look at it and verify it has an explain, even if it's in a third party package and you don't control it.
16:29 So it's like a way to project typing structure onto a dynamic thing that is not necessarily your code.
16:35 It's wild.
16:36 Oh, cool.
16:37 I kind of had that a little bit wrong then.
16:39 Awesome.
16:40 You can drive from it.
16:41 It gives you more information potentially, but it doesn't have to be.
16:43 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:49 Yeah.
16:50 Oh, awesome.
16:51 That's pretty cool.
16:52 No.
16:53 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, mixins and protocols and stuff.
17:04 And partly.
17:05 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, but they're put into the type system through inheritance.
17:17 And so you can inherit from it and it does work.
17:19 So that's what you expect.
17:20 And it seems the right thing, but what's weird is you don't even have to.
17:23 That's what's weird about it.
17:24 Okay.
17:25 Cool.
17:26 Oh, awesome.
17:27 Now I definitely want to play with it more.
17:30 Yeah.
17:31 Cause I've kind of missed that aspect of C++ in Python.
17:34 Yeah.
17:35 So nice.
17:36 Anyway.
17:37 Also, I'm assuming it's a AI generated image, but really cool image at the top of the article.
17:44 It is.
17:45 I'm not sure what my opinion is about it.
17:47 I'll ask ChatGPT how I feel about it.
17:48 It's hard to describe how I feel.
17:50 So I'll, you know, yeah, I'm actually sort of, I don't know.
17:55 This is a tangent, but I've switched to was, was playing with like Bing is my primary search engine at work.
18:03 I just, I don't know that a new computer, it just was there and I'm just going with it for awhile.
18:08 But everything I search is like, gives me an AI generated answer first.
18:12 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 well that's it for our main stuff do you have any extras i could have almost made an extra extra extra this time so yeah sure i do 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 and i didn't have this anywhere so i just pulled up mastodon to remind me there are tons of people interacting with us over on mastodon and i've had some great conversations and i want to i'm sure you do too brian want to follow people back but there's there's kind of a at least for i'll say these are michael's mastodons conventions you you could take them for what you want i just made them up but this is how i think about it so people will follow me and i'm like huh did that person follow me because they listen to the show and listen to brian say you should come join us and have a conversation hey i'd like to follow that person but a lot of times they have no picture no description no web pages no posts you're like yeah maybe not next you know and so you know i've been wanting to follow people back but there's there's a lot of people that follow me and i'm like oh my god i want to follow people back but there's a lot of people there's a lot of people that follow me and i'm like oh my god i want to follow people back i'm just gonna say if you have a picture and a description that description seems a lot relevant i will certainly follow you back if you have posts that's plus one if you have a verified web page which is easy another plus one and a lot of people have private accounts who follow me i'm like why are you in social media if you want a private account i don't understand what this is because your profile is public just your posts are private but the platform has a way to have private posts i don't understand so anyway probably not going to get a lot of engagement if you have a private account just post private messages for things you don't want to see so and while i'm on the topic of massadon i had a really nice and productive conversation with the psf around my mask rant on pycon so that was nice over there some people weren't nice as they sent me like not necessarily nice responses but the psf did and that was cool that's nice yeah all right next one oh wait before you move on i just want to add my two cents on the yeah i do do the picture i also prefer to be able to see who it is but also primarily if the picture is something that they're using on other stuff so like if a lot of people have their profile picture on their like the profile picture on their blog and on their and they're primarily a github user and and they have the same profile there even if it's like a stylized something but if it's the if it's distinctive and the same everywhere like glyph for instance has a has a a different thing for them i i'm okay with that but most people i think go with their picture i think it's the right answer but yeah when i say picture i don't mean necessarily has to be your picture just the fact that it's not the default icon you've taken enough effort to put in something even if it's just a picture of a triangle i don't care you know yeah all right paul is asking in the audience what is your secret okay well we'll do this we early on we were talking about how michael's got a faster internet now so we should make it really fast speed and then somebody commented wagrant wagrants commented i played it at one and a half times speed then i got up to a live event and all of a sudden brian should sounded like he got drunk in one second and so i said brian secret is out so nice i'll just have another drink of my irish coffee i'll just have another drink of my irish coffee it's coffee trust me all right more extras so dropbox spooks users with turning on new ai features that can almost automatically send your private documents to open ai now you have to interact with part of the site for it to happen but it doesn't say hey necessarily because you just you touch this we're now sending your social security number away but anyway that's kind of unnerving yeah so you can check that out on defaulted to on if you're not subject to the gdpr but defaulted to off if you are so you know plus one for gdpr there i suppose so mine was turned on okay so you have to go check to make sure that they're not sharing all of your yes exactly and it's on by default for you brian so you might want to check the whole conversation it's on ours the the comment section of our second is like the top notch place for comments i think so really good okay yeah it talks about how to go find it so anyway this like made me think you know what i should really be a little more i have like three terabytes of data in dropbox so i'm like maybe i should be a little more specific and intentional about where i put my stuff so i went on this this rant on mastodon by the way a bunch of people sent me all sorts of options of like okay if not dropbox then what and i decided whatever i'm doing is probably good to have it end to end encrypted because then i don't care what they try to do with it right because they can't decrypt it yeah that that solves a whole lot of problems i don't you care about the security but it doesn't matter as much as if you're just exposing files or leaking stuff or whatever right so i decided to go i already have a paid proton account so all my private stuff all my private documents and like my scans of things i want to save that might be sensitive they're going to proton drive where i have 500 gigs and it's already paid for and encrypted there's async thing you can install that's pretty excellent i looked around and some people suggested next cloud which is really interesting it's maybe more than i want it's almost like a document calendar everything self-hosted maybe do that next yeah own cloud got like super owned just last week and there's a similar self-hosted thing which makes me a little nervous to self-host stuff i know there are people host it for you but it's not next cloud it's a little bit different than what i'm used to but i'm going to do that next week and i'm going to do that next week and i'm going to do that next week and i'm going to do that next week a little bit indirect so maybe violin i don't know if you've heard of this but they have encrypted cloud storage and the end again pretty nice i think this is a british i don't remember exactly ug not sure but somewhere in europe this company it looks pretty good i have not tried it but and encrypted there's ice drive the next generation cloud storage also i think this might be the best way to do it but i think it's going to be a good idea to do it next week and then we'll see but and encrypted there's ice drive the next generation cloud storage also i think this might be the best way to do it but i think it's going to be a good idea to do it next week and then we'll see one yeah this is in wales i mean british i mean uk sorry folks so that's pretty interesting and i think i think i'm gonna go with sync.com super simple all they do is sync and then encrypted for six terabytes it's like 140 bucks a year or something like that which is a lot you know versus 240 for less than that in dropbox anyway if people are in this zone of like i'm looking for all this stuff oh my gosh like what am i gonna do regardless of whether you care about the dropbox fiasco here's a bunch of options people can pick there was one comment in this whole discussion that was pretty interesting i think it was in the ours just ours technica thing and it said look if you give your data unencrypted to somebody another company even if you trust them you don't really necessarily control that anymore especially if they decide to pass it along so somebody pointed out cryptomator have you heard of this brian no so cryptomator is cool i have used something like it but it's older and no longer supported which makes me sad so what you do is you run this app it does like super strong encryption you control the key right it's just like a thing you make up and don't give away and then it will create a drive a mountable drive on your mac or on windows like a d driver e drive or whatever and that thing is encrypted so when you mount it with this software it looks like a drive but then when you unmount it becomes just an encrypted pile of files so you can't do that with cryptomator you can't do that with cryptomator you put that in dropbox you put that in sync or whatever and then no matter what happens they just get an encrypted blob of stuff so things i super care about i have encrypted in something either cryptomator or something like it on top of all the safety around the cloud drive and trust and whatever you might have there like worst case scenario they get a huge hard hard to decrypt a blob of stuff that they don't know the value of and i don't know if it has Linux someone's asking does this have Linux i think it might let's see mac no let's see if i go to download what it says yeah it's worth knowing for people downloads use your dmg yeah windows mac Linux android and ios even yeah so that's that i think that it's a loss i mean cool but cryptomator would have been great as a rotten tomato sort of thing to to from cryptocurrencies?
27:14 - I know.
27:15 It's, the word is taken.
27:18 I'm pretty sure this has been around before crypto became a thing.
27:22 Like I'm not sure how old this is, but, yeah.
27:27 There's 17 pages of releases on GitHub from 2017.
27:31 So yeah, they were ahead of their time in that, but this is super cool, Brian.
27:36 Like you can just say, I don't really care that much about the security where these files go.
27:40 You're not getting them.
27:41 - Hmm, interesting.
27:44 - So I suggest a sweet combination of these things.
27:48 I'm going through like a super digital decluttering as part of this, and it's glorious.
27:52 I'm having like a tech love affair with Notion.
27:55 It's so good.
27:56 But yeah, anyway, that's, I'll leave it there.
27:59 Maybe we'll come back and tell you more about this.
28:01 Last thing for me, I'm doing the keynote at PyCon, yes, at PyCon Philippines 2024 in February.
28:09 How awesome is that?
28:10 - Slightly jealous, man.
28:11 - So we're right scroll down and over.
28:14 Woo, yeah.
28:16 - Cool.
28:17 - Three of us, and I get to be one of them.
28:18 So that'd be awesome.
28:19 Thank you for inviting me.
28:20 And if you're gonna be there, I will see you there.
28:22 - Nice.
28:23 - Yeah, in February.
28:25 - Cool.
28:26 - Oops, I just deleted.
28:28 - Over to you for your extras.
28:29 - Well, I just deleted one.
28:31 So sorry about that, but.
28:32 - Shift command T.
28:35 - Shift, oh, shift commit, oh, whatever.
28:40 I'll just tell you guys about it.
28:41 So this is the kind of time of year that some people like to donate some money to different people, different groups.
28:51 I had the link up for the Python Software Foundation.
28:56 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:05 Also Django Software Foundation is doing a drive.
29:08 So giving some money.
29:10 If you use Django, of course.
29:11 If you enjoy Python Bytes, of course, you can check out Patreon.
29:16 Patreon, we do accept money for Python Bytes to help keep the show going.
29:24 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 you can sponsor this project.
29:41 Throw some money that way.
29:42 pytest has a sponsor link.
29:45 Palettes and Flask has a way to sponsor either all of Palettes or particular projects within the Palettes program.
29:55 And really a lot of projects that you use every day have a sponsor this project on GitHub.
30:02 So I think it'd be great too for people, if you have extra and you want to help out, I think it's a good idea.
30:08 I have, sometimes I help out different projects.
30:11 And I kind of shift it up every year and local things.
30:14 And I think the things that I use.
30:18 And somebody asked me once recently about, like some projects don't really need the money.
30:24 And I guess like, 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:34 It's not, if you in particular don't donate, we're not going to disappear.
30:39 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:51 - 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, it's too close to home.
31:05 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, think Ren and Stan.
31:10 Stimpy or something like that.
31:12 And a huge, scary red button.
31:13 You can press either of them.
31:15 One of them says, pay $12.
31:18 The other one says, admit to yourself, your dream is dead.
31:21 And the bottom, there's somebody sweating, trying to decide which button to press.
31:26 And it's the domain renewal.
31:28 - Oh yeah, totally.
31:29 - This is a way too close for home to home for me because I just transferred 25 domains from all the different places into hovers.
31:38 I talked about like a while ago.
31:40 I talked about all the name servers and all that.
31:43 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:56 For example, I have talkbython.com.
31:58 I don't technically use it.
32:00 It redirects to talkbython.fm.
32:02 But if I don't have it, someone will get it.
32:05 And then all sorts of badnesses.
32:06 Like there's a bunch of these guard.
32:08 I would say half of them fall into that realm.
32:10 - Okay.
32:11 - And then maybe another third I'm directly using.
32:14 And then there's the, whatever the balance, the one sixth that's left is the dream could be dead.
32:19 But it could be not there yet.
32:21 Not realized yet.
32:22 We'll see.
32:23 - I had about eight that I was not really using last year.
32:27 And I let, I admitted that about half of those are not gonna 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:40 They're like, okay, I'm just gonna let it expire.
32:42 But you get like emails.
32:43 No, it's gonna go.
32:44 Oh, it's gone.
32:45 But we've just, we're gonna save it for you for a couple more months.
32:49 And you get a whole bunch of guilt emails.
32:51 But yeah, anyway.
32:53 - Yeah, yeah, exactly.
32:55 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 gonna write some iPhone apps right when the iPhone came out, 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. - Yeah.
33:10 - We did it together.
33:10 I don't know.
33:11 Got the domain, iPhone.ly, iPhone-ly.
33:14 And we worked on stuff for like a year 'cause we didn't know we're gonna build.
33:21 We'll just like 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 L-Y, it was like the FM.
33:29 It was like kind of expensive.
33:30 Like, ah, just let it go.
33:32 A week later, somebody says, "Hey, I'll give you $5,000 for that domain." So I shoot my friend like, "Hey, don't let it expire yet." "Let's do this instead." He's like, "It expired last week." Like, no.
33:44 - Oh, no.
33:44 - Oh, well, so it goes.
33:47 - So that somebody could have paid you $5,000, but they instead got it for like 20 or--
33:52 - They got it, yeah, for like 20 bucks or something.
33:53 - I'm sorry to laugh at your pain.
33:57 - 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 hopefully you laugh at it.
34:11 - Yeah, everybody, most people that listen to this podcast probably are feeling this.
34:16 - Yeah, that's, all right.
34:18 Well, I'm feeling good about our year's worth of show every day.
34:22 - Yeah, 365, pretty cool.
34:24 - Yeah, I know.
34:26 - Talk to you later.
34:27 - Yeah, see ya.