štítek nástroje:

Infrastruktura projektu In adiutorium

5.5.2015 18:50 | kategorie: Projekt | štítky: | Komentáře

Nedělám si iluze, že tento článek bude pro někoho zajímavý nebo přínosný, ale mně poslouží ke srovnání myšlenek a jednou třeba někomu jako inspirace, odstrašující příklad nebo tak ... Chci vyložit, jak teď probíhá práce na projektu, jaké používám nástroje a pracovní postupy, jak se postupně vyvinuly a v čem mi teď překáží. Závěrem se pokusím načrtnout a porovnat možná řešení. Motivací k tomu mi je, že už dlouho cítím, jak mi stávající "pracovní proces" v cestě k cíli spíš překáží než pomáhá a již příliš dlouho se odhodlávám k jeho tolik potřebné reformě.

Postupný rozvoj

Na začátku (podzim 2010) bylo několik izolovaných zpěvů bez ladu a skladu vysázených v LilyPondu. Neměl jsem v plánu vytvořit žádné rozsáhlejší dílo.

Zcela přirozeně jsem tenkrát své hudební pokusy psal na papír, do notových sešitů (nedávno při stěhování jsem na ně narazil a divil jsem se, kolik jsem jich za rok stihl popsat), a na počítači sázel jen ty, které jsem považoval za hodné zveřejnění. Počítač použitelný pro práci mi tenkrát navíc nebyl dobře přístupný - můj domácí byl rozbitý, takže jsem mohl jen příležitostně parazitovat na vybavení své sestry; později při pobytu v Erfurtu jsem byl odkázán na školní počítače, jejichž užívání bylo omezeno otevíracími hodinami výpočetního střediska.

Již někdy před odjezdem do Erfurtu (jaro 2011) jsem ale na složku se zpěvy k oficiu nasadil verzovací systém git. Verzování jsem se naučil mít rád při práci na softwarových projektech a vyvinulo se tak nějak samo sebou, že jsem jeho vymoženosti (mj. možnost kdykoli se vrátit ke kterékoli starší verzi a snadno porovnávat historické verze mezi sebou) chtěl mít k disposici i pro svůj projekt hudební. (Konkrétně git jsem ale použil prvně právě pro projekt In adiutorium. Do té doby jsem používal jen cvs.)

Vzhledem k tomu, že počítačově vysázené noty byly v této fázi projektu jakousi "výkladní skříní" či "špičkou ledovce" a všechen vývoj probíhal na papíře, bylo schema vývoje - z pohledu git repositáře - lineární. Postupně byly přidávány nové a nové zpěvy; když se některý kousek postupem času ukázal jako nepříliš dobrý, byl v notovém sešitě připraven nový a původní podoba nahrazena.

Když jsem později získal vlastní funkční počítač, zanevřel jsem na notové sešity - bylo pro mě pohodlnější psát noty rovnou do počítače v textovém formátu užívaném LilyPondem než nejprve na papír a pak je přepisovat. Tak najednou bylo potřeba vyřešit, jak ve struktuře projektu udělat místo na pokusy a omyly:

První verze nové antifony totiž většinou vzniká "načisto": probrnkávámm a prozpívávám se k podobě, která zní přijatelně, průběžně upravuji notový zápis. Poté, co se propracuji k uspokojivému výsledku, přesouvám se k dalšímu kousku. Když se však časem ukáže, že nějaká hotová antifona má zásadní nedostatky a její melodii bude potřeba složit znovu, pracuji už zpravidla s více variantami, než se pro jednu rozhodnu.

Také se jako čím dál méně vyhovující ukazoval systém nahrazování jedné verze druhou - bylo by výhodné mít všechny historické podoby daného zpěvu stále po ruce a moci je bez námahy porovnávat. (Naprogramoval jsem kdysi skript, který uměl vytahat všechny historické verze daného zpěvu z gitu; bylo to sice zábavné cvičení, ale jeho výsledek nepatří k nástrojům, které by opravdu usnadňovaly každodenní tvůrčí práci ...)

