meeting JavaScript

Tema 3 la Interfeţe Evoluate ne-a cerut să scriem, folosind Javascript pentru scripting, un webbased thingie care sa faca highlight pe cuvinte / fraze dintr-o pagina web, încărcată dinamic (eventual folosind Ajax). Ceva foarte simplu, menit să ne familiarizeze, presupun, cu Javascript.

Eu fug de Javascript încă de la începuturile experimentărilor mele web-astice, pentru ca ce am văzut atunci arăta foarte foarte aiurea pentru mine. E drept, cred, ce se spune despre Javascript, că e un limbaj Ok de scripting, dar care e folosit în cel mai hidos mod. Acum ceva vreme era folosit pentru nenorociri de-alea de animaţii de prost gust, ceasuri ascii care fug după mouse şi alte nenorociri care nu au ce căuta într-o intefaţă bună.

Acum vedem însă tot mai puţine utilizări negative (cel puţin din punct de vedere vizual) a Javascript, şi tot mai multe exemple pozitive. Nu ştiu exact istoria, şi sunt sigur că o călătorie scurtă pe wikipedia vă poată lămuri mai bine ca mine, dar eu cred că Javascript a început să devină widely accepted ca un limbaj de scripting serios odată cu trecerea la Web2.0, care, printre alte calităţi, se defineşte prin interfeţe web mult mai responsive. Dezvoltarea Javascript-ului ca limbaj a permis Web2.0 să existe, şi, la fel, nevoia de creştere a calităţii interfeţelor a dus la dezvoltarea limbajului. Cele mai populare trăznăi ce le folosim azi, Gmail, Y!Mail, Noul WordPress, dar şi vechiul, aproape tot ce e Google-ish, toate folosesc la greu Javascript.

De ce avem aşa super nevoie de Javascript? Well, înainte de web2.0 şi de toată nebunia cu superinterfeţele web, problema comunicării cât mai responsive cu clientul se putea rezolva în două moduri. Prima strategie era cea locală (client-side scripting): aveai un script care încărca totul în pagina curentă, în javascript, şi atunci puteai interacţiona cu utilizatorul (să validezi date, să îi dai nişte opţiuni diferite în funcţie de alegerile pe car ele face …) într-o manieră limitată la informaţiile care existau la încărcarea paginii. Şi cum să trimiţi toate posibilităţile înseamnă cantitate mare de date şi cantitate mare de date e un big no-no pentru interfeţe web, interacţiunea era limitată.

A doua strategie (server-side scripting) implica de cele mai multe ori reîncărcarea paginii şi procesarea opţiunilor cu server-ul. Necazul era că şi pe legăturile rapide (gen intraneturi) se observa reîncărcarea paginii, iar pe legăturile lente (sau no, normale) asta devenea o problemă serioasă.

Toate problemele astea au primit o soluţie unică, elegantă şi foarte foarte folosită azi de toate aplicaţiile web ce le folosim frecvent: AJAX. Asynchronous Javascript And XML. Deşi tehnologiile care fac AJAX posibil există de prin 95, W3C a propus un draft pentru chestia asta doar în 2006. Ideea e relativ simplă, AJAX se bazează pe un obiect Javascript  (da, JavaScript e şi OO :P) care face o cerere HTTP către un server şi înregistrează un handler (o funcţie) care se apelează în momentul când cererea întoarce ceva sau dă un timeout. Răspunsul cererii se presupune a fi un XML, deşi din ce am încercat eu se poate folosi şi HTML ca răspuns, dar nu sunt sigur de alte tipuri de date.

Avantajul cel mare e că toată bucătăria se întâmplă în culise, utilizatorul are o experienţă fluentă, care seamănă cu experienţele cu interfeţe ne-web. Există şi limitări. Deşi, teoretic, se pot cere fişiere oricât de mari, având în vedere că totul se întâmplă peste un mediu care are performanţe variabile indiferent de locaţie, se preferă ca răspunsurile să fie minime. O limitare de securitate care am observat-o (nu ştiu exact când a fost introdusă) este că cererile XMLttpRequest (obiectul de care vă ziceam) nu pot fi făcute decât către serverul de la care a fost încărcată pagina care execută scriptul.

