JLABS

VaxNt/ProDB.PGuide.Koncepce

Programátorská příručka.Koncepce jádra VaxNt

Bullet VaxNt je interpretační systém určený k rychlé výstavbě aplikací. Svým způsobem funguje jádro VaxNt (v prostředí Windows je to program VaxNt.Exe) jako svérázný hardware typu VLIW. Ovládá a programuje se pak jazykem, ve kterém jsou základní konstrukty jako úplně elementární (aritmetika) tak i velmi netriviální (snímání formulářů, sql rozhraní na databázi apod.).Důležitým faktem je to, že "hardware" i "software" VaxNt vznikaly paralelně, a tak se mohly postupně podělit o různé obraty tak, jak to bylo pro snadnost používání vhodné. navíc do "hardware" VaxNt se plynule zařazují tu a tam další užitečné konstrukty jako vnitřní funkce. Celek funguje vlastně tak, že VaxNt.Exe nabízí řadu vnitřních funkcí "instrukcí", které je možno volat z prostředí skriptovacího jazyka a k tomu je vybaven běžným aparátem pro řízení běhu skriptů. Tedy rozhodovací příkazy, volání procedur atd.

Bullet Valstní jádro je vybaveno několika funkcemi, které se vyskytují typicky ve všech aplikacích bez ohledu na jejich charakter. Je tedy lhostejné, zda bude vytvářena aplikace technologická, medicínská nebo finanční. Mezi tyto funkce patří výběr a prohlížení seznamů dat (databázových tabulek, výsledků sql dotazů, textů, dokumentů, ...), snímání dat ve formulářích (na naší terminologii jsou to wizardy), ukládání do databázových tabulek, sestavování grafických výstupů apod.

Bullet Hlavní myšlenkou VaxNt je úplná abstrakce vůči operačnímu prostředí. Funguje tedy zcela transparentně s jakoukoli databází, její strukturu se dozvídá až v okamžiku startu. Důsledně všechny skutečnosti rozhodné pro běh aplikace jsou soustředěny do konfiguračních souborů a v programu samotném se nikde nevyskytují žádná konkrétní jména ani databázových tabulek a ani položek. Program funguje tedy zcela abstraktně a zcele běžně se identický VaxNt.Exe používá na jednom počítači pro diametrálně odlišné úlohy - liší se pouze obsahem konfiguračních souborů. Konfigurační soubory budou ještě detailněji popsány dále. Jedná se o soubory, ve kterých se jádru VaxNt jednoduchým způsobem sděluje s jakou databázi bude dělat, jaké jsou v ní tabulky, jaké položky v nich, s jakými formuláři bude pracovat, jaké jsou předem definované pohledy do databáze i jaké existují pracovní scénáře. Konfigurační soubory jsou textové a upravovat je může snadno i neprogramátor, přičemž může docílit i velmi zásadních změn v chování systému.

Bullet Zásadní cíle VaxNt jsou dva. Získat rychle konfigurovatelnou a na dálku spravovanou aplikaci a omezit "padavost" aplikace na minimum. Druhého cíle se dosahuje tím, že vlastní Exe soubor se mění jenom zřídka a je tedy dostatečně odladěn a prost chyb, které by se do něj zákonitě vnášely běžnými programátorskými činnostmi. Krom toho platí, že VaxNt se celkem snadno vyrovná i s nekonzistencí popisů - databázové tabulky mohou nakonec vypadat i trochu jinak, než se popisují, položky ve forjulářích nemusjí odpovídat existujícím objektům v databázi. VaxNt si s těmito rysy aplikací "in statu nascendi" snadno poradí a tudíž je aplikace od samého počátku vývoje zcela funkční a provozu schopná. Nekonzistence mezi definicí databáze a pracovními scénáři se mohou dořešit již za běhu.