Dílem na základě svých tehdejších zásadně mylných představ ohledně magických schopností gitu při slučování (merge) větví jsem se rozhodl v hlavní větvi pokračovat jako doposud (na jednu antifonu jedno znění - to momentálně oficiální) a pro účely "pracovního bloku", kde je možné od každého zpěvu vršit neomezené množství variant, vytvořit novou větev (variationes; hlouběji na blogu je k nalezení článek z oné doby, kde se o tom píše). Postup revize nepovedených zpěvů od té doby probíhá tak, že ve větvi variationes rozpracuji několik možných podob, tu nejpovedenější pak vyčistím od pracovních poznámek a zkopíruji na příslušné místo do větve master.

Původně jsem ke zkoušení možných variant využíval přímo lokální verzi toho kterého souboru. Později jsem však zjistil, že pak aktualizace větve variationes z master pomocí git merge neprobíhala vždy podle mých představ, a tak jsem pro "špinavou pracovní verzi" začal používat zvláštní kopii příslušného souboru (např. kompletar.ly má pracovní verzi kompletar-VAR.ly).

Otravná režie

Revize jedné antifony teď tedy vypadá takto:

Mám dva lokální klony repozitáře projektu, v jednom je načtena větev master, ve druhém variationes. (To by samozřejmě nebylo potřeba, je možné přepínat se mezi oběma větvemi v jediném klonu, ale postupem času jsem přišel na to, že v kontextu tohoto projektu se mi v popsaném uspořádání pracuje lépe.)

# 1. nejnovější změny z hlavní větve promítnout do větve pracovní
(variationes)$ git merge master
    

2. V pracovní verzi (-VAR.ly) daného souboru vyzkouším několik možných podob; vyberu nejlepší, barevně ji označím jako novou hlavní;
3. zkopíruji ji do "čisté" verze souboru. Vymažu z ní pracovní značky, které mimo sekvenci variant většinou nemají smysl (upozorňují na místo, kde se melodie odchyluje od předchozího pokusu).

# 4. uložit změny pracovního souboru
(variationes)$ git commit -m 'one ant. revised' kompletar-VAR.ly

# 5. uložit změny "čistého souboru"
(variationes)$ git commit -m 'revised ant.' kompletar.ly

# 6. všechny změny předat i druhému klonu repozitáře
(variationes)$ git push ~/In-adiutorium variationes

# 7. přejít do druhého klonu
$ cd ~/In-adiutorium

# 8. změny "čistého souboru" promítnout do hlavní větve (master)
(master)$ git cherry-pick variationes
    

I tomu, kdo třeba úplně nerozumí naznačeným operacím s gitem, bude zřejmé, že popsaný systém práce nastavený začátkem roku 2012 kromě vlastní tvůrčí práce na nápěvech antifon obnáší i odpudivě velkou porci režie okolo, spočívající převážně v četných interakcích s verzovacím systémem. Přitom, jak již bylo řečeno, tento způsob práce byl kdysi dávno nastolen převážně proto, že jsem měl chybné představy o magických schopnostech gitu a věřil jsem, že mi bude práci naopak výrazně šetřit. Nyní jediným pochybným ziskem z toho všeho je, že hlavní větev je relativně čistá, od každého zpěvu obsahuje pouze jednu verzi v jednom souboru. To je ale zisk, který pro mě nemá v podstatě žádnou hodnotu.

Kudy z toho ven

Jako programátor k smrti nenávidím duplicity a ruční kopírování. Čehokoli. Přesto se právě projekt In adiutorium stal takovým ne-li peklem, pak nepochybně předpeklím, limbem či peklíčkem všemožných duplicit komplikujících další vývoj a plodících nepořádek. Duplicity spojené s provozem větve variationes jsou přitom ty, které momentálně představují největší zátěž. Jak je eliminovat?

1. Zrušení větve variationes

Samostatná vývojová větev, která nepřináší žádný užitek, může být beze škod opuštěna. Pracovní verze souborů (-VAR.ly) se mohou odstěhovat do vyhrazené podsložky hlavní větve. Tím ze sedmikrokového scénáře výše odpadnou body 1, 5, 6, 7, 8 a stane se z něj scénář tříkrokový.

Stále zůstává otravná nutnost ručně kopírovat z pracovního souboru vybranou variantu do souboru čistého/produkčního. I tomu snad lze předejít. Ale pro pochopení toho, proč některé možné cesty předem vylučuji z úvah, je potřeba znát jeden další detail, také související s problémem duplicit.

Odkazování na zpěvy - FIAL

Když projekt In adiutorium nabyl většího rozsahu, vznikla potřeba trvalých strojově zpracovatelných referencí na jednotlivé zpěvy. Vedou k tomu dva různé motivy:

