WEBVTT
00:00:00.020 -->
00:00:04.780Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:00:05.180 -->
00:00:10.100This is episode 469, recorded Monday, February 9th, 2026.
00:00:10.760 -->
00:00:11.820And I am Brian Okken.
00:00:12.040 -->
00:00:12.880And I am Michael Kennedy.
00:00:13.300 -->
00:00:18.360As usual, as frequently lately, this episode is brought to you by us.
00:00:18.960 -->
00:00:27.420So thank you for supporting us through contributing through Patreon or grabbing a course or book or whatever you want.
00:00:27.580 -->
00:00:31.340But, you know, chipping in a few bucks helps keep the show going.
00:00:32.400 -->
00:00:33.000Connect with us.
00:00:33.200 -->
00:00:34.920Send us news if you hear something exciting.
00:00:36.000 -->
00:00:39.200Even if you think we've heard it, we may not have or we may have forgotten.
00:00:39.520 -->
00:00:41.020So send it on over.
00:00:41.380 -->
00:00:45.340Connect with us through Mastodon or Bluesky.
00:00:45.820 -->
00:00:48.360Links are in the show notes or email.
00:00:49.080 -->
00:00:52.320You can also, yeah, there's a contact form on the site too.
00:00:52.820 -->
00:00:57.540You can join us live if you'd like to see us on YouTube or live.
00:00:57.940 -->
00:01:01.240Go to pythonbytes.fm/live and be part of the audience.
00:01:01.620 -->
00:01:05.780And you can listen to us, heckle us, send in questions, comments.
00:01:06.160 -->
00:01:09.120And sometimes we read those during the show, and that's fun.
00:01:09.340 -->
00:01:13.200And then also, you don't need to take notes because we'll send it to your inbox.
00:01:13.600 -->
00:01:16.600Just go over to the pythonbytes.fm.
00:01:16.820 -->
00:01:17.960You can sign up to the newsletter.
00:01:19.120 -->
00:01:26.360And we will send you links to everything we covered, plus a little background information, and send that to your email once a week.
00:01:26.820 -->
00:01:27.280Yeah, that's great.
00:01:28.300 -->
00:01:30.800Well, I am excited about this first topic, Michael.
00:01:31.180 -->
00:01:32.240So let's kick it off.
00:01:32.460 -->
00:01:32.900Thanks, Brian.
00:01:33.240 -->
00:01:36.620So this one is a homegrown topic.
00:01:37.180 -->
00:01:38.660So I've created a new app.
00:01:38.680 -->
00:01:45.540And I got to tell you, this is one of the very first proper desktop applications I have shipped in a long time.
00:01:45.620 -->
00:01:48.920Like when was the last time that you shipped a desktop app?
00:01:49.040 -->
00:01:50.460Like I tell you, it's been years for me.
00:01:50.800 -->
00:01:52.160I don't think I ever have.
00:01:52.480 -->
00:01:52.680Yeah.
00:01:53.110 -->
00:01:56.980Well, I used to do a lot of Windows development and build legit desktop apps.
00:01:57.030 -->
00:01:59.340I worked at this scientific visualization company.
00:01:59.500 -->
00:02:02.700We'd build like things to do, data processing and visualization.
00:02:03.110 -->
00:02:05.060And this predates the web being real powerful for that.
00:02:06.020 -->
00:02:08.080Oh, I guess I did way back when.
00:02:08.460 -->
00:02:08.580Systems.
00:02:09.200 -->
00:02:09.560Exactly.
00:02:10.050 -->
00:02:11.120I mean, that used to be the way.
00:02:11.440 -->
00:02:18.420And so I've been working building a ton of web apps, which is what drove me to build a desktop app, which is strange.
00:02:18.820 -->
00:02:19.660But here's the deal.
00:02:19.740 -->
00:02:21.900I built this thing called Command Book.
00:02:22.400 -->
00:02:29.280And the idea is, as developers, we have a lot of long-running processes that we keep in the terminal.
00:02:29.640 -->
00:02:31.300I want to tail this log.
00:02:31.640 -->
00:02:34.040I want to turn on some monitoring software.
00:02:34.230 -->
00:02:36.520I want to run this web app.
00:02:36.860 -->
00:02:39.520Oh, yeah, but the web app also has this background daemon thing.
00:02:39.550 -->
00:02:40.580So I got to run that.
00:02:40.760 -->
00:02:44.080And I want to run the database that powers that, those two things.
00:02:44.510 -->
00:02:49.580So then you end up with like four terminal tabs, all that just say Python, Python, Python,
00:02:49.860 -->
00:02:49.980Docker.
00:02:50.350 -->
00:02:50.860And you're like, huh?
00:02:51.260 -->
00:02:53.140Well, I need to go see the output of one of those.
00:02:53.500 -->
00:02:54.520Which one do I go to?
00:02:54.680 -->
00:02:55.900Like, maybe it's this Python.
00:02:56.030 -->
00:02:57.320No, it was no, no, that Python, right?
00:02:57.680 -->
00:02:58.220Oh, guess what?
00:02:58.470 -->
00:03:03.760I set him to auto reload so that as I'm working on the code or Claude code is working on the
00:03:03.900 -->
00:03:08.740code, I don't have to keep closing the web app, opening it back up, then refreshing it.
00:03:08.940 -->
00:03:12.500I can just set it up to auto, you know, like --reload or set it in dev
00:03:12.620 -->
00:03:14.280mode with reload true, that kind of thing.
00:03:14.560 -->
00:03:15.240That works great.
00:03:15.530 -->
00:03:20.360Except for if the timing lines up such that your app detects the change, but the
00:03:20.540 -->
00:03:24.360code is in an invalid state, like you're typing def function, open parentheses,
00:03:24.640 -->
00:03:25.620but you haven't closed it yet.
00:03:25.980 -->
00:03:26.180Boom.
00:03:26.280 -->
00:03:26.940It tries to reload.
00:03:27.010 -->
00:03:30.520It goes, cannot parse code shuts down and won't reload ever again.
00:03:30.620 -->
00:03:32.780You're like, ah, now I gotta go find it amongst those tabs again.
00:03:32.940 -->
00:03:33.020Right?
00:03:33.100 -->
00:03:35.200So that's the kind of the thing I'm like, can we just do better?
00:03:35.260 -->
00:03:39.720Like do these long running commands, should they really be four or five terminal tabs?
00:03:40.240 -->
00:03:40.320No.
00:03:40.580 -->
00:03:42.200So I created this thing called command book.
00:03:42.380 -->
00:03:46.020And the idea is that you take those long running commands and you put them into an
00:03:46.220 -->
00:03:51.500app, a native app that runs them with just the same output, but a bunch of bonuses.
00:03:52.060 -->
00:03:55.920And then you keep your terminal for actually, I want to do commands that
00:03:55.920 -->
00:03:56.660are more short lived.
00:03:56.780 -->
00:03:56.840Right.
00:03:57.270 -->
00:04:01.660And also let's, let's you jump around really quick from like, I want to quickly
00:04:01.880 -->
00:04:02.840see what this log looks like.
00:04:02.880 -->
00:04:05.440oh, I also, I need to turn on this database thing real quick.
00:04:05.490 -->
00:04:07.460Do him hit this, you know, hit this thing to run it.
00:04:08.280 -->
00:04:10.900And so here I even have a little example.
00:04:11.290 -->
00:04:12.880I could even run the Python bytes thing.
00:04:13.040 -->
00:04:17.140So if you check out the video, you can see the app in action,
00:04:17.340 -->
00:04:19.799but a link to the website at commandbookapp.com.
00:04:20.380 -->
00:04:22.300And so it does a bunch of cool things.
00:04:22.370 -->
00:04:25.140So like if I go and edit, it has a command palette.
00:04:25.400 -->
00:04:26.780So if I want to type anything with Hugo,
00:04:26.940 -->
00:04:28.520like I want to publish to the talk Python blog,
00:04:28.630 -->
00:04:30.940I just type Hugo and find that, or I want to publish this one.
00:04:31.040 -->
00:04:34.580I want to just run my personal blog, hit that one, off it goes.
00:04:34.900 -->
00:04:38.320And it doesn't just do that because what else is it doing?
00:04:38.540 -->
00:04:40.120You don't want to have merge conflicts.
00:04:40.300 -->
00:04:41.660So it runs get pull.
00:04:41.980 -->
00:04:43.060You can specify what to do.
00:04:43.080 -->
00:04:44.900It runs get pull before it runs your server.
00:04:45.100 -->
00:04:48.160Every time you say run your server and it makes sure no matter where you are,
00:04:48.260 -->
00:04:50.220you're always in the right directory, that kind of stuff.
00:04:50.220 -->
00:04:53.160And you can like chain them with ampersand ampersand,
00:04:53.260 -->
00:04:55.480which is like a Linux terminal thing.
00:04:55.860 -->
00:04:57.600And it will auto detect those, break them apart,
00:04:57.840 -->
00:05:00.320run them as multiple commands and that kind of stuff.
00:05:00.480 -->
00:05:03.120So yeah, I think this is just super neat.
00:05:03.520 -->
00:05:06.080It detects all the URLs that are shown.
00:05:06.150 -->
00:05:09.200So if you're the thing to start the browser to the right place,
00:05:09.420 -->
00:05:10.880scrolls off the screen, you don't have to scroll.
00:05:11.230 -->
00:05:13.400It shows you uptime, how much memory is being used.
00:05:13.500 -->
00:05:15.440There's a bunch of cool little things that you can do
00:05:15.550 -->
00:05:17.460if you just go like, maybe these long running things
00:05:17.740 -->
00:05:20.080don't need to live in my terminal all the time.
00:05:20.370 -->
00:05:22.600Because you'll have messages like, oh, there's an update for warp.
00:05:22.800 -->
00:05:25.080You're like, yeah, but I don't really want to install it right now
00:05:25.220 -->
00:05:27.440because all this other stuff's been going for a day
00:05:27.470 -->
00:05:28.220and I want to shut it down.
00:05:28.310 -->
00:05:29.780Like, do those need to be the same thing?
00:05:29.920 -->
00:05:31.480So I hope people really like this.
00:05:31.780 -->
00:05:37.100There's a free and a paid version over at commandbookapp.com.
00:05:37.350 -->
00:05:41.500I spent about three full-time weeks working on this thing,
00:05:41.740 -->
00:05:44.220and I'm really proud of how it came out.
00:05:44.230 -->
00:05:46.940I think it has a bunch of cool features that are not obvious,
00:05:47.280 -->
00:05:49.700but as you start to work with them, oh, and that's cool.
00:05:49.980 -->
00:05:52.740And I built it with SwiftUI if people are interested.
00:05:53.220 -->
00:05:54.900The backend is all Python, of course,
00:05:55.240 -->
00:05:58.560but the app itself is SwiftUI 20 megs.
00:05:58.780 -->
00:06:01.860It's not a huge electron thing and it starts in.
00:06:02.120 -->
00:06:03.960I'm excited about trying this out, Michael.
00:06:04.220 -->
00:06:04.660This is neat.
00:06:04.710 -->
00:06:11.920I like the stop all and also like there's so I don't normally have stuff running for like a long time, like days.
00:06:12.360 -->
00:06:25.620But I do have things that I run regularly in the background, like you said, running a server or something like that, or that I kind of forget all the command, all the prompts that I the command line things that I usually add to it.
00:06:26.320 -->
00:06:31.040And having them already there, just waiting, and I can go, oh, yeah, run that.
00:06:31.300 -->
00:06:31.620It's right there.
00:06:31.840 -->
00:06:32.380I can just run it.
00:06:32.540 -->
00:06:34.200Yeah, totally awesome.
00:06:34.520 -->
00:06:34.800Thanks, Brian.
00:06:34.980 -->
00:06:38.960I totally agree with that because it's like, oh, I got to change directory to here and
00:06:39.000 -->
00:06:40.200then activate the virtual environment.
00:06:40.280 -->
00:06:41.100And then I run this command.
00:06:41.240 -->
00:06:42.060Oh, I forgot that flag.
00:06:42.220 -->
00:06:43.780And then I got to change directory there.
00:06:43.940 -->
00:06:45.140And it's just like, click, click, click.
00:06:45.240 -->
00:06:47.820Or you can group them and say, just run all of these things for this project.
00:06:48.439 -->
00:06:49.260It's pretty neat.
00:06:49.500 -->
00:06:54.179And my experience building with SwiftUI and publishing, this has to be signed and
00:06:54.200 -->
00:06:57.720notarized by Apple, which made me worry given my last experience.
00:06:58.040 -->
00:06:59.820And I hinted at this last time we talked.
00:07:00.200 -->
00:07:05.480It was a lot better to distribute a desktop app, even though it has to be signed.
00:07:06.500 -->
00:07:09.880You've got to digitally sign it and notarize it with your developer key.
00:07:10.240 -->
00:07:14.020But then you've got to put it into one of those DMG things that you open up and drag
00:07:14.140 -->
00:07:15.680from like over to the app folder.
00:07:15.860 -->
00:07:17.400That's how the Mac stuff installs.
00:07:17.680 -->
00:07:20.100You've got to digitally sign and notarize that.
00:07:20.580 -->
00:07:24.160And I'm like, oh my gosh, where are they going to tell me I've got to add in that
00:07:24.160 -->
00:07:26.980purchasing for this just so they can have more money, you know?
00:07:26.980 -->
00:07:28.960And no, it was way better.
00:07:29.460 -->
00:07:34.260And one final wild sort of it's turtles all the way down thing.
00:07:34.590 -->
00:07:39.260With this app down here, I can run the website for command book app, of course,
00:07:39.520 -->
00:07:42.040but I can also build command book itself.
00:07:42.610 -->
00:07:44.780Like, so the app has a command that builds itself.
00:07:45.180 -->
00:07:49.080And then it has another command that will actually notarize and
00:07:49.340 -->
00:07:53.560sign the app and build the installer and upload it to the server and
00:07:53.580 -->
00:07:57.460set up an auto update sequence that starts kicking off from within the app.
00:07:57.660 -->
00:07:58.260It's super cool.
00:07:58.660 -->
00:08:01.800So yeah, anyway, people check commandbookapp.com out.
00:08:02.520 -->
00:08:02.840It's neat.
00:08:03.340 -->
00:08:04.560For now, it's Swift only.
00:08:04.920 -->
00:08:07.980If I get a bunch of people going, Michael, where's my Windows version?
00:08:08.380 -->
00:08:10.260I will gladly build us a Windows version.
00:08:11.060 -->
00:08:11.460Gladly?
00:08:13.100 -->
00:08:15.620Hey, I'm going to build this baby in Windows Forms.
00:08:15.620 -->
00:08:16.560I'm going back old school.
00:08:16.640 -->
00:08:17.580I love that.
00:08:17.620 -->
00:08:20.620It's like the VB6 style, and I would be happy to do it.
00:08:21.400 -->
00:08:26.600But again, I'd have to figure out how to notarize stuff on Windows, which I think is even harder these days.
00:08:27.100 -->
00:08:28.540Can I get it in DOS 6.2?
00:08:28.810 -->
00:08:29.260You know what?
00:08:29.500 -->
00:08:31.120We only support Dr. DOS.
00:08:33.280 -->
00:08:36.479No, I think this is a fun app, and hopefully people can check it out.
00:08:36.640 -->
00:08:39.580Maybe I can inspire some people to write some other desktop apps as well.
00:08:40.160 -->
00:08:45.360It's not a terrible idea, even though the web is a really nice option these days.
00:08:45.660 -->
00:08:45.740Yeah.
00:08:45.980 -->
00:08:46.320Okay.
00:08:47.000 -->
00:08:47.740Well, let's see.
00:08:47.790 -->
00:08:48.240What do I got?
00:08:48.280 -->
00:08:52.200I wanted to talk about uvx.sh.
00:08:52.570 -->
00:08:55.340So this came out from Astral.
00:08:55.700 -->
00:08:58.880Install Python tools with a single command powered by uv.
00:08:59.320 -->
00:09:02.300Okay, so I didn't quite know what to make of this.
00:09:03.760 -->
00:09:06.600I know that we use curl sometimes to install.
00:09:07.220 -->
00:09:10.920If you want toinstall ruff, you can use curl or actually uv.
00:09:11.240 -->
00:09:16.820If you want to install uv, you use the curl to pull in a sh and install it and stuff.
00:09:16.960 -->
00:09:19.100But like, why other stuff?
00:09:19.380 -->
00:09:24.960So I was really glad that Tim Hopper wrote a couple articles about it.
00:09:25.300 -->
00:09:31.680So Tim Hopper wrote, uvx.sh install Python tools without uv or Python.
00:09:32.200 -->
00:09:35.980And then also how to install Python CLI tools without Python.
00:09:36.480 -->
00:09:38.580So Astral's released UVA.
00:09:38.920 -->
00:09:40.040I'm just going to read right here.
00:09:40.440 -->
00:09:46.620Astral's released uvx.sh, a service that generates installation scripts for any Python tool on PyPI.
00:09:46.960 -->
00:09:58.740With a single curl or PowerShell command, users can install tools like rough pytest, a nice example, without having uv or Python already installed in their system.
00:09:59.200 -->
00:10:00.320Now this sort of makes sense.
00:10:00.480 -->
00:10:07.480So you've got like something, I don't know, some people that need to write, you want to distribute something and distribution is hard sometimes.
00:10:08.220 -->
00:10:11.760And you maybe don't want to write a Windows app.
00:10:12.400 -->
00:10:17.960you could do something like this and use this service to distribute your stuff.
00:10:19.230 -->
00:10:21.720Or as long as you publish it, I guess.
00:10:22.020 -->
00:10:24.520This is super interesting because it does not,
00:10:24.820 -->
00:10:27.160it just takes one more step out of the sequence.
00:10:28.260 -->
00:10:31.200The much improved sequence was first you figure out
00:10:31.340 -->
00:10:33.040however the heck you install uv with curl,
00:10:33.150 -->
00:10:36.840and then you can start running uv tool install or uv run.
00:10:37.150 -->
00:10:41.060But now you just go straight to the thing that you're actually trying to get to,
00:10:41.420 -->
00:10:43.400even though it makes uv happen, right?
00:10:43.520 -->
00:10:44.040I like it.
00:10:44.340 -->
00:10:45.760Yeah, so I'm not sure.
00:10:46.020 -->
00:10:49.520So clearly it's installing without Python or uv,
00:10:49.780 -->
00:10:54.660so somehow it's sort of doing a shimmed version of both, maybe?
00:10:54.660 -->
00:10:58.160I think step one is basically run the curl install command for uv,
00:10:58.560 -->
00:11:01.800and then step two is then uv toolinstall ruff,
00:11:02.180 -->
00:11:03.140or whatever it is you picked.
00:11:03.240 -->
00:11:06.700I think it's just those two things and one CLI command.
00:11:06.940 -->
00:11:07.240Okay.
00:11:07.960 -->
00:11:09.160Anyway, interesting,
00:11:09.220 -->
00:11:12.000and thanks Tim for writing up some examples.
00:11:12.890 -->
00:11:16.560So, yeah, anyway, I don't know if I'll use it,
00:11:16.780 -->
00:11:17.520but that doesn't matter.
00:11:17.740 -->
00:11:18.380A lot of people will.
00:11:18.680 -->
00:11:22.120I already know where I can start putting this in.
00:11:22.260 -->
00:11:22.780So this is sweet.
00:11:23.120 -->
00:11:26.060And really quick before we move on to the next topic,
00:11:26.480 -->
00:11:30.120the Command Book app is a GUI SwiftUI app,
00:11:30.500 -->
00:11:33.860but it also has a command line CLI.
00:11:34.240 -->
00:11:36.100So anything that you can do in the GUI,
00:11:36.440 -->
00:11:38.180you can do in the CLI and just like,
00:11:38.320 -->
00:11:41.240If you've constructed one of these really careful commands with like six steps,
00:11:41.310 -->
00:11:44.180you can just, you know, command book space, name of your command and boom,
00:11:44.540 -->
00:11:44.880off it goes.
00:11:45.180 -->
00:11:47.980And they're always in sync, which is kind of weird for a desktop app that,
00:11:48.170 -->
00:11:49.780um, seems very GUI focused.
00:11:50.240 -->
00:11:50.480All right.
00:11:50.570 -->
00:11:52.320but let's move on.
00:11:52.670 -->
00:11:54.900I want to talk about sub process polling.
00:11:55.360 -->
00:11:57.660Now this is actually a good follow on from command book.
00:11:57.690 -->
00:12:00.900Cause all that thing does is just run a bunch of sub processes and stream the
00:12:01.020 -->
00:12:02.460output and check on their ending.
00:12:02.920 -->
00:12:03.780And do you know what it's been doing?
00:12:04.420 -->
00:12:05.120Hey, is that done?
00:12:05.350 -->
00:12:05.880Let me wait a second.
00:12:06.040 -->
00:12:06.420Is that done?
00:12:06.720 -->
00:12:07.120Is it done?
00:12:07.440 -->
00:12:07.800Is it done?
00:12:08.180 -->
00:12:08.660Is it done?
00:12:08.940 -->
00:12:10.540Like, no, that is not great.
00:12:11.100 -->
00:12:15.640So I want to talk about this thing called ending 15 years of subprocess polling.
00:12:16.100 -->
00:12:19.880So this comes to us from Yom Polo.
00:12:20.780 -->
00:12:25.420And it says from Python 3.3 until today, we've always had code that goes like this.
00:12:25.820 -->
00:12:29.600While we're waiting for some amount of time, get us, you'll wait on this,
00:12:29.960 -->
00:12:31.240get us details about this process.
00:12:31.520 -->
00:12:31.980Is it done?
00:12:32.280 -->
00:12:32.440No.
00:12:32.800 -->
00:12:33.420Time.sleep.
00:12:33.740 -->
00:12:33.880Okay.
00:12:34.040 -->
00:12:34.820We're going to try to do it again.
00:12:34.980 -->
00:12:35.360Is it done?
00:12:35.600 -->
00:12:36.060Time.sleep.
00:12:36.360 -->
00:12:42.080And obviously this means that there's a bunch of effort going into just sitting there and spinning over and over.
00:12:42.080 -->
00:12:43.440There's extra CPU time.
00:12:44.040 -->
00:12:46.320Yeah, it sounds like it's not that big of a deal.
00:12:46.380 -->
00:12:49.220Like, oh, you just, you know, it sleeps for a tenth of a millisecond.
00:12:49.560 -->
00:12:52.640So at first, and then like it backs off as it gets longer.
00:12:52.780 -->
00:12:54.560So it sleeps for up to 40 milliseconds.
00:12:54.980 -->
00:12:55.160Great.
00:12:55.240 -->
00:12:57.480So that's like zero CPU usage.
00:12:57.820 -->
00:12:59.560Let me tell you where it does matter.
00:12:59.840 -->
00:13:09.860If you think a little bit more deeply, when you've got multiple processes running and checking on things and so on, and your process says, I need to just wake up for a second.
00:13:10.180 -->
00:13:11.360Oh, there's nothing for me to do.
00:13:11.420 -->
00:13:12.300Let me go back to sleep.
00:13:12.680 -->
00:13:17.760It's blown out the L1, probably L2 cache of that CPU that it ran on.
00:13:18.020 -->
00:13:19.080And then it just went back to sleep.
00:13:19.240 -->
00:13:19.860You're like, great.
00:13:19.860 -->
00:13:22.540You woke up to like wreck the room and you left.
00:13:22.840 -->
00:13:22.940Right.
00:13:23.460 -->
00:13:27.420Because I don't know, a lot of people know this, but not everyone, I'm sure, is if you
00:13:27.620 -->
00:13:32.940try to access memory from your program and it's in the L2 cache, that's 400 times, 200
00:13:32.960 -->
00:13:35.280to 400 times faster than you have to access it.
00:13:35.420 -->
00:13:36.740And it's in regular RAM.
00:13:37.100 -->
00:13:37.760It's not in the cache.
00:13:38.100 -->
00:13:40.200So that's a huge challenge, right?
00:13:40.320 -->
00:13:44.540There's a bunch of things like this, plus the latency, like, you know, it might not be
00:13:44.540 -->
00:13:48.980a huge deal that it might be 20 milliseconds till you actually see the end, but still,
00:13:49.380 -->
00:13:49.940it's not ideal.
00:13:50.260 -->
00:13:57.060So it turns out that all POSIX systems provide at least one mechanism to be notified when a file descriptor becomes ready.
00:13:57.440 -->
00:14:00.060But here's the thing that unlocked it.
00:14:00.520 -->
00:14:07.640So he said, until recently, I believe that this could only be used with file descriptors, like files and sockets and so on.
00:14:07.650 -->
00:14:10.880But it turns out a file descriptor can also be a process ID.
00:14:11.840 -->
00:14:13.760How about that for great naming and documentation?
00:14:13.760 -->
00:14:14.580I didn't know that.
00:14:15.040 -->
00:14:15.220Yeah.
00:14:15.640 -->
00:14:19.600So what you can do is you can just give it the process ID and just go, wait until this thing is done.
00:14:20.060 -->
00:14:20.920Wake me up when it's done.
00:14:21.280 -->
00:14:26.680And Linux in 2019 introduced PIDFD underscore open,
00:14:27.200 -->
00:14:30.020which was added to the OS module for Python 3.9,
00:14:30.360 -->
00:14:31.820and it returns a file descriptor,
00:14:32.020 -->
00:14:33.940a descriptor referencing the PID, right?
00:14:34.280 -->
00:14:37.380So it can be used in conjunction with a select, a pull, or an e-pull,
00:14:37.720 -->
00:14:40.220usually like OS-level things, to effectively wait until it exits.
00:14:40.380 -->
00:14:41.500So that works well there.
00:14:42.000 -->
00:14:44.880macOS, I believe, has always had this thing called KQ,
00:14:45.020 -->
00:14:46.980which always has had this pulling capability.
00:14:47.420 -->
00:14:49.920And then Windows, actually, Windows is the winner here.
00:14:50.040 -->
00:14:52.640You know, it's fun to like, oh, Windows is in the corner eating glue.
00:14:53.080 -->
00:14:55.380No, not this time.
00:14:55.660 -->
00:14:59.960In fact, Windows is the only one that had native support from the beginning.
00:15:00.500 -->
00:15:03.680So there's a Win32 call, I believe, wait for single object or something like that,
00:15:03.980 -->
00:15:07.240which has always been able to just wait for a process to end.
00:15:07.580 -->
00:15:09.280And it can fall back to polling if it has to.
00:15:09.640 -->
00:15:10.980So anyway, pretty interesting.
00:15:11.220 -->
00:15:16.360And the big news is this bad boy right here has been merged by Victor Stinner.
00:15:16.860 -->
00:15:20.300And you can go, actually, I'll link to the pull request.
00:15:20.460 -->
00:15:22.960Pull request 144,047.
00:15:23.510 -->
00:15:24.800That was merged two weeks ago.
00:15:25.230 -->
00:15:25.620Pretty cool, huh?
00:15:25.860 -->
00:15:27.560Yeah, so that'll be in 3.15.
00:15:28.100 -->
00:15:28.440Exactly.
00:15:28.880 -->
00:15:29.320Yes, exactly.
00:15:29.620 -->
00:15:29.780Okay.
00:15:29.920 -->
00:15:30.400Exactly, exactly.
00:15:30.760 -->
00:15:32.020So, yeah, people can check that out.
00:15:33.260 -->
00:15:34.420And you don't have to do anything.
00:15:35.100 -->
00:15:38.460Your subprocess, your multiprocessing, et cetera, gets a little better.
00:15:38.800 -->
00:15:39.300Yeah, cool.
00:15:40.420 -->
00:15:45.280Also, actually, there are some people that are already doing extra things to try to get around this.
00:15:45.600 -->
00:15:48.780And in 3.15, they'll be able to get rid of those workarounds.
00:15:48.780 -->
00:15:48.800Oh, yeah.
00:15:49.320 -->
00:15:49.760Yeah.
00:15:50.020 -->
00:15:50.120Yeah.
00:15:50.720 -->
00:15:52.940So, OK.
00:15:53.780 -->
00:15:58.200I mostly wanted to talk about this next topic because of the name.
00:15:59.180 -->
00:16:03.540So Pedantic came out with Monty for Monty Python, of course.
00:16:04.760 -->
00:16:08.960So Monty Python is experimental.
00:16:09.170 -->
00:16:12.080This project is still in development, not ready for prime time.
00:16:12.520 -->
00:16:13.680But, you know, sure.
00:16:14.080 -->
00:16:15.640FastAPI is still on zero ver.
00:16:16.040 -->
00:16:16.780So who knows?
00:16:18.820 -->
00:16:20.040So I think.
00:16:20.500 -->
00:16:21.660Sorry, FastAPI, if I'm wrong.
00:16:22.940 -->
00:16:23.100Okay.
00:16:23.390 -->
00:16:26.980So pedantic folks, Lise Monty,
00:16:27.300 -->
00:16:30.440minimal secure Python interpreter written in Rust for use by AI.
00:16:30.960 -->
00:16:31.320Wait a second.
00:16:31.780 -->
00:16:33.900I don't know if this is the first one,
00:16:34.140 -->
00:16:39.160but a programming implementation of a language
00:16:39.839 -->
00:16:41.900primarily intended to be used by AI.
00:16:42.260 -->
00:16:43.480I don't know if there's others.
00:16:44.040 -->
00:16:48.160Anyway, it's a minimal secure interpreter.
00:16:49.560 -->
00:16:53.120It says, "Monty avoids the costs, latency, complexity,
00:16:53.280 -->
00:16:58.140and general faff of using a full container-based sandbox
00:16:58.540 -->
00:17:00.340for running LLM-generated code."
00:17:00.620 -->
00:17:04.959So I'm guessing that a lot of people in some process are
00:17:05.160 -->
00:17:10.040saying, hey, sandbox this so that the AI doesn't escape
00:17:10.100 -->
00:17:11.680and try to take over the world.
00:17:12.459 -->
00:17:15.240Maybe it can only access these directories.
00:17:15.620 -->
00:17:17.939Maybe it can't call these kernel methods or something, right?
00:17:18.000 -->
00:17:18.380Who knows?
00:17:18.520 -->
00:17:18.740Yeah.
00:17:19.880 -->
00:17:30.480And we get like, you know, so promises from the Claude people and other people that they've like turned off reasonable things or like things that we, but, you know, who knows?
00:17:30.720 -->
00:17:35.940So there's a subset of what Monty can do.
00:17:36.060 -->
00:17:41.900It has a reasonable subset of Python code enough for your agent to express what it wants to do.
00:17:43.279 -->
00:17:45.820completely block access to the host environment.
00:17:46.060 -->
00:17:49.580No access to the file system, environmental variables, or network access.
00:17:50.580 -->
00:17:51.220This is interesting.
00:17:53.380 -->
00:17:56.380Okay, file system, environmental variables, and network access
00:17:56.520 -->
00:18:00.060are all implemented via external function calls
00:18:00.460 -->
00:18:01.900that the developer can control.
00:18:02.100 -->
00:18:03.880Okay, so it doesn't completely block it,
00:18:04.080 -->
00:18:07.120but the developer can control what it can have access to.
00:18:07.340 -->
00:18:07.820That's cool.
00:18:09.180 -->
00:18:16.100Anyway, so there's basically this minimal Python set that controls what your AI can do with it.
00:18:16.900 -->
00:18:17.380Kind of interesting.
00:18:17.840 -->
00:18:18.400I'm not sure.
00:18:19.360 -->
00:18:20.240It can't do.
00:18:20.270 -->
00:18:21.900It can't do standard library yet.
00:18:22.100 -->
00:18:28.980So I'm not sure exactly where this use model is, but I'm interested to watch and see what's going to happen.
00:18:29.720 -->
00:18:32.140So any take on this at all, Michael?
00:18:32.460 -->
00:18:33.500I'm very excited about it.
00:18:33.860 -->
00:18:38.820When I do like to troll the GitHub feed, I used to think that was a dumb.
00:18:38.900 -->
00:18:41.920thing. I'm like, what is this? It's in my way, in my code. Like, get out of here. I actually really
00:18:42.100 -->
00:18:46.460love the GitHub feed. And I was watching it a day and a half ago or something. And I saw this come
00:18:46.560 -->
00:18:51.400by and I saw Samuel Colvin was behind it. I'm like, yes, this is interesting. So he and I are
00:18:51.560 -->
00:18:56.080talking next week. I think it's next week. No, wait, it might be tomorrow. I'm like, you know,
00:18:56.100 -->
00:19:00.280that joke for the progress monitor or the progress bar for the windows, the windows guy.
00:19:00.740 -->
00:19:06.520Yeah. No, it is. It's next Tuesday, the 17th. The joke is I'm on my way to your house. I'll be
00:19:06.540 -->
00:19:10.180there in about half an hour. No, wait, it's going to take a day. Actually, I'm at your front door,
00:19:10.420 -->
00:19:16.560right? That's kind of how I feel. No, I'm talking next, not tomorrow, but the week after tomorrow,
00:19:16.690 -->
00:19:20.780I said, hey, when I saw this come by, I'm like, this is looking like it could be a huge thing.
00:19:21.080 -->
00:19:26.620Let's talk. So that was my take, right? Email Samuel, say, this looks awesome. How do we share
00:19:26.720 -->
00:19:31.880it? His announcement when he said it was something like, it might be a little early for this, but
00:19:31.970 -->
00:19:35.919what the heck, here we go, right? And sharing it. And that thing, like maybe the standard library
00:19:36.040 -->
00:19:37.760and so on is a bit of that.
00:19:38.860 -->
00:19:41.000Look, the possibility of what's on the other side of this
00:19:41.420 -->
00:19:42.400is incredible, right?
00:19:42.700 -->
00:19:45.480Like if we get a fully working Python
00:19:45.730 -->
00:19:47.540or nearly fully working, right?
00:19:47.640 -->
00:19:48.800One of the things that you can do
00:19:48.830 -->
00:19:50.320when you're doing this kind of stuff is you're like,
00:19:50.460 -->
00:19:52.800well, do we really need to support that edge case
00:19:52.850 -->
00:19:54.460that was carried over from 2.4?
00:19:55.440 -->
00:19:57.520No, the AI is not going to try to do that anyway.
00:19:57.630 -->
00:19:58.140You know what I mean?
00:19:58.220 -->
00:20:01.300Like you can cut some corners and like drop some baggage,
00:20:01.740 -->
00:20:03.760which may or may not make it generally useful,
00:20:04.220 -->
00:20:05.640but I don't know.
00:20:05.740 -->
00:20:07.300I think it's super interesting.
00:20:08.420 -->
00:20:11.240So how, like, okay, hype-driven development maybe.
00:20:12.860 -->
00:20:15.540He just announced it within the last week,
00:20:15.780 -->
00:20:17.580and it's got 2,000 stars already?
00:20:17.920 -->
00:20:18.700Yeah, I know.
00:20:19.350 -->
00:20:23.120A day ago when I saw it or something, it had like 500 stars,
00:20:23.300 -->
00:20:24.640but it was going click, click, click.
00:20:24.870 -->
00:20:25.700You know, it was incredible.
00:20:26.360 -->
00:20:30.420Yeah, it shows you the faith and the trust that the Pynantic team has earned.
00:20:30.720 -->
00:20:31.880And, you know, I don't know.
00:20:31.940 -->
00:20:32.740Well-deserved.
00:20:33.140 -->
00:20:33.600Yeah, absolutely.
00:20:34.080 -->
00:20:40.020Also, one of their big projects, not just Pydantic, but is Pydantic AI, right?
00:20:40.230 -->
00:20:44.380So they've got a whole agent system for running AIs and stuff.
00:20:44.550 -->
00:20:49.740And so this is a really interesting building block to make that more of a self-contained world, you know?
00:20:49.960 -->
00:20:50.200Yeah.
00:20:50.460 -->
00:20:52.920Yeah, it's also possible that they're already using it.
00:20:53.040 -->
00:20:57.000It's just they're exposing it for other people to have access to or something.
00:20:57.280 -->
00:20:57.900Yeah, exactly.
00:20:58.420 -->
00:21:00.340But it absolutely is a popular one.
00:21:00.680 -->
00:21:01.680And cool.
00:21:01.920 -->
00:21:03.840They're using COD speed also.
00:21:04.000 -->
00:21:04.560We covered that.
00:21:04.720 -->
00:21:06.040Oh, yeah, they are.
00:21:06.220 -->
00:21:06.920OK, cool.
00:21:07.620 -->
00:21:07.720Sweet.
00:21:07.820 -->
00:21:08.560All right.
00:21:08.640 -->
00:21:10.480Well, that's it for our main stuff, right?
00:21:10.760 -->
00:21:10.860Yep.
00:21:11.860 -->
00:21:11.960Yep.
00:21:12.460 -->
00:21:13.100Do you have any extras?
00:21:13.540 -->
00:21:14.440Yes, I do.
00:21:14.740 -->
00:21:15.480Yes, I do.
00:21:15.720 -->
00:21:17.580Let's jump over here to the extras.
00:21:18.160 -->
00:21:19.200First off, command book.
00:21:19.340 -->
00:21:19.440No.
00:21:20.940 -->
00:21:23.220No, but more CLIs from Talk Python things.
00:21:23.340 -->
00:21:24.720This is another thing that I wrote.
00:21:24.800 -->
00:21:26.040I have a couple of things that I wrote, actually,
00:21:26.260 -->
00:21:27.000that I want to talk about.
00:21:27.380 -->
00:21:30.040So a while ago, over at Talk Python,
00:21:31.160 -->
00:21:33.560I added this MCP and AI section, right?
00:21:33.610 -->
00:21:36.220And I talked about that, like, okay, here's how you can plug that into
00:21:36.420 -->
00:21:39.240Claude and other systems and the LLMs.txt.
00:21:39.630 -->
00:21:43.600But it occurred to me as I played with different AI tools, trying to make it
00:21:43.740 -->
00:21:45.100talk to this thing, like, you know what?
00:21:45.360 -->
00:21:47.120Most things don't do MCPs.
00:21:47.540 -->
00:21:52.500And even the ones that do, most of the users of those projects don't install
00:21:53.150 -->
00:21:55.080the custom MCP into their thing.
00:21:55.140 -->
00:22:01.940So could I give people access to all the talk Python data in a more wide ranging way?
00:22:02.170 -->
00:22:02.320Right.
00:22:02.700 -->
00:22:07.460So I decided the way to do that would be to create a talk Python CLI.
00:22:07.790 -->
00:22:09.920So now you can listen to this.
00:22:10.220 -->
00:22:11.880How recent is this, Brian?
00:22:11.890 -->
00:22:19.280I literally have not written this down, but in my mind, I can uvx-sh slash talk Python
00:22:19.940 -->
00:22:22.000CLI with dashes install.sh.
00:22:22.360 -->
00:22:25.500And then I will be able to just type things like down here somewhere.
00:22:25.780 -->
00:22:30.040I could just type Talk Python, then episodes, search, put some text in there,
00:22:30.060 -->
00:22:36.380or Talk Python guests list, or Talk Python guests get and give them an ID that came from the list.
00:22:36.440 -->
00:22:41.260And basically all the data that is behind Talk Python, which is insane.
00:22:41.940 -->
00:22:45.8407.5 million words in the corpus of content at Talk Python.
00:22:46.200 -->
00:22:46.380Wow.
00:22:46.740 -->
00:22:46.800Yeah.
00:22:47.040 -->
00:22:52.280If you take the transcripts, the show notes, the guest bios, you know, and you go, how many words is that?
00:22:52.620 -->
00:22:53.3007.5 million.
00:22:53.580 -->
00:22:53.860It's a couple.
00:22:54.260 -->
00:23:01.120So this is like a huge resource for people to go back and use to ask questions like what has changed over time and so on, right?
00:23:01.420 -->
00:23:03.900So I thought it'd be really cool to create this CLI tool for that.
00:23:04.220 -->
00:23:05.300And so I have.
00:23:05.520 -->
00:23:05.980Oh, that's cool.
00:23:06.240 -->
00:23:06.340Yeah.
00:23:06.600 -->
00:23:07.640So super easy.
00:23:07.980 -->
00:23:08.740It's all written in Python.
00:23:09.300 -->
00:23:09.920Install it with uv.
00:23:10.320 -->
00:23:14.200And then once you install it, just you have a talk Python, no spaces command, right?
00:23:14.520 -->
00:23:16.520Oh, one final thing is it has three different outputs.
00:23:17.060 -->
00:23:23.500it has uh does anyone here i don't know it doesn't there but you can have yeah it does normally it
00:23:23.560 -->
00:23:29.360puts out text formatted by the rich library you know will googan of will googan creation but it
00:23:29.400 -->
00:23:33.980can also put out json which is good for apps and it can put out markdown which is really good if
00:23:33.980 -->
00:23:38.760you would say go to claude code and say claude use this talk python thing and talk to it and give me
00:23:38.860 -->
00:23:43.600answers or something you know what i mean so you tell for any agentic stuff give it the markdown
00:23:43.620 -->
00:23:47.380That's what those want, which is, I always thought JSON, but no, Markdown is what they want.
00:23:47.440 -->
00:23:47.720Very weird.
00:23:48.000 -->
00:23:48.100Okay.
00:23:48.600 -->
00:23:53.140Speaking of which, I wrote a little riff on someone else's article called,
00:23:53.540 -->
00:23:55.540It's Not Vibe Coding, Agentic Engineering.
00:23:55.800 -->
00:24:01.660This guy, Addy Ozimani, wrote a really good article.
00:24:02.040 -->
00:24:06.480This guy's from one of the Google teams called Agentic Engineering.
00:24:06.660 -->
00:24:07.700So I wrote some stuff about that.
00:24:07.860 -->
00:24:09.400People can check that out if they want.
00:24:10.320 -->
00:24:16.160Honestly, the idea is like, I think a lot of serious work with agentic coding tools and vibe coding.
00:24:16.380 -->
00:24:18.440Hey, my manager made this last night.
00:24:18.500 -->
00:24:19.380Now we have to build it.
00:24:19.460 -->
00:24:21.420Like those two worlds get grouped into one thing.
00:24:21.520 -->
00:24:24.000And this article is a little bit to like, love it or hate it.
00:24:24.140 -->
00:24:26.400There's two different things you should be talking about in this world.
00:24:26.720 -->
00:24:27.420So check that out.
00:24:28.060 -->
00:24:29.300GitHub was having a day this morning.
00:24:29.360 -->
00:24:30.060Did you notice this?
00:24:30.360 -->
00:24:30.520No.
00:24:31.020 -->
00:24:31.100Yeah.
00:24:31.440 -->
00:24:37.000I got the magic unicorn and status code 503 just trying to do some work getting ready for the show.
00:24:37.340 -->
00:24:38.900So the issues didn't work.
00:24:39.300 -->
00:24:44.460pull requests were degraded actions are degraded uh it says other things were fine but like going
00:24:44.460 -->
00:24:49.120to the website wouldn't work it would 503 i couldn't git clone anything so if you're having
00:24:49.370 -->
00:24:55.040problems this morning you know many people were python 3 14 3 is now available third maintenance
00:24:55.270 -->
00:25:01.920release of 3 14 so i really dislike this format i mean whoever wrote it thank you for writing it
00:25:01.920 -->
00:25:07.780but i do dislike this format of hey we got this new minor vert we have this release i'm going to
00:25:07.600 -->
00:25:10.200tell you about all the changes that have happened over the last year.
00:25:10.840 -->
00:25:13.640No, all I want to know is the changes in this release.
00:25:14.180 -->
00:25:14.500Yeah.
00:25:14.880 -->
00:25:18.040If I want to know the changes that have lasted over a year over a year, I could go check that
00:25:18.140 -->
00:25:18.220out.
00:25:18.320 -->
00:25:21.400But it says, here's the changes of 314 to 313.
00:25:21.620 -->
00:25:24.100You're like, no, well, what about the one that I had before?
00:25:24.320 -->
00:25:25.200Like, how is this related?
00:25:25.340 -->
00:25:25.740Do you know what I mean?
00:25:26.240 -->
00:25:29.860I know if I track it down, there's other places I can find that information, but I don't have
00:25:29.860 -->
00:25:30.300it on the screen.
00:25:30.660 -->
00:25:31.960Yeah, but you have to track it down.
00:25:32.180 -->
00:25:33.700Why, why shouldn't, why wouldn't it be right here?
00:25:34.040 -->
00:25:34.140Yeah.
00:25:34.220 -->
00:25:37.580What is the value of saying this like eight times before you say, you know what I mean?
00:25:37.780 -->
00:25:38.340Anyway, it's weird.
00:25:38.600 -->
00:25:40.640Just restate the changelog year over year.
00:25:41.000 -->
00:25:41.440But awesome.
00:25:42.000 -->
00:25:42.580Upgrade to this.
00:25:43.500 -->
00:25:49.980UV Python install 3143 --manage only.
00:25:50.160 -->
00:25:50.540Something like that.
00:25:50.820 -->
00:25:51.460Anyway, that's how you get it.
00:25:51.660 -->
00:25:51.800All right.
00:25:52.160 -->
00:25:53.400This is the wildest story.
00:25:53.680 -->
00:25:54.540Absolute wildest story.
00:25:54.660 -->
00:25:56.020And my last extra, Brian.
00:25:56.340 -->
00:25:56.480Okay.
00:25:56.530 -->
00:25:59.680This is already out of date because the number is wrong.
00:26:00.240 -->
00:26:04.060But Wall Street just lost $285 billion.
00:26:05.020 -->
00:26:07.440The valuation of companies like Salesforce,
00:26:08.220 -->
00:26:10.940bunch of sort of offshoring,
00:26:11.600 -->
00:26:14.560like support team programmer companies,
00:26:15.120 -->
00:26:17.440like, hey, we have a bunch of experts
00:26:17.580 -->
00:26:19.240who will like be your legal review
00:26:19.440 -->
00:26:21.320and like write code to help you do that kind of stuff.
00:26:21.400 -->
00:26:23.580And so on, they just lost $285 billion
00:26:24.160 -->
00:26:25.600because of 13 Markdown files.
00:26:27.500 -->
00:26:29.100And the Markdown files are short, by the way.
00:26:29.200 -->
00:26:32.640This is not like an Epstein type thing where like some thing has been revealed.
00:26:33.080 -->
00:26:39.580So we live in this like in this weird dichotomy of two bizarre viewpoints.
00:26:39.960 -->
00:26:41.240One, AI is a fad.
00:26:41.240 -->
00:26:42.260The bubble is going to burst.
00:26:42.760 -->
00:26:45.520And that's just not very much of an important thing.
00:26:45.740 -->
00:26:47.300So, you know, don't even bother learning.
00:26:47.460 -->
00:26:48.240It's going to crash.
00:26:48.700 -->
00:26:49.720It's never going to replace people.
00:26:49.880 -->
00:26:51.740Remember, we've replaced, we tried all these layoffs.
00:26:52.040 -->
00:26:53.300They try to replace people with AI.
00:26:53.360 -->
00:26:53.900It's going badly.
00:26:54.100 -->
00:26:55.240Like there's a hundred of those articles.
00:26:55.620 -->
00:27:02.920This article says Anthropic released something that would help Claude Code basically do better legal work.
00:27:03.420 -->
00:27:08.240So all of these companies lost $285 billion because it was so good.
00:27:08.700 -->
00:27:15.440And all it is, literally all it is, is if you go to knowledgeworkplugin.com slash legal on the Anthropic Claude Code repo,
00:27:15.860 -->
00:27:22.120it's just a handful of markdown files that are just pre-prompts or skills to be given to Anthropic.
00:27:22.500 -->
00:27:23.480How insane is that?
00:27:24.920 -->
00:27:26.660Yeah, that's something.
00:27:26.980 -->
00:27:27.620It is something.
00:27:27.920 -->
00:27:31.260So we live in this world where both AI is a bubble that's going to pop,
00:27:31.400 -->
00:27:35.100and even just a few focus prompts will destroy large companies.
00:27:35.380 -->
00:27:36.200So I don't know.
00:27:36.360 -->
00:27:36.700It's good.
00:27:36.740 -->
00:27:37.560We're going to see how it shakes out.
00:27:37.860 -->
00:27:39.160We got to go up to the name.
00:27:39.320 -->
00:27:40.800Like go up to the top of that article.
00:27:42.960 -->
00:27:43.360Sasspocalypse.
00:27:44.520 -->
00:27:46.840Sasspocalypse, again, on the 3rd of February 26th.
00:27:48.380 -->
00:27:51.560Yeah, because it's these, you know, there's a link to a Bloomberg article.
00:27:51.700 -->
00:27:52.860What's behind the Sasspocalypse?
00:27:53.200 -->
00:27:54.960I do not care about your, you know what?
00:27:55.380 -->
00:27:56.100Unlimited access.
00:27:56.940 -->
00:27:57.340There we go.
00:27:57.490 -->
00:27:58.160We'll go into the reader.
00:27:58.740 -->
00:27:58.800Yeah.
00:27:59.100 -->
00:27:59.840So yeah.
00:27:59.900 -->
00:28:01.480Anyway, you can see like, I'm not sure.
00:28:01.480 -->
00:28:01.900It's a good name.
00:28:02.050 -->
00:28:03.700It's a very good name.
00:28:04.040 -->
00:28:05.080Forgot some of the companies.
00:28:05.280 -->
00:28:08.000There are probably ones you wouldn't have heard of, but yeah, they, they, they opened
00:28:08.100 -->
00:28:11.020this up for like a legal specialization and then like it broke loose.
00:28:11.420 -->
00:28:13.160I guess hurry up and copy those files.
00:28:13.920 -->
00:28:14.140Exactly.
00:28:14.960 -->
00:28:16.540Clone those things before they get banned.
00:28:17.340 -->
00:28:17.900Over to you.
00:28:18.720 -->
00:28:26.300Well, you just, your comment about Epstein files reminded me of an extra I saw recently,
00:28:27.560 -->
00:28:31.380that the Bash shell manual was part of the Epstein files.
00:28:31.860 -->
00:28:32.740I saw that.
00:28:33.150 -->
00:28:33.260What?
00:28:33.320 -->
00:28:34.180That's bizarre.
00:28:35.060 -->
00:28:35.300Anyway.
00:28:35.370 -->
00:28:36.160Yeah, it's so bizarre.
00:28:37.040 -->
00:28:37.920There's whatever.
00:28:38.300 -->
00:28:38.940There's a bunch of stuff.
00:28:39.500 -->
00:28:43.080My daughter was telling me some, I don't know if this is true or not.
00:28:43.160 -->
00:28:47.740this is way third hand through a teenager. but that like,
00:28:48.100 -->
00:28:52.240that Biden was like a clone or something. Oh, geez.
00:28:52.620 -->
00:28:57.620Anyway. Okay. back to, back to sort of reality. Um,
00:28:58.260 -->
00:29:00.980Rand's, Michael Lopp, wrote,
00:29:01.200 -->
00:29:04.920wrote under the name of Rand's for a while. has there's a couple,
00:29:05.040 -->
00:29:06.740I just want to point out a couple articles. I,
00:29:06.980 -->
00:29:10.600I found amusing recently or just helpful and interesting,
00:29:10.820 -->
00:29:15.460Rand's article, I Hate Fish, is not really about fish.
00:29:15.700 -->
00:29:21.660It's about productivity systems and also just sort of talking about productivity systems.
00:29:21.780 -->
00:29:27.660Because I know a lot of people kind of go down that rabbit hole of getting things done and whatever.
00:29:28.500 -->
00:29:31.700But there's an interesting discussion around email.
00:29:31.960 -->
00:29:35.420And I thought the email discussion was worth a peruse.
00:29:35.980 -->
00:29:37.540So good writing there.
00:29:38.140 -->
00:29:39.700He's also just a great author.
00:29:39.980 -->
00:29:40.120Cool.
00:29:40.140 -->
00:29:40.620I'll check it out.
00:29:40.900 -->
00:29:45.880And then also this one is expertise is the art of ignoring.
00:29:46.380 -->
00:29:47.500And this is very true.
00:29:47.850 -->
00:29:55.420This is from Kevin Renskers and who is apparently open for side work.
00:29:55.700 -->
00:30:02.820So, you know, so, but I'm not going to go through the whole thing near the end.
00:30:03.080 -->
00:30:04.640He had some final thoughts.
00:30:06.280 -->
00:30:06.680Let's see.
00:30:07.620 -->
00:30:08.540Oh, here, here they are.
00:30:08.570 -->
00:30:08.980Some lessons.
00:30:09.500 -->
00:30:14.660you don't need to master the language you need to master your slice which is very important and
00:30:14.800 -->
00:30:19.300that's that that actually used to be we used to talk about python being the language you could fit
00:30:19.380 -->
00:30:26.280in your head all at once and it kind of isn't now um so it's okay that you can't fit it all in there
00:30:26.500 -->
00:30:32.600if you don't really understand comprehensions yet don't worry about it um actually and even if it
00:30:33.120 -->
00:30:38.679you should but even if you could fit the whole language in your head pypi yeah pypi and even the
00:30:38.620 -->
00:30:45.720standard library though like i forget stuff that's in the standard library all the time so um and you
00:30:45.720 -->
00:30:51.440know you don't need to master your language master your slice and uh build things um and you'll you'll
00:30:51.680 -->
00:30:57.020provide value as you build things uh learn everything up front is wasted effort again um
00:30:57.740 -->
00:31:03.520knowledge decays fast um learn what the problem demands when it demands it i like to go a little
00:31:03.340 -->
00:31:08.340further obviously i'm kind of like you know how does that work and and uh explore a little bit
00:31:08.540 -->
00:31:13.880further but that's just that's my entertainment so and also expertise changes
00:31:14.600 -->
00:31:20.200what you pay attention to so um a senior developers don't necessarily know more facts
00:31:20.500 -->
00:31:25.520they're better at recognizing which details matter right now and which ones don't and that's
00:31:25.640 -->
00:31:32.320definitely true i think when i was all of my years as a a project lead um i think my main skill was
00:31:32.300 -->
00:31:37.320the ability to say yeah it's probably not actually going to happen so let's not work on that right now
00:31:37.760 -->
00:31:44.120um yeah so and why does that matter it's not just oh i probably should ignore that it that stops you
00:31:44.160 -->
00:31:48.820from going and i'm going to spend two weeks learning that framework or that angle or something
00:31:48.930 -->
00:31:53.580and then try and then decide i don't need it right that's a big deal yeah and actually context the
00:31:53.860 -->
00:32:00.999the context shift time is very real and context shift time for uh entire engineers is um is
00:32:01.060 -->
00:32:07.580destructive and so um the more time you can i'm talking to leaders here the more time you can um
00:32:08.100 -->
00:32:14.520save individual contributors from having to shift gears all the time um if you can keep them going
00:32:14.940 -->
00:32:20.000like you know hey i need you to start working on something new uh when are you done with the
00:32:20.120 -->
00:32:24.759current thing if it's like less than a day or a day or so let them finish uh you'll get more
00:32:24.760 -->
00:32:30.920productivity that way. So 100%. Okay. That's just, just a couple of nice articles. That's it.
00:32:31.300 -->
00:32:36.320Awesome. Well, you have set the stage perfectly with this context switching story, mental context
00:32:36.500 -->
00:32:40.240switching for the joke. And this one, I feel called out. I'm going to just tell people I feel
00:32:40.400 -->
00:32:46.260called out here. So I've entitled this joke, silence current side project. Oh yeah. Are you
00:32:46.340 -->
00:32:54.680ready? Yeah. Silence current side project. A new side project is talking. Oh, oh, it hurts. I mean,
00:32:55.140 -->
00:33:08.880How many people out here listening have like worked on a side project, got it 65% of the way done and like squirrel and they go off and do another thing to get 40% done, come back, get distracted, you know, just silence current side project and new side project is talking.
00:33:10.160 -->
00:33:10.420Yes.
00:33:10.880 -->
00:33:21.360Well, my existing current book that I'm writing that I need to get back to that I'd rather spend on my time on a new SaaS project right now.
00:33:22.500 -->
00:33:25.420Even my new projects get subverted by my other new projects.
00:33:25.560 -->
00:33:26.600I'm like, stop, please.
00:33:26.760 -->
00:33:27.580This cannot go on.
00:33:27.900 -->
00:33:38.180That's why I'm so thrilled about getting the command book app out because it literally went from like zero to documentation published for sale without me not being able to focus.
00:33:38.520 -->
00:33:39.220So it's a good deal.
00:33:39.380 -->
00:33:39.820Nice.
00:33:40.400 -->
00:33:40.520Yeah.
00:33:40.820 -->
00:33:44.440But in the shadow of that experience, there are many things that are still pending.
00:33:45.140 -->
00:33:45.820And awesome.
00:33:46.130 -->
00:33:50.320Well, once again, lovely to talk to you about Python and catch up.
00:33:50.500 -->
00:33:53.600Thanks everybody for sending in ideas and keep them coming.
00:33:54.060 -->
00:33:54.780And yeah,
00:33:54.890 -->
00:33:55.900we'll talk to you all next week.
00:33:56.200 -->
00:33:56.480Bye everyone.