carlok — zsh — 88×30
Carlo Perassi

$ whoami

Carlo Perassi

The personal site answers "who is Carlo?". This site answers "what is Carlo building, testing, reading, or formalizing on GitHub?". It is intentionally a map, not a portfolio brochure: many entries are experiments, notebooks, drafts, or narrow tools.

home.sh projects.sh blog.sh writing.sh math.sh cv.sh

ls ./

ls _posts/ | head -3

matrix-podman-stack is public: a private Matrix server for Podman, where the bot accounts are configuration

matrix-podman-stack is now public: Synapse and its Postgres, Element Web, an optional mautrix-telegram bridge with a second Postgres, optional Prometheus and Grafana, and the helper scripts that provision the chat’s automation accounts. It is built for a small private group of humans and bots rather than for federation — no federation, no TURN, no bridge besides Telegram — and every container publishes on 127.0.0.1 only, because nginx stays on the host and terminates TLS there. Images are pinned (Synapse v1.163.2, Element v1.12.32, Postgres 16.9-bookworm, mautrix-telegram v0.2610.0), and the optional parts are compose profiles: telegram, monitoring, bus, object, vectors, llm. The stack itself landed as #1.

contributed to urllib3: Timeout.read_timeout should honour total before a connection starts

Opened urllib3#5336, a one-property fix in Timeout.read_timeout. The docstring says that when a read timeout and a total are both given “the shorter timeout will be applied”, but before start_connect() has been called the property returns read as it is, so the longer one wins: Timeout(total=1, read=2).read_timeout is 2. After the connect clock starts it already returns min(total - elapsed, read), so the patch makes the not-started branch agree — no time has elapsed, hence min(total, read), the same value it returns immediately after start_connect().

portcullis: the remote script is read until EOF, so Phase 2's tail stops vanishing from the log

portcullis had a logging bug that only showed on a real run: execute_remote_script stopped reading as soon as the exit status was ready and nothing looked buffered, but the exit status can arrive before the last output chunks — so the tail of Phase 2 and the last 11 verify.sh checks, including its results line, were simply missing from the log of an otherwise successful provision (bb81c01).

cat _posts/ (all posts) →