Program de indexare a paginilor de Internet

Un program de indexare (web crawler/web spider) este un program sau un script automatizat care folosește o structură hyperlink a web-ului pentru a indexa paginile și conținutul într-o manieră metodică. Ne doream să scriem o astfel de aplicație de la 0 pentru a învăța lucruri noi.

Dacă nu ați auzit de Java, e bine de știut că este un limbaj de programare foarte popular. Specificațiile limbajului sunt libere și le puteți găsi în cartea The Java Language Specification, Third Edition. Am menționat acest aspect pentru că este important de înțeles că are cel puțin două implementări: una liberă (openjdk) și una proprietară. Pentru dezvoltare și testare noi am folosit openjdk.

Voiam să scriem un program foarte simplu care scoate poze de profil ale utilizatorilor unei rețele sociale, pornind de la un utilizator inițial, "sămânță" (seed). În pseudocod algoritmul arată în felul următor:

Pune în coadă seed user
while (Nu am ajuns la depășit limita de poze salvate și coada este nevidă)
{
    Extrage din coadă un utilizator
    Salvează poza de profil
    Află lista de prieteni ai acestui utilizator, printr-o cerere de tip REST
    foreach (prieten în lista de prieteni)
        Pune în coadă prieten, dacă nu i-am salvat deja poza
}

De ce am ales Java?
Pentru că putem implementa foarte rapid algoritmul de mai sus; suportul pentru comunicarea pe rețea cu serverul, prin REST este nativă (inclusă în limbaj) și există biblioteci pentru parsarea XML-ului primit de la server. Astfel codul rezultat, gheare, nu măsoară mai mult de 150 de linii.

Java este o platformă și codul Java este portabil 100%, inclusiv pe telefoane mobile. După părerea mea, numeroasele biblioteci libere sunt principalul motiv pentru care Java este atât de popular. O listă sumară:

  • MySQL - baze de date
  • JUnit, log4j - testarea și urmărirea evoluției codului
  • Hadoop, HBase, JBoss, Spring - programare distribuită
  • Eclipse, Netbeans - mediu de dezvoltare integrat; comportamentul IDE-ului se poate defini prin extensii (plugin-uri)
  • Swing, wingS - programare grafică
  • și multe alte biblioteci libere

Ce probleme am avut
Java se ocupă de managementul memoriei, printr-un mecanism de colectare a resurselor ocupate nefolosite (garbage collector), și aplicația crăpa dacă nu-i dădeam suficientă memorie: java -Xmx2048M Gheare.

Ce alternative libere există?
Foarte multe :-). Ruby și Python sunt doar câteva din numeroasele limbaje în care putem fi productivi.

Ce alternative proprietare există?
În mod cert, C# cu .NET este cea mai proprietară alternativă. Chiar nu vreau să folosesc o interfață de programare despre care nu pot afla cum este implementată. E ca și când ai folosi o mașină și nu poți umbla sub capota ei.

Rezultat

Sfârșit
Ceata organizează periodic ateliere de programare pe diverse tehnologii. Scopul acestor hacatoane este familiarizarea cu ultimele tehnologii și îmbunătățirea modului în care lucrăm în echipă. În acest articol am descris ce-am reușit să creăm în primul atelier, folosind Java și bibliotecile libere care extind acest limbaj.

Cam atât despre Java, dacă vreți să aflați mai multe intrați pe pagina atelierelor de programare. Așteptăm comentariile și sugestiile tale, precum și idei pe care să le punem în practică la următorul atelier.