Noutati despre interfete web si interfete evoluate

joi, 27 noiembrie 2008

Colaborativ vs cooperativ

Sunt sigur ca ati auzit de brainstorming sau de "furtuna de idei". Desigur, veti intreba care este lagatura cu colaborativ sau cooperativ? Brainstorming-ul este punerea in practica a conceptului de lucru colaborativ.

Lucrul colaborativ reprezinta urmatorul pas in invatarea artificiala. Il putem defini ca "efect de grup" sau "ceva mai mult decat suma partilor" sau o sinergie. In contrast, lucrul colaborativ este ceva in genul: fiecare cu partea lui. In ambele cazuri sunt implicate mai multe entitati care lucreaza in comun, insa in primul caz se obtine mai mult decat obiectivul initial.

Este ca in cazul unui musuroi de furnici. Fiecare lucreaza partea lui, iar la sfarsit descopera ca au realizat mult mai mult decat adaugarea unui graunte de praf la musuroi; au realizat MUSUROIUL.

Inteligenta artificiala este grozava. Aplicatii precum invatarea automata (supervizata sau nu), data mining, retele neurale si altele sunt doar cateva exemple de lucru colaborativ. Dar se pare ca viitorul inteligentei artificiale sta in "cunoasterea sociala". Pana in prezent, IA nu si-a atins scopul: realizarea unui sistem perfect de dialog om - calculator. Probleme sunt multiple, insa mai ales probleme de context. Se pare ca noi avem foarte multe cunostinte dobandite social, in comunitate.

O incercare de rezolvare a problemei o constituie formarea unor ontologii: structuri arborescente de definire a obiectelor si a conceptelor. Insa si ontologiile au "o problema": sunt construite de oameni, iar oamenii tind sa vada lucururile diferit. Nu spun ca ontologiile sunt ineficiente, nu sunt, insa este foarte dificil sa definiesti TOT ce exista, fie si intr-un domeniu limitat.

Tocmai de aceea web-ul 2.0 aduce foarte multe lucuri bune. Permite crearea de cunostinte sociale (blog-uri, comunitati sociale, etc.) care apoi se pot folosi pentru extragerea de cunostinte. Un exemplu este dat de bookmarking-ul social (del.icio.us) in care mai multi utilizatori impartasesc bookmark-urile preferate si in acelasi timp le adnoteaza cu anumite tag-uri. In felul acesta ul alt utilizator poate vedea cat de important este un site (cati alt utilizatori l-au adaugat) sau poate descoperii alte site-uri din acelasi domeniu.

Web-ul construit social. Ramane sa vedem cum vom folosi "noile" cunostinte dobandite in acest mod.

Florin

Read more...

marți, 25 noiembrie 2008

LiveScribe Pulse Smart Pen - un ajutor pentru studenti si un numai

LiveScribe smart pen sau pixul inteligent.

Nu v-ati dorit niciodata sa puteti inregistra un curs de exemplu? Eu mi-am dorit, mai ales la cursurile pentru care nu exista alt suport in afara de slide-uri.

Pentru astfel de situatii, acum exista LiveScrribe smart pen. Acesta pare a fi un pix obsnuit (scrie normal) NUMAI CA in timp ce scrie, la un moment dat poate fi activata functia de inregistrare. In acel moment, pixul va incepe sa inregistreze tot ceea ce se scrie, si in plus, tot ceea ce aude. Aceasta reprezinta inovatia produsului.

Folosind un astfel de pix, la un curs cum este cel de care va spuneam mai devreme nu ar mai fi nicio problema: activezi functia de inregistrare, iei notite si pixul inregistreaza si ce scrii si ce vorbeste profesorul.

Dar asta nu este tot. Cum sunt accesate inregistrarile? Aici avem parte de o noua surpriza: dupa ce este oprita inregistrarea, daca se face "click" cu pixul pe unul din cuvintele scrise, pixul incepe si reda ce a inregistrat in momentul acela. Inregistrarile pot fi descarcate pe computer (Windows sau Macintosh) unde un program iti va prezenta ceea ce este stocat in memoria dispozitivului.

