WEBVTT

00:00:00.080 --> 00:00:04.720
<v Michael Kennedy>Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:00:04.750 --> 00:00:10.960
<v Michael Kennedy>your earbuds. This is episode 486, recorded June 30th, 2026. I'm Michael Kennedy.

00:00:11.400 --> 00:00:12.580
<v Michael Kennedy>And I'm Calvin Hendryx-Parker.

00:00:12.860 --> 00:00:18.120
<v Michael Kennedy>This episode is brought to you by us. Check out Six Feet Up if you want not just a consulting

00:00:18.370 --> 00:00:24.180
<v Michael Kennedy>partner, but an impactful consulting for good partner. And if you're looking to do better at

00:00:24.370 --> 00:00:29.980
<v Michael Kennedy>Python, data science, AI, check out Talk Python Training. I have three courses in the works right

00:00:30.000 --> 00:00:30.920
<v Michael Kennedy>which is interesting.

00:00:31.420 --> 00:00:33.160
<v Michael Kennedy>So there's going to be a lot of new stuff.

00:00:33.240 --> 00:00:36.060
<v Michael Kennedy>So be sure to either keep listening here

00:00:36.180 --> 00:00:37.880
<v Michael Kennedy>where I'll tell you about it or sign up over there.

00:00:38.260 --> 00:00:39.060
<v Michael Kennedy>And speaking of signing up,

00:00:39.400 --> 00:00:40.140
<v Michael Kennedy>pythonbytes.fm,

00:00:40.460 --> 00:00:41.040
<v Michael Kennedy>click on the newsletter.

00:00:41.380 --> 00:00:43.380
<v Michael Kennedy>You can sign up there and get notifications every week

00:00:43.660 --> 00:00:45.500
<v Michael Kennedy>as well as follow us on social media.

00:00:45.600 --> 00:00:46.900
<v Michael Kennedy>We got all the links for the show,

00:00:47.380 --> 00:00:48.120
<v Michael Kennedy>Calvin and me.

00:00:48.460 --> 00:00:49.980
<v Michael Kennedy>Now, Calvin, your first item

00:00:50.260 --> 00:00:51.320
<v Michael Kennedy>is something that has been sitting

00:00:51.960 --> 00:00:54.080
<v Michael Kennedy>in a browser tab on my computer

00:00:54.140 --> 00:00:55.040
<v Michael Kennedy>for at least three days.

00:00:55.140 --> 00:00:56.260
<v Michael Kennedy>I'm like, oh, I need to read this.

00:00:56.400 --> 00:00:56.860
<v Michael Kennedy>Come on now.

00:00:57.480 --> 00:00:58.300
<v Michael Kennedy>And I haven't gotten to it.

00:00:58.320 --> 00:00:59.940
<v Michael Kennedy>So I'm really happy you're going to take care of that for me.

00:01:00.080 --> 00:01:06.820
<v Calvin Hendryx-Parker>Well, how could you not mention this? There was a talk at PyCon 2026, and it's a perennial talk

00:01:07.160 --> 00:01:11.760
<v Calvin Hendryx-Parker>that has probably happened for the last two decades, starting with Larry Hastings. I didn't

00:01:11.760 --> 00:01:17.420
<v Calvin Hendryx-Parker>go look up exactly what year he started doing the Gilectomy project, but the idea is find free

00:01:17.560 --> 00:01:22.380
<v Calvin Hendryx-Parker>threading in Python, past, present, and future. So there's been a lot of discussion in the past.

00:01:22.400 --> 00:01:28.700
<v Calvin Hendryx-Parker>Like I said, there's over two decades of history going into solving this problem. This gets back

00:01:28.720 --> 00:01:35.660
<v Calvin Hendryx-Parker>into Python and the global interpreter lock and what we've done in the past to try and improve

00:01:35.980 --> 00:01:40.920
<v Calvin Hendryx-Parker>performance. So for those who are kind of new to Python, that a global interpreter lock really

00:01:41.060 --> 00:01:46.020
<v Calvin Hendryx-Parker>makes it difficult to run a single Python process and leverage multiple cores in your computers.

00:01:46.270 --> 00:01:52.340
<v Calvin Hendryx-Parker>But every modern computer today has how many, even the Raspberry Pis have many cores in them. So this

00:01:52.340 --> 00:01:57.380
<v Calvin Hendryx-Parker>would be a huge boost, we think, to Python to be able to take advantage of more computing power

00:01:57.400 --> 00:02:04.840
<v Calvin Hendryx-Parker>going on inside those CPUs. So basically the GIL has prevented this true multi-threaded parallelism

00:02:04.840 --> 00:02:09.979
<v Calvin Hendryx-Parker>in CPython since the very beginning. There's been multiple attempts. Many of them have failed on

00:02:10.100 --> 00:02:16.100
<v Calvin Hendryx-Parker>performance grounds. Once you remove this global interpreter lock, that overhead of managing IO,

00:02:16.400 --> 00:02:23.680
<v Calvin Hendryx-Parker>memory, etc., all the pieces going back and forth, usually adds in 100% or more additional

00:02:23.700 --> 00:02:28.260
<v Calvin Hendryx-Parker>performance load than giving you the performance you'd think you'd get by leveraging multiple CPUs.

00:02:28.740 --> 00:02:36.040
<v Calvin Hendryx-Parker>We got free threading in what Python 3.13 was experimental. And so it's still a 20 to 40%

00:02:36.310 --> 00:02:43.220
<v Calvin Hendryx-Parker>single threaded slowdown. 3.14 brought that from kind of zero to 10%. So look for Python 3.15

00:02:43.820 --> 00:02:49.739
<v Calvin Hendryx-Parker>coming in October to deliver basically a unified story here. They've made a huge amount of progress

00:02:49.760 --> 00:02:56.560
<v Calvin Hendryx-Parker>here. During the talk, it's interesting because this always brings out the OG Pythonistas,

00:02:56.940 --> 00:03:00.720
<v Calvin Hendryx-Parker>the core developers in the room for these kinds of talks. Actually, one of the members of our team

00:03:00.820 --> 00:03:06.140
<v Calvin Hendryx-Parker>was in that talk at PyCon. Larry Hastings got up to the mic and Thomas Wooters, basically,

00:03:06.500 --> 00:03:11.840
<v Calvin Hendryx-Parker>they both kind of played off each other on how this all came about. And the punchline was the

00:03:12.000 --> 00:03:17.440
<v Calvin Hendryx-Parker>things that made this possible didn't exist when Larry was trying to do this. So there's been a ton

00:03:17.460 --> 00:03:23.480
<v Calvin Hendryx-Parker>of development and innovation in the Python core to make this all go. The big part about this is now

00:03:23.580 --> 00:03:28.720
<v Calvin Hendryx-Parker>that we're going to have a unified ABI. So like basically the interfaces into using this free

00:03:28.860 --> 00:03:33.000
<v Calvin Hendryx-Parker>threading is going to be more unified, which means the same extension binaries, like if you're writing

00:03:33.160 --> 00:03:38.680
<v Calvin Hendryx-Parker>C extensions, can work both on the gil and on free threaded builds. And looks like already greater

00:03:38.720 --> 00:03:43.980
<v Calvin Hendryx-Parker>than 50% of the PyPy binary wheels support free threading. So that's a huge, well the top, sorry,

00:03:44.140 --> 00:03:48.780
<v Calvin Hendryx-Parker>top PyPy binaries, not all of them, but of the major ones, we've already got half adoption.

00:03:49.480 --> 00:03:55.040
<v Calvin Hendryx-Parker>I think that's a huge boost. I think there was a prediction made on from the stage that

00:03:55.490 --> 00:04:00.460
<v Calvin Hendryx-Parker>free-threaded may become the default version of Python, but we'll see what happens.

00:04:00.590 --> 00:04:01.260
<v Calvin Hendryx-Parker>Oh, excellent.

00:04:01.530 --> 00:04:04.540
<v Calvin Hendryx-Parker>So have you followed along with this Gil story, Michael?

00:04:04.960 --> 00:04:06.240
<v Calvin Hendryx-Parker>Yeah, everyone has.

00:04:06.790 --> 00:04:14.100
<v Michael Kennedy>I love at least having the capability to do threading. I would love to see this kind of

00:04:14.120 --> 00:04:20.480
<v Michael Kennedy>seamlessly integrated into async io i was just reading a reddit post about somebody who was

00:04:20.680 --> 00:04:26.480
<v Michael Kennedy>hating on async io async and await in particular and no it might not be the cleanest easiest