Bullet Jazyk skriptů připomíná určitý assembler, kde ovšem vedle banálních instrukcí existují i instrukce mimořádně účinné. Skripty je možno používat i v předkompilované podobě jako bináry, ale typicky se to nepoužívá. Pracovní scénáře aplikací psaných ve VaxNt jsou typicky interaktivní a ev. zdržení při interpretaci je nepodstatné. Navíc jsou vnitřní funkce VaxNt dosti silné a skripty tedy volají binární operace z vnitřku VaxNt jako z knihovny, a tam jsou tyto již naprogramovány efektivně bez interpretace. Interpretace je velmi důsledná a opírá se o textovou substituci. V okamžiku startu skriptu je jeho text řádek po řádku načten do paměti a očištěn od poznámek a jiného balastu. Interpretace postupuje řádek po řádku a jak operační kód tak i argumenty jsou podle pravidel podrobeny substituci velmi podobné, jako je dolarová notace v shellu unixu. Analogií environmentu jsou všechny proměnné skriptu se svojí aktuální hodnotou a k tomu i globálně existující proměnné - kupříkladu "Today" apod. Tímto způsobem je možno dosáhnout velmi silných efektů, ale znamená to na syntaktické úrovni nutnost řádkového "assemblerového" formátu. Každý příkaz je de-facto jeden řádek textu, ale jeho konkrétní obsah je znám až v okamžiku, kdy se interpretace na něj dostane. Řídící konstrukty typu if-then-else jsou tomu podřízeny. V rámci několika řádků by totiž neexistoval vůbec způsob, jak rozhodnout který "if" patří ke kterému "then". Prakticky to ale neznamená žádné nepohodlí, protože skripty zřídka kdy jsou delsí než jedna obrazovka textu, a tak je orientace v nich snadná.

Bullet Jazyk VaxNt se snaží potlačit explicitní iterace (cykly) kdekoli to jenom trochu jde vnitřními funkcemi. Tím se jednak dosahuje vyšší rychlosti a dále se zjednodušuje notace. Je tedy možno jedním příkazem sestrojit seznam databázových klíčů vyhovujících jakkoli složité podmínce a poté jedním příkazem nad takto identifikovanými záznamy provést nějakou hromadnou akci. Podobně existují konstukty na načtení celého obsahu textového souboru do proměnné atd.

Bullet Jiným charakteristickým rysem je iterativnost na úrovni argumentů. Mnoho instrukcí je skutečně VLIW v tom smyslu, že povolují iterovat seznam argumentů. Jestliže dosazovací příkaz "bere" dvojici argumentů, zrovna tak dobře "vezme" i jakkoli dlouhý seznam dvojic a provede jedním rázem mnoho přiřazení v jediném cyklu interpretace. Podobně existuje iterace přes běžné a často používané instrukce, kde je možno zřetězit do jediné instrukce "do" libovolně dlouhou sekvenci přiřazení, konstrukcí a jiných instrukcí. Interpret je pak opět provede jedním vrzem. To je důležité tam, kde se jedná o odladěné sekvence, například iniciální pro nějaký typ skriptů, které je pak možno odbýt jedním třebas i sáhodlouhým řádkem.

Bullet Jazyk skriptů podporuje volání procedur a to hned několika typů. Obecně je možno volat i celé skripty jako podřízené, je možno i volat procedury existující v rámci jednoho skriptu. Volání je možné jak přes zásobník tak i pomocí low-level technik obvyklých spíše ze skutečného assembleru. Každý skript používá de-facto virtuální kopii "hardware" VaxNt, to se týká zásobníku, registrů i kontextu. To je důležité i v tom, že pokud skript před ukončením neprovede "úklid", vlastně to nevadí, protože pro další skript se vezme "čistá" kopie virtuálního stroje.