Pixul acesta poate fi numit un computer in miniatura: are procesor la 150 MHz, memorie 1-2GB (suficienta pentru inregistrarea a 100-200 ore), camera cu infrarosu, conector USB.

Partea nu foarte faina este ca trebuie sa scrieti cu el pe o hartie speciala ce contine niste puncte special amplasate pentru ca pixul sa poate realiza recunoasterea. Oricum, asta nu e asa o problema, deoarece programul cu care vine dispozitivul ofera posibiliatea de a printa astefel de pagini (folosind o imprimanta laser color).

Oricum, dispozitivul mi se pare super si este in wishlist-ul meu. Voi ce parere aveti? V-ati cumpara asa ceva?

Completare: dispozitivul poate fi gasit la http://www.livescribe.com/ iar pretul este 150$ pentru versiunea de 1GB

Florin

Read more...

luni, 24 noiembrie 2008

Wiki wiki

Wiki=repede , wiki wiki=repede x2
Trebuie sa fi auzit pana acum de wiki-uri si de minunatiile pe care le pot face pentru o comunitate.
Pe scrut un wiki - este o aplicatie online care permite accesul mai multor useri pentru a colabora. Cel mai bun exemplu care sustine relevanta wiki-urilor este crearea unui document complex la care lucreaza mai multe persoane dintr-o echipa. Daca eu incep documentul si il trimit lui Nelu, el il downlodeaza, il modifica si apoi il trimite din nou ca atsament Mariei, iar ea la randul ei face acelasi lucru si mi trimite mie inapoi. Iar eu intre timp am mai modificat copia mea initiala, e evident ca s-au creat multe copii intermediare necesare si in final eu va trebui sa ma descurc intrce cele doua documente.

De aceea wiki este o inventie grozava. Pe langa facilitarea colaborarii, noile versiuni atat de diverse ofera functionalitati din ce in ce mai interesante.

Personal am folosit DekiWiki - o versiune de wiki care mi-a placut atat pentru simplitatea ei, cat si pentru faptul ca ofera o versiune hostat de ei - ce impune atat de putine limite. Mi-a fost util atat pentru gestionarea colaborarii in cadrul unei echipe mari cat si pentru proiecte personale pe care am putut sa le structurez mai bine.

V-am atsat un filmulet introductiv care explica intr-o maniera hazlie la ce este bun un wiki.

Welcome to the wiki world!

Anca

Read more...

joi, 20 noiembrie 2008

Despre CTTE

Sau cum poti descrie designul unei aplicatii fara insa sa scrii cod pentru asta. CTTE inseamna Concurrent Task Tree Environement si este o aplicatie care permite realizarea obiectivului de mai sus.

Cu ajutorul aplicatiei se pot defini (relativ usor) comportamente orientate pe evenimente ale aplicatiei. Astfel exista patru tipuri de entitati disponibile: utilizator, aplicatie, interactiune si abstract. Intre entitati (care se numesc sarcini) pot exista diferite relatii temporale iar sarcinile pot avea atribute, preconditii, tipuri, etc. Un alt aspect pozitiv al aplicatiei este ca utilizeaza o structura ierarhica de actiuni, insa aceasta inseamna ca nu se pot reutiliza arbori de sarcini deja definiti.

Cate ceva despre cele patru tipuri de sarcini.

Prima, sarcina utilizator, modeleaza o actiune posibil logica, de alegere, de rezlvare de probleme pe care o executa utilizatorul, fara a interactiona insa cu sistemul.

Al doilea tip de sarcina este aplicatia, ce modeleaza procesarea datelor de catre sistem (la cererea utilizatorului) avand ca rezultat date ce sunt prezentate utilizatorului. De exemplu, ca urmare a unui click al utilizaotrului pe un link, sistemul va procesa cererea, va crea o pagina de raspuns si o va afisa utilizatorului.

