Brought to you by Michael - take a Talk Python course and support the show

#486: underscore-underscore-ghost-emoji

Published Tue, Jun 30, 2026, recorded Tue, Jun 30, 2026
0:00
00:29:31
Watch this episode on YouTube
Play on YouTube
Watch the live stream replay

Show Intro

Sponsored by us! Support our work through:

Calvin #1: Free-threaded Python: past, present, and future

  • The GIL has prevented true multi-threaded parallelism in CPython since the beginning — multiple past attempts to remove it failed on performance grounds
  • Sam Gross at Meta finally solved it; his work became PEP 703 and ships as free-threaded CPython today
  • Python 3.13 was experimental with 20–40% single-threaded slowdown; 3.14 brought that to 0–10%
  • Python 3.15 (October 2026) delivers a unified ABI — one extension binary works on both GIL and free-threaded builds
  • Already >50% of the top PyPI binary wheels support free threading
  • Wouters predicts free-threaded becomes the default between 3.16–3.20 (2027–2031), with the GIL eventually disappearing next decade

Michael #2: django-admin-site-search

  • via Adam Parkin
  • A global/site search modal for the Django admin, by Ahmed Aljawahiry. Hit cmd+k anywhere in the admin and you get a command-palette-style search window, kind of like the one in VS Code.
  • It doesn't just search one model's list page. It searches your entire site in one box:
    • App labels
    • Model labels and field attributes
    • Actual model instances (your data)
  • Two ways to search the instances:
    • model_char_fields (the default): runs an __icontains across every CharField (and subclasses) on the model. Zero config, works out of the box.
    • admin_search_fields: defers to each ModelAdmin's existing get_search_results(), so it respects the search_fields you've already set up.
  • The part I like: it's permission-aware out of the box. Users only see results for the apps and models they actually have view permission on, so you're not leaking anything through search.
  • Results appear as you type, with throttling/debouncing so you're not hammering the server on every keystroke, and it's full keyboard nav: cmd+k to open, up/down to move, enter to go.
  • It's responsive, does dark and light mode, and it pulls Django's built-in admin CSS variables so it just matches whatever admin theme you're running.
  • Under the hood it's Alpine.js, but bundled into static so there's no external CDN dependency.
  • Setup is about what you'd expect: pip install django-admin-site-search, add it to INSTALLED_APPS, mix the AdminSiteSearchView into your AdminSite, and drop a few template includes into base_site.html.
  • Supports Python 3.8 through 3.14 and Django 3.2 through 6.0, MIT licensed, and everything is overridable if you want to skip certain models, add TextField matching, etc.

Calvin #3: Qwen 3.6 27B is the sweet spot for local development

  • Qwen 3.6 27B is being called the first local model that genuinely competes as a general-purpose intelligence — benchmarks put it at roughly mid-2025 frontier level (comparable to GPT-5 / Claude Sonnet 4.5)
  • Runs locally via llama.cpp; on an M5 MacBook Max with 8-bit quantization + multi-token prediction, it hits ~32 tokens/sec using ~42GB RAM
  • 4-bit quantization gets it under 18GB, runnable on 32GB devices; Nvidia RTX cards run it even faster
  • The dense 27B is recommended over the faster MoE 35B A3B — author prefers higher quality output over raw speed
  • Privacy and reliability are the pitch: fine-tunable, can't be taken down, suitable for sensitive/proprietary data
  • Author sees this as a stepping stone — frontier open-weight models like GLM 5.2 are now locally runnable with company-grade hardware, and smarter-still local models are coming

Michael #4: A large batch of PEPs are finalized

  • A bunch of PEPs went from accepted to final.
    • 668, 687, 691, 699, 701, 703, 728, 770, 773, 829
  • But this wasn’t them making their way into CPython. It’s an admin sorta thing. (Thanks PyCoders)
  • See the commit.

Extras

Calvin:

  • More fun bling for your terminal this time - https://charm.land/

Michael:

Joke: BEMoji

  • A production-grade utility and component framework built entirely on emoji class names
  • via Jeff Triplett

Episode Transcript

