marți, 25 noiembrie 2008

CONCURS

Pe http://interfeteweb.pluto.ro s-a publicat un concurs ale carui reguli le gasiti aici.

joi, 13 noiembrie 2008

Tema 1 - Take 4

Pentru a realiza prima temă la IE, am ales reţeaua youtube şi limbajul de programare Java. Am folosit API-ul pus la dispoziţie de Google.
Pornind de la un id de utilizator am fomat doi arbori având ca rădăcină acel utilizator: arborele de prieteni şi arborele de comentatori. Pentru a obţine prietenii unui utilizator se trimite o cerere HTTP la http://gdata.youtube.com/feeds/api/users/utilizator/contacts, de unde se primeşte un fişier XML, pe care l-am parsat.
Pentru a obţine comentatorii unui utilizator, se obţin mai întâi fişierele video ale lui printr-o cerere la http://gdata.youtube.com/feeds/api/users/utilizator/uploads, apoi pentru fiecare fişier video se obţin comentariile printr-o cerere la http://gdata.youtube.com/feeds/api/videos/video/comments. Din fişierul XML primit am extras comentatorii.
Reţeaua youtube formează un graf şi pentru a evita ciclurile am făcut câte un vector în care reţin prietenii şi comentatorii. Înainte de a adăuga un prieten sau comentator verific dacă este deja în vector.

Alexandru Stan

Tema 1 - Take 3

Prima temă la Interfete Evoluate a constat în analiza unei comunităţi web, mai precis în extragerea de informaţii privind relaţiile sociale din cadrul unei astfel de comunităţi. Pentru enunţul complet al temei vizitaţi http://interfeteweb.pluto.ro. Primul pas a fost să caut o reţea socială care să-mi pună la dispoziţie un API eficient şi uşor de utilizat, evitând astfel parsarea paginilor HTML. După ce am luat în considerare mai multe reţele sociale m-am oprit asupra comunităţii Twitter care pune la dispoziţie programatorilor un API ce aderă la principiile de design REST (Representational State Transfer).
Pentru temă am avut nevoie de metoda care furnizează informaţii despre prietenii unui utilizator Twitter, informaţii ce se pot obţine cu usurinţă printr-o cerere HTTP de tip GET catre un URL de forma http://twitter.com/statuses/friends/{user}.{format}. În acest url {user} va fi inlocuit cu ID-ul sau numele utilizatorului pentru care se doreşte lista de prieteni, iar {format} cu xml sau json, în funcţie de ce format de date se doreşte să aibă răspunsul. Spre deosebire de metodele similare puse la dispoziţie de API-urile altor reţele sociale, aici nu este nevoie nici de autentificare şi nici de obţinerea unui API-key.
Răspunsul conţine lista cu prietenii utilizatorului dat precum şi câteva informaţii despre fiecare. În cazul în care se alege formatul XML un răspuns are următoarea structură:

<users type="array">
<user>
<id>id_utilizator</id>
<name>nume</name>
<screen_name>nume_utilizator</screen_name>
<location/>
<description/>
<profile_image_url>
http://static.twitter.com/images/default_profile_normal.png
</profile_image_url>
<url/>
<protected>false</protected>
<followers_count>3</followers_count>
<status>
<created_at>Mon May 12 13:17:11 +0000 2008</created_at>
<id>id_user</id>
<text>Testing twitter in web purposes..</text>
<source>web</source>
<truncated>false</truncated>
<in_reply_to_status_id/>
<in_reply_to_user_id/>
<favorited>false</favorited>
</status>
</user>
.
.
.
</users>

Informaţia de interes ce trebuie extrasă din răspunsul XML este numele de utilizator specificat în interiorul elementului screen_name. Obţinându-se numele utilizatorilor din listă se pot forma URL-urile pentru profil şi pentru alte cereri care să întoarcă prietenii acestor utilizatori. URL-ul profilului are următorul format: http://twitter.com/{nume_utilizator}.
După ce am stabilit ce am de făcut, am trecut la implementare. Am ales limbajul python pentru că este simplu, puternic şi elegant şi împreună cu minidom, un parser de XML cu funcţionalitate de bază, se pretează perfect la cerinţele temei. Cum reţeaua socială analizată are structura unui graf, parcurgerea se face recursiv, pornind de la nodul corespunzător utilizatorului specificat. Pentru a nu se repeta utilizatorii la care se ajunge pe mai multe căi, s-a menţinut în memorie o mulţime cu utilizatorii vizitaţi. Ar fi de preferat ca gradul relaţiilor afişate în fişierul cu rezultate să fie cat mai mic (să se ajugă la un prieten pe o cale mai scurtă), iar din acest motiv s-ar preta o parcurgere în lăţime a grafului (BFS).