Urmatorul tip de sarcina, interactiunea, reprezinta actiunea utilizaotrului asupra aplicatiei (click pe un buton, drag and drop something ...)

Ultimul tip de sarcina este cea abstracta - o sarcina complexa care nu se incadreaza in niciunul din tipurile prezentate mai sus.

Cam asta ar fi in mare despre CTTE. Personal, mi-a lasat o impresie ... nu foarte buna. Cu siguranta nu poate fi utilizat pentru ptoiecte de mari dimensiuni deoarece modul de vizualizare si interactiune cu obiectele lasa de dorit (lipsa alinierii obiectelor, mutarea obiectelor, rearanjarea automata urat implementata, etichetele obiectelor care sunt aliniate doar la stanga ...).

In concluzie, nu il recomand pentru a fi folosit in mod curent.

As vrea sa aflu si parea vostra daca ati utilizat acest program

Read more...

Starcraf2 si XML-ul

Un post foarte scurt:

Nu stiu cati dintre cei trei care urmaresc acest blog sunt pasionati de Starcraft, dar e un lucru care merita sa fie spus despre site-ul Starcraft2: este facut doar cu XML-uri si XSL-uri (plus, evident, Flash).

Insa, din cauza asta, consumul de resurse este putin cam mare. Folosind Process Explorer, lucrurile raportate arata cam asa (am folosit ultimele versiuni disponibile pentru browsere, fiecare a fost deschis pe aceeasi masina si a fost incarcat doar site-ul http://www.starcraft2.com/, sistemul de operare fiind Windows XP SP3):

  1. Internet Explorer 7: private bytes: 72M, virtual size: 208M, 1 proces cu 12 thread-uri;
  2. Firefox: private bytes: 41M, virtual size: 115M, 1 proces cu 16 thread-uri;
  3. Chrome: private bytes: 18+17+48M (are trei procese diferite), virtual size: 125+76+127M, 3 procese cu cate 25, 2 si 7 thread-uri. Aici trebuie sa ma adaug si faptul ca are un consum imens de procesor (imi tine un core cam pe la 100%).

Asa ca vin si-mi pun o intrebare simpla: oare chiar merita sa folosesti XML-uri pentru a face interfete? Recunosc ca e simplu. De exemplu, site-ul Starcraft 2 e foarte curat. Codul sursa e pe intelesul oricui. Totul e frumos. Mai putin consumul de resurse...

Disclaimer: recunosc ca datele de performanta pentru browsere pot sa varieze, insa ele vor fi in jurul acelorasi valori.

Ionut

Read more...

Adunarea a doua siruri in Java

La cererea expresa a lui Florin si contrar vointei acestuia, subiectul primului meu post pentru proiectul de la cursul Interfete Evoluate va fi despre un lucru aparent banal: concatenarea a doua siruri in Java.

Operatia de adunare (concatenare) a doua siruri este una foarte raspandita in aplicatiile Java normale. Insa aceasta creaza probleme din cauza faptului ca obiectul String este imutabil. Practic, din adunarea a doua obiecte de tip String, va rezulta o noua instanta, complet diferita de primele doua. In codul compilat (adica in fisierul .class), acest lucru se face prin instantierea clasei StringBuilder si apelarea metodei append. Mai exact, daca vom scrie intr-o functie urmatoarea secventa de cod:


String s1 = "a";
String s2 = "b";
String s3 = s1 + s2;


Ea va fi compilata in:

String s1 = "a";
String s2 = "b";
String s3 = (new StringBuilder(String.valueOf(s1))).append(s2).toString();


Ca observatie, StringBuilder-ul este folosit doar de la Java 1.5. In versiunile mai vechi (care, din pacate inca se mai intalnesc...) se utilizeaza StringBuffer.

Este evident faptul ca apelul String.valueOf este inutil deoarece s1 este nenul (valueOf cu parametru de tip Object, intoarce sirul "null" daca parametrul este nul sau apeleaza functia toString() a obiectului daca acesta este nenul). De asemenea, in cazul in care o asemenea operatie se face des, cum ar fi intr-un ciclu, atunci este mai bine sa se reutilizeze instanta StringBuilder. Mai exact, daca avem urmatoarea secventa de cod:

for (int i=0; i<100; i++) {
String s1 = "a";
String s2 = "b";
String s3 = s1 + s2;
}

ea va fi compilata in:

for (int i=0; i<100; i++) {
String s1 = "a";
String s2 = "b";
String s3 = new StringBuilder(String.valueOf(s1)).append(s2).toString();
}

Evident, acest cod poate fi optimizat in felul urmator (facem abstractie de modul in care functioneaza instantierea obiectelor in Java):

StringBuilder buffer = new StringBuilder();
for (int i=0; i<100; i++) {
String s1 = "a";
String s2 = "b";
buffer.setLength(0);
String s3 = buffer.append(s1).append(s2).toString();
}


Ca incheiere, vreau sa mai adaug doar ca incepand cu Java 1.5, StringBuilder si StringBuffer au un parinte comun, AbstractStringBuilder (aici ma refer la JDK-ul de la Sun). Practic, in clasa abstracta sunt implementate toate operatiile, iar StringBuilder si StringBuffer actioneaza doar ca niste wrapper-e. Diferenta dintre cele doua clase este data de faptul ca StringBuffer este thread-safe deoarece apelurile sale sunt marcate ca synchronized.

Ionut

Read more...

luni, 17 noiembrie 2008

Cuvantul magic : Usability


Pe romaneste utilizabilitate, acest aspect al definirii interfetelor web este unul cheie care poate determina succesul sau esecul unui website.

Utilizabilitatea web este o abordare a crearii websiteurilor din punctul de vedere al usurintei folosirii de catre utilizator, fara ca acesta sa urmeze un training special inainte.
Utilizatorul ar trebui sa coreleze in mod intuitiv actiunile pe care trebuie sa le realizeze pe pagina web cu alte tipuri de actiuni din viata de zi cu zi, de exemplu apesi pe buton si poof ai primit ceva.

In sens larg, scopurile pe care le urmareste utilizabilitatea sunt:

  • sa prezinte informatia utilizatorulu intr-o maniera clara si concisa
  • sa ii prezinte utilizatorului variante corecte de alegere, intr-un mod cat mai evident
  • sa inlature ambiguitatea cu privire la consecintele unor actiuni
  • sa puna cele mai importante elemente la locul potrivit pe pagina web sau in aplicatia web
Am gasit multe resurse pe web care trateaza subiectul acesta, oferind idei despre cum sa imbunatatesti sau sa testezi utilizabilitatea portalului tau.

Dintre acestea un blog mi-a placut mult si as vrea sa il impartasesc si cu voi. E vorba de UsabilityPost si puteti sa aruncati un ochi pe postul despre 7 greseli curente in ce priveste utilizabilitatea.

Noi suntem in curs de definirea a websiteului nostru http://www.interfete-evoluate.eu . Daca vreti sa ne sugerati vreo greseala fie din cele 7 fie din celelalte 1007 posibile in ce priveste utiliazbilitatea, asteptam comentariile voastre.

Anca

Read more...

duminică, 16 noiembrie 2008

Despre PageRank


Poate ca ati auzit despre PageRank sau PR. Sau poate ca aveti instalat Google Toolbar si ati observat ca vi se afiseaza un numar cuprins intre 0 si 10, numit Google PageRank. Sa vedem despre ce este vorba.

Mai intai, ce este PageRank? PR este un algoritm de analiza a link-urilor care atribuie o valoarea numerica unui document dintr-o colectie de documente pe baza importantei documentului. Cu alte cuvinte, PR determina importanta relativa a unui document dintr-o colectie, cu conditia sa existe lgaturi intre documentele respective (link-uri).

O varianta simplista a functionarii algoritmului. Daca o pagina A contine un link catre o alta pagina B, atunci se considera ca pagina A "sustine" pagina B. Deci, cu cat mai multe link-uri exista catre o pagina, cu atat mai mare va fi PR-ul paginii respective. Insa PageRank nu insumeaza pur si simplu valorile PR ale paginilor respective ci PR-ul unei pagini este impartit la numarul link-urilor care se gasesc pe acea pagina. Spre exemplu, daca o pagina are PR egal cu 8 si contine un singur link catre o pagina A, atunci A va primi 8 unitati la PR-ul sau. Insa, daca pagina initiala contine 100 de link-uri, printre care si unul catre A, atunci A va primi doar 0.08 unitati la PR-ul sau. Se presupune ca valoarea calculata de Google foloseste o scala logaritmica. Astfel, devine din ce in ce mai greu sa obtii valori mari ale PR-ului.

In concluzie, cu cat mai multe pagini web contin link-uri catre site-ul vostru, cu atat mai mult va creste PR-ul vostru.

Florin

Read more...

joi, 13 noiembrie 2008

Despre comunitati sociale si magazine online

Am mai auzit despre comunitati sociale, gen Hi5, YouTube, Moodle (?). Ele permit mai multor utilizatori sa impartaseasca idei, resurse, ganduri, fisiere, informatii, ... si lista poate continua. Este chiar util sa aflii cate ceva in plus despre prietenii tai, depre ce le place sau nu le place, despre ce au mai facut ... si o mutime de alte lucruri.

Ceea ce am aflat de curand, este ca aceste comunitati sociale se pot forma si altfel si anume in cadrul magazinelor virtuale. Da, in momentul in care ne inregistram pe un site, oferim o serie de informatii despre noi acelui magazin. Pe masura ce cumparam, se formeaza un profil al nostru. Si uite asa, magazinul capata o baza de date cu preferintele utilizatorilor.

Care este legatura cu interfetele web? Una destul de evidenta. Folosind informatiile din reteua sociala creata, programatorii site-ului pot oferi continut particularizat utilizatorilor. In felul acesta, cand voi intra pe site-ul magazinului, voi vedea o lista cu produse care sa reflecte preferintele mele (poate doar, doar voi mai cumpara unul din ele). Si astfel ajungem la imbunatatirea interfetei web pe care utilizatorul o foloseste pentru accesarea site-ului.

O alta modalitate de folosire a informatiilor din reteaua sociala a magazinului este de a folosi preferintele celorlalti utilizatori pentru a-mi oferi mie sugestii de obiecte pe care le pot cumpara. Cum functioneaza? In primul rand mi se determina profilul din cadrul magazinului pe baza a ceea ce am mai cumparat. Apoi sunt cautati utilizatorii care au preferinte similare (eventual care au dat note produselor respective). Se extrage din lista de preferinte a utilizatorilor o alta lista de obiecte pe care ei le-au cumparat (dar eu nu) si mi se ofera ca recomandari pentru a le cumpara. Destul de interesant. De exemplu, Amazon are o politica destul de agresiva de recomandari.

Voi ce parere aveti despre folosirea informatiilor legate de profilul de utilizator in scopuri de marketing?

Florin.

Read more...

duminică, 9 noiembrie 2008

API pentru explorarea comunitatii HI5

A trecut si tema 1 la Interfete Evoluate. Titlul ei? Analiza unor comunitati web
.
Cum aveam un cont la HI5 m-am gandit ca e perfect daca as face o explorare pentru a vedea cu cati utilizatori este conectat profilul meu (mergand doua niveluri in jos am descoperit ca "am" aproximativ 6000 de prieteni distincti, destul de multi :) )

