Din pacate in seara asta site-ul proiectului Interfete Evoluate nu a putut fi accesat (nici http, nici ftp). Sa speram ca se va remedia problema in curand.
Din fericire a mers sa accesez baza de date data de xhost si am putut face schimbarile asupra tabelelor necesare pentru functionarea temelor 3.
Pana acum ar trebui sa functioneze corect dpdv al bd tema Catalinei, a lui Catalin, Cosmin si a mea. Asteptam si mailul de la Mihnea cu scriptul pentru tabelele lui.
Ce parere aveti despre cursul de Interfete Evoluate de anul acesta ?(tematica curs, laboratoare)
miercuri, 9 ianuarie 2008
Probleme hosting xhost
luni, 7 ianuarie 2008
Tema 4 - WebML/WebRatio vs XMLSchema/XQuery
Revin si de data asta cu impresii despre Tema 4
Varianta WebML/WebRatio
Dupa o citire fugara a enunturilor celor 2 variante de teme ( ca de obicei ni se da posibilitatea de alegere :P), am concluzionat ca varianta de XQuery/XMLSchema este cea mai usora de departe.
Cu toate acestea stiind ca foarte probabil nimeni din echipa nu o sa aleaga varianta de WebRatio/WebML, am hotarat sa o aleg eu pentru a avea si un exemplu de rezolvare a acestei variante(Ganduri prea frumoase din partea mea :P).
Avand in vedere ca in pdf-ul laboratorului i se facuse reclama WebRatio-ului, ca "este usor de folosit", "cu doar cateva click-uri, drag & drop poti sa realizezi un site functional".
- Frontend - un view public pentru vizualizarea articolelor si postare comentarii
- Backend - un view protejat pentru adaugarea/modificare/stergere de posturi, categorii
La partea de backend in schimb, lucrurile s-au stricat. Acest view fiind protejat ii trebuie un login. Am dedus ca trebuie adaugat un unit de login, caruia i-am asociat in frontend pe pagina principala un entry unit cu parola si user. Am introdus in baza de date un utilizator cu modul, grup, insa nu vrea de nici o culoare sa se logeze. Ca deobicei am recurs la google. Insa aici surpriza. Nu am gasit decat link-urile de la documentia de pe site-ul WebRatio, pe care o citisem si nici un exemplu concret de folosire. Am dedus eu ca este o problema cu datele introduse in baza de date, insa nu am gasit pe nicaieri o explicatie.
Deabia azi la cursul de Interfete Evoluate s-au prezentat anumite informatii care elucireaza problema :
- Pentru a intra automat dupa logare in Backend trebuie asociat unui utilizator un modul default (tabela user_group si group_module). Modulul asociat trebuie sa aiba in campul moduleid exact id-ul asociat automat de interfata grafica (in fereastra de prorietati a Area-ului ptr Backend in dreptul campului id)
- Pentru a stii in partea de Backend id-ul utilizatorului ce s-a logat se foloseste un session unit de tipul get
Varianta XMLSchema/XQuery
Primul pas a fost obtinerea tabelelor date in documetul pdf in format xml. Am selectat o tabela si am exportat-o intr-un fisier .csv pe care l-am deschis cu Excel si l-am mai prelucrat putin. Apoi am salvat in Excel fisierul in format xml.Pasul 2 consta in creearea unui fisier XMLSchema care sa descrie formatul fisierelor xml. Pentru asta am folosit tutorialul de pe w3schools. Din pacate nu am putut sa testez tema folosind site-ul proiectului Interfete Evoluate deoarece nu se pot uploada fizic pe site fisierele XMLSchema.
O singura problema am intalnit la faza acesta : cum specific in xml schema asociata fara a avea o locatie disponibila pe internet unde sa se gaseasca fisierele. Problema rezolvata prin specificarea in fisierul .xsd a atributului xsi:noNamespaceSchemaLocation="numefis.xsd" si prin stergerea specificarii xmlns si targetNamespace.
Pentru pasul 3 testarea query-urilor am folosit ide-ul XMLSpy si un plugin pentru eclipse. Sfat-ul meu este sa folositi interfata XMLSpy direct si nu prin Eclipse, deoarece nu are implementate toate functionalitatile in plugin si merge si mai greu.
Ca si tutorial l-am folosit pe cel de pe w3schools care este mai mult decat suficient. O pagina utila este cea cu functiile care pot fi folosite in XPath (care pot fi folosite si in XQuery).
Concluzie
Daca vreti sa scapati mai repede de tema4 va recomand implementarea varientei XMLSchema/XQuery, iar daca vreti sa invatati ceva care pe viitor ar putea sa va foloseasca(in cazul ca lucrati in domeniu) alegeti varianta WebML/WebRatio.WebRatio este probabil o unealta cu care se poate genera foarte usor cod si care iti permite sa vezi contructia unui site dpdv al arhitecturii, dar ca toate lucrurile trebuie sa aiba si minusuri: timpul initial de invatare este considerabil, anumite lucruri pot fi facute mai greu/mai putin intiutiv (efectuarea unor calculele cu datele dintr-o bd).
joi, 13 decembrie 2007
Nou - am revenit in forta in Google
In search-ul pe google dupa cuvintele cheie "interfete evoluate" ne situam acum pe locul 16 :) - pe pagina 2, insa fluctuatiile pozitiei in search sunt mari. Mai asteptam sa se stabilizeze treaba.
Acum ar fi un moment bun sa punem content nou (ex. pagina de prezentare) si pagini cu articole.
miercuri, 12 decembrie 2007
Nou - Modificare Site Interfete evoluate
Am completat si sectiunea de Prezentare cu cateva informatii despre membrii echipei in general. Va invit sa va adaugati fiecare o scurta descriere.
duminică, 9 decembrie 2007
Misterul disparitiei din Google search
in care am explicat situatia site-ului si am cerut niste pareri.
Aparent aceasta situatie nu este neobisniuta pentru un site nou,
cum este al nostru, si suntem noi prea impacienti.
Sa speram ca situatia se va schimba in curand, cum se spune
"May Google Gods be with us".
Intre timp am constatat ca Google Analytics este o unealta destul
de puternica, printre lucrurile pozitive constatate se numara :
- updatarea la interval de minute a informatiei despre trafic
- vizualizarea mai compacta a informatiei cu grafice per vizitatori/vizite/accese de pagina
- flexibilitate mai mare in ceea ce priveste selectia perioadei de afisare a statisticelor
- foloseste ajax pentru afisarea info - voi reveni cu un articol despre asta
Per total informatiile oferite sunt aceleasi ca la trafic.ro doar intr-o forma
mai prietenoasa.
sâmbătă, 8 decembrie 2007
Nou - Site XHTML 1.0 Transitional si CSS valid
vineri, 7 decembrie 2007
Nou - site RSS feed
diferit de cele prezente pe site puneti un comentariu la acest post cu numele programului.
Re - Vesti proaste
Orice alta sugestie este binevenita...
Vesti proaste
miercuri, 5 decembrie 2007
Tema 3 reloaded
html (cu tag-ul div) pe care o afisezi/ascunzi atunci cand este nevoie.
Articolul ce descrie implementarea autocomplete-ului se gaseste aici .
marți, 4 decembrie 2007
Tema 3 - Din nou !!!
Mda... stiu ca nu e profesional, dar nu este vina mea ca obiectul de popUp
nu este suportat decat de IE, iar in cazul meu era varianta cea mai simpla
de a rezolva problema.
Din pacate azi cand am prezentat tema la laborator mi s-a zis clar ca
trebuie sa-l fac sa functioneze si pe alte browsere (Firefox, Opera, ...)
asa ca va trebui sa ma mai documentez :(.
Revin cat de curand cu informatii proaspete despre descoperiri. :D
luni, 3 decembrie 2007
Tema 3
Tocmai ce am uploadat tema 3, si ma gandeam sa unificam datele din tabelele noastre. Ma gandesc sa folosim aceleasi tabele din baza de date si sa facem temele sa mearga cu hostul nostru (de la xhost.ro). Astfel, toate temele vor afisa aceleasi date.
Am facut deja asta cu tema Mihaelei. Acum cautarea de articole (autocomplete) si selectarea de articole dupa autor merg pe acelasi tabel. Ulterior, vom integra totul pe site.
Am creat tabela articles cu toate articolele scrise de noi. Va mai trebui sa cream tabela users (cu id user si nume, si eventual si alte date), si toate celelalte tabele de la temele voastre.
Sa-mi ziceti ce pareri aveti.
PS. O sa fac public linkul dupa expirarea termenului temei. Pana atunci puteti sa-l vedeti pe ftp.
To crawl or not to crawl
La tema 2 am avut de facut un crawler web care sa descopere si salveze relatiile inter-personale de pe un site la alegere.
Eu am plecat de la last.fm - super site de ascultat, descoperit, impartasit muzica si evenimente asociate precum concerte, lansari de albume. Am identificat relatii de tipul X asculta aceeasi muzica cu Y (neighbour in limbaj last.fm), X este prieten cu Y.
M-au ajutat destul de mult URL-urile foarte "regulate" ale site-ului si faptul ca HTML-ul din pagini e bine structurat. De exemplu, e de ajuns sa se plece de la un nume X de utilizator, prietenii sai se gasesc la www.last.fm/user/X/friends, din pagina HTML respectiva se pot parsa usor numele prietenilor, se afla apoi prietenii prietenilor si tot asa.
Ca tehnologii, am folosit Python si sqlite pentru baza de date. Python din cauza ca e puternic, simplu, elegant si are un parser de SGML care e teribil de usor de folosit. Multi colegi au incercat sa parseze cu un parser de XML si au dat de probleme fiindca stim cu totii ca putine site-uri folosesc astazi XHTML desi ideal toate ar trebui sa o faca. Parserul XML se plangea cand dadea de HTML-ul ce respecta mai putine reguli; parserul de SGML din Python a mers perfect.
Tot legat de parser, capabilitatile dinamice si reflective ale Python sunt puse la treaba in folosirea lui. Vrei sa ti se apeleze o metoda cand incepe tag-ul <ul> In parserele standard trebuie sa iti inregistrezi o functie handler si sa faci incantatii magice :P. In Python trebuie sa definesti metoda start_ul intr-o clasa care extinde SGMLParser. Atat.
O alta chestie despre care am aflat mai multe cu ocazia acestei teme a fost sqlite. Le-am vizitat site-ul, am fost incantat de faptul ca e o solutie care face foarte multe (ofera suport pentru SQL, indecsi, tranzactii, triger-uri, view-uri) si totusi nu are nevoie de un server care sa gestioneze baza de date, nu are nevoie de nici o configurare, tine toata baza de date intr-un singur fisier self-contained si are mai putin de 250KB de cod. Daca nu era de ajuns, formatul bazei de date este neschimbat pe arhitecturi pe 32 sau 64 biti, little-endian sau big-endian. Faptul ca e un produs extraordinar de util se vede si din lista impresionanta de utilizatori.
Site-ul Proiectului IE s-a modificat - in bine bineinteles :D
- Home : se prezinta o scurta descriere a proiectului si a materiei.
- Articole : se afiseaza link-uri catre paginile articolelor, atat cele de pe blog cat si cele de pe site
- Portofoliu : se afiseaza enuntul temelor si link-uri catre impementarile fiecarui membru
- Prezentare : se prezinta informatii despre fiecare membru (nu link-uri)
- Contact : se pune la dispozitie un formular de contact
Sarini ramase de facut in cadrul proiectului:
- completarea sectiunii Home cu inca vreo 2 paragrafe despre materie si proiect
- scrierea de articole pe site despre tehnologii web si completarea sectiunii Articole
- atragerea de echipe partenere :P, va invit sa va folositi metodele de persuasiune
- adaugarea enunturilor temelor si link-uri catre temele rezolvate deja pentru a completa sectiunea Portofoliu
- adaugarea unei scurte descriri despre fiecare membru al echipei
- punerea in functiune a formularului de contact ai acesta sa trimita mail-uri pe adresa de mail a proiectului
- crearea unei pagini de sitemap
Tema 3 Autocomplete - varianta "complexa"
Pentru a face aceasta tema am adoptat, ca orice inginer in devenire :P, o abordare incrementala. Auzind de la laboranti ca "varianta simpla este inclusa in cea complicata" am inceput prin a rezolva varianta simpla.
Vrand sa lucrez in eclipse, un IDE deja cunoscut si foarte usor de folosit, am downloadat un plugin pentru editarea de javascript - JSEclipse. A trebuit sa ma inregistrez la Adobe ca sa dwl acest plugin :(, instalarea a mers ok , pana la urma tot cu download managerul din eclipse am instalat :P ca mi-era mai usor. Pluginul nu este unul tocmai stralucit, raporatarea erorilor este foarte slaba, cateodata te induce in eroare, autocomplet-ul nu este prea util, avand in vedere ca tipul variabilelor este "on the fly".
Varianta simpla - durere de cap :(
Am citit tutorialul de pe w3schools de JavaScript si am inceput sa rezolv micile task-uri ce alcatuiau tema fara a tine cont de Ajax si aici au inceput problemele.
Am zis sa plec de la o abordare simplista si asa am facut separat un text box in care sa editezi titlul articolului si un select cu lista de autocomplete. Din pacate lucrurile nu au fost asa de simple deoarece tot ce sa gasea pe net erau aceleasi exemple standard, iar daca vroiai sa faci ceva mai altfel specificatiile pentru o anumita chestie-obiect in speta, trebuiau cautate bine. A trebuit sa citesc si despre HTML DOM, altfel nu aveam cum sa generez dinamic lista de autocomplete. Un exemplu util de HTML DOM aici .
In cele din urma, cu multe chinuri si cu ajutorul try catch-urilor am reusit sa fac pagina sa functioneze. (Am uitat sa zic de erorile foarte sugestive obtinute - "Unspecified error").
Urmatoarea etapa era sa fac afiserea listei de autocomplete sa semene cu cea din google suggest.
Aici am dat peste diverse solutii folosind HTML5.0 despre care nu am gasit o documentatie buna, doar exemple si un articol sumar . Oricum devenea foarte clar ca ceva trebuie drastic schimbat in abordarea temei ca asa nu mai merge.
Varianta cu Ajax - :D
In cele din urma am avut divina inspiratie sa citesc si tutorialul de Ajax. Aici am descoperit cu stupoare implementarea temei mele, intr-o varianta foarte simpla care NU folosea Javascript aproape deloc :D si care reusea sa faca site-ul sa semene ca cel de la google. Asa ca am sters cu "buretele" (aka delete ) tot ce scrisesem pana acum, si am copiat exemplele din tutorial. Din fericire site-ul ales de mine xhost.ro are suport pentru baze de date mySql si php, asa ca a functionat sa testez acolo si nu a trebuit local sa - mi instalez alte programe.
A trebuit desigur sa ma mai documentez despre php si obiectul de popup pentru a face sa functioneze tema. Un articol cu exemple bune referitoare la folosirea Popup Object.
In concluzie va sfatuiesc sa faceti varianta cu Ajax in conditiile in care aveti la dispozitie un server apache/.. cu php si mysql , deorece este mai simpla abordarea.
duminică, 2 decembrie 2007
Tema 2 - Mini crawler pentru o lista de discutii
Am ales sa analizez lista de discutii a cursului de Sisteme de Operare (http://cursuri.cs.pub.ro/pipermail/so/) - mai exact paginile corespunzatoare mail-urilor trimise in octombrie si noiembrie, si sa concluzionez pe baza unor euristici destul de simpliste cam care e statutul celor care au trimis mail-uri pe lista de discutie: profesor, asistent, student, asistent responsabil de tema.
Ca de obicei, am ales sa scriu codul sub Linux :) folosind Java (fara Eclipse, doar Kate, ant si un terminal). Ca baza de date am folosit 'sqlite' (simplu si eficace).
Prima problema de care m-am izbit a fost faptul ca paginile pe care urma sa le analizez nu erau XHTML :( "Salvarea" a venit din partea unui asistent care a recomandat folosirea 'JTidy' pentru "curatarea" HTML-ului.
Urmatorul pas a fost alegerea tehnologiei de parsare: SAX sau DOM; desi mai ineficient din punct de vedere al consumului de memorie, am ales DOM pentru ca paginile analizate erau cat se poate de simple.
"Curatarea"HTML-ului si parsarea rezultatului s-au dovedit a fi lipsite de efort; mai dificila a fost parcurgerea arborelui si identificarea euristicilor care sa separe cat mai bine studentii de asistenti :) In cele din urma, am stabilit urmatoarele reguli: un mail fara reply reprezinta cel mai probabil un anunt facut de un asistent, ultimul reply a fost scris probabil tot de un asistent care lamureste definitiv problema din mail-ul initial, iar initiatorii unor mail-uri cu multe reply-uri sunt probabil studenti.
Parcurgerea arborelui s-a facut in urma unei analize a htm-ului asociat, pentru a putea identifica mai usor pe ce nivel se afla elementele de interes, in ce relatie sunt etc.
Mai dificila a fost identificarea ultimului mesaj dintr-un thread, din cauza ramificatiilor (ultimul mesaj poate sa apara ca reply al unui mesaj intermediar); o parcurgere recursiva nivelelor mesajelor dintr-un thread a rezolvat problema.
Baza de date a fost folosita prin intermediul JDBC.
Cam atat despre tema 2; codul poate fi download-at de pe site.
Urmeaza tema 3...
sâmbătă, 1 decembrie 2007
Crawler Web
Va spun eu, tot ce iti trebuie ca sa faci acel program sunt : cunostiinte minime de Java , o baza de date (MySql) si un profil de plecare pe acel site.
Prelucrarea paginii
In functie de tipul site-ului paginile pot fi xhtml sau doar html. Pentru parsarea xhtml in Java principalele pachete ce pot fi utilizate sunt org.xml.sax si javax.xml.parsers , tutoriale pentru folosirea lor se gasesc la adresele
http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/sax/index.html ptr SAX si
http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/dom/index.html ptrDOM.
Recomandarea mea este sa folositi SAX-ul pentru pagini mari deoarece este mai rapid, iar DOM-ul pentru pagini mai mici.
De obicei pentru a descoperii noi profile de utilizatori este deajuns sa cauti in pagina link-uri cu o anumita forma. De exemplu pentru yahoo360 url-ul pentru profil este de forma http://360.yahoo.com/profile-ID , unde ID este o combinatie de litere.
Cheia succesului - rank mare in motoarele de cautare
Cei mai importanti factori fiind numarul de link-uri din cadrul altor site-uri care indica catre site-ul tau, numele domeniului sa contina cuvinte relevante pentru continutul site-ului si nu in ultimul rand continutul tag-ului title.
O practica foarte comuna pentru a obtine un rating mare era folosirea tag-ului meta cu atributele keywords si destription in care administratorul paginii include o scurta descriere a site-ului si cuvintele cheie. Acest tag nu mai este luat in considerare de motoarele de cautare actuale (Googleboot, yahoo) din cauza folosirii in scopuri rau intentionate de catre multi administartori de site-uri. Atributul description este in continuare folosit, dar are o importanta scazuta daca in interiorul site-ului nu se gasesc cuvinte care sa sustina descrierea. Ideea este ca motoarele de cautare isi genereaza singure o descriere a site-ului pe baza continutului.
Cateva sfaturi date de cei de la google pentru a obtine un rank bun in cautari :
- inscrieti pagina in motorul de cautare http://www.google.com/addurl.html
- incarca o harta a site-ului folosind Google webmaster tools pentru o buna acoperire a site-ului
- pune link-uri catre site-ul tau in cadrul paginilor din acelasi domeniu de interes
- foloseste text in locul imaginilor pentru a afisa nume, continut important sau link-uri
- daca folosesti pagini generate dinamic, ia in considerare ca nu toate motoarele de cautare stiu sa proceseze astfel de pagini. Ajuta daca numarul de parametri este cat mai mic.
- numarul de link-uri din cadrul unei pagini ar trebui sa nu depaseasca 100
O descriere detaliata o gasiti la http://www.google.com/support/webmasters/bin/answer.py?answer=35769.