./blog.sh

Čím příspěvek je, ne co v něm stojí

Pět dílů série napsané během jara a třetí vyšel bez řádku series:. Web udělal, co mu bylo řečeno. Třetí díl seděl u svého data a nikde jinde: mimo výpis série, mimo odkazy z jednoho dílu na další a mimo počet, který nesly ostatní čtyři: stránka čtvrtého dílu o sobě říkala díl 3 ze 4 a stála na místě, které měl mít chybějící příspěvek. Oprava bylo jedno slovo.

Dostat se k tomu slovu znamenalo otevřít článek.

To dělá edit. Přečte příspěvek z jeho souboru, celý ho vypíše jako markdown, otevře v editoru a rozebere, co se vrátí. U příspěvku, který je z odstavců a fotografií, je ta cesta tam a zpět věrná a o nic nejde. U příspěvku, který nese něco, pro co markdown nemá tvar, není.

Sedm řádků

props <slug> dostává [e] – u konceptu, u naplánovaného i u publikovaného příspěvku stejně.

Číst dál

Příspěvek, který čekal na terminál

Příspěvek se píše v tramvaji: titulek, čtyři odstavce, dvě fotografie s popisky. Přepínač nad tlačítkem Odeslat říká Koncept, což říká vždy, dokud ho někdo nepřepne. Odeslat, a karta s odpovědí se vrátí s adresou náhledu. A pak to sedí. Vydat koncept byl příkaz, příkaz chce terminál a tramvaj žádný nemá.

1.6 chtěla to rozhodnutí na špatném konci: publikovat ve chvíli odeslání, dřív než blog cokoli vykreslil, nebo se podívat na vlastní stránku blogu a pak hledat klávesnici. 1.7 to uzavírá, a pak uzavírá i cestu, kterou se odpověď vrací.

Jeden soubor, týmž spojením

Karta s odpovědí u konceptu teď nese tlačítko Publikovat. Stisk pošle jeden soubor jménem publish.txt, ve kterém je slug a nic víc – týmž panelem sdílení, týmiž dvěma zkratkami, týmž SSH spojením, kterým šel sám příspěvek.

Číst dál

./blog.sh 1.7

./blog.sh 1.7 je venku. Stránka, která píše příspěvek na telefonu, ho teď i publikuje, a zjistí, co se stalo, místo aby jí to někdo řekl: před odesláním si vystaví stvrzenku a každé tři vteřiny se na ni ptá webu, dokud nepřijde odpověď.

Vedle toho druhá polovina téže myšlenky – měnit, čím příspěvek je, bez otevírání toho, co v něm stojí: jeho série, štítky, typ a tři příznaky, z jedné obrazovky. Pak karta odkazu zapsaná v hlavičce, asi padesát kreseb, které může nosit štítek, video přebalené na cestě dovnitř, aby čtenář nečekal na celý soubor, a sedmnáct oprav.

#blogsh #ruby #staticsite

Všechno ostatní v 1.6

Pět příspěvků pokrylo to, o čem 1.6 je. Tenhle je zbytek, v pořadí, v jakém ho provozovatel potká.

Cesta ven z koše a z verzí

Obě úložiště měla cestu zpět – restore a výběr verze ve vlastnostech příspěvku – a žádnou cestu ven, takže obě léta rostla a nic neříkalo o kolik. empty trash a empty versions vypíšou, co se chystají odstranit, v položkách a v megabajtech, a než cokoli odejde, chtějí ten počet opsat. empty versions nechá každému příspěvku jeho nejnovější verzi, protože verze existují proto, aby odpověděly na „vrať mi, co jsem právě přepsal". doctor teď koš s příspěvky zaznamená, jako poznámku, ne jako závadu: na instalaci, kolem které tento engine vznikl, byl jediný způsob, jak ho vidět, du na serveru.

Fotografie uložená jednou

public.nosync/ dřív držel druhou kopii každého obrázku. Teď drží pevný odkaz, takže obrázky zabírají polovinu toho, co dřív – 1,8 GB na instalaci tohoto projektu. V záloze to neušetří nic, a to bylo změřeno, ne předpokládáno: 200 souborů pod dvěma jmény, 101 MB na disku, 201 MB v záloze. Nic k udělání; první sestavení po aktualizaci odkazy vytvoří.

Číst dál

Odznak, který říká, o čem příspěvek je

Každý příspěvek nosí odznak s datem a v něm ikonu, a ta ikona říká, o jaký druh příspěvku jde: text, obrázek, video, citát. Na blogu, kde je skoro všechno text, je ta ikona na skoro každé kartě stejná. Někdo, kdo tento engine provozuje, to v issue #45 řekl přímo: obecnou ikonu člověk vidí tak často, že se stane neviditelnou, nebo nepořádkem.

1.6 dovoluje, aby ikonu nesl místo toho štítek.

tag_icons:
  - tag: "build"
    icon_svg: '<svg viewBox="0 0 24 24" …>…</svg>'
  - tag: "comments"
    icon: "chat"

Nahrazuje, nepřidává

Na odznaku s datem u příspěvku zaujme ikona štítku místo ikony typu obsahu; v nadpisu /tag/<jméno>/ zaujme místo obecné ikony štítku. To byl první bod žadatele a ten, na který stálo za to se zeptat, místo hádat: dvě ikony vedle sebe na šedesátipixelovém odznaku nejsou odznak, ale hádanka. Štítek bez záznamu nemění nic, takže obecná ikona zůstává u všeho, co jsi nepojmenoval.

Číst dál

Kam čtenář příspěvek odnáší

