Python Bytes - #428 How old is your Python?
Episode Date: April 14, 2025Topics covered in this episode: How to Write a Git Commit Message Caddy Web Server Some new PEPs approved juv Extras Joke Watch on YouTube About the show Sponsored by Posit Connect: pythonbytes....fm/connect 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: How to Write a Git Commit Message Chris Beams 7 rules of a great commit message Separate subject from body with a blank line Limit the subject line to 50 characters Capitalize the subject line Do not end the subject line with a period Use the imperative mood in the subject line Wrap the body at 72 characters Use the body to explain what and why vs. how Article also includes Why a good commit message matters Discussion about each of the 7 rules Cool hat tips to other articles on the subject “Keep in mind: This has all been said before.” Each word is a different link. Michael #2: Caddy Web Server via Fredrik Mellström Like a more modern NGINX Caddy automatically obtains and renews TLS certificates for all your sites. Caddy's native configuration is a JSON document. Even localhost and internal IPs are served with TLS using the intermediate of a fully-automated, self-managed CA that is automatically installed into most local trust stores. Configure multiple Caddy instances with the same storage, and they will automatically coordinate certificate management as a fleet. Production-grade static file server. Brian #3: Some new PEPs approved PEP 770 – Improving measurability of Python packages with Software Bill-of-Materials Accepted for packaging Author: Seth Larson, Sponsor Brett Cannon “This PEP proposes using SBOM documents included in Python packages as a means to improve automated software measurability for Python packages.” PEP 750 – Template Strings Accepted for Python 3.14 Author: Jim Baker, Guido van Rossum, Paul Everitt, Kaudai Aono, Lysandros Nikolaou, Dave Peck “Templates provide developers with access to the string and its interpolated values before they are combined. This brings native flexible string processing to the Python language and enables safety checks, web templating, domain-specific languages, and more.” Michael #4: juv A toolkit for reproducible Jupyter notebooks, powered by uv. Create, manage, and run Jupyter notebooks with their dependencies Pin dependencies with PEP 723 - inline script metadata Launch ephemeral sessions for multiple front ends (e.g., JupyterLab, Notebook, NbClassic) Powered by uv for fast dependency management Use uvx to run jupyterlab with ephemeral virtual environments and tracked dependencies. Extras Brian: Status of Python versions new-ish format Use this all the time. Can’t remember if we’ve covered the new format yet. See also Python endoflife.date Same dates, very visible encouragement to move on to Python 3.13 if you haven’t already. Michael: Python 3.13.3 is out. .git-blame-ignore-revs follow up Joke: BGPT (thanks Doug Farrell)
Transcript
Discussion (0)
Hey Brian, hey everyone.
Hey.
Happy summer.
It's lovely.
Been working in the garden.
I know, me too.
I have six bags of leaves I've piled up outside.
It's only a tiny corner of my yard that I, yeah, there's a lot of leaves.
Welcome to Oregon.
Okay.
Let's do it.
Let's kick off the show.
Hello and welcome to Python Bites where we deliver Python news and headlines directly
to your earbuds.
This is episode 428 recorded
April 14th 2025. I'm Michael Kennedy and I am Brian Ocken. This episode is brought
to you by Posit and Posit Connect. Thank you to Posit for supporting the show. We
will tell you more about them later. If you're a social type and you want to
connect with us socially you can do so on a mastodon and blue sky
You can join us on YouTube at Python bytes Fm slash live usually on Monday at 10 today a few minutes later
But generally around there you could also catch the older episodes every episode page has YouTube trailer or poster
You can click and finally if you want our
increasingly cool artisanal
And finally, if you want our increasingly cool, artisanal, handcrafted digest of what is going on,
put together by the one and only Brian Ocken,
joining our friends at the show, mailing,
let's go to the website, click newsletter, sign up.
People are, more and more people are writing in, Brian,
say they like the newsletter.
That's great.
Yeah, I think it's really good.
I like it.
I do too, I'm glad we're doing it.
I wish maybe other people might learn
how to write get commit messages better.
Well. Honestly.
I'm trying, I'm learning.
Let's get going.
So I'm gonna cover something by Chris Beams,
how to write a get commit message.
And oh man, I probably write like a dozen
get commit messages a day maybe, you know,
from one to a dozen.
And so I was interested to see how to do it better.
So there's an XKCD at the top,
which is, you know, just gibberish.
The first commit message is created main loop
and timing control is pretty good.
And then by the end, like the most recent is like,
hey, hands, just something.
Here have code, more code more code ah my hands are
typing words and one of the things that this isn't part of the article but one
of the things I enjoy is being able to be fun with my commit messages when I'm
just doing when I'm doing it on a branch that I'm just doing it for local saves
essentially and then I squash it into a main branch and then I really want this
squashed commit message because that's the one that'll stay there to be really good.
So they're really when you want to write a good commit message here's what you have.
And I would there's like seven tips but there's seven rules but I was intrigued by like the
first one.
So like for example at the top there's an example of kind of a run on commit message
that you have to kind of like scroll to the right to see all of it.
Huge commit message.
Not good.
And then some better ones that are shorter.
So how do we get that?
And having included have like good information.
Well, one of the things that I didn't really I didn't know about and I learned from reading
this is that if you separate the
subject and body with a blank line so the the top line is get will or get and
a lot of get tools recognize everything up to the first blank line as the title
of your commit message so in the example there's an example with like just one
line the short line and the short line, and then
a blank line and then the rest of it that you're logging everything will just show that
one line and then it doesn't show the rest of it unless you should like click for details
or something.
Really cool.
I didn't know this did this.
So that's great.
So separate the subject and body with a blank line.
Limit subject line to 50 characters,
I think that's just to keep it,
because we kind of do like the 80 character thing sometimes
and like a bunch of the characters are used
for the actual like the timestamp and stuff like that.
So, or the hash, like the first few digits of the hash.
So we wanna leave some space for that.
So 50 characters, capitalize the subject line.
Don't worry about a period
because that's one of your characters.
So don't worry about it.
Use imperative mood in the subject line.
And if you don't know or don't remember
what imperative mood is, which I didn't,
so I'm glad there's a discussion later.
There's a discussion about all of these in the article
Wrap the body at 72 characters. That was an interesting thing that I that I
It just is an interesting so I I use tools that wrap it automatically but a lot of people are using tools that don't and you so to store it in
Approximately 72 characters and I I just think of this as keep lines short-ish
and actually use new lines and don't depend on wrapping.
And then the most important is number seven,
I think this is the most important.
Use the body to explain what and why and not how.
The code changes how you did the change.
So the commit message is what did you do
and why did you do it?
And I really kind of actually just focus on why.
I don't even really do the what too much.
So good information about commit messages.
I also love, there's a lot of people
that have talked about this before,
so he references a handful of this.
It says keep this in mind, this has all been said before.
And each one of these words is like this
and has, are all different links to different articles.
So it's kind of a fun way to reference other people's work.
So, good job.
Yeah, this is really interesting.
And I'd not too long ago learned the thing
about one sentence and then a paragraph or two being extra.
And I learned it from the JetBrains AI in PyCharm. Oh really? Yeah, because one of
it's actually really quite good at writing a commit message if you just press the AI summarize what I
did. Okay. Provided that what you're doing is focused. So if what you did was uh run pip compile
and update 20 dependencies and then you ran rough and reformatted it, never click that button. But
if you legitimately did something, you know,
that is like a focus thing that it can look at
and go not like you remove 700 spaces in these locations.
And then it comes out really good and it does that.
It'll put like one sentence and then it'll summarize
in detail what it's discovered below.
Yeah.
Yeah, so very cool.
That's it, I don't use it that much.
I probably should use it more,
but sometimes end up in hands. Just work. That usually for me, when I end
up writing commit messages like that, I am frantically trying to fix something I just
broke in production and I'm like, Oh, I got to put it back. Just take, just take this.
I just need you to be able to get pull on the server again and try
again before it disrupts too much you know what I mean?
Yeah well I just realized that there's another thing that I do frequently as well is if I
commit and then push everything and then CI breaks for some reason like because I forgot
something like I forgot to add like I added a file and I forgot to add it and push that I will the second commit I will I will try to have that the message
be identical to the first one so that when people are looking at it will show
up as a different commit but it then it makes it obvious that it's part of that
same commit is intended to be together yeah that makes sense I agree with that
this looks really useful cool who knew writing a single sentence would be so interesting.
Hands!
All right, let's talk about caddy. Brian, are you familiar with caddy?
Just caddy people. I mean there's caddy shack. What's that?
Yeah, but this is not that. This is caddy the ultimate server, ultimate web server.
So if people are thinking about how do I host my web apps with Python?
There are a few now that the thing
that runs your Python code could theoretically
also be the thing that serves,
that talks to the web browsers,
but typically and certainly traditionally,
there's been an interesting divide there.
We've got static web servers and proxies
and firewall type things, that's like Nginx and others.
And then you've got the stuff that actually runs
your Python code, probably scaled out to be like
four of them or something in a web farm,
with uviacorn, gunicorn, micro-whiskey,
which don't use micro-whiskey anymore, we covered that,
but you know, gradient, all those types of things, right?
So this one I wanna cover, this thing I want to cover today called Caddy is actually sort of a parallel of
NGINX. So this comes to us from Frederick L Storm and Storm, thank you so much for sending this in.
But it's something I've been tracking as well and I've wanted to switch over but my world is just so complicated. I have every line of nginx you know you've got to put like a
little configuration yaml JSON like combo file together. I have 2,200 lines of
JSON or whatever nginx config files. That's a problem and I don't really want
to mess with trying to move that so it's to stay. But if I were starting over, I believe I would be probably choosing Catty. It's
a super, super simple way to create web apps that you can run. It comes with automatic internal no
action on your fault, your behalf, HTTPS through Let's Encrypt. So for example, you set up a website you say my website is like
Michael deploys comm or whatever and you don't have an SSL certificate
You start it up and long as it's running on the server that actually that domain resolves to it will just automatically get you a
Let's encrypt certificate and keep it up to date. Oh, that's really cool, right? Yeah as
63,000 stars on github. That's pretty awesome
If you want to do development sometimes you need to have HTTPS and it will automatically do a local trusted
Certificate for you if you want to run on localhost
It'll just do like even localhost is over HTTPS does clusters
There's all it has a little test. You can test it out for yourself.
Put your domain to this location or whatever and try it out.
The, let's see, find the config.
The config is super, super simple.
Let me just write a couple of lines.
If you've ever worked with HTTP files from PyCharm,
it looks a little tiny bit like that.
But yeah, it's real simple.
You just say handle slash blog slash star
and you put the details out of there. That's just how that processes that. But yeah, it's real simple. You just say handle slash blog slash star, and you put the details out in there.
That's just how that processes that.
But it can reverse proxy slash API, which actually
goes over to another server.
And it can reverse proxy another one,
which actually does a round robin load balancing
to yet another cluster of servers.
Isn't that cool?
All that stuff's so simple. Yeah, it's really cool.
It still doesn't look simple to me, but.
Well, try the alternative, right?
So people can check this out.
I think it's really neat.
The caddy files are super easy to work with here.
What was I showing?
I think, yeah.
Anyway, there's a bunch of different examples.
Some of them are simpler than others like this.
No, this is cool.
Yeah, but one of the other things that's cool
is if you're coming from somewhere else,
like I was complaining that I have all this nginx config,
you can actually just pass it an nginx configuration file
and go, I'm not ready to rewrite this in your world, caddy.
Just run this nginx configuration,
but you'd be our server for that.
So you could slowly migrate over into that.
Yeah, anyway, you can even use apparently a MySQL database
as a source of definition of your front end web server,
which sounds kind of wild, but then again,
you can write code and APIs and stuff to control it then,
right, just change the database
and then you change the web server.
So all pretty cool.
Anyway, I think people, if they're thinking about Nginx
or something like that, should maybe give this a look.
I don't remember what it's, oh, it's written in Go.
That's what it's written in.
So it's pretty high performance.
It does HTTP one, two, and three.
So the two is most important, but three is also interesting.
Anyway, 98% Go, 2% HTML.
Nice.
Indeed.
So if you ever got stuff to host and you're not doing platform as a service,
there you go. Cool. Speaking of which, let's talk about, before we move on, let's talk about our
sponsor, huh? Yeah. Yeah. So a couple weeks ago, Brian, you told people about Posit Connect,
and I want to talk about it again, but for a slightly different reason. So you talked about how easy it was to use.
I want to talk about how you can use it to share your data science projects and
how you can do that securely with things like single sign-on and so on.
So this episode is definitely brought to you by the folks at Posit.
They've made a huge investment in Python, originally known as being an R shop,
making RStudio and others.
They've been putting,
maybe the majority, certainly a ton of effort
into things for Python people these days.
So if the words of, the mention of words like HIPAA,
GDPR, or other privacy policies make the hair
on your neck stand up, you'll know you want
a trusted partner to help your data become shareable,
but also follow those safety rules
that we all have to live by.
So PositConnect can help.
And PositConnect lets you securely develop,
deploy and share what you build with Python.
If you build it with Streamlit, Dash, Plotly,
Bokeh, FastAPI, Shiny, Flask, Quarto, and other APIs.
So here's how it works.
You or your team set up PositConnect
on a secure server within your org or behind some VPN in the cloud
amongst your cloud servers
and using your existing authentication system.
Then when you publish a piece of content,
PositConnect lets you set user level permissions
for that content, making it visible to some users,
not others, but what's even more interesting, I think here,
is that you can set credentials on a per user basis.
So imagine you write code that then goes talks to a database that then accesses a bunch of data,
depending on who is doing that, they can see some of the data,
but not all of it are different things and so on, different team reports or whatever.
So in Posit Connect, you can actually per user set how they can access other things like
your database or your APIs or external APIs or whatever.
That's pretty cool.
So if you work on a data science team where security matters, you owe it to you and your
org to check out PositConnect.
Do that by going to pythonbytes.fm slash connect today and get a three month trial to see if
it's a good fit.
That's pythonbytes.fm slash connect.
The links in your podcast player's show notes. And yes, we all know you can just Google AI,
Bing, whatever, Posit Connect, but please use our link
so they know that it came from us.
That way they will continue to support the show.
Thanks to Posit for supporting Python Bytes.
Awesome.
Yeah.
All right, back to you.
What's your third item?
Well, not third item, your second item.
I am gonna talk about, let's see.
I'm gonna talk about PEPs.
So we've got actually a couple PEPs coming in.
It's good, because I need a PEP talk.
Sorry, go ahead.
So a couple of PEPs that just recently got accepted.
So these are, one of the PEPs is for packaging
and one is for Python 3.14.
So PEP seven, let's do the packaging topic first.
PEP 770 is improving measurability of Python packages
with software bill of materials.
And that's a mouthful, but it's about S-bombs.
And if you don't know about S-bombs,
you probably ought to know a little bit.
So this is a good thing to read.
And if you do know about S-bombs,
they're stressing you out probably.
So this is something that we're in the corporate world,
a lot of people are trying to think about.
And S-bombs, I'm probably gonna massacre this definition,
but generally are a way for us to,
because we're using a lot of open source projects
and third party libraries and like a Python package
isn't just the Python code,
it's also possibly some Fortran code in it or whatever,
and some other things inside or Rust
that you wanna try to track all those dependencies.
And the S-bomb system is a way to get that right
so that you can make sure that you know
where all of the code's coming from.
And this was, there were some different ideas
about how to do this within Python.
This 770 came from Seth Larson, sponsored by Brett Cannon.
Really kind of a neat way to look at,
Seth has looked at the different ways
that we're already specifying a lot of this stuff with our packaging metadata. So how do we use that
to try to fill out a lot of the S-bomb fields automatically? And this is just
really some great work. So I'm glad this is going in. Again, since it's
part of packaging, it doesn't really attach to a release, so I'm glad this is going in. Again, since it's part of packaging, it doesn't really attach to a release.
So I'm not sure when we'll get like,
I didn't look through if this is something
that's already implemented or not, but it's just accepted.
So, and even if we do get it,
we'll get it through tools and stuff.
We won't get it through the Python release versions.
So next one that I'm also a little confused about,
but excited about is PEP 750 template strings.
So we've got F strings.
These are like F strings on steroids.
The T strings will replace the when you do a template string.
You'll won't say F string, you'll say T string.
And so it builds like, for example, if you had hello name with the name in curly braces,
with an f-string that would fill in the name
with whatever variable.
But we want it to be like just to just hold that thought
and we'll fill in the name later sort of a thing.
And I still like, I'm just sort of getting into this.
I don't know really how to use these,
but I'm really excited that a lot of this has been thought out
Now there's a whole bunch of authors Jim Baker, Greeden Van Rossum, Paul Everett
Three other people Dave Beck, Dave Peck, sorry
Lissandro's Nicolao and Couti, I don't know. I'm sorry about
Massacring your name. I'm sure. But a lot of people working on this,
really well thought out also,
some really cool stuff about being able to combine
the thought about like with f strings,
you can do math on it, or sort of like adding
and concatenating and stuff like that.
All that stuff's been thought out.
How do we deal with like displaying them, using them,
the whole shebang. This is going into Python 3.14 or 3.14.
So that's just right around the corner.
So really, really excited about this one.
So many pie jokes are coming in that version.
I think this is really interesting.
I talked to Paul a few times about this
and I know he's really excited
from a web developer's perspective.
So think about Jinja templates,
Django templates, Chameleon templates,
like that kind of thing.
But with more flexibility,
and they're being supported by the Python runtime itself,
not a third party library that parses
and processes it separately.
Well that's what I was thinking,
with this in place, would you need Jinja templates,
or could you just implement your stuff with this? Theoretically, I Like, would we need, with this in place, would you need Gingy templates or could you just
implement your stuff with this?
Theoretically, I think you could just do it with this.
I mean, I think it's somewhat inspired by components and stuff from the JavaScript libraries
where you've got your JavaScript, but then there's a string in there, like some weird
HTML fragment in there that's actually the template that you would use.
They're just kind of interwoven so they can have a little bit more locality
of behavior with each other.
I think that that is a part of the motivation here, I do believe.
Yeah.
But I'll probably have to have Paul and maybe some of the other folks on the
talk by Thondad talk about it.
Yeah.
I'm sure we're going to have lots of articles about it and everything.
So we will talk about it more for sure.
So.
Indeed. Awesome.
Indeed, indeed.
All right, well, let's round things out
with a little data science.
Have we spoken about UV before?
People out there, do you know UV?
Have you heard of this?
It's a library for managing dependencies and projects.
Actually, I'm probably gonna get my jacket signed
by Charlie Marsh when I go to PyCon
because that's how much we talk about it.
No, definitely fanboy of UV.
And I wanna talk about a pretty new project called,
you wanna pronounce it as Juv, J-U-V,
but I think it's J-U-V is probably the way to say it
because it's based on UV.
And what this is, this is a toolkit for notebooks
where the virtual environments and the dependencies and such of it are managed by
UV which is pretty cool. So what can you do? Hey, by the way, this is a pretty new project 222 stars
I don't know what's the you know, it's it's only been created six months ago and it's not too
Not too well known but I want to shine a light on it
So you can create manage and run Jupy Notebooks along with their dependencies, which is cool.
You can pin the dependencies with the PEP723 inline script
metadata, which has been accepted.
It must be, right?
Yes, final.
You can launch ephemeral sessions
for multiple front ends, like JupyterLab, or Notebook,
or MV Classic.
And it's all powered by UV.
So pretty cool.
You can, as you would expect, UV tool install Juv,
or you can also pipx install it.
And then once you've done that,
you can just say UVX Juv and it'll run.
But more importantly,
if you look at the different things you can do to it,
you can say things like Juv init some Notebook,
or you can init a notebook with
Python 3 and give it a name which is cool you can go to that notebook and you
can add a dependency for pandas and numpy to it like that's not something
you can normally do to notebooks right or you can say I have a requirements dot
txt file I've created with pin versions using UV pip compile then I can say
Juv add dash dash requirements and give it a full-on requirements file
So in case you have a ton of requirements with versions and stuff you want to manage separately
You don't have to keep typing them out. You can also do interesting things like
Put a timestamp for reproducibility onto your dependencies
So I can say Juv stamp this thing, and then it won't get dependencies
that are released after now, which is pretty cool, I think.
I don't know of anything else like that.
I wanna just have it, whatever the latest
of everything I'm using is, as right now,
that's what I want.
They ship something new, I don't want it
until I change my mind, so that's pretty cool.
But now here or now there?
Anyway, time shifts are hard.
Yeah, I know.
Time zones don't make you want to cry.
You can also say run dash dash with,
and it'll run those even if you don't want to put them
in as a particular dependency.
And you can lock it to create a lock file.
All sorts of the UV types of things,
but you can have it run there.
You can also say run notebook with Jupiter Notebook
rather than Jupiter Lab, and give it a notebook,
give it a version.
There's a lot of different things you can do.
So I think I've been talking enough,
but there's quite a bit more you can go on here.
So this is a pretty comprehensive project
for being six months old.
Anyway, if you notebook and you like UV,
consider giving J-UV a look.
It looks pretty cool.
What else you got that's cool, Brian?
That's it for our main items.
I just have a couple extras.
And I have a feeling we've covered this,
but I don't remember.
So I'm going to go ahead and cover it anyway.
So going to take a look at the status of Python versions.
So this is on the Python Developers Guide,
devguide.python.org.
And there was, within the last couple of months,
there was a reformatting of this, I think.
This is my memory.
So the big list is at the bottom with like the full chart
of all the different versions and what's left.
And what we see about the full chart is most of them
are end of life, because it starts at 262730 and so
that's not really that interesting. So the new format highlights the ones you might be
caring about right now. So the last few end of life there's a 27's end of life but then
3678 are all end of life. So hopefully you're not using Python 38 anymore. But one of the
interesting things, so there's a couple of interesting things about here. So highlighting there's where we're at with, so currently three nines is still getting
security updates, three nine, 10, 11, and then like right now as it looks like right,
it's a hairy, it's hard to tell where the green and yellow start with the blue line.
So there is, there's dates around, but there's a link to in here
for endoflife.date.date.pythons.
And so I took a look at that and that is like very clear
as to what the timeline and what we got left.
So 3.13, the active support,
so it was released six months ago and it's all,
so these relative times are really nice. So it was released six months ago and it's all so these relative times are really nice.
So it was released six months ago. We have a year and five months left in active support and then
security updates for four more years, four years and six months. So this the timeline is really
nice. This also highlights the so in the first graph, we just had like this difference between
green and yellow. So we got bug fix and security. Doesn't seem like that big of a deal, but when you
look at it with the reality of it is 312, which I'm using a lot of lately,
that active support ended a week ago. We're not like right on the edge. We're
past it. So active support ended for 312. We still have security supports. So there's
security problems, we still get three years of security, but we're not going to get like
bug fixes and stuff like minor bug fixes are not going to go into 312. So 313 is where you
probably ought to be. Anyway, so I like both these graphs. And these are really great graphs
to pull out if you want to help convince your management chain that you can switch to a different version sort
of thing. If you need that. Actually the second one that you link to here the end
of life.date.python is really good for that sort of motivation. Yeah.
Look we've got one year and six months. How do you feel about that? Maybe we
should change. In the part where if you pull up 2.7,
it just goes, what are you reading this for?
Stop right now and go back to migrate it.
And then 2.8 just says never.
No, I'm just making it up.
Really?
It should say that.
No, it should say that.
I've never done it.
Oh, okay.
It should though.
Yeah, it should.
Just go, stop, what are you doing?
Now it has all the unsupported versions from 3.7 and older just collapse saying like unsupported go away. Yeah, just well you can expand it
But it's collapsed. Yeah, but having having the like the relative time is really nice. How much time you have left? Yeah, I agree
I think that's very powerful as a mental model. Yeah, anyway, cool. Well, let's carry on with that theme
Because I just want to point out that 3.13.3 is out.
And some of the changes don't matter too much to you.
Oh, if you use the Mac installer, this happens.
Like, OK, well, I installed with UV, so next.
And then Windows has things like updated SSLs.
Tests have been updated a little bit.
But it's got a few security fixes here,
which is none of them are run for your life sort of thing but
avoid unbounded buffering that sounds like you want to avoid that and so on
you don't see the word CVE you're probably safe but still it's good to
have a fix and then a bunch of changes to the library things getting better
and so might as well upgrade right might as well upgrade to the new one I just
have to rebuild our base Docker container and UV will find the new one
download it and then all the websites including Python bytes
They'll be off to the races. I think I'm most excited about the update to tcl tk. I know
All right a couple one more really quick Sam
Yalla Marty, thank you so much for sending this in because somebody I think in the comments mentioned oh, we just use.get-blame-ignore-revs
for the rough format.
And we were somehow complaining like,
oh, this, when you're looking at diffs and bases,
especially looking at blame, whoever ran rough format.
And you said, Brian, don't run format on this
because you're going to own it then.
What you can do is you can create this.get-blame-ign blame ignore revs, put probably the SHA of the commit, the hash,
and then that will not show up.
OK, we're not going to consider that when we compute the blame.
Oh, OK.
So in that file, you can do a list of revisions
to not part of the import.
That makes sense now.
Yeah, and they also point out that get blame has a flag
dash dash ignore res file if you want to pass another one.
Pass a different file or something.
Oh, it's not automatic.
Okay.
Or use, yeah, I guess you got to use it with that probably.
Yeah, maybe not automatic, but you can.
So anyway, I am learning about this.
This is all news to me.
Yeah, interesting, cool.
Indeed, thanks for sending that in.
That's always appreciated.
Alright, so let's close this out with a joke. Brian, you've heard about BC and AD and sometimes referred to as BCE before the common era and
Western calendars, you know, so we don't have negative numbers because negative is hard and calendars apparently.
I don't really thought why don't we just have like negative 400 but whatever
BC so I want to introduce you to a different
Calendar such an important epoch a different thing here. There's B GPT and a GPT
So before GPT chat GPT and after chat GPT
So before if you're debugging a problem the developers probably sitting there for two hours,
working really hard, and going, ugh, okay,
how's this gonna work?
They finally think it's working, and then,
hands to the face, six hours of debugging.
That's before, that's BGPT.
AGPT is chat GPT generates code in five minutes,
24 hours debugging, even more tiers.
What do you think?
Yeah, well, so 24 hours, if you're being good
with your body and working only eight hour days,
that's three days.
Yeah, see, it saves you time.
This is how you save time with it.
Yeah, no, I've both saved time and lost time
with this so far.
Yeah, I feel like that's more vibe coding than it is just like,
I asked GPT for a little help with a function.
I still haven't jumped on the vibe band way
and haven't tried that yet.
So I'll try that out.
Neither have I.
It's both amazing and terrifying all at the same time.
But I haven't done it either.
Yeah, it's like jumping off a cliff.
Just do it.
It'll be fun for a while.
Yeah, and Roe out in the audience asked, where's the Stack Overflow step?
Oh, yeah.
Yeah, that's got to be in there somewhere probably.
You're like, I'm sorry I left you Stack Overflow.
I will not stray from you again.
I will go back and maybe you can help me get out of this.
Probably not.
You just find the same answer generated by ChatGPT over there
as well.
Well, Stack Overflow is changing their name, right?
They're going to go by training data now?
Training Underflow.
OK.
You know what doesn't waste your time, though?
What?
This show and us.
In a good way.
Yeah, so let's get out of here.
All right.
Thanks, everyone, for listening.
Thanks, Brian, for being here, as always.