Friday, December 26, 2008

GyroGears devine BETA de Craciun

In timp ce oamenii normali* sarbatoreau Craciunul alaturi de cei dragi, eu am sarbatorit in felul meu: lucrand. Am lucrat foarte mult in ultimul timp la cateva elemente noi:
  1. Generatorul automat de help pentru aplicatiile Gyro
  2. Rapoartele avansate (ca un inceput de solutie de B.I.<<nu ca as fi pe deplin lamurit ce inseamna B.I. >>)
Acum, pe rand: Generatorul automat de help, face documentatia pentru toata aplicatia generata de GyroGears. Am mers pe o solutie foarte simpla, templatizata (astfel incat sa fie foarte usoara adaptarea pentru o alta limba decat cea default). Un exemplu poate fi vazut aici: http://www.radgs.com/help_sample/ . Veti observa probabil romengleza in care este scris. Acest lucru este cauzat (nu datorat !) de faptul ca aplicatia este descrisa in limba romana iar template-ul de help este in limba engleza (iar, a se ignora greselile gramaticale - voi reveni asupra template-urilor in perioada BETA). Toata aceasta documentatie a fost generata 100% automat fara pic de interventie din partea mea. De asemenea, este integrata in aplicatie, raspunzand la F1 - pentru prezentarea "capitolelor" sau Ctrl-F1 pentru help senzitiv, afisand help pentru contextul din care se invoca help-ul.

Acum, revenind la lucruri (si mai) serioase: Rapoartele avansate
Aici, cateva probleme au fost intalnite:
  1. rapoartele in Gyro se bazeaza foarte mult pe XSL:FO, standard ce mie personal imi place tare mult, dar recunosc ca nu sunt inca familiarizat cu tot ce stie/poate sa faca. Din pacate este destul de greoi, mai ales cand deployment-ul rapoartelor se face pe Apache FOP (ce nu are o implementare 100% compatibila). Solutia a fost implementarea a unui nivel nou, asemanator cu HTML-ul (chiar partial compatibil cu HTML-ul) pentru generarea rapoartelor. Cateva elemente au fost adaugate, precum pie, chart, datasource, parameter, call, etc.. A fost nevoie de aceste tag-uri pentru a interactiona elegant, modular si in siguranta cu baza de date. (vezi screenshot).
  2. Parcurgearea rezultatelor interogarilor (a dataset-urilor) poate genera ambiguitati atunci cand sunt folosite succesiv. De exemplu: pentru un dataset, poate avem nevoie de o parcurgere 2 pasi inainte, unul inapoi. Acum totul depinde de "client"-ul bazei de date si de setarile facute pentru accesta. Daca tot rezultatul va fi adus pe client, este permisa trecerea de la un rand(row) de index mai mare la unul cu index mai mic. Daca nu (daca rezultatul este adus succesiv in cate 1-2-5-N row-uri), nu va fi posibila o astfel de parcurgere. Solutia a fost relativ simpla, dar mancatoare de memorie: aducerea intregului rezultat intr-o matrice. In acest fel, datele pot fi parcurse, extrase sau prelucrate fara limitari si fara restrictii data de setarile clientului pentru baza de date. Daca ai obiectiuni, am un argument cat se poate de serios: daca extragi milioane de inregistrari (cat sa umpli intreaga memorie disponibila) ... unde le vei tipari ? ... pentru ca vorbim totusi de rapoarte "standard" si nu interogari ale bazei de date. In 99% din cauzuri este vorba de pie-chart-uri, grafice sau niste tabele "citibile" de oameni.
  3. Abstractizarea extragerii de date, astfel incat sa poata fi prelucrate date atat de la o simpla interogare SQL sau o succesiune te interogari SQL (ce pot fi grupate si astfel incat rezultatul uneia poate fi parametru de intrare la alta) cat si de la o functie scrisa manual (pentru cazuri speciale).
Dupa ce toate problemele au fost rezolvate si a fost gasita si o solutie de setare a parametrilor pentru rapoarte (tot XML-based) s-a ajuns la:






Am atasat si raportul in format XML.
Cateva screenshot-uri cu raportul in formatul final (asa cum a fost generat) si cu help-ul integrat in aplicatie:



Ok. Acum la 2:15, in noaptea de Craciun, ma pot culca linistit stiind ca GyroGears poate satisface orice solicitare in materie de baze de date si raportare, atata timp cat "orice" este egal cu 98%.

"Craciun fericit" celor crestini si "Sarbatori fericite" celorlalti.

*) oameni normali = presupunem conceptul de normalitate ca fiind definit de majoritate, pentru ca in final nimeni nu-mi pare mai normal decat mine si probabil ca nimeni nu-ti pare mai normal decat tine. In concluzie, cum imi spunea un prieten foarte bun candva: "normalitatea este relativa"