Python Bytes - #452 pi py-day (or is it py pi-day?)

Episode Date: October 9, 2025

Topics covered in this episode: * Python 3.14* * Free-threaded Python Library Compatibility Checker* * Claude Sonnet 4.5* * Python 3.15 will get Explicit lazy imports* Extras Joke Watch on YouTube... About the show Sponsored by DigitalOcean: pythonbytes.fm/digitalocean-gen-ai Use code DO4BYTES and get $200 in free credit 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: Python 3.14 Released on Oct 7 What’s new in Python 3.14 Just a few of the changes PEP 750: Template string literals PEP 758: Allow except and except* expressions without brackets Improved error messages Default interactive shell now highlights Python syntax supports auto-completion argparse better support for python -m module has a new suggest_on_error parameter for “maybe you meant …” support python -m calendar now highlights today’s date Plus so much more Michael #2: Free-threaded Python Library Compatibility Checker by Donghee Na App checks compatibility of top PyPI libraries with CPython 3.13t and 3.14t, helping developers understand how the Python ecosystem adapts to upcoming Python versions. It’s still pretty red, let’s get in the game everyone! Michael #3: Claude Sonnet 4.5 Top programming model (even above Opus 4.1) Shows large improvements in reducing concerning behaviors like sycophancy, deception, power-seeking, and the tendency to encourage delusional thinking Anthropic is releasing the Claude Agent SDK, the same infrastructure that powers Claude Code, making it available for developers to build their own agents, along with major upgrades including checkpoints, a VS Code extension, and new context editing features And Claude Sonnet 4.5 is available in PyCharm too. Brian #4: Python 3.15 will get Explicit lazy imports Discussion on discuss.python.org This PEP introduces syntax for lazy imports as an explicit language feature: lazy import json lazy from json import dumps BTW, lazy loading in fixtures is a super easy way to speed up test startup times. Extras Brian: Music video made in Python - from Patrick of the band “Friends in Real Life” source code: https://gitlab.com/low-capacity-music/r9-legends/ Michael: New article: Thanks AI Lots of updates for content-types Dramatically improved search on Python Bytes (example: https://pythonbytes.fm/search?q=wheel use the filter toggle to see top hits) Talk Python in Production is out and for sale Joke: You do estimates?