Dar pana sa ajung aici a fost destul de interesant.

Trebuie sa va spun ca mie imi place sa programez in JAVA, asa ca pentru tema aceasta m-am gandit ca ar fi excelent daca as utiliza cunostintele de parsere SAX pentru a rezolva tema.
Initial, am zis ca voi face o parsare a listei de prieteni Numai ca nu e chiar asa de simplu: in primul rand trebuie sa fii logat (se poate face din Java, de exemplu folosind clasa HttpClient insa nu e asa placut) apoi, pentru a folosi un parser XML cu o pagina HTML e riscant (paginile HTML nu au intotdeauna tag-urile inchise corect, nu folosesc intotdeauna ghilimele pentru valorile atributelor ...), apoi lista de prieteni este afisata pe mai multe pagini, deci trebuie mai multe parsari. In concluzie, prima solutie parea destul de complicata.

Dupa ce am cautat putin pe net am descoperit ca HI5 expune un api (aflat in stadiu beta!) de explorare a comunitatii. Exact ce aveam nevoie. API-ul era oferit sub forma de servcii web ce puteau fi accesate prin SOAP. Ca urmare am incercat sa ma conectez la serviciul de lookup pentru a afla ID-ul unui utilizator (eu) a carui adresa de email o cunosteam. Conectarea am incercat sa o realizez folosind un client SOAP si anume Axis. Desi pare foarte simplu: creezi un nou client SOAP, creezi un nou apel, setezi parametrii si tipul lor, tipul raspunsului, trimiti cererea si astepti raspunsul formatat XML, nu a fost simplu. Se pare ca nu degeaba e in stadiu beta API-ul. Aparent, WSDL-ul (Web Service Description Language) asociat nu era consistent (asa cum am aflat dupa ce am folosit un utilitar AXIS de generare a unui client folosind WSDL-ul).

