#483: Thanks Brian
About the show
Goodbye and Thanks Brian
Thanks Calvin for being part of this and future episodes! Also new time for the live show. Thanks Brian for all the hard work over the years.
Calvin #1: Vulnerability and malware checks in uv
- release just yesterday by Astral https://astral.sh/blog/uv-audit
uv auditscans dependencies for known vulnerabilities and abandoned packages via the OSV database — runs 4–10x faster thanpip-audit- Malware check runs on every install/sync, catching actively malicious packages (credential stealers, etc.) before they execute — including ones PyPI quarantined but lockfiles can still reference
- Enable malware scanning with
UV_MALWARE_CHECK=1— it's opt-in and in preview - Future roadmap includes a resolver that steers toward vulnerability-free versions and install-time warnings scoped to newly added deps only
Michael #2: HTTP GET requests with the Python standard library
- If you’re doing HTTP in Python, you’re probably using one of three popular libraries: requests, httpx, or urllib3.
- There have been issues with httpx lately.
- Niquest is another option: Drop-in replacement for Requests. Automatic HTTP/1.1, HTTP/2, and HTTP/3. WebSocket, and SSE included.
- But maybe less is more, especially in the age of agentic AI
- A good candidate needs two things to be true at once, not one: the used surface is small, and the behavior behind that surface is shallow.
Calvin #3: Millions of AI agents imperiled by critical vulnerability in open source package
- "BadHost" (CVE-2026-48710) is a critical vulnerability in Starlette — the ASGI framework underlying FastAPI — with 325 million weekly downloads; also affects vLLM, LiteLLM, and most MCP server tooling
- The exploit is trivial: injecting a single character into an HTTP Host header bypasses path-based authentication, and can lead to credential theft, SSRF, and in some cases remote code execution
- MCP servers are a prime target since they store credentials for external services (email, databases, cloud accounts) — exposed data in the wild includes biopharma clinical trial DBs, full mailboxes, HR/PII pipelines, and AWS topology
- Fix is available — patch to Starlette 1.0.1 immediately; use the free scanner at mcp-scan.nemesis.services to check if your servers are still running a vulnerable version
- Open source sustainability footnote: the maintainer triages near-daily security reports solo, in his free time — most are AI-generated noise, and real ones like this still compete for the same evenings and weekends
Michael #4: alembic-git-revisions
- By Julien Danjou from Mergify
- Automatic Alembic migration chaining based on git commit history. No more
Multiple head revisions are present for given argument 'head'. - See the introductory article
- Caused by two migrations landed with the same
down_revision, and Alembic doesn’t know which one comes first. The fix is always the same: someone manually edits the migration file to re-chain the revisions. - The insight: git already knows the order
Extras
Calvin:
- GNU
makecan do pattern matching in the target. Not new at all, mentioned in the 1994-era docs.justandtaskdon’t have this super power on the target name yet.train-%: uv run ./train.py $* --save-hyper-params --overwrite $(TRAIN_ARGS)
Michael:
- Updated my HTTP client using packages from httpx to httpx2: listmonk, umami, and memberful. For motivation, see this reddit thread.
Joke: Accurate
Episode Transcript
Collapse transcript
00:00
00:05
00:11
00:13
00:17
00:21
00:26
00:30
00:33
00:35
00:40
00:43
00:46
00:52
00:52
00:54
00:55
00:56
01:00
01:04
01:05
01:09
01:10
01:11
01:11
01:13
01:14
01:18
01:20
01:24
01:26
01:28
01:29
01:31
01:36
01:39
01:42
01:44
01:45
01:48
01:50
01:51
01:51
01:55
01:56
01:57
01:58
02:05
02:07
02:09
02:10
02:12
02:13
02:14
02:16
02:19
02:24
02:28
02:29
02:30
02:33
02:38
02:43
02:47
02:49
02:52
02:55
02:59
03:01
03:03
03:06
03:07
03:09
03:10
03:12
03:13
03:14
03:19
03:24
03:29
03:41
03:45
03:48
03:52
03:54
03:58
04:01
04:04
04:08
04:10
04:14
04:17
04:23
04:25
04:30
04:34
04:36
04:40
04:46
04:47
04:48
04:49
04:53
04:55
05:00
05:04
05:06
05:08
05:09
05:10
05:11
05:14
05:19
05:22
05:25
05:28
05:30
05:34
05:38
05:39
05:41
05:44
05:46
05:50
05:52
05:56
05:57
05:59
06:02
06:05
06:10
06:14
06:18
06:20
06:25
06:26
06:31
06:33
06:34
06:38
06:40
06:43
06:47
06:52
06:54
06:55
06:57
06:58
07:01
07:03
07:04
07:05
07:06
07:11
07:13
07:15
07:17
07:21
07:25
07:27
07:28
07:32
07:34
07:35
07:37
07:37
07:40
07:41
07:43
07:43
07:49
07:50
07:53
07:54
07:55
07:57
07:58
08:06
08:15
08:17
08:19
08:23
08:28
08:32
08:36
08:40
08:41
08:42
08:48
08:56
09:01
09:11
09:16
09:23
09:28
09:32
09:36
09:41
09:46
09:48
09:53
09:55
10:02
10:06
10:11
10:14
10:16
10:20
10:24
10:28
10:31
10:34
10:36
10:37
10:42
10:47
10:49
10:59
11:01
11:02
11:06
11:10
11:11
11:11
11:18
11:21
11:23
11:23
11:25
11:28
11:32
11:33
11:35
11:37
11:41
11:42
11:46
11:50
11:52
11:55
11:56
11:56
11:57
11:59
12:01
12:02
12:02
12:03
12:07
12:08
12:10
12:16
12:21
12:26
12:33
12:34
12:37
12:39
12:45
12:52
12:56
13:00
13:06
13:12
13:19
13:24
13:29
13:33
13:38
13:41
13:43
13:46
13:49
13:56
13:58
14:01
14:06
14:11
14:14
14:20
14:23
14:27
14:28
14:32
14:33
14:34
14:38
14:40
14:42
14:51
14:52
14:58
15:03
15:06
15:09
15:15
15:18
15:19
15:22
15:24
15:24
15:27
15:32
15:35
15:41
15:44
15:48
15:51
15:51
15:54
15:57
15:58
15:59
16:03
16:04
16:07
16:11
16:13
16:17
16:19
16:23
16:24
16:24
16:26
16:27
16:29
16:30
16:31
16:33
16:34
16:36
16:37
16:40
16:42
16:43
16:44
16:47
16:53
17:00
17:02
17:03
17:04
17:04
17:06
17:09
17:12
17:15
17:16
17:22
17:30
17:35
17:38
17:45
17:47
17:49
17:51
17:55
18:01
18:02
18:09
18:14
18:14
18:20
18:23
18:28
18:33
18:47
18:51
18:53
18:58
18:58
19:03
19:04
19:05
19:06
19:07
19:08
19:10
19:10
19:11
19:14
19:15
19:18
19:22
19:22
19:27
19:27
19:31
19:34
19:35
19:37
19:38
19:39
19:40
19:41
19:42
19:43
19:44
19:45
19:49
19:55
19:57
19:58
19:59
20:00
20:00
20:04
20:05
20:06
20:06
20:09
20:10
20:12
20:18
20:24
20:29
20:35
20:36
20:40
20:42
20:47
20:50
20:55
20:58
20:59
21:02
21:04
21:09
21:09
21:10
21:11
21:14
21:16
21:17
21:18
21:19
21:21
21:27
21:28
21:34
21:38
21:50
21:59
22:04
22:06
22:06
22:07
22:12
22:15
22:15
22:17
22:22
22:28
22:35
22:37
22:42
22:47
22:47
22:49
22:50
22:50
22:51
22:55
22:55
22:56
22:58
23:00
23:02
23:02
23:03
23:04
23:05
23:06
23:07
23:08
23:09
23:11
23:17
23:21
23:27
23:31
23:33
23:35
23:39
23:41
23:45
23:46
23:51
23:52
23:57
24:02
24:03
24:04
24:09
24:10
24:12
24:15
24:18
24:22
24:26
24:28
24:31
24:33
24:35
24:36
24:37
24:38
24:40
24:40
24:41
24:43
24:43
24:45
24:55
24:56
24:57
25:01
25:06
25:13
25:19
25:23
25:30
25:37
25:38
25:39
25:43
25:44
25:46
25:51
25:56
25:57
26:05
26:16
26:23
26:27
26:27
26:28
26:34
26:36
26:38
26:42
26:44
26:45
26:45
26:46
26:48
26:50
26:55
26:57
27:00
27:05
27:09
27:16
27:17
27:19
27:26
27:29
27:31
27:31
27:32
27:33
27:36
27:36
27:37
27:40
27:44
27:46
27:47
27:51
27:54
27:57
28:01
28:04
28:08
28:10
28:10
28:15
28:16
28:17
28:20
28:22
28:27
28:31
28:31
28:32
28:35
28:36
28:36
28:37
28:38
28:39
28:39



