vineri, 14 decembrie 2007

Sezonul cadourilor


Stiu ca multi mi-ati cumparat deja cadoul ideal de Craciun, dar pentru cei care inca se mai gandesc, iata cateva idei pentru prietenii vostri:

  • Transparent toaster :
Va place painea prajita, dar mereu se arde? Iata inventia pentru dumeavoastra: se poate vedea cum se prajeste painea si o puteti scoate exact atunci cand e gata :).





  • Cup & Cookies
O cana desteapta care te scuteste de a cara pe o farfurie prajiturele de cafea! 2 in one!







  • DayClock
Nu stii ce zi e azi ? Atunci un ceas care iti arata in ce zi a saptamanii esti, este ideal pentru tine! Deprimant lunea, dar revigorant vinerea :)

sâmbătă, 8 decembrie 2007

Yui calendar - the story of a manelo man..

De ceva timp a aparut tema 3 la Interfete Evoluate si va trebui ca fiecare din echipa sa faca cate o aplicatie pe ca o vom integra pe site. Avem de ales intre Autocomplete, Calendar, Counter intern sau Top-ul articolelor.

Eu mi-am ales Calendarul si am folosit libraria YUI Library(Yahoo! User Interface) si a iesit chiar bine zic eu... iata!
Alex a ales sa faca Autocomplete, Cristi - Top-ul, iar Ciprian - Counter-ul Intern!

Spor la treaba!

vineri, 7 decembrie 2007

Database vs. Interfete evoluate

De ce trebuie sa existe o baza de date in fiecare proiect?
  • Ce este o baza de date?
O definitie in limbaj natural este o colectie de informatii ce pot fi accesate usor, pot fi organizate si actualizate. Trebuie deasemenea sa se poata grupa informatia in categorii: bibliografic, full-text, numeric sau imagini.
Sincer, gasesc utilitatea lor numai in limbaj high level unde nu exista fopen, si printf, dar unde ai api-uri pentru interogarea unei baze de date. Asadar o aplicatie utilizata de mai multe persoane - online sa spunem, trebuie sa centralizeze datele fiecarei persoane pe un server. In acelasi timp managerul server-ului va putea interoga baza de date sa faca statistici sau sa elimine datele incorecte.
  • De ce spun ca este optim sa folosim baze de data?
Nu spun asta. Cred ca este usor si la indemana sa folosim o baza de date MySql sau Oracle sau cine stie ce alta nebunie Microsofteasca promovata de spread sheet-uri si manageri imbracati in costume.

Si totusi atunci cand vorbim despre Interfete evoluate spunem oare baza de date? Vorbim despre high level programming language? Cred ca mai mult decat oricat vorbim despre viteza, optimizare si portabilitate, iar din partea programatori de flexibilitate.

Asadar, "let me be the better person" si voi privi cu alti ochi ideea de a lucra cu bazele de date... cine stie poate o sa imi placa.

Poate revin cu ceva detalii dupa research...
Cateva link-uri utile pentru inceput:
Ajax tutorial, Ajax database, Ajax- MySql

joi, 6 decembrie 2007

Interfete evoluate - mobile devices

Cand spunem interfete evoluate ne gandim la multe dispozitive rezolutionare, dar si la software.

Iata ce a facut Google - Google maps Without GPS.
In Retele de Calculatoare se specifica exact tehnologia folosita de posturile de GSM si e o chestie extraordinara ca cineva s-a gandit sa faca o aplicatie de genul asta - mai ales free.



PS: Sunt rea cand spun ca as vrea sa fie Open Source ? Sau macar un API!! Imaginati-va posibilitatile :P

marți, 4 decembrie 2007

Web Crawler

Un web crawler(sau web spider, web robot) este o aplicatie/ script automatizat care urmareste ceva pe internet. In alte cuvinte daca ii dam ca target un anumit site, acest crawler va aduna informatii si le va structura.

Internetul este o sursa nelimitata de informatii, dar in ultimul timp a devenit si un loc de joaca, fara sa iti incarce sistemul cu aplicatii mari, costisitoare si mai ales scumpe. O noua strategie in aceasta privinta o reprezinta jocurile online multiplayer sau MMOG (Massive multiplayer online game).

Aparut relativ de curand in Romania, Travian, a reusit intr-un timp destul de scurt sa isi stranga fani, fiind disponibile 5 servere : s1 (7900), s2 (9300), s4 (13760),s3(9500), s5(13100) - ultimul a fost lansat pe 5.11.2007 si are deja peste 13000 utilizatori.

