luni, 7 ianuarie 2008

XML is the new Database

Noul an vine cu noi teme, iar noile teme vin cu alte informatii despre ce poate si ce ofera XML-urile.

Odata cu tema 4, am descoperit XQuery - care ofera interogari asupra XML-urilor. Sintaxa este destul de usor de inteles, mai greu e pana incepi. :P
Asadar dupa ce am realizat ca putem avea o baza de date intr-un XML si putem face interogari/rapoarte/selectii asupra datelor aflate in XML, trebuie sa gasim o modalitate de "executie" a XQuery-ului.

Eu am gasit un program destul de intuitiv, care permite si debug: Stylus Studio 2007, din pacate nu este free, dar merita incercat.

Partea de identificare a campurilor in XML se face destul de frumos:
for $x in doc("file.xml")/books
return $x/text()
Aceasta linie de cod printeaza toate campurile aflate in fisierul "file.xml" continute in tag-ul books. Simplu nu?

Probabil o sa radeti, dar cel mai greu lucru de facut in XQuery a fost sa declar o variabila. :D
Dupa mai multe cautari:
declare variable $avgr as xs:decimal external;
pentru ca mai tarziu, sa se faca si o asignare : $avgr := 1.9;

Concluzia : Avem un fisier XML - plain text, care poate contine orice tip de informatii, grupate in orice fel. Acest fisier poate fi manevrat manual - notepad, in cod - fopen, prin scripturi XQuery si probabil in multe alte feluri nedescoperite. XML power :)

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.