Štítekobsah19

To poslední, co kamera zapíše

Někdo otevře příspěvek s videem a stiskne přehrát. Připojení je v pořádku. Video není velké. Chvíli se nic neděje, a pak se video spustí naráz, jako by čekalo na svolení.

Čekalo na rejstřík.

Proč sedí na konci

MP4 je hrstka boxů položených za sebou. Jeden z nich, mdat, je obraz a zvuk. Jiný, moov, je rejstřík: který snímek leží na kterém bajtu, jak dlouho to celé trvá, jakému kodeku to předat. Přehrávač potřebuje moov dřív, než může ukázat jediný snímek.

Číst dál

Kolo, které nikdo nemusel kreslit

Ukázková konfigurace, kterou tento engine dodává, nese kolo: štítek jménem kolo a pod ním ručně vypsané <svg>. Je tam proto, že tam nebylo co jiného dát. tag_icons bral jméno ikony, kterou engine dodává, nebo vlastní kresbu, a dodával jen osm typů obsahu – text, obrázek, video, odkaz, zvuk, citát, dokument, chat. Štítek o cyklistice mohl nosit znak pro „zvuk", nebo někdo mohl strávit večer nad souřadnicovou mřížkou.

1.7 mezi to vkládá pětapadesát kreseb a každé dává jméno.

Pětapadesát podstatných jmen

Spočítáno v lib/icons.rb: osm typů obsahu, pětapadesát dalších, třiašedesát jmen, o která si štítek může říci. Seskupeno podle toho, o čem blogy bývají.

Číst dál

Adresa, o které příspěvek je

Někdo ti pošle článek. Přečteš ho a máš k němu dvě stě slov – ne recenzi, jen to, čeho sis všiml, a jednu větu o tom proč. Příspěvek je z větší části ta druhá stránka a adresa, o které je, musí někde bydlet.

Až do tohoto vydání zněla poctivá odpověď: v odstavci, jako každý jiný odkaz. Karta, kterou takový příspěvek otevírá, jako blok existovala – importéry ji vyrábějí z Tumblru a z Bluesky – ale nic, co by šlo napsat, ji nevytvořilo. Zapisovač, který příspěvek převádí zpět do markdownu, pro ni neměl syntaxi, takže edit na příspěvku s odkazem nabízel kartu zahodit a add <soubor> ji neuměl vytvořit vůbec. Vlastní příspěvky o vydáních tohoto projektu z toho důvodu po 1.3 přestaly být příspěvky s odkazem. Nástroj se změnil; záměr ne.

Tři řádky v hlavičce

---
tags: release
link: https://example.org/clanek-nekoho-jineho
link_title: Článek někoho jiného
link_description: O čem je, podle jeho vlastní stránky.
---

Dvě věci v něm jsou špatně a jedna stojí za ukradení.
Číst dál

Čí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

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

Č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

Všechno ostatní v 1.5

Pět příspěvků pokrylo tvar tohoto vydání. Tady je zbytek, po odstavci na každou věc.

Číst dál

Uříznuto dřív, než se to zapíše

Karta ve výpisu bývala celý příspěvek. Engine do stránky vykreslil každý jeho blok a stylesheet výsledek ořízl na 500 pixelů.

Na skutečné titulní straně to znamenalo čtrnáct karet nesoucích mezi 794 a 2 616 pixely obsahu a ukazujících 500. Z 50 659 znaků stránky jich 49 312 sedělo uvnitř oříznutí. Třiatřicet ze 154 jejích zaostřitelných prvků šlo dosáhnout klávesnicí, zatímco byly na obrazovce neviditelné – odkazy, které vidící uživatel s myší neviděl a uživatel s klávesnicí nemohl přeskočit.

1.5 kartu uřízne dřív, než se zapíše. Stylesheet neskrývá nic.

Ta stránka šla z 89 268 bajtů HTML na 41 155. Její největší karta, 7 463 znaků, má teď 2 566. A „číst dál" se objeví přesně tehdy, když se něco nevešlo, místo aby sedělo pod kartou, která už ukazovala všechno, co měla.

Rozpočet je v pixelech, ne ve znacích

Číst dál

Slug je adresa, ne jméno

Po většinu života tohoto projektu měl příspěvek bez titulku dvě jména. Jeho vlastní stránka mu říkala podle data. Všechno ostatní – záložka prohlížeče, karta odkazu, kterou někdo sdílí, každá položka ve feedu – mu říkalo burtiky-opekame-hipstamatic-oggl-jane.

