Date: 2020-12-15 20:00:00 Tags: technologie software psani Desc: Vhodny format pro delegovani obsahu mozku na externi pamet. # Pripad markdown Markdown (dale jen MD) je nejhorsi a zaroven nejlepsi znackovaci jazyk (markup language). Proto od neho neustale utikam a porad se k nemu vracim. Ale nejprve trochu teorie pro nezasvecene hlavy. ## Benefity TXT souboru Unix poskytuje dostatek nastroju pro praci s textem. Je proto vhodne delat si poznamky v TXT, tedy ciste textovem formatu. TXT format je jednoduchy a prenosny, navzdory jiste, nikoliv neprekonatelne, komplikaci zvane kodovani (encoding). Textovy soubor zabira mene mista nez soubory typu DOC nebo XLS (ODW a ODS v Libreoffice), fraze se snadno vyhledavaji i v mnoha TXT souborech najednou a v neposledni rade ma text v monospace fontu sve nepopiratelne kouzlo, kvuli kteremu jeste stale existuje Gopher. *) Tedy pokud si poznamky delame a chceme je uchovavat elektronicky - papir je porad v mnoha ohledech nedostizny. Pak jsou tu textove editory, s jejichz pomoci lze text editovat snadneji a rychleji nez ve wordprocesorech typu Microsoft Word nebo Libreoffice Writer. Textove editory byvaji relativne male programy, nezabiraji mnoho mista na disku, ani mnoho pameti. Rychle se spousteji, vypinaji a instaluji. Rychle oteviraji textove soubory a tak nejak neprekazeji pri pracovnim vykonu. Moje volba padla na legendarni (n)vi a jeho jeste slavnejsi derivat Vim. Editory narozdil od wordprocessoru neinterpretuji vkladany text, pouze ho zaznamenavaji. Nemohou typograficky formatovat text a vizualne dotvaret pekne tistene dokumenty s kurzivou, tucnym rezem a obrazky. Ale mohou zanechat instrukce jinemu programu, jehoz ukolem je vytvaret typograficky "dospele" dokumenty. Onem instrukcim se rika markup (znacky, tagy) a urcuji, jak ma byt interpretovan blok textu, ktery vymezuji. Patrne nejznamejsi znackovaci jazyk je HTML, podmnozina obecnejsiho prumysloveho formatu XML. V HTML je napsany tento text. Pomoci HTML v kombinaci s CSS (kaskadovymi styly) lze vytvaret typograficky i semanticky sofistikovave dokumenty. Nikoliv idealni, ale pro webovy format dostatecne. Psat poznamky v HTML je jako jit s kladivem na komara. Psat HTML (bez pomoci pluginu) je nevdecne a citelnost takoveho textu primo v editoru mizerna. Na druhou stranu je zbytecny luxus cist poznamky v browseru, i kdyz tomu nic nebrani. Presto neskodi mit moznost nejakym zpusobem zvyraznit casti textu nebo vyexportovat obycejny text do nejakeho vizualne pokrocilejsiho formatu (HTML, PDF), pripadne do vice formatu. Vznikla proto poptavka po necem jednodussim nez HTML, co lze do HTML exportovat a vytvaret tak krasne dokumenty s kurzivou a obrazky, a pritom zachovat vsechny vyhody TXT souboru. Vzniklo nekolik jednoduchych znackovacich jazyku, napr. txt2tags, asciidoc nebo syntaxe pro ruzne wiki formaty. Ale zdaleka nejpopularnejsim se stal markdown. ## Markdown (MD) Markdown je take pouhy textovy soubor. Vznikl v roce 2004 a jeho autorem je John Gruber a Aaron Swartz. Gruber vychazel z formatu emailu (textoveho emailu, nikoliv soucasnych HTML emailu) a snazil se vytvorit znacky, ktere lze snadno psat a vysledny text snadno cist. Temer stejne tak snadno, jako cisty text bez znacek. Krome toho napsal Gruber i perlovsky skript, ktery prevadi MD text do HTML. Z techto duvodu je MD vhodny na poznamky, osobni wiki soubory nebo README soubory - vetsinou kratke, jednoduche texty. Prave proto MD pouzivam. ## Odi et amo Presto sem tam zkousim jine formaty. Mel jsem kratkou aferku s txt2tags (viz vyse) a jistou dobu jsem se pokousel proniknout do taju Emacsu a Org mode. Mezitim jsem vyzkousel mnohe dalsi znackovaci jazyky ci jednoduchy wiki software, napr. Vimwiki. Nakonec jsem se vzdycky vratil zpratky k MD. Pokusim se vystvetlit proc. Potrebujeme-li slozitejsi typografii, nevyhody MD zacnou prevazovat: - nepokryva ani nektere zakladni formy jako napr. seznam definic, - je citlivy na kontext, - jeho markup neni zcela jednoznacny, - micha semanticky a vzhledovy markup, - neni samostatny (umoznuje vkladani HTML), - pocita pouze s vystupem do HTML, - neni rozsiritelny. To je duvod, proc vzniklo nekolik ruznych verzi MD jako Multimarkdown, GitHub Markdown apod. Ruzne verze pridavaji vzdy neco, co v puvodnim MD chybi a co autori derivatu povazuji za dulezite. Tyto "flejvry" nejsou vzajemne kompatibilni, coz vedlo k pokusu standardizovat MD. CommonMark ale podle nekterych kritiku MD zvysuje uroven komplexnosti nad prijatelnou miru a tim se dostava do sporu s puvodnim ucelem MD, kterym je jednoduchost. Problemy s MD jsou diskutovany v odkazech pod odstavcem. Jak rika Ingo Schwarze v prvnim ze zminenych odkazu, uz zakladni design MD je vadny a to nespravi zadna standardizace. *) Mezi autory CommonMark, mozna i puvodni iniciator celeho projektu je John McFarlane, autor oblibeneho konvertoru mezi desitkami ruznych formatu znameho jako Pandoc. ## Proc vubec MD pouzivat? Jak uz bylo receno, vsechny zminene nevyhody MD zacinaji hrat roli teprve ve chvili, kdy je cilem velice komplexni dokument s tabulkami, poznamkami pod carou atd., ktery je potreba exportovat napr. do PDF. Me poznamky vetsinou tak komplexni nejsou a texty pro tento web pisu rovnou v HTML. *) S pluginem do Vimu zvanym Emmet je psani HTML brnkacka. Dale, MD znacky se snadno pamatuji a neprekazeji ve cteni. Vim zvyraznuje MD tagy automaticky, coz jeste zlepsuje citelnost, a pouzivam programek zvany lowdown(1), ktery napsal jeden z vyvojaru OpenBSD a ktery resi zmineny problem exportu. Jde o jednoduchy konvertor z MD do nekolika vystupnich formatu, ktery z ruznych "flejvru" MD vybira prave ty vlastnosti, ktere me zajimaji a v puvodnim MD chybi. Program je v repozitarich OpenBSD v aktualni verzi a ja mam vetsi duveru v praci vyvojaru OpenBSD nez jinych programatoru. Vim, lowdown(1) a standardni nastroje Unixu pokryji vetsinu mych potreb, pokud jde o vyhledavani, editaci, syntaxi i export poznamek. Nemam uplne pevne a ustalene "workflow", ale tyto nastroje pouzivam vicemene pravidelne. *) Kristaps Dzonsons, autor lowdown(1) je zaroven jednim z autoru mandoc(1), modernejsiho nastroje na kompilaci manualovych stranech Unixu. Z toho soudim, ze Kristaps se ve znackovacich jazycich vyzna. ## A co jine moznosti? Proc jsem nezustal u txt2tags nebo Org mode? Txt2tags je patrne lepsi markup language nez MD, ale o neco mene jednoduchy. Neni vsak tak siroce podporovany a jeho jedinym konvertorem je skript napsany v Pythonu. V dobe, kdy jsem ho pouzival, jeho zdrojak pomalu zastaraval a na obzoru zadne zlepseni. Projekt vypadal na umreni. Syntax highlighting ve Vimu nefungoval podle mych predstav, v Emacsu to bylo o neco lepsi. Uz jsem mel mnoho poznamek napsanych v txt2tags, kdyz jsem se nakonec rozhodl vratit se zpatky k MD. Podtrzeno secteno, navratu nelituju. Bylo tam par veci, ktere se mi libily a spousta drobnosti a omezeni, ktere mi nevyhovovaly. Org mode je urcite lepsi nez MD, ale je to, receno hezky cesky, overkill. Jednak je potreba se naucit pouzivat Emacs, velice sofistikovany textovy editor, ale i ten je na muj vkus a pro me potreby overkill. Nejakou dobu jsem se snazil naucit v nem pracovat, nicmene jeho komplexnost me nakonec premohla a ja se vratil zpatky k Vimu. Ani Vim neni jednoduchy nastroj, coz ma sve vyhody i nevyhody, ale Emacs je komplexnejsi. To mi vadilo vic nez neustala prace s `Ctrl` a `Alt`. Org mode je podobne komplikovany, ma prilis mnoho moznosti, ve kterych jsem se nakonec ztratil. Nemohu rici, ze by u me fungovalo pouzivat pouhy subset jeho moznosti, napr. jeho hierarchicky format a sem tam nejaky vzhledovy markup. Nikoliv, bohatstvi moznosti me vzdycky nakonec pohltilo. A to jsem pouzival Org mode take v praci, kde jsou moje potreby mnohem vetsi nez u soukromych poznamek. Navic bylo slozite pamatovat si najednou Vim, Emacs a Org mode. _Outlines_ neboli hierarchicke zaznamy jsou sikovna vec a Org mode ji umel dobre. Hierarchicka struktura textu nebo hierarchicky zaznam znamena v podstate seznam, kde kazdy radek seznamu ma nejake misto v hierarchii. Hierarchie se v textu vetsinou dosahuje odsazenim od leveho okraje stranky, prinejmensim je to tak nejprehlednejsi. Takto lze velice rychle vytvorit strukturu celeho projektu nebo treba kapitoly ci pribeh planovane knihy. Vymyslime-li nejake znacky pro iteraci a podminku, muzeme takto popisovat problemy a vytvaret strukturu programu pomoci textoveho editoru rychleji a efektivneji nez zname programatorske diagramy, ktere jsme se ucili ve skole. Hierarchicke zaznamy nejsou dobre na vsechno, ale pro rychly zaznam vrsicich se pracovnich ukolu, rozbor problemu ci rozvrzeni projektu na dilci ukoly nemaji konkurenci. Protoze jsem zustal pouze u Vimu, hledal jsem nahradu mezi vimovskymi pluginy. Vim-Orgmode nebo VimOrganizer se snazily byt prilis jako puvodni Org mode, aniz by se jim to povedlo - prilis komplexni a zaroven nedotazene. Jako jednodussi a pritom zivotaschopne alternativy se jevi Vimoutliner a Vim-outlaw. Prvni klade vetsi duraz na hierarchicky seznam nez na text samotny, druhy v jistem smyslu obracene. Prvni je komplexnejsi, druhy minimalistictejsi. Pouzivam oba, hlavne v praci. Ale nikoliv na poznamky, ac jsem to zkousel. MD je v tomto ohledu porad nejvhodnejsi nastroj. MD je vhodny na klasicky text, par nadpisu a sem tam nejake zvyraznene slovo. Outliner je v prve rade seznam a poznamky formou seznamu nefunguji. Alespon ne u me. ## Na zaver Puvodne jsem se chtel zabyvat predevsim markdownem, ale text se jaksi samovolne zahrnul dalsi temata. Snad moje zkusenosti budou nekomu k uzitku. Podstatne je vyzkouset ruzne nastroje a ujasnit si vlastni postup. Z mnoha duvodu nedoporucuju zustavat u Windows, ale mnoho techto nastroju funguje i pod Windows a s uspechem je pouzivam take v praci, kde se bez Windows neobejdu. => unikatni-unix.html [Unikatni UNIX] => gopher.html [Gopher] => https://github.com/lichray/nvi2 [nvi] => https://www.vim.org/ [Vim] => https://txt2tags.org/ [txt2tags] => https://asciidoc.org/index.html [asciidoc] => https://daringfireball.net/projects/markdown/ [Markdown] => https://www.gnu.org/software/emacs/ [Emacs] => https://orgmode.org/ [Org mode] => https://vimwiki.github.io/ [Vimwiki] => https://pandoc.org/ [Pandoc] => https://fletcherpenney.net/multimarkdown/ [Multimarkdown] => https://commonmark.org/ [CommonMark] => https://undeadly.org/cgi?action=article&sid=20170304230520 [New mandoc markdown converter] => https://docs.racket-lang.org/pollen/second-tutorial.html#%28part._the-case-against-markdown%29 [The case against Markdown] => https://github.com/mattn/emmet-vim [Emmet] => https://kristaps.bsd.lv/lowdown/ [lowdown] => https://mandoc.bsd.lv/ [mandoc] => https://github.com/vimoutliner/vimoutliner [Vimoutliner] => https://github.com/lifepillar/vim-outlaw [Vim-outlaw]