Ce legatura are Travian cu un crawler web? Simplu: EU!
Am facut un parser care poate scoate orice informatie de pe server. As vrea totusi sa ma opresc asupra unuei singure facilitati: aceea de a structura toate aliantele din top 20. Cu alte cuvinte, dandu-i-se o alianta de pe server, gaseste toate relatiile sale : Razboi, PNA sau Ally. Un asemenea tool este de ajutor pentru cei din conducerea aliantelor, pentru a vedea cine ce a mai schimbat in relatiile de alianta, si mai ales, cine cu cine se razboieste!

Sa incepem descrierea tacticii de atac a crawler-ului:

1. Conectarea la server. (How to login to travian web site)
Conectarea din pacate a fost una dintre cele mai dificile taskuri, din cauza autentificarii care nu este documentata (evident) si a trebuit sa fac putin de reverse engineering :)
Asadar am folosit un tool de sniffing :WIREshark - care este free dar e destul de dificil de utilizat - tip puteti folosi IEWatch care se integreaza de minune cu InternetExplorer (pentru fainii acestui program), dar din pacate ca orice creeat de Microsoft nu este gratuit. Folosind Wireshark, am descoperit secventa de POST HTML care este trimisa la login. Spre fericirea mea userul si password-ul se trimit in plain text, deci e destul de simplu sa indentific secventa, in schimb partea mai grea a fost restul de campuri. Dau un indiciu mic mic, restul pe privat.

TIP:
Valoarea "1196721665" este foarte importanta si se modifica pentru orice tentativa de login. Restul lagurilor se gasesc in "Text", "Password", "autologin".

TIP2:
Solutia cea mai simpla in loc de login manual folosind Http POST, se poate folosi wget.exe - aplicatie care suporta cookies si functioneaza de minune.
Asadar :
wget.exe --load-cookies "full_path_cookies.txt" --output-document "_nume_fisier_output" http://mysite.ro
Functioneaza de minune!

2. Identifincarea aliantei.
Nu mi-am batut capul sa parsez site-ul de la inceput si sa identific alianta dupa eticheta sa, ci am cerut direct link catre descrierea sa.

3. Parsarea html-ului.
Deci este un format foarte popular, o sa fiti surprinsi ca nu exista prea multe parsere care sa identifice corect toate tagurile unui fisier html. O sa dau cateva exemple, dar care nu au functionat pe site-ul meu.
DOM
SAX
Un limbaj usor de folosit pentru aplicatii web, dar personal nu am o afinitate pentru el: Python

M-am oprit la un singur limbaj : C# pentru care am gasit un Parser Open Source.

4. Identificarea relatiilor.
Parserul pe care l-am gasit si care NU CRAPA, avea un mic bug: nu parsa Textele adica pentru un html
< href = "http://www.blogger.com/logout.php"> Iesire < / a >
reusea sa identifice numai href["logout.php"]; nu asta a fost problema pentru ca am reusit sa il modific astfel incat sa poata parsa si textul - multumita open source.
Asadar am reusit sa identific relatiile tocmai datorita acestei modifcari, intrucat pe serverul travian.ro relatiile sunt definite de 3 stringuri "Alinate:", "In razboi cu:", "PNA-uri", apoi o lista cu alintele din aceasta categorie.

5. Do you database??
No, thank you! Desi finalitatea temei trebuia sa fie o baza de date, nu mi-a placut ideea de a avea pur si simplu un DB... asa ca am folosit un tool GraphViz pentru vizualizarea output-ului.


Cam atat!!! Asteptam comentarii si sugestii.

Tehnologia AJAX

Aparut de curand, AJAX nu reprezinta un nou limbaj de programare, ci doar o imbinare a limbajelor existente JavaScript si XML.

AJAX este un fenomen complex care poate semnifica ceva diferit pentru fiecare persoana. Pentru utilizatori, AJAX se simte prin situri moderne cu o interfata mai prietenoasa si comportament mai prietenos decat siturile traditionale. Pentru programatori, AJAX inseamna Asynchronous Javascript and XML, si se refera la un set de tehnologii care permit implementarea unor facilitati deosebite in aplicatiile web cu doar putin efort suplimentar.

Inovatia AJAX s-a declansat ca urmare a nevoii de imbunatati viteza de navigare a siturilor, prin micsorarea timpilor de raspuns la actiunile utilizatorilor. Pentru fiecare actiune a utilizatorului, siturile obisnuiau sa reincarce complet pagina pentru a o actualiza cu noi date, chiar si in cazurile in care schimbarile erau minore. Astfel, inainte de AJAX, fiecare click de mouse cauza un timp mort pentru utilizator, pana cand noua pagina se incarca.