To není okrajový případ. Na archivu, na kterém se tento engine měří, nenese titulek 2 754 příspěvků z 4 418. Dvaašedesát procent webu, které jdou do světa pod adresou.

Slug je vyrobený ze slov. Není to ta slova.

Slug je strojová odpověď na „kde tohle bydlí": malá písmena, bez diakritiky, spojeno pomlčkami, uříznuto na prvních osm slov. Každá vlastnost, která z něj dělá dobrou adresu, z něj dělá špatné jméno. Nemá velká písmena, nemá interpunkci a netuší, kam věta, ze které byl uříznut, mířila.

1.5 bere jméno z téhož místa, odkud přišel slug – z vlastního začátku příspěvku – a zastaví se na lepším místě.

Kde se zastaví

Čí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

Procházení archivu

Jeden příspěvek tady nedávno tvrdil, že menu průvodce se zkrátilo, protože operace s příspěvkem patří do příspěvku, ne do menu. To pořád platí. Tohle vydání přesto přidává obrazovku a důvod stojí za vyslovení: najít příspěvek je jiná práce než s ním něco udělat.

./blog.sh browse ukazuje tytéž příspěvky jako list, jako obrazovku, ve které zůstáváš.

Co to je

Šipky a Page Up/Down celým archivem. Filtry podle typu, stavu a štítku, s počtem u každého. A hledání, které filtruje při psaní.

Hledání je vlastní hledání webu. Slova se spojují jako A, "fráze v uvozovkách" se počítá jako jedna, -slovo vylučuje a diakritika nikdy nerozhoduje o shodě. Jazyk dotazu a sjednocování bydlí v lib/search_query.rb, vedle poznámky, že se mění společně s assets/js/search.js – protože dotaz, který v prohlížeči znamená jedno a v terminálu druhé, je horší než nemít hledání v terminálu vůbec.

Prohledává plný text každého příspěvku, takže pod vybraným řádkem je řádek vlastního textu toho příspěvku, který ti ukazuje, proč odpovídá.

Číst dál

Tvůj fotoaparát si zapisuje, kde jsi byl

Vyfoť něco telefonem a zaznamená místo, kde jsi stál. Ne jako odhad – jako souřadnice, přesné na pár metrů, v bloku metadat, který cestuje se souborem, kamkoli jde.

Sociální sítě to při nahrání odstraňují. Dělají to léta, dost potichu na to, aby na to většina lidí přestala myslet. Statický web nemá nikoho, kdo by to udělal: blog.sh zkopíroval tvou fotku do archivu bajt po bajtu a nic v enginu se na metadata nikdy nepodívalo. Takže fotka kočky na parapetu zveřejnila parapet.

Od 1.2.1 ne. Fotka přijde o polohu na cestě do archivu – když ji přidáš do příspěvku, a stejně tak když vstoupí kterýmkoli z dvaadvaceti importérů, protože všechny končí v témže zápisu.

Jen poloha

Fotoaparát, objektiv, expozice, okamžik otevření závěrky: ty zůstávají. Jsou to tvoje vlastní záznamy o tvé vlastní fotografii a archiv, který by je potichu zahodil, by odpovídal na otázku, kterou nikdo nepoložil.

Číst dál

Starý odkaz pořád zná cestu

První příspěvek na tomto webu je o fotce, která zmizela z blogového zápisu z roku 2012, zatímco odkaz na ni fungoval dál. Rozpad odkazů je důvod, proč tento engine existuje, takže engine, který by si potichu rozbíjel vlastní adresy, by byl špatný vtip.

Přejmenování příspěvku mění jeho adresu. To je nevyhnutelné – slug je adresa. Co je odvratitelné, je to, aby se ze staré adresy stala 404.

Co přejmenování dělá teď

Přejmenuj příspěvek – r v dialogu vlastností – a příspěvek si svou starou adresu zaznamená do sebe. Sestavení pak na každé adrese, kterou příspěvek kdy měl, drží jednostránkové přesměrování.

Odkaz v dva roky starém tootu se dál překládá. Odkaz, který někdo dal do vlastního blogového příspěvku, se dál překládá. Můžeš opravit slug, kterého lituješ, aniž tě oprava stojí každý odkaz na něj, který už ve světě existuje.

Přesměrování patří příspěvku

Číst dál

Fotka, kterou tvůj iPhone nikomu neukáže