00:04:26.880 --> 00:04:30.780
<v Michael Kennedy>programming model in the world not python in particular but just in general but it's better

00:04:30.940 --> 00:04:36.920
<v Michael Kennedy>than managing a bunch of threads or processes or you know it's it's i think it's really quite neat

00:04:37.160 --> 00:04:43.440
<v Michael Kennedy>and lightweight but it's big limitation is as soon as you get anything computational boom

00:04:43.700 --> 00:04:49.280
<v Michael Kennedy>like the whole thing stops right yeah and so if you could just say you know put a decorator onto

00:04:49.360 --> 00:04:54.800
<v Michael Kennedy>a function like cpu bound or something or somehow you know kick it off with some kind of you know

00:04:54.980 --> 00:05:00.180
<v Michael Kennedy>computational thing but clearly like just await make that awaitable in the same event loop that

00:05:00.200 --> 00:05:05.260
<v Calvin Hendryx-Parker>would be awesome yeah no this is a really good article from the Linux weekly news uh really in

00:05:05.340 --> 00:05:09.700
<v Calvin Hendryx-Parker>depth coverage by jake on this site so i highly recommend folks who are interested in the history

00:05:09.720 --> 00:05:10.640
<v Calvin Hendryx-Parker>and what the future is going to be,

00:05:11.000 --> 00:05:13.040
<v Calvin Hendryx-Parker>check this out because we're finally going to have

00:05:13.400 --> 00:05:14.620
<v Calvin Hendryx-Parker>free threading in Python.

00:05:14.980 --> 00:05:15.280
<v Michael Kennedy>Awesome.

00:05:15.600 --> 00:05:17.740
<v Michael Kennedy>So if you were running like a Django site,

00:05:17.790 --> 00:05:19.160
<v Michael Kennedy>I don't know, wouldn't it be cool?

00:05:19.600 --> 00:05:21.740
<v Michael Kennedy>Wouldn't it be cool to, I don't know,

00:05:22.240 --> 00:05:25.400
<v Michael Kennedy>search your admin site in the same way that you do?

00:05:25.420 --> 00:05:26.060
<v Michael Kennedy>No, Michael.

00:05:27.840 --> 00:05:31.100
<v Michael Kennedy>Like really nice, say, Visual Studio code.

00:05:31.230 --> 00:05:34.060
<v Michael Kennedy>You can hit shift command P for your command palette

00:05:34.320 --> 00:05:36.380
<v Michael Kennedy>or in Vivaldo, you can just hit command K

00:05:36.580 --> 00:05:38.900
<v Michael Kennedy>and you could say, I don't know,

00:05:39.120 --> 00:05:42.400
<v Michael Kennedy>copy all the links on the page by just typing a thing or two.

00:05:43.319 --> 00:05:48.520
<v Michael Kennedy>So thanks to Adam Parkin, I introduce Django admin site search.

00:05:48.720 --> 00:05:49.980
<v Michael Kennedy>And it's quite a slick thing.

00:05:50.080 --> 00:05:50.960
<v Michael Kennedy>It's fairly new.

00:05:51.000 --> 00:05:51.760
<v Michael Kennedy>It could use some more stars.

00:05:51.980 --> 00:05:52.840
<v Michael Kennedy>So there, it got one more.

00:05:53.460 --> 00:05:54.100
<v Calvin Hendryx-Parker>In real time.

00:05:54.360 --> 00:05:54.820
<v Michael Kennedy>Real time update.

00:05:54.860 --> 00:05:55.100
<v Michael Kennedy>In real time.

00:05:55.700 --> 00:05:58.240
<v Michael Kennedy>Yeah, so you just hit command K like I just did in Vivaldi.

00:05:58.360 --> 00:06:02.060
<v Michael Kennedy>And by the way, if you do Vivaldi, you might need to remap one or the other, but whatever.

00:06:02.480 --> 00:06:04.740
<v Michael Kennedy>And then it brings up this nice search.

00:06:04.800 --> 00:06:08.640
<v Michael Kennedy>People probably familiar with this with some of the docs, like, the great

00:06:08.820 --> 00:06:13.020
<v Michael Kennedy>docs, docs have this and lots of others, but the idea is that it's really

00:06:13.220 --> 00:06:16.440
<v Michael Kennedy>deeply integrated into understanding what your, your Django needs.

00:06:17.260 --> 00:06:21.360
<v Michael Kennedy>So there's a little, little animated video here as by the way,

00:06:21.640 --> 00:06:24.540
<v Michael Kennedy>everyone out there building this, if you're building something specifically

00:06:24.740 --> 00:06:26.880
<v Michael Kennedy>to do with UI at a minimum needs a screenshot.

00:06:27.260 --> 00:06:32.220
<v Michael Kennedy>I've seen like entire, like web website design frameworks that have had like

00:06:32.240 --> 00:06:34.200
<v Michael Kennedy>zero, zero pictures.

00:06:34.330 --> 00:06:35.900
<v Michael Kennedy>I'm like, I have no idea what you're talking about.

00:06:36.020 --> 00:06:37.840
<v Calvin Hendryx-Parker>Like the words sound good, but picture people.

00:06:38.120 --> 00:06:40.140
<v Calvin Hendryx-Parker>They'll resort to interpretive dance before they'll

00:06:40.140 --> 00:06:41.020
<v Calvin Hendryx-Parker>put a screencast in.

00:06:41.220 --> 00:06:42.080
<v Michael Kennedy>Yeah, exactly.

00:06:42.330 --> 00:06:42.460
<v Michael Kennedy>Exactly.

00:06:42.840 --> 00:06:46.540
<v Michael Kennedy>So the idea is it just works out of the box, basically very little config.

00:06:47.140 --> 00:06:51.340
<v Michael Kennedy>It's when you type something into it, it searches app labels, model labels

00:06:51.520 --> 00:06:53.440
<v Michael Kennedy>and fields and model instances.

00:06:54.140 --> 00:06:57.100
<v Michael Kennedy>And what's cool about it is it can search in two different ways.

00:06:57.540 --> 00:07:02.200
<v Michael Kennedy>So for smaller sites or sort of ad hoc searches, it will

00:07:02.200 --> 00:07:04.040
<v Michael Kennedy>and dunder, I can, not a dunder,

00:07:04.260 --> 00:07:05.160
<v Michael Kennedy>underscore underscore I contains,

00:07:05.840 --> 00:07:07.960
<v Michael Kennedy>which is, is any part of this text

00:07:08.120 --> 00:07:09.960
<v Michael Kennedy>I've typed contained within here

00:07:10.240 --> 00:07:12.580
<v Michael Kennedy>without regard to case, right?

00:07:12.800 --> 00:07:15.940
<v Michael Kennedy>That's cool, but that's not always indexed, right?

00:07:16.020 --> 00:07:18.040
<v Michael Kennedy>I mean, not every single field has an index

00:07:18.060 --> 00:07:18.800
<v Michael Kennedy>for these sorts of things.

00:07:19.260 --> 00:07:21.280
<v Michael Kennedy>So that can be slow on large projects.

00:07:21.320 --> 00:07:22.460
<v Michael Kennedy>So you can also tell it,

00:07:23.400 --> 00:07:26.180
<v Michael Kennedy>use the model admins get search results method,

00:07:26.620 --> 00:07:28.660
<v Michael Kennedy>which can be an indexed query.

00:07:29.000 --> 00:07:29.460
<v Michael Kennedy>That's cool, right?

00:07:29.680 --> 00:07:30.300
<v Calvin Hendryx-Parker>That's super cool.

00:07:30.600 --> 00:07:31.580
<v Calvin Hendryx-Parker>And this is super nice.

00:07:32.080 --> 00:07:34.280
<v Calvin Hendryx-Parker>I've seen a couple of people doing work on the admin.

00:07:34.760 --> 00:07:35.740
<v Calvin Hendryx-Parker>This is a much-needed feature.

00:07:36.220 --> 00:07:37.360
<v Michael Kennedy>Yeah, I think it's really neat.

00:07:37.680 --> 00:07:40.620
<v Michael Kennedy>It has a built-in auth, so users can only search apps and models

00:07:40.780 --> 00:07:41.840
<v Michael Kennedy>that they have permissions to view.

00:07:42.140 --> 00:07:43.900
<v Michael Kennedy>Results appear on type.

00:07:44.100 --> 00:07:47.120
<v Michael Kennedy>It's active search, I guess, is the way you would describe it.

00:07:48.080 --> 00:07:49.400
<v Michael Kennedy>And keyboard navigation.

00:07:49.860 --> 00:07:51.460
<v Michael Kennedy>So obviously Command K, like I said.

