Date: 2020-12-15 20:00:00
From: rpt@desudoli.cz
Subject: Případ markdown
To: dalnopis@desudoli.cz
Tags: technologie software psaní
Desc: Vhodný formát pro delegování obsahu mozku na externí paměť.

Případ markdown

Markdown (dále jen MD) je nejhorší a zároveň nejlepší značkovací jazyk (markup language). Proto od něho neustále utíkám a pořád se k němu vracím. Ale nejprve trochu teorie pro nezasvěcené hlavy.

Benefity TXT souborů

Unix poskytuje dostatek nástrojů pro práci s textem. Je proto vhodné dělat si poznámky v TXT, tedy čistě textovém formátu. TXT formát je jednoduchý a přenosný, navzdory jisté, nikoliv nepřekonatelné, komplikaci zvané kódování (encoding). Textový soubor zabírá méně místa než soubory typu DOC nebo XLS (ODW a ODS v Libreoffice), fráze se snadno vyhledávají i v mnoha TXT souborech najednou a v neposlední řadě má text v monospace fontu své nepopiratelné kouzlo, kvůli kterému ještě stále existuje Gopher.

Pak jsou tu textové editory, s jejichž pomocí lze text editovat snadněji a rychleji než ve wordprocesorech typu Microsoft Word nebo Libreoffice Writer. Textové editory bývají relativně malé programy, nezabírají mnoho místa na disku, ani mnoho paměti. Rychle se spouštějí, vypínají a instalují. Rychle otevírají textové soubory a tak nějak nepřekážejí při pracovním výkonu. Moje volba padla na legendární (n)vi a jeho ještě slavnější derivát Vim.

Editory narozdíl od wordprocessorů neinterpretují vkládaný text, pouze ho zaznamenávají. Nemohou typograficky formátovat text a vizuálně dotvářet pěkné tištěné dokumenty s kurzívou, tučným řezem a obrázky. Ale mohou zanechat instrukce jinému programu, jehož úkolem je vytvářet typograficky „dospělé“ dokumenty. Oněm instrukcím se říká markup (značky, tagy) a určují, jak má být interpretován blok textu, který vymezují.

Patrně nejznámější značkovací jazyk je HTML, podmnožina obecnějšího průmyslového formátu XML. V HTML je napsaný tento text. Pomocí HTML v kombinaci s CSS (kaskádovými styly) lze vytvářet typograficky i sémanticky sofistikovavé dokumenty. Nikoliv ideální, ale pro webový formát dostatečné. Psát poznámky v HTML je jako jít s kladivem na komára. Psát HTML (bez pomoci pluginu) je nevděčné a čitelnost takového textu přímo v editoru mizerná. Na druhou stranu je zbytečný luxus číst poznámky v browseru, i když tomu nic nebrání.

Přesto neškodí mít možnost nějakým způsobem zvýraznit části textu nebo vyexportovat obyčejný text do nějakého vizuálně pokročilejšího formátu (HTML, PDF), případně do více formátů. Vznikla proto poptávka po něčem jednodušším než HTML, co lze do HTML exportovat a vytvářet tak krásné dokumenty s kurzívou a obrázky, a přitom zachovat všechny výhody TXT souborů. Vzniklo několik jednoduchých značkovacích jazyků, např. txt2tags, asciidoc nebo syntaxe pro různé wiki formáty. Ale zdaleka nejpopulárnějším se stal markdown.

Markdown (MD)

Markdown je také pouhý textový soubor. Vznikl v roce 2004 a jeho autorem je John Gruber a Aaron Swartz. Gruber vycházel z formátu emailu (textového emailu, nikoliv současných HTML emailů) a snažil se vytvořit značky, které lze snadno psát a výsledný text snadno číst. Téměř stejně tak snadno, jako čistý text bez značek. Kromě toho napsal Gruber i perlovský skript, který převádí MD text do HTML.

Z těchto důvodů je MD vhodný na poznámky, osobní wiki soubory nebo README soubory — většinou krátké, jednoduché texty. Právě proto MD používám.

Odi et amo

Přesto sem tam zkouším jiné formáty. Měl jsem krátkou aférku s txt2tags (viz výše) a jistou dobu jsem se pokoušel proniknout do tajů Emacsu a Org mode. Mezitím jsem vyzkoušel mnohé další značkovací jazyky či jednoduchý wiki software, např. Vimwiki. Nakonec jsem se vždycky vrátil zprátky k MD. Pokusím se vystvětlit proč.

Potřebujeme-li složitější typografii, nevýhody MD začnou převažovat:

To je důvod, proč vzniklo několik různých verzí MD jako Multimarkdown, GitHub Markdown apod. Různé verze přidávájí vždy něco, co v původním MD chybí a co autoři derivátů považují za důležité. Tyto „flejvry“ nejsou vzájemně kompatibilní, což vedlo k pokusu standardizovat MD. CommonMark ale podle některých kritiků MD zvyšuje úroveň komplexnosti nad přijatelnou míru a tím se dostává do sporu s původním účelem MD, kterým je jednoduchost. Problémy s MD jsou diskutovány v odkazech pod odstavcem. Jak říká Ingo Schwarze v prvním ze zmíněných odkazů, už základní design MD je vadný a to nespraví žádná standardizace.

Proč vůbec MD používat?

