WEBVTT
00:00:00.100 -->
00:00:05.040Hello, and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:00:05.550 -->
00:00:10.360This is episode 487, recorded Tuesday, July 8th, 2026.
00:00:10.940 -->
00:00:11.960I'm Calvin Hendryx-Parker.
00:00:12.260 -->
00:00:12.960I'm Michael Kennedy.
00:00:13.380 -->
00:00:15.080Nice to have you, Michael. Thanks for joining me today.
00:00:15.720 -->
00:00:20.520We are sponsored by us, so check out the Talk Python courses.
00:00:21.020 -->
00:00:29.180Your co-host, Michael, here put a tremendous amount of effort into making sure every last human being on the planet can learn Python like nobody's business.
00:00:29.460 -->
00:00:30.700So excited to have that.
00:00:30.970 -->
00:00:32.160And then check out Six Feet Up.
00:00:32.940 -->
00:00:34.880I am a co-founder of Six Feet Up.
00:00:35.180 -->
00:00:36.260We love solving hard problems.
00:00:36.580 -->
00:00:36.940We're hiring.
00:00:37.340 -->
00:00:40.360So if you're looking for a position, go check out our careers page.
00:00:40.600 -->
00:00:43.320Put that little plug in there and make sure you connect with the hosts online.
00:00:43.510 -->
00:00:44.700We are on all the socials.
00:00:44.700 -->
00:00:49.920You can find Michael, myself and the show over on Mastodon, Bluesky, X, Den.
00:00:50.680 -->
00:00:51.620I'm mostly active on LinkedIn.
00:00:52.260 -->
00:00:53.680Michael, where are you mostly active at?
00:00:53.900 -->
00:00:54.460Well, talk to me.
00:00:54.940 -->
00:00:56.020Otherwise, I'm not that active.
00:00:56.520 -->
00:00:59.420So we'll go at Michael and tell them something interesting.
00:00:59.900 -->
00:01:01.320And then Yeah, there you go.
00:01:01.320 -->
00:01:02.820Send in a show idea.
00:01:02.820 -->
00:01:03.420Send in a show idea.
00:01:03.420 -->
00:01:04.339That's a great idea.
00:01:04.339 -->
00:01:07.380So if you want to join us live on YouTube, we do record this live.
00:01:07.380 -->
00:01:12.060You can watch it all of its liveness at pythonbytes.fm/live.
00:01:12.060 -->
00:01:16.580Be part of the audience, usually Tuesday mornings, but today is Tuesday afternoons.
00:01:16.580 -->
00:01:20.140The older video versions are also available on that YouTube channel too.
00:01:20.140 -->
00:01:29.700And finally, if you want a handcrafted, artisanal digest of every week's show, and get all the notes, make sure you add your name, and your email to our friends of the show list.
00:01:30.200 -->
00:01:36.440And we never share those emails, but you will get a great list of links and things to go dive into right into your inbox.
00:01:37.140 -->
00:01:38.380All right, Michael, let's kick it off.
00:01:39.240 -->
00:01:43.460I love shell scripts and the little utilities and it seems like you got a good one for us.
00:01:43.620 -->
00:01:47.720I know you're a fan of the shell world.
00:01:47.880 -->
00:01:51.700And let me introduce this topic by way of a sad face.
00:01:52.120 -->
00:02:02.260I use Sentry for all the server stuff and I get a notification from Sentry saying, operational failure for, I don't know, what are the smaller apps that I run, API or something?
00:02:02.960 -->
00:02:07.000And it says that slash temp is full and it can't write to it.
00:02:07.020 -->
00:02:10.679I'm like, well, that doesn't make any sense because that's just like the Docker image.
00:02:11.020 -->
00:02:19.860So it can just write to like this 150 gig hard drive that I have dedicated to just Docker volumes and Docker build data, like image data and stuff.
00:02:19.860 -->
00:02:21.160But something else has gone awry.
00:02:21.480 -->
00:02:22.720Oh, no, no, it was right.
00:02:22.960 -->
00:02:26.880So I go in there and I'm like, I pull up BTOP, which I love Btop.
00:02:27.020 -->
00:02:29.480And it says, oh my God, it's so good.
00:02:29.550 -->
00:02:32.180And it's 100% full, all red, no green.
00:02:32.190 -->
00:02:33.640I'm like, oh God, it's right.
00:02:33.720 -->
00:02:35.260What is going on here?
00:02:36.300 -->
00:02:41.140I've been playing with switching to multi-step, multi-image, multi-stage builds with Docker.
00:02:41.400 -->
00:02:46.480And apparently those builds take up a much more image space if you don't clean up the old ones for some reason.
00:02:46.590 -->
00:02:49.240I don't know why, I don't really care, but I do care that it was out of space.
00:02:49.350 -->
00:02:50.560And I'm like, what is going on?
00:02:50.570 -->
00:02:51.280What can I get rid of?
00:02:51.470 -->
00:02:54.980So I typically run like a Docker system prune type thing and it's okay.
00:02:55.260 -->
00:02:57.180but I'm like, well, let me just give this a look.
00:02:57.380 -->
00:03:02.220And if you want to ask for file size on a Linux terminal, it's not the easiest.
00:03:02.740 -->
00:03:03.900I mean, you can do it in DU.
00:03:04.040 -->
00:03:06.200You can't say DU, but you get it in bytes.
00:03:06.440 -->
00:03:07.700And you're like, what are these huge numbers?
00:03:07.960 -->
00:03:09.520They're like, they don't make any sense to me.
00:03:09.520 -->
00:03:11.900I actually went at recursive for the folders.
00:03:12.220 -->
00:03:17.420And wouldn't it be great if it said this GB, and I know there are flags you can pass at DU if you remember the incantation.
00:03:17.840 -->
00:03:19.740Wouldn't it be nice if there was a better way?
00:03:19.920 -->
00:03:21.800So I want to introduce you to Dust.
00:03:22.300 -->
00:03:24.820So it's a more intuitive version of DU.
00:03:25.200 -->
00:03:38.280built in Rust. The Rust part doesn't really matter. What does matter is both that it gives you sizes in human terms and it gives you a graph. Graph. That's even better. Yeah. And I like the tree
00:03:38.480 -->
00:03:44.300structure too, that you get to see that the tree, I use like BR root or B root for seeing like tree
00:03:44.480 -->
00:03:55.440structures, but now this may do all of it. Yeah, exactly. So you can ask, it's kind of like tree and it's kind of like du but it gives you the disk size information in the tree view and on the right
00:03:55.520 -->
00:04:05.420hand side there's actually a visual graph that like plots them and it sorts it by size so you can see the bigger ones are at the bottom i think you can invert that if i remember that's how i had
00:04:05.460 -->
00:04:16.679run it and so you can actually just say show me the big stuff first in a hierarchical way so like what folder is like the word where do i start to make this thing run again and not happen uh not do
00:04:16.700 -->
00:04:27.000this again where it runs out of space. So I started playing around with this thing and I thought this is pretty dope, man. I really like it. You can just curl install it, cargo install it, brew install it.
00:04:28.360 -->
00:04:39.300If I was doing it on Mac, I would brew install it. But I think I cargo installed it on Linux. I can't really remember. Anyway, it got installed onto Linux somehow. And there it is. So yeah, it's really
00:04:39.500 -->
00:04:44.160nice. I think, I mean, not a whole lot more to say. There's tons of options for how you run it.
00:04:44.420 -->
00:04:46.040actually lists a whole bunch of alternatives.
00:04:46.220 -->
00:04:51.280This is kind of a nice shout out to like, hey, there's like six other tools that do this, but here's why I wrote this still.
00:04:51.530 -->
00:04:52.060You know what I mean?
00:04:52.400 -->
00:04:52.520Yeah.
00:04:52.800 -->
00:05:00.980Dust simply does the right thing when it handles lots of small files and directory, keeps the output simple by only showing larger entities and so on and so on.
00:05:01.260 -->
00:05:01.440Anyway.
00:05:01.860 -->
00:05:02.180That's cool.
00:05:02.979 -->
00:05:07.400I think it shows that if there's an itch to scratch someplace, someone's going to scratch it.
00:05:07.620 -->
00:05:10.560If you've got a better idea for an implementation of a tool, you should go do it.
00:05:10.860 -->
00:05:13.160Dust one looks really awesome and I'll be installing it momentarily.
00:05:13.980 -->
00:05:14.140Sweet.
00:05:14.240 -->
00:05:27.740Pete. Yeah, I really like it. So I can recommend and it's I mean, I was able to just do like a Docker cleanup real quick and fix stuff. But I still like where is all the space because that's bigger than before. So let me just like I have plans and this has helped me form a plan.
00:05:28.100 -->
00:05:39.140Nice. I love the plans. Speaking of plans, the next item I'm going to present to you is actually more of a specification and it's a proposal for a specification as opposed to something you can use
00:05:39.280 -->
00:05:50.000today. But I really want this to exist. So I felt like I needed to highlight the fact that the fine except Astral, once we got absorbed into a nice frontier model company, are still doing interesting work.
00:05:50.300 -->
00:05:55.520And this one is building a way better archive format for Python packaging called WAR.
00:05:55.920 -->
00:05:59.840Now, Michael, I know you're going to say, I've heard of the WAR format before.
00:06:00.300 -->
00:06:00.660And it's true.
00:06:01.100 -->
00:06:01.820I don't know.
00:06:01.900 -->
00:06:03.520I've only heard of the RAR format.
00:06:03.840 -->
00:06:04.120Really?
00:06:04.300 -->
00:06:05.280I don't know if I've heard of WAR.
00:06:05.660 -->
00:06:08.200I mean, I know what WAR is, but not as a compression format.
00:06:08.580 -->
00:06:11.400This has nothing to do with the WAR format from the Java world.
00:06:11.720 -->
00:06:16.440The Java had a web archive that you could basically deploy serverless into like a Tomcat server.
00:06:16.940 -->
00:06:19.740You throw a war file into a directory and poof, you've duplication.
00:06:20.060 -->
00:06:24.640This is also packaging for Python applications, but it's going to be optimized.
00:06:25.060 -->
00:06:28.760And given it's Astral doing the work, they're optimizing around speed.
00:06:29.100 -->
00:06:37.020Speed, ease of use, reliability, resilience to failure is the goals for this specific format.
00:06:37.400 -->
00:06:38.460So it's a new archive format.
00:06:39.320 -->
00:06:49.880basically their goal is to be faster than zip or tar from the standard Python library so that you can actually make speed still be the main feature when deploying software.
00:06:50.300 -->
00:06:57.980And it has support for three kinds of entities like files, directories, and links, three kinds of compression modes, store, deflate.
00:06:58.280 -->
00:07:07.080And if you've ever used ZStandard or ZSTD, you know that it can compress tremendously faster and more than standard GZip.
00:07:07.280 -->
00:07:19.660So it's also atomic, which I think I'm hoping this comes to fruition because how many times have you ever unzipped a file for it to crash halfway through and you're left with a directory full of some of the stuff, not all the stuff.
00:07:19.710 -->
00:07:20.740You don't know how much of the stuff.
00:07:21.340 -->
00:07:24.200That's one of their goals is actually to make the unpacking atomic.
00:07:24.440 -->
00:07:24.920It fails.
00:07:25.070 -->
00:07:26.100You end up with the directory of nothing.
00:07:26.720 -->
00:07:28.080If it works, you get everything.
00:07:28.380 -->
00:07:31.700My favorite part of that scenario is if you're placing something when you're unzipping it,
00:07:32.240 -->
00:07:32.920then it fails.
00:07:33.120 -->
00:07:34.180You're like, oh, no.
00:07:34.900 -->
00:07:35.340Right, right, right.
00:07:35.720 -->
00:07:39.500So yeah, it gets back into the kind of the unambiguity.
00:07:40.220 -->
00:07:43.320Unlike TAR, there should only be one way to express a given concept in the war.
00:07:43.940 -->
00:07:49.540Because with TAR files, you can have bzips and gzips and non-compressed.
00:07:49.860 -->
00:07:54.720So there's really just one extension and one command, and it should be intuitive to use.
00:07:55.420 -->
00:08:07.580It's not optimized for maximal compression, but for speed and indexability, and then also this like per member compression support. So the idea is you could actually have,
00:08:07.820 -->
00:08:19.440if this is meant for more streaming operation, so be very compatible with sending out zip distributions or war distributions to say your edge servers. You want that to be fast,
00:08:19.900 -->
00:08:34.680efficient, only copy the bits it needs so it can understand what parts it has and what parts it doesn't and copy them a lot faster. So I'm excited for this proposal to move forward. There's a link here to the GitHub spec. There's a couple friendly faces who are the current authors of said spec
00:08:35.020 -->
00:08:38.180over here. So I think that this is very, very promising.
00:08:38.780 -->
00:08:42.860And like other things from Astral, I anticipate it'll be well executed.
00:08:43.080 -->
00:08:54.600Looks very cool. Yeah, I had Charlie March on a few weeks ago to talk about Astral moving into OpenAI and what does it mean for uv and different things. Well, now they're not focusing on pyx. They can focus on this. Exactly.
00:08:54.960 -->
00:09:01.880Yeah. So I think it's pretty interesting that lots of new stuff And not just releases, but new initiatives are coming out.
00:09:02.020 -->
00:09:02.240That's cool.
00:09:02.580 -->
00:09:03.380Yeah, no, definitely.
00:09:03.820 -->
00:09:07.420Yeah, so Short Suite doesn't exist yet, but keep your eye on this space.
00:09:08.320 -->
00:09:10.940I assume it'll be open source and so people can contribute.
00:09:11.300 -->
00:09:12.620I would definitely think so.
00:09:12.880 -->
00:09:13.160Yeah.
00:09:13.380 -->
00:09:16.060So let's talk about a fun topic.
00:09:16.540 -->
00:09:17.320I'm excited about this one.
00:09:17.660 -->
00:09:17.860Yes.
00:09:18.380 -->
00:09:19.220I don't even know.
00:09:19.560 -->
00:09:24.920I don't even have the words to talk about this right because it's so overloaded, this term agent and agentic.
00:09:25.320 -->
00:09:28.800So if I'm using co-work, it's agentic.
00:09:28.960 -->
00:09:32.860But also if I'm using something that just uses tools and takes multiple steps, it's agentic.
00:09:33.080 -->
00:09:38.120If I have like a gas town full of people running around, burning, but my credit's doing weird like stuff.
00:09:38.680 -->
00:09:39.840That's like, you know what I mean?
00:09:39.920 -->
00:09:42.680Like it's just, there's so much non-clarity.
00:09:43.060 -->
00:09:45.340And with that, I introduced to you Hermes agent.
00:09:45.900 -->
00:09:46.320Another one.
00:09:47.019 -->
00:09:47.800There's another one.
00:09:48.180 -->
00:09:53.780And this one follows in the open claw realm, but it's a little bit of a research project.
00:09:53.880 -->
00:09:54.820And I think it's interesting.
00:09:54.860 -->
00:10:00.920So Hugo Bound Anderson actually introduced me to this, although I mean, it's lots of people know about it.
00:10:00.940 -->
00:10:03.440I've talked about it that I've heard more than I kind of think back. Right.
00:10:03.640 -->
00:10:08.260So the idea is it's kind of like OpenClaw in that it's something that continuously runs.
00:10:08.450 -->
00:10:11.840And it's by NOS Research, Open Source, MIT, et cetera.
00:10:12.220 -->
00:10:13.940And it's written in Python, which is very interesting.
00:10:14.180 -->
00:10:16.960If I go over here to the GitHub, this thing is madness.
00:10:17.160 -->
00:10:19.980I've been I made a fork of it because I had to customize something.
00:10:20.420 -->
00:10:25.500And it is like every day or two days, I'll be like, oh, I should sync up the fork because I think it's changing fast.
00:10:26.340 -->
00:10:27.060350 commits.
00:10:27.170 -->
00:10:29.500I'm like, oh, man, that was like yesterday I synced it.
00:10:31.360 -->
00:10:32.720211,000 GitHub starters.
00:10:32.960 -->
00:10:35.040People are using this thing, it seems like.
00:10:35.220 -->
00:10:35.800So here's the idea.
00:10:35.960 -->
00:10:43.240It's like OpenClaw in that, let's say it's not like ChatGPT or even, let's say, Cowork.
00:10:43.580 -->
00:10:47.200So Anthropics Cowork is really cool because what you can do is give it tasks.
00:10:47.460 -->
00:10:51.720It can use tools like I've taught Claude how to use my Notion.
00:10:51.990 -->
00:10:57.440So I can say, hey, Claude, I want you to do this analysis and then save it in this Notion page or something.
00:10:57.550 -->
00:10:58.940And it'll just do it, which is cool.
00:10:59.260 -->
00:11:05.000But what it doesn't really seem to do is it doesn't cross coordinate and know about the different actions.
00:11:05.550 -->
00:11:10.020Like you have a project that it could do one thing, but another project doesn't know about that other project.
00:11:10.560 -->
00:11:16.120And so this Hermes thing like learns a ton and it's like self-improving, self-programming.
00:11:16.160 -->
00:11:25.520So it keeps a memory of you, which I know other ones do, but you can ask it to, hey, generate some skills for me and just save them and make them available any other time that I might ask about skills.
00:11:26.020 -->
00:11:28.600Oh, and could you reprogram yourself a little bit?
00:11:28.650 -->
00:11:29.560Cause this isn't working right.
00:11:29.660 -->
00:11:29.900Yeah, sure.
00:11:30.020 -->
00:11:30.320No problem.
00:11:30.440 -->
00:11:32.160I'll change my internals.
00:11:32.320 -->
00:11:35.260You just got to restart me real quick if you don't mind, cause I can't do that to myself.
00:11:36.480 -->
00:11:43.240So there's, it's just really got a lot of neat connectors and this sort of self-improving thing is super cool.
00:11:43.640 -->
00:11:48.340so calvin let me give you an example of just one of the things and i'll give you two examples but
00:11:48.340 -->
00:11:54.760i will demonstrate one oh live demo nothing like a live demo on a new show so i have my notice my
00:11:54.770 -->
00:12:06.140apple watch notice it's the it's just the face it's not and i haven't done anything to it watch this tell hermes what's the text send calvin hendrix parker an email using my talk python
00:12:06.460 -->
00:12:17.220account and i want the title to be hello from the live show and the body to be check this out man done there you go so i didn't even touch my watch i just told it to do that and it's using a bunch
00:12:17.280 -->
00:12:31.880of different skills to figure out how to send email to like which account should it use it's uh composing the email and it's going to send it to you in a little bit and you could connect all sorts of llm backends like that's right now using chat gpt 55 but you could do local models you could
00:12:31.880 -->
00:12:45.360use claude you could do glm whatever whatever you want to connect to it and multiple ones you can switch them around. So that's pretty cool. And while I'm waiting on that, the other thing that I did is like, this will give you a sense of the self-programmability. So I was sitting on the
00:12:45.470 -->
00:12:57.860couch and my daughter just got her a little dirt bike thing. And she's like, we somehow ran across this private motocross track that had like a kid, kid track side of it. That was really perfect for
00:12:57.960 -->
00:13:11.000like some off-road riding. She's like, can we really go to that? The problem is it only opens twice a month for a few hours, like four hours at a time. And the times vary. And the only way you know is if you go on their Facebook page, and I'm not really on Facebook. I'm like, how am I going
00:13:11.000 -->
00:13:24.100to like even keep track of this? So I sat on the couch with my iPad, pasted the URL for the page, and then I just spoke to it. I said, Hey, here's the problem. I'd like you to create a skill so that you can go do this and then create an automated job. And by the time five minutes later,
00:13:24.480 -->
00:13:35.780it had built a skill, written some like browser use code and had set up a cron job. So like three days a week it will automatically do that and it'll send me an email if and only if new times appear
00:13:36.220 -->
00:13:41.100in facebook just talking to it i didn't touch it i didn't program it it used codex internally to
00:13:41.220 -->
00:13:46.500write that for itself yeah so on hermes what's their security stance seemed like the open clock
00:13:46.740 -->
00:13:58.759crowd was a little yolo uh let's go for it it's a little bit stronger i don't it's still it's still a weird world so the way i do it as i just have it running in docker on my mac mini that's my work
00:13:58.780 -->
00:14:08.900Mac mini, but it's just always on as my database server anyway. So it's just running in a Docker container. Yeah. And it uses like, I don't know, 600 megs of RAM, not terribly, terribly much.
00:14:09.100 -->
00:14:13.680Did you get an email? Let me see my email. Other cool things that it does is it like
00:14:14.080 -->
00:14:17.040integrates with discord. So one of the main ways I talk to it is just through discord.
00:14:17.580 -->
00:14:32.360And you can have a text conversation. Every new chat session becomes its own thread that then you can carry on. And I taught it how to like, if I tell it to join the voice channel, it'll join the voice channel of discord and it'll just have a conversation like you and I, but it'll keep a
00:14:32.500 -->
00:14:42.800transcript somewhere else. If I need to go see it. I'm still waiting for the email to work its way through the inner tubes. Oh man. Anyway, I'll give you a real time update later in the show. I'm sure.
00:14:43.140 -->
00:14:52.580Yeah. Yeah. We'll see. Anyway. So is there also a store, like an open store or marketplace of add-ons or is this you build your own, which I think is probably a better idea for most people.
00:14:52.980 -->
00:15:07.620It has add-ons and it has skills, but the main thing that you want to have the add-ons are the connectors. Yeah. Like how does it, so it'll do like daily briefings and save them to Notion in a database and so on. You know what I just checked? The problem is it, it wanted to
00:15:07.700 -->
00:15:20.300run some script and ask for, do you want to allow yes or no? I said always, but you know, it's a pretty new setup. So the first time anyway, eventually you'll get an email now, I'm pretty sure, but I think it's cool. I've been playing a lot with it and, yeah,
00:15:20.360 -->
00:15:28.760there goes my free time. Why did I play with this? No, it's, it's super fun to dream about what you might do with it. That is super cool. Well, Michael, I have another agent for you that's in
00:15:28.760 -->
00:15:33.160a very different vein. Like you said, there's all kinds of different agents available out there.
00:15:33.520 -->
00:15:43.780This one is by our friend Simon Willison. If you know Simon from the Django project and the data set work he's been doing and all the kind of advocacy and work he's been doing around AI and
00:15:43.960 -->
00:15:58.680LLMs. If you aren't familiar, he wrote a command line utility, again, another great command line utility called LLM. Hard to search for because of the name that he used for it. But if you just search for Simon and LLM, you'll find his normal command line LLM, which lets you just ask an LLM
00:15:58.680 -->
00:16:13.500a question from the command line, get a response back. He's been growing that with tons of plugins and add-ons. So for example, I've got an LLM add-on called CMD that I use regularly, where you do LLM CMD, and you type like what you want to do. Find me all the Python files that are one level deep in
00:16:13.520 -->
00:16:23.940my directory. You hit return, and it'll come back to a prompt ready for you to hit return with the command does exactly what you want. So basically, it's kind of a shell extension to autocomplete
00:16:23.940 -->
00:16:34.620with an LLM hard to remember commands like DU flag options, for example. Well, he's taken this to the next level. He has built a plugin for LLM that is still very alpha. This is very, very early days.
00:16:34.750 -->
00:16:45.560This only came out a couple days ago called the LLM coding agent. And so now you can install the coding agent and you can do LLM code and you can give it a flag like --YOLO and have it
00:16:45.500 -->
00:16:58.660build with tools. So he basically, using Fable, he had Fable write this plugin to basically turn LLM into a Claude Code-like experience. And it works with local models. So I installed the LLM
00:16:59.000 -->
00:17:13.980Ollama plugin, or the Ollama CPP plugin, and I used a QIN 3.5 MLX accelerated model on my MacBook Pro here. And I wrote some CLI calendar tools really quickly with the, just from the
00:17:13.800 -->
00:17:22.980command line very very lightweight you know very very low barrier to entry it'll be interesting to see where this goes because i like the lightweight nature of the llm tool itself i don't do you use
00:17:22.980 -->
00:17:29.680the llm tool at all from simon yeah no i should i i haven't yet though it looks really cool when
00:17:29.740 -->
00:17:44.360you're just sitting at your terminal and you need a quick answer or something like you can put it on like the gpt you know mini uh or haiku for really quick like quick super quick responses or you can pass it, just keep everything local. Like this fully runs locally on my own machine when I'm
00:17:44.450 -->
00:17:47.860playing with it. So if you want to play with it, you need to, it's shipped as an alpha currently.
00:17:48.250 -->
00:17:57.240So you can uvx if you want to test it out with pre-release allow flag and then install it into your LLM and run the code keyword. And it'll just give you a prompt, just like a plot code.
00:17:57.510 -->
00:18:10.860And now it has access to tools to read, write files, investigate. And so it'll build up a picture of the files that are in that directory and act like a coding agent. Here's a demo where We did it with GPT-55 to build a SwiftUI CLI clock.
00:18:11.640 -->
00:18:13.540And the demo is at the bottom of that page.
00:18:13.760 -->
00:18:15.180There's a GitHub repo because it's all open source.
00:18:15.620 -->
00:18:18.960But you can see here the prompts he used to actually write this plugin.
00:18:19.700 -->
00:18:21.880Two prompts, write the spec, implement the spec.
00:18:22.620 -->
00:18:23.360So that's pretty cool.
00:18:23.500 -->
00:18:25.500I'm excited for more to come.
00:18:25.600 -->
00:18:26.600I always love Simon's tools.
00:18:26.660 -->
00:18:29.940If you're not following Simon's blog, you should definitely go out there and follow Simon online.
00:18:30.240 -->
00:18:30.800So that's what I got.
00:18:30.800 -->
00:18:32.140I think Simon's doing really good work.
00:18:32.320 -->
00:18:32.740He is.
00:18:33.020 -->
00:18:41.520I think his writing, he's got a mini thing that's online for, like coding for engineers to code type of stuff. Yeah. And that's really good.
00:18:41.940 -->
00:18:45.840A lot of neat stuff. And man, he is just on so many interesting places.
00:18:46.320 -->
00:18:49.820He was on Python a while ago to talk about something with Django.
00:18:50.160 -->
00:18:57.220Maybe it was his birthday, the birthday, like a big milestone birthday or something like that. I was like, yeah, it was just on CNBC. I got a, sorry, I was late. I'm like, you know what?
00:18:57.440 -->
00:18:59.220You're living in a different world than most of the developers.
00:18:59.440 -->
00:19:00.600Like congratulations, man.
00:19:00.820 -->
00:19:02.440Yeah. But I like his pragmatic style.
00:19:02.620 -->
00:19:06.140He writes about it very realistically about what they're capable of, what they're not capable of.
00:19:06.380 -->
00:19:12.360And so if it took him this long to get around to writing a plugin for an agent, a coding agent for LLM, it must be about time.
00:19:12.640 -->
00:19:14.920So I feel like that's the timeline I like to follow.
00:19:15.360 -->
00:19:17.460All right, Michael, you got an extra for me?
00:19:17.760 -->
00:19:21.800I got some extras, but I also have a real-time follow-up real quick here.
00:19:22.140 -->
00:19:22.940So you mentioned Fable.
00:19:23.380 -->
00:19:25.240Fable is open to the public.
00:19:25.820 -->
00:19:31.100It was back, but it was back until July 7th, which is today, the time of the recording.
00:19:31.390 -->
00:19:33.340And then it was supposed to go into API only.
00:19:33.840 -->
00:19:39.200And then I just heard that it's supposed to be back permanently for the max max subscribers.
00:19:39.840 -->
00:19:42.840And for everyone, it's now available for one more week.
00:19:43.300 -->
00:19:47.800So if you're like, I was going to build something with it, but I didn't get it done.
00:19:48.210 -->
00:19:48.920And now it went away.
00:19:49.300 -->
00:19:50.180It's back for one more week.
00:19:50.210 -->
00:19:50.960So we'll build that thing.
00:19:51.200 -->
00:19:51.400All right.
00:19:51.680 -->
00:19:58.000So last week I talked about PLS and I wrote a blog post like what the PLS, man, come on.
00:19:58.260 -->
00:20:02.500Because I was a little frustrated, not like a super frustrated, just like some people, we'd recommend it.
00:20:02.640 -->
00:20:06.340We both, on all of our tools episode, we recommend, we're like, oh, that's so cool.
00:20:06.520 -->
00:20:08.720And people are like, yeah, but, what do you mean, but?
00:20:08.740 -->
00:20:13.660Like, yeah, but you can't really install the, you follow the instructions and it doesn't quite give it to you, right?
00:20:13.780 -->
00:20:14.840There's like a bunch of sus stuff.
00:20:14.900 -->
00:20:19.960And so I wrote this blog post called What the PLS, which said like, look, it's not really doing what you want.
00:20:19.980 -->
00:20:23.120So please don't, please don't UVPIP install it instead.
00:20:23.420 -->
00:20:24.220What you should do is this.
00:20:24.660 -->
00:20:25.440Well, well, well.
00:20:26.000 -->
00:20:28.640If you look at the top, there's an update from not too long ago.
00:20:29.040 -->
00:20:41.420And it says, Dhruv Banushali, saw this post and decided to take, he's the maintainer, decided to take some action so that you can no longer be like freaked out about like what the heck is going on.
00:20:41.800 -->
00:20:45.000So now if you go over to the GitHub issue, which notice it is closed,
00:20:45.380 -->
00:20:48.760and let me hover and get a name, Christian Letterman.
00:20:49.080 -->
00:20:50.120Yeah, yeah, I know Christian.
00:20:50.860 -->
00:20:51.580I do, very cool.
00:20:51.960 -->
00:21:01.480And said, hey, posted, hey, by the way, also tag, so actually Drew said also tag in Mike C. Kennedy because he might be interested after seeing it.
00:21:04.580 -->
00:21:08.340and said, hey, guys, look, I'm sorry, but now look.
00:21:08.760 -->
00:21:09.680You got sub-commented.
00:21:10.040 -->
00:21:10.400I did.
00:21:11.180 -->
00:21:11.460I did.
00:21:11.700 -->
00:21:14.260So if you go over, you know, I said, hey, thanks so much.
00:21:14.600 -->
00:21:26.380And actually changed it such that even if you go over here, just the latest release, so UVPIP install PLS, now we'll install this one, which is the Rust version.
00:21:27.040 -->
00:21:28.040So you're kind of back to good.
00:21:28.540 -->
00:21:31.080There's some other sort of funkiness around this.
00:21:31.940 -->
00:21:36.660readme on PyPI, but it says that'll be fixed when 7.0 comes out. And 7.0 is like almost out, but not out.
00:21:37.520 -->
00:21:38.280But look at this.
00:21:39.720 -->
00:21:42.060I love how developers sweat the small stuff sometimes.
00:21:43.760 -->
00:21:45.760There's like layers of sweating the small stuff.
00:21:45.860 -->
00:21:55.640And I would like to just point out that Christian did the right thing and posted a thing and said, hey, dear project and maintainer of this project, it's just really kind of janky.
00:21:55.640 -->
00:21:57.380Do you think you could maybe fix this?
00:21:57.620 -->
00:21:58.960So it's not so confusing?
00:21:59.460 -->
00:22:04.460Whereas I just wrote like a, not a hate post, but like a sort of frustrated, like, ah, don't do this.
00:22:04.620 -->
00:22:06.460This is kind of not great, but just world.
00:22:06.940 -->
00:22:12.340The only reason I did that and didn't create one of these is I was sure that they were just uninterested in fixing this.
00:22:12.540 -->
00:22:16.320Because surely it would have been fixed by now if they'd known and wanted to, you know what I mean?
00:22:16.820 -->
00:22:17.620But no, I was wrong.
00:22:17.740 -->
00:22:20.940So I should have followed Christian's lead and just posted this first.
00:22:21.240 -->
00:22:22.240Christian, you're doing the right thing.
00:22:22.540 -->
00:22:22.840Exactly.
00:22:23.260 -->
00:22:23.500Well done.
00:22:23.520 -->
00:22:23.900That's cool.
00:22:24.120 -->
00:22:24.360Very cool.
00:22:24.680 -->
00:22:27.980Well, speaking of developers doing the right thing, I've got a couple extras here.
00:22:28.420 -->
00:22:32.840If you are a developer that gives presentations at conferences, you should check out SlideEv.
00:22:33.120 -->
00:22:46.920I was at a conference two weeks ago, the AWS Midwest Community Day, and I, for the last six years, have been using Reveal.js via Pandoc and some cookie cutter markdown glue
00:22:47.140 -->
00:22:49.640that I put together to basically build my presentations with.
00:22:49.720 -->
00:22:53.620I love Deerly because I handcrafted it, but I wasn't actually that in love with it.
00:22:53.640 -->
00:22:54.600And I'm going to move to this.
00:22:55.340 -->
00:23:00.500I found out this via Corey Quinn of the AWS Screaming in the Cloud fame.
00:23:00.860 -->
00:23:02.740He uses this to give his talks.
00:23:02.850 -->
00:23:03.780And I saw his talk on stage.
00:23:03.950 -->
00:23:05.820I was like asking him afterwards what he was using.
00:23:06.240 -->
00:23:06.880And it's slide dev.
00:23:06.990 -->
00:23:07.820So it's all Markdown.
00:23:08.160 -->
00:23:12.120I like the way the Markdown comes out a lot cleaner with slide dev than what I was doing.
00:23:12.230 -->
00:23:16.620I could do similar things, but it got a little messy and just didn't have the spirit of true Markdown.
00:23:17.000 -->
00:23:21.680But here you've got the ability to turn Markdown like this into slides like this.
00:23:22.440 -->
00:23:24.060So I would check it out if you give presentations.
00:23:24.840 -->
00:23:27.160It's got a ton of features, ton, ton, ton.
00:23:27.280 -->
00:23:28.800I'll click over on the features page real quick.
00:23:29.010 -->
00:23:31.960I mean, just remote presentations.
00:23:32.930 -->
00:23:35.000You can package it up as a PDF immediately.
00:23:35.310 -->
00:23:38.280You can put it into a CI pipeline and have a rendered version of it.
00:23:38.360 -->
00:23:39.340It's kind of fully baked.
00:23:39.650 -->
00:23:41.680You can have fully inline code that run.
00:23:42.020 -->
00:23:47.540So if you want to give demos during your talk, you can do that inline in your slides without leaving the deck itself.
00:23:48.160 -->
00:23:49.560Yeah, that's pretty cool.
00:23:49.870 -->
00:23:57.720And I found out it was using, I believe it's using MDX, which are markdown live components inside of the tool itself.
00:23:58.240 -->
00:23:58.880So pretty cool.
00:23:59.020 -->
00:23:59.680I'm going to be checking it out.
00:23:59.780 -->
00:24:04.600The next time you see me give a talk on the stage, it will most likely be using SlideDiv for it.
00:24:04.760 -->
00:24:04.860Excellent.
00:24:05.260 -->
00:24:05.380Yeah.
00:24:05.400 -->
00:24:05.780I love it.
00:24:06.200 -->
00:24:07.820The last one here, I got two more.
00:24:08.740 -->
00:24:19.440This one, I have not tried this yet, but if you want to reduce your token usage on Claude for use with Fable, for example, someone wrote a tool called PXPipe for PixelPipe.
00:24:19.540 -->
00:24:26.620It takes your text and encodes it into an image because Anthropic treats images differently token-wise than it does the text.
00:24:26.920 -->
00:24:34.760They claim up to a 70% token reduction because of the handling of images versus the text itself.
00:24:35.200 -->
00:24:36.840If y'all could see the screen here.
00:24:37.020 -->
00:24:37.920Yeah, that is.
00:24:38.320 -->
00:24:39.180It's not just text.
00:24:39.380 -->
00:24:40.660It's really small text.
00:24:40.880 -->
00:24:41.640It's really black.
00:24:42.100 -->
00:24:42.320Yeah, yeah.
00:24:42.400 -->
00:24:45.700It looks like a gray wall, but that's actually like the text of the prompt.
00:24:46.040 -->
00:24:47.340Now, there are downsides.
00:24:47.560 -->
00:24:47.920Be careful.
00:24:48.760 -->
00:24:49.380The honest part.
00:24:49.720 -->
00:24:52.060It is lossy.
00:24:53.060 -->
00:25:08.020yeah so it's lossy i wouldn't use it for real work it's workload dependent your mileage may vary uh so just thought it was interesting i'd share it with the crowd because some people might be interested in in just token maxing and on the other direction how many tokens can i save uh which i
00:25:08.020 -->
00:25:19.880thought was interesting yeah it's the anti-top i am not a fan of token maxing no i'm not either i want to conserve the tokens not just conserve i think there is an art and a skill to say what is
00:25:19.840 -->
00:25:30.140the least this thing needs to know so it can focus the most on it not like what is the maximum i can jam into its memory and still get it to accomplish something you know what i mean so yeah yeah
00:25:30.340 -->
00:25:35.940exactly so really quick before we wrap up extras do you have okay oh let me see let me go double
00:25:36.060 -->
00:25:47.560check do i have an email i don't see an email michael let me let me click refresh you don't see an email no you sure did it send a six feet up i assume it did it says it did maybe it's like Maybe it's like, that's just too body.
00:25:48.020 -->
00:25:50.500And like you landed in the bot zone.
00:25:50.610 -->
00:25:52.320I might've gotten boted.
00:25:52.520 -->
00:25:55.040Anyway, we'll review that later.
00:25:55.760 -->
00:25:55.980Okay.
00:25:56.560 -->
00:25:57.420Let's go over.
00:25:57.740 -->
00:26:00.160One last extra before we leave.
00:26:00.520 -->
00:26:00.760Yeah, yeah.
00:26:01.000 -->
00:26:04.360You had mentioned PEP772, which is the Python Packaging Council.
00:26:05.300 -->
00:26:10.020On a previous episode, I wanted to bring it to everyone's attention that the inaugural election dates have been set.
00:26:10.160 -->
00:26:14.800The nominations are open until July 28th and the voting will happen from September 1st.
00:26:14.980 -->
00:26:19.580So if you're interested in the packaging council, jump on the boat and go participate.
00:26:19.820 -->
00:26:20.580Awesome, awesome.
00:26:21.000 -->
00:26:22.480All right, how about a joke now?
00:26:22.730 -->
00:26:27.960So this one I hand selected for you, Calvin, because I thought you might appreciate this.
00:26:28.010 -->
00:26:31.120And I've entitled it Minimum Requirements for Linux.
00:26:31.540 -->
00:26:33.500I'm already in, I'm already in.
00:26:33.500 -->
00:26:34.360I know, you're in.
00:26:34.640 -->
00:26:36.960And this is putting Linux in a good light.
00:26:37.360 -->
00:26:40.240So it's mostly a picture, but I'll just describe it to you because it's fun.
00:26:40.400 -->
00:26:54.440Like, you know, there's this big brouhaha about windows 11 and tpm chips 2.0 so even if you have a tpm chip you're not enough for windows 11 like so you got to go buy yet another one i think Linux has a different uh deal here so the idea is
00:26:54.800 -->
00:27:09.460there's this i can't play it there's this old dirty nasty 486 looking thing that's found in like a ditch in the water probably like a hewlett packard yeah like a hewlett packard i mean it's got dvd drives and stuff on the front.
00:27:09.580 -->
00:27:09.820Yeah, yeah.
00:27:10.260 -->
00:27:12.040Yes, or a compact maybe.
00:27:12.180 -->
00:27:12.500Yes.
00:27:13.820 -->
00:27:18.860Just in the water and in the mud and they pull it out and go, "Minimum requirements for Linux."
00:27:19.280 -->
00:27:20.040It will run.
00:27:20.280 -->
00:27:22.520It's a video. Sadly, I can't play it because I'm not logged in,
00:27:22.660 -->
00:27:23.700but apparently, whatever.
00:27:24.180 -->
00:27:25.120You can play it when you log in.
00:27:25.500 -->
00:27:26.760I'll go log in and play it, Michael.
00:27:27.620 -->
00:27:28.280Very good stuff.
00:27:28.400 -->
00:27:28.780Very good stuff.
00:27:28.900 -->
00:27:31.620Well, thank you very much, Michael, for this edition of Python Bytes.
00:27:31.740 -->
00:27:33.560We will see you all next week.
00:27:33.840 -->
00:27:34.300Thank you very much.
00:27:34.380 -->
00:27:35.260Yeah, thanks. Bye.