00:07:51.460 --> 00:07:51.960
<v Michael Kennedy>It's a must.

00:07:53.080 --> 00:07:55.000
<v Michael Kennedy>It's a good one.

00:07:55.220 --> 00:07:55.700
<v Michael Kennedy>You know what?

00:07:55.730 --> 00:07:56.600
<v Michael Kennedy>I think, no.

00:07:57.580 --> 00:07:59.920
<v Michael Kennedy>I think, yeah, I think that's the default on Chrome.

00:08:00.080 --> 00:08:04.800
<v Michael Kennedy>trying to figure out if that is, which one is it? I may have changed it. I think maybe command E is

00:08:04.840 --> 00:08:09.880
<v Michael Kennedy>the default on, I'm sorry, Vivaldi for its command palette, but you know, it's layers of command

00:08:10.000 --> 00:08:14.180
<v Michael Kennedy>palettes you might have to battle with. Anyway, it supports all the way back to 3.8. They don't even

00:08:14.360 --> 00:08:18.460
<v Michael Kennedy>care if Python's supported. They're going to support it. And Django 3.2 to 6. So yeah, that's

00:08:18.780 --> 00:08:23.240
<v Michael Kennedy>pretty much it. Super easy to add in. Not a lot, not a lot to do there, but it's customizable.

00:08:23.660 --> 00:08:27.979
<v Calvin Hendryx-Parker>Yeah. No, I like that. I mean, as a Django developer, that's definitely a missing piece

00:08:28.000 --> 00:08:30.420
<v Calvin Hendryx-Parker>because I feel like it's like the old days of the internet

00:08:30.530 --> 00:08:31.320
<v Calvin Hendryx-Parker>where there was no search

00:08:31.320 --> 00:08:32.680
<v Calvin Hendryx-Parker>and you had to always know where to browse to

00:08:32.690 --> 00:08:34.780
<v Calvin Hendryx-Parker>to find the things in the admin console.

00:08:35.300 --> 00:08:35.479
<v Calvin Hendryx-Parker>Yeah.

00:08:35.680 --> 00:08:37.740
<v Calvin Hendryx-Parker>This is going to save a lot of people a lot of time,

00:08:37.820 --> 00:08:40.000
<v Calvin Hendryx-Parker>especially if you've got a larger Django app

00:08:40.150 --> 00:08:42.000
<v Calvin Hendryx-Parker>and you've got hundreds of models in there.

00:08:42.150 --> 00:08:43.780
<v Calvin Hendryx-Parker>Like this is going to be a lifesaver.

00:08:44.120 --> 00:08:46.340
<v Michael Kennedy>And some people use the admin section

00:08:46.800 --> 00:08:49.840
<v Michael Kennedy>for like all the admin staff of the Django site.

00:08:50.060 --> 00:08:51.620
<v Michael Kennedy>I don't recommend that, but...

00:08:51.700 --> 00:08:52.160
<v Michael Kennedy>I don't know.

00:08:52.160 --> 00:08:53.900
<v Michael Kennedy>I don't know either, but people do.

00:08:54.030 --> 00:08:55.320
<v Michael Kennedy>And so having this to navigate it,

00:08:55.330 --> 00:08:56.100
<v Michael Kennedy>I think would be good, right?

00:08:56.170 --> 00:08:56.260
<v Calvin Hendryx-Parker>True.

00:08:56.740 --> 00:09:00.400
<v Calvin Hendryx-Parker>In a last minute crunch, when you're trying to triage something, that admin is indispensable.

00:09:00.920 --> 00:09:02.040
<v Michael Kennedy>I guess it depends, though.

00:09:02.420 --> 00:09:07.540
<v Michael Kennedy>You know, is this an internal company app that 20 people use and three people admin?

00:09:07.740 --> 00:09:07.860
<v Michael Kennedy>Yeah.

00:09:08.140 --> 00:09:11.120
<v Michael Kennedy>How serious you got to take that versus Instagram?

00:09:11.460 --> 00:09:11.920
<v Michael Kennedy>Right.

00:09:12.600 --> 00:09:13.920
<v Michael Kennedy>I bet it's not admin through the admin.

00:09:14.520 --> 00:09:15.800
<v Calvin Hendryx-Parker>We should get some, we should find out.

00:09:15.860 --> 00:09:19.380
<v Calvin Hendryx-Parker>We should get some inside news into whether they use the admin or not.

00:09:19.840 --> 00:09:20.860
<v Calvin Hendryx-Parker>What if it is?

00:09:22.420 --> 00:09:23.760
<v Michael Kennedy>No, you should see ours.

00:09:23.760 --> 00:09:24.520
<v Calvin Hendryx-Parker>Our is amazing.

00:09:24.640 --> 00:09:26.500
<v Calvin Hendryx-Parker>Well, I can tell you right now, someone's going to mention it in the comments.

00:09:26.660 --> 00:09:27.420
<v Calvin Hendryx-Parker>they're going to call us out.

00:09:27.660 --> 00:09:28.280
<v Calvin Hendryx-Parker>Let's do it.

00:09:28.400 --> 00:09:28.720
<v Calvin Hendryx-Parker>Let's do it.

00:09:29.400 --> 00:09:30.900
<v Michael Kennedy>We could ask an AI about it, probably.

00:09:31.230 --> 00:09:31.840
<v Michael Kennedy>A local AI.

00:09:32.100 --> 00:09:34.080
<v Calvin Hendryx-Parker>And local AI, actually, this is really exciting.

00:09:34.680 --> 00:09:39.500
<v Calvin Hendryx-Parker>I have been certainly on the bleeding edge of local AIs for quite some time,

00:09:39.720 --> 00:09:41.460
<v Calvin Hendryx-Parker>running them on my framework desktop here.

00:09:41.660 --> 00:09:45.800
<v Calvin Hendryx-Parker>And then I've always managed to try and buy a MacBook Pro with Apple Silicon

00:09:45.980 --> 00:09:47.300
<v Calvin Hendryx-Parker>and then about as much memory as I can afford.

00:09:48.100 --> 00:09:51.760
<v Calvin Hendryx-Parker>And so being able to run these local models has been mostly an experiment up to this date.

00:09:52.820 --> 00:09:54.080
<v Calvin Hendryx-Parker>Gemma 4 has gotten really good.

00:09:54.220 --> 00:10:00.100
<v Calvin Hendryx-Parker>Some of them, you know, Mistral, Dev, and Devstral have been really interesting for live coding agents.

00:10:01.379 --> 00:10:07.300
<v Calvin Hendryx-Parker>But this article that came across my feed today, multiple people in the company actually posted this,

00:10:07.690 --> 00:10:12.900
<v Calvin Hendryx-Parker>which is Quinn 3.627B is the sweet spot for local development.

00:10:13.220 --> 00:10:17.680
<v Calvin Hendryx-Parker>So there's a couple models that just got released in the Quinn family of open weights models.

00:10:18.100 --> 00:10:27.280
<v Calvin Hendryx-Parker>There's also a quantized version of it and a multi-token prediction version of this model out there, which gets some pretty blazing speed.

00:10:27.760 --> 00:10:35.020
<v Calvin Hendryx-Parker>On his M5 MacBook Max, he was getting 32 tokens per second with the 8-bit quantized version of it.

00:10:35.640 --> 00:10:45.040
<v Calvin Hendryx-Parker>But if you run the 4-bit quantization, you can actually run it on a 32 gigabyte or less MacBook machine, and you get pretty blazing speeds.

00:10:45.140 --> 00:10:48.360
<v Calvin Hendryx-Parker>I think they put a chart in here on the bottom.

00:10:48.920 --> 00:10:50.100
<v Calvin Hendryx-Parker>But the nice bit about this article

00:10:50.600 --> 00:10:52.260
<v Calvin Hendryx-Parker>is he compares the various models,

00:10:52.420 --> 00:10:54.800
<v Calvin Hendryx-Parker>what they're capable of inside the same family.

00:10:55.540 --> 00:10:57.200
<v Calvin Hendryx-Parker>And it actually gives you a whole how-to

00:10:57.500 --> 00:11:00.960
<v Calvin Hendryx-Parker>on how to hook this up using LLAMA CPP and OpenCode.

00:11:01.220 --> 00:11:03.400
<v Calvin Hendryx-Parker>And so you can actually rebuild the demos

00:11:03.660 --> 00:11:05.500
<v Calvin Hendryx-Parker>that the author wrote here.

00:11:05.660 --> 00:11:07.680
<v Calvin Hendryx-Parker>So using OpenCode, hooked it up,

