Text85

./blog.sh na OpenAlt 2026

O tomto víkendu, v sobotu 7. a v neděli 8. listopadu, proběhne v Brně na FIT VUT konference OpenAlt 2026.

V sobotu budu opět na stánku mých přátel z OSCloudu, stejně jako před měsícem na LinuxDays. Jestli si chceš o ./blog.sh popovídat, zeptat se, jak to či ono funguje, zjistit, jestli by unesl tvůj blog, nebo mi říct, o co jsi zakopl, je to příležitost probrat to tváří v tvář, a ne v issues na GitHubu.

Od LinuxDays se pár věcí změnilo: blogsh.app od 23. října nosí nový vzhled Minimal Terminal a manual.blogsh.app vzhled Minimal Manual, takže je co ukázat na obrazovce.

Nic zásadního si nechystej. Stačí otázka — nebo blog, který se chystáš přestěhovat. Vše ostatní si řekneme na OpenAltu 2026.

Program a jak se tam dostat: openalt.cz/2026

#blogsh #OpenAlt

Nový vzhled: Minimal Terminal

Tenhle web má nový vzhled. Jmenuje se Minimal Terminal a je to stránka tak, jak by ji vytiskl terminál: dvě písma, slova v hranatých závorkách místo tlačítek, mřížka před štítkem, nic kulatého a nic vyplněného kromě toho jednoho, co je zrovna vybrané.

Není ušitý jen pro tenhle web. Minimal Terminal je jeden ze šesti vzhledů rodiny Minimal, které přijdou s chystanou verzí 1.11, vedle samotného Minimalu, Literalu, Journalu, Manualu a Pictorialu. Web na kterýkoli z nich přepne jeden řádek, site.skin:, a každý si bere barvy z webu, takže tahle modrá je prostě vlastní modrá blogsh.app.

1.11 ještě nevyšla; tenhle web běží o kus napřed, aby se ukázalo, jak vzhled obstojí na skutečných stránkách. Jestli ti něco nesedí, řádek se láme, kde nemá, nebo se stránka špatně čte na telefonu, odpověz na tenhle příspěvek na Mastodonu.

Pro PHP2Shell tu nic není

Ve středu vydalo PHP mimořádné opravy dvou chyb ve svém jádru, CVE-2026-109618 a CVE-2026-109619, kterým se dohromady říká PHP2Shell. Jediný požadavek od někoho, kdo se nikdy nepřihlásil, může stačit ke spuštění kódu na webovém serveru, a týká se to každé instalace PHP, která obsluhuje webové požadavky, ať na ní běží cokoli. Opravené verze jsou 8.5.12, 8.4.27, 8.3.36 a 8.2.35; cokoli staršího potřebuje opravu od dodavatele, nebo záplatu sestavenou ze zdrojů.

Web postavený na ./blog.sh nemá, do čeho by se trefila. Není v něm žádné PHP, za ním žádná databáze a před ním žádná administrace. Webový server rozdává soubory, které sestavení zapsalo předem: stránky, styl, rejstřík pro hledání, obrázky. Požadavek si může o jeden z nich říct a dostane ho, a to je všechno, co požadavek umí; nic na serveru se nespustí proto, že se někdo zeptal. Není to zabezpečení, na které si někdo vzpomněl. Je to to, co článek Postaveno záměrně pro jeden blog myslel větou „nic nepotřebuje bezpečnostní záplatu v úterý“. Tentokrát to byla středa.

Neznamená to, že nikdy nic nepotřebuje aktualizaci. Potřebuje ji webový server, který soubory rozdává, SSH, pokud píšeš z telefonu, a Ruby na stroji, kde se web sestavuje. Článek Co zbývá pokazit ten krátký seznam prochází. Je jen mnohem kratší než seznam celé sestavy s PHP a nic z něj tenhle týden nehořelo.

Číst dál

Všechno ostatní v 1.10

Šest dílů pokrylo, o čem 1.10 je: archiv, který promlouvá, ikona místo terminálu, dveře pro programy, co teď výpis říká, uloženo beze změny a druhý jazyk, o vydání později. Tohle je zbytek, v pořadí, v jakém ho potká ten, kdo web provozuje. Většina z toho přišla ze dvou webů, které běžely na předběžné verzi od konce září, a od čtenářů, kteří si četli opravy oprav.