Desigur, problema asta se poate rezolva urgent cu un urlfopen pe partea se server, şi asta e mirific la AJAX, posibilitatea de a trece peste limitările iniţiale impuse de modelul Web prin pasarea lor către partea celalată (client <-> server).

Anyway, pentru cine este interesat, tema mea 3 la IE este aici. Si, ca sa o testati, puteti incerca sa folositi pagina asta şi asta :)

Am devenit mult mai interesat după tema asta să investighez mai îndeaproape JavaScript şi, mai ales AJAX pentru yPHP (pentru început, un modul de formuri dinamice şi de verificare a formurilor pentru început :P). Vorbind de tehnologii, am înţeles că jQuery (ăla de aici, nu ăla care ţine de baze de date şi Java) e util. Are cineva vreo experienţă cu trăznaia asta? I will give it a try, and post here on the results :)

XML Schemas şi yPHP

De câteva săptămâni, am introdus în yPHP (în cazul în care nu ştiţi, yPHP e un fel de framework – web application kit la care lucrez) fişiere de configurare externă pentru module (momentan, se pot defini acţiunile valide şi alte câteva setări de bază, dar aş dori să extind chestia asta şi la alte tipuri de configurări – rapoarte, liste şi, în special, form-uri). Fişierele de configurare fac foarte foarte mult sens, mai ales pentru ideea în care o să dezvolt la un moment dat şi o interfaţă grafică pentru construit aplicaţii yPHP sau măcar un API pentru cine vrea să facă asta.

Miercuri, Vlad Posea ne-a prezentat, în cadrul laboratorului de IE, XML Schemas, ca o alternativă la DTD. Eu începusem să fac un plan să folosesc nişte DTD-uri pentru XML-urile de configurare pentru modulele yPHP, dar DTD mi se pare (şi este) limitat din mai multe puncte de vedere (nu poţi specifica concret care câmp tre să vină şi în ce ordine). În plus, este un alt tip de fişier. XML Schemas în schimb, sunt fişiere XML. Mai tare, la laborator am descoperit că Eclipse (cred că de la WTP – Web Tools Platform) are un super editor grafic de XSD, de poţi să legi chestiile mult mult mai repede (XML Schema se bazează pe definirea tipurilor de elemente – simple (gen string) sau complexe – care pot conţine şi alte elemente sau atribute).

So, două chestii câştigate miercuri în două ore de IE: cunoştiinţe despre XSD şi o super unealtă gata instalată la mine pe comp pentru a le manevra. Veşti bune pentru yPHP :)

Prezentare comunitate Mozilla România

Am fost joi la 12 la prezentarea comunităţii Mozilla din România. Veniţi să prezinte au fost două persoane, o româncă şi-un catalan (mă rog, spaniol, da’ ei nu se simt aşa). Discuţia a durat aproximativ 2 – 3 ore, şi a fost foarte foarte puţină lume în sală, şi din cei din sală foarte foarte puţini oameni dezgheţaţi. Îi ştiam doar pe Tibi, care ştiu ca e implicat în FLOSS şi face chestii de genul în şcoală, şi pe Mihai Dobrescu, fostul meu asistent de RC. Şi ăştia erau şi singurii oameni dezgheţaţi din sală. Ba nu, şi catalanul era cât de cât dezgheţat.

Nu am avut ce ştiu eu ce aşteptari, dar speram să fie ceva interesant. Din păcate, a fost o super discuţie despre cât de important este pentru noi să avem chestiile traduse în română (firefox, thunderbird). Really really bad audience for that kind of evangelism. Actually it was a really really bad audience for anything, pentru ca erau doar legume de anu I şi II, care nu ştiau altceva decât că comenteze de diferenţe dintre IE şi Firefox. Şi nu diferenţe tehnice!

Mă rog, mi-am dat cu părerea (mai lucram şi la interfeţe-web-beton.eu între timp), dar am realizat că oamenii de la mozilla community sunt foarte foarte foarte naivi. Una din chestiile naive spuse acolo a fost că guvernul şi instituţiile lui folosesc Microsoft stuff pentru că Microsoft stuff vine în limba română!!!!! Adică, COME ON! (cui nu i se pare naivă remarca din partea Mozilla să îmi dea un comment sau un mail şi vă explic, deşi cred că sunteţi puţini :P)

