Python Bytes - #365 Inheritance, but not Inheritance!
Episode Date: December 20, 2023Topics covered in this episode: * Hatch v1.8* svcs: A Flexible Service Locator for Python Steering Council 2024 Term Election Results Python protocols. When to use them in your projects to abstract... and decoupling Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/365
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 365. Wow.
It's like we've been doing it for a year.
Yeah. Recorded December 19th, 2023.
Yeah, and I'm Brian Ocken.
Hey, I'm Michael Kennedy. 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.
Still be awesome.
Well, want to kick us off with something cool?
Before we kick it off.
Yeah, go ahead.
Let's say that this episode is sponsored by us.
So please support us and other people.
I'm going to talk about that a little bit later at the end of the show.
But also check out all the courses at TalkPython Training.
Check out the Complete PyTest course.
You can be a Patreon supporter.
And also, if you want to connect with us, one of the best ways to do it is through on mastodon and uh we're all on fostadon or at least michael and i are at m kennedy at brian
and at python bytes so indeed hey do i feel like i'm really fast brian like Neo in the matrix, mind-bendingly fast.
Let's go with yes.
Okay.
I appreciate that.
Because I just got fiber, gigabit fiber installed 30 minutes ago.
I was hoping it wouldn't destroy the show, but it almost didn't make it, but it made it.
Ooh, nice.
So hopefully that doesn't curse it, that something doesn't go wrong and it will crash.
But 950 megabit down, which is fine, but 950 megabit up is glorious.
We should speed up the playback speed when we release the MP3 so it sounds really fast.
No, we're talking really fast because it's really uploading.
Now let's talk about Hatch because Hatch is awesome. Ofec is the maintainer creator of Hatch and boy oh boy
has he gone big on his latest release 1.8.0. So Hatch is like Flit, is like PDM, is like Pip,
ENV, and many of these other poetry others. If I'm leaving your version of this out. I apologize. But with version 1.8,
this has gone in a bit of a different direction.
Now, I had OFAC on the Python packaging panel.
I think Steve Dower was there.
Some other folks were there.
Really interesting that there's this tension
between should there be an app that manages Python environments with Python or should there be a thing that manages the Python itself?
Right.
Kind of like PyEMV, for example.
Right.
So Hatch has gone in that direction of now Hatch manages Python, not just Python projects.
And there's this thing to solve this problem in the form of pie app. So pie app is even
maybe more awesome. pie app is a runtime installer for Python projects written in rust.
And they can be you ready for this? I'm so, so excited.
Your Python app can be distributed as a standalone executable, a.exe or a.app for users.
What do you think, Brian?
I'm very interested in finding out more.
Now this whole post is a little bit wordy.
So let me jump into the Omnivore version of it over here,
which has a huge icon.
So Ophax says, look,
one of the things that's been a perpetual problem for Hatch and all the others I named
is that Python itself is a dependency.
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, right?
So he came up with this thing called PyApp
that will create installers for the different platforms.
Claims it's trivial.
It's probably never trivial, but possible.
Possible would be awesome even.
And so starting with this, releases not only are the binaries available for every platform,
but there are installers, as in like install wizards on windows and a DMG type
thing I'm guessing, or a PKG on Mac OS.
That's awesome.
If you have ever in the recent days, try to put something onto, um, Mac OS or windows,
there's a whole nightmare of digitally signing around it, Brian.
So you can't just get a binary and give it to somebody.
The platforms will freak out.
They won't let you open it.
Like macOS will not let you open it unless you go into settings and say,
allow me to run apps from untrusted developers.
And Windows gives you this big, scary dialogue and tries to not run it.
So that's why this next part-
It's not developers that you don't trust. It's developers that Apple doesn't trust. Yes, exactly. You may or may not run it. So that's why this next part- It's not developers that you don't trust.
It's developers that Apple doesn't trust.
Yes, exactly.
You may or may not trust them,
but that's a different conversation.
It's a fair feature,
but it makes creating desktop distributable apps
super painful.
So check this out, halfway there.
The installer for macOS is signed using a certificate so you already your apps built
with this are already trusted honestly i don't know how this is possible i mean i know why why
how it works i'm not sure that it how it's allowed but i'm all for it so 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.
But so the installer for the Mac OS is signed using the certificate from the
same account used to sign the official distributions of Python.
So you won't get any security warnings or blocking.
Thank you E-Durban for helping out with that.
And Hatch itself with any good system is self-updating.
So you can Hatch self-update.
What else I want to point out?
There's also a new Python,
like Hatch space Python command group
that will allow you to manage things.
So you can show what you have installed.
You can install different versions of Python,
see Python and PyPy for those.
Works with virtual environments.
It has built-in rough and rough format integrations. and PyPy for those. It works with virtual environments.
It has built-in rough and rough format integrations.
And traditionally, it's been somewhat slow to activate and set up a virtual environment
that's already previously been installed
because it'll refresh and recheck
that all of the dependencies are there and everything.
So now it does a hash of those and so only if the dependency statement doesn't match the hash
right basically so it'll pre-compute all that stuff so now it should be basically instant so
also some minor breaking changes around build defaults and the new app build target targets
what i've been raving about so So OFAC, you killed it.
I can't believe it.
It's awesome.
Awesome.
So Hatch has hashes?
If you hash a Hatch with hashling,
and there's some kind of tongue twister in there we could do.
I'm not doing it, though.
Got to be.
I'm excited about this.
It's very cool i i
definitely want to play with it yeah yes indeed what would you all right well um a i'm not sure
how long this has been out but um hinnick has been uh promoting a new uh project that he's got called services or SVCS, which is short for services and pronounced
services. And it is a he, I think it could be used for more than web stuff. But the the intent,
I think was for removing some labor the plate code from hooking up dependencies and different, like your database and your cache
and all sorts of stuff to an application,
typically a web application,
but I think it could really be anything.
But it's a flexible service locator.
And one of the reasons why I haven't covered it yet
on Python Bytes, 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 this exist. But it's,
it's pretty cool. And in it apparently realizes that it is a
bit difficult to get your head around what this is doing. So he
he just recently released a video describing this project.
So really great video describing services,
what you can do with it, and also how to pronounce his name.
He doesn't pronounce his last name, though.
Apparently that's left for maybe episode two.
But anyway, it's pretty cool. Actually, I'm pretty excited about it after
after watching it. Watching the video. I thought maybe it wouldn't be for me, but especially for
keeping services contained, or 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.
That's kind of what it does, plus a whole bunch of other stuff.
And one of the neat things is throughout all of this documentation, the documentation is amazing.
Throughout all the documentation, he has examples in AIO HTTP, FastAPI, Flask, Pyramid, and Starlet.
Nice.
And the video is talking about Flask,
but it's cool that he just already hit all the bases.
Like, how do I do this in Starlet?
Well, it's just a little different.
Mostly they're similar,
but a little different ways to use it
throughout the different applications.
So it's pretty cool.
He also mentions in the video that he took a really long time
really talking about the terminology in the glossary of the documentation.
And actually, I really appreciate this, of somebody saying,
okay, this is generally what I think of as what the meanings
for all of
these words are and it's a lot of these words are are they're overused in the
English language to begin with and even in talking about programming web
programming but things like what is the service what is a resource what is a
dependency service layer it goes through a whole bunch of different terms what it
means to him and
probably to everybody else, but if you're unfamiliar with them. And even a decent discussion
of dependency injection. So one of the things he talks about is that this is not really a
dependency injection thing. It's inversion of control, but it's a little different than
service locators are a little different than dependency injection.
And I kind of appreciate that discussion.
It's pretty cool.
So anyway, kudos to Hinnick for doing this and for helping us pronounce his name.
Yeah, this looks cool.
I definitely want to check this out.
It's news to me, so I will be checking it out.
Cool.
We have new leaders brian we do yes for the python world we have new leaders and specifically the steering council election results are in for next year
okay so for the 2024 term we have pablo Galindo Salgado. We've got Gregory Smith,
Emily Morehouse, Barry Warsaw, and Thomas Wothers. So very cool to see them all leading the way.
There's a lot of familiar faces there. So that's pretty cool. I don't expect a whole lot of
different from the year before, but here's the
results. 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. I don't know what that means.
Or the not the franchised voters, the one who are enfranchised, how many votes that they got.
And you can put that all together. So this begs the question, like, well, how do you get
on this list? You get on this list by being nominated by a core developer. So everyone
on the list was nominated by a core developer. If you are a core developer, you can nominate
yourself. So that could be the person
you see here because everyone i see i think is a core developer okay but anyway the results
the results are in and we have those five folks welcome and congrats awesome nice
oh it's a good set of names too yeah so yeah all right indeed um well uh there probably is some protocol around
elect the election results right now you could model it with classes or you could functionally
model it like in a immutable way but i don't know about a protocol okay um but we're just great at transitions on this podcast.
The next I want to talk about Python protocols.
So there's an article from Carlos Vecina, I think, called Python Protocols, Defining a Protocol and When to Use It.
And actually, this is something that I've been meaning to play with for actually some years, and I haven't really done much with it yet.
So I really appreciate this article.
He's talking about protocols are a feature of Python that were added in Python 3.8. So really anything maintainable right now, you can use protocols. But they're, and you kind of,
mentally, I think of them kind of like class inheritance or mix-ins or abstract-based classes.
And that's one of the things he talks about in this article
is they are in that same similar space,
but you use them a little different.
And you might use them together with other forms too,
like with mixins and abstract base classes.
So the article just goes through on how to define a protocol.
And he's also discussed also a decent tutorial on abstract base classes
and mixins as well, which is nice to kind of describe them all together.
But the protocol thing is just sort of,
let me see if I can find an example.
So you have a class that's inherited from protocol
and you kind of give it function definitions,
but don't fill in the body.
So that's kind of what a protocol is.
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 explainable,
that something that has an explain function. And so you would derive from explainable,
and then your new class would have would would be a instance of protocol. But all it really says is that you can,
other places that use it for types and stuff
can declare that they need a protocol passed in
or a explainable class,
and then you can use anything that derives from that.
So pretty cool.
Yeah, Brian, let me jump in and just say one extra point here.
Like what's awesome about this stuff is we've had duck typing,
like there's an assess 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?
But the typing tools don't check.
So like PyCharm, for example, would just go,
well, it's a whatever, so good luck with that. 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.
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. So it's like a
way to project typing structure onto a dynamic thing that is not necessarily your code. It's
wild. Oh, cool. I kind of had that a little bit wrong then. Awesome. You can drive from it. It
gives you more information potentially, but it doesn't have to be, you don't even have to,
which that's the totally wild aspect.
That's what I think is really different for this. Okay. Yeah. Oh,
awesome. That's pretty cool. No. Yeah.
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.
And partly I wouldn't say that, though,
because your experience is in C++.
Mine also is in C++ and C Sharp,
and all those languages have these interface ideas,
but they're put into the type system through inheritance,
and so you can inherit from it,
and it does what you expect,
and it seems the right thing,
but what's weird is you don't even have to.
That's what's weird about it.
Okay.
Cool.
Oh, awesome. Now I definitely want to play with it more um yeah because i've kind of missed that of
aspect of c plus plus in python yeah um so nice anyway also um i'm assuming it's a ai generated
image but really cool image at the top of the article it's good i'm not sure what
my opinion is about it i'll chat gpt how i feel about it it's hard to describe how i feel so i'll
you know yeah i'm actually sort of i don't know this is a tangent but i've switched to um
uh was i was playing with like bing is my primary search engine at work. I don't know.
A new computer just was there, and I'm just going with it for a while.
But everything I search gives me an AI-generated answer first,
and I'm like, I don't know if I like that very much.
Yeah, I know.
I know.
Anyway.
Well, that's it for our main stuff.
Do you have any extras?
I could have almost made it 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 Mastodon's 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? Cause they listened to the show and listened 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 webpages, no posts.
You're like, yeah, maybe not.
Next, you know?
And so I'm just gonna say,
if you have a picture and a description,
a description seems somewhat relevant,
I will certainly follow you back.
If you have posts, that's plus one.
If you have a verified webpage, 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 macedon 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 uh yeah i do the picture um 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 different thing for them.
I'm okay with that.
But most people, I think, go with their picture, I think is the right answer.
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.ul is asking
in the audience what is your secret okay well we'll do this um we earlier 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 uh commented i played it at one
and a half times speed then i got up to a live event uh and all of a sudden brian should sounded
like he got drunk in one second um and so i said brian secret is out so nice 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 OpenAI.
Now you have to interact with part of the site for it to happen,
but it doesn't say, hey, necessarily, cause 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 comment section of our tech mega 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 maybe think,
you know what?
I should really be a little more,
I have like three terabytes of data and 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,
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.
That solves a whole lot of problems.
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, I 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 a sync thing you can install.
That's pretty excellent.
I looked around and some people suggested NextCloud,
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, OwnCloud got like super owned just last week and is a similar self-hosted thing,
which makes me a little nervous to self-host stuff.
I know there are people who host it for you,
but it's not NextCloud.
It's a little bit indirect.
So maybe.
Violin, I don't know if you've heard of this,
but they have encrypted cloud storage end-to-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 end-to-end encrypted.
There's IceDrive, the next generation cloud storage.
Also, I think this might be the British one.
Yeah, this is in Wales. I mean British. I mean UK. Also, I think this might be the British one. Yeah, this is in Wales.
I mean, British, I mean, UK.
Sorry, folks.
So that's pretty interesting.
And I think I'm going to 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
Dropbox. Anyway, if people are in this zone of like, I'm looking for all this stuff, oh my gosh,
like, what am I going to 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 Ars 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.
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 drive or 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,
it becomes just an encrypted pile of files. So 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 crypto meter 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?
Uh, 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 crypto meter would have been great as a rotten tomatoes sort of thing to,
to rate different cryptocurrencies.
I know it's the word is taken.
I'm pretty sure this has been around before crypto became a thing.
Like I'm not sure how old this is,
but yeah, there's 17 pages of releases on GitHub from 2017.
So yeah, they were ahead of their time in that.
But this is super cool, Brian.
Like you can just say,
I don't really care that much about the security
of where these files go.
You're not getting them.
Interesting.
So I suggest a sweet combination of these things.
I'm going through like a super digital decluttering as part of this.
And it's glorious.
I'm having like a tech love affair with Notion.
It's so good.
But yeah, anyway, that's I'll leave it there.
Maybe I'll come back and tell you more about this.
Last thing for me, I'm doing the keynote at pycon at yes at pycon
philippines 2024 in february how awesome is that slightly jealous man somewhere i scroll down and
over oh yeah cool three three of us and i get to be one of them so that'll be awesome thank you for
inviting me and if you're going to be there i will see you there nice yeah in february cool oops i just told
you for your extras uh well i just deleted one so sorry about that but uh control shift command t
oh shift commit oh whatever i'll just tell you guys about it. So this is the time of year that some people like to donate some money to different people, different groups.
I had the link up for the Python Software Foundation.
So Python Software Foundation is not hard to find.
So I would encourage people to consider giving some money to the PSF.
Also, Django Software Foundation is doing a drive. consider giving some money to the PSF. Also Django Software Foundation is doing a drive,
so giving some money.
If you use Django, of course.
If you enjoy Python Bytes, of course,
you can check out Patreon.
Patreon, we do accept money for Python Bytes
to help keep the show going.
This is great.
Also, I wanted to highlight as well just the idea to just go on GitHub.
So the different things you use on GitHub, like adders, for instance,
you can go down and you can sponsor this project.
You can throw some money that way. PyTest has a sponsor link.
Palettes and Flask has a way to sponsor either all of Palettes or particular projects within the Palettes program.
And really a lot of projects that you use every day
have a sponsor this project on GitHub.
So I think it'd be great for people.
If you have extra and you want to help out so i think it'd be great to for people if you've if you have extra
and you want to help out i think it's a good idea i have um sometimes i help out different projects
and i kind of shift it up every year and local things and um i think the things that i use and
one somebody asked me once uh recently about like some projects don't really need the money. And I guess like,
for instance,
I really love having people support Python bites through Patreon.
It's,
it's fun to have our community help support us.
It's not,
if you,
if you in particular don't donate,
we're not going to disappear.
Michael and I are going to keep doing it anyway.
It is totally up to you and definitely don't do it if it's a hardship,
but I think it's a
so it's a fun thing to do this time of year is to spread the love around that's all i wanted to say
so indeed i second that as well uh that's kind of serious though do you have something funny for us
let's lighten it up no this is not funny this funny. This is too, it's too close to home. You tell me how you feel about this. So here's the joke. Here's the joke. So there's two
red buttons. Think Ren and Stimpy or something like that. And a huge, scary red button. You can
press either of them. One of them says pay $12. The other one says, admit to yourself, your dream
is dead. And there's somebody sweating, trying to decide which button to press
and it's the domain renewal. Oh yeah, totally.
This is always too close for home to home for me because I just transferred 25 domains from all
the different places in the hovers. I talked about like a while ago and I talked about all the,
the name servers and all that. And there was a few where I'm like,
God, is the dream dead or do I just move this?
So how many are you using still out of those?
Well, lots of them are to like protect people from doing crappy stuff.
For example, I have talkbython.com.
I don't technically use it.
It redirects to talkbython.fm.
But if I don't have it, someone will get it.
And then all sorts of badness.
Like there's a bunch of these guard.
I would say half of them fall into that realm.
Okay.
And then maybe another third I'm directly using.
And then there's the,
whatever the balance,
the one sixth that's left is the dream could be dead,
but it could be not there yet.
Not realized yet.
We'll see.
I had about eight that I was not really using last year.
And I admitted that about half of those are not going to go anywhere and let them expire.
Let them go.
Although, I mean, the domain companies don't make it easy.
You're like, okay, I'm just going to let it expire.
But you get like emails.
No, it's going to go.
Oh, it's gone
but we've just we're gonna save it for you for a couple more months uh and you get a whole bunch
of guilt emails but yeah anyway yeah yeah exactly i have one real quick sad story to round this out
brian okay 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. And he
had the clever idea of like, let's get a domain. I probably did it together. I don't know. Got the
domain iPhone dot L Y iPhone Lee. And we worked on stuff for like a year because we didn't know
we're going to build. We'll just like come up with this. We'll put stuff there. Never really came up
with stuff. It looked like there was nothing on the this. We'll put stuff there. Never really came up with stuff.
It looked like there was nothing on the horizon.
We're like, you know, after three years, the L Y it was like the FM.
I was like kind of expensive.
Like, ah, just let it go.
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.
Oh no.
Oh, well, so it goes so that somebody could have paid you five thousand dollars but they instead got it for like 20
they got it yeah for like 20 bucks or something i'm sorry to laugh at your pain uh no it's okay
i mean it's like i'm telling you this is not a joke admit to yourself your dream is dead or pay
12 for the rest of your life every year that's where you are no it's good it's a good joke and people can uh hopefully
laugh at it yeah everybody most people that listen to this podcast probably are feeling this
yeah all right all right well i'm feeling good about our year's worth of show every day yeah 365
pretty cool yeah i don't know talk to you later yeah see you thanks everyone