Wednesday, January 14, 2009

Optimizari!

In ultimul timp am fost preocupat de optimizari pentru Concept Application Server si GyroGears. Astfel, dupa o gramada de bataie de cap, am reusit reducerea cu 48% a necesarului de memorie, un server putand rula acum un numar dublu de aplicatii CAS/Gyro. Optimizarile au fost facute doar in framework (44%) si in core(4%). Totusi, ma gandesc la mai mult: avand in vedere ca cea mai mare cantitate de memorie intr-o aplicatie GyroGears este folosita de UI, m-am gandit sa fac un "MinimalControl". Este practic o clasa ce are numarul minim de membri, se opereaza mai low-level cu ea (ex: proprietatile se scriu minimalControl.SetProperty(P_CAPTION, "Text") ). Aceste clase nu vor interactiona cu programatorul (codul fiind generat automat de GyroGears si de CIDE). Ma astept ca in acest mod sa reduc inca o data la jumatate necesarul de memorie. Inca ma gandesc cum voi face transofrmarea de la un "MinimalControl" la controlul echivalent, de exemplu RButton.
Pentru aplicatia de test (HRCompanion) am redus practic consumul de memorie de la 178MB la 93MB. Acum, daca as reusi sa ajung sub 50MB ar fi excelent (avand in vedere ca este o aplicatie foarte complexa).

Pana atunci, intram iar in BETA cu framework-ul ... dar probabil ca-l voi propune ca versiunea 1.1.

Sunday, January 4, 2009

Pregatiri Concept(uale)

Lucrez intens la partea de Web pentru GyroGears. Nu e un secret faptul ca atunci cand se doreau aplicatii web traditionale (pagini web de server) se rula in general prin Apache + Concept CGI.
Dezavantajele folosirii interpretorului CGI erau evidente: de la securitate, pana la timpul de raspuns crescut (dar de cele mai multe ori insesizabil). Dincolo de asta, erau cazuri cand nu se interceptau erorile (din diferite motive, cum ar fi netrimiterea header-urilor s.a.m.d.).

Solutia a fost sa fac un modul de Apache 2.x. Bataie mare de cap de un week-end ... in principal din cauza documentatiei sau mai bine spus a lipsei "dansei". In final, cu chiu cu vai, uitandu-ma peste ce au facut altii si facand zeci de artificii, numite de mine "ciorba" am legat ceva ... ii voi spune deocamdata versiunea 0.8 beta. De ce 0.8 ? Pentru ca asigura 80% din functionalitate. Concept pentru aplicatiile web, foloseste qDecoder. O biblioteca bine gandidata pe fiecare versiune in parte ... dar prost gandita in materie de versiuni, astfel, codul scris pe versiunea 6 nu va fi compatibil pe versiunea 9 ... Dincolo de asta, a trebuit sa iau versiunea 6 si sa o modific astfel incat sa functioneze si cu Apache. Practic, qDecoder presupunea rularea ca CGI si citea totul din variabilele de mediu (environment variables). A trebuit sa modific inclusiv in CORE-ul Concept astfel incat sa am un parametru "userdata" (care poate fi practic orice) care sa circule intre Apache si qDecoder, traversand Concept CORE... mare bataie de cap, dar a iesit bine.
Acum, problema este cu memoria: Daca in materie de CORE lucrurile stau relativ bine(bine e imposibil, pentru ca vorbim de software => bug-uri), in multe biblioteci 3rd party exista memory leak-uri, facand sa creasca memoria necesara procesului Apache HTTPD. Creste, dar pana cand ? ... pana se restarteaza Apache. Suna un pic alarmant, dar leak-urile tin de bibliotecile altora ... O poza intitulata "not my job" imi explica punctul de vedere(nu o copiez aici pentru a evita problemele de drepturi de autor). Acum, nu spun ca nu exista memory leak-uri in CORE-ul Concept sau in Concept Framework ... Probabil ca exista, si cum le voi descoperi sau imi vor fi raportate, le voi repara.
Pe pagina http://www.radgs.com/43-apache-2-module.html exista instructiuni pentru configurarea lui Apache HTTPD 2.x atat pentru ferestre cat si pentru pinguini sau draci.
Pana atunci, testam interfetele pe cativa din clientii nostri, care au trecut azi de pe CGI pe mod_concept si deocamdata n-au aparut probleme.

PS: Am rezolvat un bug minor din Concept Client care facea consola sa ramana uneori deschisa atunci cand aparea o eroare. Acum se inchide. Era un bug minor, deoarece nu afecta functionarea aplicatiilor. Oricum, am pus update-ul pe site.