Bullet Jádro VaxNt je naprogramováno v jazyce Delphi a pro usnadnění výkladu je důležité, že veškerá data jsou používána buď jako String nebo jako TStringList. Tento druhý datový typ je vlastně seznam rovnic - multirovnice. Stejný formát je použit pro exportování/importování dat. Skript využívá typicky jeden soukromý TStringList, kterému říkáme kontext. Krom toho se může odvolat i na globální sadu rovnic - globální kontext. Krom toho ještě existuje několik dalších kontextů s velmi specifickým určením. Skripty si při volání mezi sebou předávají kontext vytvořením kopie a při návratu, je-li uskutečněn příkazem return, se neprázdná data volaného skriptu zamíchají do dat volajícího skriptu. Ev. je přepíšou. Je tedy volání doprovázeno předáním libovolného množství parametrů, totiž veškerých dat a návrat je doprovázen předáním všech neprázdných hodnot.

Bullet Design VaxNt.Exe je přizpůsoben jeho cílům. Aplikace bez ohledu na partikulární určení jsou vždycky navzájem podobné, stejně se ovládají a liší se jenom připojenou databázi (databázemi) a naplněním různých konfiguračních seznamů. Tento přístup má svoje výhody i nevýhody.

Bullet Do značné míry potlačuje přílišné výmysly zákazníků a nutí je začít používat standardizovaný produkt.

Bullet Opakovatelnost, tzv. "code reusability" je mezi různými aplikacemi na bázi VaxNt mimořádně vysoká a podepisuje se na vysoké produktivitě realizací různých aplikací. Zde se pozitivně uplatňuje to, že i různé aplikace mají velmi široký průnik, že mají identické ovládání a hlavně že používají stejných několika standardizovaných obratů a stavebních kamenů. Vznikne-li například nějaký užitečný trik v jedné medicínské aplikaci, je použitelný ihned ve všech ostatních. A dosáhne se toho přenesením pár řádků textu bez nutnosti kompilace, ladění a dokonce je to možno udělat i bez přerušení behu všech dotčených instancí programu.

Bullet Typická aplikace na bázi VaxNt se vytváří klonováním od již existující nebo od generické instalace. To samo o sobě již zaručuje vysokou opakovatelnost. Dále se vždy na 100% využijí skryté části aplikací. Vedle uživateli viditelné aplikace ve Windows, tedy VaxNt.Exe, má systém standardizovanou serverovou část, která automaticky provádí zálohování dat, parametrů, úklid dumpů, komunikaci s WWW servery a řadu jiných funkcí včetně styku s různými nadřízenými databázemi. Generická aplikace na bázi VaxNt je koncipována jako bezúdržbový a plně funkční systém, který je možno spravovat outsourcingem na dálku a který je možno snadno rozšiřovat do širšího operačního kontextu.

Bullet Všechny formuláře jsou generovány z popisů (statických i dynamických) za běhu a program tedy neobsahuje téměř žádné manuálně vytvářené složky. To usnadňuje údržbu a klade to akcent na funkčnost před divokostí a unikátností ovládání.

Bullet Minimalizují se náklady na zaškolení personálu. To je důležité tam, kde personál může používat hned několik různých aplikací. Ovládání je standardní, neobsahuje žádnou zvláštní množinu specifických triků a práci se systémem zvládne každý relativně velmi rychle. Především je důležité to, že se ihned uplatní návyky a znalosti z ovládání Windows nebo jiných programů. Uživatel se přimočaře dostane k vyvolávání běžných akcí.

Bullet Údržba systému a nakonec i jeho překonfigurování za běhu je snadné a zvládne je i neprogramátor. Vychytávání chyb se omezuje na konkrétní popisy pohledů nebo scénářů či grafů, ale vesměs se netýká samotného VaxNt.Exe.

Bullet VaxNt si klade za cíl dosáhnout co nejrychleji přibližně 95% funkcionality a zachovat vysokou konfigurovatelnost a měnitelnost systému. Většina realizovaných aplikací se vyznačuje permanentními drobnými nebo zásadnějšími úpravami. Tyto přitom nejsou důsledkem špatné analýzy problému ale jednoduše tím, že se dynamicky mění okolí systému. Tedy předpisy, konkrétní požadavky zákazníků faktické náplně zpracovávané agendy apod.