00:11:07.960 --> 00:11:10.100
<v Calvin Hendryx-Parker>and then wrote up a Minesweeper app,

00:11:10.380 --> 00:11:12.680
<v Calvin Hendryx-Parker>and then again went into some depth

00:11:12.840 --> 00:11:13.980
<v Calvin Hendryx-Parker>on the performance metrics here.

00:11:14.140 --> 00:11:19.360
<v Calvin Hendryx-Parker>So you can see the 3635B A3B model on the Apple MLX,

00:11:19.860 --> 00:11:22.660
<v Calvin Hendryx-Parker>85 tokens per second running with that model.

00:11:22.820 --> 00:11:24.500
<v Calvin Hendryx-Parker>That is incredibly usable.

00:11:24.800 --> 00:11:26.860
<v Calvin Hendryx-Parker>But the real sweet spot for the development

00:11:27.300 --> 00:11:30.920
<v Calvin Hendryx-Parker>was using Lama CPP and getting 32 tokens per second

00:11:31.120 --> 00:11:32.340
<v Calvin Hendryx-Parker>using about 42 gig of RAM.

00:11:32.820 --> 00:11:34.640
<v Calvin Hendryx-Parker>So if you've got a 64 gig machine,

00:11:34.920 --> 00:11:37.320
<v Calvin Hendryx-Parker>this is absolutely doable for developers

00:11:37.400 --> 00:11:39.920
<v Calvin Hendryx-Parker>that are out there today and felt like it was,

00:11:40.240 --> 00:11:43.139
<v Calvin Hendryx-Parker>I mean, this is not gonna be like mind blowing

00:11:43.160 --> 00:11:48.740
<v Calvin Hendryx-Parker>for anyone who's already using frontier level models like Opus and Sonnet and GPT-55 codecs to

00:11:48.800 --> 00:11:56.640
<v Calvin Hendryx-Parker>do code, but this is local. Everything stays on your machine. The data never leaves. It's tool

00:11:56.820 --> 00:12:02.560
<v Calvin Hendryx-Parker>using, so there's still risk. You're using models that have been trained by foreign nations and who

00:12:02.680 --> 00:12:06.000
<v Calvin Hendryx-Parker>knows what's going on inside of these things, but this one seems to be gaining a lot of traction

00:12:06.440 --> 00:12:12.620
<v Calvin Hendryx-Parker>and actually producing, you know, I don't think it's mythos level yet, but we're only, what, maybe

00:12:12.540 --> 00:12:17.420
<v Calvin Hendryx-Parker>six, nine months behind on open waste models that I can run myself. So this looks really good.

00:12:17.820 --> 00:12:21.700
<v Calvin Hendryx-Parker>The interesting thing he also pointed out in the article was, and I wasn't aware of it,

00:12:21.870 --> 00:12:26.560
<v Calvin Hendryx-Parker>the, I've been an OLAMA user for quite some time. And I think I'm going to be switching to the

00:12:26.860 --> 00:12:34.000
<v Calvin Hendryx-Parker>LAMA CPP version. There's, there's been some authorship and IP concerns between the two groups

00:12:34.460 --> 00:12:40.199
<v Calvin Hendryx-Parker>that I wasn't aware of. And I think I feel like to be responsible, I should switch over to using

00:12:40.220 --> 00:12:45.720
<v Calvin Hendryx-Parker>that or I'm considering VLLM on my framework desktop so that I can run multiple models

00:12:45.980 --> 00:12:49.920
<v Calvin Hendryx-Parker>simultaneously and have multiple instances of the same model running so that, for example,

00:12:49.920 --> 00:12:53.620
<v Calvin Hendryx-Parker>my home assistant can have multiple people in the house make requests simultaneously.

00:12:54.000 --> 00:12:58.760
<v Calvin Hendryx-Parker>So this is pretty exciting. I can't, I've not tried 3.6. I have 3.5 currently running

00:12:59.380 --> 00:13:04.540
<v Calvin Hendryx-Parker>on my desktop at the moment. And that has been impressive from a home assistant standpoint. I've

00:13:04.540 --> 00:13:10.180
<v Calvin Hendryx-Parker>not used it for much of my coding agents, but I'm going to give 3.6.27b a real shot using

00:13:10.200 --> 00:13:12.600
<v Calvin Hendryx-Parker>I've been using, again, Pi, still my daily driver.

00:13:13.220 --> 00:13:16.560
<v Calvin Hendryx-Parker>There was a new release of Superpowers since our last episode

00:13:16.900 --> 00:13:21.140
<v Calvin Hendryx-Parker>that has made the Pi experience a lot more user-friendly and smooth.

00:13:21.170 --> 00:13:22.960
<v Calvin Hendryx-Parker>So check that out with Quinn36.

00:13:23.500 --> 00:13:23.940
<v Calvin Hendryx-Parker>It's really neat.

00:13:24.460 --> 00:13:26.140
<v Michael Kennedy>One thing is, can you pull up that speed?

00:13:26.480 --> 00:13:26.700
<v Calvin Hendryx-Parker>Yeah.

00:13:28.180 --> 00:13:30.760
<v Michael Kennedy>I love how they have like a heat picture.

00:13:31.840 --> 00:13:34.860
<v Michael Kennedy>It's definitely going to heat up your laptop if you're using these tools.

00:13:35.920 --> 00:13:40.080
<v Michael Kennedy>What surprises me on macOS is that MLX is the slowest.

00:13:40.340 --> 00:13:46.500
<v Calvin Hendryx-Parker>i know i was surprised that too i think he mentions it down here in the text um rtx consumer rtx if

00:13:46.560 --> 00:13:51.240
<v Calvin Hendryx-Parker>you've got enough vram on that card that is the way to go if you're serious about running these

00:13:51.340 --> 00:13:58.260
<v Calvin Hendryx-Parker>models i believe but just the standard llama cpp plus mtp uh with that quantized version 105 tokens

00:13:58.300 --> 00:14:04.660
<v Calvin Hendryx-Parker>per second that's but but 32 tokens per second is plenty fast for doing code dev where you're

00:14:05.140 --> 00:14:08.940
<v Calvin Hendryx-Parker>you're in it you're reviewing you're using it as a true assistant and you're not trying to just

00:14:08.960 --> 00:14:14.520
<v Michael Kennedy>vibe code away an app. Another takeaway that when I see anything like this, definitely a cool topic,

00:14:14.820 --> 00:14:18.960
<v Michael Kennedy>is I don't know what percentage of people it is out there. Maybe I'd love to hear your thoughts

00:14:18.960 --> 00:14:25.820
<v Michael Kennedy>on this, but I think there's certainly a strong contingent of people out there who want AI to go

00:14:25.980 --> 00:14:30.480
<v Michael Kennedy>away or think the bubble's going to burst and it's just not worth getting into or paying attention to.

00:14:30.700 --> 00:14:36.380
<v Michael Kennedy>Like I know OpenAI or Anthropic or whatever, the whole thing is just going to go up like in a

00:14:36.640 --> 00:14:40.480
<v Michael Kennedy>smoking dumpster fire in six months so why would I change the way I work and

00:14:40.680 --> 00:14:44.260
<v Michael Kennedy>melt my brain and whatever else you leave people say about it this stuff is

00:14:44.320 --> 00:14:48.220
<v Michael Kennedy>not going away this is on this is here right this is on a hugging face the

00:14:48.260 --> 00:14:52.080
<v Calvin Hendryx-Parker>models are published on hugging face this is open open source and published I

00:14:52.220 --> 00:14:55.420
<v Calvin Hendryx-Parker>say open source I shouldn't say open source they're open weights some of the

00:14:55.460 --> 00:15:06.340
<v Calvin Hendryx-Parker>models are fully open source but this is this is sustainable maintainable and a

00:15:06.360 --> 00:15:12.500
<v Calvin Hendryx-Parker>sides of that equation, the answer lies in the middle. And the answer really is that these tools

00:15:12.550 --> 00:15:17.840
<v Calvin Hendryx-Parker>are great amplifiers of your existing skills. So if you're already good at the software development

00:15:18.020 --> 00:15:22.040
<v Calvin Hendryx-Parker>lifecycle, these things make you better. If you're not good at it, these things can make you worse.

00:15:22.820 --> 00:15:25.420
<v Michael Kennedy>Exactly. You have no idea? That's called vibe coding.

00:15:25.900 --> 00:15:29.780
<v Calvin Hendryx-Parker>Right. Let's all be realistic about what this is all about.

00:15:30.380 --> 00:15:32.060
<v Michael Kennedy>Yeah. And I'm also jealous of your framework.

