Python Bytes - #428 How old is your Python?

Episode Date: April 14, 2025

Topics 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)
Starting point is 00:00:00 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.
Starting point is 00:00:13 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
Starting point is 00:00:31 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,
Starting point is 00:01:07 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.
Starting point is 00:01:18 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.
Starting point is 00:01:33 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.
Starting point is 00:01:58 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.
Starting point is 00:02:28 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.
Starting point is 00:02:52 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
Starting point is 00:03:25 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,
Starting point is 00:03:45 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
Starting point is 00:04:09 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
Starting point is 00:04:35 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
Starting point is 00:05:05 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.
Starting point is 00:05:24 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
Starting point is 00:05:47 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
Starting point is 00:06:18 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.
Starting point is 00:06:41 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
Starting point is 00:07:21 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
Starting point is 00:07:51 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
Starting point is 00:08:11 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
Starting point is 00:08:57 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
Starting point is 00:09:49 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.
Starting point is 00:10:16 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.
Starting point is 00:10:33 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.
Starting point is 00:10:53 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
Starting point is 00:11:09 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
Starting point is 00:11:31 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.
Starting point is 00:11:49 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.
Starting point is 00:12:04 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,
Starting point is 00:12:42 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,
Starting point is 00:13:02 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.
Starting point is 00:13:20 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,
Starting point is 00:13:43 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
Starting point is 00:14:12 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.
Starting point is 00:14:35 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.
Starting point is 00:14:48 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
Starting point is 00:15:17 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,
Starting point is 00:15:36 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
Starting point is 00:15:57 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,
Starting point is 00:16:21 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.
Starting point is 00:16:55 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.
Starting point is 00:17:19 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,
Starting point is 00:17:43 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,
Starting point is 00:18:13 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.
Starting point is 00:18:35 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,
Starting point is 00:18:51 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.
Starting point is 00:19:08 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
Starting point is 00:19:37 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
Starting point is 00:19:49 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.
Starting point is 00:20:06 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
Starting point is 00:20:32 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
Starting point is 00:20:59 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.
Starting point is 00:21:17 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
Starting point is 00:21:46 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
Starting point is 00:22:13 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.
Starting point is 00:22:28 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,
Starting point is 00:22:48 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.
Starting point is 00:23:06 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.
Starting point is 00:23:20 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
Starting point is 00:23:41 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
Starting point is 00:24:26 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
Starting point is 00:24:56 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
Starting point is 00:25:42 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.
Starting point is 00:26:13 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.
Starting point is 00:26:20 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.
Starting point is 00:26:52 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
Starting point is 00:27:20 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,
Starting point is 00:27:55 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
Starting point is 00:28:19 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.
Starting point is 00:28:34 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.
Starting point is 00:29:00 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,
Starting point is 00:29:31 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.
Starting point is 00:29:54 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.
Starting point is 00:30:13 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?
Starting point is 00:30:27 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.
Starting point is 00:30:40 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.
Starting point is 00:30:54 Yeah, so let's get out of here. All right. Thanks, everyone, for listening. Thanks, Brian, for being here, as always.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.