Bullet Daní za tyto žádoucí vlastnosti je to, že různé i často absurdní představy zákazníků je nutno buď potlačit a nějak homomorfně vnořit do světa VaxNt nebo jednoduše aplikaci řešit jinak. VaxNt je určen pro rychlou a stabilní výstavbu aplikací, které jsou slučitelné s jeho vlastním modelem. Do tohoto modelu patří většina i velmi složitých komerčních aplikací, ne však všechny. Zejména pokud je na straně zákazníka již velmi vyhraněná představa o nestandardním ovládání nebo chování ještě neexistujícího systému, je lépe aplikaci relizovat jinak - obvykle to je ale řádově dražší záležitost.

Bullet Mnoho z rysů VaxNt je odkoukáno z reality a ze zkušeností, kdy různé po mnoho let na míru dělané aplikace byly postupně unifikovány do prostředí VaxNt. Zkušenosti s přijímáním VaxNt jako náhrady za nějakou velmi unikátní aplikaci jsou vesměs dobré. Vzhledem k trivialitě ovládání a nemožnosti improvizací na úrovní operátora se užívání systému zaběhne velmi rychle. Důležité je nicméně důsledné proškolení užívajícího personálu na základní dovednosti - je to záležitost přibližně dvou hodin.

Bullet Řadu efektů, které nabízí VaxNt, je možno realizovat i pomocí uložených procedur v databázi. Je v tom ale háček: každá databáze má takový jazyk jiný, některá pak vůbec. VaxNt se snaží být naprosto nezávislý na konkrétní databázi.

Bullet Manuálním programováním "z nuly" je možno dosáhnout lepší a ergonomicky vhodnější funkcionality, než nabízí VaxNt. To je zřejmý fakt. Oplátkou VaxNt nabízí vysokou stabilitu, vysokou konfigurovatelnost a rychlost implementace. Tyto výhody se uplatní zejména tam, kde neexistuje úplná analýza problému nebo tam, kde se z objektivních důvodů nároky na funkce systému mění de-facto na denní bázi. Uplatní se zde pravidlo 95:5 - VaxNt realizuje kolem 95% požadované funkcionality za přibližně 5% času oproti na míru z nuly implementované aplikaci. Těch 95% funkcionality je podle zkušeností JLabs stejně supremem, ke kterému je možno s ohledem na nepřesnosti specifikací dojít. Vzhledem ke krátkému životnímu cyklu aplikací je rychlost realizace výraznou komparativní výhodou.

Bullet Jestliže je naopak oněch 5% fukcionality zejména na straně nestandardního ovládání zásadně důležitou věcí, poslouží VaxNt se svými 95% minimálně jako plně funkční prototyp pro vypilování specifikací dříve, než se přikročí k realizaci zcela unikátní aplikace implementované z nuly. Je jasné, že i u aplikací vytvářených z nuly, se používají standardní obraty a stavební kameny. Problém je v tom, že jakýkoli složitější software si vyžádá dlouhé a pečlivé ladění a trvá mu netriviální dobu (měsíce až roky), než je vyladěn do stabilní podoby. VaxNt si tyto dětské nemoce prodělal jednou pro vždy v minulosti a je tedy přijatelnou alternativou hlavně díky stabilitě a funkcionalitě "out-of-box".

Bullet Podobně důležitým faktorem je to, že změny a úpravy VaxNt aplikací může provádět s určitou dávkou opatrnosti a s s využítím analogií i neprogramátor. Takové úpravy zahrnují konzervativní až značné změny datového schématu, úpravy formulářů a pracovních scénářů a jiné netrivální věci.

Bullet VaxNt má propracovaný systém přístupových práv, individuáních nebo skupinových profilů a je možno jej rovnou využít. Odpovídá opět řádově 95% procentům možností, které nastávají. Podobně je konfigurovatelné zabezpečení přístupu plynule od žádného až k velmi tvrdě hlídanému.

BulletRejstřík kapitoly
BulletNadřízená kapitola dokumentace / rejstřík


JLABS Aktualizováno dne 20000704. Komentář: info@jlabs.cz