Od okamžiku, kdy na mě hodili obhospodařování ROOTa, mnou zmítalo trauma, cože úžasné vtipného vydám na Silvestra. Nakonec jsem došla k závěru, že tragické životní zkazky bývají asi nejzábavnější, takže poslyšte příběh našeho Zemljanka Commanderu. Pokud jste již podobnou anabázi také absolvovali, jistě se vám mnohé připomene :).
Na začátek je vhodné poznamenat, že se jedna o reálný program, který je v tuto chvíli v řekněme „slušné beta verzi“, tedy můžete si jej stáhnout, nainstalovat a měl by dělat zhruba to, co se od něj očekává. V následujícím textu si popíšeme jak jeho vlastnosti a funkčnost, tak průběh vývoje.
Na matfyzu existuje (povinný) předmět zvaný Softwarový projekt, jehož účelem je stmelit studenty po skupinkách a přinutit je v rámci této skupinky stvořit větší softwarové dílo (viz též Links). Úspěšní absolventi předmětu pod nátlakem přiznali, že se při tom i něco naučili, nicméně hlavním důsledkem této studijní povinnosti je prodloužení průměrné délky studia informatiky o 1 – 5 let a samozřejmě i ukončení netriviálního počtu studií buď navždy, nebo alespoň do příští recyklace. Připomeňme zde rekordní projekt Trapas3D, který byl obhájen po šesti letech (nominální délka předmětu je jeden rok), přičemž z původního pětičlenného týmu zbyli pouze dva členové, samozřejmě oba již požehnaného věku a po recyklaci.
Nás projekt vznikl v létě 2001, kdy si kamarád Pavel Machek, kernelový vývojář, vzpomněl, že když ještě nemám projekt, jestli nechci schrastit nějaké lidi a přepsat Midnight Commander, jehož jádro se mu moc nelíbilo, když se v něm vrtal. To vypadalo jako vcelku rozumně složitý a přitom záslužný úkol, takže jsem kývla, schrastila lidi :) a poté i oficiálního vedoucího, neboť Pavlovi se do vedení nechtělo.
Začla první fáze, schůzovací. Trvala asi rok :). Jestli vám něco říká Lidová fronta judeje (nebo Judejská lidová fronta?) a jejich pokřik „To si žádá okamžitou diskusi“, tak to je vcelku přesné vystižení tehdejší činnosti týmu, proto tuto fázi přeskočíme a přistoupíme rovnou k závěrům. Ty byly takové, že Commander v obrázkové verzi bude napsán pod GTK2, textová verze bude vyřešena portováním GTK2 na konzoli (to jsem ještě netušila, že to budu dělat já :)), jako VFS (Virtual File System, pro transparentní přístup k souborům na FTP, v archivech apod.) využijeme existující AVFS, kterou přiohneme a asynchronně obalíme (aby dlouhotrvající operace neblokovaly ostatní činnost commanderu) k obrazu svému.
Jak řekli, tak udělali. Trvalo to další rok a půl. V některých fázích to vypadalo, že nikdy nic nenapíšeme, v jiných natolik nabobtnaly předpokládané závislosti, že z toho vznikla hypotetická obrovská příšerná pomalá kráva, která k Midnightovi měla opravdu velmi daleko :). Kamarád PerM si koledoval o ránu do hlavy svými neustálými provokačními dotazy „Už vám to kopíruje?“, a když jsme spolu byli v létě na táboře, já měla už svůj díl projektu hotov a chlapci to svoje děsně rozhrabané a chtěli po mně, abych jim napsala uživatelskou dokumentaci (k neexistujícícmu programu!), aby věděli, co vlastně mají programovat, řekl mi, ať se na to vykašlu, protože to stejně nestihnou, a jim vzkázal, že pečlivě pracuji přesně podle jeho instrukcí :). Dostal mě soubor help.html, jehož jediným obsahem byla dlouhou dobu (a snad stále ještě je) hláška „Já jsem vtip a ne dokumentace ;-)“. Jednomu členovi týmu v práci nevěřili, že dělá projekt s opravdovou živou Johankou. Tentýž člen nás pak asi 14 dní před odevzdáním přísně tajně nainstruoval, že matfyz je děsná drbárna, takže teď už nikde nesmíme říkat, že nám to nechodí :).
Večery trávené na pracovištích, v laborce či doma u mašiny se prodlužovaly, až se z nich stávala rána. No však jste taky určitě někdy potřebovali včas dokončit nějaký program :). Poslední noc před odevzdáním to chlapci v laborce táhli nonstop, v šest ráno sice chtěli zavřít a jít spát, ale nemohli, protože měli službu a v labu seděl a dodělával ještě jiný projekt :).
Největší děs a hrůzu jsem měla z nenainstalovatelnosti. Naštěstí když začala Zemljanka nabývat lidštější podoby, polidštily se i její závislosti, přesto ji však nenainstalujete na příliš starých/stabilních :) systémech. Byla psána přenositelně a otestovali jsme ji nejen na Linuxu, ale i např. na Solarisu, takže s trochou snahy by měla jít rozchodit skoro všude (kde chodí GTK 2.2 a něco málo dalšího). Závislosti bez problémů splníte na Fedoře a na Debianu testing, s drobňoučkou snahou (dva balíčky z Fedory) na RedHatu 9, předpokládám, že i Mandrake a SuSE dostatečně nového data projdou. U starších systémů (RH <=8, Debian stable) budou zřejmě nutné netriviální zásahy (kvůli Gtk 2.2, které potřebujete), nicméně vše můžete také nainstalovat lokálně a tím systém ušetřit.
Spolu se Zemljankou je třeba nainstalovat také AVFS a Cursed GTK (bez druhého uvedeného se můžete obejít, ale pak vám nebude chodit textová verze). Vše je k dispozici ve formě rpm balíčků pro RedHat, debianích balíčků (ty jsou však pouze vyalieněné z rpm, takže si samy neověří závislosti) a .tar.gz balíčků. Stále mám z toho dost trauma, instalace je na Zemljance asi to nejhorší, ale třeba se jí (Zemljanky, ne instalace) jednou někdo chytí, strčí ji do nějaké distribuce a pak už to bude v pohodě :). Každopádně na dostatečně nové distribuci je instalace vcelku bezproblémová, i když trochu delší. Na rozchození na nelinuxovém Unixu si rezervujte tak den, ale mělo by se vám to nakonec povést :).
K přenositelnosti zase jednu historku. Občas dostávám velmi blbé nápady, no a jedním z nich bylo to, že jsem večer před odevzdáním (to byla TA noc) zpacifikovala Mikuláše Patočku, aby to zkusil rozchodit na BSD. Komunikace probíhala zhruba takto:
Mikuláš: Opravte to a to…
Johanka: Proč?
Mikuláš: No to je buga BSD, když to tam neopravíte, tak to na FreeBSD starším roku 1993 a souborech větších nez 30 giga na přestupný rok možná spadne…
S tímhle progressem to samozřejmě Mikuláš přes noc nerozchodil, a přesně v důsledku lemmatu o drbárně se druhý den na besídce informatické sekce (těsně po odevzdání) půlka projektové komise na mou adresu pochichtávala, jestli nám to chodí na BSDčku…
(Pozn.: už chodí :))
Nyní k úžasným vlastnostem. Zemljanka umí vše, co se od řádného commanderu očekává, tedy kopírovat a tak :), jak už jsem psala výše, průrazné asynchronní jádro zabraňuje zablokování (a thready, které jsme v něm využili, jsou zase noční můrou, když to padá a nevíme kde). Ačkoli v době startování si Zemljanka s Mozillou nezadá :), některé operace (vyhledávání v hafu souborů) jsou snad i rychlejší než v Midnightu (nebo minimálně v nějaké fázi vývoje byly :)). Potěšit by vás mělo přívětivé klikaci prostředí, můžete si otevřít libovolné množství panelů, v panelech ještě taby, když kopírujete apod., tak samozřejmě dostanete za výběr všechny ostatní panely. V adresářích se můžete pohybovat jak klasicky (Enter – vlezu), tak stromově – podadresář si rozbalíte v rámci zobrazované stromové struktury (kde však vidíte nejen adresáře, ale i všechny soubory), poté můžete například označit hromádku souborů, každý v jiném adresáři, a něco s nimi společně provést (třeba…kopírovat? :)).
V rámci Zemljanky máte k dispozici i virtuální terminál (je součástí jejího okna, v případě potřeby roztáhnete, poté zase zatáhnete) a příkazovou řádku (která je vlastně jen na ozdobu, protože co do ní napíšete, to dostane terminál a provede), hezkou blbinkou je možnost vkládání názvů souborů z panelů do příkazové řádky skrz Alt + Enter či Ctrl + Enter, přičemž když v panelu změníte adresář, změní se cestička i u dříve vložených názvů souborů na příkazové rádce. Mimochodem implementací virtuálního terminálu jsme vmžiku získali plnohodnotný commander – můžete terminálové okýnko roztáhnout přes celou Zemljanku a pustit si v něm Midnighta :).
Nej PR obrázek – Zemljanka v Zemljance
Velmi progresivní featurou je podpora skriptování v Pythonu. Díky realizovanému propojení Python-C a zpět jsou půlka Zemljanky a všechny konfiguráky naskriptovány. Pokud umíte Python, můžete sami celkem bez potíží potenciál a schopnosti Zemljanky zmnohonásobit (ale ono to možná bude něco jako ten případ, že se svým počtem spermií (čtenářky prominou; zdravím Hanku Skoumalovou a Blanku Nejedlou, nevím, jestli jich máme i víc) jste schopni ztrojnásobit světovou populaci, taky to asi ještě nikdo nezkoušel..). Avšak i pokud Python neumíte (jako třeba já), konfiguráky jsou skoro tak průzračné jako vyčíslitelnost, takže si jistě zcela bez problémů zvládnete třeba přidat do Plug-in menu spouštítko oblíbeného programu.
Vše, co zde popisuji, by teoreticky mělo úplně stejně pěkně (akorát bez obrázků) chodit i v textovém módu. O Cursed GTK už se psalo kdysi ve sklizni, takže tu s tím nebudu znovu machrovat :), jen k chybám. Nějak to chodí, nepadá, nic podstatného tomu nechybí, ale spousta drobností – jak estetických, se kterými nic nenadělám (při psaní vlastního textového rozhraní si člověk může navymýšlet spoustu věcí, ale když je svázaný existující kninovnou, která nikdy nepočítala s tím, že bude portována do textu, je to už horší), tak funkčních, se kterými taky nic nenadělám (chyby či neschopnosti ncurses, neumějí chytat Esc, na některých typech terminálů jsou (menší či větší) chyby v překreslování apod. Bohužel pro Cursed GTK (ani textovou verzi Zemljanky) nevidím moc velkou budoucnost, do GTK nám to nevzali, starat se o to do budoucna nehodlám a můj nejmenovaný advisor se k tomu nehlásí pro jistotu vůbec. Navíc Zemljanka pod Cursed GTK je z principu výrazně pomalejší než Midnight, a když se to třeba přes ssh co chvíli špatně překreslí, nikoho už nezajímá, že si může úderně měnit velikost oken a že nám to vykreslí i gamma křivku. Ach jo, život je těžkej, nezavděčíte se nikomu :)
Na závěr by to chtělo nějaké optimistické provolání, takže, budeme rádi, když nám Zemljanku otestujete, samozřejmě potěší, pokud ji rozchodíte na nějakém exotickém systému, bugreporty vítány, za dostatečně hodnotný patch dostanete lahváče. A hlavně držte palce 9. ledna, kdy je obhajoba :).