Singura parte aproximativ interesantă a fost când tipul a prezentat nişte extensii, dar rezoluţia proiectorului era 640 x 480 şi netu nu mergea prea bine, deci şi chestia asta o duraaaaat foarte mult. Oricum, ubiquity îi zice la una din extensii, şi e destul de interesantă, îţi dă posibilitatea să legi chestiile mai uşor una de alta. Cam ce vreau eu să fac cu yDesktop, dar o să vă povestesc altă dată despre asta :).

La sfârşit m-am făcut cu un sticker şi cu mai multe insigne emo cu firefox, dintre care una îmi atârnă cu mândrie de rucsacul toshiba verde neon a lui tata :).

Poli 2.0

Poli 2.0 este o iniţiativă a unor reprezentanţi serioşi ai comunităţii web 2.0 (de pe la Adobe, Yahoo şi mai puţin cunoscutul uberVU – ăştia-s de-ai noştri din CS, Romania), prin care îşi propun să îi înveţe pe studenţii de la noi de la CS chestii despre web2.0, de la setting up projects for working in teams la o aplicaţie finală.

Ei ziceau pe site-ul lor, poli20.org că se adresează în principiu studenţilor de an 2 şi 3, dar eu m-am dus la cursul introductiv oricum (o fost joi de la 2, era cât pe ce să n-ajung). Sala absolut plină, de la mine din an doar băieţii omniprezenţi, în rest doar feţe necunoscute.

Oamenii şi-au prezentat ideea convingător, deşi pentru un idealist ca mine, o fost suficient să îmi arate nişte jucarii noi şi să-mi zică că ar trebui să fac ceva cu ele, doar ca nu se ştie clar înca că. Propunerea lor e să fie folosit un index al web-ului conversaţional făcut de cei de la uberVU, care să fie căutat folosind Yahoo BOSS, şi rezultatele să fie prezentate folosind tehnologiile de la Adobe (AIR şi Flex).

Eu personal nu m-am dat niciodată în vânt după Yahoo sau Adobe, din motive total idioate şi subiective (Yahoo nu mi-o făcut nimica personal, atâta că nu erau Google şi că nu dau (nici acum) POP3 free la mail, şi Adobe o cumpărat Macromedia şi eu nu m-am putut obişnui cu ideea :) ), dar acum, după ce am dat un ochi pe chestii ce sunt disponibile şi se pot face, am ramas oarecum cu gura căscată şi dornic să încerc sa mişc ceva.

De multă vreme îmi doresc o scuză să ma uit prin Google API să mă joc cu hărţi and stuff, dar acum că am văzut cât de meseriaş este Flex ăsta, abia aştept sa le combin pe cele două.

Staţi că mă pierd deja în idei. Deci, oamenii de la Adobe (Mihai Pricope), Yahoo (Bobby Voicu) şi uberVU (Vladimir Oane) ne-au propus să facem o … trăznaie folosind tool-urile lor, şi trăznaia ar urma să fie „examenu de admitere” în ideea că apucăm să citim ceva despre tehnologiile lor. Dacă n-aş avea toate chestiile pe cap acuma aş fi deja cu nasu-n Flex :D.

Oricum, o provocare interesanta, pentru mine. Am rămas foarte dezamăgit de colegii mei de an, care or început instant cu întrebări de căcat despre cine are drepturi de autor pe codul ce îl scriem noi (asta după ce oamenii au insistat pe free şi opensource în toată prezentarea) şi alte dume de genul ăsta. La sfârşit, am surprins o conversaţie între doi colegi „frate, mai vii? la porcăria asta?? nu!”. TF???

Am crezut că e o chestie limitată la doi terminaţi, dar acum, citind pe poli20.org un comment la un post erau unii foarte foarte nervoşi că de ce se face cursu ăsta şi nu se face ceva de circuite integrate or something. Aş vrea să spun că sunt mânios pe ei, dar mai iute mi-e milă. Ma uit aici şi văd că lucrurile încep să existe, că membrii ai staff-ului CS.PUB (Vlad Posea) iniţiază chestii de-astea, şi îi văd pe terminaţii ăştia în partea cealaltă, cu capu de 10 ori mai mare decât mine, care trebuie să comenteze, chiar dacă cursul este facultativ, în nici un caz din banii CS.PUB. Grrrr…

Cum ar zice un domn’ profesor, tre să-mi aminteasă cineva în ce ţară locuim.