00:15:32.180 --> 00:15:38.720
<v Calvin Hendryx-Parker>So, I mean, side note, Apple raised their prices this week on MacBook Pros.

00:15:39.110 --> 00:15:41.220
<v Calvin Hendryx-Parker>I went and double checked and Framework had raised their prices too.

00:15:41.490 --> 00:15:48.720
<v Calvin Hendryx-Parker>So the same 128 gigabyte machine is like about six or $700 more than it was a year ago.

00:15:49.160 --> 00:15:49.440
<v Michael Kennedy>Wow.

00:15:49.710 --> 00:15:49.840
<v Michael Kennedy>Yeah.

00:15:50.460 --> 00:15:50.820
<v Michael Kennedy>I don't know.

00:15:50.960 --> 00:15:52.279
<v Michael Kennedy>Maybe I'll have a...

00:15:52.890 --> 00:15:55.880
<v Michael Kennedy>I was going to start this episode with a good morning.

00:15:56.460 --> 00:15:57.440
<v Michael Kennedy>Good morning, everyone.

00:15:58.959 --> 00:16:06.820
<v Michael Kennedy>at apple we're so we've been so honored and proud to have pretty good fleeced you on ram and

00:16:07.100 --> 00:16:12.500
<v Michael Kennedy>on nvvm that today we're taking it to an entirely new level like

00:16:14.700 --> 00:16:19.860
<v Michael Kennedy>oh my goodness yeah so the price is like you're gonna be you're gonna be excited michael oh boy

00:16:20.380 --> 00:16:24.860
<v Michael Kennedy>let me tell you what we we're gonna bring on calvin to show you what we've built and boy is

00:16:24.780 --> 00:16:31.100
<v Michael Kennedy>expensive no like seriously just really quick follow-up to the sidebar like my i think my macbook

00:16:31.340 --> 00:16:36.540
<v Michael Kennedy>pro 16 inch which i just bought just received i bought it a little bit before because it took a

00:16:36.540 --> 00:16:41.760
<v Michael Kennedy>while but just got two weeks ago something like that i think it went up eight hundred dollars yeah

00:16:42.050 --> 00:16:47.820
<v Calvin Hendryx-Parker>i i luckily i bought two in preparation for this prior to the rise in price so i just saved

00:16:47.920 --> 00:16:52.199
<v Calvin Hendryx-Parker>myself sixteen hundred dollars that's awesome there's some guy math we could do there's totally

00:16:52.140 --> 00:16:57.040
<v Michael Kennedy>some guy math going on here all right what are we gonna spend it on let's let's exactly let's talk

00:16:57.160 --> 00:17:02.260
<v Michael Kennedy>about uh we're spinning on motorcycles calvin you know what we're gonna spend it we're absolutely

00:17:02.480 --> 00:17:07.980
<v Michael Kennedy>gonna spend our motorcycles so i would i would like to tell people about what might be the largest

00:17:08.900 --> 00:17:15.240
<v Michael Kennedy>single PEP except finalization in in one batch ever good go on that sounds like this sounds

00:17:15.260 --> 00:17:22.699
<v Michael Kennedy>exciting it sounds exciting it's more interest like oh that's weird interesting so all in one

00:17:23.959 --> 00:17:27.699
<v Michael Kennedy>one go i believe these are right perhaps i might be off by i think i might be off by one anyway

00:17:27.920 --> 00:17:33.460
<v Michael Kennedy>it's basically six six eight six eight seven six nine one there's like 10 peps or something that

00:17:33.580 --> 00:17:38.680
<v Michael Kennedy>got fine with the final just all at one shot then when you look at them carefully so i i linked to

00:17:38.800 --> 00:17:45.220
<v Michael Kennedy>the um 11 yeah it's 11 false chains i linked to the commit that did all this and so you'll see

00:17:45.240 --> 00:17:49.240
<v Michael Kennedy>like if we expand it here, the diff is not always perfect.

00:17:49.740 --> 00:17:53.640
<v Michael Kennedy>Pep 668 making Python based environments externally managed.

00:17:53.980 --> 00:18:01.320
<v Michael Kennedy>But if you go over and you check out Pep Pep 668, which is here, it was created.

00:18:01.380 --> 00:18:01.600
<v Michael Kennedy>Wow.

00:18:02.260 --> 00:18:03.940
<v Michael Kennedy>May 20, 2021.

00:18:04.500 --> 00:18:05.020
<v Michael Kennedy>House clean.

00:18:05.040 --> 00:18:06.580
<v Michael Kennedy>Others are like 2023 and so on.

00:18:06.920 --> 00:18:08.220
<v Michael Kennedy>So what had happened here?

00:18:08.400 --> 00:18:10.480
<v Michael Kennedy>Oh gosh, I forgot who, who did the switch.

00:18:10.680 --> 00:18:14.659
<v Michael Kennedy>I guess I could probably look at the commit zero intensity, which is

00:18:14.680 --> 00:18:21.060
<v Michael Kennedy>Peter, I didn't really need to click on that. In fact, that was useless. Peter Birma,

00:18:22.320 --> 00:18:28.140
<v Michael Kennedy>core developer, did all this. And what it really is, is there have been all these peps that were

00:18:28.360 --> 00:18:33.980
<v Michael Kennedy>sitting in accepted, but not final. And accepted means, well, accepted final means it's shipping.

00:18:34.400 --> 00:18:40.680
<v Michael Kennedy>But clearly the one that went, was out and accepted and final in 2021 is out. So there's

00:18:40.660 --> 00:18:46.480
<v Michael Kennedy>just a bunch of peps 11 in particular that were just hanging around and never ever got moved to

00:18:46.640 --> 00:18:52.220
<v Michael Kennedy>final for some reason you know reasons i don't know someone was not a completionist exactly yes

00:18:52.820 --> 00:18:59.260
<v Michael Kennedy>yeah exactly someone's like oh we're gonna get all the little badges baby all the badges that we put

00:18:59.260 --> 00:19:05.120
<v Michael Kennedy>on here yeah so for example this one is uh 2022 october 2022 and so on so i just think this

00:19:05.120 --> 00:19:09.480
<v Michael Kennedy>is kind of interesting and people have been looking at these these older peps and going like

00:19:09.740 --> 00:19:11.240
<v Michael Kennedy>Why is this not final?

00:19:11.340 --> 00:19:11.980
<v Michael Kennedy>Why is it just accepted?

00:19:12.380 --> 00:19:13.200
<v Michael Kennedy>Well, you called it out.

00:19:13.480 --> 00:19:14.200
<v Michael Kennedy>Not completionist.

00:19:14.560 --> 00:19:15.320
<v Calvin Hendryx-Parker>Yeah, I'm glad.

00:19:15.460 --> 00:19:17.180
<v Calvin Hendryx-Parker>Well, it's nice to see those all cleaned up

00:19:17.340 --> 00:19:19.840
<v Calvin Hendryx-Parker>so that at least there's a canonical source of the truth here.

00:19:20.160 --> 00:19:20.720
<v Michael Kennedy>Yeah, absolutely.

00:19:20.780 --> 00:19:22.080
<v Michael Kennedy>I totally agree.

00:19:23.140 --> 00:19:25.200
<v Michael Kennedy>Bit of comment out in the audience here.

00:19:25.320 --> 00:19:26.360
<v Michael Kennedy>We've got Pixel.

00:19:26.680 --> 00:19:28.020
<v Michael Kennedy>It says, like the sentence,

00:19:28.360 --> 00:19:32.660
<v Michael Kennedy>it makes you worth if you don't know the software cycle.

00:19:32.700 --> 00:19:35.100
<v Michael Kennedy>Because I saw people during Vibe Coding, and they're happy,

00:19:35.480 --> 00:19:38.920
<v Michael Kennedy>but they didn't know what it actually makes them worth.

00:19:39.000 --> 00:19:39.520
<v Michael Kennedy>But yeah, it's interesting.

00:19:39.820 --> 00:19:40.540
<v Calvin Hendryx-Parker>Very true statement.

00:19:41.040 --> 00:19:41.240
<v Michael Kennedy>Yeah.

00:19:41.500 --> 00:19:47.220
<v Michael Kennedy>And also, yes, also being a subject matter expert combined with some coding skills is absolutely.

00:19:47.920 --> 00:19:48.280
<v Michael Kennedy>100%.

00:19:48.340 --> 00:19:50.700
<v Michael Kennedy>It does make being a generalist a little more useful.

00:19:51.120 --> 00:19:51.660
<v Michael Kennedy>Yeah, actually.