Prvním je sazba zpěvníků. Projekt In adiutorium by neměl skončit vychrlením několika desítek dokumentů o jednotkách až desítkách stran obsahujícíh nápěvy antifon a responsorií oficia, ale vytvořením skutečného antifonáře, tj. přiměřeně funkční a pohodlné liturgické knihy pro každodenní zpívané oficium. Kromě toho také občas sázím menší příležitostný zpěvníček pro sebe nebo pro někoho jiného. Ať ve velkém či v malém, je silně nežádoucí muset jednotlivé zpěvy pro účely nového díla ručně kopírovat. Nenávidím kopírování. Když chystám sazbu zpěvníku, chci pouze odkázat na zpěv, který chci na daném místě zahrnout, a nějaký nástroj by měl umět kdykoli najít a dodat jeho nejčerstvější verzi. K tomu je nutné mít způsob, jak na každý zpěv jednoznačně odkázat. Takový způsob mám, a dávno mám i ten kýžený nástroj. Již jsem o něm v minulosti psal.

Než ten jednoduchý systém referencí na zpěvy představím, je třeba zmínit i druhý motiv vedoucí k jeho zavedení. V liturgii hodin se některé zpěvy opakují, i vícenásobně. Jindy se objevují texty velmi podobné - s trochu jinými slovy, s částí navíc, s velikonočním aleluja a bez něj, ... Pro stejný text používám vždy stejný nápěv. Pro zhudebnění textu výrazně podobného jinému, dříve zpracovanému, se podle vhodnosti pokouším vyjít z již existujícího. (Ne vždy je to možné.) V těchto případech je potřeba mít někde poznamenáno, že nová antifona je kopií či adaptací jiné, protože v případě, že se v budoucnu bude měnit jedna, měla by se zároveň s ní upravit i druhá. Původně jsem si o tom dělal jen poznámky pro sebe, ale s rostoucím množstvím těchto referencí bylo zřejmé, že nebude v lidských silách zvládnout je a bude nutné připravit nástroj, který kontrolu koherence příbuzných antifon alespoň částečně zautomatisuje. Naprogramování tohoto nástroje zatím zůstává úkolem pro budoucnost.

Reference na konkrétní zpěv se skládá z cesty k souboru - vždy cesty relativní k hlavnímu adresáři projektu - a id zpěvu, které má každý kousek v hlavičce; v rámci daného souboru je vždy unikátní. Několik příkladů:

kompletar.ly#sim antifona k Simeonovu kantiku
antifony/tyden1_1nedele.ly#1ne-ant2 druhá antifona prvních nešpor neděle prvního týdne žaltáře
commune/commune_maria.ly#invit1 antifona k invitatoriu ze společných textů o Panně Marii

Bezpočet reálných příkladů je možné najít přímo v repozitáři projektu.

Reference na zpěv vytvořená popsaným způsobem se jmenuje FIAL. Jmenuje se nějak hlavně proto, že bylo potřeba nějak pojmenovat pole v hlavičce zpěvu, kde se odkazuje na jiný zpěv, z něhož byla celá melodie nebo její část převzata. Je to zkratka, a že je to zkratka špatně utvořená a její tvůrce se za ni stydí, nebude ji vykládat.

2. Zbavit se veškerého ručního kopírování

Ideálem programátora k smrti nenávidícího duplicity je, nikdy nic ručně nekopírovat. Každá varianta každého zpěvu by ve struktuře projektu měla figurovat právě jednou. Jestliže mám dva druhy výstupů - jeden pracovní pro sebe, s variantami a pracovními poznámkami, a druhý čistý pro zbytek světa - pak by ideálně mělo být možné nějak oba generovat z jediného zdroje.

Omezující podmínkou je, že výše popsaný způsob odkazování na zpěvy musí zůstat funkční a existující reference se nesmějí rozbít. "Produkční" verze každého zpěvu by tedy měla zůstat ve stejném souboru jako doposud. Přitom generování výstupů by mělo být i nadále co nejjednodušší.

Schůdnou cestou se zdá být nějaká varianta uspořádání, kdy se čistá verze generuje automaticky redukcí verze pracovní. V pracovní verzi pak musí být konvenčně dáno nebo strojově čitelným způsobem vyznačeno, co do čisté verze patří a co ne.