Collapse transcript

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:04 your earbuds. This is episode 486, recorded June 30th, 2026. I'm Michael Kennedy.

00:11 And I'm Calvin Hendryx-Parker.

00:12 This episode is brought to you by us. Check out Six Feet Up if you want not just a consulting

00:18 partner, but an impactful consulting for good partner. And if you're looking to do better at

00:24 Python, data science, AI, check out Talk Python Training. I have three courses in the works right

00:30 which is interesting.

00:31 So there's going to be a lot of new stuff.

00:33 So be sure to either keep listening here where I'll tell you about it or sign up over there.

00:38 And speaking of signing up, pythonbytes.fm,

00:40 click on the newsletter.

00:41 You can sign up there and get notifications every week

00:43 as well as follow us on social media.

00:45 We got all the links for the show, Calvin and me.

00:48 Now, Calvin, your first item is something that has been sitting

00:51 in a browser tab on my computer for at least three days.

00:55 I'm like, oh, I need to read this.

00:56 Come on now.

00:57 And I haven't gotten to it.

00:58 So I'm really happy you're going to take care of that for me.

01:00 Well, how could you not mention this? There was a talk at PyCon 2026, and it's a perennial talk

01:07 that has probably happened for the last two decades, starting with Larry Hastings. I didn't

01:11 go look up exactly what year he started doing the Gilectomy project, but the idea is find free

01:17 threading in Python, past, present, and future. So there's been a lot of discussion in the past.

01:22 Like I said, there's over two decades of history going into solving this problem. This gets back

01:28 into Python and the global interpreter lock and what we've done in the past to try and improve

01:35 performance. So for those who are kind of new to Python, that a global interpreter lock really

01:41 makes it difficult to run a single Python process and leverage multiple cores in your computers.

01:46 But every modern computer today has how many, even the Raspberry Pis have many cores in them. So this

01:52 would be a huge boost, we think, to Python to be able to take advantage of more computing power

01:57 going on inside those CPUs. So basically the GIL has prevented this true multi-threaded parallelism

02:04 in CPython since the very beginning. There's been multiple attempts. Many of them have failed on

02:10 performance grounds. Once you remove this global interpreter lock, that overhead of managing IO,

02:16 memory, etc., all the pieces going back and forth, usually adds in 100% or more additional

02:23 performance load than giving you the performance you'd think you'd get by leveraging multiple CPUs.

02:28 We got free threading in what Python 3.13 was experimental. And so it's still a 20 to 40%

02:36 single threaded slowdown. 3.14 brought that from kind of zero to 10%. So look for Python 3.15

02:43 coming in October to deliver basically a unified story here. They've made a huge amount of progress

02:49 here. During the talk, it's interesting because this always brings out the OG Pythonistas,

02:56 the core developers in the room for these kinds of talks. Actually, one of the members of our team

03:00 was in that talk at PyCon. Larry Hastings got up to the mic and Thomas Wooters, basically,

03:06 they both kind of played off each other on how this all came about. And the punchline was the

03:12 things that made this possible didn't exist when Larry was trying to do this. So there's been a ton

03:17 of development and innovation in the Python core to make this all go. The big part about this is now

03:23 that we're going to have a unified ABI. So like basically the interfaces into using this free

03:28 threading is going to be more unified, which means the same extension binaries, like if you're writing

03:33 C extensions, can work both on the gil and on free threaded builds. And looks like already greater

03:38 than 50% of the PyPy binary wheels support free threading. So that's a huge, well the top, sorry,

03:44 top PyPy binaries, not all of them, but of the major ones, we've already got half adoption.

03:49 I think that's a huge boost. I think there was a prediction made on from the stage that

03:55 free-threaded may become the default version of Python, but we'll see what happens.

04:00 Oh, excellent.

04:01 So have you followed along with this Gil story, Michael?

04:04 Yeah, everyone has.

04:06 I love at least having the capability to do threading. I would love to see this kind of

04:14 seamlessly integrated into async io i was just reading a reddit post about somebody who was

04:20 hating on async io async and await in particular and no it might not be the cleanest easiest

04:26 programming model in the world not python in particular but just in general but it's better

04:30 than managing a bunch of threads or processes or you know it's it's i think it's really quite neat

