marți, 18 noiembrie 2008

Stumbleupon - surf, discover....stumble

Salutare !

Cati dintre voi stiu de Stumble ?
Ei bine, nu o sa intru prea mult in detalii.E un fel de digg, unde poti sa share-uiesti site-uri, poze, stiri, ...tot ce vrei.

Eu l-am descoperit acum un an, iar plug-in-ul de la Firefox il face si mai util...mai ales in vremuri de plictiseala :)

Vi-l recomand si voua !

luni, 17 noiembrie 2008

Yahoo Messenger Widget (II)

Am gasit pe trilulilu o iconita, ce imita foarte bine sigla Yahoo Messenger. Mai jos, textul care trebuie adaugat pe site.

<
a href="ymsgr:sendIM?ID-ul-Tau"><
img alt="Y!M" src="http://static.trilulilu.ro/images_new/icon_ym.jpg" class="user_icon"><
/a>

duminică, 16 noiembrie 2008

Yahoo Messenger Widget

Cu ajutorul scriptului de mai jos putem realiza un link catre un ID yahoo. Se poate vedea daca utilizatorul ID-ului este online sau nu, iar vizitatorii nu trebuie sa instaleze nimic suplimentar. Nimic mai simplu!
<a href="ymsgr:sendIM?ID-ul-TAU"><img src="http://opi.yahoo.com/online?u=
ID-ul-TAU
&m=g&t=1"
alt="Yahoo! Messenger" border="0"></a>


vineri, 14 noiembrie 2008

StAX - un pull-API pt parsarea XML

Ce este StAX? Este un API pentru citirea si scrierea documentelor XML, bazat pe streamuri si evenimente, Java-based ... si face parte din categoria parserelor pull. Normal, ca doar vorbim despre Interfete Evoluate, nu despre clatite.
StAX permite realizarea parserelor XML bidirectionale, rapide si usor de programat; si nici nu este un mare consummator de resurse.
StAX este un nou API din familia JAXP si se constituie intr-o alternativa la SAX si DOM, atunci cand se doreste performanta ridicata, filtrarea streamurilor, procesare si modificare, toate acestea cu cat mai putina memorie consumata si necesitati limitate de extensie.

Pull Parsing vs Push Parsing

Parserele pull folosesc o paradigma de programare, in care o aplicatie client cheama metodele dintr-o librarie de parsare XML, atunci cand trebuie sa interactioneze cu un infoset XML – cu alte cuvinte, clientul face un "get" (pulls) pentru datele continute in XML doar atunci cand are nevoie explicita de acestea.
Parserele push folosesc o paradigkma de programare in care un parser XML trimite datele din XML (push) catre client, pe masura ce parserul intalneste elementele dintr-un infoset XML – cu alte cuvinte, parserul trimite date, chiar daca clientul nu este pregatit sa le foloseasca la momentul respectiv de timp.
Dintre avantajele pull-parsing as putea enumera:

* clientul controleaza threadul aplicatie si poate chema metode de parsare doar atunci cand are nevoie.
* prin contrast, in push parsing, parserul controleaza threadul aplicatie.
* librariile pull-parsing pot fi mult mai mici si codul client care interactioneaza cu ele devine mult mai simplu, chiar si in cazul documentelor XML complexe
* clientii unui pull-parser pot citi simultan mai multe documente, intr-un singur thread
* un parser StAX poate filtra documentele XML, a.i. elementele nefolositoare pentru client sa fie ignorate
* in ceea ce priveste metoda de parsare push, aplicatia trebuie sa primeasca toate elementele, deoarece nu exista o schema de filtrare

Avantajele StAX s-ar putea rezuma la:

* Suporta pull-parsing
* Realizeaza trecerea controlului asupra parsarii catre programator, prin expunerea unui API bazat pe iteratii. Aceasta permite programatorului sa ceara urmatorul eveniment (pull the event) si permite retinerea starii intr-o maniera procedurala.
* Stax a fost realizat pentru a adresa limitarile din cele mai importante doua APIpt parsare: DOM si SAX

O scurta comparatie intre StAX si SAX:

