Abstract Telenský, V. Document versioning in TEXonWeb application. Bachelor thesis. Brno, 2013. This bachelor thesis deals with design and implementation document versioning into web application TEXonWeb. This process is used to save parts of document the user creates in time in such way the parts are easily available anytime and the user can retrace to them anytime during his work. For document versioning the open source version control system SVN is used. Client application integrated into TEXonWeb is developed using Javascript, AJAX and Perl technologies.
Abstrakt Telenský, V. Verzování dokumentů ve webové aplikaci TEXonWeb. Bakalářská práce. Brno, 2013. Bakalářská práce se zabývá návrhem a implementací verzování dokumentů ve webové aplikaci TEXonWeb. Tento proces se využívá pro ukládání částí dokumentu, které uživatel postupně vytvoří tak, aby byly kdykoliv snadno dostupné a uživatel se k nim mohl jednoduše kdykoliv během práce vrátit. Pro verzování dokumentů je využíván volně dostupný verzovací systém SVN. Klientská aplikace integrovaná do TEXonWeb je vytvořena pomocí technologií Javascript, HTML, CSS, AJAX a Perl.
8
9
OBSAH
Obsah 1 Úvod a cíl práce 11 1.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.2 Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 Metodika a postup řešení 13 2.1 Použité technologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3 Současný stav 3.1 Dostupná řešení . . . . . . 3.1.1 Microsoft Word . . 3.1.2 Google Disk . . . . 3.1.3 LibreOffice Writer 3.2 Analýza současného stavu
5 Diskuze a zhodnocení 5.1 Přínosy implementovaného řešení . . 5.2 Nedostatky implementovaného řešení 5.3 Další možný postup . . . . . . . . . . 5.4 Zhodnocení . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
38 38 38 38 40
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . .
6 Závěr
42
7 Literatura
43
10
OBSAH
1
ÚVOD A CÍL PRÁCE
1
11
Úvod a cíl práce
1.1
Úvod
Práce se zabývá možností implementace verzování dokumentů do aplikace TEXonWeb1 . TEXonWeb je uživatelské rozhraní umožňující práci s DTP2 systémem TEX3 a jeho nadstavbou LATEX. Aplikace je využívána při výuce předmětu Zpracování textů na počítači na Provozně ekonomické fakultě Mendelovy univerzity v Brně. Aplikace není dostupná pouze pro studenty, ale může ji využívat i široká veřejnost. Pro některé uživatele může být těžkým úkolem již samotná instalace desktopového řešení DTP systému. Proto je aplikace TEXonWeb možností jak rychle a efektivně vytvořit kvalitní dokument. TEXonWeb a obecně TEX/LATEX fungují na principu značkovacího jazyka. Vstupní text je uživatelem označkován speciálními značkami a následně použit jako vstup pro kompilátor takto upraveného textu. Výstupem je precizní PDF4 dokument. Alternativou výstupu PDF dokumentu je PostScript5 . Proto, aby uživatel mohl TEX/LATEX používat, je nutné mít určité znalosti. Nicméně při použití aplikace TEXonWeb je uživateli dostupné intuitivní grafické rozhraní, které tento nedostatek odstraňuje. To činí z TEXonWeb efektivní a spolehlivý nástroj pro tvorbu dokumentů Verzování dokumentů je obecně způsob jak ukládat dokumenty od jejich vytvoření až po finální podobu s možností se kdykoliv vrátit k jedné z uložených podob. Každá tato podoba se nazývá verze dokumentu. Běžný uživatel často zjistí, že změny, které v dokumentu provedl, nejsou optimální a rád by se vrátil k předchozí verzi, na které pracoval před časem. Dostupná funkce Zpět umožňuje vracet pouze kroky od posledního uložení dokumentu. Ke starším verzím dokumentu se uživatel touto cestou již nedostane. Naproti tomu verzování dokumentů umožňuje obnovit jakoukoliv v předchozí době uloženou verzi. Velkou inspirací pro moji bakalářskou práci je aplikace Google disk6 a její funkce Historie verzí. V aplikaci Google disk je možné vytvářet různé druhy dokumentů od obyčejných textových dokumentů až po skripty psané v programovacím jazyce Javascript. Je to webová aplikace, která nabízí uživateli k tvorbě jeho textových dokumentů WYSIWYG7 editor. Další aplikace, které slouží jako inspirace pro moji 1
Lze nalézt na http://tex.mendelu.cz Zkratka DTP vychází ze slova Desktop Publishing“ a označuje způsob profesionální sazby ” dokumentů 3 Autorem tohoto systému je Donald Ervin Knuth 4 Formát vyvinutý společností Adobe, čitelný na různých platformách pomocí prohlížeče Adobe Reader, dříve nazývaný Acrobat Reader 5 Programovací jazyk používaný pro grafický popis tištěných dokumentů byl vyvinut firmou Adobe Systems 6 Dříve Google dokumenty, dostupné na https://drive.google.com 7 WYSIWYG je zkratkou pro větu What you see is what you get“. Označuje textové procesory, ” ve kterých by uživatel měl získat po vytisknutí stejnou podobu dokumentu, kterou vytvořil v textovém procesoru 2
12
1 ÚVOD A CÍL PRÁCE
bakalářskou práci, jsou Microsoft Word8 a LibreOffice Writer9 .
1.2
Cíl práce
Cílem bakalářské práce je rozšířit stávající webovou aplikaci TEXonWeb o novou funkcionalitu verzování dokumentů. Tato funkcionalita bude umožňovat uživateli vytvářet verze a následně se k vybrané verzi vrátit. Správa těchto verzí bude umožněna pomocí uživatelsky přívětivého rozhraní. V tomto rozhraní budou uživateli poskytnuty veškeré důležité informace týkající se každé verze. Mezi tyto informace patří číslo verze, datum a čas vytvoření, velikost souboru. Z rozhraní pro správce verzí bude také možné poznat, kterou verzi má uživatel aktivní. Všechna zmíněná rozšíření budou implementována pomocí technologií Javascript, Perl, HTML, CSS a verzovacího systému SVN.
8 9
Placený software, který je součástí kancelářského balíku Microsoft Office Svobodný software, který je součástí balíku LibreOffice
2
METODIKA A POSTUP ŘEŠENÍ
2
13
Metodika a postup řešení
Protože aplikace TEXonWeb je již hotovou a používanou aplikací a na jejím vývoji se podílelo již mnoho programátorů, je proto její vlastní zdrojový kód velice rozsáhlý a komplexní. Z toho důvodu je také nutné v první řadě porozumět a zorientovat se ve struktuře souborů, které tyto zdrojové kódy obsahují. Poté budu muset přidat vlastní zdrojový kód, který umožní jak na klientské straně, tak na serverové, provádět úkoly vedoucí k vytváření samotných verzí dokumentů. Před implementací vlastního kódu bude nutné provést analýzu aktuálně fungujícího kódu aplikace. Tento krok je důležitý z důvodu zachování aktuální funkčnosti. Mohlo by se stát, že přidáním vlastního kódu by se narušila struktura současně implementovaných algoritmů a to by vedlo k výskytu chyb v aplikaci a nebo v nejhorším případě k celkové nemožnosti použití aplikace. Veškeré změny v kódu budou prováděny v adresáři devel10 . Tento adresář obsahuje vývojovou verzi aplikace TEXonWeb. Proto v případě nevydařené změny kódu nebude ovlivněna ostrá verze a tím i práce běžných uživatelů. Práce bude obsahovat popis a srovnání dostupných alternativ verzování dokumentů. Aplikace, které v této kapitole srovnám, se nazývají Google disk, Microsoft Word a LibreOffice Writer. Důležitou částí bude nastudování verzovacího systému SVN11 . Tento systém bude tvořit stěžejní část funkčnosti verzování dokumentů. Detailně tento systém popíši v části Implementace. Systém SVN bude ovládaný automatizovaně pomocí skriptu napsaného v jazyce Perl. Detailní strukturu, vstupy a výstupy tohoto skriptu také popíši v části Implementace. Kapitola Implementace bude obsahovat veškerou vlastní práci a popis rozšíření aktuálního systému. Před zahájením programování funkcionality verzování dokumentů bude nutné zavést SVN do adresářů obsahující zdrojové soubory dokumentů. V aplikaci TEXonWeb má každý uživatel svůj vlastní prostor pro vytvářené dokumenty. Tento prostor je uložen na serveru a představuje ho adresář pojmenovaný stejně jako jméno uživatele. V první fázi zavedu SVN pouze na dva uživatelské účty. Prvním z nich je účet Ing. Jana Přichystala, Ph. D. a druhým je můj osobní účet. V této fázi bude následovat implementace základní funkcionality, jako je vytváření nových verzí a přecházení k již vytvořeným verzím. Také bude nutné zajistit synchronizaci se správcem souborů. Po otestování a potvrzení funkčnosti bude následovat fáze dvě. V této fázi půjde o hromadné zavedení SVN na všechny existující účty aplikace TEXonWeb. Během práce bude nutné konzultovat provedené změny s Ing. Janem Přichystalem, Ph. D. Tyto konzultace budou nutné z důvodu ověření funkčnosti a provádění úkonů na serveru spojených se zaváděním SVN na existující účty. Práce bude ve svém závěru obsahovat diskuzi a zhodnocení vytvořeného řešení. V této části srovnám vlastní řešení s konkurenčními. Část týkající se zhodnocení vytvořeného řešení bude také obsahovat ekonomický pohled na věc a přínosy nově vytvořené funkcionality. 10 11
Dostupné na http://tex.mendelu.cz/devel Zkratka pro pojem Subversion“ ”
14
2.1
2 METODIKA A POSTUP ŘEŠENÍ
Použité technologie
Z toho důvodu, že aplikace TEXonWeb je již hotové řešení a má práce se zabývá rozšířením stávající funkcionality, je velká část technologií již zvolena. Pouze v případě technologie pro verzování dokumentů bylo zapotřebí rozhodnout, kterou z dostupných možností zvolit. Rozhodli jsme se pro verzovací systém SVN. Učinili jsme tak, protože SVN je využíván pro verzování všech souborů obsahující zdrojové kódy aplikace TEXonWeb. Nebylo tedy nutné instalovat žádný nový systém na server. Systém SVN bude pro naše účely postačovat ve všech ohledech. V současné době se pro klientskou část aplikace využívá programovací jazyk Javascript. Pomocí tohoto jazyka je vytvořeno celé uživatelské rozhraní a všechny jeho nabízené funkce. Aplikace využívá také frameworku jQuery12 . Pomocí něj můžeme vytvářet dialogová okna a provádět různé akce, které by v případě použití samotného Javascriptu bylo složité implementovat. Samozřejmostí je využití technologií HTML a CSS. Tyto dvě technologie jsou klíčové pro vytváření webových aplikací. Není proto pochyb, že HTML a CSS jsou použity i v naší aplikaci. TEXonWeb využívá technologii AJAX13 . Tato technologie je velmi významnou na poli webových technologií a využívá se při tvorbě takzvaných RIA14 aplikací. Využitím této technologie jsme schopni získávat informace ze serveru, aniž by se musela obnovit stránka. Tato výhoda neaktualizování vyvolává dojem, jakoby uživatel používal desktopovou aplikaci. V případě verzování dokumentů bude AJAX využíván pro zasílání HTTP15 dotazů na skript pro správu SVN. Programovacím jazykem na straně serveru je Perl. V současné době jsou skripty využívány například pro vytváření seznamu souborů a adresářů, pro provádění akcí se souborovým systémem každého uživatele a mnohé další. V našem případě bude skript provádět příkazy, kterými bude ovládat SVN repozitář16 přihlášeného uživatele.
12
Dostupné z http://jquery.com/ Zkratka AJAX znamená Asynchronous Javascript and XML“ ” 14 Označení RIA znamená Rich Internet application“ ” 15 Komunikační protokol aplikační vrstvy 16 Prostor na serveru, ve kterém jsou uloženy verzované soubory 13
3
SOUČASNÝ STAV
3
15
Současný stav
3.1
Dostupná řešení
Verzování dokumentů je funkcionalita, která je v současné době rozšířena v běžně používaných WYSIWYG editorech. Proto při vytváření funkcionality verzování dokumentů v TEXonWeb sloužily k inspiraci tři nejpoužívanější aplikace pro tvorbu dokumentů – Microsoft Word, LibreOffice Writer a Google Disk. Zvolili jsme si tyto aplikace z důvodu velké komunity uživatelů, která by v případě problému mohla prostřednictvím diskuzních fór poskytnout cenné informace. Mezi rozdíly z pohledu členitelnosti těchto aplikacích patří licence, pod kterou jsou tyto produkty poskytované, a typ aplikace. Tato fakta je zajímavé zahrnout do hodnocení funkcionality verzování dokumentů v jednotlivých aplikacích. 3.1.1
Microsoft Word
Aplikace Microsoft Word je textovým procesorem, který je součástí kancelářského balíku Microsoft Office. Produkt Microsoft Office je poskytován firmou Microsoft pod různými licencemi. V rámci mé bakalářské práce byla použita licence určená pro vysokoškolské studenty, která se vztahuje na verzi Microsoft Office 2010. V případě Microsoft Word je zbytečné pátrat po pojmu verzování dokumentů“. Firma ” Microsoft tuto funkcionalitu nazvala sledování změn v dokumentu“. Sledování změn ” dokumentu je ve výchozím stavu programu vypnuté. Uživatel si tuto funkcionalitu může zapnout z karty Revize v podmenu Sledování. Jakmile je funkcionalita zapnutá, tak veškerý nově přidaný text je ve výchozím stavu zbarven červenou barvou. Avšak je dobré si před zahájením práce na dokumentu zvolit způsob, jakým se prováděné změny budou v dokumentu zobrazovat. Dialog17 nastavení je možné vyvolat kliknutím na spodní část tlačítka Sledovat změny, kde po kliknutí se zobrazí skrývatelná nabídka, ve které si uživatel zvolí možnost Změnit možnosti sledování. V zobrazeném dialogu je možné měnit širokou škálu možností. Mezi zajímavé možnosti patří změna barvy písma u specifických akcí. Uživatel si může zvolit barvu, kterou se bude písmo obarvovat, a to v případě přidání nového textu a odstranění textu. V případě odstraňování se písmo textu obarví zvolenou barvou jen v případě, že uživatel odstraní část textu, která byla v minulosti přijata jako součást originálního dokumentu, a zároveň má vypnutou možnost zobrazování bublin. K procesu přijímání a odmítání změn se v této kapitole ještě vrátíme. Taktéž bude vysvětlena možnost zobrazování bublin. Mimo změny barvy písma u výše zmíněných akcí lze měnit také styl písma. Uživatel může například nastavit, aby se písmo textu, který se rozhodne přidat do dokumentu, zobrazovalo podtrženě. Lze si samozřejmě vybrat z široké nabídky možností stylů písma. Příkladem stylů písma může být tučný řez písma, kurzíva 17
Dialog je uzavíratelné okno, které je možné libovolně přesouvat po obrazovce
16
3
SOUČASNÝ STAV
nebo přeškrtnuté písmo. Styly je možné úplně vypnout. V takovém případě bude text zobrazován podle toho, jak si uživatel zvolí pomocí vlastních stylů. Mezi další vizuální pomůcky, které si uživatel může nastavit v rámci Sledování změn, patří označení změněných řádků. Řádky se označují pomocí vertikální čáry vedené po okraji dokumentu. Stranu, po které bude čára vedena, lze měnit podle preferencí uživatele. Speciálním případem je zvolení vnějšího ohraničení. V takovém případě je čára vedena po levé straně na lichých stránkách dokumentu a po pravé na sudých stránkách dokumentu. Barevně lze také odlišovat komentáře. Komentář může uživatel přidat tím, že označí komentovaný text do bloku a stiskne tlačítko Nový komentář. Zvolenou barvou jsou pak obarveny kulaté závorky, do kterých je okomentovaný text uzavřen. Komentáře slouží k přidání dodatečné informace pro další uživatele, kteří budou dokument později editovat. Pokud dokument edituje pouze jeden uživatel, slouží komentáře pro jeho osobní potřebu. V případě, že uživatel používá funkci zobrazování bublin, není komentář vyznačen kulatými závorkami v textu, ale je zobrazen při přejetí kurzorem myši přes bublinu. Word nabízí také možnost barevně odlišit změny, které uživatel provede při úpravě tabulek. Odlišnou barvu lze nastavit pro čtyři různé uživatelské akce. Těmito akcemi jsou vložení buňky, sloučení buňky, odstranění buňky, rozdělení buněk. Volitelnou akcí, kterou je možné pomocí funkce sledování změn zachycovat, je formátování písma. Slovem volitelnou v tomto případě myslíme akci, kterou lze vypnout a přestat ji tak úplně zachycovat. Formátování je zachyceno, pouze pokud uživatel využije nějakou z možností v kartě Domů, v podmenu Písmo. Naformátovaný text je možné zobrazovat zvolenou barvou, zvoleným stylem písma nebo kombinací předchozích dvou. Stejným způsobem, jakým si uživatel zvolí zobrazovat formátování písma v dokumentu, bude zobrazována definice vlastního stylu pro písmo. Zajímavou možností, kterou lze využít při sledování dokumentu, je použití takzvaných bublin. Bubliny obsahují informace, které říkají uživateli, jaká akce v daném místě dokumentu vznikla. Místo je určeno čárkovanou čarou vedoucí od bubliny a zakončenou střelkou označující přesné místo vzniku uživatelské akce. Čára je vykreslena barvou, kterou si zvolil uživatel k odpovídající akci. Čáru mezi bublinou na okraji a místem označujícím vznik akce je možné nezobrazovat. Bubliny se vztahují k akcím jako jsou odstranění textu, přidání komentáře, naformátování písma. Okraj, na který se budou bubliny zarovnávat, si uživatel může zvolit dle svých potřeb. Volitelná je také šířka bubliny, kterou bude na stránce zabírat. Šířku je možné nastavovat v procentech nebo centimetrech. Důležitými funkcemi z hlediska sledování změn je přijímání a odmítání provedených změn v dokumentu. Změny v dokumentu jsou všechny akce, které uživatel provedl během svojí práce. Změny jsou barevně odlišeny podle toho, jak si je uživatel definoval v dialogu možností sledování změn. Přijímání provedených změn v dokumentu může uživatel provést pomocí tlačítka Přijmout, které se nachází v kartě Revize, v podmenu Změny. Přijímání změn může uživatel provádět postupně změnu
3.1
Dostupná řešení
17
Obrázek 1: Okno Možností sledování změn
po změně nebo přijmout všechny změny v dokumenty najednou. K tomu, aby uživatel mohl procházet změny postupně, může využít tlačítek Další a Předchozí. Pomocí těchto tlačítek je možné projít změny v dokumentu postupně od první až k poslední. Jednotlivé změny se vždy po kliknutí na tlačítko Další nebo Předchozí označí do bloku. Poté, co uživatel stiskne tlačítko Přijmout nad označenou změnou, stává se přijatá změna součástí dokumentu a je vyjmuta z celkového sledování změn. Podobně jako přijímání změn funguje také odmítání změn s rozdílem, že po stisknutí tlačítka Odmítnout nad označenou změnou se změna zruší a vrátí se do původního stavu. Užitečnou funkcí pro orientaci v celkových změnách v dokumentu je zobrazení podokna revizí. Podokno lze zobrazit kliknutím na tlačítko Podokno revizí v kartě Revize, v podmenu Sledování. V zobrazeném podokně jsou veškeré změny provedené v dokumentu roztříděny do kategorií určující část dokumentu. Tímto způsobem má uživatel k dispozici přehlednou navigaci, kde pomocí kliknutí na vybrané změny či komentáře může přímo přejít k potřebným změnám a provést požadovanou akci. Program Microsoft Word nabízí uživatelům významnou možnost porovnání dvou dokumentů. Tlačítko Porovnat dostupné z karty Revize, v podmenu Porovnat, umožňuje porovnávání dokumentů. V případě porovnávání dokumentů si uživatel
18
3
SOUČASNÝ STAV
Obrázek 2: Podokno revizí v aplikaci MS Word
před spuštěním samotného porovnání vybere, který dokument považuje za originální a vůči kterému chce dokument porovnávat. Tedy který dokument chce uživatel použít jako revidovaný. Porovnávané dokumenty by měly obsahovat podobný obsah s tím rozdílem, že každý dokument by měl být jiné verze. Funkce Porovnat poté zjistí rozdíly mezi jednotlivými verzemi a barevně tyto rozdíly odliší a zobrazí obsah obou dokumentů. Při porovnání dvou dokumentů se typy změn nalezené v revidovaném dokumentu zobrazí v podokně revizí. Například pokud v revidovaném dokumentu je na první stránce nadpis, který v originálním dokumentu není, pak je tento nadpis označen za změnu, která je typu vkládání. Odlišnosti porovnávaných dokumentů je možné zobrazit jak v originálním dokumentu, tak v revidovaném dokumentu nebo v nově otevřeném dokumentu. Porovnáváním dokumentů je uživatel nejen schopen rychle zjistit změny vyskytující se v revidovaném dokumentu, ale může přijímáním těchto změn vytvořit zcela nový dokument. 3.1.2
Google Disk
Google Disk je webová aplikace, která primárně umožňuje uživatelům službu webového uložiště. Uživatel může po vytvoření účtu využívat zdarma 5 GB volného místa pro svoji potřebu. Kapacitu uložiště je možné rozšířit za poměrně malou cenu na 25 GB nebo v případě vyšší potřeby na 100 GB. Do uložiště je možné nahrát veškeré vlastní soubory, které uživatel má na svém disku. Možné je i vytváření adresářů, což umožňuje vytvářet svoji vlastní souborovou strukturu. Soubory lze poté sdílet
3.1
Dostupná řešení
19
s ostatními uživateli Google Disk. Sdílení lze provést zadáním emailové adresy identifikující přesně uživatele nebo pomocí sociálních sítí mezi více uživatelů. Uživatelům je možné různě nastavit práva ke sdíleným souborům. Souborům lze nastavit práva pro editaci, čtení a přidávání komentářů. Mimo to, že je možné na Google Disk uložit prakticky vše, co vás napadne, nabízí aplikace možnost vytváření dokumentů, tabulek, prezentací a co víc, dokonce poskytuje vývojové prostředí pro vytváření vlastních skriptů. Pro vytváření každého typu dokumentu je k dispozici specifické rozhraní. Google Disk nabízí tedy webovou verzi aplikací, které lze najít v kancelářských balících, jako je Microsoft Office nebo LibreOffice Writer. Google Disk lze také propojit s jinými oblíbenými aplikacemi pro tvorbu různých dokumentů, grafů a dalších souborů. Propojení lze zajistit pomocí intuitivního průvodce. Do průvodce je možné se dostat přes tlačítko Vytvořit, kde se po stisknutí objeví menu s výběrem typů souboru. V dolní části menu se nachází odkaz s textem Připojit další aplikace, odkaz uživateli zobrazí průvodce. Google Disk zaznamenává každou změnu, kterou v souboru provedete. Kdykoli tedy stisknete tlačítko Uložit, uloží se nová verze. Automaticky máte k dispozici verze až z posledních 30 dní.(Google Disk, 2012, online) Avšak vytvářené verze jsou dostupné pouze u textových dokumentů, tabulek, prezentací, nákresů a skriptů. U ostatních dokumentů se verze nevytvářejí. Ukládání nových verzí nevzniká pouze při stisknutí tlačítka Uložit, ale přímo při změně obsahu dokumentu. Google Disk rozpozná, že uživatel změnil obsah dokumentu, a automaticky vytvoří novou verzi. K vytvořeným verzím je možné se dostat pomocí panelu Historie revizí. Panel si uživatel může zobrazit klávesovou zkratkou Ctrl + Alt + Shift + G nebo otevřením záložky Soubor v záhlaví dokumentu a vybráním možnosti Zobrazit historii verzí. Panel Historie revizí obsahuje veškeré verze, které byly vytvořeny uložením dokumentu. Každá verze obsahuje informaci o datu a času vytvoření a jménech uživatelů, kteří na dokumentu pracovali v době vytváření verze. Každý uživatel má u každé verze uvedené své barevné označení. To znamená, že změny, které v dokumentu uživatel provede, budou vyznačeny uvedenou barvou. Po kliknutí na verzi se automaticky zobrazí náhled na podobu dokumentu, v jaké byl v době vzniku verze dokument uložen. Každá verze, až na aktivní, zobrazuje kromě zmíněných informací i odkaz, který umožňuje obnovit dokument k označené verzi. Aktivní verze je vždy nejvýše v panelu Historie revizí. Historie revizí umožňuje v každém náhledu zobrazit změny, které uživatelé provedli oproti předchozí verzi. Tuto funkcionalitu je možné zapnout zaškrtnutím zatrhávacího políčka Zobrazit změny, které se nachází ve spodní části panelu Historie revizí. Změny jsou zobrazeny barvou identifikující uživatele, který změnu provedl. Přeškrtnuté změny symbolizují odstraněné položky dokumentu. Naopak pouze obarvené změny bez přeškrtnutí symbolizují položky, které byly do dokumentu přidány. Poslední možností, kterou lze v panelu Historie revizí využít, je omezení počtu zobrazovaných verzí. Uživatel má možnost zobrazit více verzí, ve kterých proběhla změna pouze několika málo znaků, jako jednu verzi. Druhý způsob zobrazování verzí umožňuje zobrazit každou verzi nezávisle na tom, jak velké změny byly v dokumentu
20
3
SOUČASNÝ STAV
Obrázek 3: Panel Historie revizí v aplikaci Google Disk
provedeny od posledně vytvořené verze. Omezení počtu zobrazených verzí lze zapnout stisknutím tlačítka Zobrazit méně podrobné revize. Po stisknutí se název tlačítka automaticky změní na Zobrazit podrobnější revize. Je tedy možné zobrazovat verze pouze jedním z uvedených způsobů. 3.1.3
LibreOffice Writer
LibreOffice je svobodný kancelářský balík pro Windows, Macintosh a Linux, který nabízí šest plnohodnotných aplikací pro práci s vašimi dokumenty a daty: Writer, Calc, Impress, Draw, Base a Math. (LibreOffice The Document Foundation, 2007, online) LibreOffice je šířený pod licencí GNU LGPL18 . Pod touto licencí je možné software libovolně šířit, používat k osobním i komerčním potřebám a také je možné libovolně upravovat zdrojový kód. Projekt LibreOffice vyvíjí rozsáhlá skupina dobrovolníků, kteří zastávají jednotlivé funkce. Například programátoři, testeři, dokumentaristé a další. LibreOffice nabízí tvorbu mnoha typů dokumentů, stejně tak jako Microsoft Office. Je tedy možné nejen vytvářet textové dokumenty, ale použít i nástroje pro tvorbu tabulek, prezentací nebo vytváření grafů a diagramů. 18
Lesser General Public License je licence pro šíření svobodného softwaru. Pod touto licencí je šířena například i Mozzila
3.1
Dostupná řešení
21
Verzování dokumentů v rámci celého balíku umožňuje pouze aplikace LibreOffice Writer. Dle mého názoru je možnost verzování dokumentů v aplikaci LibreOffice Writer nejpropracovanější. Nabízí totiž kombinaci dvou předchozích řešení. Tedy aplikací Google Disk a Microsoft Word. Uživatel je schopen jak využívat možnost sledování změn, tak i vytváření celých verzí. Je tedy možné si zvolit způsob, jakým bude uživatel přistupovat ke kontrole provedených změn v dokumentu. V první řadě popíši jakým způsobem je možné verzovat určitý dokument pomocí vytváření celých verzí dokumentu. Proto, aby uživatel mohl vytvořit novou verzi dokumentu, musí k tomuto úkonu provést následující akci. Akce spočívá v otevření okna všech dostupných verzí, kde poté kliknutím na tlačítko Uložit novou verzi se vytvoří nová verze otevřeného dokumentu. Okno dostupných verzí je možné otevřít přes kartu Soubor s následným kliknutím na možnost Verze nebo stisknutím klávesy E“. Před vytvořením nové verze se uživateli zobrazí dialog, ve kterém je ” dotázán na přidání případných komentářů k vytvářené verzi. Po kliknutí na tlačítko OK se vytvoří nová verze, která je dostupná v seznamu existujících verzí v otevřeném okně. Pokud chce uživatel, aby se nová verze vytvářela automaticky, musí zaškrtnout políčko nacházející se vedle tlačítka pro vytváření nových verzí. Avšak tato funkcionalita nefunguje zcela podle očekávání. Popisek zaškrtávacího políčka říká Při ” zavírání automaticky uložit verzi“. Nicméně po zaškrtnutí políčka, následné editaci dokumentu a jeho uzavření se program dotáže, zda-li chceme obsah uložit. Pokud uživatel zvolí možnost Uložit a dokument znovu otevře, přejde k oknu dostupných verzí, tak v seznamu nenajde žádnou novou verzi. V případě zvolení možnosti Zavřít bez uložení by se změny neuložily a nová verze by se také nevytvořila. Okno dostupných verzí nabízí kromě vytváření nových verzí řadu dalších možností. Například je možné si vytvořené verze otevřít v separátních dokumentech a prohlížet si tak podobu dokumentu, v jaké se nacházel v čase vytváření verze. Uživatel má možnost si verzi zobrazit v režimu čtení nebo verzi otevřít ve zcela novém dokumentu, kde bude možné podobu dokumentu vztaženou k vybrané verzi editovat. V režimu čtení se otevře stejnojmenná kopie dokumentu zvolené verze. Ve čtecím režimu není možné provádět žádné změny, lze pouze prohlížet dokument. Další možností je editace komentářů vztahujících se k vybrané verzi. Uživatel může vybraný komentář změnit pomocí tlačítka Zobrazit, nacházejícího se v okně dostupných verzí. Po rozkliknutí se zobrazí dialog s textovým polem obsahující již uložený komentář. V případě, že verze neobsahuje žádný komentář, je textové pole prázdné. Uživatel má také k dispozici funkci mazání vybraných verzí. Smazat verzi je možné pomocí tlačítka Smazat. Zajímavou funkcí je porovnávání aktuální verze dokumentu vůči vybrané verzi. Zapnutí této funkcionality je možné pomocí tlačítka Porovnat. Po stisknutí tlačítka se do aktuální verze nahrají změny, které byly provedeny ve vybrané verzi a zobrazí se dialog umožňující přijímání nebo odmítání změn. Okno obsahuje několik možností jak vybrané změny přijmout nebo odmítnout. Uživatel může přijmout všechny změny naráz pomocí tlačítka Přijmout vše nebo v opačném případě použít tlačítko
22
3
SOUČASNÝ STAV
Odmítnout vše. Pokud však chce změny projít pečlivěji a některé změny odmítnout a některé naopak přijmout, slouží mu k tomu seznam všech změn nacházející se nad zmíněnými tlačítky. Seznam je zobrazen v tabulce. Řádky tabulky symbolizují dílčí změny v dokumentu. Po kliknutí na řádek tabulky se natáhne do bloku místo, ve kterém změna proběhla. Poté je možné vyznačenou změnu odmítnout či přijmout pomocí stejnojmenných tlačítek. Každý řádek obsahuje informace o typu změny, uživateli, který změnu provedl, datu a času vytvoření změny. Poslední zobrazovanou informací na řádku je komentář dílčí změny. Tento komentář lze přidat pomocí funkce sledování změn. K přidávání komentářů se ještě vrátíme v nadcházejícím textu. Zobrazené dílčí změny v tabulce lze omezit pouze na vybrané pomocí karty Filtr, nacházející se v horní části okna přijímání a odmítání změn. Změny lze filtrovat pomocí specifikace hodnot sloupců tabulky. Například pokud bude uživatel chtít zobrazit v seznamu verzí pouze změny, které provedl v určitém časovém rozmezí, zaškrtne políčko Datum, v roletkovém menu nastaví hodnotu leží mezi“ a určí ” požadované datum a čas. Podobně lze postupovat při nastavování další filtrů.
Obrázek 4: Okno dostupných verzí v aplikaci LibreOffice Writer
Druhým způsobem, jak lze k verzování dokumentů přistupovat v programu LibreOffice Writer, je použití funkce sledování změn. Tato funkce je podobná funkcionalitě, kterou implementuje Microsoft Word. Nicméně proto, aby bylo možné začít změny v dokumentu sledovat, je třeba tuto funkci zapnout. Tento úkon je možné provést kliknutím na možnost Úpravy v menu, které se nachází v horní části otevřeného dokumentu. Po zobrazení nabídky je třeba najet kurzorem na možnost Sledování změn a v další nabídce zvolit možnost Záznam. Odlišnosti, které si uživatel jistě všimne, je nemožnost nastavení takového množství barevných označení, jako umožňuje Word. Všechny změny provedené v dokumentu jsou označeny jednou barvou a sice oranžovou. Změněné řádky jsou označeny po levé straně tenkou černou čarou. Tyto odlišení jsou pevně nastavené a nelze je měnit.
3.2
Analýza současného stavu
23
K jednotlivým změnám, které uživatel v dokumentu provede, je možné přidat komentář. Komentáře se následně zobrazují v okně přijímání a odmítání změn, jak bylo avizováno v předchozím textu. Komentáře je možné přidat rozkliknutím možnosti Komentář v nabídce Sledování změn. Možnost Komentář otevře dialog pro vkládání komentářů. V dialogu se nachází textové pole pro vkládání komentářů, šipky pro pohyb v jednotlivých změnách v dokumentu a také tlačítka pro potvrzení a zrušení komentáře. Pomocí šipek je uživatel schopen iterativně projít všechny změny v dokumentu a v případě potřeby si vytvářet komentáře. Komentáře plní pouze informativní charakter. Je dobré si některé změny okomentovat v případě, že na dokumentu pracuje více uživatelů. Poté uživatel ví, z jakého důvodu byly v dokumentu provedeny určité změny, a může s těmito změnami patřičně nakládat při procesu přijímání a odmítání změn. Okno přijímání a odmítání změn je možné zobrazit ze stejného místa jako dialog komentářů. Stačí jen zvolit možnost Přijmou nebo Odmítnout. Způsob, jakým přijímání a odmítání změn funguje, bylo již vysvětleno.
3.2
Analýza současného stavu
V první řadě, nežli začneme s vysvětlením, jak lze v současné době uživateli umožnit alespoň částečný návrat k provedeným změnám v dokumentu, by bylo dobré si definovat pojem krok“. Krokem je myšlena jedna uživatelská akce. Za akci můžeme ” považovat: • Napsání jednoho znaku • Smazání jednoho znaku • Odstranění bloku textu • Vložení bloku textu • Vložení speciální značky do dokumentu pomocí hlavní nabídky V současné době aplikace TEXonWeb neumožňuje žádným komplexním způsobem verzovat dokumenty. Jediný způsob, jak vrátit provedené změny, je použití funkce Zpět. Tlačítko umožňující tuto funkci se nachází v základním panelu tlačítek. Tato funkce umožňuje návrat pouze o tři kroky zpět. To je v případě potřeby návratu k dřívějším změnám nedostačující. Pro obnovení odstraněných změn pomocí funkce Zpět slouží funkce Vpřed. Podobně jako předchozí funkce umožňuje obnovit pouze tři kroky, avšak je možné obnovit pouze změny, které byly odstraněny pomocí funkce Zpět. Nelze tedy obnovovat text, který byl smazán klávesou Backspace nebo Delete. Funkce Vpřed je tedy reverzní funkcí k funkci Zpět. Odpovídající tlačítko také nalezneme v základním panelu tlačítek. Z důvodu současné absence rozsáhlejší funkcionality v oblasti verzování dokumentů v aplikaci TEXonWeb jsme se s Ing. Janem Přichystalem, Ph. D. rozhodli tuto skutečnost změnit a zavést tak do aplikace novou funkcionalitu.
24
3
SOUČASNÝ STAV
TEXonWeb je projekt umožňující využívat DTP systém TEX/LATEX na webovém serveru za použití webového prohlížeče. (Dokumentace systému TeXonWeb, 2006, online) Aplikace TEXonWeb poskytuje uživatelům dva způsoby, jak vytvářet dokumenty. První z nich je možný využít bez nutnosti registrace uživatele. Uživatel pouze napíše svůj zdrojový text do okna pro jeho tvorbu, zvolí překladač, počet průchodů a stiskne tlačítko určující typ výstupu, ve kterém bude dokument uložen. První ze způsobů neposkytuje uživateli žádnou z rozšířených funkcí, které TEXonWeb nabízí. Hlavní nevýhodou je pak nemožnost ukládání svých zdrojových textů na serveru. Pro zpřístupnění těchto funkcí je nutné, aby se uživatel zaregistroval a vytvořil si tak svůj osobní účet. Registrací a následným přihlášením získá uživatel přístup k druhému způsobu vytváření dokumentů. Po přihlášení je zobrazeno uživatelské menu. V menu je možné pak využít možnost pro ukládání dokumentů, správce souborů a mnoho dalších možností. Z toho důvodu, že vytvářené dokumenty lze ukládat pouze v přihlášeném režimu uživatele, bude možné dokumenty verzovat také až po přihlášení uživatele. Z toho důvodu se práce týká pouze druhého způsobu vytváření dokumentů. TEXonWeb obecně funguje tak, že vytvořený zdrojový text se odešle na skript index.pl. Skript pak rozpozná kliknutí na tlačítko s typem výstupu a poskytne dokument ke stažení. V případě, že soubor obsahuje chybu ve zdrojovém textu, je hlášení o chybách zapsáno do logového souboru. Logový soubor je možné zobrazit přímo v prohlížeči. Projekt je založen na TEXLive 2011 z distribuce Linux CentOS 5.2. (Dokumentace systému TeXonWeb, 2006, online) Technologie, na kterých v současné době aplikace TEXonWeb běží, jsou Perl, Javascript, HTML a CSS. Perl je programovací jazyk, který se v současné době těší značné oblibě. Přestože vůči němu lze mít z teoretického hlediska vážné námitky, je to jazyk zajímavý a mimořádně praktický. (Satrapa, 2000) Programovací jazyk Perl je používán k vytváření skriptů pracujících na straně serveru. Patří sem například skripty pro správu souborů, generování HTML a jiné. Javascript je potom využit k vytváření klientské části aplikace. Pomocí Javascriptu je naprogramované celé uživatelské menu, které je zobrazeno po přihlášení uživatele. HTML a CSS jsou použity standardně jako ve většině webových aplikací. Významnou technologii, kterou TEXonWeb využívá, je AJAX. Technologie umožňuje zasílat HTTP požadavky na vybrané skripty a získávat odpovědi, aniž by se musela obnovovat celá stránka. AJAX je například využíván pro zasílání požadavků na skript generující seznam uložených souborů a složek v uživatelově osobním prostoru na serveru.
4
IMPLEMENTACE
4 4.1
25
Implementace Návrh řešení
Předtím, než přistoupím k popisu samotné implementace, bych chtěl popsat, jakým způsobem bude verzování dokumentů v aplikaci TEXonWeb fungovat. Především bude funkce verzování dokumentů dostupná pouze registrovaným uživatelům. V režimu, kdy uživatel není přihlášen do aplikace, není možné ukládat vytvořené dokumenty na server. Tudíž není ani možné nijak zachycovat případné změny v dokumentu. Při popisu funkčnosti verzování dokumentů bych chtěl věnovat pozornost způsobu, jakým je uživatel schopen vytvořit novou verzi. Pojem nová verze lze v případě verzování dokumentů v TEXonWeb rozdělit na dva typy: • Počáteční verze označená číslem 1 • Každá další verze označená číslem větším jak 1 Čísla označující verze budou hrát svoji roli v uživatelském rozhraní umožňující správu verzí. Uživatelské rozhraní bude podrobněji popsáno později v textu této kapitoly. Nicméně zpět ke způsobu vytváření nových verzí. Počáteční verzi dokumentu vytváří uživatel v případě, že dokument ještě nemá uložen na serveru. Dokument se na server uloží v okamžiku, kdy uživatel poprvé v nově otevřeném dokumentu stiskne tlačítko Uložit v kartě Soubor. Poté je vyzván pomocí ukládacího dialogu k tomu, aby pojmenoval svůj dokument a určil místo, kam chce dokument uložit. Po stisknutí tlačítka Uložit se dokument uloží v osobním prostoru uživatele na serveru. V okamžiku úspěšného uložení se vytvoří počáteční verze dokumentu. Počáteční verzi dokumentu lze vytvořit také nahráním vlastního souboru z pevného disku. Vlastní soubor by měl obsahovat zdrojový text. Soubor je možné nahrát pomocí Správce souborů. Do Správce souborů se uživatel dostane pomocí tlačítka Správce souborů v kartě Soubor. Po otevření dialogu uživatel musí zvolit tlačítko Procházet a poté si vybrat vlastní soubor na disku. Stisknutím tlačítka OK uživatel odešle soubor na server a tím vytvoří i počáteční verzi dokumentu. Každé další verze uživatel vytváří následným uložením dokumentu. Pokud uživatel použije tlačítko Uložit jako, potom se aplikace chová, jakoby se dokument na server ukládal poprvé, a tedy vytvoří u takto uloženého dokumentu počáteční verzi. Mezi vytvořenými verzemi je možné samozřejmě přepínat. Načtení jakékoliv z předchozích verzí je umožněno pomocí Správce verzí. Pokud se uživatel vrátí k nějaké z předchozích verzí a následně dokument uloží, vytvoří novou verzi. Potom, bez ohledu na to, zda uživatel v dokumentu provedl jakékoliv změny, se veškeré následující verze smažou a vytvoří se zcela nová verze dokumentu. Předcházející verze se zachovají. Pro lepší pochopení vysvětlím na příkladu. Uvažujme, že dokument bude evidovat pět verzí. V okně bude načtena nejnovější verze dokumentu, a sice pátá. Uživatel
26
4
IMPLEMENTACE
se vrátí k verzi číslo tři a stiskne tlačítko Uložit. V takovém případě budou u dokumentu již evidovány pouze tři verze. V okně bude načtena třetí, tedy nejnovější verze. Na obrázku pět je zachycen způsob vytváření verzí při práci uživatele.
Obrázek 5: UML stavový diagram znázorňující práci uživatele
4.2
Verzovací systém SVN
Verzovací systém SVN je jedním z hlavních nosných pilířů, na kterém stojí řešení problematiky verzování dokumentů v aplikaci TEXonWeb. SVN se obvykle využívá k správě a verzování zdrojových kódů při vývoji software. SVN je zkratka pro název Subversion. Systém je vyvíjen softwarovou nadací Apache. Nadace vytvořila již mnoho známých Open Source projektů. Mezi nejznámější patří například Apache HTTP server. Vzhledem k tomu, že SVN je primárně používáno k verzování souborů obsahující zdrojové kódy, které jsou pouhým textem, je proto pro naše potřeby ideálním řešením. Soubory vytvářené uživatelem v aplikaci TEXonWeb, které jsou na serveru ukládány, jsou také pouze textové soubory. Z toho důvodu jsme schopni využít
4.2
Verzovací systém SVN
27
stejný postup, jakým programátoři využívají Subversion k verzování svých zdrojových kódů. I když psaní TEXových maker bezesporu je programování, zdá se, že mnoho autorů TEXových dokumentů, narozdíl od běžných programátorů“, zatím ” neobjevilo sílu a užitečnost nástrojů pro správu verzí. Nezřídka se pak stává, že ani autoři sami nejsou po nějaké době schopni znovu vysázet své staré dokumenty, neboť již nemají potřebné verze svých makrobalíků. Stejně tak mají problémy orientovat se ve vlastním kódu nebo dohledat zdroj chyby, která se náhle objevila zdánlivě odnikud. (Růžička, 2003, online) Stejně tak jako u mnoha jiných projektů, je SVN využíváno i v případě verzování veškerých zdrojových kódů aplikace TEXonWeb. K mé výhodě tedy bylo SVN na serveru již nainstalováno. Nebylo tedy nutné se zamýšlet nad volbou alternativního verzovacího systému. Příkladem alternativního verzovacího systému může být Mercurial SCM19 nebo Git20 . SVN funguje na principu synchronizace pracovní kopie uživatele a prostoru na serveru. Ten nazýváme repozitář. Pracovní kopie uživatele je stažený obsah repozitáře, aktualizovaný k určité revizi. Jednotlivé verze souborů, které repozitář obsahuje, se nazývají revize. V případě verzovacích systémů nemluvíme tedy o jednotlivých verzích souborů, ale o revizích. Synchronizací pracovní kopie a repozitáře myslíme, že uživatel vždy buď aktualizuje svoji pracovní kopii k určité verzi uložené na serveru, nebo odešle obsah pracovní kopie do repozitáře k vytvoření nové verze (viz obr. 6). Stažení obsahu repozitáře, vytvoření nové revize a mnoho další úkonů se provádí pomocí příkazů spouštěných z příkazové řádky. Příkazy, kterými lze SVN ovládat a byly v práci použity, si popíšeme blíže v následující kapitole.
Obrázek 6: Schéma práce klientů s repozitářem
(SVN Tutoriál, 2010, online) 19 20
Dostupné z http://mercurial.selenic.com/ Dostupné z http://git-scm.com/
28
4
4.2.1
IMPLEMENTACE
Použité příkazy
V podstatě existují dva způsoby jak ovládat SVN. Prvním z nich je použití SVN klienta, který implementuje grafické uživatelské rozhraní. Druhým způsobem je pak spouštění příkazů pomocí příkazové řádky. V této bakalářské práci se budu zabývat pouze druhou možností. Pro zajímavost zmíním, že často používaným klientem implementující grafické uživatelské rozhraní je TortoiseSVN21 . Používané příkazy se skládají z dvou částí, a sice z prvního příkazu svn, kterým uživatel dává na vědomí, že chce pracovat s SVN, a druhé části určující, co se v SVN má přesně stát. Pro zjištění všech použitelných příkazů je možné použít přepínač --help pro nápovědu. Příkaz je možné využít v následujícím tvaru svn --help. Přepínač pro nápovědu je možné využít i pro zjištění podrobnějších informací o dílčích příkazech příkazu svn. Příkladem může být svn commit --help. Takto spuštěný příkaz vypíše do terminálu popis funkčnosti příkazu a také všechny možné přepínače, které lze u příkazu použít. Nechybí samozřejmě příklad použití. Obecně lze říci, že příkazy pro ovládání SVN mají následující tvar. svn
<parametry> V rámci mé bakalářské práce jsem použil celkově osm příkazů pro ovládání SVN. Přesně to potom byly příkazy: 1. svn add 2. svn commit 3. svn update 4. svn move 5. svn copy 6. svn delete 7. svn info 8. svn log První z vyjmenovaných příkazů slouží k začlenění souboru do verzovacího systému. Je to tedy první příkaz, který je nutné zadat předtím, než se souborem v SVN bude provedena jakákoliv akce. V rámci verzování dokumentů je příkaz volán pokud, uživatel poprvé uloží soubor, nahraje soubor ze svého disku nebo vytvoří adresář. Parametrem příkazu je potom cesta ke zvolenému adresáři či souboru. Druhý z použitých příkazů je využíván k potvrzení změn v pracovní kopii a jejich odeslání do repozitáře. Pomocí příkazu svn commit se vytvářejí nové verze souborů. V našem případě tedy vytváříme nové verze dokumentů. Je tedy volán vždy, když 21
Dostupné z http://tortoisesvn.net/
4.2
Verzovací systém SVN
29
uživatel stiskne tlačítko Uložit. Příkaz bychom mohli označit jako potvrzovací. Při volání potvrzovacího příkazu používáme přepínač -m "zpráva". V uvozovkách pak píšeme zprávu, která se uloží do logu. V našem případě se zprávy generují automaticky. Do zpráv je pak ukládána informace o velikosti souboru. Příkaz svn commit je nutné použít i pro potvrzení naplánovaných změn v repozitáři. Voláme ho vždy po příkazech, které manipulují s obsahem repozitáře. Ve výše uvedeném seznamu můžeme za manipulační příkazy označit 1., 4., 5. a 6. příkaz. V některých případech manipulačních příkazů není potřeba volat svn commit. Je možné totiž použít přepínače --force. Přepínač umožní provést změny v repozitáři přímo, aniž by se musel volat potvrzovací příkaz. Pracovat se zmíněným přepínačem je nebezpečné. Uživatel může lehce poškodit obsah repozitáře. Velkou nevýhodou použití přepínače je, že není zachována žádná zpráva v logu SVN. Je tedy velice těžko dohledatelné, mezi kterými revizemi byl příkaz spuštěn. Následující příkaz v seznamu umožňuje aktualizovat obsah pracovní kopie k nejnovější revizi v repozitaři. Je také možné přecházet k vybraným revizím. Pro přechod k vybrané revizi je nutné použít přepínač -rX, kde X je číslo potřebné revize. Parametrem příkazu může být cesta k adresáři nebo cesta ke specifickému souboru. V případě, že je zadána cesta k adresáři a není tedy vybrán určitý soubor, je provedena aktualizace všech souborů, které jsou umístěny ve specifikovaném adresáři. U verzování dokumentů v TEXonWeb používáme téměř vždy parametr, který specifikuje potřebný soubor. Je tomu tak, protože vždy když uživatel edituje svůj dokument, tak pracuje pouze s jedním souborem na serveru. Variantu parametru, kdy obsahuje cestu k adresáři, používá TEXonWeb pouze v případě smazání dokumentu. Po smazání dokumentu je nutné aktualizovat obsah pracovní kopie a tedy není možné volat příkaz nad souborem, který již neexistuje. Příkaz svn update je volán vždy, když je provedena nějáká změna v SVN. Je to z důvodu, aby uživatel měl vždy aktuální obsah své pracovní kopie. Následující tři příkazy provádí změny jak v pracovní kopii uživatele, tak v repozitáři uloženém na serveru. Jak již bylo avizováno, změny v repozitáři jsou provedeny jakmile je zavolán příkaz svn commit. Čtvrtý příkaz umožňuje přesouvání nebo přejmenování souborů a adresářů v repozitáři. Příkaz je volán se dvěma parametry. Může být volán i s více parametry, ale v rámci verzování v TEXonWeb je použita pouze varianta se dvěma parametry. Každý z parametrů obsahuje cestu k souboru nebo adresáři. Na základě toho, jakým způsobem jsou cesty v parametrech příkazu definovány, se určí, zda bude provedeno přejmenování, přesunutí nebo obojí. Z důvodu, že Správce souborů v TEXonWeb umožňuje pouze přesouvání nebo přejmenování souborů v rámci jednoho uživatelského úkonu, je evidentní, že nebude možné provést najednou přejmenování i přesunutí. Jestliže je prováděno přejmenování souboru nebo adresáře v SVN, potom první parametr obsahuje cestu k souboru se starým jménem. V druhém parametru je pak stejná cesta s rozdílem, že na konci obsahuje nové jméno souboru nebo adresáře. Pokud uživatel zvolí možnost přesunutí souboru, potom se cesta v prvním parametru liší od cesty definované v druhém parametru. Jediné v čem se parametry shodují je,
30
4
IMPLEMENTACE
že jméno souboru na konci cest zůstává stejné. Adresáře nelze v TEXonWeb přesouvat. V SVN akce přesunutí probíhá následujícím způsobem. V První řadě se začlení nový soubor s novým jménem nebo novou cestou do SVN. Starý soubor, který v SVN již existuje, je poté odstraněn. Do nového souboru se přesouvají i všechny informace týkající předchozích revizí. Pátým příkazem je možné kopírovat soubory v repozitáři. Příkaz svn copy funguje obdobně jako předchozí příkaz. Rozdíl je v používání stejného jména souboru v obou parametrech. První parametr obsahuje cestu, odkud se bude kopírovat, druhý potom cestu, kam se bude kopírovat. V SVN pak proces kopírování souborů probíhá zcela identicky jako v případě příkazu svn move. Pokud uživatel chce kopírovat soubor do stejného adresáře, kde se původní soubor nachází, potom je zobrazen dialog, kde je dotázán, zda chce přepsat stávající soubor jeho kopii. Pokud akci potvrdí, je tedy takto provedeno. Druhou možností se kopírování zruší a původní soubor zůstane zachován. Samozřejmě je možné příkaz pro kopírování použít i s více jak dvěma parametry, ale opět tento příkaz používáme v rámci TEXonWeb pouze zmíněným způsobem. Také je možné použít možnost kopírovaní s přejmenováním souboru, avšak tu Správce souborů v současné době neumožňuje. Nebylo tedy nutné ji implementovat. Šestý z příkazů umožňuje mazání souborů z repozitáře. Používá pouze jeden parametr. Parametrem je cesta k mazanému souboru. Mazat lze buď soubory nebo prázdné složky. Neprázdné složky nelze smazat. Příkaz svn delete obecně umožňuje mazat neprázdné složky, ale v rámci TEXonWeb je ve Správci souborů nemožné mazat neprázdné složky, proto nebylo ani možné příkaz takto použít. Sedmý z příkazů vypisuje užitečné informace o verzovaném souboru do terminálu. Mezi tyto infomace patří například číslo revize, ve které se soubor nachází, číslo revize, ve které byla provedena poslední změna, datum provedení poslední změny, typ souboru nebo také uživatelské jméno uživatele, který provedl poslední změnu v souboru. V aplikaci TEXonWeb je využívána pouze informace o čísle revize ve, které byla provedena poslední změna. Příkaz svn info je spouštěn v okamžiku, kdy uživatel spustí Správce verzí. Pomocí něj se zjišťuje číslo revize, ke které se má přejít v případě, že uživatel pouze zavře dialog a nevybere žádnou z verzí. Parametrem příkazu je opět cesta k verzovanému souboru. Posledním příkazem je možné vypsat všechny zprávy, které se uložily do logu při spuštění příkazu svn commit. Mimo zprávy, které uživatel do logu zaslal prostřednictvím potvrzovacího příkazu, je uživatel schopen zjistit i jiné informace. Mezi další informace můžeme zařadit číslo revize, ke které se provedený potvrzovací příkaz vázal, název uživatele, který potvrzovací příkaz spustil, datum vytvoření revize, počet řádků, které zpráva zabírá (viz obr. 7). Příkaz svn log je v případě verzování dokumentů v TEXonWeb velice klíčový. Příkaz je spouštěn vždy, když uživatel otevře dialog Správce verzí. Pomocí něj jsou zjištěny všechny zmíněné důležité informace. S těmito informacemi je pak možné vytvořit tabulku, která se v dialogu zobrazí. Příkaz svn log je možné spouštět bez parametru, avšak takový způsob není v našem případě možný. Příkaz bez parametru by vypsal informace o všech
4.2
Verzovací systém SVN
31
souborech v adresáři, ve kterém byl příkaz spuštěn. Je tedy nutné spouštět příkaz s parametrem určující potřebný soubor.
Obrázek 7: Ukázka z výpisu příkazu svn log v terminálu
4.2.2
Nasazení verzovacího systému
Proto, aby bylo možné začít verzovat dokumenty vytvořené uživateli TEXonWeb v jejich osobních prostorech na serveru, je nutné, aby se každému uživateli vytvořil repozitář. Po vytvoření se jen převedou veškeré existující soubory do repozitáře. Tím se zajistí vytvoření počáteční verze všech dokumentů, které uživatel do tohoto okamžiku vytvořil. Osobní místa uživatelů se nacházejí na serveru science.mendelu.cz. Přesně potom v adresáři /jail/users/, kde jsou jednotlivá jména podadresářů stejná jako uživatelská jména registrovaných uživatelů. Například tedy uživatel s uživatelským jménem xtelensk bude mít osobní prostor v adresáři /jail/users/xtelensk. Repozitáře pro každého uživatele budou vytvářeny na stejném serveru, kde jsou umístěna osobní místa uživatelů. Repozitáře budou umístěny v adresáři /export/tex/TEXonWeb. Zde bude v podstatě stejná adresářová struktura jako je v adresáři /jail/users. Repozitáře se vytvářejí příkazem svnadmin create . Aby bylo možné pracovat s vytvořeným repozitářem, stačí spustit příkaz svn checkout . Příkaz stáhne obsah repozitáře do adresáře specifikovaného v parametru . Po vytvoření se musí spustit také příkaz svn add u všech existujících souborů každého uživatele. Vše je nutné potvrdit příkazem svn commit. Aktuálně jsou repozitáře vytvořené pro účet Ing. Jana Přichystala, Ph.D. a také pro můj účet. Pro ostatní uživatele se budou repozitáře zavádět v červenci. Je to z toho důvodu, aby se nijak nenarušila práce uživatelů, kteří přes semestr mohou na svých dokumentech pracovat. Chceme se tak vyhnout jakýmkoliv komplikacím. Pro hromadné vytváření repozitářů bude použit skript napsaný ve skriptovacím jazyce shell. Skript projde celý adresář /jail/users/. Zjistí vždy název adresáře a se stejným jménem vytvoří repozitář. Obsah vytvořeného repozitáře stáhne do stejnojmenného adresáře. Potom adresář projde a přidá existující soubory do repozitáře. Na závěr vše potvrdí příkazem svn commit a pokračuje adresářem patřícím dalšímu uživateli. Skript se bude provádět, dokud neprojde všechny adresáře uživatelů. Pro umožnění verzování dokumentů nově registrovaným uživatelům je nutné provést následující věc. Upravit metodu pro vytváření uživatelů, která je součástí
32
4
IMPLEMENTACE
hlavního perlovského modulu. Bez této změny by nově registrovaným uživatelům nemohlo být nabídnuto používání funkce verzování dokumentů. 4.2.3
Automatizované ovládání verzovacího systému
Jak bylo vysvětleno v jedné z předchozích kapitol, je pro ovládání SVN nutné spouštět určité příkazy. Příkazy jsou v případě verzování dokumentů v aplikaci TEXonWeb spouštěny automaticky v závislosti na uživatelově provedené akci. Veškerou obsluhu SVN obstarává skript sprava_verzi.pl. Skript je napsaný v jazyce Perl. Vždy, když uživatel provede v aplikaci akci, která vede k práci s verzovavcím systémem, je vytvořen HTTP požadavek a odeslán na zmíněný skript. K vytváření požadavků je využívána technologie AJAX. Pro využití technologie AJAX je použit Javascriptový framework jQuery (viz obr. 8).
Obrázek 8: Ukázka vytváření HTTP požadavku pomocí technologie AJAX ve frameworku jQuery
V ukázce na obrázku 8 si můžeme všimnout, že HTTP požadavky jsou zasílány metodou POST. Parametry HTTP požadavku jsou téměř ve všech případech stejné jako v ukázce. Rozdílné jsou pouze u funkcí, které kopírují, přejmenovávají a přesouvají soubory v SVN. Parametry metody POST jsou při vytváření požadavku jsou specifikovány v Javascriptu pomocí formátu JSON22 . Vždy jako dvojice oddělené dvojtečkou, kde první z dvojice je název parametru, druhý potom hodnota parametru. Hodnotou parametru filename je název souboru, u kterého chce uživatel provést akci v SVN. V ukázce je prováděnou akcí zavedení souboru do SVN. Parametr adresar obsahuje cestu k adresáři, ve kterém je zpracovávaný souboru umístěn. Cesta je však pouze v rámci uživatelova osobního prostoru. Pokud bude zpracovávaný soubor přímo v kořenovém adresáři uživatele, bude parametr adresar obsahovat pouze prázdný řetězec. Kořenový adresář uživatele je možné specifikovat jako /jail/users/. Oba dva parametry jsou potřebné pro vygenerování úplné cesty k souboru od kořenového adresáře serveru, která je předaná vždy spouštěnému příkazu pro ovládání SVN. Obecný příklad úplné cesty k zpracovávanému souboru je v následujícím tvaru. /jail/users/// Hodnotou zbývajícího POST parametru v ukázce na obrázku 8 je řetězec specifikující přesnou posloupnost akcí, které se v SVN provedou. U tohoto řetězce se ještě chvíli 22
Zkratka pro pojem Javascript Object Notation“ ”
4.2
Verzovací systém SVN
33
zastavíme. Je velmi důležité, aby řetězec byl ve stejném tvaru jako v ukázce. Skript sprava_verzi.pl používá funkci qw(retezec), funkce přebírá parametr retezec, který obsahuje hodnoty oddělené mezerami. Funkce potom vrací pole jednotlivých hodnot, specifikovaných v jejím parametru. Pole je následně sekvenčně procházeno. V každé iteraci skript zjišťuje o jakou akci se jedná. Po identifikaci zkratky akce je vygenerován její odpovídající příkaz a poté je proveden. Zkratky a jejich významy jsou definovány v tabulce 1. Ukázka použití funkce qw je na obrázku 9. V ukázce demonstrující použití funkce qw je na řádku 1 použité dynamické vyhodnocování řetězců. To se provádí příkazem eval. Příkaz přijímá jako argument řetězec, který je vyhodnocen jako samostatný program. Výstup tohoto programu je potom vrácen tímto příkazem. V našem případě je vráceno pole akcí.
Obrázek 9: Ukázka vytvoření pole akcí a jejich identifikace
Příkazy ovládající SVN se obyčejně spouštějí z terminálu. Nicméně v případě automatizovaného spouštění příkazů se musejí příkazy spouštět přes skript. Programovací jazyk Perl umožňuje hned více možností spouštění shellových příkazů. Já jsem se rozhodl pro použití obrácených apostrofů. Shellové příkazy jsou jednoduše umístěny do obrácených apostrofů a jsou tak Perlem spuštěny, jakoby byly spuštěny v terminálu. Výstup spuštěného příkazu je možné uložit do proměnné. Pokud příkaz vrací jednořádkový výstup, potom se ukládá do obyčejné proměnné. V opačném případě se výstup musí uložit do pole. V mém skriptu jsem možnost s vrácením více jak jednoho řádku výstupu do pole použil hned dvakrát. Poprvé při volání příkazu svn info a podruhé u příkazu svn log. V obou případech je potřeba získat nějakou informaci z výstupu příkazů a zaslat ji zpět ke klientovi. V případě příkazu svn log je na základě vrácených informací sestaveno uživatelské rozhraní pro Správce verzí. Jakým způsobem se sestavuje, bude vysvětleno v kapitole Uživatelské rozhraní. V případě ostatních použitých příkazů není s vrácenými výstupy nijak nakládáno. Ukázka spuštění příkazu, který vrátí víceřádkový výstup, a jeho následné zpracování je na obrázku 10. V ukázce je také vidět, že při generování příkazu pro SVN se k řetězci připojuje proměnná path. V proměnné je uložena úplná cesta k souboru od kořenového adresáře serveru, jak jsme si definovali výše. Je zde také použit regulární výraz pro identifikaci řádku s potřebnou informací a potom jeho následné zpracování. V ukázce bych věnoval pozornost použití funce substr. Funkce je zde použita, protože při získávání aktuálního čísla revize z výstupu příkazu bylo v informaci obsaženo i ukončení řádku. To se pak uložilo u klienta. Pokud klient pak zaslal tuto informaci zpět
34
4
IMPLEMENTACE
Obrázek 10: Ukázka spuštění a zpracování výstupu shellového příkazu v Perlu
na skript, bylo ukončení řádku chápáno při spuštění příkazu jako potvrzení. Tudíž se příkaz nevykonal v očekávané formě. Je tedy nutné ukončení řádku z řetězce odstranit. Tabulka 1: Význam zkratek použitých v POST parametru se jménem akce
Zkratka cmt mov cop dlt add upd info log
4.3
Význam zkratky Potvrzovací příkaz Přesunutí/Přejmenování souboru v SVN Kopírování souboru v SVN Smazání souboru v SVN Přidání souboru do SVN Aktualizace pracovní kopie Zjištění informací o verzovaném souboru Vypsání logu z SVN
Uživatelské rozhraní
Uživatelské rozhraní celé aplikace je naprogramováno v jazyce Javascript. Proto je uživatelské rozhraní pro verzování dokumentů napsáno ve stejném jazyce. Soubor obsahující zdrojové kódy uživatelského rozhraní se nazývá menuBeta.js. Kód je již velice rozsáhlý, a proto bylo celkem obtížné se v něm zorientovat. Kromě obyčejného Javascriptu je pro tvorbu uživatelského rozhraní využit i framework jQuery. jQuery je malá, rychlá JavaScriptová knihovna s mnoha funkcemi. (jQuery Write less, do more, 2012, online) Z frameworku je pak využita knihovna Dialog. Knihovna umožňuje vyvolávat dialogová okna obsahující libovolný HTML kód. 4.3.1
Správce verzí
Do Správce verzí je možné se dostat pouze u dokumentů, které již byly uloženy na server. V případě, že má uživatel otevřený dokument, který nebyl ještě uložen na server, není možnost pro otevření Správce verzí dostupná. Do správce verzí je možné se dostat přes kartu Soubor. Zde už jen uživatel vybere možnost Správce
4.3
Uživatelské rozhraní
35
verzí. Celé uživatelské rozhraní pro správu verzí tvoří jeden dialog obsahující seznam všech existujících verzí a tlačítko pro přechod k vybrané verzi. Nechybí ani tlačítko pro uzavření celého dialogu. Seznam verzí obsahuje všechny důležité informace jako jsou číslo verze, datum vytvoření verze a velikost souboru vztahující se k verzi. V seznamu je také vždy zvýrazněn řádek s verzí aktuálně otevřeného dokumentu. Seznam verzí je vytvořen pomocí HTML tabulky, která je vygenerována skriptem sprava_verzi.pl. Vždy když uživatel klikne na možnost Správce verzí v kartě Soubor, je vygenerován HTTP požadavek, který spustí proces generování tabulky. Podrobně si generování tabulky rozebereme v následující kapitole. Uživatel používá Správce verzí tak, že vždy jen vybere požadovanou verzi a klikne na tlačítko Přejdi na verzi. Po načtení vybrané verze je uživatel dotázán, zda chce opustit stránku. Pokud uživatel potvrdí stisknutím tlačítka Opustit stránku, je do textového pole pro editaci dokumentu načtena vybraná verze dokumentu. Ukázka dialogu Správce verzí je na obrázku 11.
Obrázek 11: Ukázka dialogového okna Srávce verzí
4.3.2
Generování seznamu verzí
HTML tabulka obsahující informace o existujících verzích dokumentu je generována na základě výstupu příkazu svn log. Výstup příkazu je možné vidět na obrázku 7. Každý řádek výstupu je zpracován. Řádky jsou testovány, zda obsahují řetězec, který by signalizoval, že se na zpracovávaném řádku nachází potřebná informace. Pokud je tato podmínka splněna, je řádek rozdělen funkcí split. Funkce zajistí rozdělení řádku v místech, kde se nacházejí mezery. Výstupem funkce je pole obsahující potřebné informace. Takto získané informace jsou pak vloženy do HTML kódu, který je po zpracování všech řádků zaslán zpět v odpovědi serveru a je v prohlížeči zobrazen uživateli. Nejdůležitější informací ve výstupu příkazu je číslo revize uložené v SVN. Na obrázku 7 začíná toto číslo vždy písmenem r“. Písmeno je vždy od čísla odstraněno ” a je použito pouze celé číslo. Bez přesného čísla revize by nebylo možné se vracet
36
4
IMPLEMENTACE
k vytvořeným verzím. Přesné číslo získané z výstupu příkazu není uživateli zobrazováno. Uživatel vidí pouze čísla od 1 do N, kde N je číslo nejvyšší verze dokumentu. Přesná čísla revizí jsou uložena v atributech HTML elementů
. Atribut, ve kterém je číslo revize uloženo, se nazývá abbr. Pokud si uživatel zvolí verzi a rozhodne se k ní přejít, potom je číslo z atributu získáno a zasláno v HTTP požadavku na skript jako POST parametr s názvem revize. Data získaná z parametru jsou potom použita v příkazu svn update -r. Příkaz zajistí přechod dokumentu k zaslané revizi. Ukázka kódu generující seznam verzí je na obrázku 12. Ve sloupci Velikost ve Správci verzí je ve většině případů zobrazena, jak napovídá název, očekávaná hodnota. Nemusí tomu však tak být vždy. Může se zde zobrazovat i hodnota Přesunutí/Kopírování/Přejmenování“. Proč se tato hodnota ” ve správci zobrazuje, bude vysvětleno v kapitole Synchronizace správce verzí se správcem souborů.
Obrázek 12: Ukázka generování seznamu verzí ve skriptu sprava_verzi.pl
4.4
Synchronizace správce verzí se správcem souborů
Problematika, která bude v této kapitole vysvětlena, je z hlediska správné funkčnosti Správce verzí velmi důležitá. Jak již bylo dříve vysvětleno, SVN funguje na principu synchronizace pracovní kopie uživatele a repozitáře uloženého na serveru. Vzhledem k tomu, že pracovní kopie je v našem případě osobní prostor uživatele, a s tím vždy manipuluje Správce souborů, je nutné aby změny, které jsou pomocí Správce souborů provedeny, byly provedeny i v repozitáři. Pokud by se tak nestalo,
4.4
Synchronizace správce verzí se správcem souborů
37
pak by se skript pro obsluhu verzovacího systému dotazoval na informace, které by v repozitáři vůbec nebyly zanesené. Situace, které bylo nutné ošetřit, můžeme vyjmenovat v následujícím seznamu. • Přesunutí souborů • Přejmenování souborů nebo adresářů • Kopírování souborů • Smazání souborů nebo adresářů • Vytváření adresářů • Nahrávání vlastních dokumentů z pevného disku Pro každou situaci v seznamu je dostupný příkaz pro SVN, který vzniklou nesrovnalost napraví. Příkazy byly vysvětleny v kapitole Použité příkazy. Po provedení příkazu ve zmíněných situacích je nutné opět provést potvrzovací příkaz. Proto v případě přesouvání, přejmenování nebo kopírování souborů je vytvořena nová verze ve Správci verzí. Tato verze se od předchozí nijak neliší, ale tím, že byl spuštěn příkaz pro potvrzení, je ve výstupu příkazu svn log další záznam. Výhodou může být poskytnutí informace uživateli o tom, že provedl ve Správci souborů z avizovaných změn. Pokud uživatel vytvoří ve své pracovní kopii nový adresář, není použit příkaz svn mkdir. Používá se příkaz svn add, který pouze zavede adresář do verzovacího systému. Stejný příkaz je proveden v případě, že uživatel nahraje vlastní dokument ze svého disku přes Správce souborů. Smazání souborů nebo adresářů je v repozitáři prováděno z důvodu úspory místa na serveru. Přestože jsou verzované dokumenty pouze textové soubory, je dobré v případě jejich smazání smazat je i z repozitáře. Ve větším množství by zbytečně verzované soubory mohly zabírat dost místa, a pokud uživatel soubor již více nepotřebuje a smaže ho, není důvod verze u takových souborů uchovávat. Změny provedené ve Správci souborů u adresářů nejsou nijak evidované ve Správci verzí. Adresáře totiž nelze otevřít jako dokument. Nicméně z důvodu zachování integrity repozitáře je nutné změny provedené u adresářů provádět i v repozitáři. �
38
5 5.1
5
DISKUZE A ZHODNOCENÍ
Diskuze a zhodnocení Přínosy implementovaného řešení
Jako přínosy navrženého a implementovaného řešení bych označil celkově možnost vytváření verzí a přechod mezi jakoukoliv z uložených verzí. V aplikaci nebylo doposud možné odstranit více jak tři uživatelské kroky. To stejné platilo pro obnovení kroků, které uživatel odstranil tlačítkem Zpět. Dle mého názoru je implementované řešení tedy velký pokrok z hlediska přechodu mezi jednotlivými podobami dokumentu, které uživatel při práci vytváří.
5.2
Nedostatky implementovaného řešení
Mezi nedostatky, které by se daly implementovanému řešení vytknout, patří nemožnost spojování verzí. Tento nedostatek se projevuje v případě, že uživatel přejde k jedné z předchozích verzí a zde provede jakoukoliv změnu, kterou následně uloží. V takovém případě se veškeré následující verze zruší a vytvoří se zcela nová verze. Například pokud uživatel má ve Správci verzí vytvořené čtyři verze a vrátí se k druhé a v této verzi dokument uloží, pak se čtvrtá verze zahodí a vznikne nová třetí verze. Podle očekávání by měla vzniknout nová pátá verze, která by obsahovala podobu dokumentu z druhé verze a navíc změny, které uživatel před uložením přidal. Za další z nedostatků lze označit neustálé uchovávání i historických verzí. Při verzování dokumentů v aplikaci Google Disk se uchovávají pouze verze, které nejsou starší než třicet dnů. V případě TEXonWeb se verze u všech dokumentů uchovávají pořád bez ohledu na to, jak staré jsou. To může způsobit problémy s rychlým narůstáním velikosti adresářů obsahující uživatelské repozitáře. Přestože jsou verzované dokumenty pouze textové soubory, může v případě uchovávání jejich starých verzí u mnoha uživatelů vznikat velké množství zbytečně ukládaných dat. TEXonWeb nemá implementovaný žádný proces, jakým by staré verze odstraňoval. Poslední z nedostatků, které verzování dokumentů obsahuje, je nemožnost zobrazení uživatelsky přívětivého odlišení rozdílů mezi verzemi. V aplikaci Google Disk vždy, když uživatel klikne v panelu verzí na vybranou verzi, jsou mu zobrazeny v dokumentu barevně odlišené změny oproti předchozí verzi. V rámci TEXonWeb je možně se pouze vracet k předchozím verzím, nicméně uživatel nemá nijak barevně vyznačené změny, které v načtené verzi provedl. Musí si tedy tyto změny sám vyhledat.
5.3
Další možný postup
Jako další možný postup při vývoji verzování dokumentů bych považoval odstranění všech tří zmíněných nedostatků v předcházející kapitole. Prvním z nedostatků by bylo možné řešit pomocí příkazu svn merge. Ten by umožnil spojovat existující verze revizí do souboru, který se nachází v pracovní kopii uživatele. Příkaz by se
5.3
Další možný postup
39
volal v následujícím tvaru svn merge -r N:M . V příkazu jsou též proměnné N a M, kde N je číslo revize nejstarší revize daného dokumentu. Proměnná M je pak číslo revize dokumentu, ke kterému uživatel přešel pomocí Správce verzí. Příkazem by se zajistilo stažení obsahu ze všech předcházejících verzí do dokumentu. Poté by bylo také potřeba vyřešit konflikty zapříčiněné uživatelem, který do dokumentu přidal své změny. To by šlo vyřešit příkazem svn resolve --accept mine-conflict . Parametr mine-conflict zajistí, že pro nalezené konflikty se přijme varianta, kterou uživatel vytvořil. Vše by se potvrdilo příkazem svn commit. Proces by zajistil přidání nové verze a vyhnul by se tak problému s odstraněním nadcházejících verzí, jak bylo vysvětleno v předchozí kapitole. Dodatečné změny by měly být implementovány ve skriptu sprava_verzi.pl. Druhý ze zmíněných nedostatků by byl celkem komplikovanou záležitostí. Osobně bych navrhoval implementaci dvou skriptů. Jeden skript napsaný v jazyce Perl a druhý shellový skript. První ze skriptů by zjistil přesná čísla revizí, které by nebyly starší než třicet dnů. Samozřejmě by bylo nutné, aby se čísla revizí zaznamenávala i v případě, že dokument obsahuje méně než pět revizí, které jsou starší než třicet dnů. Jinými slovy Správce verzí by udržoval vždy minimálně pět verzí. Přesná čísla revizí by potom byla zaznamenávána například do předem určeného souboru. V souboru by každý řádek obsahoval číslo jedné revize. Shellový skript by poté vytvořil zálohu uživatelova repozitáře s potřebnými obsahující pouze zaznamenané revize. Zálohu repozitáře lze vytvořit příkazem svnadmin dump -r > dump.dmp. V záloze se ukládá obsah verzovaného souboru k vybrané revizi spolu s adresářovou stromovou strukturou, ve které je uložen. Předchozí příkaz by musel být spuštěn přesně tolikrát, kolik by obsahoval řádků soubor s potřebnými revizemi. Také by se vytvořil stejný počet souborů obsahující zálohu repozitáře. Po vytvoření všech souborů se zálohou by se musel smazat aktuálně vytvořený repozitář a vzápětí vytvořit zcela nový prázdný repozitář. Do prázdného repozitáře by se pak nahrála záloha z vytvořených souborů. To lze učinit pomocí příkazu svnadmin load < dump.dmp. Samozřejmě by bylo nutné takto zpracovat všechny vytvořené soubory se zálohou. Skript by na závěr smazal všechny vytvořené soubory se zálohou. Celý proces by se aplikoval na všechny existující repozitáře. Proces by bylo možné pouštět periodicky pomocí Cron démona. Implementace těchto skriptů by potom na serveru měla ušetřit značné místo. K řešení posledního nedostatku by jako hlavní nástroj sloužil příkaz svn diff. Pokud bychom nedostatek zobrazování změn mezi dvěma dokumenty měli řešit jako aplikace Google Drive, tedy zobrazovat změny pouze oproti předchozí verzi, pak by generovaný příkaz byl v následujícím tvaru svn diff @@. Parametry a by obsahovaly stejnou hodnotu. Hodnotou by pak byla cesta k verzovanému dokumentu v repozitáři. Důležitým parametrem by pak byly a . První z parametrů by obsahoval číslo revize, která by se vázala vždy k předchozí verzi dokumentu. Druhý parametr by pak obsahoval číslo revize vztažené k verzi, kterou
40
5
DISKUZE A ZHODNOCENÍ
by měl uživatel načtenou přes Správce verzí. Výstup příkazu pro demonstraci je vidět na obrázku 13. Z výstupu by skript zjistil informaci o číslech řádků, na kterých vznikla změna. Skript by také zjistil, o jaké změny se přesně jednalo. Ty jsou ve výstupu označeny jako řádky začínající znakem plus nebo mínus. Informace by zaslal zpět do klienta. Javascript by pak odstraněné změny zobrazil v okně s dokumentem jako přeškrtnutý červeně zbarvený text a naopak přidané změny jako pouze zeleně zbarvený text. Obarvené změny by se daly zrušit z okna Správce verzí a nechat načíst pouze potřebnou verzi. Dodatečné možné postupy sepsané v této kapitole jsou pouze hrubým nástinem, jak by se nedostatky implementovaného řešení daly řešit. Postupy nebyly podrobně analyzovány z hlediska implementace. Je možné, že by v některých případech muselo být použito jiných metod. Nicméně dle mého názoru by s velkou pravděpodobností bylo možné těchto vylepšení dosáhnout.
Obrázek 13: Ukázka výstupu příkazu svn diff
5.4
Zhodnocení
Řešení verzování dokumentů implementované v aplikaci TEXonWeb nedosahuje takových kvalit, jaké umožňují aplikace popsané v kapitole Dostupná řešení. Nicméně je velice těžké konkurovat při programování existujícího řešení společnostem, jako je Microsoft nebo Google. Tyto společnosti zaměstnávají celou řadu zkušených programátorů, kteří se na implementaci jejich řešení podílí. V případě opensource projektu, jako je LibreOffice, neprogramuje vše pouze jeden člověk. Vývoj trvá delší dobu a pracuje na něm ve většině případů skupina zkušených programátorů. Avšak popsané aplikace sloužily spíše jako inspirace pro moji bakalářskou práci, a tedy nebyl záměr vytvářet určitým způsobem lepší řešení. Z toho důvodu je i tak implementované řešení verzování dokumentů úspěchem. Verzování dokumentů v aplikaci TEXonWeb má své nedostatky, ale ty neovlivňují nijak zásadně základní myšlenku přecházení mezi vytvořenými podobami dokumentu. Je tedy možné se vracet k předchozím verzím a tím mít pod kontrolou vývoj svého dokumentu v čase. TEXonWeb je aplikací, která je používána nejen v rámci výuky předmětu Zpracování textu na počítači, ale také studenty, kteří pracují na svých závěrečných pracích. Proto je s každou novou funkcionalitou zařazenou do TEXonWeb zvýšena schop-
5.4
Zhodnocení
41
nost přinést uživatelům lepší pracovní podmínky při vytváření jejich dokumentů. Zlepšení pracovních podmínek uživatelům je možné považovat za určitý ekonomický ukazatel v rámci aplikace TEXonWeb. Důležitá je pak také celá hodnota aplikace, která se zvyšuje vždy s novými funkcemi aplikace. Z toho důvodu přináší funkce verzování dokumentů novou přidanou hodnotu do aplikace.
42
6
6
ZÁVĚR
Závěr
Cílem práce bylo navrhnout a implementovat novou funkcionalitu verzování dokumentů v aplikaci TEXonWeb. Funkcionalita měla umožnit uživateli vytvářet verze a následně k nim přecházet. Také měla uživateli zobrazovat informaci o aktuální verzi dokumentu, která se nahrává do okna pro editaci textu. Technologie pro implementaci funkcionality byly zvoleny jako Javascript, Perl, HTML, CSS a verzovací systém SVN. V práci jsme se seznámili se současným stavem dostupných řešení verzování dokumentů v konkurenčních aplikacích. Následně byla provedena důkladná analýza současného stavu samotné aplikace TEXonWeb. Důkladná analýza umožnila vytvořit návrh řešení, které by bylo implementovatelné v současném prostředí aplikace. Řešení bylo následně implementováno a popsáno. Posledním krokem bylo pak celkové zhodnocení implementovaného řešení. Bylo také poukázáno na výhody a nevýhody, které verzování dokumentů v aplikaci TEXonWeb obnáší. Nebyly opomenuty ani případné způsoby, kterými by se implementované řešení dalo vylepšit. Práce obsahuje popis verzovacího systému SVN, který je hlavní nosnou technologii verzování dokumentů. V práci je také obsažen popis základních principů a způsobů ovládání. Během práce bylo vše mnohokrát konzultováno s Ing. Janem Přichystalem, Ph.D., čímž bylo poskytnuto mnoho užitečných informací, které vedly k úspěšnému dokončení implementace navrženého řešení a celkově i této práce. Implementované řešení splňuje zadaný cíl práce a v aktuální době je nasazeno ve vývojové části aplikace TEXonWeb. Při testování se aplikace jevila jako funkční a nebyly nalezeny žádné závažné chyby. Po úspěšném nasazení SVN na všechny dosavadní uživatelské účty a modifikaci metody pro vytváření nových účtů bude verzování dokumentů přesunuto do ostré verze. Veškeré soubory, které byly modifikované v důsledku implementace verzování dokumentů, jsou uloženy jako příloha v Univerzitním informačním systému Mendelovy univerzity v Brně.
7
7
LITERATURA
43
Literatura
Holzner, Steven. JavaScript profesionálně. Vyd. 1. Brno: Mobil Media, 2003, 1071 s. ISBN 80-865-9340-1. jQuery.com. Write less, do more: JavaScript Librarry [online]. 2012 [cit. 2013-0215]. Dostupné z: www.jquery.com. Přichystal, J. Dokumentace systému TEXonWeb. [online]. 2006. Dostupné z: http://tex.mendelu.cz/navod.pl. Přichystal, J. Nové vlastnosti systému TEXonWeb. In MendelNet 2005 (sborník abstraktů z evropské vědecké konference doktorandů). 1. vyd. Brno: Konvoj, 2005, s. 121–122. ISBN 80-7302-107-2. Přichystal, J. – Rybička, J. Webové rozhraní pro sazbu dokumentů. In OLŠÁK, P. SLT 2004 – sborník semináře o Linuxu a TeXu. 1. vyd. Brno: Konvoj, CSTUG, CZLUG, 2004, s. 73–78. ISBN 80-7302-068-8. Satrapa, P. Perl pro zelenáče. 2. vyd. Praha: Neokortex, 2000. 224 s. ISBN 8086330-02-8. Růžička, M. Použití Subversion pro verzování TEXových dokumentu. [online]. 2009 [cit. 2013-02-15]. Dostupné z: https://www.fi.muni.cz/∼xruzick7/cviceni-pb029/files/svn-pro-tex.pdf. FIT VUT Brno SVN Tutoriál [online]. 2010 [cit. 2013-04-24]. Dostupné z: http://merlin.fit.vutbr.cz/wiki/index.php/SVN_tutoriál. Staníček, P. CSS kaskádové styly : kompletní průvodce. 1. vyd. Praha: Computer Press, 2003. 178 s. ISBN 80-7226-872-4. Lacko, Ľ. Ajax: hotová řešení. Vyd. 1. Překlad Michal Brůha. Brno: Computer Press, 2008, 269 s. ISBN 978-80-251-2108-5. Google Google Disk [online]. 2012 [cit. 2013-04-14]. Dostupné z: https://www.google.com/intl/cs/drive/start/features.html. LibreOffice The Document Foundation [online]. 2007 [cit. 2013-04-15]. Dostupné z: http://www.libreoffice.cz. ��