04:37 and lightweight but it's big limitation is as soon as you get anything computational boom

04:43 like the whole thing stops right yeah and so if you could just say you know put a decorator onto

04:49 a function like cpu bound or something or somehow you know kick it off with some kind of you know

04:54 computational thing but clearly like just await make that awaitable in the same event loop that

05:00 would be awesome yeah no this is a really good article from the Linux weekly news uh really in

05:05 depth coverage by jake on this site so i highly recommend folks who are interested in the history

05:09 and what the future is going to be, check this out because we're finally going to have

05:13 free threading in Python.

05:14 Awesome.

05:15 So if you were running like a Django site, I don't know, wouldn't it be cool?

05:19 Wouldn't it be cool to, I don't know, search your admin site in the same way that you do?

05:25 No, Michael.

05:27 Like really nice, say, Visual Studio code.

05:31 You can hit shift command P for your command palette or in Vivaldo, you can just hit command K

05:36 and you could say, I don't know, copy all the links on the page by just typing a thing or two.

05:43 So thanks to Adam Parkin, I introduce Django admin site search.

05:48 And it's quite a slick thing.

05:50 It's fairly new.

05:51 It could use some more stars.

05:51 So there, it got one more.

05:53 In real time.

05:54 Real time update.

05:54 In real time.

05:55 Yeah, so you just hit command K like I just did in Vivaldi.

05:58 And by the way, if you do Vivaldi, you might need to remap one or the other, but whatever.

06:02 And then it brings up this nice search.

06:04 People probably familiar with this with some of the docs, like, the great

06:08 docs, docs have this and lots of others, but the idea is that it's really

06:13 deeply integrated into understanding what your, your Django needs.

06:17 So there's a little, little animated video here as by the way,

06:21 everyone out there building this, if you're building something specifically

06:24 to do with UI at a minimum needs a screenshot.

06:27 I've seen like entire, like web website design frameworks that have had like

06:32 zero, zero pictures.

06:34 I'm like, I have no idea what you're talking about.

06:36 Like the words sound good, but picture people.

06:38 They'll resort to interpretive dance before they'll

06:40 put a screencast in.

06:41 Yeah, exactly.

06:42 Exactly.

06:42 So the idea is it just works out of the box, basically very little config.

06:47 It's when you type something into it, it searches app labels, model labels

06:51 and fields and model instances.

06:54 And what's cool about it is it can search in two different ways.

06:57 So for smaller sites or sort of ad hoc searches, it will

07:02 and dunder, I can, not a dunder, underscore underscore I contains,

07:05 which is, is any part of this text I've typed contained within here

07:10 without regard to case, right?

07:12 That's cool, but that's not always indexed, right?

07:16 I mean, not every single field has an index for these sorts of things.

07:19 So that can be slow on large projects.

07:21 So you can also tell it, use the model admins get search results method,

07:26 which can be an indexed query.

07:29 That's cool, right?

07:29 That's super cool.

07:30 And this is super nice.

07:32 I've seen a couple of people doing work on the admin.

07:34 This is a much-needed feature.

07:36 Yeah, I think it's really neat.

07:37 It has a built-in auth, so users can only search apps and models

07:40 that they have permissions to view.

07:42 Results appear on type.

07:44 It's active search, I guess, is the way you would describe it.

07:48 And keyboard navigation.

07:49 So obviously Command K, like I said.

07:51 It's a must.

07:53 It's a good one.

07:55 You know what?

07:55 I think, no.

07:57 I think, yeah, I think that's the default on Chrome.

08:00 trying to figure out if that is, which one is it? I may have changed it. I think maybe command E is

08:04 the default on, I'm sorry, Vivaldi for its command palette, but you know, it's layers of command

08:10 palettes you might have to battle with. Anyway, it supports all the way back to 3.8. They don't even

08:14 care if Python's supported. They're going to support it. And Django 3.2 to 6. So yeah, that's

08:18 pretty much it. Super easy to add in. Not a lot, not a lot to do there, but it's customizable.

08:23 Yeah. No, I like that. I mean, as a Django developer, that's definitely a missing piece