Liviu Frateanu

marți, 4 noiembrie 2008

Tema 1 - Take 2

Pentru această temă am ales reţeaua socială hi5 (http://www.hi5.com) şi limbajul C#. Pornind de la un profil existent pe hi5 a trebuit să realizez o ierarhie a prietenilor cu rădăcina în profilul respectiv (pentru mai multe detalii vizitaţi pagina http://interfeteweb.pluto.ro unde se află şi enunţul temei). De la început am avut de optat între două variante: să parsez în HTML sau să folosesc un API existent pentru hi5. Evident, am ales varianta a doua. O problemă cu acest API este că se află încă în stadiu BETA şi astfel documentaţia este destul de săracă şi de multe ori incompletă (API-ul folosit se găseşte la adresa http://api.hi5.com).
La adresa de mai sus se găsesc şi descrieri WSDL pentru nişte servicii web ce ar putea fi folosite pentru a extrage informaţii din hi5. Totuşi, am ales să folosesc modelul REST deoarece oferă o metodă foarte simplă de a afla prietenii unui utilizator hi5 cunoscând numai id-ul acestuia. Metoda folosită este descrisă destul de sumar aici. Astfel, dacă luăm un id pentru un utilizator şi extragem răspunsul de la cererea făcută la adresa: http://api.hi5.com/rest/profile/foaf/[id] (evident [id] se inlocuieşte cu un id valid) obţinem un XML. FOAF reprezintă Friend Of A Friend. Răspunsul la o cerere ca cea de mai sus este un XML ce respectă protocolul FOAF. (http://www.foaf-project.org/). Un exemplu de răspuns XML este următorul:

<rdf:RDF>
<foaf:Person rdf:nodeId="me">
<foaf:nick>xxxxx</foaf:nick>
<foaf:givenName>xxxxxx</foaf:givenName>
<foaf:surName>XXXX</foaf:surName>
<foaf:mboxSha1Sum>a71850698cf0d7cfac95742de871c58817d45341</foaf:mboxSha1Sum>
<foaf:img rdf:resource="http://photos2.hi5.com/......"/>
<foaf:weblog rdf:resource="http://www.hi5.com/profile/displayJournal.do?userid=[id]"/>
<foaf:gender>female</foaf:gender>
<lang:masters>ro</lang:masters>
<foaf:homePage rdf:resource="http://www.hi5.com/friend/profile/displayProfile.do?userid=[id]"/>
<foaf:knows>
<foaf:Person>
<foaf:nick>XXXXX</foaf:nick>
<rdfs:seeAlso rdf:resource="http://api.hi5.com/rest/profile/foaf/[idnick1]"/>
</foaf:Person>
</foaf:knows>
<foaf:knows>
<foaf:Person>
<foaf:nick></foaf:nick>
<rdfs:seeAlso rdf:resource="http://api.hi5.com/rest/profile/foaf/[idnick2]"/>
</foaf:Person>
</foaf:knows>
Se poate observa din XML-ul de mai sus că se pot extrage informaţii despre utilizatorul pentru care s-a efectuat cererea (nick, nume, prenume, poză, pagina profilului, etc.). Printre informaţiile importante se regăsesc şi prietenii acestui utilizator (nickul lor şi adresa pentru FOAF-ul lor). Din FOAF-ul prietenului putem să extragem usor id-ul acestuia. Dacă avem nevoie de pagina cu profilul unui utilizator se observă că poate fi obţinută ştiind id-ul acestuia: http://www.hi5.com/friend/profile/displayProfile.do?userid=[id].
Având REST-ul şi FOAF-ul la îndemână putem să construim o ierarhie plecând de la id-ul unui utilizator. Ierarhia care ne interesează în mod sepecial are forma unui arbore, în rădăcină aflându-se userul de la care se porneşte. Însă ierarhia unei reţele sociale de genul hi5 este în mod normal un graf ale cărui legături se pot afla prin intermediul cererii REST descrise mai sus. Pentru a obţine un arbore o parcurgere DFS sau BFS ar fi necesară. Eu am folosit o parcurgere DFS oprindu-mă la nivelul maxim până la care se face căutarea (nivel dat într-un fişier de configurare). Pentru astfel de parcurgeri, în general trebuie ţinută evidenţa nodurilor prin care s-a trecut pentru evitarea ciclurilor. Pentru simplitate am folosit o listă în care am introdus id-urile pentru nodurile prin care am trecut, însă pentru o adâncime mare a arborelui este foarte posibil să apară mulţi utilizatori hi5 cu mii de prieteni care la rândul lor au mii de prieteni şi pot exista probleme legate de utilizarea memoriei.

Florian Popa

Tema 1 - Take 1

Tema mea la IE ... Am ales să fac tema în Java deoarece este unul dintre limbajele mele preferate şi în plus mai lucrasem cu fişiere XML în Java şi astfel mi-a fost mai uşor să realizez tema. Comunitatea pe care am ales-o este Flickr, deoarece dispune de un API destul de bun. Prima problemă pe care am întâmpinat-o a fost prezenţa unui parametru obligatoriu în invocarea oricarui serviciu din API, api_key, pentru care părea că trebuie făcuta o cerere de obţinere. Am încercat un workaround prin introducerea unui api_key preluat din url-ul folosit pentru invocarea serviciului din browser. Din păcate s-a dovedit că această cheie este valabilă doar o zi, motiv pentru care m-am văzut nevoit să fac o cerere de api_key la http://www.flickr.com/services/api/misc.api_keys.html . Această cheie vine imediat (în cazul în care alegeţi non comercial use) şi funcţionează perfect. Din acest motiv în versiunea de program ce va fi introdusă pe site NU se va afla un api_key iar cei care vor dori să ruleze aplicaţia vor fi nevoiţi să obţină un api_key pe care să îl introducă în membrul api_key. Tot din acest motiv nu am furnizat un fişier executabil pentru aplicaţie. Astfel, după ce se introduce api_key se va putea compila uşor aplicaţia folosind comanda "javac MainClass.java" şi apoi rula cu comanda "java MainClass" (tema va veni şi cu un script ant pentru cei ce vor dori să apeleze la această metodă de build&run).
O altă problemă apărută constă în apariţia legăturilor circulare. Cel mai simplu astfel de exemplu este (X are prieten pe Y, dar şi Y îl are prieten pe X). Practic, în acest caz se va afişa în lista de prieteni ai lui X pe nivel 2 şi X. Sau se poate ajunge ca o persoană să fie prieten al unei alte persoane pe mai multe niveluri. Practic legăturile între persoane formează un graf, iar în cazul nostru ar trebui să avem un arbore pe care să îl parcurgem în adâncime până la un anumit nivel.
O soluţie este salvarea tuturor persoanelor afişate până la un anumit moment într-o listă, iar în momentul în care se ajunge la o nouă persoană să se verifice dacă aceasta apare deja în listă. Această soluţie nu este fezabilă deoarece pentru un număr foarte mare de persoane (în general în comunităţile gen hi5, flickr fiecare user are multe contacte şi începând de la un anumit nivel de parcurgere numărul profilelor devine enorm) este posibil să se depăşească capacitatea totală a listei.
În rest aplicaţia foloseşte metodele "getPublicList" şi "getInfo" din API-ul Flickr pentru a obţine lista de prieteni ai unui utilizator şi respectiv url-ul către profilul unui utilizator. Aceste metode întorc un XML care poate fi parsat relativ uşor.

Liviu Matei

Tema 1 - Take 0

S-a publicat (şi realizat :P) tema 1 la IE. După cum am promis vom publica rezolvările tuturor membrilor echipei (după ce va expira deadline-ul, bineînţeles :P) pe site-ul http://interfeteweb.pluto.ro la pagina Teme. Tot acolo se găseşte şi cerinţa acestei teme. Totuşi, până atunci ne-am gâdit că ar fi bine ca fiecare să vorbească despre modul în care a rezolvat tema, ce probleme a întâmpinat (dacă a întâmpinat :)) şi eventual anumite hint-uri. În cazul acestei teme vom vorbi în primul rând de API-ul folosit şi de modul în care a fost utilizat.

duminică, 2 noiembrie 2008

Despre blog, IE, echipă şi altele ... (o mare varză)

În primul rând bine aţi venit pe blogul Interfete Web. Acesta este un blog mai special deoarece a fost creat ca parte dintr-un proiect la materia Interfete Evoluate din programa Facultăţii de Automatică şi Calculatoare din UPB. La acest proiect participă o echipă de 4 studenţi la A&C: Alex, Liviu, Liviu şi Florian (ALLF - noi :) ).
Proiectul va fi format din 2 părţi: un site prin intermediul căruia vor fi oferite teme realizate de noi la materia Interfete Evoluate (site-ul se află la adresa http://interfeteweb.pluto.ro/ aşa că vizitaţi-l cât mai des). O altă componentă importantă a proiectului este acest blog prin intermediul căruia vom publica diverse articole legate de web şi nu numai :D (aşa că fiţi cu ochii pe blog fiindcă nici nu ştiţi ce pierdeţi :P). Printre articolele legate de web vor fi şi cele care vor descrie rezolvarea temelor propuse la materia IE, în variantele celor patru autori.

 
SEO Romania