Alternativou je zachovat čistou a pracovní verzi jako relativně nezávislé entity (ve kterých lze bez nutnosti vzájemných ohledů psát poznámky, řešit zalomení stránek apod.), ale plně automatizovat proces přenesení vybrané varianty zpěvu z pracovní verze do čisté.

Zvolená cesta

Tady je určitá cesura. Jsem ten typ člověka, který často k tomu, aby vůbec mohl přemýšlet, potřebuje psát. V próze. Žádné bodovité poznámky. A o pár řádek výše a řadu hodin dříve jsem konečně dospěl k uspokojivému plánu. Zanechal jsem psaní a dal se do jeho realizace. Nově nastolený systém vypadá následovně:

Pracovní verze souborů s notami odteď sídlí v hlavní větvi v adresáři pojmenovaném stejně jako dosavadní vývojová větev - variationes. Pracovní soubor se jmenuje stejně jako odpovídající soubor "produkční". O přenesení nově upravených zpěvů z pracovního souboru do "produkčního" se stará nový skript škaredého jména updatefromvar.rb:

$ ruby updatefromvar.rb kompletar.ly
    

Najde pracovní soubor odpovídající souboru předanému v parametru, načte ho a prochází zpěv po zpěvu. Kdykoli najde kus označený jako varianta vybraná do "produkční" verze, vyčistí ho od pracovních značek, podle id najde odpovídající kus v hlavním souboru a provede náhradu.

Z provedených změn mám radost. Očekávám, že se příznivě projeví na rychlosti postupu dalších prací. Není žádné tajemství, že jsem dosud - z velké části právě kvůli výše popsanému nepohodlí spojenému s procesem revize - mnohem ochotněji skládal nové zpěvy než pracoval na starých, označených pro opravu.

Algoritmizační úloha: žalmy pro svátky

20.5.2014 22:17 | kategorie: Projekt | štítky: | Komentáře

Při jednom z rozhovorů přes dva monitory o tom, co jejich obsluhy dělají ve volném čase, jsem kolegovi popisoval algoritmizační problém, který řeším v souvislosti se sazbou žaltáře. "Fuj, hlavně to neříkej nikomu z FITu, ještě by to třeba začali používat jako domácí úkol," zareagoval kolega, který na zmiňované fakultě ČVUT studoval a domácí úkoly na tvrdě optimalizovaná řešení náročných úloh neměl rád. Mám podezření, že normální budoucí programátor se špetkou nadání mou úlohu vyřeší lusknutím prstu, a jako domácí úkol z algoritmizace tudíž příliš výživná není, ale můj opičí mozek ("ti, co dělají weby, to nejsou žádní programátoři, ale cvičené opice," říká bratranec matfyzák) ji každopádně zatím uspokojivě nevyřešil, takže úplně triviální zřejmě také není. Tady je.

(Následující text nepředpokládá znalost liturgie hodin a některé skutečnosti záměrně zjednodušuje, aby vynikla podstata algoritmizačního problému.)

Mějme knihu s texty modliteb (žaltář). Kniha obsahuje všechny texty potřebné pro všechny modlitby v pořadí, v jakém se používají o běžných dnech. Modlitba sestává obvykle ze tří textů. Texty jsou rozloženy na čtyři týdny a v tomto čtyřtýdenním cyklu se některé z nich vícenásobně opakují.

O některých svátcích se modlitby neberou z tohoto pravidelného cyklu, ale jsou volně vybrané z jeho různých míst. K vyhledání modliteb o takovýchto svátcích slouží zvláštní index na konci žaltáře, který pro každou denní modlitbu odkazuje na tři nebo více textů.

Napište program, který dostane seznam textů potřebných pro každou denní modlitbu a seznam textů, jak jdou v knize za sebou (reálná data: texty pro svátky, normální pořadí textů) a vypíše, kolikátý z případných více výskytů téhož textu v knize se má použít, aby ten, kdo se z knihy modlí, při jedné denní modlitbě listoval právě jen nezbytně málo. Za větší dobro je přitom považováno to, že jsou dva nebo více použitých textů bezprostředně za sebou, než to, že uživatel v průběhu modlitby obrátí nejmenší možné množství stránek.

[EDIT 28.6.2014] Řešení hrubou silou, které by na cvičeních z algoritmizace samozřejmě neprošlo, je na githubu.