08:28 because I feel like it's like the old days of the internet

08:30 where there was no search and you had to always know where to browse to

08:32 to find the things in the admin console.

08:35 Yeah.

08:35 This is going to save a lot of people a lot of time,

08:37 especially if you've got a larger Django app and you've got hundreds of models in there.

08:42 Like this is going to be a lifesaver.

08:44 And some people use the admin section for like all the admin staff of the Django site.

08:50 I don't recommend that, but...

08:51 I don't know.

08:52 I don't know either, but people do.

08:54 And so having this to navigate it, I think would be good, right?

08:56 True.

08:56 In a last minute crunch, when you're trying to triage something, that admin is indispensable.

09:00 I guess it depends, though.

09:02 You know, is this an internal company app that 20 people use and three people admin?

09:07 Yeah.

09:08 How serious you got to take that versus Instagram?

09:11 Right.

09:12 I bet it's not admin through the admin.

09:14 We should get some, we should find out.

09:15 We should get some inside news into whether they use the admin or not.

09:19 What if it is?

09:22 No, you should see ours.

09:23 Our is amazing.

09:24 Well, I can tell you right now, someone's going to mention it in the comments.

09:26 they're going to call us out.

09:27 Let's do it.

09:28 Let's do it.

09:29 We could ask an AI about it, probably.

09:31 A local AI.

09:32 And local AI, actually, this is really exciting.

09:34 I have been certainly on the bleeding edge of local AIs for quite some time,

09:39 running them on my framework desktop here.

09:41 And then I've always managed to try and buy a MacBook Pro with Apple Silicon

09:45 and then about as much memory as I can afford.

09:48 And so being able to run these local models has been mostly an experiment up to this date.

09:52 Gemma 4 has gotten really good.

09:54 Some of them, you know, Mistral, Dev, and Devstral have been really interesting for live coding agents.

10:01 But this article that came across my feed today, multiple people in the company actually posted this,

10:07 which is Quinn 3.627B is the sweet spot for local development.

10:13 So there's a couple models that just got released in the Quinn family of open weights models.

10:18 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.

10:27 On his M5 MacBook Max, he was getting 32 tokens per second with the 8-bit quantized version of it.

10:35 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.

10:45 I think they put a chart in here on the bottom.

10:48 But the nice bit about this article is he compares the various models,

10:52 what they're capable of inside the same family.

10:55 And it actually gives you a whole how-to on how to hook this up using LLAMA CPP and OpenCode.

11:01 And so you can actually rebuild the demos that the author wrote here.

11:05 So using OpenCode, hooked it up, and then wrote up a Minesweeper app,

11:10 and then again went into some depth on the performance metrics here.

11:14 So you can see the 3635B A3B model on the Apple MLX,

11:19 85 tokens per second running with that model.

11:22 That is incredibly usable.

11:24 But the real sweet spot for the development was using Lama CPP and getting 32 tokens per second

11:31 using about 42 gig of RAM.

11:32 So if you've got a 64 gig machine, this is absolutely doable for developers

11:37 that are out there today and felt like it was, I mean, this is not gonna be like mind blowing

11:43 for anyone who's already using frontier level models like Opus and Sonnet and GPT-55 codecs to

11:48 do code, but this is local. Everything stays on your machine. The data never leaves. It's tool

11:56 using, so there's still risk. You're using models that have been trained by foreign nations and who

12:02 knows what's going on inside of these things, but this one seems to be gaining a lot of traction

12:06 and actually producing, you know, I don't think it's mythos level yet, but we're only, what, maybe

12:12 six, nine months behind on open waste models that I can run myself. So this looks really good.

12:17 The interesting thing he also pointed out in the article was, and I wasn't aware of it,

12:21 the, I've been an OLAMA user for quite some time. And I think I'm going to be switching to the

12:26 LAMA CPP version. There's, there's been some authorship and IP concerns between the two groups

12:34 that I wasn't aware of. And I think I feel like to be responsible, I should switch over to using

12:40 that or I'm considering VLLM on my framework desktop so that I can run multiple models

12:45 simultaneously and have multiple instances of the same model running so that, for example,

