#486: underscore-underscore-ghost-emoji
Show Intro
Sponsored by us! Support our work through:
- Our courses at Talk Python
- Consulting from Six Feet Up Connect with the hosts
- Michael: Mastodon / BlueSky / X / LinkedIn
- Calvin: Mastodon / BlueSky / X / LinkedIn
- Show: Mastodon / BlueSky / X Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
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__icontainsacross everyCharField(and subclasses) on the model. Zero config, works out of the box.admin_search_fields: defers to each ModelAdmin's existingget_search_results(), so it respects thesearch_fieldsyou'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 toINSTALLED_APPS, mix theAdminSiteSearchViewinto your AdminSite, and drop a few template includes intobase_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
TextFieldmatching, 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:
- Follow up from pls, What the pls? Thanks Pito.
Joke: BEMoji
- A production-grade utility and component framework built entirely on emoji class names
- via Jeff Triplett
Episode Transcript
Collapse transcript
00:00
00:04
00:11
00:12
00:18
00:24
00:30
00:31
00:33
00:38
00:40
00:41
00:43
00:45
00:48
00:51
00:55
00:56
00:57
00:58
01:00
01:07
01:11
01:17
01:22
01:28
01:35
01:41
01:46
01:52
01:57
02:04
02:10
02:16
02:23
02:28
02:36
02:43
02:49
02:56
03:00
03:06
03:12
03:17
03:23
03:28
03:33
03:38
03:44
03:49
03:55
04:00
04:01
04:04
04:06
04:14
04:20
04:26
04:30
04:37
04:43
04:49
04:54
05:00
05:05
05:09
05:13
05:14
05:15
05:19
05:25
05:27
05:31
05:36
05:43
05:48
05:50
05:51
05:51
05:53
05:54
05:54
05:55
05:58
06:02
06:04
06:08
06:13
06:17
06:21
06:24
06:27
06:32
06:34
06:36
06:38
06:40
06:41
06:42
06:42
06:47
06:51
06:54
06:57
07:02
07:05
07:10
07:12
07:16
07:19
07:21
07:26
07:29
07:29
07:30
07:32
07:34
07:36
07:37
07:40
07:42
07:44
07:48
07:49
07:51
07:53
07:55
07:55
07:57
08:00
08:04
08:10
08:14
08:18
08:23
08:28
08:30
08:32
08:35
08:35
08:37
08:42
08:44
08:50
08:51
08:52
08:54
08:56
08:56
09:00
09:02
09:07
09:08
09:11
09:12
09:14
09:15
09:19
09:22
09:23
09:24
09:26
09:27
09:28
09:29
09:31
09:32
09:34
09:39
09:41
09:45
09:48
09:52
09:54
10:01
10:07
10:13
10:18
10:27
10:35
10:45
10:48
10:52
10:55
11:01
11:05
11:10
11:14
11:19
11:22
11:24
11:31
11:32
11:37
11:43
11:48
11:56
12:02
12:06
12:12
12:17
12:21
12:26
12:34
12:40
12:45
12:49
12:54
12:59
13:04
13:10
13:13
13:16
13:21
13:23
13:24
13:26
13:28
13:31
13:35
13:40
13:46
13:51
13:58
14:05
14:08
14:14
14:18
14:25
14:30
14:36
14:40
14:44
14:48
14:52
14:55
15:06
15:12
15:18
15:22
15:25
15:30
15:32
15:39
15:41
15:49
15:49
15:50
15:50
15:52
15:56
15:58
16:07
16:14
16:20
16:24
16:31
16:36
16:42
16:47
16:52
16:57
17:02
17:08
17:15
17:23
17:27
17:33
17:38
17:45
17:49
17:53
18:01
18:02
18:04
18:05
18:06
18:08
18:10
18:14
18:22
18:28
18:34
18:40
18:46
18:52
18:59
19:05
19:09
19:11
19:12
19:13
19:14
19:15
19:20
19:20
19:23
19:25
19:26
19:32
19:35
19:39
19:39
19:41
19:41
19:47
19:48
19:51
19:51
19:53
19:56
19:57
19:57
19:58
19:59
20:00
20:03
20:06
20:08
20:09
20:10
20:11
20:12
20:15
20:17
20:17
20:19
20:20
20:22
20:24
20:25
20:25
20:27
20:28
20:31
20:32
20:42
20:44
20:45
20:46
20:51
20:54
20:55
20:59
21:03
21:05
21:08
21:12
21:14
21:19
21:24
21:25
21:29
21:33
21:37
21:39
21:43
21:45
21:52
21:56
21:57
21:58
21:58
22:04
22:09
22:16
22:18
22:20
22:20
22:23
22:26
22:27
22:29
22:34
22:39
22:44
22:51
22:58
23:05
23:11
23:17
23:23
23:25
23:25
23:28
23:28
23:29
23:31
23:34
23:37
23:40
23:42
23:43
23:46
23:46
23:47
23:50
23:52
23:56
23:57
23:59
24:01
24:05
24:08
24:10
24:12
24:18
24:19
24:22
24:26
24:27
24:29
24:29
24:30
24:31
24:34
24:39
24:39
24:41
24:42
24:45
24:45
24:50
24:54
24:58
25:03
25:07
25:12
25:17
25:21
25:22
25:23
25:24
25:26
25:27
25:29
25:30
25:32
25:37
25:40
25:45
25:46
25:51
25:56
26:02
26:06
26:09
26:10
26:14
26:16
26:18
26:21
26:22
26:27
26:28
26:30
26:33
26:35
26:37
26:39
26:41
26:43
26:48
26:52
26:53
26:56
26:57
26:58
27:01
27:04
27:05
27:06
27:07
27:09
27:12
27:13
27:24
27:27
27:31
27:36
27:40
27:53
27:57
28:05
28:10
28:14
28:19
28:21
28:27
28:29
28:33
28:39
28:44
28:51
28:57
29:04
29:10
29:16
29:20
29:25
29:26
29:27
29:28
29:28
29:29
29:30
29:30