Typographus - revoluční nástroj pro rychlou sazbu zpěvníků

22.7.2013 23:12 | kategorie: Projekt | štítky: | Komentáře

Spíš z legrace jsem, letos nikoli poprvé, hecoval sestru, ať si se mnou přijede zazpívat nešpory z památky své křestní patronky, sv. Marie Magdalské. Když hecovaná překvapivě pozvání přijala, bylo potřeba připravit sešit s kompletním "programem" nešpor. Když zpívám sám, vystačím s notami na notebooku a breviářem, ale člověk breviáře a žalmových nápěvů méně znalý by se ztrácel...

Původně jsem počítal, že noty snadno připravím za sobotní večer. Pokusil jsem se proceduru pro sestavení zpěvníčku sestavit nakopírováním ze skriptů, které sestavují stávající svazky Antifonáře k DMC. Ukázalo se ale, že tyto skripty jsou tak špinavě napsané (už v nich samých jsem příliš kopíroval), že je neúnosně náročné vypreparovat z nich funkční celek potřebný pro aktuální potřebu a přenést ho jinam. Když jsem měl na výběr mezi "hodiny se patlat s kopírováním a rozběháváním kódu z těch odporně páchnoucích skriptů" a "hodiny programovat nástroj, který mě toho patlání navždycky zbaví", vybral jsem si celkem logicky druhou variantu a větší část neděle strávil přilepený ke klávesnici.

Nový nástroj, z nedostatku invence nazvaný prozatím Typographus, zásadně usnadňuje tvorbu zpěvníků s notami vzniklými v rámci projektu In adiutorium tím, že odstraňuje mnohostranné duplicitní informace, dosud zatěžující přípravu svazků Antifonáře. Doposud některé informace existovaly až na třech místech: např. modus a diference byly uvedeny v notovém materiálu v hlavičce dané antifony, dále v hlavním .tex souboru, kam se antifona vkládala, a znovu v rake-skriptu, který k dané antifoně připravoval žalm. S příchodem Typographa se do .tex souboru vloží jediné makro. Typographus najde příslušné noty, z jejich hlaviček zjistí, jaký je potřeba připravit text žalmu a případně žalmový nápěv, a do dokumentu všechno vloží.

Dokument níže, proti zdroji opravdového zpěvníku samozřejmě jednodušší o mnoho formátování a kratší o mnoho obsahu, obsahuje všechny potřebné informace k vygenerování jednoduchého zpěvníku obsahujícího hymnus, antifonu se žalmem, responsorium a antifonu s kantikem Magnificat. V obsahu dokumentu jsou pro přehlednost pouze speciální makra zpracovávaná Typographem. Makra začínající \set sdělují umístění důležitých dat. Další makra už vkládají "obecné noty" (\simpleScore), antifonu s textem příslušného žalmu (\antiphonWithPsalm), responsorium (\responsory). Noty ke vložení jsou identifikovány pomocí relativní adresy souboru vůči ChantBasedir, znaku # a id uvedeného v hlavičce daného kousku. Pokud cesta není uvedena, bere se ta z nastavení ChantSource.

\documentclass[a5paper, twoside]{article}
\usepackage[utf8]{inputenc}
\usepackage[left=1.5cm, right=1cm, top=1.5cm, bottom=2cm]{geometry} % okraje stranky
\usepackage[T1]{fontenc}
\usepackage{bookman}

\newcommand{\preLilyPondExample}{ \begin{flushleft} }
\newcommand{\postLilyPondExample}{ \end{flushleft} }

\input{../antifonar/spolecne.tex}

\newenvironment{psalmus}{}{}

\begin{document}

\setChantBasedir{../}
\setPsalmsDir{../antifonar/zalmy/}
\setIncludes{../antifonar/spolecne_antifonar.ly, ../dilyresponsorii.ly}
\setChantSource{sanktoral/0722mariemagdalena.ly}