12:49 my home assistant can have multiple people in the house make requests simultaneously.

12:54 So this is pretty exciting. I can't, I've not tried 3.6. I have 3.5 currently running

12:59 on my desktop at the moment. And that has been impressive from a home assistant standpoint. I've

13:04 not used it for much of my coding agents, but I'm going to give 3.6.27b a real shot using

13:10 I've been using, again, Pi, still my daily driver.

13:13 There was a new release of Superpowers since our last episode

13:16 that has made the Pi experience a lot more user-friendly and smooth.

13:21 So check that out with Quinn36.

13:23 It's really neat.

13:24 One thing is, can you pull up that speed?

13:26 Yeah.

13:28 I love how they have like a heat picture.

13:31 It's definitely going to heat up your laptop if you're using these tools.

13:35 What surprises me on macOS is that MLX is the slowest.

13:40 i know i was surprised that too i think he mentions it down here in the text um rtx consumer rtx if

13:46 you've got enough vram on that card that is the way to go if you're serious about running these

13:51 models i believe but just the standard llama cpp plus mtp uh with that quantized version 105 tokens

13:58 per second that's but but 32 tokens per second is plenty fast for doing code dev where you're

14:05 you're in it you're reviewing you're using it as a true assistant and you're not trying to just

14:08 vibe code away an app. Another takeaway that when I see anything like this, definitely a cool topic,

14:14 is I don't know what percentage of people it is out there. Maybe I'd love to hear your thoughts

14:18 on this, but I think there's certainly a strong contingent of people out there who want AI to go

14:25 away or think the bubble's going to burst and it's just not worth getting into or paying attention to.

14:30 Like I know OpenAI or Anthropic or whatever, the whole thing is just going to go up like in a

14:36 smoking dumpster fire in six months so why would I change the way I work and

14:40 melt my brain and whatever else you leave people say about it this stuff is

14:44 not going away this is on this is here right this is on a hugging face the

14:48 models are published on hugging face this is open open source and published I

14:52 say open source I shouldn't say open source they're open weights some of the

14:55 models are fully open source but this is this is sustainable maintainable and a

15:06 sides of that equation, the answer lies in the middle. And the answer really is that these tools

15:12 are great amplifiers of your existing skills. So if you're already good at the software development

15:18 lifecycle, these things make you better. If you're not good at it, these things can make you worse.

15:22 Exactly. You have no idea? That's called vibe coding.

15:25 Right. Let's all be realistic about what this is all about.

15:30 Yeah. And I'm also jealous of your framework.

15:32 So, I mean, side note, Apple raised their prices this week on MacBook Pros.

15:39 I went and double checked and Framework had raised their prices too.

15:41 So the same 128 gigabyte machine is like about six or $700 more than it was a year ago.

15:49 Wow.

15:49 Yeah.

15:50 I don't know.

15:50 Maybe I'll have a...

15:52 I was going to start this episode with a good morning.

15:56 Good morning, everyone.

15:58 at apple we're so we've been so honored and proud to have pretty good fleeced you on ram and

16:07 on nvvm that today we're taking it to an entirely new level like

16:14 oh my goodness yeah so the price is like you're gonna be you're gonna be excited michael oh boy

16:20 let me tell you what we we're gonna bring on calvin to show you what we've built and boy is

16:24 expensive no like seriously just really quick follow-up to the sidebar like my i think my macbook

16:31 pro 16 inch which i just bought just received i bought it a little bit before because it took a

16:36 while but just got two weeks ago something like that i think it went up eight hundred dollars yeah

16:42 i i luckily i bought two in preparation for this prior to the rise in price so i just saved

16:47 myself sixteen hundred dollars that's awesome there's some guy math we could do there's totally

16:52 some guy math going on here all right what are we gonna spend it on let's let's exactly let's talk

16:57 about uh we're spinning on motorcycles calvin you know what we're gonna spend it we're absolutely

17:02 gonna spend our motorcycles so i would i would like to tell people about what might be the largest

17:08 single PEP except finalization in in one batch ever good go on that sounds like this sounds

17:15 exciting it sounds exciting it's more interest like oh that's weird interesting so all in one