* StAX e pull, SAX e push
* Clientii care folosesc StAX sunt in general mai usor de programat, fata de cei care fol SAX
* StAX este un API bidirectional – poate citi si scrie documente XML
* SAX este read-only si necesita un alt API pt scrierea in documente XML.

Mai multe informatii aici.

marți, 11 noiembrie 2008

XML "Beautifier" folosind SAX

Am intalnit in ultima vreme o groaza de pagini XML, aproape imposibil de citit, datorita lipsei de indentare a textului. Mai jos, solutia: Java si parserul SAX. Calea catre fisierul buclucas este data in linie de comanda.


import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.*;


// Pretty printing cu parser SAX
class PPSax extends DefaultHandler
{
String sp=""; // spatii ptr indentare la fiecare linie
public static void main(String argv[])throws Exception {
DefaultHandler handler = new saxEcho();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(new File(argv[0]), handler);
}

// metode din DefaultHandler redefinite (metode callback)
// un marcaj de inceput element
public void startElement(String namespaceURI,String sName,String qName,
Attributes attrs) throws SAXException {
StringBuffer sb = new StringBuffer(sp+ "<"+ qName+" ");
if (attrs != null)
{
for (int i = 0; i < attrs.getLength(); i++)
{
String aName = attrs.getLocalName(i); // Attr name
if ("".equals(aName)) aName = attrs.getQName(i);
sb.append (" " + aName + "="+ "\"" + attrs.getValue(i)+"\" ");
}
}
System.out.println (sb.append (">"));
sp+=" "; // creste indentare dupa un marcaj de inceput
}

// un marcaj de sfarsit element
public void endElement(String namespaceURI, String sName, String qName )
throws SAXException {
sp=sp.substring(2); // scade indentarea
System.out.println (sp+"");
}

// un sir de caractere delimitat de marcaje
public void characters(char buf[], int offset, int len)throws SAXException {
String s = new String(buf, offset, len);
s=s.trim(); // elimina spatii albe
if (s.length()==0)
return; // daca au fost doar spatii albe
System.out.println (sp+ s);
}
}

luni, 10 noiembrie 2008

Utilizarea unui parser DOM in Java

