Fii liber - Java http://fii-liber.ro/taguri/java ro Grupul utilizatorilor de Java din București http://fii-liber.ro/grupul-utilizatorilor-de-java-din-bucuresti <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"><p class="rtejustify">După modelul grupurilor de utilizatori de Linux (en. LUG, <a href="http://wiki.lug.ro/Pagina_principal%C4%83">Linux User Group</a>) și celor de programe libere (en. FSUG, <a href="http://epfsug.eu/">Free Software User Group</a>), o comunitate românească a programatorilor în limbajul Java a început să își facă simțită prezența. Pe data de 24 mai, membrii săi au organizat prima întrunire a grupului de utilizatori de Java din București (en JUG - <a href="http://bucharest-jug.github.com/editii/1.html#lang-ro">Java User Group</a>). Cele trei prezentări ale primei ediții au fost ținute la sediul <a href="http://ceata.org/">comunității Ceata</a>.</p> <p> <a class="colorbox colorbox-insert-image" href="http://fii-liber.ro/sites/default/files//P1050418.JPG" rel="gallery-all" title=""><img alt="" class="image-medium" src="http://fii-liber.ro/sites/default/files//styles/medium/public/P1050418.JPG" style="margin: 5px 10px; float: right; border-width: 0px; border-style: solid;" title="" typeof="foaf:Image" /></a>Prima prezentare a fost ținută de Andrei Savu și a prezentat proiectul <a href="http://fii-liber.ro/sites/default/files//Bucharest%20JUG%20%231%20-%20Guava%20Overview.odp">Guava.</a> Acesta conţine mai multe biblioteci elementare pe care se bazează proiectele companiei Google scrise în limbajul Java. Guava oferă suport pentru: colecţii, zone de stocare tampon (en. cache), primitive, biblioteci concurente, adnotări comune, prelucrare de șiruri de caractere și altele.</p> <p class="rtejustify">Mihai Soloi a vorbit despre noile funcționalități incluse în <a href="http://fii-liber.ro/sites/default/files//Maven%203%20Bucharest%20JUG%20%231.odp">Apache Maven 3</a>. Apache Maven este o unealtă pentru organizarea și înțelegerea proiectelor. Pornind de la conceptul de model obiectual al proiectului (en. project object model - POM), Maven poate organiza construirea, raportarea și documentația unui proiect stocând într-un loc central informația necesară.</p> <p class="rtejustify">Ioan Eugen Stan a vorbit despre <a href="http://fii-liber.ro/sites/default/files//Apache%20James_%20more%20than%20emails%20in%20the%20cloud%20-%20Bucharest%20JUG.odp">Apache James</a>. Proiectul Apache James oferă un set bogat de module și biblioteci libere, scrise folosind limbajul Java, care au legătură cu sistemul de comunicare al poște electronice pe Internet. Acestea formează un server avansat pentru poșta electronică.</p> <p class="rtejustify">În prezent, grupul pregătește o <a href="http://bucharest-jug.github.com/editii/2.html">a doua ediție</a> pe data de 21 iunie la sediul companiei Teamnet și își propune să organizeze lunar astfel de evenimente. Ca utilizator al limbajului Java, sunt extrem de încântat de această inițiativă și sunt foarte nerăbdător să particip la următoarele ediții de prezentat și hăcuit tehnologii libere de Java.</p> <p> Imaginea și cele trei prezentări au sunt distribuite sub licența liberă <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons BY-SA 3.0</a> de către autorii lor.</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above clearfix"><h3 class="field-label">Meniu: </h3><ul class="links"><li class="taxonomy-term-reference-0"><a href="/stiri" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Știri</a></li><li class="taxonomy-term-reference-1"><a href="/tehnologie" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Tehnologie</a></li></ul></div><div class="field field-name-taxonomy-vocabulary-3 field-type-taxonomy-term-reference field-label-above clearfix"><h3 class="field-label">Etichete: </h3><ul class="links"><li class="taxonomy-term-reference-0"><a href="/taguri/jug" typeof="skos:Concept" property="rdfs:label skos:prefLabel">jug</a></li><li class="taxonomy-term-reference-1"><a href="/taguri/java" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Java</a></li><li class="taxonomy-term-reference-2"><a href="/taguri/bucure%C8%99ti" typeof="skos:Concept" property="rdfs:label skos:prefLabel">bucurești</a></li><li class="taxonomy-term-reference-3"><a href="/taguri/guava" typeof="skos:Concept" property="rdfs:label skos:prefLabel">guava</a></li><li class="taxonomy-term-reference-4"><a href="/taguri/maven" typeof="skos:Concept" property="rdfs:label skos:prefLabel">maven</a></li><li class="taxonomy-term-reference-5"><a href="/taguri/james" typeof="skos:Concept" property="rdfs:label skos:prefLabel">james</a></li><li class="taxonomy-term-reference-6"><a href="/taguri/hacaton" typeof="skos:Concept" property="rdfs:label skos:prefLabel">hacaton</a></li></ul></div> Mon, 18 Jun 2012 12:43:37 +0000 andreicristianpetcu 205 at http://fii-liber.ro http://fii-liber.ro/grupul-utilizatorilor-de-java-din-bucuresti#comments Java și MySQL http://fii-liber.ro/java-%C8%99i-mysql <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"><p>Acest articol este o introducere în integrarea dintre o aplicație <a href="http://www.java.com/en/">Java</a> și o bază de date <a href="http://www.mysql.com">MySQL</a>.</p> <p>Java este un limbaj de programare orientat pe obiecte și foarte popular iar MySQL este un sistem liber de baze de date. Pentru informații suplimentare vezi secțiunea legături utile. </p> <h1>Motivație și obiective</h1> <p>Bazele de date sunt folosite la scară largă chiar și atunci când nu este imperios necesar, iar mulți începători de Java întâmpină probleme la integrarea dintre aplicația lor și sistemul de baze de date MySQL. Acest articol vrea să-i ajute și să ofere un model de interoperabilitate între utilizator, prin interfața grafică implementată în <strong>Swing</strong> și baza de date. Codul scris ca exemplu este liber, simplu și robust.</p> <!--break--><p>În urma parcurgerii acestui articol și a codului aferent vei ști:</p> <ul><li>să creezi programatic o tabelă MySQL, dintr-un script</li> <li>să te conectezi la MySQL, folosind diverși parametri</li> <li>să execuți comenzi MySQL și să prelucrezi rezultatul acestora</li> <li>să afișezi într-o interfață grafică informații întoarse de comenzi MySQL</li> <li>să compilezi "profesionist" o aplicație Java </li> </ul><h1>Detalii de implementare</h1> <ul><li>Codul este disponibil pe SVN-ul Cetei: <a href="http://ceata.org/svn/strajer/atelier_programare/JavaMysql/">http://ceata.org/svn/strajer/atelier_programare/JavaMysql/</a></li> <li>Pentru conectarea la baza de date avem nevoie de:</li> </ul><ol><li>Un conector, pus la dispoziție de MySQL: lib/mysql-connector-java-5.1.12-bin.jar</li> <li>Legarea aplicației noatre la conector; conectorul este un jar (Java Archive) și este adăugat în CLASSPATH (variabila analizată mașina virtuală de Java pentru rezolvarea simbolurilor). Implementarea se găsește în scriptul de compilare.</li> </ol><ul><li> <p>Pașii algoritmului sunt:</p> </li> </ul><ol><li> <p>Încărcarea modului MySQL</p> <p> <code>Class.forName("com.mysql.jdbc.Driver");</code></p></li> <li> <p>Conectarea la baza de date, folosind adresa serverului (localhost dacă este un server local), nume utilizator și parolă</p> <p> <code>m_connection = DriverManager.getConnection(url, user, pass);</code></p></li> <li> <p>Execuția unei comenzi SQL</p> <p> <code>command = "SELECT * FROM Articole";<br /> stmt = m_connection.prepareStatement(command);<br /> result = stmt.executeQuery();</code></p></li> <li> <p>Prelucrarea rezultatului întors de o comandă</p> <p> <code>while (result.next()){<br /> // <id> și <titlu> sunt coloane în tabelă<br /> String id = result.getString("id");<br /> String titlu = result.getString("titlu");<br /> String popularitate = result.getString("popularitate");<br /> System.out.println(id + Constants.SEPAR + titlu + Constants.SEPAR + popularitate);<br /> }</titlu></id></code></p></li> </ol><ul><li>Spor la studiat codul! </li> </ul><h1>Compilarea aplicației</h1> <ul><li>Pentru compilarea fișierelor surse am scris un fișier <a href="ttp://ant.apache.org">ant</a><strong> build.xml</strong></li> </ul><ol><li>Compilare:</li> <p> <code>$ ant</code></p> <li>Curățenie:</li> <p> <code>$ ant clean</code></p> <li>Rularea aplicației în mod text</li> <p> <code>$ ant run</code></p> <li>Rularea aplicației cu interfață grafică</li> <p> <code>$ ant gui</code></p></ol><h1>Date de test</h1> <ul><li>Datele de teste se adaugă printr-un script: <strong>fii-liber.sh</strong></li> <p> <code>mysql -u $USER -p$PASSWORD &lt; fii-liber.sql</code></p> <li>Fișierul SQL: <strong>fii-liber.sql</strong></li> <p> <code>CREATE DATABASE IF NOT EXISTS fiiliber_db;<br /> USE fiiliber_db;<br /></code><br /><code>DROP TABLE IF EXISTS `Articole`;<br /> CREATE TABLE `Articole` (<br /> `id` int(10) unsigned NOT NULL auto_increment,<br /> `titlu` varchar(45) NOT NULL,<br /> `popularitate` int(10) unsigned NOT NULL,<br /> PRIMARY KEY (`id`)<br /> ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;<br /></code><br /><code>INSERT INTO `Articole` (`titlu`,`popularitate`) VALUES <br /> ('OpenShot', 7),<br /> ('FLAC', 3),<br /> ('Eclipse IDE', 10),<br /> ('Vara 2010 Ceata', 5),<br /> ('Hacherii GNU', 21),<br /> ('Ghid introductiv in GNU Emacs', 15);</code></p></ul><h1>Imagini</h1> <ul><li>Afișarea tabelelor din baza de date</li> <p> <code>SHOW TABLES;</code><br /><a href="http://ceata.org/atasamente/300/java-mysql1.png"> <img height="438" width="700" src="http://ceata.org/atasamente/300/java-mysql1.png" alt="" /></a> </p> <li>Descrierea structurii tabelei <strong>Articole</strong></li> <p> <code>DESCRIBE Articole;</code><br /><a href="http://ceata.org/atasamente/301/java-mysql2.png"> <img height="438" width="700" src="http://ceata.org/atasamente/301/java-mysql2.png" alt="" /></a> </p> <li>Afișarea conținutului tabelei</li> <p> <code>SELECT * FROM Articole;</code><br /><a href="http://ceata.org/atasamente/302/java-mysql3.png"> <img height="438" width="700" src="http://ceata.org/atasamente/302/java-mysql3.png" alt="" /></a> </p> <li>Sortarea articolelor după popularitate</li> <p> <code>SELECT * FROM Articole ORDER BY popularitate ASC;</code><br /><a href="http://ceata.org/atasamente/303/java-mysql4.png"> <img height="438" width="700" src="http://ceata.org/atasamente/303/java-mysql4.png" alt="" /></a> </p> <li>Aflarea celui mai popular articol</li> <p> <code>SELECT * FROM Articole where popularitate = (select MAX(popularitate) FROM Articole);</code><br /><a href="http://ceata.org/atasamente/304/java-mysql5.png"> <img height="438" width="700" src="http://ceata.org/atasamente/304/java-mysql5.png" alt="" /></a></p></ul><h1>Optimizări</h1> <p>Baza de date și interogările de mai sus nu sunt optimizate. Mulțumim lui Doru Ilași pentru optimizări:</p> <ol><li>Aflarea celui mai popular articol</li> <p> <code>SELECT * FROM Articole ORDER BY popularitate DESC LIMIT 1;</code></p> <li>Index pe câmpul popularitate</li> <p> <code>CREATE INDEX indexul_meu ON Articole (popularitate);</code></p></ol><h1>Legături utile</h1> <ul><li><a href="http://ceata.org/atasamente/300/java-mysql1.png">Infrastructura Java (compilator și mașină virtuală) folosită: </a><a href="http://openjdk.java.net">OpenJDK</a></li> <li>Pagina oficială <a href="http://www.mysql.com">MySQL</a></li> <li>Documentația oficială a <a href="http://dev.mysql.com/usingmysql/java">integrării Java-MySQL</a></li> <li><a href="http://www.phpmyadmin.net/home_page/index.php">http://www.phpmyadmin.net/home_page/index.php</a></li> </ul></div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above clearfix"><h3 class="field-label">Meniu: </h3><ul class="links"><li class="taxonomy-term-reference-0"><a href="/ghiduri" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Ghiduri</a></li><li class="taxonomy-term-reference-1"><a href="/tehnologie" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Tehnologie</a></li></ul></div><div class="field field-name-taxonomy-vocabulary-3 field-type-taxonomy-term-reference field-label-above clearfix"><h3 class="field-label">Etichete: </h3><ul class="links"><li class="taxonomy-term-reference-0"><a href="/taguri/java" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Java</a></li><li class="taxonomy-term-reference-1"><a href="/taguri/mysql" typeof="skos:Concept" property="rdfs:label skos:prefLabel">MySQL</a></li></ul></div> Sun, 04 Jul 2010 20:54:31 +0000 Laurențiu Dascălu 55 at http://fii-liber.ro http://fii-liber.ro/java-%C8%99i-mysql#comments Program de indexare a paginilor de Internet http://fii-liber.ro/Program-de-indexare-a-paginilor-de-Internet <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"><h1>Web crawler</h1> <p><strong>Un program de indexare (web crawler/web spider)</strong> 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.</p> <p>Dacă nu ați auzit de <a href="http://en.wikipedia.org/wiki/Java_%28programming_language%29">Java</a>, 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 <strong>The Java Language Specification, Third Edition</strong>. Am menționat acest aspect pentru că este important de înțeles că are cel puțin două implementări: una liberă (<a href="http://openjdk.java.net/">openjdk</a>) și una proprietară. Pentru dezvoltare și testare noi am folosit <strong>openjdk</strong>.</p> <!--break--><p>Voiam să scriem un program foarte simplu care scoate poze de profil ale utilizatorilor <strong>unei rețele sociale</strong>, pornind de la un utilizator inițial, "sămânță" (seed).</p> <h1>Algoritmul în pseudocod</h1> <p><code> Pune în coadă <em>seed user</em> </code></p> <p><code>while (Nu am ajuns la depășit limita de poze salvate și coada este nevidă) </code></p> <p><code>{</code></p> <p><code>     </code><code>Extrage din coadă un utilizator</code></p> <p><code>     Salvează poza de profil</code></p> <p><code>     Află lista de prieteni ai acestui utilizator, printr-o cerere de tip REST</code></p> <p><code>     foreach (prieten în lista de prieteni)</code></p> <p><code>         Pune în coadă <em>prieten</em>, dacă nu i-am salvat deja poza </code></p> <p><code>} </code></p> <h1><strong>De ce am ales Java?</strong></h1> <p>Pentru că putem implementa foarte rapid algoritmul de mai sus; suportul pentru comunicarea pe rețea cu serverul, prin <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a> este nativă (inclusă în limbaj) și există biblioteci pentru parsarea XML-ului primit de la server. Astfel codul rezultat, <strong>gheare</strong>, nu măsoară mai mult de 150 de linii.</p> <p>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ă:</p> <ul><li><a href="http://dev.mysql.com/usingmysql/java/">MySQL</a> - baze de date</li> <li><a href="http://www.junit.org/">JUnit</a>, <a href="http://logging.apache.org/log4j/">log4j</a> - testarea și urmărirea evoluției codului</li> <li><a href="http://hadoop.apache.org/">Hadoop</a>, <a href="http://hadoop.apache.org/hbase/">HBase</a>, <a href="http://www.jboss.org/">JBoss</a>, <a href="http://www.springsource.org/">Spring</a> - programare distribuită</li> <li><a href="http://eclipse.org/">Eclipse</a>, <a href="http://netbeans.org/">Netbeans</a> - mediu de dezvoltare integrat; comportamentul IDE-ului se poate defini prin extensii (plugin-uri)</li> <li>Swing, <a href="http://www.wingsframework.org/cms/">wingS</a> - programare grafică</li> <li>și multe alte <strong>biblioteci libere</strong></li> </ul><h1><strong>Ce probleme am avut</strong></h1> <p>Java se ocupă de managementul memoriei, printr-un <a href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29">mecanism de colectare a resurselor ocupate nefolosite (garbage collector)</a>, și aplicația crăpa dacă nu-i dădeam suficientă memorie: <code>java -Xmx2048M Gheare</code>.</p> <h1><strong>Ce alternative libere există?</strong></h1> <p>Foarte multe :-). <a href="http://www.ruby-lang.org/en/">Ruby</a> și <a href="http://www.python.org/">Python</a> sunt doar câteva din numeroasele limbaje în care putem fi productivi.</p> <h1><strong>Ce alternative proprietare există?</strong></h1> <p>În mod cert, C# cu .NET este <em>cea mai proprietară</em> 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.</p> <h1><strong>Rezultat</strong></h1> <p><img alt="Gheare în acțiune" src="http://ceata.org/atasamente/3/gheare.jpg" /></p> <h1><strong>Sfârșit</strong></h1> <p><a href="http://ceata.org">Ceata</a> organizează periodic <a href="http://ceata.org/proiecte/strajer/wiki/Ateliere_de_programare">ateliere de programare</a> pe diverse tehnologii. Scopul acestor <a href="http://en.wikipedia.org/wiki/Hackathon">hacatoane</a> 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.</p> <p>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 voastre, precum și idei pe care să le punem în practică la următorul atelier.</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-3 field-type-taxonomy-term-reference field-label-above clearfix"><h3 class="field-label">taguri: </h3><ul class="links"><li class="taxonomy-term-reference-0"><a href="/taguri/java" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Java</a></li><li class="taxonomy-term-reference-1"><a href="/taguri/crawler" typeof="skos:Concept" property="rdfs:label skos:prefLabel">crawler</a></li></ul></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above clearfix"><h3 class="field-label">meniu: </h3><ul class="links"><li class="taxonomy-term-reference-0"><a href="/tehnologie" typeof="skos:Concept" property="rdfs:label skos:prefLabel">Tehnologie</a></li></ul></div> Mon, 10 May 2010 21:37:05 +0000 Laurențiu Dascălu 20 at http://fii-liber.ro http://fii-liber.ro/Program-de-indexare-a-paginilor-de-Internet#comments