17:23 one go i believe these are right perhaps i might be off by i think i might be off by one anyway

17:27 it's basically six six eight six eight seven six nine one there's like 10 peps or something that

17:33 got fine with the final just all at one shot then when you look at them carefully so i i linked to

17:38 the um 11 yeah it's 11 false chains i linked to the commit that did all this and so you'll see

17:45 like if we expand it here, the diff is not always perfect.

17:49 Pep 668 making Python based environments externally managed.

17:53 But if you go over and you check out Pep Pep 668, which is here, it was created.

18:01 Wow.

18:02 May 20, 2021.

18:04 House clean.

18:05 Others are like 2023 and so on.

18:06 So what had happened here?

18:08 Oh gosh, I forgot who, who did the switch.

18:10 I guess I could probably look at the commit zero intensity, which is

18:14 Peter, I didn't really need to click on that. In fact, that was useless. Peter Birma,

18:22 core developer, did all this. And what it really is, is there have been all these peps that were

18:28 sitting in accepted, but not final. And accepted means, well, accepted final means it's shipping.

18:34 But clearly the one that went, was out and accepted and final in 2021 is out. So there's

18:40 just a bunch of peps 11 in particular that were just hanging around and never ever got moved to

18:46 final for some reason you know reasons i don't know someone was not a completionist exactly yes

18:52 yeah exactly someone's like oh we're gonna get all the little badges baby all the badges that we put

18:59 on here yeah so for example this one is uh 2022 october 2022 and so on so i just think this

19:05 is kind of interesting and people have been looking at these these older peps and going like

19:09 Why is this not final?

19:11 Why is it just accepted?

19:12 Well, you called it out.

19:13 Not completionist.

19:14 Yeah, I'm glad.

19:15 Well, it's nice to see those all cleaned up so that at least there's a canonical source of the truth here.

19:20 Yeah, absolutely.

19:20 I totally agree.

19:23 Bit of comment out in the audience here.

19:25 We've got Pixel.

19:26 It says, like the sentence, it makes you worth if you don't know the software cycle.

19:32 Because I saw people during Vibe Coding, and they're happy,

19:35 but they didn't know what it actually makes them worth.

19:39 But yeah, it's interesting.

19:39 Very true statement.

19:41 Yeah.

19:41 And also, yes, also being a subject matter expert combined with some coding skills is absolutely.

19:47 100%.

19:48 It does make being a generalist a little more useful.

19:51 Yeah, actually.

19:51 Not exclusively, but also.

19:53 I finally come into my own being the generalist that I am.

19:56 Yes, exactly.

19:57 Me too.

19:57 My time is here.

19:58 It's incredible.

19:59 I can do all the things.

20:00 Well, I mean, I've just found myself building so much more stuff now.

20:03 Like I know the patterns I wanted to get done.

20:06 And it was just a lot of busy work that I didn't feel like doing.

20:08 but now I can make those tools super quick.

20:09 I love it.

20:10 Big fan.

20:11 Yeah, big fan, big fan.

20:12 And it's like, well, if it took me two hours, this is worth it.

20:15 If it took me two weeks, it's not worth it.

20:17 Totally.

20:17 Now it takes you two hours.

20:19 That's absolutely the math.

20:20 All right.

20:22 And you can power it over your framework in the basement.

20:24 Okay.

20:25 That's true.

20:25 So let's go and jump into extras.

20:27 Yes.

20:28 And I already got my screen up, so I'll just grab the first one here.

20:31 Go for it.

20:32 So I wrote a blog post inspired by a guy named Pito, who had reached out to us because you and I both were a fan talking about how

20:42 ELS instead of LS is quite cool.

20:44 It is quite cool.

20:45 It is quite cool.

20:46 You can go and when you LS on something, if you alias it,

20:51 although that has some drawbacks, it uses color for like hidden file,

20:54 like GitHub.

20:55 .github is shown if you LS, even though it's technically hidden,

20:59 but it uses color to show that it's like .gitignored.

21:03 It shows symlinks, which is really cool.

21:05 I've learned how to create a symlink in Git.

21:08 So when you check it out, it's symlinks on the new machine, which is always fun.