00:19:51.860 --> 00:19:53.520
<v Michael Kennedy>Not exclusively, but also.

00:19:53.940 --> 00:19:56.200
<v Calvin Hendryx-Parker>I finally come into my own being the generalist that I am.

00:19:56.280 --> 00:19:56.860
<v Calvin Hendryx-Parker>Yes, exactly.

00:19:57.020 --> 00:19:57.180
<v Calvin Hendryx-Parker>Me too.

00:19:57.360 --> 00:19:58.400
<v Calvin Hendryx-Parker>My time is here.

00:19:58.960 --> 00:19:59.540
<v Calvin Hendryx-Parker>It's incredible.

00:19:59.820 --> 00:20:00.640
<v Calvin Hendryx-Parker>I can do all the things.

00:20:00.810 --> 00:20:03.660
<v Calvin Hendryx-Parker>Well, I mean, I've just found myself building so much more stuff now.

00:20:03.910 --> 00:20:06.040
<v Calvin Hendryx-Parker>Like I know the patterns I wanted to get done.

00:20:06.160 --> 00:20:07.980
<v Calvin Hendryx-Parker>And it was just a lot of busy work that I didn't feel like doing.

00:20:08.140 --> 00:20:09.480
<v Calvin Hendryx-Parker>but now I can make those tools super quick.

00:20:09.880 --> 00:20:10.220
<v Calvin Hendryx-Parker>I love it.

00:20:10.660 --> 00:20:10.940
<v Michael Kennedy>Big fan.

00:20:11.600 --> 00:20:12.760
<v Michael Kennedy>Yeah, big fan, big fan.

00:20:12.960 --> 00:20:15.320
<v Michael Kennedy>And it's like, well, if it took me two hours, this is worth it.

00:20:15.440 --> 00:20:16.860
<v Michael Kennedy>If it took me two weeks, it's not worth it.

00:20:17.060 --> 00:20:17.320
<v Michael Kennedy>Totally.

00:20:17.900 --> 00:20:18.980
<v Michael Kennedy>Now it takes you two hours.

00:20:19.220 --> 00:20:20.100
<v Michael Kennedy>That's absolutely the math.

00:20:20.660 --> 00:20:21.020
<v Michael Kennedy>All right.

00:20:22.320 --> 00:20:24.640
<v Michael Kennedy>And you can power it over your framework in the basement.

00:20:24.940 --> 00:20:25.020
<v Michael Kennedy>Okay.

00:20:25.340 --> 00:20:25.720
<v Michael Kennedy>That's true.

00:20:25.780 --> 00:20:27.520
<v Michael Kennedy>So let's go and jump into extras.

00:20:27.580 --> 00:20:28.140
<v Michael Kennedy>Yes.

00:20:28.340 --> 00:20:30.980
<v Michael Kennedy>And I already got my screen up, so I'll just grab the first one here.

00:20:31.080 --> 00:20:31.420
<v Michael Kennedy>Go for it.

00:20:32.640 --> 00:20:37.420
<v Michael Kennedy>So I wrote a blog post inspired by a guy named Pito,

00:20:37.900 --> 00:20:42.020
<v Michael Kennedy>who had reached out to us because you and I both were a fan talking about how

00:20:42.380 --> 00:20:44.340
<v Michael Kennedy>ELS instead of LS is quite cool.

00:20:44.720 --> 00:20:45.280
<v Michael Kennedy>It is quite cool.

00:20:45.640 --> 00:20:46.380
<v Michael Kennedy>It is quite cool.

00:20:46.590 --> 00:20:50.420
<v Michael Kennedy>You can go and when you LS on something,

00:20:50.420 --> 00:20:51.380
<v Michael Kennedy>if you alias it,

00:20:51.660 --> 00:20:52.700
<v Michael Kennedy>although that has some drawbacks,

00:20:52.860 --> 00:20:54.760
<v Michael Kennedy>it uses color for like hidden file,

00:20:54.850 --> 00:20:55.280
<v Michael Kennedy>like GitHub.

00:20:55.720 --> 00:20:57.160
<v Michael Kennedy>.github is shown if you LS,

00:20:57.430 --> 00:20:58.860
<v Michael Kennedy>even though it's technically hidden,

00:20:59.320 --> 00:21:02.140
<v Michael Kennedy>but it uses color to show that it's like .gitignored.

00:21:03.140 --> 00:21:04.700
<v Michael Kennedy>It shows symlinks,

00:21:05.000 --> 00:21:05.740
<v Michael Kennedy>which is really cool.

00:21:05.980 --> 00:21:08.680
<v Michael Kennedy>I've learned how to create a symlink in Git.

00:21:08.870 --> 00:21:11.780
<v Michael Kennedy>So when you check it out, it's symlinks on the new machine, which is always fun.

00:21:12.280 --> 00:21:14.280
<v Michael Kennedy>Use this icon, all this stuff is super cool.

00:21:14.660 --> 00:21:18.480
<v Michael Kennedy>But Pito pointed out something is weird with installing this package.

00:21:19.020 --> 00:21:23.760
<v Michael Kennedy>If you click on the PyPI link, it says version six, some of the links

00:21:24.180 --> 00:21:25.440
<v Michael Kennedy>404, which is kind of weird.

00:21:25.680 --> 00:21:29.960
<v Michael Kennedy>But then if I actually go and click on say the repository, it takes me to

00:21:29.960 --> 00:21:33.340
<v Michael Kennedy>the rust based ones like, oh, this must be the rust one.

00:21:33.420 --> 00:21:37.220
<v Michael Kennedy>Because when I go to the PyPI and I click on the repo, it goes to the Rust one.

00:21:37.400 --> 00:21:39.420
<v Michael Kennedy>He points out, no, that's the Python one.

00:21:39.760 --> 00:21:42.840
<v Michael Kennedy>And I'm like, wait a minute, is there something sus going on with this thing?

00:21:43.360 --> 00:21:45.660
<v Michael Kennedy>And he inspired me to dig into it.

00:21:45.800 --> 00:21:51.900
<v Michael Kennedy>So what is going on is GitHub is redirecting to the newer version when you click on it.

00:21:52.200 --> 00:21:55.500
<v Michael Kennedy>But PyPI actually installs a frozen 2023 version.

00:21:56.000 --> 00:21:57.180
<v Michael Kennedy>So I wrote this really short article.

00:21:57.520 --> 00:21:58.040
<v Michael Kennedy>I didn't know that.

00:21:58.340 --> 00:21:58.820
<v Michael Kennedy>Yes, I know.

00:21:58.860 --> 00:22:04.480
<v Michael Kennedy>I didn't either because everything about it like redirects to the one that you think you're going to want, but it's not.

00:22:04.820 --> 00:22:09.380
<v Michael Kennedy>So anyway, it talks about like, okay, did you install this with uv or PIPX or somehow pip install?

00:22:09.880 --> 00:22:16.480
<v Michael Kennedy>If you did, you're getting the old frozen in place slower one that you think is not what you're getting, but that's what you're getting.

00:22:16.880 --> 00:22:18.340
<v Michael Kennedy>And here's how to actually install it.

00:22:18.620 --> 00:22:19.640
<v Michael Kennedy>Well, I'm going to go do that.

00:22:20.260 --> 00:22:20.780
<v Michael Kennedy>Yes, exactly.

00:22:20.900 --> 00:22:23.320
<v Michael Kennedy>So I wrote a really short write up about this.

00:22:23.600 --> 00:22:24.240
<v Michael Kennedy>What the PLS?

00:22:26.660 --> 00:22:27.780
<v Michael Kennedy>What the PLS, PLS?

00:22:27.820 --> 00:22:28.340
<v Michael Kennedy>Come on now.

00:22:29.160 --> 00:22:34.020
<v Michael Kennedy>all right kyle well if you think that makes your command line glamorous i've got something for you

00:22:34.220 --> 00:22:39.620
<v Calvin Hendryx-Parker>you're gonna crush it they were gonna remember to your first crush this i mean because the command

00:22:39.650 --> 00:22:44.360
<v Calvin Hendryx-Parker>line was probably my first crush if i'm gonna be honest out there and if you want your command line

00:22:44.360 --> 00:22:51.660
<v Calvin Hendryx-Parker>to look absolutely beautiful and glamorous there's a library out here called charm that can do all

00:22:51.780 --> 00:22:58.400
<v Calvin Hendryx-Parker>kinds of fun uh extensions so forms and uh it's got interfaces to build inside there with like

00:22:58.440 --> 00:23:04.620
<v Calvin Hendryx-Parker>ssh animations physics based animations you know get the bubble tea component for your toolkit

