type: learnings_registry entry_prefix: LRN schema: id: LRN-XXX date: YYYY-MM-DD pattern: string (what was observed, abstracted) context: string (where/when it happened - concrete) future_application: string (when to recall this) rules:
| ID | Date | Pattern | Applies to |
|---|---|---|---|
| LRN-001 | 2026-05-15 | certbot --nginx matches server_name, not filename |
nginx + certbot on multi-site VPS |
| LRN-002 | 2026-05-17 | PIL supersample ×8 + Lanczos = clean icon antialiasing | Python stdlib icon generation |
server_name, not filenamecertbot install --cert-name X (and certbot --nginx -d X) locates the target vhost by scanning every server_name directive in active nginx configs. The filename in sites-available/ is irrelevant. A file named X.conf with server_name Y; inside will NOT be picked up for domain X./etc/nginx/sites-available/bchanot.fr existed and was symlinked into sites-enabled/, but its body still contained server_name autreprojet.fr www.autreprojet.fr; — a copy-paste leftover from a previous project. Certbot returned Could not automatically find a matching server block for bchanot.fr.grep -n "server_name" /etc/nginx/sites-enabled/* — confirm the target domain is actually declared inside, not just present in the filename. Same logic applies when troubleshooting "why is nginx serving the wrong site" — match by server_name, never by filename.ImageDraw.rounded_rectangle + ellipse on RGBA canvas, then Image.resize((target, target), Image.LANCZOS). Output rivals rsvg-convert / inkscape for simple geometric shapes. Crisp at 16×16 favicon scale, no visible jaggies.favicon-32.png, apple-touch-icon.png (180×180), favicon.ico (multi-size 16/24/32/48) for bchanot.fr from scratch — no rsvg-convert / inkscape / ImageMagick on host. Single PIL script, ~20 lines.rsvg-convert or commit a finalized PNG instead.