Opravdoví Programátoři neužívají Pascal
(Tento dopis redakci vyšel v časopise Datamation, ročník 29, číslo 4, červenec 1983. Autorem je Ed Post, Tektronix, Wilsonville, Oregon, USA)
Za starých dobrých časů - ve zlaté éře počítačů - bylo snadné odlišit muže od chlapců (v literatuře označovaných "Opravdoví Muži" a "Pojídači Koláčů"). Opravdoví Muži byli ti, kteří skutečně rozuměli programování počítačů. Pojídači Koláčů byli ti, co tomu nerozuměli. Opravdový počítačový programátor říkal věci jako "DO 10 I=1,10" a "ABEND" (vyslovoval to velkými písmeny, abyste rozuměli) a zbytek světa říkal věci jako "počítače jsou pro mne příliš komplikované" a nebo "nemohu se s počítačem sžít, je tak neosobní". (V předchozí práci [1] jest ukázáno, že Opravdoví Muži nejsou vázáni na nic, nebojí se být neosobní.)
Ovšem, jak je zvykem, časy se mění. Musíme se smířit se světem, v němž může získat počítač milá stará dáma ve své mikrovlnné troubě a dvanáctiletý chlapec porazí Opravdového Muže v hře "Water Playing Asteroids" nebo "Pac-Man" a osobní počítač si může koupit každý a také mu může porozumět. Opravdoví Programátoři jsou ohroženi vyhynutím, existuje nebezpečí, že budou nahrazeni vysokoškolskými studenty s TRASH-80.
Je zřejmé, že je potřeba ukázat rozdíl mezi typickým, vysokoškolsky vzdělaným hráčem Pac-Mana a Opravdovým Programátorem. Ukáže-li se tento rozdíl dostatečně jasně, dá se dětem šance, aby aspirovaly být podobny svým otcům. Pomůže to rovněž zaměstnavatelům Opravdových Programátorů tím, že jim to ozřejmí chybu, které se dopouštějí, když nahrazují Opravdové Programátory ve svém týmu mladými hráči her (a šetří tím platy).
Jazyky
Nejsnadnější způsob, jak zjistit, kdo je v davu Opravdový Programátor, spočívá ve zjištění, jaký programovací jazyk používá. Používá Fortran. Pojídači koláčů používají Pascal. Niklaus Wirth, tvůrce Pascalu, při jedné své přednášce byl dotázán, jak vyslovovat jeho jméno. Odpověděl: "Můžete mě volat jménem (vyslovte ‚Virt') a nebo hodnotou (Worth)". Z této poznámky je zřejmé, že N. Wirth je pojídač koláčů. Opravdový Programátor uznává jediný mechanismus předávání parametrů "voláním hodnotou při návratu" tak, jak je to implementováno v kompilátorech IBM/370 Fortran G a H. Opravdový Programátor nepotřebuje ke své práci všechny tyto abstraktní pojmy, je úplně šťastný, má-li děrovač štítků, kompilátor Fortran IV a pivo.
* Opravdový Programátor zpracovává seznamy ve Fortranu.
* Opravdový Programátor pracuje s texty ve Fortranu.
* Opravdový Programátor řeší zpracování hromadných dat (když už to dělá) ve Fortranu.
* Opravdový Programátor řeší umělou inteligenci ve Fortranu.
Nejde-li něco ve Fortranu, napiš to v assembleru. Nejde-li to v assembleru, nestojí to za námahu.
Akademici v počítačových vědách v posledních letech tvoří vyjetou kolej "strukturovaného programování". Tvrdí, že programům lze snáze porozumět, když se při jejich psaní používají některé speciální konstrukce a postupy. Ne všichni se ovšem shodnou na tom, které konstrukce; a příklady, které používají, aby ukázali svůj konkrétní pohled na věc, se vždycky vejdou na jedinou stránku časopisu - jsou nepřesvědčivé. Když jsem opustil školu, myslel jsem si, že jsem nejlepším programátorem na světě. Uměl jsem napsat neporazitelný tic-tac-toe program, používat pět různých programovacích jazyků a psát tisíciřádkové programy, které pracovaly. (Opravdu!) Pak jsem přišel do Opravdového Světa. Mým prvním úkolem v Opravdovém Světě bylo přečíst si program ve Fortranu, který měl 200 000 řádků, porozumět mu a pak ho dvakrát urychlit. Každý Opravdový Programátor vám řekne, že veškeré Strukturované Kódování v celém světě vám v takovém případě nepomůže - chce to talent. Neboť:
* Opravdovým Programátorům nevadí používat GOTO.
* Opravdový Programátor může napsat cyklus DO na pět stran a nesplete se.
* Opravdový Programátor miluje aritmetické IF, dělá program zajímavější.
* Opravdový Programátor píše samomodifikující se programy; zvláště v tom případě, když může ušetřit 20 nanosekund v nejvnitřnějším cyklu.
* Opravdový Programátor nepotřebuje poznámky - vlastní kód je zřejmý.
* Poněvadž Fortran neobsahuje strukturované IF, REPEAT...UNTIL, ani CASE, Opravdový Programátor nezná starosti s jejich použitím. Kromě toho, mohou být v případě potřeby napodobeny pomocí GOTO s proměnným cílem.
Abstraktní datové typy, struktury, ukazatele, seznamy, řetězce - to jsou pojmy v jistých kruzích poměrně populární. Wirth (výše zmíněný Pojídač Koláčů) skutečně napsal celou knihu [2] o tom, jak psát programy založené na datových strukturách a ne jinak. Jak ví každý Opravdový Programátor, jedinou užitečnou datovou strukturou je pole. Řetězce, seznamy, struktury, množiny - to vše jsou zvláštní případy polí a lze s nimi tak zacházet a není nutné váš programovací jazyk s nimi komplikovat. Nejhorší věc na představě datových typů je, že je nutno je deklarovat, zatímco jazyky pro Opravdové Programování, jak všichni známe, mají implicitní určování typu založené na prvním znaku šestiznakového jména proměnné.
Operační systémy
Jaký typ operačního systému používá Opravdový Programátor? CP/M? Bože chraň - CP/M je přes všechny jeho klady hračičkový operační systém. CP/M mohou pochopit dokonce i postarší dámy a absolventi základní školy.
Unix je ovšem poněkud komplikovanější - typický unixácký pisálek si nikdy nevzpomene, jak se nazývá příkaz PRINT tento týden - ale když se mu podíváte na zoubek, pak je Unix pouze glorifikovanou televizní hrou. Lidé nepracují na unixových systémech seriózně: posílají si vtipy kolem světa pomocí sítě UUCP a píší dobrodružné hry a výzkumné zprávy.
Ne, váš Opravdový Programátor používá OS/370. Dobrý programátor ve svém manuálu JCL nalezne popis chyby IJK305I a porozumí mu. Velký programátor umí psát JCL programy, aniž by se podíval do manuálu. Opravdu vynikající programátor umí najít chybu v 6 megabajtech výpisu operační paměti, a to aniž by použil hexadecimální kalkulátor. (Viděl jsem to skutečně dělat.)
OS je věru znamenitý operační systém. Lze na něm ztratit dny práce kvůli jedné chybějící mezeře, což podněcuje programátorský tým k ostražitosti. Nejlepší způsob styku se systémem je přes děrovač štítků. Někteří lidé tvrdí, že existuje víceúlohový systém, který běží na OS/370, ale po pečlivém studiu jsem dospěl k závěru, že se tito lidé mýlí.
Nástroje
Jaký druh nástrojů používá Opravdový Programátor? Teoreticky platí, že Opravdový Programátor může počítači zadávat svůj program tlačítky na předním panelu počítače. V dávné minulosti, kdy počítače měly přední panel, se to tak skutečně občas dělalo. Váš typický Opravdový Programátor znal celý zavaděč v hexadecimálním vyjádření zpaměti a namačkal jej, kdykoli jej váš program porušil (připomeňme si, paměť byla paměť - při vypnutí nezapomínala. Dnes paměť buďto zapomene věci, které jste zapomenout nechtěli, nebo si pamatuje věci dlouho poté, kdy by bylo lépe na ně zapomenout). Legenda vypravuje, že Seymore Cray, tvůrce superpočítače Cray I a většiny počítačů firmy Control Data, skutečně namačkal první operační systém do počítače CDC 7600 při jeho prvním zapnutí do sítě přes jeho přední panel, a to zpaměti. Nutno říci, že Seymore byl Opravdový Programátor.
Jedním z mých favoritů na Opravdového Programátora byl systémový programátor od Texas Instruments. Jednoho dne ho zavolal telefonem uživatel, jehož systém se zboural uprostřed ukládání nějaké důležité úlohy. Jim byl schopný opravit poruchu po telefonu, donutit uživatele, aby si namačkal diskové vstupní/výstupní operace z panelu, opravil systémové tabulky v hexadecimálním vyjádření a aby mu přečetl registry zpět po telefonu. Poučení z této příhody: zatímco Opravdový Programátor obvykle zahrnuje "do své opravářské brašny" děrovač štítků a tiskárnu, téhož může dosáhnout telefonem a z předního panelu.
V některých společnostech už editování textů nespočívá v tom, že desítky inženýrů stojí frontu na děrovač typu 029. Skutečně, v budově, kde pracují, není jediný děrovač štítků. Opravdový Programátor v této situaci musí vykonávat svoji práci programem "textový editor". Většina systémů nabízí celou řadu textových editorů, Opravdový Programátor si musí pečlivě vybrat ten editor, který nejlépe odpovídá jeho životnímu stylu. Mnozí lidé věří, že nejlepší textové editory na světě byly napsány ve výzkumném středisku firmy Xerox v Palu Altu pro jejich počítače Alto a Dorado [3]. Bohužel, žádný Opravdový Programátor nikdy nepoužije počítač, jehož operační systém se jmenuje Všední hovor a určitě nebude hovořit k počítači myší.
Některé myšlenky použité v editorech firmy Xerox byly zahrnuty do editorů běžících pod mnohem vhodněji pojmenovanými operačními systémy - příkladem mohou být EMACS a VI. Problém s těmito editory spočívá v tom, že Opravdoví Programátoři považují vlastnost "co vidíš, to dostaneš" za stejně špatnou u textových editorů jako u žen. Ne, Opravdový Programátor chce editor typu "o co sis řekl, to dostaneš" - editor komplikovaný, tajemný, mocný, neodpouštějící, nebezpečný. Přesněji řečeno, TECO.
Zjistilo se, že posloupnost příkazů TECO připomíná mnohem více poruchy na komunikační lince než čitelný text. Jedna ze zábavnějších her, které lze hrát s editorem TECO, spočívá v tom, že zadáte svoje jméno jako příkaz a zkusíte uhodnout, co to udělá. Zatímco budete rozprávět s TECO o chybě vstupních dat, váš program se pravděpodobně zruší a nebo - což je horší - se do již odladěného podprogramu zavlečou nenápadné a tajemné chyby.
Z tohoto důvodu Opravdoví Programátoři nejsou ochotni editovat program, jenž už téměř chodí. Raději udělají záplatu přímo do binárního kódu programu na disku a to pomocí čarokrásného programu zvaného SUPERZAP (nebo pomocí jeho ekvivalentu na strojích jiných, než jsou stroje IBM). Ten pracuje tak dobře, že mnohé činné programy systému IBM nejsou v žádném vztahu ke svým původním fortranovským textům. Mnohdy není už původní zdrojový text dostupný vůbec. Když vyvstane potřeba upravit takový program, žádný manažer či šéf nebude ani na chvíli uvažovat, že by na tuto práci poslal někoho jiného než Opravdového Programátora - kterýkoliv strukturovaný programátor typu Pojídač Koláčů by ani nevěděl, kde má začít.
Co Opravdový Programátor nepoužívá?
* Fortranovské preprocesory typu MORTRAN či RATFOR. Kuchařské umění programovat - to je něco ohromného pro dělání koláčů. Viz poznámky o strukturovaném programování výše.
* Ladicí program na úrovni symbolického jazyka. Opravdový Programátor umí číst výpisy operační paměti.
* Kompilátor, který kontroluje překročení mezí polí. Takové kompilátory dusí tvořivost, znemožňují většinu zajímavých použití příkazu EQUIVALENCE a znemožňují dělat změny do operačního systému zadáním záporného indexu. A co je nejhorší, kontrola překročení mezí snižuje efektivnost.
* Systémy na správu zdrojových programů. Opravdový Programátor má svůj program zamčený na děrných štítcích, což mu znemožňuje ponechat svůj program nestřežený [5].
Opravdový programátor při práci
Kde typický Opravdový Programátor pracuje? Jaký typ programu je hoden úsilí tak talentovaného jedince? Můžete si být jisti, že žádný Opravdový Programátor neumře při psaní programu na zpracování dat v Cobolu nebo při třídění adresáře předplatitelů pro časopis People. Opravdový Programátor si žádá úkolu světoborné důležitosti (doslova!)
* Opravdový Programátor pracuje pro Národní laboratoř v Los Alamos, kde píše programy simulující atomové bomby na superpočítačích Cray I.
* Opravdový Programátor pracuje pro Národní bezpečnostní úřad a dekóduje odposlouchaný rádiový provoz Sovětů.
* Bylo důležité, aby tisíce Opravdových Programátorů pracovaly pro NASA, aby se Američané dostali na Měsíc a zpět dříve než Rusové.
* Počítače v raketoplánu byly programovány Opravdovými Programátory.
* Opravdoví Programátoři pracují pro Boeing a navrhují operační systém pro křižující střely.
Někteří z nejděsivějších ze všech Opravdových Programátorů pracují v Kalifornii v Jet Propulsion Laboratory. Mnozí z nich znají celý operační systém kosmických lodí Pioneer a Voyager zpaměti. S kombinací ohromných pozemních fortranovských programů a malých assemblerovských programů v kosmické lodi jsou schopni vykonat neuvěřitelné navigační a improvizační skutky - strefit se do desetikilometrového okna v případě Saturnu, a to po šesti letech pobytu ve vesmíru, opravit nebo obejít poškozené čidlo, vysílačku a baterie. Říká se, že jeden Opravdový Programátor zorganizoval v lodi Voyager doplnění programu pro rozpoznávání obrazu, a to do několika stovek nevyužitých slabik paměti. Doplněk programu nalezl, určil umístění a vyfotografoval nový měsíc Jupitera.
Současný plán kosmické lodi Galileo má využít gravitace, aby pomohla upravit dráhu lodi kolem Marsu cestou k Jupiteru. Tato dráha vede 80±3 km od povrchu Marsu. Nikdo nebude důvěřovat programu psanému v Pascalu (nebo Pascalovskému programátoru) tak, aby mu svěřil navigaci v těchto tolerancích.
Můžeme říci, že mnozí ze světových Opravdových Programátorů pracují pro vládu Spojených států - především pro ministerstvo obrany. Tak to má být. V poslední době se ovšem formuje na obzoru Opravdových Programátorů černý mrak. Vypadá to tak, že někteří vysoce postavení pojídači koláčů v ministerstvu obrany rozhodli, že všechny obranné programy budou psány ve stejném velkolepém unifikovaném jazyku zvaném "Ada" ((c), DoD). Prozatím se zdá, že Ada byla orientována tak, aby se stala jazykem, který by bojoval proti poučkám Opravdového Programování - jazykem se strukturou, jazykem s datovými typy, s přísnou typovou kontrolou a se středníky. Krátce, jazyk určený k ochromení tvořivosti typického Opravdového Programátora. Naštěstí jazyk přijatý ministerstvem obrany má dost zajímavých vlastností, které ho nečiní nebezpečným - je neuvěřitelně složitý, zahrnuje metody, jak si vyměňovat zprávy s operačním systémem a jak přeuspořádat paměť a Edsger Dijkstra ho nemiluje [6]. (Dijkstra, jsem si jistý, že ho znáte, je autorem "GOTOs Considered Harmful") - základní práce programovací metodologie opěvované jak Pascalovskými Programátory, tak Pojídači Koláčů). Mimo to, Opravdový Programátor umí psát fortranovské programy v kterémkoliv jazyce.
Opravdový Programátor může přistoupit ke kompromisům ve svých principech a může pracovat i na něčem poněkud méně triviálním, než je zničení života ve formě, jak ho známe. To za předpokladu, že to přinese dost peněz. Existuje např. několik Opravdových Programátorů tvořících televizní hry u firmy Atari. (Ale nehrají je, Opravdový Programátor v každém okamžiku ví, jak nad strojem zvítězit - to není žádný problém.) Každý, kdo pracuje u firmy LucasFilm, je Opravdový Programátor. (Bylo by ztřeštěné odmítnout peníze od padesáti milionů fanoušků filmu Star Trek.) Množství Opravdových Programátorů pracujících v počítačové grafice je poněkud pod normou; to především proto, že dosud nikdo nenalezl pro počítačovou grafiku vážné použití. Na druhé straně, veškerá počítačová grafika je psaná ve Fortranu, takže existuje množství lidí, kteří raději dělají grafiku, než aby psali programy v Cobolu.
Opravdový Programátor při hře
Obecně platí, že Opravdový Programátor si hraje stejným způsobem, jako pracuje - to je s počítačem. Stále se diví, že ho jeho zaměstnavatel skutečně platí za to, co by stejně dělal pro zábavu (i když pečlivě dbá na to, aby tento názor nevyjadřoval moc nahlas). Opravdový Programátor občas opustí svou kancelář, aby si došel na čerstvý vzduch a na pivo či dvě. Mezi jisté tipy, jak rozpoznat Opravdového Programátora mimo výpočetní středisko, patří:
* Na večírku Opravdoví Programátoři v koutku hovoří o bezpečnosti operačních systémů a tom, jak ji obejít.
* Při fotbalu Opravdový Programátor porovnává hru proti své simulaci natištěné na 11 až 14 stranách skládaného papíru.
* Na pláži kreslí Opravdový Programátor do písku vývojové diagramy.
* Na pohřbu je Opravdový Programátor ten, kdo říká: "Ubohý Jiří. A ten třídicí program mu těsně před tím, než dostal infarkt, už skoro chodil."
* V obchodě Opravdový Programátor trvá na tom, že si na pokladně namačká cenu konzervy sám. Nikdy nevěří, že by děrovačka něco vyděrovala napoprvé správně.
Přirozený domov Opravdového Programátora
V jakém prostředí Opravdový Programátor nejlépe funguje? Pro šéfa Opravdových Programátorů je to velmi důležitá otázka. Když uvážíme, kolik peněz stojí udržení jednoho jedince v týmu, je snazší dát ho (nebo ji) do prostředí, kde může dělat svoji práci pohodlně.
Typický Opravdový Programátor žije u terminálu. Mezi to, co obklopuje tento terminál, patří:
* Výpisy všech programů, na kterých Opravdový Programátor kdy dělal, nakupené v přibližně chronologickém pořadí na každém volném místě podlahy kanveláře.
* Několik téměř či úplně plných šálků studené kávy, občas v této kávě plave špaček nedokouřené cigarety. Někdy takový šálek obsahuje i slupky z pomeranče.
* Pokud není velmi dobrým programátorem, pak zde budou výtisky manuálů JCL a Principů operací otevřené na některém zajímavém místě.
* Na stěně visí kalendář na rok 1969 tištěný řádkovou tiskárnou s obrázkem Snoopyho.
* Po koberci jsou poházeny obaly od másla a plněných sýrových tyčinek (takových, které se nechají zvětrat a vyschnout ještě v obchodě, aby se už nemohly více pokazit v automatu).
* Na stole leží šablona na kreslení vývojových diagramů. Tu zde nechal předchozí obyvatel kanceláře. (Opravdoví Programátoři píší programy, ne dokumentaci. To nechávají na lidech od údržby.)
Opravdový Programátor je schopen pod nátlakem ve stresu pracovat 30, 40 i 50 hodin v kuse. Je fakt, že tento způsob práce preferuje. Dlouhá doba odpovědi Opravdového Programátora neobtěžuje, dává mu šanci, aby si mezi kompilacemi zdřímnul. Není-li vyvinut na Opravdového Programátora dostatečný tlak, pak má snahu komplikovat věci tím, že pracuje na stále stejné, malé, ale zajímavé části problému prvních devět týdnů a zbytek pak dodělá za týden. To nezpůsobuje peklo pouze jeho šéfovi, který zoufá nad tím, že se projekt nedokončí, ale vytváří to i vhodnou omluvu, proč se nedělá dokumentace. Obecně platí:
* Žádný Opravdový Programátor nepracuje od devíti do pěti (tedy ve dne).
* Opravdoví Programátoři nenosí kravaty.
* Opravdoví Programátoři nenosí boty s podpatkem.
* Opravdoví Programátoři přicházejí do práce na oběd.
* Opravdový Programátor může, ale nemusí znát jméno své ženy. Zná ovšem zpaměti celou kódovou tabulku ASCII či EBCDIC.
* Opravdový Programátor neumí vařit. Obchody s potravinami nejsou otevřeny ráno ve tři hodiny.
Budoucnost
Jaká je budoucnost? Opravdovým Programátorům ovšem působí určité obavy, že nová generace programátorů není vychovávána se stejným názorem na život jako jejich starší kolegové. Mnozí z nich už ani neviděli přední panel počítače. Současní absolventi středních škol neumějí řešit aritmetické operace v šestnáctkové soustavě bez vhodné kalkulačky. Současní absolventi vysokých škol jsou měkcí, jsou chráněni před programátorskou realitou ladicími systémy na úrovni zdrojového jazyka, editory, které počítají závorky, a uživatelsky příjemnými operačními systémy. A co je nejhorší, mnozí z domnělých počítačových vědců dělají vše pro to, aby bylo možné absolvovat vysokou školu bez znalosti Fortranu. Jsme určeni k tomu, abychom se stali oborem unixáckých pisálků a pascalovských programátorů?
Na základě svých zkušeností mohu říci, že budoucnost Opravdových Programátorů je světlá. Ani OS/370, ani Fortran neprokazují žádné znamení ústupu, a to navzdory veškerému úsilí pascalovských programátorů na celém světě. Ztroskotaly i mnohé záludné triky, jako je přidání strukturovaných řídicích konstrukcí do Fortranu. Samozřejmě, mnozí výrobci počítačů přicházejí s kompilátorem Fortranu 77, ale každý takový kompilátor má způsob, jak přeměnit sama sebe zpět na kompilátor Fortranu 66 (zadáním příkazu na štítku) - a kompilovat cyklus DO tak, jak Bůh mínil, že se to má dělat.
Unix už dále nemůže být tak nedobrý k Opravdovým Programátorům, jako byl. Poslední verze Unixu je pro Opravdové Programátory z hlediska operačního systému vysoce cenná - nabízí dvě různá a vzájemně nekompatibilní uživatelská rozhraní, tajemný a komplikovaný ovladač dálnopisu a virtuální paměť. Když pomineme skutečnost, že Unix je "strukturovaný", programy v C mohou Opravdoví Programátoři ocenit: žádná kontrola typů, jména mohou mít 7 (10? 8?) znaků a přidaný užitek datového typu ukazatel je na vyhození - podobně jako mít na jednom místě nejlepší části jazyka Fortran a assembleru (a to nemluvím o některých z tvořivějších způsobů použití #DEFINE).
Ne, budoucnost není tak špatná. Proč v posledních několika letech dokonce i populární tisk komentuje skvělou novou úrodu počítačových páprdů a pisálků vycházejících z míst jako je Stanford nebo MIT ([7] a [8]) do Opravdového Světa? Ze všech důkazů plyne, že duch Opravdového Programování žije dál v těchto mladých mužích a ženách. Pokud existují špatně definované cíle, bizarní chyby a nereálné plány, jsou zde Opravdoví Programátoři, ochotní přiskočit a Vyřešit Ten Problém, dokumentaci nechají na později. Ať žije Fortran!
Literatura
[1] Feirstein, B., "Real Men don't Eat Quiche", New York, Pocket Books, 1982. 
[2] Wirth, N., "Algorithms + Data Structures = Programs", Prentice Hall, 1976. 
[3] Ilson, R., "Recent Research in Text Processing", IEEE Trans. Prof. Commun., Vol. PC-23, No. 4, Dec. 4, 1980. 
[4] Finseth, C., "Theory and Practice of Text Editors - or - a Cookbook for an EMACS", B.S. Thesis, MIT/LCS/TM-165, Massachusetts Institute of Technology, May 1980. 
[5] Weinberg, G., "The Psychology of Computer Programming", New York, Van Nostrand Reinhold, 1971, p. 110. 
[6] Dijkstra, E., "On the GREEN language submitted to the DoD", Sigplan notices, Vol. 3, No. 10, Oct 1978. 
[7] Rose, Frank, "Joy of Hacking", Science 82, Vol. 3, No. 9, Nov 82, pp. 58-66. 
[8] "The Hacker Papers", Psychology Today, August 1980. 
Poděkování
Rád bych poděkoval Janovi E., Davovi S., Richovi G., Richovi E. za jejich pomoc ve vystižení rysů Opravdového Programátora, Heather B. za ilustraci, Kathy E., že to vydržela, a atd!avsdS:mark za počáteční inspiraci.