Este important de inteles ca multe din aceste asteptari sunt utile si necesare atunci cand ele se intampla natural, ca urmare a navigarii intre diverse pagini. Cel mai simplu argument este ca aceste reincarcari de pagini (page reloads) sunt modalitatea prin care adresa paginii se schimba, astfel incat ea sa poata fi insemnate (bookmarked) pentru referinte ulterioare. Totusi aceasta tehnica este folosita excesiv pentru multe alte circumstante, cand acea asteptare nu isi are sensul. Exemplele sunt nenumarate; un exemplu relevant este cazul cand este necesara completarea unui formular intreg, si apasarea butonului „Submit”, pentru a afla care sunt greselile facute in el. In mod natural, aceste greseli ar trebui semnalizate pe masura ce sunt facute. Alte exemple pot fi vazute in multe locuri pe internet, unde situri moderne permit utilizatorului sa faca diverse actiuni (spre exemplu, sa voteze prin butoane „Yes/No”), fara ca acestea sa cauzeze asteptari sesizabile.

Eliminarea reincarcarilor inutile de pagini a fost acel mic pas care a declansat o avalansa de eforturi in directia imbunatatirii interfetei siturilor web. Facilitati precum drag-n-drop, validare automata a datelor, unelte web de colaborare interactiva, si multe altele sunt noi in lumea aplicatiilor web, acestea fiind asociate in mod traditional cu aplicatiile care ruleaza local. Toate acestea, desi uneori fara temei tehnic, sunt atribuite fenomenului AJAX.

Intr-adevar, in momentul acesta totul suna bine despre AJAX, dar trebuie tinut cont de faptul ca AJAX un concept inca foarte nou. El a fost „inventat” in februarie 2005 de catre Jesse James Garett in articolul „Ajax: A New Approach to Web Applications”. Ca orice alta tehnologie, AJAX poate fi folosita gresit, cu efecte negative asupra aplicatiilor. Chiar daca ingredientele AJAX sunt mature (cea mai noua componenta este obiectul XMLHttpRequest care a fost conceput de Microsoft in jurul anului 1999), noul lor rol in lumea aplicatiilor web moderne este inca o tema controversata. In timp ce unii vad AJAX ca fiind viitorul aplicatiilor web, altii prefera sa nu foloseasca AJAX deloc. Probabil ca testul timpului va arata, ca de obicei, calea de mijloc ca fiind cea de urmat.

luni, 3 decembrie 2007

Comunitati online

Datorita usurintei cu care se poate intra in ziua de azi pe Internet, tot mai multa lume petrece ore intregi in fata calculatorului, navigand pe Internet. Ei pot comunica cu prietenii sau isi pot face noi prieteni folosind comunitatile online.
In cadrul acestor comunitati, fiecare utilizator se poate prezenta, poate participa la discutii pe diverse teme sau pur si simplu poate afla informatiile dorite.
Comunitatile pot fi de mai multe tipuri : forumuri( in general folosite pentru schimb de informatii), blog-urile( utilizatorii comenteaza stirile din ultima devreme, lucrurile din viata lor, etc) , wiki(publicare de informatii, la editarea carora pot participa mai multi utilizatori), chat(nu mai are nevoie de nici o prezentare in acest context: oricine citeste acest articol are un id de messenger) si retelele de socializare, care vor fi prezentate in detaliu in cele ce urmeaza.

Retelele de socializare sunt pagini de web pe care utilizatorii publica anumite informatii despre ei(prieteni din cadrul comunitatii, date pesonale si nu in ultimul rand poze). Acestea sunt folosite in genera, dupa cum le spune si numele, pentru a cunoaste noi oameni, dar si pentru a comunica cu prietenii din lumea reala(comentarii la informatiile publicate, jocuri online si ,evident, simple mesaje).


Una dintre cele mai populare comunitati online la aceasta ora este hi5.com. Desi nu e la fel de complexa precum facebook.com, care ofera pe langa facilitatile hi5-ului multe jocuri, teste de compatibilitate si alte diverse aplicatii create chiar de utilizatori, el e mult mai popular printre prietenii mei si prietenii lor samd. Poate din cauza simplitatii sale: vezi pozele cuiva, iti place, il/o adaugi in lista ta de prieteni sau ii lasi un comentariu. Continuarea e in functie de imaginatia fiecaruia :).

Dar scopul acestui articol nu este publicitatea pentru acest site( ar fi fost, daca ar fi facut si ei publicitate site-ului aplicatiiweb.esk.ro, care e super misto, btw).Scopul e unul mai putin moral, sa zicem.

Datorita faptului ca paginile sitului sunt generate automate, ele sunt construite folosind anumite sabloane, care de altfel nu sunt foarte complicate. De ce conteaza acest lucru? Pentru ca folosind aceste sabloane putem face o baza cu utilizatorii acestui site, carora le putem trimite mesaje publicitare apoi.
Patternurile sunt simple:
- paginile de start pentru utilizatori au urmatoarea forma : http://hi5.com/friend/UserId--NumeUtilizator--Profile-html
- paginile cu prieteni:
http://hi5.com/friend/profile/displayFriends.do?userid=UserId&offset=NumarDeOrdine&page=next
(prietenii sunt indexati in lista utilizatorului; pagina va afisa 12 utilizatori plecand de la prietenul de la pozitii NumarDeOrdine)
- prietenii sunt trecuti in sursa acestei pagini in urmatorul fel: intalnim linia
 <div class="user-profile">