\simpleScore{sesity/mariemagdalena_2013_noty.ly#ne-hymnus}

\antiphonWithPsalm{#ne-a1}

\responsory{#rch-resp}

\antiphonWithPsalm{#ne-amag}

\end{document}
    

Proces sestavení zpěvníčku sestává z preprocessingu .tex souboru Typographem, zpracování jeho výstupu programem lilypond-book a konečně kompilace pomocí pdfLaTeXu.

Pokud chcete vidět "opravdový" dokument pro sázení s pomocí Typographa, tady je zdroj zpěvníčku k dnešním nešporám a tady se můžete podívat, jak zpěvníček vypadá vysázený.

Nástroj je samozřejmě teprve v raném stadiu vývoje. V budoucnu bude potřeba doplnit některé nové funkcionality a možnosti nastavení a pokud se má stát efektivním nástrojem pro sestavování rozsáhlých zpěvníků, jako jsou plánované svazky Antifonáře k DMC, bude potřeba i trocha optimalizace. Již teď ale umožňuje vyrábět malé zpěvníky, v rozsahu třeba onoho výše zmíněného, za ten jeden večer, jak jsem bláhově odhadoval na začátku výše podané historie. A to je, alespoň pro mě, něco.

Kdo hledá, najde

20.4.2013 12:11 | kategorie: Projekt | štítky: | Komentáře

Ze zvláštních liturgických dob je na tom co do množství hotových zpěvů bezkonkurenčně nejlépe doba adventní. Na podzim jsem seděl doma, neúspěšně hledal práci, k tomu, abych se pořádně opřel do studia, kde by to bývalo bylo dost potřeba, jsem se z různých důvodů nedokázal přimět - a ve volném čase, kterého jsem tak měl velice nazbyt, vznikly kompletní adventní antifony, vč. těch k evangelním kantikům ve všední dny.

Doba postní a velikonoční takové "štěstí" neměly a i nadále jim scházejí a přinejmenším ještě rok nebo dva budou scházet i antifony k nedělním žalmům.

Chci ale upozornit, že projekt In adiutorium ve skutečnosti může nabídnout ještě o něco víc, než co je pěkně uspořádáno a naservírováno v připravených notových materiálech. Myslím, že ten, kdo je zvyklý hodinky pouze recitovat, má dobrou šanci vůbec si toho nevšimnout - ale ten, kdo hodinky zpívá, nebo se breviářem z nějakého důvodu zabývá i mimo čas modlitby (ať už proto, že ho překládá, skládá k němu zpěvy, nebo nad ním provozuje vědu), si brzy všimne, že se řada antifon při různých příležitostech vrací. Pro mě je důležité mít o tom přehled proto, abych stejný text zbytečně nezhudebňoval vícekrát. (Pozn.: v předkoncilním antifonáři bylo vícero antifon, které se objevovaly na různých místech s různými melodiemi; já se ale snažím, pokud dobrý důvod nevelí jinak, stejný text dávat vždy se stejným nápěvem. Šetří mi to práci i učení.)

Samozřejmě si dávno jednotlivě nepamatuji, které texty jsem již zhudebňoval, natožpak pro kterou část liturgického roku. Dříve jsem již zmiňoval některé jednoduché, ale šikovné nástroje, které jsem si naprogramoval, aby mi přehled o zhudebněných textech zprostředkovávaly. Jeden z nich používám už dlouho a teď o velikonočních fériích skoro denně. Velká část (určitě přinejmenším polovina) antifon, které se teď zpívají s Benedictus a Magnificat, se totiž dá najít v materiálu pro neděle v mezidobí, ve společných textech o svatých nebo ve svátcích sanktorálu. Mám na to nástroj, který může použít každý, kdo má k disposici operační systém unixového typu (nebo možná i Windows s Cygwin?) s nainstalovaným interpretem jazyka Ruby.

ruby nastroje/antigrep.rb půjdeme

Stačí ve složce se zdrojovými kódy notových materiálů spustit skript antigrep.rb a předat mu hledané slovo. (Resp. jakýkoli přepínač a hledací výraz akceptovaný programem grep, který se v pozadí k hledání používá.) Skript proběhne všechny noty, vytahá z nich texty a vypíše odpovídající texty, které našel, spolu s názvem souboru, ve kterém jsou k nalezení. Pak stačí najít odpovídající PDF a může se zpívat. Příklad výše ukazuje, jak jsem dnes ráno našel antifonu k Benedictus.

(První příkaz na obrázku, volající skript indexmaker.rb, ukazuje přibližný počet zatím vytvořených zpěvů, přičemž ale nijak nezohledňuje skutečnost, že některé antifony jsou zkopírované na více místech a že některé texty, jako např. antifony kompletáře, mají více různých zhudebnění.)

Tip k tisku brožur

1.4.2012 13:00 | kategorie: Projekt | štítky: | Komentáře

Se vznikem obsáhlejších materiálů a zejména postupně vznikajících svazečků Antifonáře k Denní modlitbě církve někoho možná začala zajímat otázka, jak knížky z elektronické podoby co možná elegantně převést na papír. Já sám už několik týdnů používám vytištěný Antifonář ke kompletáři a Žaltář a chci se podělit o postup, který používám.

Tisk

Svazečky Antifonáře jsou zamýšlené k tisku na papír formátu A5 oboustranně.

Aby si s tiskem dobře poradila tiskárna a aby se pak knížka dala dobře svázat, je potřeba stažený PDF dokument upravit: umístit vždy dvě stránky A5 vedle sebe na stránku A4 a z takto vzniklých "tiskařských" stránek ty sudé otočit. (Předpokládám, že čtenář má jako já k disposici tiskárnu tisknoucí na papír formátu A5 a chce knížku vázat nějakou metodou pracující se složkami. Pro toho, kdo tiskne rovnou na formát A5 a bude vázat třeba kroužkovou vazbou, je tento článek irelevantní.)

Pro postup, který sám používám a chci i vám nabídnout, je důležité předem zvážit, jak se materiál připravovaný k tisku bude vázat. Rozsahem malé materiály čítající, řekněme, do 30 stran, je zřejmě nejlepší svázat jako jeden sešit. Z nabídky projektu In adiutorium do této kategorie spadá např. Antifonář ke kompletáři. Rozsáhlejší materiály je naproti tomu vhodnější vytisknout a zkompletovat jako větší množství složek ("malých sešitů") a ty pak spojit některým typem knižní vazby.

K přípravě dokumentů k tisku používám program pdfbook ze sady nástrojů PdfJam. (Moje linuxová distribuce - Debian - má PdfJam v nabídce připravených balíčků. Bohužel nevím o tom, že by bylo možné PdfJam používat ve Windows.) Postará se o ni jediný příkaz:

      pdfbook --signature N --suffix X SOUBOR
    

N: číslo dělitelné 4 - kolik stránek na složku. (Číslo musí být dělitelné čtyřmi proto, že čtyři stránky se tisknou na jeden list.)
X: přípona výstupního souboru.
SOUBOR: cesta ke zpracovávanému souboru.

Antifonář ke kompletáři, čítající právě 12 stran, tisknu se 12 stránkami na složku a svážu jako jeden sešit.

      pdfbook --signature 12 --suffix broz antifonar_kompletar.pdf
    

Jak úspěšně upravený soubor vypadá je možné vidět na Antifonáři ke kompletáři: po rozkliknutí detailu se ukáže nabídka dvou souborů ke stažení. antifonar_kompletar-broz.pdf je připravený výše popsaným způsobem.

Obsáhlejší materiály je vhodné rozdělit na složky po 12 nebo 16 stranách.

Upravený soubor oboustranně vytiskneme.

Vazba

Vytištěné listy uprostřed přehneme a poskládáme do složek.

Malé materiály vázané jako jeden sešit sešije větší sešívačka. Já tak velkou sešívačku nemám a sešity sešívám jehlou a nití - jedním velkým několikrát "obtaženým" stehem uprostřed.

Vazba větších brožur a knih je poněkud dobrodružná záležitost. Na internetu je k nalezení řada návodů (např. ve WuWejově zápisníku). Nemohu doporučit žádný "zaručeně nejlepší", protože sám vážu knížky zřídka a zatím jsem umění knižní vazby dostatečně neovládl. Poměrně dobré zkušenosti mám s návodem obsaženým v knize Skautskou stezkou (Václav Břicháček a další; vydal Junák 1998, 2. vyd. 2001).

Index antifon

6.11.2011 16:45 | kategorie: Projekt | štítky: | Komentáře

V git repozitáři projektu In adiutorium ve složce "nastroje" je prográmek indexmaker.rb, který umí projít noty v souborech zadaných na příkazové řádce, z každého kousku vytáhne text, upraví jej do čitelné podoby (odstraněním značek, vysvětlujících LilyPondu, jak text přiřazovat k notám), nakonec texty setřídí podle abecedy a vypíše spolu s údajem, ze kterého souboru byl ten který text vzat.

Ukázka: index antifon a responsorií z materiálu "antifony ze žaltáře".

Tento program činí výstup projektu In adiutorium významně přehlednějším. Umožňuje při troše šikovnosti vyhledávání antifon podle textu napříč všemi materiály. To se stává dost potřebným: čím větší část breviáře je zpracovaná, tím častěji se stává, že vím, že jsem s určitým textem už v jiném kontextu pracoval, někdy si i pamatuji melodii, kterou jsem pro něj napsal, ale netuším, kdy to bylo a ve kterém souboru ho najdu. (Dnes se mi to např. stalo s antifonou k modlitbě uprostřed dne o slavnosti Zjevení Páně odpoledne: "Dám tě národům jako světlo...".) Dále je např. soupis textů všech antifon ze žaltáře předpokladem pro zpracování "malého antifonáře", o kterém jsem psal celkem nedávno.

Prohlížení vývoje antifon

20.10.2011 22:30 | kategorie: Projekt | štítky: | Komentáře

Některé antifony ze starších vrstev projektu mají za sebou poměrně dlouhou historii revizí melodie. Rád bych představil nový nástroj, který umožňuje tuto historii si prohlédnout.

V adresáři se zdrojovými kódy projektu se ve složce "nastroje" nachází skript prehledverzi.rb. Je to skript napsaný v jazyce Ruby, pro jeho spuštění je tedy potřebný příslušný interpret. Nemá žádné grafické uživatelské rozhraní a spouští se z příkazové řádky. (Dobře vím, že právě teď většinu čtenářů dokonale přešla chuť ho zkoušet. S tím se počítá - tento článek je především pro další skladatele a "skladatele", kteří píší noty v LilyPondu a pro správu verzí používají git a po drobné úpravě by můj skript třeba mohli dobře využít.)

Skriptu se jako jediný argument na příkazové řádce předá název souboru, jehož historie má být získána. Pro správnou funkci skript musí být spuštěn v Git-repositáři a zpracovávaný soubor musí být zdrojový kód not pro sázecí program LilyPond. Tento soubor dále musí být v Git-repositáři vedený. (Skript je totiž primitivní nadstavbou nad nástroji git.) Nakonec je pro funkci skriptu potřeba adresář "pracovni", do kterého skript ukládá své pomocné soubory i svůj výstup.

      git clone git://github.com/igneus/In-adiutorium.git
      cd In-adiutorium
      mkdir pracovni
      ruby nastroje/prehledverzi.rb kompletar.ly
    

Skript z git-repozitáře vytahá všechny dostupné verze specifikovaného souboru (resp. všechny ty, které přímo vedly ke vzniku té aktuální) a pro každý jednotlivý kousek not (score) vytvoří v pracovním adresáři soubor, který obsahuje všechny její verze od nejnovější po nejstarší. Ten je možné normálně přeložit LilyPondem a prohlížet.

Na ukázku jsem připravil historii jedné z antifon kompletáře.

Napsal jsem skript prehledverzi.rb výhradně pro potřeby projektu In adiutorium a bez ambic na funkčnost za jeho hranicemi. Dovede si poradit jen se zcela primitivními soubory not - nerozumí ani lilypondovským proměnným, ani vnořeným souborům, nedovede si adekvátně poradit s textem vloženým mezi noty příkazem \markup, ... Pro potřeby, pro které byl napsán, ale funguje dostatečně. Podobný skript, který by si dokázal korektně poradit s jakýmikoli notami napsanými v LilyPondu, by sice nejspíš byl velice užitečnou pomůckou pro řadu uživatelů, nevystačil by ale při zpracovávání not s jednoduchou mechanickou fintou a musel by obsahovat kompletní nebo téměř kompletní sémantický analyzátor jazyka LilyPond - a to dělat nechci. A neumím.

Důvodem vzniku skriptu byla potřeba mít možnost kontrolovat degenerace melodie - melodii antifony, která se mi z nějakého důvodu po určitém časovém odstupu přestane líbit, předělám. Když ale některá antifona nemá na melodie štěstí a projde takovým předěláním desetkrát, bohužel není jisté, že desátá melodie je lepší než devět předchozích. Možnost vidět je všechny za sebou a porovnávat je tedy důležitá.

[EDIT 19.2.2012] Skript už dlouho umí vyrobit přehledný soubor obsahující vývoj všech antifon ze zpracovávaného souboru. Oddíl každé antifony je nadepsán jejím textem a každý commit má u sebe datum.