Python Bytes - #454 It's some form of Elvish
Episode Date: October 20, 2025Topics covered in this episode: * djrest2 -* A small and simple REST library for Django based on class-based views. Github CLI caniscrape - Know before you scrape. Analyze any website's anti-bot pr...otections in seconds. * 🐴 GittyUp* Extras Joke Watch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Brian #1: djrest2 - A small and simple REST library for Django based on class-based views. Emma Levit Based on an interesting blog post Why, in 2025, do we still need a 3rd party app to write a REST API with Django? As opposed to using DRF or Django Ninja - Michael #2: Github CLI GitHub’s official command line tool Features Checking out a pull request locally You can clone any repository using OWNER/REPO syntax: gh repo clone cli/cli Create a pull request interactively: gh pr create See all at cli.github.com/manual/examples Brian #3: caniscrape - Know before you scrape. Analyze any website's anti-bot protections in seconds. reddit announcement and discussion caniscrape checks a website for common anti-bot mechanisms and reports: A difficulty score (0–10) Which protections are active (e.g., Cloudflare, Akamai, hCaptcha, etc.) What tools you’ll likely need (headless browsers, proxies, CAPTCHA solvers, etc.) Whether using a scraping API might be better This helps you decide the right scraping approach before you waste time building a bot that keeps getting blocked. Michael #4: 🐴 GittyUp Never forget to pull again: Automatically discover and update all your Git repositories with one command. Built initially to solve this problem Rebuilt and published last week as part of my upcoming Agentic AI Programming for Python course. Get notified this week at training.talkpython.fm/getnotified Update everything in a folder tree with gittyup Review changes, blockers, etc with gittyup --explain Extras Brian: Three times faster with lazy imports - Hugo van Kemenade Interesting discussion on Hugo’s post - on Mastodon Use lazy module imports now - Graham Dumpleton Graham’s post uses wrapt, a “module for decorators, wrappers and monkey patching”, to simulate lazy imports Helpful comment from Adam Johnson on Graham’s post to actually do the import during type checking using if TYPE_CHECKING: import ... Michael: uvloop is back! pypi+ listened. :) https://www.reddit.com/r/Python/comments/1o9dey5/i_just_released_pypipluscom_20_offlineready/ Feedback from my “Show me your ls” post. Joke: Some form of Elvish
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver news and headlines directly to your earbuds.
This is episode 454 recorded October 20th, 2025. I'm Michael Kennedy.
And I'm Brian Akin.
And this episode is brought to you by us. We have increasingly more monotonically increasing
number of ways in which you can support us and things that Brian and I both feel like
contribute a lot of value, right? Your Pytest book, your Pytest courses, all the courses over at
Talk Python, foreshadowing, some of that's coming later as well.
The Patreon supporters, a lot of, pretty much all of these things.
We create them not just so that we have a job, but also because we think the world needs them.
We appreciate when you all agree with that and support them.
You want to connect with us, connect on social media or on most of the social media.
The links at the top of the show notes.
Join us live right now.
Monday, just after 10 o'clock, typically it's when we start live streaming, although sometimes it varies.
So subscribe to the YouTube channel and get notified there to make sure you get all the notifications.
But typically we aim for Monday at 10 until further notice at least.
And finally, subscribe to the newsletter.
We're putting a lot of effort into sharing a really nice, rich, extra bits of information out to the newsletter there every week.
So appreciate that going out.
And I think it's been a, we put a lot of work in this, Brian.
I mean, a lot.
I'm ready for a rest.
Take a little rest.
How about you?
Yeah, yeah.
We should take a rest.
Maybe with a rest framework.
Oh, because sometimes you need a whole framework to rest.
You're that time.
Yeah, so let's pop this up.
So we've got an article, this is sort of going backwards because there's a new, a new package out that I want to talk about.
But it's based on this article from Emma Levitt.
Why in 2025 do we still need a third-party app to write Arrest API with Django?
So, and third-party apps, what we're talking about is usually Django Rest Framework or Django Ninja, increasingly more people are reaching for Django Ninja.
But, you know, both are great choices.
And but still, like, why, do we have to have an extra rest framework with, if you already have Django?
And basically, the gist of this article is, no, you can, you can create, and with all the built-ins.
And this is using the class-based views to build a CRUD app, a CRUD API, with JANCO.
And I actually kind of love this.
There's comments at the end also kind of love the article talking about doing everything that's necessary to,
it's just not that much code to create a JSON REST API through, yeah, through Django without anything extra.
And one of the, down in the comments, some of the folks are like, well, why would you do this if you already have these others?
And of course, it's that you can, you, you, you, that you can, but also that when you, when you understand how you could build it with just the tools here, then it helps you understand how to use the other tools like Django Ninja.
So the reason why I'm bringing this up now, this is this, I think this article was from.
like March, April or something like that.
But she went ahead and DJ Rest 2 is now available.
And that is, if you scroll down at the bottom of it,
it is her designed to be a minimal yet powerful rest framework.
But it's around this article of why do we need an external app for rest,
which is kind of funny that she created an external app for Rest too to demonstrate that.
But it's the code, all the code from there.
And just it's really great to be able to learn about the rest frameworks through trying something smaller scale.
So I like it.
Awesome.
Yeah, I'm with her on this, like you don't necessarily need a framework.
I know there's great frameworks.
Like there's Fast API and others and no shade on those things.
But if you already have a web app, you already have a framework that is serving web stuff.
And do you really want to say, well, now we're going to do a completely different one because I need the response.
to be JSON, not necessarily, right?
It's all the APIs that power the talk Python mobile app
are written in Pyramid.
They're not using Fast API, because the whole app
was already pyramid, the data, everything
it needs to know about the users and the data
and the course, it's all in there.
And all I had to do is write a JSON serializer
that would take a dictionary and turn into it
the right kind of JSON.
And literally I have an API, you know?
A lot of these frameworks, I don't like them.
I'm not knocking at any particular,
but these add rest to your things so often become what that means is an HTTP view of your database.
Like, here's how you do get, post, put, and delete to rows in this table.
And then, you know, it's like, okay, that's not the only own instruction.
I don't want to just give my database to, like, the world.
I want to have control over actions that you take, like authenticate.
And that's not like just access to the table, you know, it's weird.
So I don't know.
I find them not to be, I know it's like, well, we absolutely have to reach for a rest thing.
I don't know that that's necessarily true.
It's also very true that you don't, like,
you don't really need a full framework if really you're the client.
I mean, I would say I would probably lean on others to create a better API or better, you know,
experience if I was, if that's the product, if the API is the product.
But if the product is your website and you're, but you've got a framework, you're using Django,
you've got a database there, but you have something else that wants to access that data.
you want to and so that you're you're presenting some extra endpoints if you have just have a couple
of endpoints that you need to to create to get some data out or push some some data in you don't
necessarily need the full-blown extra framework i think something simple would work just fine yeah for
sure yeah um let's let's get out of the web a little bit and maybe uh go to the command line
i'm going to spend a lot i basically have a theme running through this my my pay
my topics for the day. So use Git on the command line, I'm sure Brian. Yeah. A little bit a little bit
of Git ad, dot, get push, all those things. I'm a big fan of using the GUI tools, especially
the tools built into your IDE, you know, Pite Charm and VS code plus derivatives. That means like
20 different things these days. They have really fantastic tools. And I don't rarely, I rarely feel
the need like I've got to be in the command line to mess with it. But I still do plenty.
That said, where I haven't been doing a lot of stuff in the command line is at the GitHub level.
Oh, right, yeah.
Right?
Like you're like, okay, I'm going to get push, get pull.
Oh, there's a PR.
I need to check that out.
What is the command again to check out that PR?
Mm-hmm.
Or I want to, you know, refer to an issue.
How do I do that?
Like, what was the number of it again?
Because there's really cool things in get.
You can say get commit.
And for the message, you can say da-da-da-da-da-da-da.
Fixes or resolves number one, two,
And that'll literally associate the commit with the issue, one, two, three, and close it when you push it into the server.
Which sometimes surprises me, but, yeah, it's good to know.
Yeah, I've accidentally put an issue in a PR, but then close the PR and it's closed issue.
I'm like, no, no, no, that's actually, we're not done yet.
Hold on.
Look, doesn't quite resolve blah.
Oops.
Yeah, and then it does.
That it actually closes it.
You got to reopen it.
Whoopsy.
Anyway, so what I want to talk about today is the GitHub, C.
So I don't know how long this has been around, well, presumably, but I think it's pretty new.
And so the idea is you can ask for status of PRs, or you can check out, like this one's really nice,
GHPR checkout 12.
That's it.
It's all you got to do.
And it's figured out the branches.
It's pulled it.
It's checked out the right one.
Right.
That's really cool, isn't it?
Oh, yeah.
Yeah.
So to get a sense of what's possible.
Because when I saw this, I'm like, I think this will be cool, but why?
Look at the manual.
and the manual has example usages.
That's how I would start to look.
So it says, I could check out a pull request locally,
and it's the one that I just said.
Boom, right?
Pretty neat.
You can do it by branch name.
You can clone a repository with just the owner and repo.
So you could say GH repo clone, you know,
Mike C Kennedy slash ginger dash partials or whatever.
You don't have to know the whole URL.
It's not that huge of a thing, but it's kind of nice.
You can also clone it as if you were doing Git clone,
but you like to type G8.
space repo instead of GIT. I don't know. You can create PRs from a branch, which is pretty
cool. And it just asks you what's the title, what's the body, and so on. You can open up the
browser, like take me to GitHub. You can mess with forks. What else can you do? Yeah, you can
see issues like GitHub PR list. And it'll show you whether they're open, who they're associated
with. Same thing for issues. And even puts the tag in parentheses, parenthetically tags it.
I love it. Anyway, I think this is kind of handy. What do you think?
Yeah, you can do releases too, right?
Does you already comment on that?
I have not comment on that.
Because that's often the thing that I need to, like I've got everything all automated,
except for I still go over to GitHub itself to push or to create a release item or release.
Yeah, yeah, yeah, I do too.
So being able to do that locally, that's pretty cool.
I've got the generation of the release notes automated and the tagging of the branch automated,
but I still can't release it automatically, you know what I mean?
Well, now you can do it at least do it on the command line.
A little bit more.
That's awesome.
Anyway, check this out if you're a C-LI person, you know, G-H, your new command.
Yeah, so go figure that you're the command line person today, and I'm the web person.
So we're going to hop back over the web and talk about web scraping.
So, and web scraping is, you know, not evil.
Sometimes especially if there's no API, it might be the only way to get some data from
something um so uh there's a there's a project that i found out on reddit um it called the can i scrape
which is sort of a fun name um and it's basically analyzes a web's website's anti-bought protections
um to to let you know whether or not you should even try to build a scrape for it or how many
roadblocks are going to run into um and also i think it's just sort of i don't know it seems like
kind of a nice thing to do instead of uh to to check all the
the rules out and stuff.
So it looks for protections like,
I don't know what WAF is,
but captures and rate limits,
honeypots.
And then it rates it a difficulty score
from 0 to 10, easy to hard,
and specific, oh, cool,
specific recommendations on what tools or proxies you'll need
and the estimated complexity to build it.
Also would be a decent thing to use on your own stuff
if you are intending some,
If you just tell somebody, oh, I don't have an API for that, but go scrape the data.
What kind of a job are you asking them to do?
And I was, I was like, I didn't see right away a comment on the robots, but looking down
through it, what it analyzes, it does check the robots.
That's one of the things I want to, I want to be careful of somebody's, what they say
you should do and not do with their website.
So that's cool.
And anyway, I just thought it was nice.
There's an interesting discussion on a link to the Reddit discretion as well, just a target audience of hobbyists, but also just like data people.
Like, sometimes there's data that's available on the web that, like I said, no, there's no rest API yet for it or there won't be.
But yeah, anyway.
Yeah, I love it.
Very interesting.
This whole web scraping thing is getting more and more contentious with AI training and all of that.
It's good to be a good citizen of the web.
Yeah, and also, like, maybe I'd possibly use some of these to check your own.
If you want to lock it down, if you really want to make, if you want to make scraping a real pain in the butt for people looking at your website, you know, you can use this to try to make your score as close to 10 as possible.
Exactly, exactly.
All right.
That's not what I want to talk about.
It's what I want to talk about next.
So I want to talk about Git, a totally different tool, though.
This is completely unrelated to the other one.
Okay, so I launched this CLI tool that is, it's on Pi Pi Pi, but primarily is intended to be used as a CLI type of thing, like rough, not to be built upon, but to be run.
You know what I mean?
So you can UV tool install it.
And the idea is, I called it GiddyUp, GITTI for updating your, a whole directory tree of GitHub repositories.
Okay.
I may have talked about this before, something I kind of built, like, in passing.
And then I was, last week, I decided I'm creating a new course,
Agenic AI programming and Python. How about that?
And I'm like, let me think of something I can try to take that I know is a cool idea
that would seem plausible, but really just make it a super nice app,
add a bunch of features and so on.
So I took that little utility had, and I spent a lot of time with Claude Sonnet,
and Giddyup is the output.
it. So it says, never forget the pull again. Automatically discover and update all your GitHub
repositories in one command. So here's the thing. I've got three computers, what them's a laptop,
and they all have a bunch of GitHub repositories, like hundreds of GitHub repositories. And it drives me
crazy. I'll go to some older one that haven't worked with for a while. Like, I don't think there's
been any change to this. And I'll start messing with it. Then I'll try to push. It'll go,
please pull your changes first. I'm like, uh-oh. That's not good, especially if it's something to do
with the courses where it might be like a PowerPoint that cannot be merged.
You know what I mean?
You're like, oh, no, this is real bad.
Yeah.
And it's out of date, right?
And so I created this thing so I can just, especially before I grab my laptop and head
off to the coffee shop, I can just go into like part of my GitHub repos and just say giddyup.
And it goes through in parallel and it just looks at all the repositories, does it get
pull on all the ones that don't have anything checked out?
And the ones that are like not committed yet says, hey, I don't want to mess with this one.
It has these three files unchanged and so on.
So it's just like a nice little utility people can run to update all their code.
I'll see if I can find a little output down here.
It's got a ton of features.
But yeah, I'd say update this thing and it traverses hierarchically through all the GitHub
repositories that says these are up to date.
I actually pulled a couple commits for this one.
This one had an error and it just gives you, you know, basically gets you all of your GitHub
repositories as much in sync across all the branches as much as possible without breaking anything.
Oh cool.
Yeah.
So anyway, I put that out there for you.
I think people might like it.
I didn't, I just put it out there two days or three days ago.
And it's already got some stars and forks.
And I haven't announced it at all whatsoever, not even on social media.
So people found it and started.
That's cool.
Yeah.
Nice.
All right.
So giddy up.
I have a feeling that maybe people watch your repo a little bit.
I think that's what it is.
Like the GitHub.
And to be honest, I am a super fan of just clicking on the GitHub logo and going and just looking at what's flowing by.
I'm starting to follow more and more people.
I appreciate people follow me.
That that's a really nice source of just, hey, what's interesting?
Because if people you follow star or something, that shows up, you're like, oh, you know,
this person found that interesting enough to star it.
And I definitely respect what that person's doing.
Let me go check this out.
That does look interesting.
Like that's, I'm sure that's how people found it.
Okay.
Cool.
Yeah, cool.
Well, I want to bring up something that we've been, I've spent, apparently spend a lot of time thinking about.
So we're done with our normal stuff, right?
So we are.
Moving on to extras.
Do you want to do your extras first?
Sure.
I'll be quick about mine.
Okay.
Yeah, that's too.
Let me close this off.
Yeah, check out the agent again programming course.
It's coming out this week.
But people listened.
And I don't know if they actually listened us.
I think they listened to other people with the same complaint.
But remember how last week on Pieday, I said, great, but UV loop doesn't work with Python 314?
Well, I'm so happy to tell you.
you as of four days ago, UV loop is back, baby, and we can use it again, which mostly is
awesome because I don't want to go change a bunch of projects that were just fine, but if I
were to swap out the foundation running them, like, to 314, they wouldn't run anymore, so now
it's back. So there's a release for that. So UV loop, while it was gone from us for a little
bit, it's back. And remember how I said, I wish I knew who created Pi Pi Plus and how neat it
was because it has just these few little gotchas
that I would love to polish it.
Well, they send over a message and said,
thank you so much for a feature in Pi Pi Pi and Plus.
And I'm working on the bugs that you found.
I don't know how they heard that we were,
maybe they're a show listener or someone they know
as a listener of the show.
But yeah, look at this.
I can search for something with a dash
and I get the lowercase and vice versa.
Oh, cool.
But also there's some people that maybe don't have a Python podcast
to complain about things.
Does it, is there like a about us or, uh, let's see.
There is.
I believe I put it in, you know, the best way would be a Reddit, I believe.
So, um, Royal Wizard is the one who they initially announced it on, on Reddit and so on.
So you could, and they seem to be talking about the, the changes and the features over on slash R slash Python.
So that's probably the best way.
Okay.
Yeah.
Cool.
And then finally, I, you know, I told you about my host.
show me your LS, which looked like show me your is because of the fonts.
Well, people sent some feedback, and I just wanted to share one, because this is a common theme
over and over.
Thomas Svensson said, hey, I'm currently using New Shell, which for some reason I read as
a nutshell and what I'm about talking about it, except that was the thing, but said, hey,
I'm currently using and exploring New Shell, and its LS is something else, clever.
So you can just kind of do almost query syntax against things like,
LS, structure data, PS, JSON, etc.
So, like, look at this.
This is crazy, right?
Yeah.
And following on, found out today that New Shell is using Polars and the plugins can be written in Python.
So even cooler.
I'm not doing anything with New Shell.
I literally had never heard of it.
It's that new.
No, I don't know.
I hadn't heard of it before I wrote that article.
But it does seem pretty interesting.
I am not here necessarily to switch to it.
But look at this, LS pipe, where size is greater than 10 megabytes, pipe sort of
by modified boom that is i can see that is powerful yeah that's pretty cool all right that's it for
my extras yeah i and i really would like to try it's new stuff um it's for me uh well i get i'm using
mac windows Linux um all sorts of stuff and uh trying to get so to be to be fair i just sort
of use obviously i use z shell on mac um because that's what it comes with but i kind of just use
the bash version of stuff because it's common denominator over everything anyway um but that's
you know just me grape it uh i want to talk about something old um or new or not yet uh lazy imports
so two episodes ago we talked about uh pep 810 explicit lazy imports and i was super excited
about it coming in 315 but um it's still in draft mode so we don't know if we'll get it uh
and then last week i talked about um if you want to use this if you want to use lazy
imports right now you can uh how you can do it just with with python um of just throwing the import
in the first function before you start using it um and then uh but there's some other people
thinking about lazy imports and how cool there would be also so hugo wrote an article uh called
three times faster with lazy imports this is and actually wow this is something i don't have
the capacity to do i probably would maybe but anyway of uh just just implement
implementing it. So there's a, he did a, he fetched the C Python. There's apparently a lazy import reference implementation included in the PEP. So he built Python with the patch and then also released it as if it was 314 so that you could get away with not building a whole bunch of other stuff. And then, and then went ahead and did some, he's, Hugo does the PIPI stat stuff, which I mean, I love that tool. And he did a PIPP.
Deptree and did some lazy import stuff on it to see if it would speed it up.
And his benchmarks look very promising.
So speeds it up quite a bit.
1.31 times faster for one implementation.
And then kept going.
And let's see, I can't remember what this last one is.
We no longer need inline imports trick.
Anyway, a couple of different things he tested.
Either way, it's faster to use it.
So I'd be excited to get that in.
However, somebody else.
So there's a great thread also.
We'll link to it.
A great thread on Mastodon, which I clicked on accidentally,
to talk about between Graham and him and others about his implementation.
Okay, so top imports 105, the normal imports, 105 milliseconds,
inlining, which is essentially what I'm teaching people to do in my post.
uh 46 milliseconds so that drops it down uh quite a bit then there's the wrapped lazy import version
which i'm going to talk about in a second that drops it down to 41 and then uh using 810 drops
it down to 35 so there's um i guess that's it so he timed a whole bunch of stuff uh and talks
about it in the article um like 3x speed up is with the uh if we put it in 315 that's awesome um yeah
And he's timing PIPI stats with help.
So the help is supposed to be really fast and not actually do anything.
And that's kind of a cool way to test it is you're running your application or your command line application but not actually doing work.
It shouldn't import the world then, right?
Yeah.
Even if it does a decent amount of work, it probably doesn't need all the imports.
Yeah.
Right.
And if you're doing some work, you might not need other imports, those sort of things.
Those are good things to do.
And going back, again, reminding people, the idea around this explicitly, the imports is to mark some imports to say,
don't actually import this until the first instance of somebody trying to use it.
That gets imported.
Graham.
Go ahead.
I just timed giddy-up dash help, which I installed via UV tool install.
60 milliseconds.
I'm pretty impressed with that.
That's really fast.
Yeah.
Yeah, but you know what?
The help in the CLI, arg parsing type stuff, is built with ARG PARs.
So there's not a bunch of external stuff to pull in.
Yeah, I'm using ARG PARs more and more now.
Okay, so Graham was in the discussion thread and Graham Doppelton,
and he also wrote a blog post called, wow, it just came out today.
Cool.
Use or updated today.
Beat DZ just off the wire.
Use lazy.
Use lazy module imports now.
And then this case is not the inline one.
He's using the wrapped.
There's a wrapped package that is for,
it's for decorators,
wrappers, and monkey patching.
It's one of his packages.
And can be used to kind of simulate lazy imports also,
which in it's a look, the syntax.
So it's a kind of a cool article.
And the syntax is different.
So again, the lazy imports,
if we get it in 315, it'll look like that.
lazy import jason or lazy from jason import something um the wrapped version is uh import rapt and
wrapped dot lazy import so apparently uh wrapped has a lazy import feature which is cool um and uh but
the syntax is a lot different so i'm i'm not sure what i was what i think about that and then
also down at the bottom adam johnson reached out to him and said uh type checking kind of breaks
when you're using that.
You know what?
I think you might be able to actually fix it.
I wonder if you could.
Could you, no, probably.
I was saying that you could say JSON colon type is JSON, but import.
But then it's not going to know what that is.
Yeah, you're right.
That was my thought when I saw this as like, oh, it'd be fun to play with lazy imports.
I'm like, oh, but that's going to destroy type information in the editors.
Right.
So that's where Adam's suggestion of saying, if type you're checking import Jason.
So just go ahead and actually import all the stuff if you're type checking.
And that'll probably help the editors, I imagine.
Well, here's that way for the 315, because I love this idea as well.
And I appreciate Hugo writing up doing all the research.
Yeah.
So, and also Graham for talking about how to get around it with rap to that's cool.
And a little faster than my myth.
All right.
I'm feeling lazy still, but how about funny?
Do we got something funny?
Oh, yeah.
I got something.
Actually, really, really quick real-time follow-up because, I mean, we're covering stuff that came out today.
And who doesn't love to hear that AWS, U.S. East One in Virginia went down.
So right here on CNN, by the way, AWS services are recovering again after a global internet outage.
Scroll down a little bit, somewhere about east.
There we are.
It seems like a third of the world is hosted in U.S. East One.
But you know what?
Our stuff is clipping along smoothly, just as it should.
So, good luck to everyone who's running over there.
So here's the thing, Brian, for the joke.
Do you, are you more of a fantasy person?
Are you more of a science fiction?
Or what's your genre of big epic storytelling?
Well, sci-fi usually.
I'm listened to a lot of science books right now.
But, yeah.
Yeah, I'm personally a science fiction person.
I definitely take a science, a giant, like, space sort of thing,
interstellar type of thing over...
say, uh, dragons and witches, but this, I think this might make, you might appreciate this.
So, Lord of the Rings, okay? There's Gandalf and there's Frodo. And it says, Gandoff, they've
discovered something together. And Gandalf looks over it, Frodo says, what can you see? It's, it's,
it's some form of elvish. I, I can't read it. And he's holding a regular expression.
It's some form of elvish.
Can't read it.
Yeah, nobody can.
Pretty good, right?
Yeah, that is good.
I've seen the same meme, but with if double underscore name or dunder name equal
dunder name, equal dundermain, it's like it's some form of elfish.
I can't read it.
It's great.
It doesn't make sense.
How can you not read that?
But also, it seems odd still that that's the way we can tell if you're running an application
directly or gets getting imported.
I know.
It does.
It works.
But it's just a weird convention.
I think, I mean, I like, I'm totally here for just the main function, you know, static main void or the variations across so many different applications.
And I mean, that's actually what I end up writing in my code is I always have a deaf main something or async deaf, whatever.
Main.
And then in the Dunder Name equal Dumberton Dundermain, I just call main.
And that's just like, this is my convention.
The main thing goes at the top.
It's called main.
That's how the app starts.
But I still got to go to that little wire together deal at the end.
Yeah.
It seems like we should have like a if like if not imported or something because that's essentially what we're saying.
But anyway, one of the things I noticed, I really enjoy sci-fi, but I realize that a lot of the sci-fi books that I love still have like talk about like in the future we'll have new technology and it's going to suck because of XYZ.
It's like there's not a lot of optimistic sci-fi.
It's a lot of dystopian, yeah.
Yeah, anyway.
Sure, well, cool, space shifts, but we've destroyed the world, so we have to use them to go find a new world to destroy.
Yeah, yeah.
And we still have politics in space.
But anyway, but no politics on this episode.
No, unless you don't feel like we're bashing elvish writing, but that's okay.
Yeah, all right.
All right.
Thanks for being here.
Thanks to everyone for listening.
We appreciate it.
Bye, y'all.