00:23:05.210 --> 00:23:11.480
<v Calvin Hendryx-Parker>so you should definitely check out uh crush or no sorry it's charm.land to add some fun bling

00:23:11.690 --> 00:23:17.600
<v Calvin Hendryx-Parker>to your terminal so if you think that if pls was just the start uh oh my goodness charm is gonna

00:23:17.920 --> 00:23:23.420
<v Michael Kennedy>you're gonna be busy uh michael going down the rabbit hole dang it i was just starting to work

00:23:23.300 --> 00:23:25.020
<v Michael Kennedy>on some projects and now here I am.

00:23:25.440 --> 00:23:25.540
<v Michael Kennedy>Yeah.

00:23:25.700 --> 00:23:27.700
<v Michael Kennedy>Rebuilding my terminal prompt again.

00:23:28.160 --> 00:23:28.260
<v Calvin Hendryx-Parker>Yep.

00:23:28.510 --> 00:23:29.280
<v Calvin Hendryx-Parker>It looks pretty cool.

00:23:29.430 --> 00:23:30.460
<v Calvin Hendryx-Parker>So I've not checked it out.

00:23:31.180 --> 00:23:33.420
<v Calvin Hendryx-Parker>I think the open code folks may be using some of this.

00:23:34.450 --> 00:23:36.660
<v Calvin Hendryx-Parker>But yeah, it looks like a lot of fun.

00:23:37.130 --> 00:23:40.500
<v Calvin Hendryx-Parker>So if you want to go bling your terminal, this is a way to do it.

00:23:40.820 --> 00:23:42.200
<v Michael Kennedy>And it's not very popular, is it?

00:23:42.520 --> 00:23:43.220
<v Calvin Hendryx-Parker>No, not at all.

00:23:43.380 --> 00:23:45.580
<v Calvin Hendryx-Parker>213,000 stars over on GitHub.

00:23:46.030 --> 00:23:46.360
<v Calvin Hendryx-Parker>Not bad.

00:23:46.660 --> 00:23:47.180
<v Calvin Hendryx-Parker>Pretty cool.

00:23:47.470 --> 00:23:49.440
<v Calvin Hendryx-Parker>Add some fun to your terminal.

00:23:50.080 --> 00:23:52.160
<v Calvin Hendryx-Parker>The other bit, and I kind of already alluded to this,

00:23:52.540 --> 00:23:55.840
<v Calvin Hendryx-Parker>was building a fully local voice assistant in 2026

00:23:56.900 --> 00:23:57.260
<v Calvin Hendryx-Parker>using Python.

00:23:57.590 --> 00:23:59.760
<v Calvin Hendryx-Parker>So this actually is a Raspberry Pi friendly version.

00:23:59.990 --> 00:24:01.660
<v Calvin Hendryx-Parker>As for those of you who are following along at home,

00:24:01.840 --> 00:24:03.540
<v Calvin Hendryx-Parker>I've been doing the more ridiculous version

00:24:03.700 --> 00:24:05.000
<v Calvin Hendryx-Parker>with like a RTX 3070,

00:24:05.620 --> 00:24:08.400
<v Calvin Hendryx-Parker>running my voice models on a giant graphics card.

00:24:08.840 --> 00:24:10.320
<v Calvin Hendryx-Parker>This runs on a Raspberry Pi.

00:24:10.600 --> 00:24:11.620
<v Calvin Hendryx-Parker>A couple of different models.

00:24:12.420 --> 00:24:13.880
<v Calvin Hendryx-Parker>He mentions here in the article

00:24:14.080 --> 00:24:18.100
<v Calvin Hendryx-Parker>with the full architecture and how to set it all up

00:24:18.200 --> 00:24:18.840
<v Calvin Hendryx-Parker>and how to get it going.

00:24:19.470 --> 00:24:21.340
<v Calvin Hendryx-Parker>And you can even run it on old Raspberry Pis.

00:24:22.040 --> 00:24:26.580
<v Calvin Hendryx-Parker>So there's a 40 meg model, the small 015 version.

00:24:26.680 --> 00:24:27.000
<v Calvin Hendryx-Parker>Meg.

00:24:27.460 --> 00:24:28.300
<v Calvin Hendryx-Parker>Yeah, megabyte.

00:24:29.260 --> 00:24:29.620
<v Calvin Hendryx-Parker>Megabyte.

00:24:29.930 --> 00:24:30.020
<v Calvin Hendryx-Parker>Yeah.

00:24:30.050 --> 00:24:30.380
<v Calvin Hendryx-Parker>Wow, okay.

00:24:31.140 --> 00:24:33.840
<v Calvin Hendryx-Parker>Inaccurate, but we'll run all of those.

00:24:34.180 --> 00:24:34.960
<v Calvin Hendryx-Parker>So if you've got a more

00:24:34.960 --> 00:24:36.060
<v Calvin Hendryx-Parker>So it's like Siri, basically.

00:24:39.180 --> 00:24:39.440
<v Calvin Hendryx-Parker>Yeah.

00:24:39.580 --> 00:24:41.720
<v Michael Kennedy>Wow, shots fired.

00:24:41.720 --> 00:24:42.920
<v Michael Kennedy>It's default failure mode.

00:24:42.920 --> 00:24:44.500
<v Michael Kennedy>This is what I found on the internet.

00:24:45.280 --> 00:24:45.640
<v Calvin Hendryx-Parker>Yeah.

00:24:45.640 --> 00:24:48.560
<v Calvin Hendryx-Parker>But you can see even the largest one, 1.8 gig,

00:24:48.560 --> 00:24:50.700
<v Calvin Hendryx-Parker>you can even run that on probably the largest

00:24:50.720 --> 00:24:52.080
<v Calvin Hendryx-Parker>just of Raspberry Pis that are out there,

00:24:52.480 --> 00:24:53.540
<v Calvin Hendryx-Parker>or just on a CPU,

00:24:54.000 --> 00:24:55.780
<v Calvin Hendryx-Parker>and not have to use a full blown GPU

00:24:56.540 --> 00:24:58.000
<v Calvin Hendryx-Parker>to run your voice pipeline.

00:24:58.500 --> 00:25:00.840
<v Calvin Hendryx-Parker>This is part of the Platypush platform,

00:25:01.320 --> 00:25:03.320
<v Calvin Hendryx-Parker>which is not necessarily a competitive Home Assistant,

00:25:03.520 --> 00:25:04.500
<v Calvin Hendryx-Parker>but is like Home Assistant,

00:25:04.780 --> 00:25:07.060
<v Calvin Hendryx-Parker>in that you can glue together Zigbee

00:25:07.980 --> 00:25:09.820
<v Calvin Hendryx-Parker>and Wi-Fi IoT devices

00:25:10.220 --> 00:25:11.760
<v Calvin Hendryx-Parker>and all those kinds of things inside your house.

00:25:12.020 --> 00:25:13.580
<v Calvin Hendryx-Parker>So I just thought that was really interesting

00:25:13.720 --> 00:25:17.260
<v Calvin Hendryx-Parker>because it's on my list of things to keep up to date on,

00:25:17.480 --> 00:25:21.400
<v Calvin Hendryx-Parker>which is I want to replace all the ladies in the box in my house,

00:25:21.900 --> 00:25:22.400
<v Calvin Hendryx-Parker>if you know what I mean.

00:25:22.880 --> 00:25:23.000
<v Michael Kennedy>Yeah.

00:25:23.440 --> 00:25:24.080
<v Michael Kennedy>And that's what I got.

00:25:24.080 --> 00:25:25.800
<v Michael Kennedy>What about something?

00:25:26.300 --> 00:25:27.320
<v Michael Kennedy>You're a Docker person.

00:25:27.680 --> 00:25:27.900
<v Michael Kennedy>I am.

00:25:29.070 --> 00:25:30.440
<v Michael Kennedy>And you've done a lot of local Docker.

00:25:30.700 --> 00:25:32.000
<v Michael Kennedy>I'm more of a server Docker.

00:25:32.480 --> 00:25:33.920
<v Michael Kennedy>One of the things I think would be really cool,

00:25:34.000 --> 00:25:37.380
<v Michael Kennedy>it'd be so easy to set this into an always auto starting

00:25:37.620 --> 00:25:39.880
<v Michael Kennedy>and less stopped sort of Docker thing.

00:25:40.300 --> 00:25:41.860
<v Michael Kennedy>But at least on macOS,

00:25:42.520 --> 00:25:44.980
<v Michael Kennedy>can you give it access to the GPUs or NPUs?