A picat si SOAP-ul. Insa pe pagina API-ului HI5 mai era un API, si anume: REST (Representational state transfer). API-ul permite accesarea de resurse peste o retea folosind identificatori. In scurt timp am vazut cat de usor se puteau accesa informatiile care ma interesau (userID si lista de prieteni ai unui utilizator pentru care cunosc id-ul). Asa ca am folosit metoda /profile/lookup pentru a afla id-ul utilizatorului si /profile/foaf/ pentru a afla lista de utilizatori in format FOAF. Era exact ce imi trebuia; primesc raspunsul in XML, totul e foarte clar. Mai departe am inceput sa scriu programul care foloseste un XMLReader pentru a parsa documentele si cateva handlere (cate unul pentru fiecare tip de document). Este destul de usor sa creezi un handler SAX, este nevoie sa extinzi clasa org.xml.sx.helpers.DefaultHandler si sa redefinesti cateva metode: startDocument (apelata la inceputul documentului), startElement (apelata la dechiderea unui nou tag), endElement (apelata la inchiderea unui tag) si characters (apelata la intalnirea de caractere intre un tag de inceput si unul de sfarsit).

Si asa am utilizat SAX si REST scriind un program in JAVA pentru a descoperii ca am 6000 de prieteni indirecti pe HI5. Voi cati prieteni aveti?

Florin.

Read more...

miercuri, 5 noiembrie 2008

Hello web

Hello web!

Un fel de "Hello World" al utilizatorului web 2.0 or something. In sfarsit am reusit sa ne punem pe picioare, suntem doar la inceput, insa avem convingerea ca vom reusi sa scriem o serie intreaga de articole interesante despre interfetele web actual folosite in web-ul 2.0.

Si cum un hello world trebuie sa fie scurt ... :)

Read more...

marți, 4 noiembrie 2008

We are LIVE!

Ma bucur sa inaugurez cu un post proaspat blogul nostru adica al echipei Anca, Florin si Ionut sau Florin, Ionut si Anca sau Ionut, Florin si Anca ... sau cum vreti voi, pana ne gasim un nume :)

Bun venit si Enjoy! our blog and our website - pe care o sa il aduca barza cat de curand.

Nu vrem sa incarcam web-ul cu chestii inutile asa ca veti gasi aici numai noutati interesante atat din domeniul Interfetelor Web cat si din alte domenii conexe care ne pasioneaza. Sper ca va fi o experienta placuta sa ne rasfoiti blogul.

Have fun!

Anca

Read more...

Arhivă blog