#469: Commands, out of the terminal
About the show
Sponsored by us! Support our work through:
- Our courses at Talk Python Training
- The Complete pytest Course
- Patreon Supporters Connect with the hosts
- Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)
- Brian: @brianokken@fosstodon.org / @brianokken.bsky.social
- Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am 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.
Michael #1: Command Book App
- New app from Michael
- Command Book App is a native macOS app for developers, data scientists, AI enthusiasts and more.
- This is a tool I've been using lately to help build Talk Python, Python Bytes, Talk Python Training, and many more applications.
- It's a bit like advanced terminal commands or complex shell aliases, but hosted outside of your terminal. This leaves the terminal there for interactive commands, exploration, short actions.
- Command Book manages commands like "tail this log while I'm developing the app", "Run the dev web server with true auto-reload", and even "Run MongoDB in Docker with exactly the settings I need"
- I'd love it if you gave it a look, shared it with your team, and send me feedback.
- Has a free version and paid version.
- Build with Swift and Swift UI
- Check it out at https://commandbookapp.com
Brian #2: uvx.sh: Install Python tools without uv or Python
- Tim Hopper
Michael #3: Ending 15 years of subprocess polling
- by Giampaolo Rodola
- The standard library's
subprocessmodule has relied on a busy-loop polling approach since the timeout parameter was added to Popen.wait() in Python 3.3, around 15 years ago - The problem with busy-polling
- CPU wake-ups: even with exponential backoff (starting at 0.1ms, capping at 40ms), the system constantly wakes up to check process status, wasting CPU cycles and draining batteries.
- Latency: there's always a gap between when a process actually terminates and when you detect it.
- Scalability: monitoring many processes simultaneously magnifies all of the above.
- + L1/L2 CPU cache invalidations
- It’s interesting to note that waiting via
poll()(orkqueue()) puts the process into the exact same sleeping state as a plaintime.sleep()call. From the kernel's perspective, both are interruptible sleeps. - Here is the merged PR for this change.
Brian #4: monty: A minimal, secure Python interpreter written in Rust for use by AI
- Samuel Colvin and others at Pydantic
- Still experimental
- “Monty avoids the cost, latency, complexity and general faff of using a full container based sandbox for running LLM generated code. “
- “Instead, it lets you safely run Python code written by an LLM embedded in your agent, with startup times measured in single digit microseconds not hundreds of milliseconds.”
Extras
Brian:
- Expertise is the art of ignoring - Kevin Renskers
- You don’t need to master the language. You need to master your slice.
- Learning everything up front is wasted effort.
- Experience changes what you pay attention to.
- I hate fish - Rands (Michael Lopp)
- Really about productivity systems
- And a nice process for dealing with email
Michael:
- Talk Python now has a CLI
- New essay: It's not vibe coding - Agentic engineering
- GitHub is having a day
- Python 3.14.3 and 3.13.12 are available
- Wall Street just lost $285 billion because of 13 markdown files
Joke: Silence, current side project!
Episode Transcript
Collapse transcript
00:00
00:05
00:10
00:12
00:13
00:18
00:27
00:32
00:33
00:36
00:39
00:41
00:45
00:49
00:52
00:57
01:01
01:06
01:09
01:13
01:16
01:19
01:26
01:28
01:31
01:32
01:33
01:37
01:38
01:45
01:49
01:50
01:52
01:53
01:57
01:59
02:03
02:06
02:08
02:09
02:10
02:11
02:18
02:19
02:22
02:29
02:31
02:34
02:36
02:39
02:40
02:44
02:49
02:50
02:51
02:53
02:54
02:56
02:57
02:58
03:03
03:08
03:12
03:14
03:15
03:20
03:24
03:25
03:26
03:27
03:30
03:32
03:33
03:35
03:40
03:40
03:42
03:46
03:52
03:55
03:56
03:57
04:01
04:02
04:05
04:08
04:11
04:13
04:17
04:20
04:22
04:25
04:28
04:31
04:34
04:38
04:40
04:41
04:43
04:45
04:48
04:50
04:53
04:55
05:00
05:03
05:06
05:09
05:11
05:13
05:15
05:20
05:22
05:25
05:28
05:29
05:31
05:37
05:41
05:44
05:47
05:49
05:53
05:58
06:02
06:04
06:04
06:12
06:26
06:31
06:31
06:32
06:34
06:34
06:39
06:40
06:41
06:42
06:43
06:45
06:48
06:49
06:54
06:58
07:00
07:06
07:10
07:14
07:15
07:17
07:20
07:24
07:26
07:29
07:34
07:39
07:42
07:45
07:49
07:53
07:57
07:58
08:02
08:03
08:04
08:08
08:11
08:13
08:15
08:16
08:17
08:21
08:27
08:28
08:29
08:33
08:36
08:40
08:45
08:45
08:47
08:47
08:48
08:52
08:55
08:59
09:03
09:07
09:11
09:16
09:19
09:25
09:32
09:36
09:38
09:40
09:46
09:59
10:00
10:08
10:12
10:19
10:22
10:28
10:33
10:37
10:41
10:43
10:44
10:46
10:54
10:58
11:03
11:06
11:07
11:12
11:17
11:18
11:22
11:23
11:26
11:34
11:38
11:41
11:44
11:45
11:48
11:50
11:50
11:52
11:55
11:57
12:01
12:02
12:04
12:05
12:06
12:06
12:07
12:08
12:08
12:11
12:16
12:20
12:25
12:29
12:31
12:32
12:32
12:33
12:34
12:34
12:35
12:36
12:42
12:44
12:46
12:49
12:52
12:54
12:55
12:57
12:59
13:10
13:11
13:12
13:18
13:19
13:19
13:22
13:23
13:27
13:32
13:35
13:37
13:38
13:40
13:44
13:49
13:50
13:57
14:00
14:07
14:11
14:13
14:15
14:15
14:20
14:21
14:30
14:34
14:37
14:40
14:42
14:45
14:47
14:50
14:53
14:55
15:00
15:03
15:07
15:09
15:11
15:16
15:20
15:23
15:25
15:25
15:28
15:28
15:29
15:29
15:30
15:33
15:35
15:38
15:40
15:45
15:48
15:49
15:50
15:50
15:53
15:59
16:04
16:09
16:12
16:14
16:16
16:18
16:20
16:22
16:23
16:30
16:31
16:39
16:42
16:44
16:49
16:58
17:05
17:12
17:15
17:18
17:18
17:19
17:30
17:36
17:43
17:46
17:50
17:53
17:56
18:02
18:07
18:09
18:16
18:17
18:19
18:20
18:22
18:29
18:32
18:33
18:38
18:42
18:46
18:51
18:56
19:00
19:06
19:10
19:16
19:21
19:26
19:31
19:36
19:38
19:41
19:42
19:47
19:50
19:55
19:57
19:58
20:01
20:05
20:08
20:12
20:17
20:19
20:23
20:24
20:26
20:30
20:31
20:33
20:34
20:40
20:44
20:49
20:50
20:53
20:57
20:58
21:00
21:01
21:04
21:04
21:06
21:07
21:07
21:08
21:10
21:11
21:12
21:13
21:14
21:15
21:18
21:19
21:20
21:23
21:24
21:27
21:33
21:36
21:39
21:43
21:45
21:47
21:53
21:55
22:02
22:02
22:07
22:10
22:11
22:19
22:22
22:25
22:30
22:36
22:41
22:46
22:46
22:47
22:52
22:53
22:54
23:01
23:04
23:05
23:06
23:06
23:07
23:09
23:10
23:14
23:17
23:23
23:29
23:33
23:38
23:43
23:47
23:48
23:48
23:53
23:55
24:02
24:06
24:07
24:10
24:16
24:18
24:19
24:21
24:24
24:26
24:28
24:29
24:30
24:31
24:31
24:37
24:39
24:44
24:49
24:55
25:01
25:07
25:10
25:14
25:14
25:18
25:18
25:21
25:24
25:25
25:26
25:29
25:30
25:32
25:34
25:34
25:37
25:38
25:41
25:42
25:43
25:50
25:50
25:51
25:52
25:53
25:54
25:56
25:56
26:00
26:05
26:11
26:17
26:21
26:27
26:29
26:33
26:39
26:41
26:42
26:45
26:47
26:48
26:49
26:52
26:53
26:54
26:55
27:03
27:08
27:15
27:22
27:24
27:26
27:27
27:31
27:35
27:36
27:36
27:37
27:39
27:42
27:44
27:48
27:51
27:53
27:55
27:56
27:57
27:58
27:59
27:59
28:01
28:02
28:04
28:05
28:08
28:11
28:13
28:14
28:17
28:18
28:27
28:31
28:33
28:33
28:35
28:35
28:37
28:38
28:39
28:43
28:48
28:52
29:01
29:05
29:10
29:15
29:21
29:28
29:31
29:35
29:38
29:39
29:40
29:40
29:46
29:47
29:55
30:03
30:06
30:07
30:08
30:09
30:14
30:19
30:26
30:33
30:38
30:45
30:51
30:57
31:03
31:08
31:14
31:20
31:25
31:32
31:37
31:44
31:48
31:53
32:01
32:08
32:14
32:20
32:24
32:31
32:36
32:40
32:46
32:55
33:10
33:10
33:22
33:25
33:26
33:27
33:38
33:39
33:40
33:40
33:45
33:46
33:50
33:54
33:56