Příspěvek se přečte, a pak někam jde: do tootu, do zprávy, do e-mailu jednomu člověku. Dosud to čtenář dělal tak, že adresu opsal z řádku prohlížeče. 1.6 pod příspěvek dává řadu ovládacích prvků – vypnutou, dokud share: nejmenuje, co chceš, kreslenou v pořadí, v jakém to jmenuješ.

share:
  - mastodon
  - bluesky
  - email
  - copy
  - system

Co se předvyplní a co ne

Jméno příspěvku a jeho adresa tam, kde cíl bere obojí. Facebook a LinkedIn berou jen adresu a jméno si přečtou ze stránky. Čtenář píše tu část, která je jeho. bluesky, email, facebook, linkedin, threads a x jsou prosté odkazy, každý jedna adresa, žádný skript za nimi.

Tři, které nejsou odkazy

Číst dál

Napsáno ve vlaku

Čtenář, který uvažoval o přechodu na tento engine, napsal, že zůstane tam, kde je. Svůj blog spravuje z telefonu, na cestách, a blog, se kterým se dá pracovat jen z terminálu, mu nebyl k ničemu, ať se sestavoval jakkoli rychle. Měl pravdu.

1.6 mu odpovídá dvěma věcmi a jednou věcí, kterou odmítá udělat.

Stránka na blogu samotném

Nastav write: true a sestavení zveřejní malý editor na /write/: titulek, text, štítky, fotografie a video, každý obrázek se svým popiskem. Obléká si blog, do kterého píše – jeho jméno, jeho paletu, jeho jazyk – a při psaní nabízí vlastní štítky blogu, napřed ty použité za posledních dvanáct měsíců, aby se štítek ťuknul, místo aby se napsal podruhé jinak. Náhled ukáže příspěvek ve stylech blogu samotného. Řada značek nad textem obalí, co je vybráno, a druhým ťuknutím zase odejde. Nad tlačítkem odeslání přepínač Koncept | Publikovat.

Všechno se mezi návštěvami drží v prohlížeči – text v local storage, bajty obrázků v IndexedDB, protože local storage dostane jen pět megabajtů a jedno video z telefonu je víc. Když tě někdo na nástupišti vyruší, nic se neztratí.

Číst dál

Příspěvek předaný jako soubor

Až do 1.6 přicházel příspěvek od člověka u terminálu. Průvodce položil své otázky, otevřel editor, na konci se zeptal, co dál. Nic jiného ho napsat neumělo: ani skript, ani cron, ani telefon.

./blog.sh add post.md

dělá tutéž práci s markdownem předaným místo napsaným. Žádný editor, žádné otázky, žádný dialog na konci. Holé jméno souboru se hledá v incoming/, takže soubor může dorazit týmž nahráním jako fotografie, a jakmile je příspěvek zapsán, smaže se.

Kde by se průvodce ptal, tohle odmítá

Člověka se lze zeptat. Skriptu ne, takže z každé otázky je odmítnutí, které nic nezapíše: fotka, která se nedonahrála, prázdné tělo, soubor, který není text, druhé jméno souboru tam, kde se čekalo jedno. Alternativa – hádání – byla změřena na starém kódu, kde se značka pořadí bajtů před hlavičkou brala jako text těla: tři neviditelné bajty z editoru ve Windows a příspěvek dorazil bez titulku a bez štítků, pojmenovaný po slovech „title:" a „tags:", exit 0. 1.6 čte hlavičku skrz ně.

--json: jeden objekt, nic jiného

Číst dál

Čas mezi rozhodnutím a tím, než to web řekne

Publikace příspěvku dřív stála tolik, kolik měří archiv, ne kolik měří změna. Příspěvek datovaný dneškem změní tucet souborů. Sestavení vykreslilo každou stránku v archivu a každou přečetlo zpět z disku, aby to zjistilo.

Na archivu, kolem kterého tento engine vznikl – 6 639 příspěvků, na serveru, kde bydlí – to bylo 47 vteřin za nové sestavení, které nezměnilo nic, a 48 od stisku publikovat do chvíle, kdy byl příspěvek venku. V pořádku pro jeden příspěvek ráno. Méně v pořádku pro opravu překlepu v deseti z nich.

Co si sestavení teď pamatuje

1.6 si vede záznam o tom, co vstoupilo do každé stránky: příspěvek, šablona, lokalizace, konfigurace, engine sám. Při dalším sestavení vykreslí jen stránky, jejichž záznam už nesedí, a zbytek stojí jeden stat každá místo plného vykreslení a čtení zpět.

Týž archiv, měřený stejně: nové sestavení, které nemění nic, trvá sedminu toho, co dřív. Publikace příspěvku datovaného dneškem trvá asi dvě pětiny – 16 vteřin sestavení a 2 nahrání, kde bylo 48 – a sestavení to říká samo: Stránek beze změny, nepřestavěny: 10 160. Poměr je to, co cestuje; vteřiny jsou jednoho stroje.

Číst dál

./blog.sh 1.6

./blog.sh 1.6 je venku.

Sestavení přestalo znovu sestavovat to, co nikdo nezměnil: nové sestavení, které nemění nic, stojí sedminu toho, co dřív, obyčejná publikace asi dvě pětiny. Příspěvek jde předat jako soubor – skriptem, cronem, nebo novou stránkou na /write/ na blogu samotném, která odesílá z telefonu přes SSH, které server už má. Na síti nic nového nenaslouchá.

Kolem toho: řada ovládacích prvků sdílení pod příspěvkem, ikona, kterou může nést štítek, cesta ven z koše a z verzí a fotografie uložená jednou místo dvakrát.

#blogsh #ruby #staticsite