Transcript
Discussion (0)
Starting point is 00:00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. This is episode 452 recorded October 9th. I'm Michael Kennedy. And I'm Brian Akin. And this episode is brought to you by DigitalOcean. I love DigitalOcean. Brian and I both use DigitalOcean. Brian and I both use DigitalOcean. I was literally just working with them a few minutes ago. How about that? So check them out at Pythonbytes.fm slash DigitalOcean dash gen dash AI. The link is right at the top of the show notes. and then use, most importantly, however you sign up, use the code, DO4 bytes, all caps, the number four. And you'll get up to $200 of free credit. You get $200 free credit if you are not already an existing customer.
Starting point is 00:00:42 And that is pretty awesome. So free money to go do cloud things, always great. Connect with us on the socials, links here in the show notes. And if you want to be part of the live episode, Pythonbyte.com slash live, shows you if we're live streaming, you can jump right to it. And if not, well, then it takes you the old, episodes. And once you're over on YouTube, do us a favor. Subscribe there and press the bell to
Starting point is 00:01:04 get notified. That's the way when we do go live at the wrong time because things kept happening. I have a bit of a story for that. You'll get notified that we're going live. You can check it out. Usually that's Monday and 10 a and Pacific time. And sign up to our newsletter, Brian puts that together every week and sends it out and it's got more than just a rehashing of the show notes. It's got a bunch of extra info. So that's always fun. Brian, one of the reasons. There are many reasons that we are on an alternate schedule this week. I had a very, very dark time fall upon House Kennedy. There were people.
Starting point is 00:01:35 I live where there are tons of tall trees. In Oregon, there are tall trees. But I live, especially where there are many tall trees, like right along the street. And so that we don't get the power taken out by these trees in the winter, the power company goes along and trims back the trees. Well, the geniuses at the top of that thing cut through the fiber optic cable that provided power to my house. And I have one bar of LTE level of cell coverage at my house. So when that happened Sunday night, or Sunday afternoon, and then we're supposed to record Monday morning, it was like, mm-mm.
Starting point is 00:02:05 That ain't happening. It ain't happening. So sorry, folks. That's a part of the reason while we're a little bit off-scheduled. But light has shown upon us again. The fiber is flowing. And then, of course, like, we were going to do noon today. And then I had a contractor that was supposed to be here at three,
Starting point is 00:02:23 showed up at quarter of the noon so we had to push back there it is there it is well what do you got to push down to everyone listen well i'm excited because one of the things we get to talk about that we wouldn't have been able to talk about if we were recording on monday was is that two days ago on tuesday python 3.14 got released and i wish i had some party poppers or something to pop up because i'm like like totally stoked about this um i know so um i don't know if other people are really excited but there's some really cool stuff in 3.14 or three the pie by release by yeah I don't um uh three point are they going to do like for the bug fix releases instead of going like 3.4.0 this 3.14.0 right now and then it'll go dot 1.2 but i think it should go dot 1 and then
Starting point is 00:03:13 1 5 and then 159 yes that'd be fun yes come on let's do it it's still and it's still incrementing let's do it it's still yeah bigger Anyway, and look, they're guaranteed to not run out. It's an irrational number that goes on forever. It's going to be fine. Yeah, I think it would break some people to have like a really long version. Cutting into our logo. Okay.
Starting point is 00:03:38 So we're linking, I'm going to link to what's new in the release. And there is a ton of stuff in here. So please check it out. I think there's some great stuff. I wanted to highlight a handful of things that I'm pretty excited about. template string literals, and I have to admit, I still quite, don't quite get it. I'm going to have to do a project that actually uses template string literals, the new template strings, the prefix T instead of F, so T strings, are we calling them T strings?
Starting point is 00:04:09 I don't know. Yes, we call them T strings. I had Paul Everett and some other folks, who I'm sorry, I'm forgetting, on Talk Python last year to talk about it when it was proposed. Yeah, T strings. Okay, I should, I guess, just go back and listen to that episode. Anyway, excited to try this. And I think I am excited to see what people build on top of this as well.
Starting point is 00:04:29 Possibly we can have some cool stuff built on top of two strings. What else? This is pretty cool, actually. Seems kind of minor, but PEP 758 is allow accept and accept star expressions without brackets. So what's the deal here? Well, if you had multiple exceptions that you were catching, Like in the example, they have timeout error and connection refused error. Those have to be in brackets, but now they can just be just like there.
Starting point is 00:04:57 They're just, you don't have to have brackets. It's a minor thing, but it saves typing. I love it. Okay. Improved error messages, always better. Like if you typed while with 2Ls or something, more highlighting of where you have a syntax error. Perfect. More better tracebacks are always helpful.
Starting point is 00:05:15 What else? So one of the things that came in is a, some oh default interactive shell um so the the default uh there's a couple of improvements to the shell so when you just the rebel when you type like python or python dash i whatever the interactive thing it's in color now um and one of the things is it's in color and also um it does syntax highlighting so that's pretty cool i thought i had a screenshot yeah so um uh fun to have colors in the repel i know there were other non-standard repels that did this. So I'm glad that the standard was.
Starting point is 00:05:51 That's great. Yeah, that's great. What else we got? I thought I had a couple of other things. Default and Directive Shell, in the improved modules, I'm actually pretty excited about the ARG pars stuff. The ARG parse, if you're writing a command line interface tool, like a CLI tool, that takes arguments.
Starting point is 00:06:11 You can use Click or Typer, but if you, the built-in one is which I've been using more and more for small projects. So have I. If it doesn't have a dependency, but you wanted to take arguments, just use arg parse. Yeah. So then a couple of things, the if name equals main, or not, so if you say Python dash m and then your module,
Starting point is 00:06:34 your project, that didn't quite work right before or it was like, I don't know. I didn't try it with arg parse, but apparently that's better now. So that's cool. The other thing that I'm pretty excited about is this suggest on error. So this is a thing where you basically, if you type in a, it's not on by default, but if you turn it on and you pass an argument to your command line interface thing, and you miss type it, it can say that isn't here, but did you mean?
Starting point is 00:07:06 And I love that sort of a feature. So that's pretty cool. And then colored help text. That's pretty neat. And what do I have? Oh, last thing I thought was just fun. There's a whole bunch of stuff. Check it out.
Starting point is 00:07:19 But the date, the calendar, do you ever use this? Occasionally used the calendar module. I never used the calendar. I know what it does, but I've never used it. Okay, so if you do Python-M calendar, and then it has some flags and stuff you can use, too. It just prints out of the calendar. But now, with this release, it highlights the current date. So you can say like calendar 202510 for October of 2025 and it highlights that it's the ninth today.
Starting point is 00:07:49 And if you do the, if you just do the whole year, it'll show you the whole year and it does the ninth. So this is pretty handy if you just have a ripple around to if you're like, when is the, if somebody says, hey, can you meet on the 15th? When is the 15th? Is it Tuesday? Whatever you pull this up. Yeah, that's pretty cool. Lots of great stuff. Check out the what's new and upgrade.
Starting point is 00:08:11 As an aside, I wasn't going to get ready for today, but I didn't get a chance because of all the contractor stuff. I'm going to get up, probably by the time you listen to this, I'll have an article up on Python test for all the changes you need to make sure you make to test your project for 3.14. It's the normal stuff, but I figured I'd just write it down,
Starting point is 00:08:31 and I'll do a post about that too. Awesome. Yeah, looking forward to it. I have a few follow-ups, a few rough edges. Okay. I've one smooth, nice edge, and then a couple rough edges. edges. So the smooth edge is that Charlie Marsh announced that UV and Ruff both shipped
Starting point is 00:08:49 Python 314 support the day 314 came out, which is pretty cool. So if you UVV-E-N-V, and you don't have anything installed, or if you specify 314, you'll get the 314-0 release, which is awesome. But remember that you have to actually update the UV binary. It doesn't like look at a web service or something. So if you've got an old UV that's not 0.9, it doesn't know about the new one. So UV self-update, if you have it globally installed. Which is how I do it. Indeed. Okay. So that's the smooth edge. The rough edge is for Python bytes. I use UV loop for the async Io operations on Python.com. Okay. Well, I thought, ah, what the heck? Let me just re, let me just swap out the virtual environment locally and see what happens today. You know, just try it out.
Starting point is 00:09:33 Why not? I'll be able to say we're using 314. I'll just roll it out. And then guess what? It didn't like it. It crashed and it literally wouldn't load the website. because apparently UV does not support 314. UV loop, rather. Not UV loop, sorry. Not UV loop, there are different things. So UV loop is a way to speed up the ASync IO event loop for ASync and await.
Starting point is 00:09:54 And it's been fine for a long time. It was updated like three weeks ago, but it's not updated for this. So I just took it out and said, you know what, we're just gonna fall back, like Python's got a lot faster since I added that way, way back when. And so just run on the standard old ASync IO event loop.
Starting point is 00:10:09 Well, it's good thing you checked, But everybody that's got a project out there that other people are depending on most of the Python versions that we roll to, there's no problems, but occasionally something you're doing might be an issue. So please test and roll out new versions. I have another sharp edge for you. I have no idea if this is true in VS code, though it may be about honestly, I haven't tried. I don't know. But in cursor, I can tell you that you cannot debug something in Python 314. You hit run.
Starting point is 00:10:36 It says, you cannot find underscore underscore handle crash or something along those lines. the projects that I tried. So a few people got some updating to do. Brian, here's the thing, though, wasn't this stuff available for like six months? Yeah, it's been available. I mean, I'll give the UV loop guys a pass, right? Like, that's not the main thing they're working on and like whatever. Maybe it needs testing. But I mean, a product such like cursor that's got so, they update that thing like daily. There's probably been somebody that tested that. Also, as one before we move on, one of the things that I think projects should do um there's there's it's questionable whether you should bump your version um right so if you if you've got a project that other people are depending on and it just runs fine you you run it locally
Starting point is 00:11:20 you test it on 314 and it works fine maybe you even turn on testing in c i 314 but you didn't have to make any changes should you do another version and i think i think at least even a a minor version bump so that you can add the trove classifier to say this one runs on the new version. I think it's worth it. I look, people, other people look, and if a project hasn't had a release in a few years or a couple years, I don't know that anybody's looking at it. Yeah, it might be dead. So, but I, so I think, I think once a year when we roll out new versions, that might be a time to bump your version just to let people know it's still live and it's fine. Yeah, I agree with that. That sounds cool. All right. Let's go back and talk about,
Starting point is 00:12:03 you know, checking your libraries for versions that work. So I bring you, here, I'll zoom out a little, so it looks a little better. The Python compatibility checker for free-threaded Python. Okay. So, okay, so this is a heat map of, over it, where do I get it like that? It doesn't do anything even click it. But it's a heat map of the most popular libraries. If I scroll down here somewhere, you can see it's got the most installed ones.
Starting point is 00:12:29 So Boto 3, Kerset Normalizer, Yorloid 3, requests, BotoCorp, et cetera. And most importantly, it tells you, is that thing thread safe in the same? sense that can I use it with Python T instead of Python, right? The free threaded version of Python. I don't know. It's more blue than red, but there's still a lot of red out there. Yeah. There's failed.
Starting point is 00:12:50 There's no data. So I put this out there as a way for if you're involved in the top 1,000 packages, maybe give this a look, see what they're testing. Give Python 313-314T a test, like work into your test mix. And if you don't want to support it, fine. Like, just be explicit about it. But if there's just a super minor little threading issue or some condition or whatever, you know, it'd be cool if it would support it.
Starting point is 00:13:17 Like, that's the primary reason that the two to three thing was so rough. It was like, not that we all couldn't decide to start writing Python 3 style code. It was like, well, the library I need to do this depends on a library that doesn't work in 3. And we've got a similar story for free threading here, although I suspect it's less. Anyway, I present to you Ft dash checker.com, and you can see if the things that you care about support rethreaded Python. Tina, is there how many things are they checking? Oh, 500 things, top 500. Well, I think I can scroll in it on me like, right?
Starting point is 00:13:49 I think it's the top thousand or almost, almost like top 987. Maybe they couldn't get information about some of them. Top thousand. What else is cool? Our sponsor. Yes, thank you so much to DigitalOcean. This episode of Python Bites is brought to you by Digital. DigitalOcean.
Starting point is 00:14:05 DigitalOcean is a comprehensive cloud infrastructure that's simple to spin up even for the most complex workloads. And it's a way better value than most cloud providers. At DigitalOcean, companies can save up to 30% off their cloud bill. DigitalOcean boasts 99.99% uptime, SLAs, and industry-leading pricing on bandwidth. It's built to be the cloud backbone of businesses small and large. And with GPU-powered virtual machines plus storage, databases, and network capabilities, all in one platform, AI developers can confidently create apps using what their users love.
Starting point is 00:14:41 Devs have access to the complete set of infrastructure tools they need for both training and inference so they can build anything they dream up. DigitalOcean provides full-service cloud infrastructure that's simple to use, reliable, no matter the use case, scalable for any size business, and affordable at any budget. VMs start at just $4 a month and GPUs for under a dollar per hour. easy to spin up infrastructure built to simplify even the most intense business demands. That's DigitalOOcean. And if you use D-O-4 bytes, that's D-O-The number four and B-Y-T-E-S, you can get $200 in free credit to get started.
Starting point is 00:15:18 Take a breath. DigitalOcean is the cloud that's got you covered. Please use our link when checking out their offer. You'll find it in the podcast player show notes. It's a clickable chapter URL as you're hearing this segment. and it's at the top of the episode page at Pythonbytes.fm. Thank you to DigitalOcean for supporting Python bytes and for having an awesome service.
Starting point is 00:15:38 Absolutely. Yeah, they do really good stuff. I just recently moved a bunch of stuff to, what do they call it, DigitalOcean Spaces to save some, store some things. I was working at DigitalOcean Spaces 30 minutes before we started. Like I said, very cool. Good stuff. So was I using AI?
Starting point is 00:15:54 Was I not, Brian? That's the question. Who's a big new model out there? So I want to give a shout out to Claude Sonnet 4.5. I think this is worth checking out. There's, if you're using something that lets you choose a model, there are many of them now, as we'll see. Using Sonnet 4.5 is quite good. So have you been playing with this yet?
Starting point is 00:16:15 I only came out like a couple days ago or maybe a week ago. It came out basically the day we recorded last. I have not had a chance to play with it. So faster than the older Clods, a little bit better. I say it's even better than the Opus one, which was. like setting money on fire if you tried to use that thing. It was like a hundred times more expensive or something. It was out of control. So let's see. I took a few notes of some of the things that I thought were like kind of note worthy of it. So apparently it ranks as the top
Starting point is 00:16:42 programming model, which is pretty cool. And we live in such weird times. Our programming tool has reduced concerning behaviors like sycophancy, deception, power seeking, and a tendency to encourage delusional thinking. Hey, I guess it's good if your programming tool doesn't do that. Isn't that right? I mean, would you want your programming tool to be sycophant? No. Come on. Not really. Not too. A little sycophoncy is good, but not too much. Michael, if you don't want it to be, then that's a good thing. That's right. You're absolutely right. No. I didn't think of that. Good job. Gosh, I was confused. I've been a bad bot.
Starting point is 00:17:20 They've also as part of this the cloud agent SDK which is what they used to build Claude code. So that's pretty cool if you want to bring that into your own
Starting point is 00:17:33 platform and do it and speaking to which JetBrains, their AI platform now allows you to use Sonya 4.5 as well built right into PiCharm right?
Starting point is 00:17:45 That's pretty sweet. And of course Klein.bought supports it because that one unless you just put in your key and you get your things. That plugs into both Picharm and VS code and cursor and all the things. On cursor, you can pick it.
Starting point is 00:17:58 And ClaudeCodecode, obviously, you can pick it because it's from them. Here you can even see at the top. New Claude Sonnet 4B5 is Live and Klein. So anyway, I encourage people to check it out. I've been doing some significant work with it. I actually did two PRs to Pythonbyst.fm. One, it's like 4,300 lines. And one is 3,000 lines just in the last day.
Starting point is 00:18:18 And they came out incredibly. I haven't had time to show you, Brian, but when I, after this, I can show you and see what you think. It's pretty neat. Did the first one change all the quotes to double quotes and the second one change all the double quotes to sync quotes? That's a good question. No, actually, I have a bunch of rules that tell it it has to run rough format and rough check before and after it does everything. So it's like, it's always sort of staying in sync with the way that I want. It won't cycle back and forth like that.
Starting point is 00:18:43 Yeah, I'm curious about what was it the Hactober? Oh, yeah. That's going to be different, isn't it? Yeah, with all the AI tools. Although, to be fair, I don't know if it's going to be better or worse, because I know some of those hackedover vests, I would get the dumbest things. Like, oh, if you submit a PR to an open source project, guess what? You get a star.
Starting point is 00:19:05 And I would get this, like, I'm correcting this bit of grammar in your readme. Like, I'm not even sure that's the correct grammar. And no, I'm not taking a PR that you put like a semicolon or instead of a colon here because you want a hackedover fest thing. get away from me people yeah oh and i i i kind of am jealous about some of the popularity of projects the lot of the projects i work on are not that popular which is fine but also in october i'm not that upset about it because i just i've heard from like for example david lord already said that he's gotten a bunch of uh i bet he has a bunch of stuff but yeah anyway
Starting point is 00:19:42 before we move on from this uh follow up on the 314 thing from jared says i'm really looking for to Python 314's Ripple letting you tab complete import statements. Oh, my gosh. I didn't notice that. That's great. Let it happen. I'm so tired of like I hit up arrow and it like goes line by line through a loop or there's no auto complete or I'll type part of a thing and come back and it's like, no, you didn't
Starting point is 00:20:04 type anything. We're just going to cycle through what you did. Like, no. So all those improvements are very welcome. Yeah. Indeed. Cool. Well, as as grateful as I am for Python 314, I'm looking forward to 315.
Starting point is 00:20:18 Brian, don't be lazy and work with the stuff that you got. Come on. Okay. Well, in Python 315, one of the things that's coming is explicit lazy imports. And boy, this is an inside baseball kind of thing, but it's, but that's what this podcast is all about, isn't it? I'm here for it. I am so here for this idea.
Starting point is 00:20:41 I am too. PEP 810 explicit lazy imports. So the idea is actually, it's. it's just common we put imports at the top of the file right but um if you do that then everything that imports it imports all your imports also um and you don't actually have to do that you can put um anyway it would get back that you you don't you can put them in a function or something and they'll get imported for the entire module the first time they're used that someone that's a that's the way we do lazy imports now in the future it'll do that automatically if you just
Starting point is 00:21:14 throw a lazy in front of it so it'll work with uh lazy import you say lazy import Jason and Jason won't get imported until the first time or you can do lazy import Jason from or lazy from Jason import dumps or something. You know, you can do the from thing as well. So either way, it won't load it until it's needed. And this is a minor little, a little syntax thing that's going to save a lot. I love this. So do you have any thoughts on this? I am here for it. So it drives me crazy that just because I want to allow. my code to use a library, it has to process all of that all the time. And if there's some kind of weird edge case, like it depends upon some configuration, but the configuration environment
Starting point is 00:21:57 variable is not set. It'll crash during import. Like, there's all these weird cases. And I talked a little while ago about, I think I said, Michael learns a lesson. Right. I had something that was a little utility built inside of Talk Python's code base or the course's code base or whatever. And I'm like, oh, I'll just reuse these few little utility things. And because of that, just the import statements to load up all of that code made it take several seconds to start. I put it in its own file and copied a few utilities over and it took like 100 million. It was like 10 times faster. And it's exactly because of this.
Starting point is 00:22:29 It didn't use any of that stuff or hardly any of that stuff. It just pulled it in because it's got to get the library from a sub package. So off it goes. You know what I mean? Yeah. Where I get hit a lot is and actually we have a side. Maybe I jumped the gun on this from Hugo. Lazy imports.
Starting point is 00:22:46 I forgot. This is a draft. They're not, it's not approved yet, it's draft. So, maybe it comes in the 315. If you right click and say inspect element, and then you can just edit the status, it'll be fine. It's a wiki, right? I can just change it. That's for you.
Starting point is 00:23:03 So PEP 810 is still in draft and under discussion, it's not submitted to the steering council yet. So thanks, Hugo, but I guess here's my vote. I hope it gets in. Yeah, yeah, and I hope this is in as well. Thanks, you go. One of the, but another another article I should probably write is how to do this with testing because I do this with testing a lot.
Starting point is 00:23:25 I'll throw, it's common to have a test module that like has to import quite a few things to test things or report things or draw a graph or all sorts of stuff you can do. But if what Pytest does is it imports all of your test code before it starts running. And even if you want to, so if you're going to just run one test file, like one test. within your file, it'll do all the imports. So it is nice to, like, separate your heavy imports. And there's ways to measure to figure out which ones your heavy imports are and move those into a lazy method or lazy import.
Starting point is 00:24:00 But anyway, hopefully it'll come in. I hope so, too. I'm here for this idea. By the way, also see you, Dino Veland and Brittany, Rino-So, and some of the folks from the Sender team at META. I think some of these ideas originally came out from Sender. I don't know 100% for sure, but that'd be pretty cool to see some of that network coming over, right? That's where pre-threaded Python came from as well.
Starting point is 00:24:23 Yeah. All right. Right. Right. That's it for all of ourselves. How I thought you're doing. Are we done? I'm done. Okay. Okay. Well, I have extras, though. Yeah, you want you go first stuff. Okay. With this was sent it to us from Patrick of the band Friends in Real Life. He just said that, and I don't know how to do the fancy thing. where you can listen to whether you'll have to listen to the song um they they made a uh music video i'll just play it uh they made it prints out while the music's going on it prints uh all the all the stuff uh and it's really fun uh near the end it starts going fast and i love the end i'm just
Starting point is 00:25:05 going to fast forward to the end part because it's like super fun it just starts taking off um we'll click ahead there just starts flying it's so fun uh anyway he's He said he wrote it with Python, and there's the code that he wrote, and there's even test code, which is kind of cool. And it would be fun to do it. I'll do a PR against something that's already done. Anyway, it's just a fun extra thing, right? Make it a music video with Python. Love it.
Starting point is 00:25:34 Yeah, and it's built with Rich and stuff. It's a good song. I enjoy it. Got a little movable typography, kinematic text or whatever. Yeah, it's very fun. The other thing I wanted to, just a short one, I was trying to write this article about testing, testing is 3.14, and I went through a project and I realized that I needed to change one of my, needed to get a new token from test Pi Pi Pi.I. My pi.org is fine, but the test one, it, like, has different credentials. You have to log into it, too. And I, like, lost my primary email login.
Starting point is 00:26:13 So, yeah, I'll have to fix that. Oh, boy. Yeah, it kind of does bug me that there's different logins and stuff. I like that it's a separate one, but I don't get why it's a different login. It should just be the same credentials, I think. Yeah, exactly. There's probably a good reason for it. Yeah.
Starting point is 00:26:32 All right. Your extras, please, sir. Yes, indeed. My extras are coming. So, I don't know, did I tell you about how frustrated I got with my old blog? So I had this blog over at WordPress.com, and I'd had it since 2006, and I'd written about 160 articles. Many of them are kind of like, yeah, they're not really in stuff that I care that much about
Starting point is 00:26:54 anymore, but I mean, that's 10 years of writing or, no, 15 years of writing before I move to my newer website. I don't really want to throw that away. But have your own domain, you have to pay WordPress.com. And I'm just like, you know what, it's on my own domain. I have to leave it there. If I take it off, that's even worse. But every year I was paying $48.
Starting point is 00:27:15 Remember the joke we had? It was like a person sweating over which of the two buttons suppress. And one said, pay $12. The other one said, admit the dream is over. It's kind of like that. It's like, I'm never going to write again for this. But I don't want you to go away. So I'm like, well, what am I going to do?
Starting point is 00:27:30 So I actually, I'd been thinking about this for a year or two. and I tried to like download it with web scraping and just the way that WordPress works and it was always like really messed up. So it occurred to me, I'm sitting there like, I bet you that Claude Sonnet 40 by the way at the time, I met Claude could get it. So I just tell it, hey Claude. Here's a WordPress website. I want to take all of this and convert it to mark down in Hugo format and then put it into my Hugo website. And I just turned it loose on it and it said, great, looks like the RSS feed is what we want. Pull down the RSS feed generated me a bunch of posts. I'm like, that's really cool. So then I got it to give me the regular expression I put
Starting point is 00:28:08 into EngineX so that I could completely keep all of my SEO. So if I, if there's somebody that's got a link to a blog post 15 years ago and they click it, it'll still 301 permanent redirect exactly to my Hugo site. And I did a little slash R for archived for all the posts that are, so I can look at the URL and go, oh, that's an old imported one. Or no, that's one that I wrote from scratch and Hugo. I'm like, yeah that's it we're done that took like an hour and then i realized wordpress is just amazing it like only returns 50 articles out of the 160 crap so back all right now your job is to go parse it and so basically i wrote up this article called goodbye WordPress thanks AI where i talked about how i got got it to just go and parse all that and now all the articles are there you go find
Starting point is 00:28:56 the posts if you go all the posts and you just hold it down you know you're back you're back into like some seriously old stuff. But if I go back a little bit of ways, right? Like, let me see something like here. Ad Hockeys to your website. Wrote in 2012. Still use that today, by the way. Little, it even has chords like K-G-I goes to go to inbox sort of thing.
Starting point is 00:29:20 Oh, I've got to pick up an icon there. But, and it even downloaded most of the images and other content. I don't know if I got any here, but I'm clicking around. Anyway. encourage people like if you're feeling stuck or you've got some project you're like man that will take me weeks and yeah 48 dollars a year sucks but a week's worth of my work sucks more so i'm just gonna just gonna bite it bite the bullet and just go to one of these agentic is and give it a good description see what it'll do maybe you can just escape anyway goodbye WordPress thanks AI so what you're
Starting point is 00:29:51 saying is you went back in time and had to AI write your blog from 10 years ago yes actually in a sense i sort of did i had it write the markdown version So now everything has front matter and it's all marked down and all that kind of stuff. So, you know, that was a really cool experience. And it's been like years that's been bothering me. But I'm just like, nope, it's not worth a week. No, Michael. No.
Starting point is 00:30:13 Whatever you think is worth, just pay the $48 and move on, right? It was like a warm summer night a few weeks ago. I'm just sitting. I'm like, I'm going to just turn the AI loose on and see if you can. And it did incredibly well. Okay. So encouragement there. I did a big release on my content types library.
Starting point is 00:30:31 I talked about this a while ago, talked about content types, and the idea is you can give it a file or a URL or an extension, and it will tell you things like, oh, that's an MP3. And, well, for the MP3, well, what kind of mime type or content type do I put into like a web response, right? It's super easy if it's just JPEG, right? ImageJPEG. Well, is there the E in there? Is it JPEG or is it JPEG? Oh, man, I don't remember. But it gets more complicated.
Starting point is 00:31:01 What if it's a parquet data science file? Well, that's application. Dot v&Ds dot Apache. Parquet. You're like, oh, my goodness. Right. So I had this before, and it had like 200 types or whatever. Now it has 360, and I put way more in there.
Starting point is 00:31:15 So the release notes say all the different types that it added, 137 new types across different categories and so on. So if you're parsing files and going, I need a content type, or given an extension, what is it? Or given a content type, what extension is that, all those kind of thing? Here you go. Cool. Yes, I know there's something built into Python and the standard library.
Starting point is 00:31:34 It's not the same thing. This is better. The one built into Python varies by machine of what responses it gives you, which is just weird because it doesn't actually have its own data. It looks into the OS registry for what your current OS thinks a Mime type of a thing is. I don't know. There's other ones that require access to file. So anyway, there's, I talked about before, but lots of updates to that.
Starting point is 00:31:54 Here's one of my PRs, Brian. I thought I wanted to look for something and I can't. can't remember what it was. Oh, yes, I can remember what it was. There's this project called Dev Docs. And I talked to Hugo Bowen Anderson about this on the podcast, and I'm like, there's this app. I don't remember what it is. And then I'm like, let me search around that I was searching. And I went to search on Python Bytes. So I did a major improvement on the search engine here. This is a part of one of those big PRs. And when I've searched, like, for example, if I search for Pytest, it would just say episode name, episode name, episode name, episode name,
Starting point is 00:32:29 And there's 330 episodes out of 450 or whatever, 402. Yeah. It's almost every episode is that. You're like, God, but there was a thing that was actually, like where the topic was pie test, not where the word pie test was used. Because we search all the spoken text, right? So now we have a little button we can press,
Starting point is 00:32:50 like a toggle, like an iOS toggle, that shows you only show me the stuff where it actually appears. And notice every episode now has the core topics, your topic, my topic, listed out separately. This is awesome. This, thank you.
Starting point is 00:33:03 The search word that appears is highlighted in yellow. Now watch this. So see this Python Language Summit? If I click that, it jumps over and highlights that part of the show notes for that part of the content. So cool. How epic is this? So what I was looking for was dev docs.
Starting point is 00:33:20 There it is. You can see now really quickly, you don't have to go through all the episodes. You can see, boom, it's the second one from 276. and it's the second topic covered, and it points that out right there, and I can dump right to it. That's very cool. Yeah, so that's one of my extras.
Starting point is 00:33:36 You guys, please use the search. If you're looking for something, I put a ton of effort in the search engine, it's really fast. It's not perfect, but it's pretty darn good. It's better than most sites search. I'll tell you that. Yeah.
Starting point is 00:33:47 I really like the, I really like that it pops out the topics, because sometimes I'm like, we talked about it, but it wasn't a topic, so I am going to have to look more. But there's also the ones where it was a topic, and I'm pretty sure it was listed, just having the name that it showed up some, at some point we talked about it, it isn't enough. But having, this is great. I love it. Awesome.
Starting point is 00:34:12 Thank you. All right. One more thing. My book is officially, officially out and available for purchase. Very cool. Thank you. 332 pages available on Amazon.com and on Gumroad, whichever you pick. You said your book, but what is the book name?
Starting point is 00:34:28 The book is Talk Python in Production, a cloud agnostic guide to building, scaling, managing your own Python infrastructure. Oh, right now it's only on an e-book, but I'm working on a paperback as well. And how is it doing? It is number one in application development and number two in software engineering.
Starting point is 00:34:46 That's pretty epic. Wow. Yeah, and I have not really even promoted. I've even sent an email for people who said they were interested in and stuff like that. Oh, you should totally plug it on the podcast. Yeah, I've talked about, and talked by then. This is the first time I talked about it here.
Starting point is 00:35:01 I do want to just say it got posted on Hacker News and got really popular there. And the first question was, how much of this book is written with AI? I bet all of it. Zero of it. Zero of this book is written with AI. I put a ton of work into it. It took me nine months. It may or may not be amazing, but at least it's human, right?
Starting point is 00:35:18 So there you go. Anyway, that's all out and people can check it out. Books are a weird thing, right? Like, I still love books, yet it takes it forever to write a book. And maybe other people are really bad. I mean, nine months is not bad. I spent a year and a half on both editions of mine so far. I would not spend a year and a half again.
Starting point is 00:35:37 But, and then you sell it for like 20 bucks. It's a lot of value for 20. Yeah, yeah, I think so. Yeah, 19 bucks. You can get it on Amazon or you can get it on Gumroad. They're both DRM free. So if you don't care, I don't know what to. It's so weird.
Starting point is 00:35:52 like I would I get three times more money for the same amount that you all pay if you get it on gum road but if you guys bought on Amazon it boosts the rankings which may help it I don't know what to tell people to do but get it wherever you want it's DRM free and enjoy it awesome yeah that's it for all my extras I yeah think we're done then oh we need something funny we do need something funny and I think this is a little bit in the testing space so it might resonate with you Brian it's not exactly in the testing space but it's pretty darn close here's the the estimate you know how long will it take you to do this project so there's a different different reviews here the new it says that'll take a day the junior I estimate it'll take three days because she knows that the new tried it for one day and that was before they asked for the docs in the air handling you know that was the happy case in one day but you're not done in one day no the senior dev says that's an M size story just makes me squirm a little at hearing that are you ready how the t-shirt sizes right okay it's exactly
Starting point is 00:36:52 the t-shirt sizes extra small small medium but you ready for the pro the principal engineer the senior engineer one you guys give estimates so what is this yeah is that a laughing mouse like jc in the comment says if if you're doing sprint planning and t-shirt sizes you're going to be miserable at your company i don't know i'm not even sure if there's anything good in here irrelevant but i think that's it for the comments but i thought it was funny so uh you're a solo sort of, right? Yes, yeah, pretty much. I mean, I have people help with stuff,
Starting point is 00:37:27 but pretty much, let's go with yes. Do you do Sprint estimates? What a good question. No, not really. I just kind of like maybe small or huge, like is that gonna be something I can just do soon or is that's like a really long project that's not worth doing.
Starting point is 00:37:43 That's the only estimate I do is like, I really don't do sprint estimates. I have started keeping a change log for myself though on stuff. So that I could, yeah, and like sort of, doing a release every week or two so on certain projects so that I can go and if I go to get I can just look at the history of the change log oh yeah that was in this like time frame or whatever that's
Starting point is 00:38:03 been kind of helpful so and that's the closest I got the formalities I have a release log for stuff that nobody sees okay I've gone to combine I'm I'm on a weird project but stuff but it's spritz before but the uh doing combine board where there's like a big backlog and then I try to have like only two to three things in the up next queue, and then, and just hit it like that. That's a good idea. Yeah, I like that a lot. And then I have a, then I have like, I can look at the list of done things and when they got done and stuff. But the, the really thing, when I get, when I get pressed on like estimates, I push back because I'm mostly working on stuff that like it's hard to estimate. And it's like, well, you need to practice. Then you'll get better at it.
Starting point is 00:38:51 for what? I could spend time to estimate, but I think I'd rather spend time actually getting stuff to. Yeah. And then when I do estimate, I'll be like, yeah, that'll take like a month. And I get back, well, that's, that's too long. Okay, well, what answer do you want? Exactly. I do think there's an interesting analogy to like architecture. Like, I can get a really accurate plan and how long it takes to build as a bridge. And it's only within 20% margin of error or whatever. But bridges, that bridge has been built over and over and over across different roads and streams and stuff. The reason you build software is because it hasn't been built before.
Starting point is 00:39:27 If it just existed as a package, you would just use it. If it existed as a product, you'd probably just use it. Most of the time, you're like inventing a little bit of what you're doing. And so it's like. Yeah, and it might be a good thing. Yeah. There might be some people that do like a lot of stuff that they've kind of done before, but I've followed a career path where I'm trying to do things that I haven't done before.
Starting point is 00:39:46 And I'm probably the best person to accomplish that. Oh, there's not a lot of pushback. Yeah, yeah. The one thing I would, as if you do have to do estimates, do them holistically and include, like, cleaning up tech debt, include writing the tests that you need to write, include making the code look good, not, it's tempting to go, well, like, when could I get the first thing working?
Starting point is 00:40:08 That's probably three days. It's like, tell them it takes five. Just tell them, if it's three days, tell them it's five. So you get that time to do the cleanup, and you don't accumulate a worse and more product over time. Yeah, and also the, I can come back and clean, it up you will get that time will fill up and you won't be able to do that so yeah well that's our time our time is up right awesome our time is up thank you to everyone for being here for listening

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