duminică, 16 noiembrie 2008

Tema 1 – fuse, fuse şi se duse

Aşa cum era normal, a apărut prima tema la Interfete Om-Maşina (şi a apucat deja să şi treacă termenul). Tema are un subiect destul de interesant şi actual, mai exact analiza unei comunităţi web la alegere, pentru evidenţierea relaţiilor existente între utilizatorii ei.

Ce mi-a plăcut foarte mult a fost faptul că nu au fost constrângeri nici în privinţa comunităţii, nici în privinţa limbajului în care s-a făcut implementarea – lucruri care s-au dovedit a fi ulterior în acelaşi timp şi părţi negative (şi o să vedeţi puţin mai încolo de ce).

Datorită libertăţii de alegere, am pierdut destul de mult timp încercând să mă hotărăsc asupra comunităţii pe care să o disec. La început mă gândeam că ar fi interesant de analizat Flickr, dar am decoperit repede că informaţiile oferite erau numai pentru utilizatorul logat – puteam obţine o listă de prieteni numai pentru acesta, neputând crea decât un arbore de relaţii cu un singur nivel. Nici Friendster nu s-a dovedit a fi mai prietenos (accesul la diversele resurse se poate face numai furnizând API key-ul şi un session key, obţinut după logare).

Twitter oferă suficiente informaţii pentru a crea un arbore de relaţii, şi asta fără autentificare, dar are dezavantajul că numărul de queryuri este limitat la 100 pe oră pentru un ip/utilizator. Bineînţeles, se poate face un request pentru a fi adăugat pe un whitelist şi a avea număr de cereri nelimitat, dar pentru că m-am apucat de temă destul de târziu, m-am gândit că s-ar putea să dureze prea mult timp obţinerea acestei facilităţi…aşa că am renunţat la idee şi am ajuns să analizez Jaiku.

De Twitter, Flickr sau Friendster am mai auzit cu toţii până acum, dar eu cel puţin despre Jaiku nici nu ştiam că există până acum o săptămână. Am aflat că e o comunitate care a fost cumpărată recent de Google (I wonder what they’re planning on turning it into) şi că seamănă foaaarte mult tu Twitter. Şi prin „foaaarte” vreau să spun că e aproape identică – fiecare utilizator îşi poate pune un status, poate răspunde la statusul unui prieten printr-un comentariu şi işi poate crea o listă de contacte cu oamenii ale căror statusuri le urmăreşte. And, last but not least: API-ul permite preluarea de informaţii destul de detaliate despre un anume utilizator, fără autentificare, cu condiţia ca profilul acestuia să fie public. Răspunsurile oferite sunt fie în format XML (teoretic – practic o cerere de genul acesta returnează pur şi simplu pagina în format HTML a utilizatorului ales, lucru care nu m-a mulţumit deloc), fie în format JSON (acesta din urmă funcţionează corect, aşa că am zis că „it will do”).

Odată aleasă comunitatea, a trebuit să mă hotărsc şi asupra unui limbaj în care să fac implementarea. Recunosc că mi-a trecut prin cap să folosesc Flex şi ActionScript (ideea de parser built-in sau faptul că obiectele dinamice se mapează aproape perfect pe structura JSON sună destul de tentant) dar am realizat că era ca şi cand aş fi încercat să bat un cui cu barosul, din moment ce practic aplicaţia nu avea nevoie de o interfaţă, ci urma să fie rulată doar din linie de comandă. Aşa că am rămas la my-old-time-favourite, Java (da, Andrei, Ştiu că C# face ce face Java de 10 ori mai repede, ştiu că probabil tu ti-ai facut tema cu un SocialNetwork.DescribeThyself() :P).

Dezavantajul evident este că modul de gândire JSON (JavaScript Object Notation) nu e cel mai natural pentru Java, şi cu toate că am găsit o librărie pentru translatare JSON-to-Java, lucrul cu datele obţinute nu a fost foarte facil. Odată alese comunitatea şi limbajul, implementarea în sine a decurs destul de smooth, în ciuda binecunoscutelor NullPointerException acompaniate de numeroase JSONException şi aşteptatul după răspunsurile lente ale serverului Jaiku.

Looking back on it: da, ştiu că îmi puteam face tema in două ore folosind Python (sau un alt limbaj mult mai potrivit taskului), ştiu că aş fi putut până la urmă să obţin datele parsând pagini HTML, dar chiar nu mă interesează atât de tare timpul pe care l-am pierdut, având în vedere că am reuşit să învăţ ceva. Şi chiar sunt încântată că am obţinut toate informaţiile care m-au interesat fără să parsez măcar un singur HTML. :)

Guys, care to share? Chiar sunt curioasă să aflu cum a fost tema asta pentru voi.

2 comentarii:

andrei c. spunea...

De fapt a fost System.Net.SocialNetwork.DescribeThyself();
cuprins într-nu try-catch :D

Ana Vinatoru spunea...

Well...bine macar ca intre noi ne citim posturile :P