21:12 Use this icon, all this stuff is super cool.

21:14 But Pito pointed out something is weird with installing this package.

21:19 If you click on the PyPI link, it says version six, some of the links

21:24 404, which is kind of weird.

21:25 But then if I actually go and click on say the repository, it takes me to

21:29 the rust based ones like, oh, this must be the rust one.

21:33 Because when I go to the PyPI and I click on the repo, it goes to the Rust one.

21:37 He points out, no, that's the Python one.

21:39 And I'm like, wait a minute, is there something sus going on with this thing?

21:43 And he inspired me to dig into it.

21:45 So what is going on is GitHub is redirecting to the newer version when you click on it.

21:52 But PyPI actually installs a frozen 2023 version.

21:56 So I wrote this really short article.

21:57 I didn't know that.

21:58 Yes, I know.

21:58 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.

22:04 So anyway, it talks about like, okay, did you install this with uv or PIPX or somehow pip install?

22:09 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.

22:16 And here's how to actually install it.

22:18 Well, I'm going to go do that.

22:20 Yes, exactly.

22:20 So I wrote a really short write up about this.

22:23 What the PLS?

22:26 What the PLS, PLS?

22:27 Come on now.

22:29 all right kyle well if you think that makes your command line glamorous i've got something for you

22:34 you're gonna crush it they were gonna remember to your first crush this i mean because the command

22:39 line was probably my first crush if i'm gonna be honest out there and if you want your command line

22:44 to look absolutely beautiful and glamorous there's a library out here called charm that can do all

22:51 kinds of fun uh extensions so forms and uh it's got interfaces to build inside there with like

22:58 ssh animations physics based animations you know get the bubble tea component for your toolkit

23:05 so you should definitely check out uh crush or no sorry it's charm.land to add some fun bling

23:11 to your terminal so if you think that if pls was just the start uh oh my goodness charm is gonna

23:17 you're gonna be busy uh michael going down the rabbit hole dang it i was just starting to work

23:23 on some projects and now here I am.

23:25 Yeah.

23:25 Rebuilding my terminal prompt again.

23:28 Yep.

23:28 It looks pretty cool.

23:29 So I've not checked it out.

23:31 I think the open code folks may be using some of this.

23:34 But yeah, it looks like a lot of fun.

23:37 So if you want to go bling your terminal, this is a way to do it.

23:40 And it's not very popular, is it?

23:42 No, not at all.

23:43 213,000 stars over on GitHub.

23:46 Not bad.

23:46 Pretty cool.

23:47 Add some fun to your terminal.

23:50 The other bit, and I kind of already alluded to this,

23:52 was building a fully local voice assistant in 2026

23:56 using Python.

23:57 So this actually is a Raspberry Pi friendly version.

23:59 As for those of you who are following along at home,

24:01 I've been doing the more ridiculous version with like a RTX 3070,

24:05 running my voice models on a giant graphics card.

24:08 This runs on a Raspberry Pi.

24:10 A couple of different models.

24:12 He mentions here in the article with the full architecture and how to set it all up

24:18 and how to get it going.

24:19 And you can even run it on old Raspberry Pis.

24:22 So there's a 40 meg model, the small 015 version.

24:26 Meg.

24:27 Yeah, megabyte.

24:29 Megabyte.

24:29 Yeah.

24:30 Wow, okay.

24:31 Inaccurate, but we'll run all of those.

24:34 So if you've got a more So it's like Siri, basically.

24:39 Yeah.

24:39 Wow, shots fired.

24:41 It's default failure mode.

24:42 This is what I found on the internet.

24:45 Yeah.

24:45 But you can see even the largest one, 1.8 gig, you can even run that on probably the largest

24:50 just of Raspberry Pis that are out there, or just on a CPU,

24:54 and not have to use a full blown GPU to run your voice pipeline.

24:58 This is part of the Platypush platform, which is not necessarily a competitive Home Assistant,

25:03 but is like Home Assistant, in that you can glue together Zigbee

25:07 and Wi-Fi IoT devices and all those kinds of things inside your house.

25:12 So I just thought that was really interesting because it's on my list of things to keep up to date on,