M-am confruntat la Interfete Evoluate cu studiul si utilizarea documentelor XML. Deosebit de utile mi s-au parut implementarile SAX si DOM (doua dintre cele mai cunoscute parsere XML) din Java. Am sumarizat mai jos o descriere a implementarii DOM - Document Object Model
O aplicatie DOM creeaza mai intai un obiect parser (printr-o fabrica de obiecte) si apoi apeleaza metoda parse pentru acest obiect, cu specificarea unui fisier XML.
Metoda parse are ca rezultat un obiect de tip Document, care este arborele creat pe baza documentului XML, conform modelului DOM.
Pentru fisierul XML anterior cu lista de preturi, dar scris tot pe o singura linie si fara spatii albe, arborele DOM arata astfel:
De fapt, orice arbore DOM mai are un nivel radacina care corespunde intregului document XML (nod cu numele #document si valoarea null).
Fiecare nod dintr-un arbore DOM are un nume, o valoare si un tip. Tipurile sunt numere intregi, dar exista si nume mnemonice pentru aceste tipuri. Iata cateva exemple de constante din interfata Node:
public static final short ELEMENT_NODE = 1;
public static final short ATTRIBUTE_NODE = 2;

public static final short TEXT_NODE = 3;

public static final short DOCUMENT_NODE = 9;


Nodurile cu text au toate acelasi nume (#text), iar valoarea este sirul de caractere ce reprezinta textul. In exemplul anterior cele 4 noduri terminale sunt noduri text (cu valorile “CDC”,”540”,”SDS”,”495”). Parserul DOM creeaza noduri text si pentru grupuri de spatii albe.
Nodurile pentru elemente au numele marcajului si valoarea null. In arborele de mai sus am scris numele nodurilor de pe primele 3 niveluri (de tip 1) si valorile nodurilor de pe ultimul nivel (de tip 3).
Modelul DOM defineste mai multe interfete Java, implementate de parser si folosite de catre aplicatii :

- Interfata Node contine metode de acces la un nod de arbore DOM si la succesorii sai, dar si metode pentru crearea si modificarea de noduri de arbore DOM.
public String getNodeName(); // numele acestui nod public String getNodeValue() throws DOMException; // valoarea acestui nod public void setNodeValue(String nodeValue) throws DOMException; public short getNodeType(); // tipul acestui nod
public NodeList getChildNodes(); // lista succesorilor acestui nod
public Node getFirstChild(); // primul succesor al acestui nod
public Node getNextSibling(); // urmatorul succesor al acestui nod public Node removeChild(Node oldChild) throws DOMException;
public Node appendChild(Node newChild) throws DOMException;

public NamedNodeMap getAttributes(); //atributele acestui nod


- Interfata NodeList contine metode pentru acces la lista de succesori ai unui nod:
public Node item(int index); //nodul cu numarul “index”
public int getLength(); //lungime lista de noduri


- Interfetele Document, Element, Attr, CharacterData, Text, Comment, extind direct sau indirect interfata Node cu metode specifice acestor tipuri de noduri.

- Interfata NamedNodeMap corespunde unei liste de atribute (obiecte de tip Attr) si contine metode ca getLength() si item(i). Este folositoare pentru extragerea atributelor.

- Interfata Attr contine metode de acces la numele si valoarea unui atribut, precum si la elementul caruia apartine acel atribut:
public interface Attr extends Node
{

public String getName();
public String getValue();

public void setValue(String value) throws DOMException;

public Element getOwnerElement();
}

Cateva metode folositoare din interfata Element:
public String getAttribute(String name); //obtinerea valorii unui atribut cu nume dat
public void setAttribute(String name,String value) throws DOMException;
public NodeList getElementsByTagName(String name);

Ultima metoda este utila pentru extragerea selectiva de noduri dintr-un arbore DOM, desi exista si alte metode de filtrare a nodurilor din arbore.
Clasele care implementeaza interfetele DOM fac parte din parserul DOM, iar numele si implementarea lor nu sunt cunoscute utilizatorilor; ele constituie un bun exemplu de separare intre interfata si implementare si de programare la nivel de interfata. Clasa care implementeaza interfata Node contine si o metoda toString, care produce un sir de forma nume[valoare], cu numele si valoarea nodului, indiferent de tipul nodului si daca exista sau nu atribute asociate unui element.
Afisarea/prelucrarea unui arbore DOM se face de obicei printr-o functie recursiva care prelucreaza nodul curent (primit ca argument), atributele sale si apoi se apeleaza pe ea insasi pentru fiecare succesor. Parcurgerea listei de succesori se poate face usor in doua moduri:
- folosind metodele getFirstChild si getNextSibling ;
- folosind metoda getChildNodes si metode ale interfetei NodeList.

joi, 6 noiembrie 2008

ASCII art VS HTML art

Cred ca toata lumea a auzit de termenul ASCII art si a vazut astfel de "capodopere". Chiar si cei mai tineri, prin expunerea realizata de site-urile torrents.
Dar iata ca exista si concurenta: HTML art. Si arata impresionant. Nu credeti?



ps: e dat pe fast-forward sper...

miercuri, 5 noiembrie 2008

RSS Autodiscovery

Feed-urile RSS sunt la moda si deosebit de utile. Prin intermediul lor te poti "abona" la un site de stiri sau un blog, spre exemplu. Si vei fi notificat de fiecare data cand apare un articol nou. Feed-urile mai multor site-uri pot fi colectate si citite folosind aplicatii numite "RSS readers". Asadar nu mai trebuie sa intru pe fiecare site in parte si sa vad daca a aparut ceva nou.
Acum, daca esti proprietarul unui astfel de site/blog (si site-ul are suport RSS)... am aflat ca prin adaugarea catorva randuri de cod, browserele pot descoperi automat, in timpul navigarii utilizatorului, daca site-ul suporta RSS-feeds. Firefox si Safari 2.0 sunt doua browsere web care includ aceasta facilitate.
Cam asa arata notificarea ce apare in browsere:

Mai jos codul care trebuie adaugat in interiorul tagului head din codul sursa al paginii HTML:

Evident, atributele title si href se modifica in functie de necesitati.
Inca ceva! Daca se folosesc feed-uri ATOM, type va lua valoarea: application/atom+xml

marți, 4 noiembrie 2008

Ce este SEO ?

Probabil ca ati intalnit destul de des termenul SEO, dar nu stiti exact ce inseamna. Termenul SEO este o prescurtare a notiunii de Search Engine Optimization, care tradus inseamna optimizare pentru motoarele de cautare. Acest proces de optimizare are scopul de a pozitiona un site pe prima pagina intre rezultatele pe care un motor de cautare le afiseaza - este vorba de cazul unei cautari in functie de anumiti termeni predefiniti sau cuvinte cheie.

La inceputurile Internetului, motoarele de cautare afisau în urma unei cautari, pagini în a caror descriere se afla cuvantul cautat. Deoarece webmaster-ii au facut abuz de acest factor, motoarele de cautare au alcatuit algoritmi mult mai complecsi, care includ:

  • Textul din Tag-ul title
  • Nume de domeniu
  • Elementele HTML|Tag-urile HTML
  • Frecventa unui cuvant cheie, atat în pagina cat şi global
  • Sinonime ale cuvantului cheie
  • Atributele ALT pentru imagini
  • Titlul link-urilor
  • Numarul total de hyperlink-uri de la şi spre o pagina
  • Calitatea site-urilor de la care pleaca link-uri spre o pagina
  • Varsta unui site

File de istorie - Markup Languages (I)

Adnotarea/Structurarea datelor din documente/manuscrise este o practica veche, facand parte din procesul de publicare. In vremuri moderne, se pare ca prima mentionare a termenului "limbaj de adnotare" a avut loc la o conferinta din 1967, de catre William W. Tunnicliffe. Tunnicliffe a pus bazele GenCode, folosit in activitatea editoriala.

Apoi, prin anii 70, Donald Knuth a realizat
TeX, devenit un standard in industria editoriala. TeX s-a dovedit deosebit de util in structurarea si afisarea textelor matematice.

Totusi, primul limbaj de adnotare este considerat SGML - Standard Generalized Markup Language, aparut in anii 80. SGML a fost puternic influentat de Scribe, primul limbaj care a facut distinctie clara intre structura si prezentare. Scribe a fost dezvoltat de Brian Reid si prezentat in teza sa de doctorat, in 1980.SGML isi propunea la aparitie sa creeze documente ce pot fi analizate de catre masini prin introducerea de "marcaje" (sau "tag"-uri). SGML nu a fost un succes deoarece era foarte complex si punea probleme in dezvoltarea de programe care sa il foloseasca.
La inceputul anilor 90, la CERN, Tim Berners Lee dezvolta
HTML - HyperText Markup Language, pornind de la bazele puse de SGML, insa mult simplificat. Scopul sau a fost marcarea documentelor astfel incat sa poata fi transmise prin retea. Astazi, HTML este probabil cel mai raspandit limbaj de markup folosit pentru paginile Web. De ce?

Deoarece s-a pornit de la ideea de simplitate: browserele (programele care interpreteaza paginile Web) trebuie sa ignore marcajele si atributele pe care nu le inteleg, ceea ce a dus la o parsare rapida a informatiei continuta in document.

Succesul avut de Web a cauzat o dezvoltare rapida a browserelor care analizau marcajele HTML. Ca urmare a dezvoltarii HTML, apar marcaje si atribute care puteau fi scrise fara prea multe constranger, iar browserele au devenit foarte complexe. Pe de alta parte s-a sesizat utilizarea HTML-ului pentru adnotarea documentelor si o slabiciune de-a sa – faptul ca nu se pot adauga marcaje noi.

luni, 3 noiembrie 2008

Lansare proiect

Sarbatoare mare, eveniment unic: lansarea Interface-2-Web!!

Dan, Ionut si Vlad - echipa Interface2Web - isi propun sa aduca un aer proaspat in ceea ce priveste solutiile Web2.0. Prin urmare, va asteptam incepand de astazi pe http://interfete-web-evoluate.net. Stay tuned for more news! Si uita de pete!