$ 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.
ls ./
- projects/ — a curated atlas of public GitHub work
- blog/ — a public log of activity across my repositories
- writing/ — working drafts, article PDFs, and book material
- math/ — what is proved, what is open, and where the evidence lives
- cv/ — a short curriculum vitae
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).