default-pic

DSSH evolúcia:  Od Groovy k Beanshell

Náš najväčší a asi najznámejší open-source projekt dostal nedávno doslova nový dych. Pre tých, ktorí nevedia, je to skriptovateľný SSH klient so zvýšenou bezpečnosťou, auditovateľnosťou a prevažne flexibilitou. Spôsob prihlasovania a autentifikačné údaje je možné skriptovať a takmer neobmedzene konfigurovať. Umožňuje nám rýchlo sa prihlasovať na jednotlivé servery zákazníkov – bezpečne, ľudia nemusia prichádzať do styku s heslami, ktoré sú bezpečne uložené (mimo clipboardov a zvedavých očí).

Celá aplikácia je napísaná v Jave a teší nás, že okrem nášho interného použitia ju používajú už aj iné firmy. Prednedávnom sme sa pokúsili čosi spraviť s časom spustenia. V Jave je spúšťanie priamo úmerné komplexnosti tried, ktoré je potrebné dekomprimovať (z jar súborov), načítať a vykonať. Jednoducho povedané – čím menšia aplikácia, tým rýchlejšie sa spustí. Prvý tip na zrýchlenie: skúsiť novú verziu Groovy – predpokladáme, že autori Groovy robili nejaké optimalizácie, aby vykonávanie skriptov bolo rýchlejšie, bol nesprávny. Po upgrade na aktuálnu verziu Groovy bola aplikácia cca 2x pomalšia.

Rozhodli sme sa preto skúsiť vymeniť Groovy za jednoduchší jazyk, ktorý nemá až toľko tried a spúšťa sa rýchlejšie. Táto verzia bola oproti pôvodnej verzii štyrikrát menšia a spúšťanie cca štyrikrát rýchlejšie.

Prepísanie skriptov je jednoduché, BeanShell sa od Groovy odlišuje len v dvoch základných veciach:

V Groovy má operátor “==” rovnaký význam ako zavolanie metódy equals. Je teda možné porovnávať dva reťazce (host == “host.in.customer.sk”). V BeanShelli je nutné použiť Java syntax (host.equals(“host.in.customer.sk”)). Myslím si, že zmenenie sémantiky bolo v Groovy trochu nešťastné a preto túto zmenu skôr vítam (aj keď kód bude asi vyzerať kozmeticky minimálne zložitejšie). V Groovy je vbudované matchovanie regulérnych výrazov (pomocou operátora “=~”). Na toto sme si v BeanShelli museli naprogramovať vlastnú funkciu. Groovy aj BeanShell majú tú vlastnosť, že ak programátor píše Java kód, mal by to byť aj skompilovateľný a funkčný Groovy a BeanShell kód. Vzhľadom na to, že skript sa často nemení a je relatívne jednoduchý, vítame skôr zvýšenie rýchlosti na úkor drobného zníženia prehľadnosti skriptov.

Dovidenia dssh.groovy, nech žije dssh.bsh!

Podobné blogy