./blog.sh

Nasazení ve vlastním jazyce

Průvodci byli přeložení od začátku; vyprávění kolem nich ne. Český web sledoval vlastní nasazení v angličtině, o řádek nad českou větou – varování sestavení, selhání oznámení, chyby importu, pokyny fronty k opravě, všechno. Ne přímo rozbité. Jen dům, kde půlka pokojů odpovídá jiným jazykem.

Šedesát vět se přestěhovalo domů

1.4 tu práci dokončuje: celé vyprávění nasazení – hlavička, průběh, závěrečný součet, každé oznámení o omezení – plus všech jedenáct varování sestavení, každé selhání Bluesky a Mastodonu a věty, které import vypíše, když zdroj zemře. Angličtina, čeština a němčina nesou tutéž sadu a sada testů paritu vynucuje, takže klíč nemůže existovat v jednom jazyce a v druhém shodit běh.

Co zůstává, jak přišlo

Diagnostika uvnitř vět se nepřekládá: HTTP kód, syrová odpověď serveru, text výjimky. To jsou důkazy a důkazy se citují, ne parafrázují – věta kolem nich patří webu, to uvnitř patří síti.

Past plurálu

Číst dál

Týž jazyk, mluvený jinak

Komentáře jsou tu odpovědi na toot a GoToSocial mluví API Mastodonu – takže komentáře na instanci GTS měly prostě fungovat. Nefungovaly, ani jednou, a nikdo neviděl, že selhávají: arch-linux.cz, první web, který tento engine spojil s vlastní instancí GTS, nikdy neukázal pod žádným příspěvkem jediný komentář. Moje vlastní testy měly Mastodon na obou koncích, takže to nikdy zachytit nemohly.

Nářečí není jazyk

V cestě stály dva přízvuky. GoToSocial píše adresu statusu ve vlastním tvaru a vzor v enginu trval na tvaru Mastodonu – číselné id tam, kde GTS odpovídá 26znakovým ULID. A GTS vyžaduje token i ke čtení veřejného vlákna, zatímco Mastodon ho dá každému, kdo si řekne. První přízvuk rozbil čtení adresy; druhý rozbil celou myšlenku živých komentářů, což je prohlížeč návštěvníka stahující vlákno – prohlížeč, kterému token dát nemůžeš.

Moderace jsou dveře dovnitř

Číst dál

Karta, která čte Codeberg

Postranní panel má kartu commitů. Až dosud četla GitHub, tečka – což je zvláštní výchozí volba u enginu, jehož přirozeným prostředím je Fediverse, kde kód bydlí na Codebergu nebo na něčím vlastním Forgejo a GitHub je zrcadlo, které si držíš kvůli jednomu widgetu.

Jeden z prvních lidí mimo tento projekt, kdo engine provozuje, položil tu zjevnou otázku a odpověď vyšla: widgets.commits.instance bere adresu serveru, a to je celá konfigurace.

Jeden klíč, ne dva

Vedle něj není žádný forge_type. Adresa už odpovídá na to, jaký druh hostitele to je – Gitea a Forgejo mluví týmž API, a klíč, který se musí shodovat s jiným klíčem, je chyba v konfiguraci čekající na svou chvíli. Vynech instance a karta čte GitHub, přesně jako dřív.

Levnější než originál

Číst dál

./blog.sh 1.4

./blog.sh 1.4 je venku – vydání na GitHubu.

Nejširší vydání od 1.0. Přišly tři věci: widget commitů čte Giteu a Forgejo – požádal o to jeden z prvních lidí mimo tento projekt, kdo engine provozuje, protože většina Fediverse drží kód na Codebergu a zrcadlení na GitHub kvůli jedné kartě v postranním panelu bylo obchvat. widgets.commits.instance bere adresu serveru; to je celá konfigurace. Komentáře fungují na GoToSocial – zjištěno na arch-linux.cz, kde žádný příspěvek nikdy neukázal jediný komentář, potichu; moje vlastní testy měly Mastodon na obou koncích, takže to nikdy zachytit nemohly. A engine teď všude mluví jazykem webu: český nebo německý web dřív sledoval vlastní nasazení a varování sestavení v angličtině, o řádek nad přeloženou větou. Nějakých šedesát vět se přestěhovalo do lokalizací.

Číst dál

Odkaz je přehrávač

Vložení videa obvykle vypadá takhle. Otevřeš platformu, klikneš na Sdílet, klikneš na Vložit, zkopíruješ chuchvalec HTML, který ti podá, a vložíš ho do příspěvku. Co jsi právě založil do vlastního archivu, je cizí značkování: iframe, někdy skript, pár sledovacích parametrů a jméno třídy z designového systému, který nepoužíváš. A když platforma změní cestu k vložení – a to dělají – rozbije se každý příspěvek, který jsi kdy takhle napsal, v jedno odpoledne.

Tady vložíš adresu, kterou bys poslal kamarádovi.

Dva z nich, a opravdu hrají

Video s popiskem:

Číst dál

Deset menších věcí

Zbytek tohoto vydání je deset přírůstků, z nichž každý potřebuje odstavec, ne příspěvek.

Stránky

page: true dá příspěvku trvalou adresu v kořeni – /about/ – mimo výpisy a feedy, ale v sitemapě a v indexu hledání. Ghost, WordPress, Squarespace a Substack je teď importují jako stránky, místo aby je přeskočily, a import řekne, kde přistály a že na ně zatím nic neodkazuje. Engine za tebe položku nav: nenapíše; kam stránka patří v tvém menu, je tvoje rozhodnutí.