25:17 which is I want to replace all the ladies in the box in my house,

25:21 if you know what I mean.

25:22 Yeah.

25:23 And that's what I got.

25:24 What about something?

25:26 You're a Docker person.

25:27 I am.

25:29 And you've done a lot of local Docker.

25:30 I'm more of a server Docker.

25:32 One of the things I think would be really cool, it'd be so easy to set this into an always auto starting

25:37 and less stopped sort of Docker thing.

25:40 But at least on macOS, can you give it access to the GPUs or NPUs?

25:45 You know what I mean?

25:46 because it's basically Linux within macOS, which is not exactly the same.

25:51 I have not tried the GPU on Docker with macOS.

25:56 I am using this on, I have installed Proxmox onto the AMD box downstairs

26:02 that has the CUDA card in it, the 3070 card.

26:06 And in that one, you absolutely can pass with Proxmox,

26:09 the GPU drivers.

26:10 And you just have to make sure you get the CUDA drivers installed.

26:14 Proxmox doesn't come with them out of the box.

26:16 but you can install them onto Proxmox.

26:18 And once you do, you can pass through either shared access

26:21 or dedicated access to the containers.

26:22 I'm using containers to run all my voice assistant stuff on the Proxmox.

26:27 Sweet. Okay.

26:28 So that is absolutely possible on Linux.

26:30 And Proxmox makes it just stupid easy to do.

26:33 Nice. Yeah, I have this nice Mac Mini M4 Pro sitting around.

26:35 I would love to just fire things up.

26:37 But all the stuff that requires sort of some acceleration,

26:39 it's like sometimes slower.

26:41 Maybe I don't really want it that much.

26:43 Well, since I had that RTX that was donated by my child to me, I was like, I'll use that

26:48 because it's going to be the fastest tokens per second, but it's only an eight gigabyte

26:52 VRAM.

26:53 So whatever I can fit into that eight gig goes very fast.

26:56 Yeah, perfect.

26:57 All right.

26:58 Let's finish this up with a joke.

27:01 So this one comes to us from Jeff Triplett.

27:04 This one's good.

27:05 Have you seen this?

27:06 I have seen this.

27:07 The team's been talking about it.

27:09 Yeah, it's well, I think you all should adopt this for your project.

27:12 We totally should.

27:13 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.

27:24 You can't fire me. I'm the only one that knows how the what to do.

27:27 And CSS was already crystal clear with how to author it.

27:31 Indeed. So what we get here is a legit CSS framework called Bmoji.

27:36 It's the CSS framework that your team will actually argue about.

27:40 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?

27:53 Right. I mean, this totally makes sense. I'm here for it.

27:57 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.

28:05 So you would say joker emoji underscore underscore picture frame emoji.

28:10 And like a lot of the utility classes, you would need to like specialize that.

28:14 So you would say joker emoji underscore underscore picture emoji --star, because this is your hero.

28:19 The hero.

28:21 And then there's the editable part, which is joker emoji underscore underscore notepad editor.

28:27 If you want to have a little card, like a written card.

28:29 And then joker underscore underscore ABCD for the title.

28:33 and joker underscore underscore quote emoji for a description bit so on the footer is the best

28:39 okay the footer where's the footer oh right there the class is joker underscore underscore

28:44 foot emoji oh there it is yes it's literally the foot emoji what is the i guess the disabled is a

28:51 a ghost yeah it's perfect i mean it's obvious you read that you know you know exactly what's going

28:57 on michael yes i i guess you do once you learn to speak the emoji about the block the element

29:04 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

29:10 gonna be adopting this um i've already done a couple major framework remodels so i put it on

29:16 our tech radar yeah it's gonna be important i mean you gotta you gotta stay on top of what's coming

29:20 in the industry and sometimes yep sometimes it's a ghost emoji i think i think that's a good place

29:25 to leave it, Calvin.

29:26 That is a good place.

29:27 I love it.

29:28 Thank you all.

29:28 That was a lot of fun.

29:29 Yeah, thanks.

29:30 See you later.

29:30 See ya.


Want to go deeper? Check our projects




Subscribe to Python Bytes