Číst dál

Druhý jazyk, o vydání později

1.9 přineslo druhý jazyk: jeden příspěvek, text v každém jazyce, strom /en/ vedle kořene. První web, který to nasadil naostro, byl ten, na kterém engine vyrostl, a za měsíc provozu se ukázalo, co žádný test neukáže. V changelogu 1.10 je k druhému jazyku přes třicet položek. Tohle není jejich seznam. Je to o tom, co druhý jazyk potřebuje a první ne.

Jméno, které se skloňuje

site.author stojí ve větách: „na osobním webu Daniela Šnora". Čeština jméno skloňuje, takže v konfiguraci je druhý pád, a stránky v angličtině ho převzaly i s pádem. 1.10 přidává site.author_name: jméno tak, jak stojí samo – pod titulkem úvodníku, jako osoba ve strukturovaných datech, na stránkách jiného jazyka než vlastního. Bez něj se dál všude bere author, jako dřív. Jazyk, který neskloňuje, to nikdy nepotřeboval, a proto to nikdo nenapsal.

Série má jméno v každém jazyce

Číst dál

Uloženo beze změny

Oprava překlepu v jednom odstavci. To je celá změna, kterou autor udělal, a tak ji má archiv zapsat: jeden odstavec jinak, ostatní jak byly. Na skutečném archivu, cestou, kterou příspěvky posílá telefon, to engine do 1.9 neuměl. Měřeno 8. října: 101 příspěvků se změnilo tím, že byly uloženy beze změny.

Co markdown neumí říct

Příspěvek je uložený jako bloky, a editor ukazuje text. Mezi tím stojí převod, který většinou nic neztratí – odstavec je odstavec, nadpis je nadpis. Jenže archiv, který přišel z importu, nese na blocích věci, pro které markdown slovo nemá: odstavec, který Tumblr označil jako odsazený, jako položku seznamu nebo jako řádek chatu; u videa jeho poskytovatele a adresu, na které bylo poprvé; přehrávač, který služba předala jako HTML. Text, který editor ukáže, nic z toho nenese. A uložení dosud postavilo každý blok znovu z textu: oprava jednoho překlepu přepsala všechny ostatní bloky příspěvku bez nich. U stolu i z programu stejně; jen u stolu to nikoho nenapadlo měřit.

Otázka naopak

Číst dál

Co teď výpis říká

Výpis je stránka, kterou engine staví nejčastěji a kterou nikdo nepíše. Úvodní stránka, stránka štítku, rok archivu, díly série, výsledky hledání – všechno jsou karty příspěvků za sebou, a to, co karta říká, rozhoduje engine, ne autor. 1.10 na výpisech mění několik věcí najednou, a jedna z nich se změní, aniž by někdo cokoli nastavil. Na tu je dobré se připravit.

Karta obrázkového příspěvku nese obrázek

Karta se řeže na výšku a první blok si nechá, ať váží cokoli. Fotografie pod jedním řádkem slov tak z karty vypadla přesně u příspěvku, který je tou fotografií: na jednom archivu ukazovala první stránka obrázků tři obrázky ve třinácti kartách. Příspěvek druhu obrázek nebo video má teď na kartě napřed své médium a týž řez běží přes to, co následuje. Obrázek na výšku je držený na 22rem místo celé obrazovky a karta si tu výšku účtuje, takže popisek pod fotkou na výšku je na kartě také.

Tohle je ta změna, která se stane sama: každý web s takovými příspěvky ukáže po aktualizaci na výpisech víc obrázků. Článek s fotografií uvnitř zůstává článkem. A kdo chce, aby první karta úvodní stránky vedla obrázkem i u článku, zapne layout.lead_card. Je vypnuté: mění jen jednu kartu a jen na úvodní stránce, a to je rozhodnutí o vzhledu, které engine nedělá za autora.

Číst dál

Dveře pro programy

Do 1.9 měl engine pro programy jedny dveře, a byly úzké. Telefon jimi doručil příspěvek: zkratka poslala soubor přes SSH, na druhé straně ho převzal receive.sh a odpověděl jedním objektem. Dva příkazy držely tenhle slib – add --json a publish --yes --json. Všechno ostatní byla obrazovka pro člověka: výpis, vlastnosti příspěvku, fronta, koš. Program, který se chtěl podívat, co je v archivu, neměl co zavolat.

