Pollen

rpt
dne @ číslo 15

Novým nástrojem pro tvorbu tohoto webu se stává Pollen.

V úvodní poznámce jsem uvedl, že je tento blog generován pomocí sblg(1). To už neplatí. Od nynějška používám Pollen.

Výhody a nevýhody sblg(1)

Sblg(1) má své výhody. Je malý, rychlý, napsaný v C, skoro žádné závislosti, zapadá do filozofie OpenBSD (jeho autor je jedním z vývojářů). Funguje spolehlivě a neměl jsem žádný závažný důvod měnit, pouze tyto dvě drobné výhrady:

Zpočátku jsem uvažoval, že své zápisky uspořádám jako online knihu, což jsou statické webové stránky, které kombinují formu knihy a webu, tj. mají kapitoly, ale tok textu není rozdělený na stránky, obsahují hyperlinky atd. Nakonec jsem zvolil formu blogu, protože je volnější. Mohu přeskakovat na různá témata, která mě v danou chvíli zajímají. Původně jsem také zamýšlel věnovat větší pozornost typografii. Na tuto myšlenku, stejně jako na formát online knihy, mě přivedl americký typograf Matthew Butterick, sám autor několika webových knih. I od toho jsem nakonec upustil ve prospěch jednoduché, až brutální formy à la suckless. Nejsem totiž nijak extra zběhlý v HTML a CSS a kromě toho, času není nazbyt.

Od svých původních představ jsem sice ustoupil, ale časem bych se k nim rád vrátil. K tomu potřebuju větší flexibilitu a větší kontrolu nad výstupem, než poskytuje sblg(1). Pollen, o kterém bude řeč dále, takovou kontrolu poskytuje a přitom neopouštím bezpečné vody open source.

Případ markdown

Markdown (MD) je značkovací jazyk, takový hodně zjednodušený HTML. Jeho velkou devizou je jednoduchost a čitelnost zdrojového souboru. Spousta lidí si dělá zápisky/poznámky do TXT souborů a hojně přitom využívají MD, protože výsledek je skoro stejně dobře čitelný jako textový soubor samotný. HTML či jeho obecnější forma XML jsou naproti tomu zcela nepřehledné. Kristaps Dzonsons, autor sblg(1) a mandoc(1) je proti MD, stejně jako někteří další vývojáři OpenBSD, ale oceňuje jeho přednosti při psaní krátkých, jednoduchých textů, jako jsou příspěvky na blog. To a rozšířenost MD zřejmě jsou důvody, proč sblg(1) umožňuje psát blogposty v MD.

Na druhou stranu jak autor sblg(1), tak autor Pollenu se shodnou na tom, že nevýhody MD převažují nad výhodami. Ve stručnosti: nepokrývá ani některé základní formy jako seznam definic, citlivost na kontext, nejednoznačnost, míchání sémantického a vzhledového markupu, není samostatný (umožňuje vkládání HTML), počítá pouze s výstupem do HTML, není rozšiřitelný atd. Proto překvapuje, že je MD mezi autory tak oblíbený. Další informace viz zdezde.

Pollen na scéně

Butterickovu práci sleduju už nějakou dobu. Je to typograf, tvůrce písem, člověk s originálními názory na online publikování, ale kromě toho i programátor. Je autorem programů PollenQuad. Pollen je nástrojem pro publikování na webu a bude o něm řeč dále. Quad má být moderním nástupcem Latexu. Právě nedávno Butterick zveřejnil použitelnou verzi Quadu, byť zdaleka ne hotovou. Napsat moderní verzi legendárního sázecího programu Tex/Latex je velmi ambiciózní projekt a Butterick není zdaleka jediný, kdo s tímto nápadem přišel. Ale jeho přístup se mi ze všech pokusů, které jsem zatím viděl, zamlouvá nejvíc. Myslím, že je to práce pro profesionálního typografa.

Pokud jde o online publikování, Butterick tvrdí, že kniha nejsou jenom data, kniha je program. Pollen, nástroj, který vytvořil, toto paradigma respektuje. Pollen umožňuje psát texty buď pomocí markdownu (ústupek oblíbenosti MD) nebo pomocí vlastního markupu. Pollen markup je zcela flexibilní, protože tagy lze tvořit takříkajíc za pochodu. Jeho syntaxe vychází ze syntaxe Racketu, programovacího jazyka z rodiny Lispu. HTML tagy napsané v syntaxi Pollenu/Racketu se automaticky převedou do svých HTML ekvivalentů, převod ostatních tagů do HTML, které si autor během psaní vymyslí, je pak třeba definovat.

To asi nezní příliš jasně, ale v praxi je to jednoduché. Princip Pollenu je skutečně tak jednoduchý, že se mi tomu nechtělo věřit a stále jsem za tím hledal něco jiného. Protože syntaxe Pollenu vychází ze syntaxe Racketu, lze do hry zapojit veškeré možnosti Racketu, kompletního a komplexního programovacího jazyka.

Zatímco sblg(1) je soubor několika funkcí, které dělají přesně vymezené věci, Pollen je de facto Racket uzpůsobený k psaní textů a jejich publikování.

Právě to stojí za flexibilitou Pollenu. Pollen nebyl původně určen k blogování, nýbrž k publikování online knih, tzn. obsahu, který je daný a příliš často se nemění. Naproti tomu blog se může měnit relativně často a obsahuje časovou osu, která v knize chybí. Díky tomu, že je Pollen vlastně pouhou nadstavbou Racketu, bylo možné poměrně jednoduše vytvořit kopii tohoto blogu a dokonce změnit pár věcí, které jsem v sblg(1) neuměl udělat. Určitě to jde udělat ještě lépe, programátorsky i typograficky.

Nevýhody Pollenu

Jestliže kniha je program, pak se autor stává programátorem. A to není job pro každého. Je potřeba se do toho ponořit, něco nastudovat, spoustu věcí vyzkoušet a vyvztekat se nad tím, co nejde. Na druhou stranu musím říci, že zádrhele, na které jsem narazil, se podařilo vyřešit relativně snadno. Racket je programovací jazyk, který se mimo jiné používá k výuce programování. To naznačuje jistou přívětivost vůči začátečníkům.

Pollen také vyžaduje instalaci Racketu, protože není samostatným programem, ale balíčkem, který se instaluje v rámci Racketu. Racket obsahuje poměrně hodně závislostí, takže zabere nějaké místo na disku. Navíc byl Racket nedávno přeprogramován a to je patrně důvod, proč pod OpenBSD nefunguje správně DrRacket, editor a REPL Racketu. Příliš mi to nevadí, protože Racket lze spouštět a ovládat z terminálu a mám raději editory typu Vim než klasický, ale poněkud těžkopádný editor přibalený k DrRacket. V jiných operačních systémech může být situace lepší.

HTML to nekončí

Pollen byl naprogramován s myšlenkou, že lze jedny zdrojové soubory použít k různým výstupům. Tzn. výstupem nemusí být jen HTML pro web, ale třeba PDF pro tisk apod. To je vlastnost, která mě zajímá, zejména v kombinaci s již zmíněným programem Quad, který umožňuje převést dokumenty Pollenu do PDF. Tak daleko jsem se ale zatím nedostal.