Jak už bylo řečeno, všechny zmíněné nevýhody MD začínají hrát roli teprve ve chvíli, kdy je cílem velice komplexní dokument s tabulkami, poznámkami pod čarou atd., který je potřeba exportovat např. do PDF. Mé poznámky většinou tak komplexní nejsou a texty pro tento web píšu rovnou v HTML.

Dále, MD značky se snadno pamatují a nepřekážejí ve čtení. Vim zvýrazňuje MD tagy automaticky, což ještě zlepšuje čitelnost, a používám prográmek zvaný lowdown(1), který napsal jeden z vývojářů OpenBSD a který řeší zmíněný problém exportu.

Jde o jednoduchý konvertor z MD do několika výstupních formátů, který z různých „flejvrů“ MD vybírá právě ty vlastnosti, které mě zajímají a v původním MD chybí. Program je v repozitářích OpenBSD v aktuální verzi a já mám větší důvěru v práci vývojářů OpenBSD než jiných programátorů. Vim, lowdown(1) a standardní nástroje Unixu pokryjí většinu mých potřeb, pokud jde o vyhledávání, editaci, syntaxi i export poznámek. Nemám úplně pevné a ustálené „workflow“, ale tyto nástroje používám víceméně pravidelně.

A co jiné možnosti?

Proč jsem nezůstal u txt2tags nebo Org mode?

Txt2tags je patrně lepší markup language než MD, ale o něco méně jednoduchý. Není však tak široce podporovaný a jeho jediným konvertorem je skript napsaný v Pythonu. V době, kdy jsem ho používal, jeho zdroják pomalu zastarával a na obzoru žádné zlepšení. Projekt vypadal na umření. Syntax highlighting ve Vimu nefungoval podle mých představ, v Emacsu to bylo o něco lepší. Už jsem měl mnoho poznámek napsaných v txt2tags, když jsem se nakonec rozhodl vrátit se zpátky k MD. Podtrženo sečteno, návratu nelituju. Bylo tam pár věcí, které se mi líbily a spousta drobností a omezení, které mi nevyhovovaly.

Org mode je určitě lepší nez MD, ale je to, řečeno hezky česky, overkill. Jednak je potřeba se naučit používat Emacs, velice sofistikovaný textový editor, ale i ten je na můj vkus a pro mé potřeby overkill. Nějakou dobu jsem se snažil naučit v něm pracovat, nicméně jeho komplexnost mě nakonec přemohla a já se vrátil zpátky k Vimu. Ani Vim není jednoduchý nástroj, což má své výhody i nevýhody, ale Emacs je komplexnější. To mi vadilo víc než neustálá práce s Ctrl a Alt. Org mode je podobně komplikovaný, má příliš mnoho možností, ve kterých jsem se nakonec ztratil. Nemohu říci, že by u mě fungovalo používat pouhý subset jeho možností, např. jeho hierarchický formát a sem tam nějaký vzhledový markup. Nikoliv, bohatství možností mě vždycky nakonec pohltilo. A to jsem používal Org mode také v práci, kde jsou moje potřeby mnohem větší než u soukromých poznámek. Navíc bylo složité pamatovat si najednou Vim, Emacs a Org mode.

Outlines neboli hierarchické záznamy jsou šikovná věc a Org mode ji uměl dobře. Hierarchická struktura textu nebo hierarchický záznam znamená v podstatě seznam, kde každý řádek seznamu má nějaké místo v hierarchii. Hierarchie se v textu většinou dosahuje odsazením od levého okraje stránky, přinejmenším je to tak nejpřehlednější. Takto lze velice rychle vytvořit strukturu celého projektu nebo třeba kapitoly či příběh plánované knihy. Vymyslíme-li nějaké značky pro iteraci a podmínku, můžeme takto popisovat problémy a vytvářet strukturu programu pomocí textového editoru rychleji a efektivněji než známé programátorské diagramy, které jsme se učili ve škole. Hierarchické záznamy nejsou dobré na všechno, ale pro rychlý záznam vršících se pracovních úkolů, rozbor problému či rozvržení projektu na dílčí úkoly nemají konkurenci.

Protože jsem zůstal pouze u Vimu, hledal jsem náhradu mezi vimovskými pluginy. Vim-Orgmode nebo VimOrganizer se snažily být příliš jako původní Org mode, aniž by se jim to povedlo — příliš komplexní a zároveň nedotažené. Jako jednodušší a přitom životaschopné alternativy se jeví Vimoutliner a Vim-outlaw. První klade větší důraz na hierarchický seznam než na text samotný, druhý v jistém smyslu obráceně. První je komplexnější, druhý minimalističtější.

Používám oba, hlavně v práci. Ale nikoliv na poznámky, ač jsem to zkoušel. MD je v tomto ohledu pořád nejvhodnější nástroj. MD je vhodný na klasický text, pár nadpisů a sem tam nějaké zvýrazněné slovo. Outliner je v prvé řadě seznam a poznámky formou seznamu nefungují. Alespoň ne u mě.

Na závěr

Původně jsem se chtěl zabývat především markdownem, ale text se jaksi samovolně zahrnul další témata. Snad moje zkušenosti budou někomu k užitku. Podstatné je vyzkoušet různé nástroje a ujasnit si vlastní postup. Z mnoha důvodů nedoporučuju zůstávat u Windows, ale mnoho těchto nástrojů funguje i pod Windows a s úspěchem je používám také v práci, kde se bez Windows neobejdu.

EOF