1.10 otevírá dveře dokořán, a právě proto si dává záležet na tom, co jimi smí projít.

Každá obrazovka jako data

Každá obrazovka, kterou si člověk přečte, než něco udělá, a každá akce, kterou mu nabídne, má teď tvar --json: jeden objekt na standardním výstupu a nic jiného, každý klíč vždy přítomný. Odmítnutí je také objekt, {"ok": false, "error": "not_found", …}, a vrací nulu – návratový kód říká, jestli odpověď vůbec přišla, objekt říká, jaká byla. Program, který musí zkoušet, zda klíč existuje, si píše vlastní parser; tomu se tady předchází.

Číst dál

Ikona místo terminálu

Každý návod k tomuto enginu začíná stejnou větou: otevři Terminál, přejdi do složky svého webu a napiš ./blog.sh. Pro člověka, který v terminálu žije, je to jedna věta. Pro člověka, který v něm nežije, jsou to tři věci, které lze pokazit dřív, než napsal první slovo – kde se Terminál bere, co znamená „přejdi do složky" a proč před tím příkazem stojí tečka s lomítkem.

1.10 dělá z té věty věc, na kterou se dá poklepat.

Co průvodce nabídne

./setup.sh na Macu končí jednou otázkou navíc:

Vytvořit v Aplikacích ikonu, která tenhle blog otevře poklepáním?
Číst dál

Archiv promlouvá

Koncem září přišel dopis. Pavel si tímto enginem zálohoval starý blog a napsal, co se při tom dozvěděl: za devět let přes tisíc příspěvků a období, kdy psal každý den. Nevěděl to. Blog byl celou dobu jeho, příspěvky byly celou dobu v něm, a přesto mu to číslo řekl až archiv, když ho poprvé někdo přečetl celý.

Tohle vydání je o tom, co archiv řekne, když se ho zeptáš. Jak se do něj dostane, jak z něj odejde a jak se hlídá, o tom web napsal dost. Tenhle text je o tom, co archiv ví o tobě.

Co archiv spočítá

./blog.sh stats přečte každý příspěvek a odpoví jednou obrazovkou. Na archivu, kolem kterého tento engine vznikl, dnes vypadá takhle:

Archiv
  příspěvků: 6912 — z toho publikovaných 6907, rozepsaných 1, naplánovaných 4
  31. 10. 2003 – 22. 10. 2026, dnů: 8392
  nejvíc toho přibylo v roce 2024 (příspěvků: 642)

Slova
  slov celkem: 425 828, průměrně na příspěvek: 61,6, uprostřed: 22
  nejdelší: minimal-jedna-barva-tri-pisma (slov: 3267)
  přečíst celý archiv trvá 35,5 hodiny
Číst dál

./blog.sh 1.10

./blog.sh 1.10 je venku — vydání na GitHubu.

Vydání, které otevírá dveře programům. Každá obrazovka, kterou si přečteš, než něco uděláš, a každá akce, kterou ti nabídne, teď umí odpovědět i jako data. Program na jiném stroji se k nim dostane přes SSH, které server už má, a jen přes jeden skript, který mu dovolí spustit jeden příkaz enginu a nic jiného. Připojí se kódem, který ./blog.sh pair nakreslí v terminálu, takže nikdo nikam nepíše adresu ani klíč. Na tom stojí nativní appky pro iOS a Android, které se chystají.

Kolem toho archiv víc mluví o sobě. Karta „V tento den“ ukáže příspěvky z dnešního dne v dřívějších letech, /series/ je rejstřík všech sérií, stránka výpisu řekne, které dny pokrývá, a stránka 404 nabídne hledání rovnou vyplněné slovy z adresy, kterou nenašla. Na Macu ./setup.sh nabídne ikonu v Aplikacích, takže se blog dá otevřít bez psaní do terminálu. A druhý jazyk z 1.9 dospěl: série má jméno v každém jazyce a překlad si drží své staré adresy stejně jako příspěvek.

