VaxNt/ProDB.PGuide.Koncepce
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.
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.
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.
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.
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á.
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.
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.
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.
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.
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.
Do značné míry potlačuje přílišné výmysly zákazníků a nutí je začít používat
standardizovaný produkt.
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.
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.
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í.
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í.
Ú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.
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.
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.
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.
Ř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.
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.
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".
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.
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.