Série

series: seskupuje příspěvky a series_part: řadí ten, který jsi publikoval mimo pořadí. Každá série dostane výpis a každý příspěvek v ní odkazuje na předchozí a další díl – jen uvnitř série, nikdy se nepřelévá do archivu okolo. Náhled konceptu říká, jestli se jméno jeho série připojuje k něčemu, co existuje, nebo zakládá něco nového, takže překlep se chytí, dokud je ještě zadarmo opravit.

Mimo výpisy

Číst dál

Moje fixtury se mnou souhlasily

Importéry měly dobrou sadu testů. Každý zdroj měl fixtury, fixtury se rozebraly, výsledky se ověřily a všechno procházelo.

Pak jsem importéry pustil přes tři archivy, které jsem nevytvořil já: export z Ghostu se 118 příspěvky a 419 obrázky, strom Huga se 77 soubory a WordPress WXR se 194 položkami. Vedle nich čtvrtý, který je celý můj – vlastní export tohoto enginu, načtený rovnou zpět – protože ten se neptá, jestli kód přežije cizího člověka, ale jestli se obě půlky cesty tam a zpět pořád shodují.

Ty tři cizí ale byly pointa. Fixtury s kódem souhlasily, protože oba jejich konce jsou moje.

Obrázek, který nikdo nestáhl neúspěšně

{{< figure >}} je způsob, jakým Hugo zapisuje obrázek, a odstraňovač Liquidu ho snědl jako značku Liquidu. Oba, které v tom archivu byly, mířily na soubory ležící hned vedle článku v jeho svazku stránky: nic ke stažení, nic, co by mohlo selhat, a byly pryč bez řádku v souhrnu – protože je nikdo nezkusil stáhnout, a tak nikdo neselhal.

To je tvar každého nálezu v tomhle průchodu. Ne pády. Ticho.

Číst dál

./blog.sh 1.3.2

./blog.sh 1.3.2 je venku – vydání na GitHubu.

Vydání pro GoToSocial, a obě opravy přišly z prvního webu, který blog.sh napojil na instanci GoToSocial: arch-linux.cz provozuje vlastní, místo aby mířil na účet na Mastodonu. Moje vlastní testy měly Mastodon na obou koncích, takže ani jednu najít nemohly.

GTS mluví API Mastodonu s vlastními přízvuky a dvě místa v enginu brala nářečí Mastodonu za celý jazyk: widget feedu se každého hostitele ptal nejdřív na JSON a přesně ten dostal, JSON Feed, který pak XML parser ohlásil jako poškozený; a doctor odmítl id účtu, na které tě jeho vlastní nastavení nasměrovalo, protože vyžadoval číslice tam, kde GTS odpovídá 26znakovým ULID.

Jedna drobnost pro skiny přišla z téhož webu: stránka výpisu teď říká, jestli je první. <body> nese page-first nebo page-cont, takže stylesheet rozezná začátek výpisu od jeho pokračování /page/N/ – něco, na co CSS samo nepřijde, protože neumí číst adresu.

Nic k migraci – git pull, nové sestavení, nasazení. Čekej jedno nasazení v plné velikosti: každá stránka výpisu se změní o těch pár bajtů a nic jiného se nepohne. Úplné poznámky →

Deset verzí zpět

Engine nikdy neměl krok zpět. Úprava příspěvku přepsala jeho soubor a to, co příspěvek říkal před hodinou, bylo pryč – ne proto, že by se něco pokazilo, ale protože uložení je uložení.

Teď se předchozí text před každým přepsáním uchová a [v] ve vlastnostech příspěvku jeden vrátí.

Před každým přepsáním, ne jen před úpravou

Nový import je také přepsání, a to se ukazuje jako případ, kde si tohle vydělá na živobytí. Upravit příspěvek ručně je záměr; znovu naimportovat zdroj přes příspěvek, který jsi od té doby uklidil, je nehoda, která sní večer práce, a až dosud byla jedinou záchranou záloha.

Deset na příspěvek, nejnovější první.

Vybraná poznáním, ne čtením času

Seznam je takový, jakým procházíš každý jiný seznam v průvodci, a řádek pod kurzorem ukazuje, co ta verze říkala – její titulek, nebo úvodní slova, když žádný nemá. Deset časových údajů ti neřekne nic o tom, která je ta verze, kterou chceš. Deset úvodních vět ti to řekne okamžitě.

Číst dál

Import jen a pouze přidává

Nový import archivu býval věc, kterou jsi dělal opatrně, v noci, po záloze. Běh šel a stáhl každý obrázek znovu – obrázky, které archiv už držel, bajt po bajtu – a každé z těch stažení dopadlo na soubor, který už byl správně.

To je opraveno a oprava je jedna věta: identita souboru médií je adresa, ze které přišel.

Archiv už to ví

Každá položka médií si zapisuje svůj src. Nový import porovná, co zdroj nabízí, s tím, co archiv drží, a stáhne jen to, co chybí. Nad úplným archivem to není vůbec nic – druhý běh téhož importu nestáhne jediný obrázek a v souhrnu to řekne.

Zdroj sám se pořád čte, a to je poctivá hranice toho tvrzení: export ležící na tvém disku nestojí nic, zatímco feed nebo API se stahuje pokaždé, protože jinak nejde zjistit, jestli se něco změnilo.

Tady je skutečný import z Ghostu spuštěný podruhé nad archivem, který ho už drží:

Číst dál