00:25:45.720 --> 00:25:46.100
<v Michael Kennedy>You know what I mean?

00:25:46.180 --> 00:25:50.280
<v Michael Kennedy>because it's basically Linux within macOS,

00:25:50.470 --> 00:25:51.640
<v Michael Kennedy>which is not exactly the same.

00:25:51.640 --> 00:25:55.720
<v Calvin Hendryx-Parker>I have not tried the GPU on Docker with macOS.

00:25:56.060 --> 00:25:57.160
<v Calvin Hendryx-Parker>I am using this on,

00:25:57.300 --> 00:26:01.940
<v Calvin Hendryx-Parker>I have installed Proxmox onto the AMD box downstairs

00:26:02.190 --> 00:26:05.660
<v Calvin Hendryx-Parker>that has the CUDA card in it, the 3070 card.

00:26:06.280 --> 00:26:09.660
<v Calvin Hendryx-Parker>And in that one, you absolutely can pass with Proxmox,

00:26:09.710 --> 00:26:10.660
<v Calvin Hendryx-Parker>the GPU drivers.

00:26:10.750 --> 00:26:13.700
<v Calvin Hendryx-Parker>And you just have to make sure you get the CUDA drivers installed.

00:26:14.480 --> 00:26:15.880
<v Calvin Hendryx-Parker>Proxmox doesn't come with them out of the box.

00:26:16.200 --> 00:26:17.960
<v Calvin Hendryx-Parker>but you can install them onto Proxmox.

00:26:18.030 --> 00:26:21.000
<v Calvin Hendryx-Parker>And once you do, you can pass through either shared access

00:26:21.180 --> 00:26:22.760
<v Calvin Hendryx-Parker>or dedicated access to the containers.

00:26:22.960 --> 00:26:26.860
<v Calvin Hendryx-Parker>I'm using containers to run all my voice assistant stuff on the Proxmox.

00:26:27.040 --> 00:26:27.780
<v Calvin Hendryx-Parker>Sweet. Okay.

00:26:28.080 --> 00:26:29.380
<v Calvin Hendryx-Parker>So that is absolutely possible on Linux.

00:26:30.280 --> 00:26:32.720
<v Calvin Hendryx-Parker>And Proxmox makes it just stupid easy to do.

00:26:33.040 --> 00:26:35.800
<v Michael Kennedy>Nice. Yeah, I have this nice Mac Mini M4 Pro sitting around.

00:26:35.900 --> 00:26:37.440
<v Michael Kennedy>I would love to just fire things up.

00:26:37.450 --> 00:26:39.380
<v Michael Kennedy>But all the stuff that requires sort of some acceleration,

00:26:39.720 --> 00:26:40.920
<v Michael Kennedy>it's like sometimes slower.

00:26:41.400 --> 00:26:42.800
<v Michael Kennedy>Maybe I don't really want it that much.

00:26:43.680 --> 00:26:48.680
<v Calvin Hendryx-Parker>Well, since I had that RTX that was donated by my child to me, I was like, I'll use that

00:26:48.780 --> 00:26:52.220
<v Calvin Hendryx-Parker>because it's going to be the fastest tokens per second, but it's only an eight gigabyte

00:26:52.600 --> 00:26:52.860
<v Calvin Hendryx-Parker>VRAM.

00:26:53.060 --> 00:26:55.840
<v Calvin Hendryx-Parker>So whatever I can fit into that eight gig goes very fast.

00:26:56.200 --> 00:26:56.620
<v Calvin Hendryx-Parker>Yeah, perfect.

00:26:57.560 --> 00:26:57.920
<v Michael Kennedy>All right.

00:26:58.540 --> 00:27:00.660
<v Michael Kennedy>Let's finish this up with a joke.

00:27:01.350 --> 00:27:04.380
<v Michael Kennedy>So this one comes to us from Jeff Triplett.

00:27:04.480 --> 00:27:05.040
<v Michael Kennedy>This one's good.

00:27:05.340 --> 00:27:05.900
<v Michael Kennedy>Have you seen this?

00:27:06.060 --> 00:27:06.800
<v Michael Kennedy>I have seen this.

00:27:07.040 --> 00:27:08.580
<v Michael Kennedy>The team's been talking about it.

00:27:09.280 --> 00:27:12.560
<v Michael Kennedy>Yeah, it's well, I think you all should adopt this for your project.

00:27:12.800 --> 00:27:13.440
<v Calvin Hendryx-Parker>We totally should.

00:27:13.660 --> 00:27:24.040
<v Michael Kennedy>You let me look. A lot of times people create this kind of little not so easy to understand thing as a way to like get creepy repeat business or to not.

00:27:24.260 --> 00:27:26.980
<v Michael Kennedy>You can't fire me. I'm the only one that knows how the what to do.

00:27:27.220 --> 00:27:31.620
<v Calvin Hendryx-Parker>And CSS was already crystal clear with how to author it.

00:27:31.940 --> 00:27:36.580
<v Michael Kennedy>Indeed. So what we get here is a legit CSS framework called Bmoji.

00:27:36.960 --> 00:27:39.980
<v Michael Kennedy>It's the CSS framework that your team will actually argue about.

00:27:40.260 --> 00:27:52.700
<v Michael Kennedy>And so here's what's going on with this is why waste all the characters when you could have something much more discoverable or understandable with emojis?

00:27:53.180 --> 00:27:56.360
<v Michael Kennedy>Right. I mean, this totally makes sense. I'm here for it.

00:27:57.660 --> 00:28:04.940
<v Michael Kennedy>So if you don't even know. So, for example, you might want to talk about like a hero image and you want to stylize it.

00:28:05.360 --> 00:28:09.640
<v Michael Kennedy>So you would say joker emoji underscore underscore picture frame emoji.

00:28:10.140 --> 00:28:14.000
<v Michael Kennedy>And like a lot of the utility classes, you would need to like specialize that.

00:28:14.010 --> 00:28:19.700
<v Michael Kennedy>So you would say joker emoji underscore underscore picture emoji --star, because this is your hero.

00:28:19.950 --> 00:28:20.340
<v Michael Kennedy>The hero.

00:28:21.600 --> 00:28:26.780
<v Michael Kennedy>And then there's the editable part, which is joker emoji underscore underscore notepad editor.

00:28:27.110 --> 00:28:29.420
<v Michael Kennedy>If you want to have a little card, like a written card.

00:28:29.530 --> 00:28:33.000
<v Michael Kennedy>And then joker underscore underscore ABCD for the title.

00:28:33.440 --> 00:28:38.620
<v Michael Kennedy>and joker underscore underscore quote emoji for a description bit so on the footer is the best

00:28:39.160 --> 00:28:44.060
<v Calvin Hendryx-Parker>okay the footer where's the footer oh right there the class is joker underscore underscore

00:28:44.660 --> 00:28:51.660
<v Michael Kennedy>foot emoji oh there it is yes it's literally the foot emoji what is the i guess the disabled is a

00:28:51.960 --> 00:28:57.400
<v Calvin Hendryx-Parker>a ghost yeah it's perfect i mean it's obvious you read that you know you know exactly what's going

00:28:57.300 --> 00:29:04.160
<v Michael Kennedy>on michael yes i i guess you do once you learn to speak the emoji about the block the element

00:29:04.780 --> 00:29:10.280
<v Michael Kennedy>oh it's so good i want a link you just put a link emoji on it anyway i'm not sure that i'm

00:29:10.280 --> 00:29:16.060
<v Michael Kennedy>gonna be adopting this um i've already done a couple major framework remodels so i put it on

00:29:16.060 --> 00:29:20.400
<v Michael Kennedy>our tech radar yeah it's gonna be important i mean you gotta you gotta stay on top of what's coming

00:29:20.500 --> 00:29:25.780
<v Michael Kennedy>in the industry and sometimes yep sometimes it's a ghost emoji i think i think that's a good place

00:29:25.800 --> 00:29:26.280
<v Michael Kennedy>to leave it, Calvin.

00:29:26.450 --> 00:29:27.240
<v Michael Kennedy>That is a good place.

00:29:27.590 --> 00:29:27.980
<v Michael Kennedy>I love it.

00:29:28.560 --> 00:29:28.940
<v Michael Kennedy>Thank you all.

00:29:28.980 --> 00:29:29.600
<v Michael Kennedy>That was a lot of fun.

00:29:29.800 --> 00:29:30.300
<v Michael Kennedy>Yeah, thanks.

00:29:30.440 --> 00:29:30.700
<v Michael Kennedy>See you later.

00:29:30.960 --> 00:29:31.100
<v Michael Kennedy>See ya.