iPhone fotí ve výchozím nastavení do HEIC. Safari ho vykreslí. Chrome ne. Firefox ne. Takže fotka rovnou z telefonu, připojená k příspěvku a publikovaná, je fotka, kterou většina tvých čtenářů nikdy neuvidí.

Staré chování bylo to nejhorší možné: soubor vstoupil, sestavení ho nedokázalo změřit a obrázek ze stránky potichu zmizel – i s popiskem. Žádná chyba. Jen příspěvek s dírou tam, kde byla fotka.

Odmítnuto, s příkazem, který potřebuješ

Připojení HEIC teď uložení zastaví a vypíše přesný převodní příkaz pro stroj, u kterého stojíš:

sips -s format jpeg photo.heic --out photo.jpg      # macOS
heif-convert photo.heic photo.jpg                    # Linux

Tvůj soubor zůstane přesně tam, kde byl, v incoming/. Nic se nemaže, nic se nehádá. Převedeš ho a pokračuješ.

Nebo převedeno, když si řekneš

Číst dál

Tři koncepty, tři rána

Psaní nepřichází rovnoměrně. Přijde večer, kdy chtějí ven tři příspěvky, a pak týden nic. Publikovat je tak, jak byly napsány, znamená tři příspěvky za jednu noc a potom ticho – což je horší blog než tytéž tři příspěvky rozložené do tří rán.

Takže web teď může říci, kdy obvykle publikuje:

publishing:
  slots:
    - "mon 09:30"
    - "wed 09:30"
    - "fri 09:30"

Nebo, když píšeš víc, jediné "daily 09:00".

S tímhle v konfiguraci ti naplánování konceptu nabídne nejbližší slot, který žádný jiný naplánovaný příspěvek ještě nezabírá. Tři koncepty napsané za jeden večer dostanou nabídnuto pondělí, středu a pátek, v tomhle pořadí, aniž bys počítal dny.

Jen a pouze nabízí

Číst dál

Některé příspěvky jsou ke stažení

Fotka v příspěvku je holé jméno souboru v řádku s obrázkem. Vždycky byla:

![Pohled z okna](window.jpg)

Takže soubor připojený k příspěvku je týž řádek bez vykřičníku:

[Poznámky ze čtení, 2025](reading-notes.pdf)

Celý řádek, který není nic než odkaz, mířící na holé jméno souboru se známou příponou, je příloha. Připraví se přes incoming/ jako fotka, uloží se vedle příspěvku jako fotka a nikdy tvůj web neopustí.

Řádek s adresou v sobě zůstává tím, čím vždy byl: odkazem. Rozdíl je holé jméno souboru – totéž pravidlo, kterým se fotky už řídí, takže není co nového se učit.

Vykreslená jako karta, ne jako odkaz

Příloha se vykreslí jako karta nesoucí popisek, příponu a velikost. Velikost tam je proto, že stažení si zaslouží říci, co stojí, než se k němu zavážeš – 40MB PDF na telefonu na mobilních datech je jiná nabídka než 200kB, a čtenář má mít možnost to rozhodnout.

Číst dál

Příspěvek, který zůstává

Titulní strana blogu je jediná stránka, která je prohlášením. Všechno ostatní je chronologie, která dělá svou práci.

Takže pinned: true v hlavičce publikovaného příspěvku teď drží jeho kopii nahoře na první stránce výpisu. To je celá funkce a zajímavá část je všude tam, kde se záměrně neuplatní.

Jen titulní strana

Výpisy podle typu, výpisy štítků, feed RSS a sitemapa zůstávají přísně chronologické. Připnutí je tvrzení o tom, co má návštěvník číst první, ne přepis toho, kdy byly věci napsány. Kdo odebírá feed, dostává příspěvky v pořadí, v jakém se staly, a připnutý příspěvek mu nepředbíhá frontu pokaždé, když se přepne.

Co se děje, jak stárne

Dokud je příspěvek ještě dost nový na to, aby podle data seděl na stránce 1, objeví se přesně jednou – připnutí ho nevytiskne dvakrát na téže obrazovce. Jakmile zestárne na stránku 2, objeví se na obou místech: nahoře na stránce 1 a na svém chronologickém místě na stránce 2.

Číst dál

Žádná databáze. Jeden soubor JSON na příspěvek.

Tady jsou tři řádky Markdownu a tady je, jak vypadá soubor na disku poté, co je uložíš.

Co napíšeš:

Příspěvky jsou **soubory**. Sestavení je cyklus přes složku.

Žádný třetí krok není.

Co dopadne na disk, jeden soubor JSON na příspěvek:

Číst dál