Jedna věc dopředu: stránka /write/ a zkratka SendPost ve verzi 1.11 skončí a nahradí je appky. V 1.10 fungují jako dřív.

Číst dál

Kde tenhle engine vyrostl

Každá vlastnost na tomhle webu má stránku, která říká, co dělá. Méně jich říká, proč tu je, a skoro žádná, jaký byl týden před tím, než vznikla. Tahle část se psala jinde: na sean.cz, v archivu, ze kterého byl engine vyňat a na kterém každá změna přistane první, 6 655 příspěvků od roku 2003. Do minulého týdne jen česky.

Od 7. října se sean.cz čte i anglicky: 126 příspěvků, každý tentýž příspěvek jako český originál, jen se slovy v druhém jazyce, tak jak to druhý jazyk umí tady. Je mezi nimi celá série, která sleduje tenhle engine ode dne, kdy se na něj web přestěhoval, Nový Sean.cz: zatím jednadvacet dílů, červenec až říjen.

Pár míst, kde začít, pokud chcete ochutnávku a ne celý běh:

Číst dál

Stránka, kterou cizí člověk otevře první

Sobota, LinuxDays v Praze, stánek přátel z OSCloudu – Mastodon, Pixelfed, PeerTube, Matrix, služby pro lidi, kteří chtějí mít svá data tam, kde na ně vidí. Celý den za jedním stolem a ani jedna přednáška. Tento engine tam byl poprvé naživo: na letáku a v hovoru pokaždé, když se řeč o Fediverse stočila k otázce „a kde bych psal?"

Čtyři pole na jednom A4

Leták je jeden list. Čtyři pole – psaní, stěhování, nasazení, web – a v každém výřez z terminálu a QR kód. Žádný z kódů nevede na stránku vyrobenou pro tu akci. Každý otevírá štítkovou stránku, kterou tento web už měl: /tag/authoring, /tag/migration, /tag/deploy, /tag/appearance. Vlastní archiv webu, seřazený podle toho, na co se u stánku lidé ptají, byl přistávací stránkou. Nic, co by den po akci zastaralo, se pro ni nestavělo.

Číst dál

Kam až to může narůst

Je poctivá otázka, než nástroji svěříš dvacet let psaní: v jakém bodě ho přestane být příjemné používat? Měřeno tady v srpnu, na archivu 6 639 příspěvků, byla upřímná odpověď pokrčení rameny: přidání jednoho příspěvku stálo celý archiv – osmačtyřicet sekund od stisknutí klávesy Enter do chvíle, kdy web běžel – protože každá stránka, která se o příspěvku byť jen zmiňovala, se musela vyrobit znovu, ať se změnila, nebo ne.

To už upřímná odpověď není. Od 1.6 si sestavení vede záznam o tom, co do každé stránky vstoupilo, a znovu vyrábí jen ty, jejichž záznam už nesedí. Archiv pod tím je tentýž, na kterém se to v srpnu měřilo, o sedm příspěvků těžší: teď 6 646, a engine o tři vydání dál, na 1.9.

Na co čekáš dnes

Publikace příspěvku s dnešním datem na tomtéž archivu: šestnáct sekund sestavení, dvě nahrávání – kde bylo osmačtyřicet. Sestavení už nesahá na stránky, které to nepotřebovaly, takže velikost archivu přestala být tím, z čeho se čekání skládalo.

Kde se velikost stále ukazuje

Číst dál

./blog.sh na LinuxDays 2026

O tomto víkendu, v sobotu 3. a neděli 4. října, proběhnou v Praze na FIT ČVUT v Dejvicích již tradiční LinuxDays 2026. Vstup je volný.

V sobotu budu celý den na stánku mých přátel z OSCloudu. Jestli si chceš o ./blog.sh popovídat, zeptat se, jak to či ono funguje, zjistit, jestli by unesl tvůj blog, nebo mi říct, o co jsi zakopl, je to příležitost probrat to tváří v tvář, a ne v issues na GitHubu.

Nic zásadního si nechystej. Stačí otázka — nebo blog, který se chystáš přestěhovat. Vše ostatní si řekneme na LinuxDays 2026.

Program a jak se tam dostat: linuxdays.cz/2026

#blogsh #LinuxDays