Microblog la mine acasă

Seria de îmbunătățiri și curățenii în curtea blogului continuă cu o altă piesă de puzzle: un loc pentru notițele scurte. O notiță scurtă e genul de chestie pe care până nu demult o postam pe Twitter și mai nou Mastodon și care n-a avut niciodată ce căuta printre articolele clasice ale blogului (adică de alea cu titlu, paragrafe, descriere SEO). De acum am un microblog, cu propriul său feed RSS.

Screenshot microblog pe rusiczki.net

Am mai scris că regret că am neglijat blogul în favoarea rețelelor sociale care s-au dovedit atât de efemere. Mai nou chiar evit să intru pe Facebook să nu mă enervez din cauza vreunui subiect politic (și nu numai) de actualitate. O bună bucată de vreme, Twitter (sau X, sau cum se mai numește) a fost destinația pentru genul ăsta de notițe ușor mai tehnice, dar, de când cu împărăția lui Elonuț, am cam încetat să-l folosesc din principiu. Îmi făcusem cont pe Mastodon, dar mi-l creasem pe un server care era oarecum nișat pe idea că aș fi programator Ruby. Nu că nu aș fi avut voie să public chestii offtopic dar m-ar fi supărat pe mine la OCD să pun poze cu pisici pe ruby.social…

Într-o zi am început să mă gândesc mai serios la cum aș putea să înființez o secțiune de postări scurte aici pe rusiczki.net. Și când zic “mă gândesc” mă refer că am început să dezbat cu Claude Code cam ce aș putea să fac. I-am zis ce am scris și mai sus, că am fost destul de activ pe Twitter dar nu mai sunt și că mai nou am Mastodon iar după câteva iterații și niște schimbări de direcție am ajuns la o soluție destul de simplă și elegantă. Claude a insistat să mă învețe că ceea ce-mi propune s-ar numi în jargonul indie web PESOS: Publish Elsewhere, Syndicate to Own Site. Publici unde îți e comod, iar copia ajunge automat pe site-ul tău. Opusul, POSSE (Publish on Own Site, Syndicate Elsewhere), ar fi mai pur conceptual, dar în practică ar fi însemnat că trebuia să fac commit în Git pentru fiecare gând de două propoziții. App-ul Mastodon îl am în buzunar; blogul, (încă) nu. Astfel se bifează ușurința de a posta, dar Mastodon nu va fi singurul loc unde trăiește conținutul căci instanțele pot să dispară, conturile și serverele se închid iar vechea zicală “your data is your data only when it lives on a domain you own” rămâne la fel de adevărată. Ah da, și cu ocazia asta m-am mutat pe mastodon.social să pot posta poze cu pisici în voie.

Pe partea tehnică un GitHub Action rulează zilnic la 03:17 AM și interoghează API-ul Mastodon. Ia tot ce e nou de la ultima sincronizare și filtrează un pic, adică rămân originalele, thread-urile în care vorbesc ca un psihopat cu mine însumi și boost-urile dar dispar răspunsurile către alții. Descarcă și media asociată, scrie câte un fișier Markdown și face commit și push spre repozitoriul Git care stă la baza acestui site. Din acest punct conținutul devine al meu! Muhaha! Dacă nu e nimic nou, nu se întâmplă nimic - niciun commit, niciun build. Ah, imaginile sunt redimensionate dacă depășesc o limită și copiate pe content.rusiczki.net - adică și astea devin ale mele. Muhaha x 2.

Apoi m-am gândit la Twitter - contul meu e încă acolo că nu l-am șters, doar nu prea mai postez, și Twitter încă mai oferă (oare până când?) posibilitatea de a-ți cere arhiva completă: un zip cu toate tweet-urile, atașamentele și DM-urile. Am cerut-o și am primit un link după circa o zi și câteva ore. Claude a scris un script Ruby care citește tweets.js din arhivă, păstrează doar originalele (fără retweet-uri și fără răspunsuri la alții), extinde URL-urile scurtate de t.co, transformă mențiunile @utilizator și hashtag-urile #subiect în link-uri reale și copiază media asociată. Un rsync, un commit și gata: 3374 de tweet-uri din 2008 până în 2025 care nu vor mai dispărea când Elon decide că nu mai merit să fiu acolo dacă nu plătesc. Sau cine știe ce altă măgărie…

Două note tehnice care merită consemnate. Când am adăugat cele 3374 fișiere Twitter, durata build-ului a sărit la aproximativ 13 minute. Inacceptabil. De când am migrat blogul pe Jekyll, build-ul dura cam un minut și mereu am presupus că așa e Jekyll-ul, mai încetuc. După niște investigații am aflat că nu era Jekyll. Era sidebar-ul meu! O buclă de cod care, pentru fiecare pagină generată, itera prin toate paginile site-ului ca să construiască navigarea. Sidebar-ul are acum navigarea hardcodată și efectul s-a văzut peste tot: build-ul blogului pe GitHub a scăzut de la aproximativ 60 de secunde la 30 de secunde, iar build-ul complet al microblogului (3374 tweet-uri + Mastodon + deploy) durează 63 de secunde în total.

A doua notă: procesul a scos la iveală că jekyll_asset_pipeline, gem-ul pe care îl co-întrețin și pe care îl folosesc pe blogul ăsta nu genera nume de fișiere stabile: pentru același CSS și JavaScript, fiecare build producea un fișier cu alt nume, ceea ce ar fi creat niște probleme cu build-ul separat pentru microblog. Din asta a rezultat un sidequest care a durat câteva ore: repo-ul jekyll_asset_pipeline era configurat pentru Travis CI, care a murit de mult și contul lui Matt nu era setat să poată rula GitHub Actions. Așa că am preluat repo-ul pe contul meu, am făcut modificarea astfel încât acum numele de fișiere sunt derivate din conținut și am lansat versiunea 0.7.0. Abia după aia am putut continua…

/microblog/ e acum live, cu tweet-uri din 2008 încoace și toot-uri(!?) Mastodon care vor continua să apară. Există arhivă lunară, există RSS, există lightbox. Ce nu există: algoritmul care să-mi fure sufletul.

Exact ce mi-am dorit.

Posted in: blog history, technical, română.

Navigate

Built from: _posts/2026/2026-05-17-microblog-la-mine-acasa.markdown.