Linux E X P R E S

Facebook

Kommander – skripty pro normální lidi

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í.


Obrázek:Prostředí editoru Kommander

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.

Obrázek: Místo pro psaní kódu Kommanderu

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.

  • Proměnné prostředí - přístup k nim se realizuje pomocí krkolomného zápisu @exec(echo $FOO). Nově lze napsat i @env(FOO)
  • Proměnné shellu - protože kód vesměs v shellu běží, stačí napsat $FOO
  • Globální proměnné Kommanderu - přístup realizují funkce @setGlobal(foo) a @global(foo)
  • Proměnné v cyklech - speciální cykly v Kommanderu mají i svoje speciální proměnné
    @for(i,1,5,1)
            @Message.info(@i)
    @endif
    

Obrázek:Prohlížeč funkcí částečně nahrazující chybějící dokumentaci

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á.

Obrázek: Typ nového projektu

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.

Diskuze (0) Nahoru