dupa care urmatoarea linie contine un link spre respectivul
prieten
<a name="&lid=ProfileFriends_Name" title="Ionel" href="/friend/NewUserId--NumePrietem--Profile-html" class="username_dark">

Si uite asa, cu un programel foarte simplu, poti gasi multi utilizatori ai acestui domeniu. Cum sunt folosite
aceste informatii ramane la latitudinea fiecaruia. Deocamdata eu am pus utilizatorii
intr-o baza de date MySQL pe care am prezentat-o la laborator :).
Programelul il gasiti pe site-ul de interes general pentru studentii de anul 5 de la Calculatoare(sau cel putin
pentru majoritatea dintre ei) aplicatiiweb.esk.ro( mai multa lume a spus ca e util situl, nu numai eu :) ).


Web Crawler

Pentru tema 2 la laboratorul de IE am avut de implementat un WebCrowler. Un Web Crawler este un programel (mai mare sau mai mic ) care trimite mesaje request catre un server web cu intentia de a descarca pagini dinamice generate automat de catre acel server. Astfel posesorul unui astfel de web crawler isi poate popula o eventuala baza de date cu informatiile publicate pe anumite situri. Insa sa dezvolti un astfel de web crawler nu este tocmai usor pentru ca nu toate paginile web sunt la fel si astfel programul trebuie sa cunoasca formatul paginilor web pe care le inspecteaza. Astfel se folosesc biblioteci de expresii regulate sau limbaje de parsat fisiere xml si xhtml.
Interesant despre acest tip de program este folosirea lui in scopuri "necurate" cum ar fi fraudarea unor situri de pariuri online sau jocuri de noroc. Datele despre aceste pariuri (curse de cai , ruleta, blackjack samd) pot fi inregistrate in baze de date si apoi dezvoltarea unei strategii de castig pe baza patternului de generare a numerelor pseudo-aleatoarii. Strategia de pariere este de a pune la bataie sume mici insa pe foarte multe bilete astfel in eventualitatea unor calcule gresite suma pierduta nu este foarte mare.

luni, 5 noiembrie 2007

Tehnologia XML

Natura flexibila, dar structurata a documentelor XLM a dus la o mare varietate de moduri de implementare a XML-ului. XML este mai mult decat o modalitate de a transfera date - puterea sa este reprezentata de transferul de date, stocarea datelor de configurare, implementarea limbajelor de programare declaratice sau functional sau descrierea formatelor de date.

1. De ce definim paternuri de folosire.

Patternurile folosesc modalitati comune de a creea documente si tehnologii XML. Paternurile de folosire ajuta sa stabilim un limbaj de comunicare comun, pentru cei straini limbajului, iar pe cei deja familiari ii ajuta sa transmita mesajul lor mai repede si mai simplu.

2. Ce inseamna sa folosim XML?

Folosirea XML inseamna cunoasterea API-urilor disponibile:
* SAX (Simple API for XML 1.0 si 2.0)
* DOM (Document Object Model 1.0 si 2.0)
* Parsari de stringuri
* Java Document Object Model (JDOM)

Inainte de a aborda oricare din aceste API-uri, trebuie sa intelegem cu ce tip de XML trebuie sa lucram:
* Document Type Definition (DTD)
* XML Schema
* XML Data Reduced (XDR)
* Schme for Object Oriented XML (SOX)

Asadar dupa ce aceste intrebari au fost raspunse, trebuie sa avem in minte ca nu exista o modalitate "corecta" de a folosi XML, tocmai datorita flexibilitatii sale. XML este important tocmai pentru modalitatea transparenta de a incapsula informatii, decat specific pentru client, baza de date, limbaj, platforma etc.

3. Patterns:
#Configuration pattern - descrie o modalitate simpla de a defini date structurate, evitand sa se defineasca editoare customizate
# Declarative Language pattern - foloseste XML ca o baza pentru implementarea si inventarea unui "limbaj" simplu de programare
# Data Transmission pattern - descrie folosirea XML pentru a transfera date intre diverse surse.
# Envelope pattern - incapsularea datelor care trebuiesc trimise si nu sunt XML, in format XML
# Structured Storage pattern - stocarea datelor in XML, asadar usurinta de a identifica continutul datelor.
# Interface Definition pattern - foloseste formatul XML pentru a invoca remote defintii ale interfetelor.