Python Bytes - #426 Committing to Formatted Markdown
Episode Date: March 31, 2025Topics covered in this episode: mdformat pre-commit-uv PEP 758 and 781 Serie: rich git commit graph in your terminal, like magic Extras Joke Watch on YouTube About the show Sponsored by Posit C...onnect Cloud: pythonbytes.fm/connect-cloud 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: mdformat Suggested by Matthias Schöttle Last episode Michael covered blacken-docs, and I mentioned it’d be nice to have an autoformatter for text markdown. Matthias delivered with suggesting mdformat “Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files.” A python project that can be run on the command line. Uses a style guide I mostly agree with. I’m not a huge fan of numbered list items all being “1.”, but that can be turned off with --number, so I’m happy. Converts underlined headings to #, ##, etc. headings. Lots of other sane conventions. The numbering thing is also sane, I just think it also makes the raw markdown hard to read. Has a plugin system to format code blocks Michael #2: pre-commit-uv via Ben Falk Use uv to create virtual environments and install packages for pre-commit. Brian #3: PEP 758 and 781 PEP 758 – Allow except and except* expressions without parentheses accepted PEP 781 – Make TYPE_CHECKING a built-in constant draft status Also, PEP Index by Category kinda rocks Michael #4: Serie: rich git commit graph in your terminal, like magic While some users prefer to use Git via CLI, they often rely on a GUI or feature-rich TUI to view commit logs. Others may find git log --graph sufficient. Goals Provide a rich git log --graph experience in the terminal. Offer commit graph-centric browsing of Git repositories. Extras Michael: Sunsetting Search? (Startpage) Ruff in or out? Joke: Wishing for wishes
Transcript
Discussion (0)
Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds.
This is episode 426 recorded March 31st, 2021. I'm Michael Kennedy.
And I'm Brian Ocken.
And this episode is kindly brought to you by Positconnect Cloud.
Last time Brian told you all about Positconnect on-prem or your own cloud.
And we'll talk about PositConnect cloud,
a cool sibling offering, I guess.
If you are a social media person,
you can find us on the social media things.
You can find us on Macedon and Blue Skies,
the two main places we hang out.
Those links are in the podcast player show notes
right at the top.
Also, YouTube, follow us on YouTube.
There's the live link in the top that'll take you there
Please subscribe if you want to be part of the show that happens
Usually right now mod mod 7 every week Monday at 10 a.m
Pacific time time zone changes like daylight savings screw that up a little bit for people. But anyway, that's when it is
We're going into summer Brian. I don't know how consistent we're gonna be, but we've been pretty good lately, right?
Yeah.
I think so.
But we're people, we've switched if we need to.
Exactly.
And if you would like an artisanal,
handcrafted digest of an email form,
we send a bunch of information
that's not even in the show notes,
and Brian sends it out to us, to all of us,
including me, every week.
And I appreciate that, Brian, that's awesome.
You know what else I appreciate?
What?
Our audience.
When we say stuff, they're like,
I know you said you don't know about a thing,
but there are several things.
Yeah, it's one of the benefits of having a podcast.
Like last week, you mentioned, what were you talking about?
You were talking about?
I was talking about something,
Black and Docs. Yeah, oh no, no, it was black and black and Doc's and it it formatted all sorts of markdown
code blocks. Yeah, and I mentioned that
That's cool to format the blocks with the code blocks within markdown files
But I kind of wanted an auto formatter for markdown itself and one of our listeners Mattias
wanted an auto formatter for Markdown itself. And one of our listeners, Matthias, got ahold of us
and said, hey, have you guys checked out, let's see,
have you checked out MD format?
So MD format, so I did check it out this weekend.
MD format is super cool.
Actually, I'm kind of in love with it.
So it's just like any other auto formatter.
You sort of, you can, and it's written in Python.
I wasn't necessarily needing it to be written in Python,
but it's kind of neat that it is.
So you can check it out,
see how it's implemented and open source.
But so after you install it,
you run MD format on a file.
So you just sort of run it,
you can run it on a, on give it file names.
You can give it a directory and it reformats your Markdown.
That's exactly what I wanted.
But you have to kind of agree with its style
because it is opinionated.
And there is a warning that says,
hey, we're gonna, we may change this.
So if you really like the style that we're using right now,
you might wanna pin it, which is a good idea.
So the style, one of the things that I really wanted
was the underline headings of Markdown,
like you can have on this next line of a,
you can write a heading and then on the next line,
you can write like three equal signs or more,
or three dashes, and that means a heading or a subheading.
And I don't ever use that.
I use the pound version.
Only animals use the three underscore.
Well, I use the-
I'm joking, please don't write me, I'm joking.
No, I often use the three lines
for like the horizontal line.
I do too.
Yeah, yeah, I do too.
Anyway, so it switches it to the heading style I like.
Bulleted lists are kind of cool.
They alternate between dashes and
asterisks because both of those work. But so like if you have embedded lists, it'll alternate so
it looks nice. But I mean, the output is all the same anyway, but it makes it look nice.
And then there's standardization for ordered lists. However, this one tricked me up. I'm like I get it
So what they do with ordered lists if you have like one two and three
It converts them all to one and that seems weird and there's a reason around it
there's a reason is because it reduces the number of get of
Get diffs or you know when you when you change a version if you move things around
of get diffs or you know when you change a version if you move things around the only thing that'll diff is the thing that you added or the thing you deleted not all the numbering
changes.
That's nice however it's something I like to be able it's less readable just right off
the bat so there is a flag you can pass it, pass it, dash dash number and it doesn't do
that it just re-or it just numbers them consecutively,
which actually also kind of nice
because if you move things around,
instead of having to go through and retype all those numbers,
you can just do the empty format with number.
So why would you put a one, four, seven, two, three, five?
Yeah, well, I mean, you've done that, I'm sure.
Like you're moving things around and now they're wrong done that I'm sure like you're moving moving things
around and now they're they're wrong so I'm excited about that. If I was writing
in plain and as completely unassisted text editor I might write just one dot
one dot one dot and so you have the ability to reorder it however if you're
using any sort of tools that understand markdown when you hit enter it will
increment that like typora and IA writers and others, right? So it's gonna number it automatically for
you and if you want to reorder it then it's broken and so this is really nice.
Yeah and then you could of course since it's a command line tool there's
probably a hook already written for commit like a pre-commit hook but you
could write your own easily or just use it or use it and put it in CI.
So, I like this is already enough and I'm going to use it right away just for this,
but it doesn't stop there. You can also mark down, you can convert your code.
So, it will handle auto formatting your code blocks also.
And for that, it has a plugin system
because it doesn't know how you want it formatted.
So there's a plugin for black and one for rough
and a bunch of others that you can,
so there's a web one so you can like format your JavaScript
or CSS or HTML within your,
so this is, it's pretty cool
that you can have all these different plugins
to convert your code blocks also. Anyway, I'm kind of in love with this. I
like it a lot. That is very nice. Can you go back to the home page of this thing? I
want to point out something interesting here. Okay. Yeah, go to the top. So it
says, here's how you install it. PipX install MD format. You could easily do UV
tool install MD format, right Ryan? Yeah, definitely. Let's see the inject. That inject pipx inject MD format, MD format
dash GFM, I'm guessing, github marketing format. What does inject do? Yes, I'm like
what is that? And so while we were talking I did a little research and what
it does is it will add additional
packages but to the same virtual environment the dedicated virtual
environment that pipx creates for the tool so okay pipx will create a tool for
MD format and then also install these other things now I was we talked we
talked to UV up so much and we're gonna come back to it somewhat as well. But as far as I can tell, it doesn't have such a feature.
You've gotta create a virtual environment
and then install it.
You might be able to do a run dash dash with
and make a really long complicated thing,
but there's no clean.
So how about that?
Paybacks for the win a little bit,
which is not usually what we're saying.
I like paybacks, but that's not normally what we say.
Yeah, no, cool. All right. All right. All right, on to the next which
is pre-commit UV. I told you that we're coming back to it. Here it is. So despite
it having no description, it's in the GitHub repo which they could probably use,
the idea is to make, to bring the advantages of UV to pre-commit and get
pre-commit hooks. So pre-commit is a project by Anthony Satili and the
idea is it's like a multi-language runner happens to be written in Python but
it's not about Python per se that will run pre-commit hooks. So instead of
saying well you want to use a pre-commit
hook written in Rust, you've got to install and manage
Rust and all that, you just kind of like,
and do it its way, just pre-commit it, right?
Yeah.
So that uses pip and it has all the bonuses,
but also the drawbacks of using pip.
So you can pipx install pre-commit,
and then here we are again, pipx inject pre-commit and then here we are again pipx inject pre-commit dash UV and so then when you
When it does it its thing to install and set up a new machine with the pre-commit hooks or updated or whatever
It's going to use UV and they did a
Go back up look for a second. There's the UV version UV tool install pre-commit with so that's like the inject
Yeah, I think that inject yeah I think that
that would I think that would do it okay I think that's the way that you could
probably pull that off but I think you know maybe maybe that will do it if you
do you and I thought you could only do that with run but if you can do with in
the install then you know there you go that's the that's the UV way awesome
okay so we've learning stuff, but
they're running a
timed example of run one thing and then the other says
Try pre-commit install hooks. I don't know what the hooks were but some set of hooks and install them with raw
pre-commit and then pre-commit UV install hooks and the difference here is with regular
pre-commit UV install hooks. And the difference here is with regular pre-commit,
it took 54 seconds plus or minus eight around.
With pre-commit UV, it took 41.
However, that's the first time you do that on a machine
that involves those dependencies, right?
If you hit it again, like if pre-commit UV has to
build something from source, it's gonna be super cached again, right?
So I think, well it does say 10 runs, interesting.
But I think it's doing it with like an isolated environment or something like that.
Anyway, if you're already using UV and you use pre-commit hooks, check it out.
There's some configuration options you can pass with environment variables and so on. Once installed it will use UV out of
the box. However, you can disable that and then require you to run it with I think
the dash command. The pre-commit, pre-dash commit dash UV. There you go.
Cool. Cool. You know what? Before we move on, I do want to tell people about our sponsor.
So let me tell everyone about Posit and Posit Connect Cloud.
So this episode is brought to you by the folks over at Posit.
They're originally known for building RStudio and Shiny, and they've created a bunch of
tools for the Python community.
For example, Shiny for Python.
I had Joe Chung on to talk about that. And a whole bunch of infrastructure things for the Python community, for example, Shiny for Python, I had Joe Chung on to talk about that,
and a whole bunch of infrastructure things for Team Python.
So, I wanna tell you all about PositConnect Cloud,
which is a cool cloud-hosted, they manage it,
pass that manages your data science platform.
So, it simplifies deployment of data applications
and documents, and it might be the most simple
way to share your Python content as a data scientist.
So all you do, three steps, you put your code into a public or private repo, and then if
it's private you can give it access to your private repo, for example.
If it's public, obviously don't worry about it.
Then you tell PositConnect, you basically point PositConnect Cloud at that repo, and
you click deploy. That's it.
And it's off and running and it'll clone your code repo, build your
asset, and host it on an online URL that you can share. And best of all, it will
update your app, continuous delivery style. So if you push new stuff to the
branch that you've told it to publish, it'll just go, ah there's a new version
of your data science thing, let me update the one out on the cloud that you've told it to publish. It'll just go, ah, there's a new version of your data science thing.
Let me update the one out on the cloud
that you're sharing with people at your company
or researchers or however you share it.
And any GitHub user can create a free
PositConnect cloud account so you don't have to do a trial
or anything like that.
You can just use it for free and try it out.
And if you need fast, lightweight way
to share your data science content, try
PositConnect Cloud. And as Brian told you last week, if you need these features but you need them
private, then you can try the on-prem version PositConnect. So if you work on a data science
team or moving fast matters, you owe it to yourself and your organization to check out PositConnect
Cloud. Visit pythonbytes.fm slash connect-cloud. See if it's a good fit., visit PythonBytes.fm slash connect dash cloud.
See if it's a good fit. It's PythonBytes.fm slash connect dash cloud. The link is in your podcast
player show notes right at the top. Thank you to Posit for supporting PythonBytes. Yes, very much.
Thank you. So now I'd like to talk about a couple of PEPs. So these are pretty quick topics, but
to talk about a couple of PEPs. So these are pretty quick topics,
but there's some changes to the PEPs.
So PEP57, no, I got that wrong.
PEP758 is allow, accept, and accept star expressions
without parentheses.
This was accepted as of, looks like the 14th of March.
And so looking through here,
and I kind of, I guess I just like,
I don't really think about it too much,
but if you have a try accept block
and the accept can accept a lot,
like you shouldn't have just accept with nothing.
You should have accept with which types of exceptions.
That's right, you should put pass out there.
Try accept pass is the best way.
Try accept. No, I'm just kidding out there. Try accept pass is the best way.
Try pass, try just skip the accept. Anyway, so the if normally right now if you have several exceptions that are allowed, you put them in parentheses. Now this is just a small little
language change that says you don't actually have to put the parentheses there
or you won't in the future.
And I'm all for this.
This looks great.
It seems like in slam dunk,
and I'm sure that's why I got it.
One of the reasons why it got accepted
is that just in the future in Python 3.14 and beyond,
you won't need the parentheses.
That's really it.
Kind of nice. However, you won't need the parentheses. That's really it. Kind of nice.
However, you know, so like four years from now,
we can start using this if,
because you'll, you know,
once you stop supporting all other pythons below three point,
you know, whatever, for package.
So for package maintainers, this is,
this is future news for normal humans.
This is news for this year.
So anyway.
Yes.
Another PEP that is not accepted yet,
it's in draft form.
I just wanna highlight it because I think it's a good idea.
Is PEP 781 make type checking a built-in constant.
And the idea around this is I'm noticing as I'm using typing more,
is that occasionally I need to, like if you're going to import something, like if I only import
something just so that I can import the type, so that I can put the type of something, you know,
the type of a class or a type of a return value or whatever, in a function import or a function statement or whatever, a
variable type. I don't really need the type, the import for running, I just need
it for type checking because that's to get the type. So there's that, but
it does cause some, but if you do that the import like, you know, is running all the time anyway. So, but you always have to,
to say like, you know, from typing import type checking, what,
to tell whether you're type checking or not,
this is just basically just saying that we,
that we won't have to do this anymore. So instead of, uh, uh, or is the,
it was the actual spec. Um, yeah. So we'll we'll have like, just have it be a constant is all.
So anyway.
Yeah, that's great.
Part of the built-ins, right?
Just you don't have to import it.
You can just use it like you can print and others.
Yeah.
Yeah, like underscore, dunder, type checking or something.
So yeah, anyway.
Love it.
I think we should have it.
It'll be good.
Oh, while I was here, though, another thing I want to highlight I think we should have it. It'll be good. Oh, while I was here though,
another thing I wanna highlight is I was like
looking around, I'm like, well, what else is there?
And there's an index by category here at peps.python.org
and it's really kind of great.
This is a really well put together web page
about how to navigate peps
because there's a lot of peps, right?
So I was like, well,
I'm currently looking for ones that have been accepted. So you can pop down and say accepted
PEPs. And then you can look at what the version number, which, which they're, what version
they're coming in, or which they came in and stuff. So really nice, nicely done, easy to
navigate website. So good job.
That's very nice.
Anyway, so that's it for that.
I wonder if that's available in a structured data way.
Is there like a JSON that represents some data
or something?
There is an API.
I don't know if it applies to that.
I'm sure somebody will tell us.
Yeah.
Mining point, chat GPT at that table and have it do it.
Yeah, JSON metadata.
Yes, indeed.
All right.
On my final item, Siri.
Sorry, anybody's phone who started?
I just pronounced the same, S-E-R-I-E.
I guess that would be the same.
So this is for people who are more terminal-like,
but need a better Git experience.
So it's a rich Git commit graph in your terminal.
So there's a little picture here.
Open the image and look at it bigger, I suppose.
But basically, it gives you the entire branch tree
and something that you can navigate around
and interact with, kind of like rich,
and lets you do things like search all branches
over the commit log and browse through tags
and all kinds of stuff.
What do you think, Brian?
I love this.
I mean, can you try it right away?
Yes, I know.
This is so cool.
It looks really cool.
I totally want to start like, okay, that's cool.
Now it's written in Rust, so it's not a Python thing.
It is a tool for Python people.
Although I feel like we have a certain kinship
with Rust people.
It's not really written in Python,
but that doesn't matter because you just type the command
and you get better understanding of your Python and other code, right?
Yeah.
So yeah, there's not a whole lot more to say about it.
You can install it with homebrew, you can install it via cargo, other ways you can even
build it from source.
But yeah, it's a pretty simple tool, but it's super nice.
I'll have to check it out.
Please be available on Windows.
Because that's where I really need it.
So yeah, yeah, for work, right?
Yeah, yeah, I imagine it is.
I mean, Rust is pretty cross platform.
Yeah, them fingers.
Try to remember to try it in Windows terminal.
Don't do it in CMD dot exe.
Don't push your luck.
You just have to terminal.
Yeah, it's like the much nicer our show full
PowerShell is the thing that the shell that runs but
Windows Terminal is the app that hosts it and it has much better compatibility
like for example rich works a lot better in Windows Terminal than it does in CMD
and so on. Get it from the Microsoft App Store. How am I only learning about this
now? It's really nice and you can do like drop downs and say run
this tab in PowerShell, run this one in PowerShell run this one and get bash run this one and I don't
What you call dos whatever that is I'll report back because yes
You let us know I've spent my entire career pretending that I don't or use a Windows machine at work, but yeah
yeah, you could even I think open a
particular tab as a
Windows subsystem for Linux and boot2 type deal. So pretty cool.
Nice. Okay. Tanger.
All right. Extras. We're on to our extras if you have extras.
I have no extras today.
Well, you're lucky that I do.
Oh, and before we jump on, Will, who I just released a TalkPython episode about high performance algorithms, algorithms for high performance terminal apps.
And we talked a lot about this, says Windows Terminal will be the default
in future Windows releases.
Good times for terminal users and, in the case of Will,
terminal framework builders, two-way builders.
I wonder if you need term colors for Windows Terminal.
So anyway, okay.
I don't know.
I don't know, but let's see what else I have extra
I was on, okay, not the picture.
So I wrote a blog post, I was just gonna link to the okay, not the picture. So I wrote a blog post
I was just gonna link to the place that I'm using but I wrote a blog post called Sunsetting search and Brian
I used to use search so much
I've talked about kagi and how much I love kagi and all those things right a couple years ago
And I was probably doing a couple thousand searches per month in there. Yeah, I looked
last month across my three computers that I use
and my multiple browsers on each one
and my phone and my iPad, I did 211 searches.
How about that?
You probably did more, but okay.
Kaggy keeps track in your account
because they charge you by it.
Oh, okay.
So I went and looked at my Kaggy stats
and said you did 211.
Why is it going down? Because I'm using AI to answer so many of these questions
these days. And so many with the pro chat GPT and stuff it's just like I
could open up a bunch of tabs and do a research project myself or I could hey go
do some deep research on this and come back to me with references to where you
found the answers and summarize it. And anyway I think it's I just thought it
was really wild and so I am switching over to something called start page. Have
you heard of start page? Yeah I've been using it for the last couple months.
I love it. Do you like it? Yeah it doesn't have I'm gonna sound like a like an old
guy or something I like that it just gives me search results
and doesn't give me AI results at the top. Yeah, yeah, yeah. It's really good. And I
super love it. You can go and it's you don't even have to have an account. You can just
basically set it up to like not show all of its ad stuff somewhere. I don't know I was
fooling around that. But I think it's great. It's basically private. Like privacy preserving doesn't pass your information on along to to
Google. But it's basically the Google index. There's some places that say don't show the
ad as an appearance, general, I don't know. Somewhere. It says don't show all the
marketing goo. But if you go and search there, it will sort of disintermediate
your Google searches I
guess and it has like little visits as privately right you know
you can say if you do some kind of search like how do I get out of here let's
go back here if I search for like Python podcast or something it'll let you run
it in like a little VM iframe that like doesn't even let it know where you came
from it's pretty interesting this thing. It's it's pretty interesting this thing
Yeah, I think it's pretty interesting. So it's using the Google index though
Yes, and the way that it funds itself is it also has ads
Yeah, however notice I have no ads in mind because I run an ad blocker and it takes them out
So it's even better. See I'm running it with ads and it's just not annoying to me. I'm like, I'm OK with that.
Yeah, that's good.
But because they're not tracking it, they're not tracking stuff.
So, yeah, I mostly hate the the tracking and the retargeting and all that.
Yeah. So, yeah, good.
One of the curious things I've got about this is I wonder.
So I know that Google sort of a tangent, but I know that Google, like,
worsened their search like recent, I don't know, sort of a tangent, but I know that Google worsened their search
like recent, I don't know, several years ago,
so that people would have to go through more pages
so they see more ads.
Yes, terrible.
I wonder if that's the case with the,
did they do that mucking about in the index
so that start pages using the mucked up index or?
I wonder.
Probably, but it doesn't have as much of that
not immediate, like not as much of that not immediate,
like not so much of the answers.
So if you did a search on straight Google, you get,
and here's a whole bunch of videos,
and here's a bunch of Q&A stuff we found.
And that's half of it.
And then you got the ads, which are a third of it,
then way down at the bottom somewhere,
you get a little bit of something to start.
And I don't see any of that stuff there.
Yeah, or just the AI answer at the top. I think that a lot of
that's killing a lot of ad revenue for actual or actually traffic to people
that are actually writing about interesting stuff. So I know exactly.
Kaggy does have a very interesting approach on whether to put the AI answer
at the top and that's if you if your search on Kagi ends in a question
mark it'll put an AI answer if the same search without a question mark on the
end goes there there's no answer shown. Interesting. Yeah I believe that
start page does have an answer sort of thing but you got to turn it on or
something I'm not sure I feel like I've seen it but anyway since I'm not using
search so much I thought well let me search around see what else I can find
and yeah start start page.
It's interesting that you're using that as well.
Yeah.
Yes, I think it just got turned on by me.
I didn't think I found it.
I think Vivaldi turned it on or something, but I don't know.
Interesting.
Okay.
Yeah, I'm a fan.
But all right.
Cool.
Yeah, cool.
One final extra, Rhett Turnbull, who's been on Python to talk about building Mac apps with Python,
sent us, so he knows something about building
some frameworks and stuff.
He says, remember I said, Brian, you can just
UV tool install rough, and then you just have rough
and don't have to put it into your requirements file
or your UV lock or wherever those things go.
He says, good advice, however, you
might want to actually put it in your virtual environment.
That way it becomes part of your pinned dependencies
so that people who are contributing to your project
use the same version of Ruff if they don't already
have that exact version.
And you don't get like flip-flop of git changes
because something changed about Ruff itself or the rules
defaults or something.
Yeah, yeah, I totally agree. And that's one of the fun things that we have in talking about Python
tools and everything for everybody is that the advice for solo developers is different than the
advice of people that work on teams. So yeah, teams even being open source teams.
Yeah, exactly. Exactly. All right. Shall we make a joke?
Sure.
Let's see how I did today.
This one, I thought of you, Brian, when I wrote this,
because I thought this is all about the C developers,
or even the C sharp, or C++.
I'm sure there's many other languages that have this.
But C in particular came to mind.
This has to do with a genie.
And this software
developer like person comes along and stumbles upon the golden genie shaped
little vase or whatever the heck it is. Yeah. And rubs it as you do, out comes a
genie says I will grant you three wishes okay but before you can the genie
interrupts. The rules are you can't wish for death or life
or make people fall in love
and you can't wish for more wishes.
That's usually the escape hatch.
You have three wishes.
Like first wish, I wish for a million wishes.
Now let's start.
Can't do that.
Can't wish for more.
So I can wish for fewer wishes?
Why would you wish for that?
I think there's a bug in this in this
cartoon so I'm gonna fix it. I wish to have negative one wishes. Fine, granted.
You have four billion two hundred ninety five thousand nine hundred and sixty
seven, sorry, four billion two hundred ninety five million nine hundred sixty
seven thousand two hundred and ninety five wishes left. Stack up and underflow.
Yeah, it's an unsigned int they were storing it in.
Yeah.
Yeah, I think you're right.
It has a bug, because the cartoon has 0,
and 0 should be valid for any numbering system.
It should, but minus 1.
And then if you go to the thread a little bit further down
in here, there's a lot of pretty good comments of almost no one caught that it needs to be negative like under flow like zero
Doesn't under flow people but someone pointed out the hat
Pointed out you need to upgrade it the 64-bit genie. There's some kind of like animated
crazier crazy
Game with like lightning striking it. That's the 64-bit version. That's funny
It would just give you even more negative,
more wishes if you underflowed that though.
Yeah, so do you remember the first time you hurt,
you probably don't, and I don't either,
but early on learning these, like the genie
in the lamp stories, I was like thrown because like one,
that didn't look like any lamp I had in my house.
And why are you rubbing
the lamp that seems weird why would somebody do that but guess it comes from
a time when you've got more time on your hands and well no yeah well it's also
like it's an oil lamp they look different and also it was probably brass
and now that I'm an antique dealer we you know
You got a policy or something right? Yeah, yeah, yeah
I don't know that I own a single thing this brass
I got a lot of crap around my house, but I don't know that any of them are brass, but who knows really?
Anyway, I thought that was a pretty good pretty good joke. What do you know? It's good. I like it
Yeah, yeah as a as a C person you have to approve except for the bug. Except for the bug.
Except for the bug. They didn't they didn't test it. No, they certainly did not test it. We'll come back to that next week
somehow. I'm sure. Yeah. All right. Well, thank you, Brian. Thank you everyone for listening and see you all later.