Jednou z výhod operačního systému unixového typu je, že umožňuje automatizaci často opakovaných nebo složitých úloh
pomocí skriptů. často se setkáváme se skripty, které administrátoři připravují svým uživatelům ve snaze zjednodušit
jim některé operace. Ovládání takových skriptů se ovšem děje prostřednictvím textové konzole, což pro takové
uživatele není příjemné pracovní prostředí. Existuje ovšem solidní řešení.
Kommander je řešení tohoto problému od vývojářů KDE. Je to směska shellu, skriptovacích jazyků a speciálních znaků
jazyka Kommanderu. Pro běžného administrátora to má tu výhodu, že se prakticky nemusí učit nový jazyk nebo používat
pro něj neznámé grafické toolkity. Nevýhody jsou dvě. První je fakt, že pod pojmem Kommander se skrývají dva různé
jazyky (starší a novější). Druhou nevýhodou je to, že je tento jazyk primitivní a neumožňuje používat pokročilejší
programátorské techniky.
Editor
Pro vývoj slouží prostředí zvané Kommander editor. Jde o upravenou verzi Qt designeru od společnosti Trolltech, takže
ti, kteří s Qt už pracovali, jsou ve výhodě. Ale práce s vývojovým prostředí je vcelku jednoduchá a intuitivní. Jsou
podporovány dva typy projektů, klasická okna (Dialog) a průvodci (s oběma typy jsme se setkali v prázdninovém
dvojčísle, pozn. red.). Jedinou výjimkou je potom způsob, jak přidat k nějakému prvku obslužný kód. K tomu slouží
kontextové menu schované pod pravým tlačítkem myši a příkaz Edit Kommander text...
Prostředí rovněž zdědilo z Qt správce rozložení (layout) a rozpěrky (splitters), takže přestože může jazyk Kommanderu
vypadat křehce (protože takový je), výsledné aplikace si, co do propracovanosti, nezadají s těmi napsanými v lepších
programovacích jazycích a uživatel nepozná žádný rozdíl.
Starý parser
Jedná se o makrojazyk, který textově nahrazuje řetězce za výrazy shellu, jenž je interpretuje. Makra jsou uvozena
znakem @. To se bohužel podepsalo na skutečně podivných vlastnostech jazyka a troufám si říct, že patří k těm
nejhorším na světě. Nicméně v něm byla napsána spousta aplikací, což značí, že se jeho špatné vlastnosti podařilo
lidem obejít.
Jeden příklad za všechny, kterak přistupuje k proměnným. Rozlišují se celkem čtyři typy proměnných a ke každé z nich
se přistupuje odlišným způsobem.
Starý parser poskytuje poměrně nelogicky i vlastní klíčová slova, přičemž bohatě stačí využít možností shellu. Navíc
je implementace @if, @for a @while více než problematická.
@if ( …)
@if ( ... )
@endif
@endif
Takový pokus o zanoření skončí chybovým hlášením Unknow special.
Nový parser
Nový parser přinesl spoustu užitečných prvků do jazyka:
- globální (s prefixem _) a lokální proměnné;
- asociativní pole;
- práce s řetězci;
- podmínky a cykly.
Rovněž se jedná o skutečný parser, takže podmínky a cykly je již možné zanořovat dle libosti. To také znamená, že
nejdůležitějším syntaktickým rozdílem mezi nimi je to, že v novém parseru se nepoužívá @.
@label.setText("Starý parser")
label.setText("Nový parser")
Protože mezi nimi není kompatibilita, ve výchozím stavu je nastaven ten starý. Pokud chceme využívat výhod nového,
musíme na začátek skriptu napsat #!kommander, nebo nastavit globálně pro celý formulář vlastnost useInternalParser na
hodnotu true.
Rovněž byl odstraněn rádobyobjektový přístup k některým funkcím.
@Array -> array_
@File -> file_
@Input -> input_
@File -> file_
@Message -> message_
@String -> str_
Nový parser tudíž odstraňuje většinu nevýhod starého. Jediným problémem může být to, že ve starém parseru bylo možné
pomocí funkcí execBegin() ... execEnd stanovit část kódu, která mohla běžet v jiném skriptovacím jazyce než v shellu.
Tato možnost u nového pochopitelně chybí, protože ten už shell nepoužívá.
Co s tím?
Kommander je docela rozporuplný projekt, na straně jedné fatální chyby v návrhu staré verze jazyka a jeho přílišná
jednoduchost. Na straně druhé propracované vývojové prostředí založené na Qt Designeru od Trolltechu, které pomáhá
vytvořit profesionálně vypadající a fungující aplikace. Jediným nedostatkem, který je společný mladým open-source
projektům, je špatná dokumentace. Pokud vás zaujal, více toho najdete v miniseriálu na serveru abclinuxu.cz.
Jak Kommander pracuje
Kommander je založen na masivním používání technologie DCOP. Jedná se o způsob, jakým lze skriptovat KDE aplikace.
Kommander potom ovládá widgety následujícím způsobem:
@Widget.názevFunkce(Obsah) # se převede na volání
dcop @dcopid KommanderIf názevFunkce Widget Obsah
Díky DCOP není třeba řešit binární kompatibilitu skriptů s KDE a protože jsou volání prováděna binárním kódem, jsou
navíc poměrně rychlá.
Technologie DCOP
DCOP (Desktop COmmunications Protocol) je způsob
meziprocesové komunikace, respektive vzdáleného volání procedur (RPC/IPC). KDE aplikaci obvykle poskytuje své funkce
prostřednictvím definovaného rozhraní a klient je může používat. Díky rozhraní příkazové řádky umožňuje do jisté míry
skriptovat i grafické aplikace. Například je možné přiřadit tlačítkům na dálkovém ovladači jednotlivé akce přehrávače
a používat jej způsobem, který jeho tvůrci nepředpokládali, ani nenaprogramovali. Je přímou inspirací pro DBUS (který
je obecnější), který jej také podle plánu v připravovaných KDE4 nahradí. Je součástí snah o sjednocení unixových
desktopových prostředí KDE a GNOME.
Starý a nový parser Kommanderu
Přesto, že je Kommander technologie několik málo let stará, došlo na jejím začátku k velmi nešťastným designovým
rozhodnutím. Ty nakonec vyústily v přepsání původního jazyka Kommanderu, takže dnes musíme rozlišovat, zda používáme
starý, nebo nový parser.