<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SlashCode &#187; java</title>
	<atom:link href="http://davideaversa.it/slashcode/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://davideaversa.it/slashcode</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 14:28:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Oltre Java: Ceylon</title>
		<link>http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/</link>
		<comments>http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 11:50:39 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[TheSlashCodeProject]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[ceylon]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=811</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/"><img title="Oltre Java: Ceylon" src="http://davideaversa.it/slashcode/wp-content/uploads/2012/04/ceylon_icon_128px.png" alt="Oltre Java: Ceylon"  width="200" height="200" /></a></div><br/>Chi mi conosce sa bene il mio rapporto di amore-odio con Java. Amore perché Java è un linguaggio performante, di alto livello e soprattutto portabile. L&#8217;ho usato spesso, lo uso tutt&#8217;ora e ci ho fatto addirittura del game development. Odio perché, proprio perché ci ho combattuto tanto, ne conosco tutti i difetti, i limiti e <a href='http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2012%2F04%2Foltre-java-ceylon%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Oltre Java: Ceylon" data-url="http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Chi mi conosce sa bene il mio rapporto di amore-odio con <strong>Java</strong>. <strong>Amore perché</strong> Java è un linguaggio performante, di alto livello e soprattutto portabile. L&#8217;ho usato spesso, lo uso tutt&#8217;ora e ci ho fatto addirittura del game development. <strong>Odio perché</strong>, proprio perché ci ho combattuto tanto, ne conosco tutti i difetti, i limiti e le idiosincrasie. Java è sintatticamente prolisso e ha qualche problema di &#8220;vecchiaia&#8221; che andrebbe risolto (ed <a href="http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java">il confronto con C# è impietoso</a>). <span id="more-811"></span></p>
<p>Giusto per fare un esempio in Java è abitudine leggere (o scrivere) codice raccapricciante quale</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">foo.setAttributeX(bar.getAttributeY());</div></div>
<p>che in C# si risolve con un semplice</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">foo.X = bar.Y;</div></div>
<p>Qualcuno considererà questa caratteristica (tecnicamente si parla di <em>Accessor</em> e <em>Mutators</em>) un puro vezzo sintattico, ma quando si lavora con decine e decine di classi vi posso assicurare che questo facilita di un fattore dieci la produttività e la manutenibilità del codice. Problemi come questo ed altri più &#8220;concreti&#8221; sono ciò che mi hanno spinto a passare <em>al lato oscuro della forza</em> ogni qualvolta mi è possibile.</p>
<p><img src="http://davideaversa.it/slashcode/wp-content/uploads/2012/04/ceylon_icon_128px.png" alt="" title="Ceylon Icon" width="128" height="128" class="alignleft size-full wp-image-812" /></p>
<p>In attesa che Java venga riformato (sperando nella <a href="ww.theregister.co.uk/2011/10/03/java8_revolution_not_evolution_oracle/">rivoluzionaria (?) versione 8 e 9 del linguaggio</a>) la comunità si è messa in moto in modo autonomo. Uno dei progetti a mio avviso più interessanti è senza dubbio <strong><a href="http://ceylon-lang.org/">Ceylon</a></strong>, di <strong>Red-Hat</strong>.</p>
<p>Ceylon è un linguaggio JVM-based, ovvero che viene compilato generando <em>byte-code</em> compatibile con la Java Virtual Machine. Questo garantisce due vantaggi: il linguaggio sfrutta la portabilità e le ottime performance della JVM ed è potenzialmente compatibile con le librerie Java esistenti.</p>
<p>Ceylon è un linguaggio molto interessante perché non solo alleggerisce Java da tutti gli inutili orpelli sintattici di cui è infestato ma aggiunge anche una sorta di dinamismo opzionale nella gestione delle variabili (tramite il tipo jolly <em>value</em>). Ma facciamo qualche esempio.</p>
<div class="codecolorer-container java dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">doc <span style="color: #0000ff;">&quot;The classic Hello World program&quot;</span><br />
by <span style="color: #0000ff;">&quot;Gavin&quot;</span><br />
see <span style="color: #009900;">&#40;</span>goodbye<span style="color: #009900;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a><span style="color: #009900;">&#41;</span><br />
<span style="color: #000066; font-weight: bold;">void</span> hello<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; value message <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Hello,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;World!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; print<span style="color: #009900;">&#40;</span>message.<span style="color: #006633;">normalized</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Come non partire dal mitico <em>&#8220;Hello, World!&#8221;</em>? In realtà non è un &#8220;Hello, World!&#8221; semplice perché ci mostra due nuove caratteristiche del linguaggio. La prima è il modo con cui vengono documentati metodi e classi: niente commenti,  ma una sintassi specifica che può essere letta dal generatore di documentazione integrato di Ceylon. La seconda è il tipo variabile <code class="codecolorer text dawn"><span class="text">value</span></code> che può essere usato per simulare una certa dinamicità del linguaggio. Da notare però che nessuno ci obbliga ad usarlo: se siamo sicuri che la variabile <code class="codecolorer text dawn"><span class="text">message</span></code> sia una stringa possiamo direttamente dichiararla come tale tramite <code class="codecolorer text dawn"><span class="text">String message</span></code>.</p>
<p>Un&#8217;altra funzionalità molto utile è l&#8217;operatore di <em>null check</em>. Vediamolo in azione:</p>
<div class="codecolorer-container java dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> shoutedGreeting <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;HELLO, &quot;</span> <span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name<span style="color: #339933;">?</span>.<span style="color: #006633;">uppercased</span> <span style="color: #339933;">?</span> <span style="color: #0000ff;">&quot;WORLD&quot;</span><span style="color: #339933;">;</span></div></div>
<p>In questo esempio troviamo i due operatori in azione. Il primo è l&#8217;operatore <strong>&#8220;?&#8221;</strong>. Considerando il codice precedente, tale operatore restituisce <code class="codecolorer text dawn"><span class="text">name.uppercased</span></code> se e solo se quest&#8217;ultimo è diverso da <code class="codecolorer text dawn"><span class="text">null</span></code>, altrimenti restituisce il valore che lo segue (in questo caso la stringa &#8220;WORLD&#8221;). L&#8217;altro operatore nell&#8217;esempio è <strong>&#8220;?.&#8221;</strong>. Quest&#8217;ultimo fa in modo che si acceda alla funzione/attributo <code class="codecolorer text dawn"><span class="text">uppercased</span></code> se e solo se <code class="codecolorer text dawn"><span class="text">name</span></code> è diverso da <code class="codecolorer text dawn"><span class="text">null</span></code>. Questi due operatori ci risparmiano quindi tutta una serie di noiosi &#8220;if&#8221; annidati!</p>
<p>Le caratteristiche di Ceylon sono numerosissime e per maggiori informazioni vi rimando alla loro <a href="http://ceylon-lang.org/documentation/1.0/tour/basics/">pagina ufficiale</a>. Ceylon è ancora in fase di sviluppo ma è già possibile scaricare delle versioni preliminari!</p>
<p>Come se non bastasse è in progetto lo sviluppo di un backend che compili Ceylon in JavaScript rendendone possibile l&#8217;uso anche per lo sviluppo di applicazioni web.</p>
<p>Insomma, Ceylon è un progetto che vi consiglio caldamente di tenere d&#8217;occhio! </p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=811&amp;md5=3517c61620eabb35afb16675110a175d" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2012%2F04%2Foltre-java-ceylon%2F&amp;language=it_IT&amp;category=text&amp;title=Oltre+Java%3A+Ceylon&amp;description=Chi+mi+conosce+sa+bene+il+mio+rapporto+di+amore-odio+con+Java.+Amore+perch%C3%A9+Java+%C3%A8+un+linguaggio+performante%2C+di+alto+livello+e+soprattutto+portabile.+L%26%238217%3Bho+usato+spesso%2C+lo+uso...&amp;tags=C%2Cceylon%2Cjava%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Android NON è in Java</title>
		<link>http://davideaversa.it/slashcode/2011/07/android-non-e-in-java/</link>
		<comments>http://davideaversa.it/slashcode/2011/07/android-non-e-in-java/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 22:14:11 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[dalvik]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=771</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2011/07/android-non-e-in-java/"><img title="Android NON è in Java" src="http://davideaversa.it/slashcode/wp-content/uploads/2011/07/Google-Android-army-150x150.jpg" alt="Android NON è in Java"  width="200" height="200" /></a></div><br/>Intendiamoci, il titolo dell'articolo è volutamente provocatorio e non dobbiamo pensare che Java non c'entri nulla con Android, piuttosto dobbiamo capire dove si ferma Java e dove comincia il resto.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fandroid-non-e-in-java%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2011/07/android-non-e-in-java/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Android NON è in Java" data-url="http://davideaversa.it/slashcode/2011/07/android-non-e-in-java/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><a href="http://davideaversa.it/slashcode/wp-content/uploads/2011/07/Google-Android-army.jpg"><img src="http://davideaversa.it/slashcode/wp-content/uploads/2011/07/Google-Android-army-150x150.jpg" alt="" title="Google Android" width="150" height="150" class="alignleft size-thumbnail wp-image-772" /></a></p>
<p>La notizie e le informazioni in internet vanno sempre verificate. Molte cose infatti si tramandano di bocca in bocca (o di tastiera in tastiera) fino a confondersi. Le senti ripetere talmente tante volte che alla fine te ne convinci e le accetti acriticamente.</p>
<p>Arriva poi il giorno che ti informi e scopri che le cose non sono proprio così o che, in fondo, sono molto più complesse. Fra questo ricade anche l&#8217;asserzione <strong>Android è scritto in Java</strong>.</p>
<p><span id="more-771"></span></p>
<p><strong>Android non è scritto in Java?</strong></p>
<p>Si e no. Intendiamoci, il titolo dell&#8217;articolo è volutamente provocatorio e non dobbiamo pensare che Java non c&#8217;entri nulla con Android, piuttosto dobbiamo capire dove si ferma Java e dove comincia il resto.</p>
<p>Per prima cosa Android è scritto in C. Il kernel è Linux e tutti i ricami sovrastanti sono scritti ovviamente in C. Sembra banale ma ho sentito dire che il kernel di Android è scritto in Java&#8230; quindi meglio essere puntuali.</p>
<p>Seconda cosa. La gran parte dello strato applicativo poggia su <strong>Dalvik</strong>.</p>
<p><strong>Ovvero la nota Java Virtual Machine. Giusto?</strong></p>
<p>Si e no. Anche qui dobbiamo essere precisi. Quando uno dice <em>&#8220;le applicazioni di Android sono in Java&#8221;</em> apre un mondo di se e di ma. </p>
<p>Quando pensiamo a un applicazione in Java pensiamo alle applicazioni Java che girano sul mattone delle Java VM standard. Quando facciamo questa affermazione diamo l&#8217;idea che anche le applicazioni di Android siano dello stesso tipo e girino su una VM equivalente. Ma questo è completamente falso!</p>
<p><strong>Dalvik non esegue codice Java?</strong></p>
<p><strong>NO!</strong> Questo ci tengo a specificarlo perché è la chiave di tutto il discorso. Dalvik non esegue e compila il codice Java! <strong>Dalvik compila il Java bytecode ed esegue il Dalvik Bytecode!</strong> La differenza è abissale, enorme, è come la differenza fra il codice Morse e il Dolce Stil Novo. Basti pensare che il Java Bytecode (quello dei file .class) esegue istruzioni codificate in 8-bit invece dei 16-bit delle istruzioni di Dalvik (nei file eseguibili .dex).</p>
<p><strong>In ogni caso se Dalvik compila il Java ByteCode non è la stessa cosa?</strong></p>
<p>Assolutamente No. <em>Sarebbe come dire che io so il giapponese perché so tradurre in italiano le scritte giapponesi che qualcuno mi traduce in inglese.</em> </p>
<p>Inoltre questa caratteristica permette (in teoria) di utilizzare linguaggi alternativi a Java in modo piuttosto semplice. Ad esempio possiamo scrivere applicazioni per Dalvik anche in Python a patto di compilare il codice Python in Java ByteCode (ad esempio usando Jython ). Il codice compilato in questo modo può quindi passare per Dalvik che lo convertirà in file .dex.</p>
<p>Usare Python (o altri linguaggi) per programmare in Android è tuttavia attualmente impossibile. Tutte le librerie di sistema Android (le API che scarichiamo quando configuriamo l&#8217;ambiente) sono scritte in Java, tuttavia se qualcuno avesse pazienza e voglia di convertire tali librerie in Python (compatibile con Jython) si potrebbe usare questo linguaggio in modo quasi trasparente.</p>
<p><strong>Quindi Dalvik non è una Java VM?</strong></p>
<p>Dalvik è una VM che interpreta il Java ByteCode. La differenza è molto sottile concettualmente ma importante per non fare confusione.</p>
<p>Inoltre ci sono numerosissime altre differenze con la Java VM di cui molte incentrate all&#8217;ottimizzazione del sistema su dispositivi mobili e con risorse limitate che potete scoprire cercando Dalvik su uno qualsiasi dei motori di ricerca.</p>
<p><strong>A me, sviluppatore, cosa cambia?</strong></p>
<p>Nulla. Tu sviluppatore scriverai applicazioni per Android in Java. Di chi compila ed esegue il tuo codice non ti interessa. Quindi per te le applicazioni Android sono in Java. </p>
<p>Ora però sai che la situazione è più complessa di così e la consapevolezza di come funzionano le cose in realtà le cose è l&#8217;arma più potente di ogni sviluppatore.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=771&amp;md5=adee6886b2e8087db9c3810d0c9f053d" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2011/07/android-non-e-in-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fandroid-non-e-in-java%2F&amp;language=it_IT&amp;category=text&amp;title=Android+NON+%C3%A8+in+Java&amp;description=La+notizie+e+le+informazioni+in+internet+vanno+sempre+verificate.+Molte+cose+infatti+si+tramandano+di+bocca+in+bocca+%28o+di+tastiera+in+tastiera%29+fino+a+confondersi.+Le+senti+ripetere...&amp;tags=android%2Cdalvik%2Cjava%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Introduzione ai plugin per Firefox</title>
		<link>http://davideaversa.it/slashcode/2009/11/introduzione-ai-plugin-per-firefox/</link>
		<comments>http://davideaversa.it/slashcode/2009/11/introduzione-ai-plugin-per-firefox/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 10:28:14 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=462</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/11/introduzione-ai-plugin-per-firefox/"><img title="Introduzione ai plugin per Firefox" src="http://davideaversa.it/slashcode/wp-content/uploads/2009/11/firefox-150x150.jpg" alt="Introduzione ai plugin per Firefox"  width="200" height="200" /></a></div><br/>Tutti conoscono Firefox. Tutti conoscono l'infinito numerabile dei suoi plugin. Pochi sanno però come cominciare a sviluppare tali plugin. E a questo serve questo piccolo tutorial. Non vedremo ora quali sono i passi per sviluppare un plugin ma vi mostrerò i passi e gli strumenti preliminari che servono a semplificare lo sviluppo. Ma cominciamo subito senza perderci in chiacchiere.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F11%2Fintroduzione-ai-plugin-per-firefox%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/11/introduzione-ai-plugin-per-firefox/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Introduzione ai plugin per Firefox" data-url="http://davideaversa.it/slashcode/2009/11/introduzione-ai-plugin-per-firefox/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft size-thumbnail wp-image-463" title="Firefox" src="http://davideaversa.it/slashcode/wp-content/uploads/2009/11/firefox-150x150.jpg" alt="Firefox" width="150" height="150" />Tutti conoscono Firefox. Tutti conoscono l&#8217;infinito numerabile dei suoi plugin. Pochi sanno però come cominciare a sviluppare tali plugin. E a questo serve questo piccolo tutorial. Non vedremo ora quali sono i passi per sviluppare un plugin ma vi mostrerò i passi e gli strumenti preliminari che servono a semplificare lo sviluppo. Ma cominciamo subito senza perderci in chiacchiere.</p>
<p><strong>CONFIGURARE L&#8217;AMBIENTE</strong></p>
<p>La prima cosa da fare, per evitare di incasinare le configurazioni originali, è quello di creare un nostro profilo di sviluppo. Possiamo lanciarlo semplicemente con:</p>
<p><code class="codecolorer bash dawn"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>firefox <span style="color: #660033;">-no-remote</span> <span style="color: #660033;">-P</span> dev</span></code></p>
<p>In questo modo avvieremeno un&#8217;altro profilo di firefox chiamato <em>dev</em>.</p>
<p>Adesso dobbiamo impostare alcune opzioni che ci permetteranno di ottenere un maggior numero di informazioni sulle attività di firefox e un maggior controllo su di esse. Apriamo il classico <em>about:config</em> e all&#8217;interno impostiamo le seguenti variabili:</p>
<ul>
<li><strong>javascript.options.showInConsole</strong> = <strong>true</strong>. Abilita il Log di molti errori.</li>
<li><strong>nglayout.debug.disable_xul_cache</strong> = <strong>true</strong>. Disabilita la cache XUL in modo tale che modifiche alla finestra e ai messaggi di dialogo non necessitino di un riavvio dell&#8217;applicazione.</li>
<li><strong>browser.dom.window.dump.enabled</strong> = <strong>true</strong>. Abilita l&#8217;uso di <span style="font-family: Courier New;">dump()</span> per stampare messaggi sulla standard consol.</li>
<li><strong>javascript.options.strict</strong> = <strong>true</strong>. Abilita i warning JavaScript nella Error Console.</li>
<li><strong>extensions.logging.enabled</strong> = <strong>true</strong>. Questo invia una valanga di informazioni sulle estensioni alla Error Console.</li>
</ul>
<p>E&#8217; anche molto utile <a href="https://addons.mozilla.org/en-US/firefox/addon/7434/">questa estensione</a>. Essa offre una comoda interfaccia grafica per accedere ad alcune impostazioni nascoste di Firefox.</p>
<p><strong>STRUMENTI UTILI</strong></p>
<ul>
<li><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/6622">DOM Inspector</a>: </strong>Questo strumento ci permette di navigare e modificare strutture XML-Based come lo XUL delle interfaccie di Firefox.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/216"><strong>Venkman</strong></a>: Un semplice debugger per JavaScript.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/1815"><strong>Console</strong></a>: Una potente console JavaScript.</li>
<li><a href="http://www.gijsk.com/mozilla/"><strong>ChromeList</strong></a>: Tool per navigare nei file in chrome://</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/9695"><strong>ViewAbout</strong></a>: Permette l&#8217;accesso ai vari about: tramite una comoda interfaccia grafica.</li>
<li><a href="http://code.google.com/p/crashme/"><strong>CrashMe!</strong></a>: Uno strumento per analizzare i report di debug dei chrash di firefox.</li>
</ul>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=462&amp;md5=68e61749b16cbf442c1adda03797766a" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/11/introduzione-ai-plugin-per-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F11%2Fintroduzione-ai-plugin-per-firefox%2F&amp;language=it_IT&amp;category=text&amp;title=Introduzione+ai+plugin+per+Firefox&amp;description=Tutti+conoscono+Firefox.+Tutti+conoscono+l%26%238217%3Binfinito+numerabile+dei+suoi+plugin.+Pochi+sanno+per%C3%B2+come+cominciare+a+sviluppare+tali+plugin.+E+a+questo+serve+questo+piccolo+tutorial.+Non+vedremo+ora+quali...&amp;tags=firefox%2Cjava%2Cplugin%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java – Trasferimento XML via Socket – Parte 2</title>
		<link>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/</link>
		<comments>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 09:20:36 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=283</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/"><img title="Java – Trasferimento XML via Socket – Parte 2" src="http://img201.imageshack.us/img201/9095/homer13so5.gif" alt="Java – Trasferimento XML via Socket – Parte 2"  width="200" height="150" /></a></div><br/>PROTOCOLLO DI TRASFERIMENTO IN PRATICA &#8211; INVIO Per questo punto abbiamo visto che è necessario serializzare il documento XML in uno stream secondario che useremo per calcolare la dimensione dei dati inviati e che poi riverseremo direttamente nello stream di output del socket. Per fare questo estendiamo ByteArrayOutputStream, in questo modo sfrutteremo tutti i metodi <a href='http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-trasferimento-xml-via-socket-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java – Trasferimento XML via Socket – Parte 2" data-url="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div class="wp-caption aligncenter" style="width: 330px"><img src="http://img201.imageshack.us/img201/9095/homer13so5.gif" alt="Aaaaaargh!" width="320" height="240" /><p class="wp-caption-text">Aaaaaargh!</p></div>
<p><strong>PROTOCOLLO DI TRASFERIMENTO IN PRATICA &#8211; INVIO</strong></p>
<p>Per questo punto abbiamo visto che è necessario serializzare il documento XML in uno stream secondario che useremo per calcolare la dimensione dei dati inviati e che poi riverseremo direttamente nello stream di output del socket.</p>
<p><span id="more-283"></span></p>
<p>Per fare questo estendiamo <strong>ByteArrayOutputStream</strong>, in questo modo sfrutteremo tutti i metodi di questa classe, fra i quali, quello che ci fornisce la dimensione dei dati contenuti. Tale classe dovrà avere inoltre:</p>
<ol>
<li>Un attributo che memorizza lo stream di output reale. Nel nostro caso memorizzerà lo stream di output del socket.</li>
<li>Un metodo <em>send</em> che fa quello che vogliamo. Prende i dati memorizzati e li invia nel canale di output preceduti da un intero che indica la quantità di dati inviati.</li>
</ol>
<p>Per il canale di output ho scelto <em>DataOutputStream </em>poiché fornisce in modo nativo molte funzioni a cui siamo interessati, fra cui l&#8217;invio diretto di un Int.</p>
<p>La classe risultante è:</p>
<pre>public class XMLOutputStream extends  ByteArrayOutputStream {

 private DataOutputStream outchannel;

 public XMLOutputStream(OutputStream outchannel) {
     super();
     this.outchannel = new DataOutputStream(outchannel);
 }

 public void send() throws IOException {
     byte[] data = toByteArray();
     outchannel.writeInt(data.length);
     outchannel.write(data);
     reset();
 }
}</pre>
<p>Ora però vogliamo che tale classe sia gestibile in modo più semplice. Vogliamo infatti un metodo in cui noi inseriamo un documento XML e lo stream di uscita del socket e lui faccia tutto il lavoro di serializzazione e invio.</p>
<pre>public class XMLSender {

 public static void send(Document tosend, OutputStream channel) throws TransformerConfigurationException, IOException {
     XMLOutputStream out = new XMLOutputStream(channel);

     StreamResult sr = new StreamResult(out);
     DOMSource ds = new DOMSource(tosend);
     Transformer tf = TransformerFactory.newInstance().newTransformer();

     try {
         tf.transform(ds, sr);
     } catch (TransformerException ex) {
         Logger.getLogger(XMLSender.class.getName()).log(Level.SEVERE, null, ex);
     }

     out.send();
 }
}</pre>
<p>Questa classe fa proprio ciò che vogliamo. Contiene un unico metodo statico che prende come parametri documento XML e canale di uscita e si occupa di serializzare e inviare il tutto in modo corretto sfruttando il nostro XMLOutputStream.</p>
<p><strong>PROTOCOLLO DI TRASFERIMENTO IN PRATICA &#8211; INVIO</strong></p>
<p>Per la ricezione sfruttiamo un meccanismo simile anche se, per mantenere una certa linearità di funzionamento sono stato costretto ad usare in modo piuttosto sporco la classe <strong>ByteArrayInputStream</strong> ma al momento era l&#8217;unica soluzione coerente che mi veniva in mente. Funziona a patto di tollerare il mio intervento brutale sugli attributi della classe.</p>
<p>public class XMLInputStream extends ByteArrayInputStream {</p>
<p>private DataInputStream inchannel;</p>
<pre>public class XMLInputStream extends ByteArrayInputStream {

 private DataInputStream inchannel;

 public XMLInputStream(InputStream inchannel) {
     super(new byte[2]); //MOLTO BRUTTO.
     this.inchannel = new DataInputStream(inchannel);
 }

 public void recive() throws IOException {
     int i = inchannel.readInt(); //Legge l'int con il numero di byte.
     byte[] data = new byte[i];
     inchannel.read(data, 0, i); //Legge esattamente quel numero di byte.
     this.buf = data; //BRUTTO ANCHE QUESTO.
     this.count = i;
     this.mark = 0;
     this.pos = 0;
 }

}</pre>
<p>Come potete vedere rispetta esattamente il nostro protocollo. Anche in questo caso vogliamo una classe involucro che ci permetta, dato lo stream di input del socket di restituire il documento corrispondente.</p>
<pre>public class XMLReceiver {

 public static Document receive(InputStream channel) throws ParserConfigurationException, TransformerConfigurationException, IOException, SAXException {
     //Inizializza il DOM per la ricezione del pacchetto.
     DocumentBuilderFactory docBuilderFact = DocumentBuilderFactory.newInstance();
     DocumentBuilder docBuilder = docBuilderFact.newDocumentBuilder();
     Document request = null;

     //Inizializza il canale.
     XMLInputStream xmlin = new XMLInputStream(channel);

     xmlin.recive();

     request = docBuilder.parse(xmlin);

     return request;
 }
}</pre>
<p>Anche in questo caso eccovi accontentati. Lascio qui di seguito un archivio contenente tutte le classi di cui abbiamo parlato.</p>
<p><a href="http://dl.getdropbox.com/u/89889/XMLTransfer.tar.gz">DOWNLOAD XMLTRANSFER</a></p>
<p><strong>LICENZA:</strong></p>
<p><strong>Tutte le classi sono estratte dal progetto Enea. Come tali ereditano la sua licenza GPLv3. Nonostante ciò non è che per 10 righe di codice mi straccerò i vestiti se la licenza non è applicata. E&#8217; solo premura citare me e questo. A questo ci terrei. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p><strong>Grazie ad </strong><strong>andbin del forum di HTML.it per il supporto.<br />
</strong></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=283&amp;md5=fdad80a08a25c6e3c7283730332ad860" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-trasferimento-xml-via-socket-2%2F&amp;language=it_IT&amp;category=text&amp;title=Java+%E2%80%93+Trasferimento+XML+via+Socket+%E2%80%93+Parte+2&amp;description=PROTOCOLLO+DI+TRASFERIMENTO+IN+PRATICA+%26%238211%3B+INVIO+Per+questo+punto+abbiamo+visto+che+%C3%A8+necessario+serializzare+il+documento+XML+in+uno+stream+secondario+che+useremo+per+calcolare+la+dimensione+dei...&amp;tags=java%2Cparsing%2Csocket%2Cxml%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java &#8211; Trasferimento XML via Socket &#8211; Parte 1</title>
		<link>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/</link>
		<comments>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 23:03:27 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=281</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/"><img title="Java &#8211; Trasferimento XML via Socket &#8211; Parte 1" src="http://www.adnandoric.com/wp-content/uploads/2009/03/zoidberg-why.png" alt="Java &#8211; Trasferimento XML via Socket &#8211; Parte 1"  width="" /></a></div><br/>Ho perso settimane alla ricerca di un modo elegante e pulito di trasferire informazioni fra server e client tramite un protocollo basato su XML. Possibile che nessuno abbia fatto una classe nelle librerie standard in grado di trasferire facilmente una manciata di tag XML? Non lo so. Fatto sta che il web non conteneva nessuna risposta alla mia domanda, così, domandando in giro sono arrivato a sviluppare 4 classi in grado di trasferire con un solo comando pacchetti XML attraverso un Socket. Vediamo quindi come fare. Alla fine vi allegerò un archivio con le mie 4 classi pronte per l'uso.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-trasferimento-xml-via-socket-1%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java &#8211; Trasferimento XML via Socket &#8211; Parte 1" data-url="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div class="wp-caption aligncenter" style="width: 409px"><img src="http://www.adnandoric.com/wp-content/uploads/2009/03/zoidberg-why.png" alt="" width="399" height="241" /><p class="wp-caption-text">Perché!? Perché!?</p></div>
<p style="text-align:left;">Ho perso settimane alla ricerca di un modo elegante e pulito di trasferire informazioni fra server e client tramite un protocollo basato su XML. Possibile che nessuno abbia fatto una classe nelle librerie standard in grado di trasferire facilmente una manciata di tag XML? Non lo so. Fatto sta che il web non conteneva nessuna risposta alla mia domanda, così, domandando in giro sono arrivato a sviluppare 4 classi in grado di trasferire con un solo comando pacchetti XML attraverso un Socket.</p>
<p style="text-align:left;"><span id="more-281"></span></p>
<p style="text-align:left;"><strong>SERIALIZZAZIONE E PARSING</strong></p>
<p style="text-align:left;">Quando si lavora con un documento che contiene dati bisogna, innanzitutto, essere in grado di leggerlo. L&#8217;azione che compie un programma quando legge un documento/file e ne interpreta il contenuto si chiama <strong>parsing</strong>. Il parsing di un file consiste, quindi, nell&#8217;estrarre da una sequenza di caratteri le informazioni da noi desiderate ed organizzarle in una struttura logica all&#8217;interno della memoria.</p>
<p style="text-align:left;">La <strong>serializzazione</strong>, invece, è esattamente il contrario del parsing. Serializzare un oggetto consiste nel <em>trasformare </em>tale struttura dati in una sequenza lineare di caratteri.</p>
<p style="text-align:left;">Questi due passaggi sono essenziali per lavorare con i file in modo avanzato: il computer gestisce nativamente solo sequenza di byte (e quindi caratteri) e quindi tutto ciò che non risiede in memoria deve poter essere memorizzato in questo formato.</p>
<p style="text-align:left;"><strong>LIMITI DEL TRASFERIMENTO XML NATIVO</strong></p>
<p style="text-align:left;">Le classi che gestiscono XML sia secondo metodologia SAX che DOM permettono di <strong>serializzare</strong> e di <strong>parsare</strong> un documento XML direttamente in/da uno Stream dati. Possiamo cioè serializzare un documento XML direttamente in un OutputStream e analogamente possiamo parsare un file XML attingendo direttamente da un InputStream. Questa è l&#8217;interfaccia che ci offrono gli strumenti base.</p>
<p style="text-align:left;">Il problema è che questo meccanismo non funziona attraverso un Socket. Supponiamo che un client voglia inviare una richiesta ad un server. Il client crea il suo documento XML con la richiesta e la serializza nell&#8217;OutputStream del socket. A questo punto il server riceve questi dati effettuando direttamente il parsing dall&#8217;InputStream del socket.</p>
<p style="text-align:left;">Qui avviente l&#8217;intoppo. XML non prevede un terminatore esplicito. Il server rimane quindi in attesa perenne che il flusso dati provenienti dal client si interrompa (inviando un EOF, Endo-Of-File).</p>
<p style="text-align:left;">Questo però non può avvenire in nessun caso. Infatti:</p>
<ol>
<li>Se il client forza l&#8217;invio di un EOF (inviando un byte contenente 0&#215;00) il parser del server lancia eccezione. Tale terminatore non può essere parsato!</li>
<li>Se il client chiude lo stream, automaticamente il socket viene disconnesso e la connessione viene interrotta. Il server quindi non può più rispondere, a meno di non instaurare una nuova connessione.</li>
</ol>
<p>La soluzione non può essere risolta in questo modo. Bisogna escogitare soluzioni alternative.</p>
<p><strong>TROVIAMO UNA SOLUZIONE</strong></p>
<p>Il problema ci appare subito chiaro. Dobbiamo indicare al server che il documento è finito così che lui possa interrompere l&#8217;attesa e proseguire con l&#8217;esecuzione. Per fare ciò abbiamo due modi:</p>
<ol>
<li>Inviare alla fine del documento qualcosa che segnali al server che non verrà inviato più nulla.</li>
<li>Istruire il server a leggere solo un TOT di byte corrispondendi alla lunghezza del messaggio.</li>
</ol>
<p>Il primo metodo lo abbiamo già scartato: qualunque cosa inviamo alla fine del documento verrà parsata generando l&#8217;eccezione del server. Ci rimane la seconda soluzione.</p>
<p>Questa presuppone la conoscenza a priori della dimensione del documento. Ma di questo non siamo affatto sicuri. Come potremmo esserlo? Anche per questa cosa abbiamo fondamentalmente due soluzioni:</p>
<ol>
<li>Dare una dimensione fissata ad ogni pacchetto riempendo lo spazio non usato di dati casuali (inseriti in un campo CDATA).</li>
<li>Inviare <strong>prima</strong> del documento il numero di byte che verranno inviati.</li>
</ol>
<p>La prima soluzione è ovviamente uno spreco enorme di memoria. E&#8217; utile nel caso la dimensione di ogni pacchetto sia più o meno sempre la stessa poiché questa soluzione ha il vantaggio di essere trasparente al client.</p>
<p>La seconda soluzione invece è molto più scalabile ed &#8220;elegante&#8221;. Il problema è: come facciamo a sapere quanti byte verranno inviati? La soluzione è ancora più semplice: invece di serializzare il documento direttamente sullo stream del socket lo serializziamo su un nostro stream privato, valutiamo la sua dimensione e dopodiché la inviamo seguita dal contenuto del nostro stream temporaneo.</p>
<p>Nel lato di ricezione invece leggiamo in questo modo: prima leggiamo il numero di byte (contenuto nei primi 4byte del messaggio) e poi trasferiamo questo esatto numero di byte provenienti dal socket in un nostro stream che poi faremo parsare.</p>
<p>La soluzione non fa una grinza. Ci manca solo di integrarla al meglio per rendere il più semplice possibile l&#8217;uso di questo <em>protocollo</em> all&#8217;interno della nostra applicazione.</p>
<p>Per oggi è tutto. Vedremo fra poco come fare tutto questo in pratica.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=281&amp;md5=179423abe393be81d8f7a62af430de29" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-trasferimento-xml-via-socket-1%2F&amp;language=it_IT&amp;category=text&amp;title=Java+%26%238211%3B+Trasferimento+XML+via+Socket+%26%238211%3B+Parte+1&amp;description=Ho+perso+settimane+alla+ricerca+di+un+modo+elegante+e+pulito+di+trasferire+informazioni+fra+server+e+client+tramite+un+protocollo+basato+su+XML.+Possibile+che+nessuno+abbia+fatto+una...&amp;tags=java%2Cparsing%2Csocket%2Cstream%2Cxml%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java Tip &#8211; Tipi Unsigned</title>
		<link>http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/</link>
		<comments>http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 23:22:13 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[byte]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[segni]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=241</guid>
		<description><![CDATA[Il Java penso sia il linguaggio che più odio. Lo trovo un affarone sconclusionato che unisce la complessità di un linguaggio compilato alla pesantezza di un linguaggio di scripting. Dopo questa premessa che sa molto di sfogo possiamo arrivare al dunque. Mi è capitato in questi giorni di avere bisogno di gestire dei singoli byte. <a href='http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-tip-tipi-unsigned%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java Tip &#8211; Tipi Unsigned" data-url="http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><em>Il Java penso sia il linguaggio che più odio. Lo trovo un affarone sconclusionato che unisce la complessità di un linguaggio compilato alla pesantezza di un linguaggio di scripting.</em></p>
<p>Dopo questa premessa che sa molto di sfogo possiamo arrivare al dunque. Mi è capitato in questi giorni di avere bisogno di gestire dei singoli byte. Il Java ha il tipo byte al suo interno ma li gestisce con il segno, il che è abbastanza stupido dato che di solito uno che lavora con i byte li vuole unsigned. Dire che i byte sono interpretati come <em>signed</em> significa che degli 8bit che costituiscono un byte ne vengono usati 7 per rappresentare il numero e 1 per il segno. Questo causa fondamentalmente due problemi:</p>
<ol>
<li>Il massimo numero positivo rappresentabile non è più 255 ma 127.</li>
<li>Bisogna stare attenti al segno. Ad esempio non si può fare un ciclo da 0 a 255 che scandisca tutti i possibili byte ma bisogna farlo da -128 a 127. Insomma, una rottura.</li>
</ol>
<p>In tutti gli altri linguaggi esiste la parola chiave <strong>unsigned<em> </em></strong>che permette con facilità di passare da interpretazioni <em>con segno</em> a interpretazioni senza segno. Nel Java NO. In Java <strong>tutti i tipi di dato sono sempre considerati signed<em> </em></strong>ad eccezione del tipo<strong><em> char.</em></strong></p>
<p>Abbiamo quindi bisogno di un modo per utilizzare dati unsigned.</p>
<p>La soluzione consiste nel promuovere il tipo di dato a quello più grande e passarlo in una maschera. Un esempio chiarirà il concetto:</p>
<p><strong>Passare da byte signed a unsigned:</strong></p>
<pre>public static int unsignedByte(byte b) {
    int result = b &amp; 0xFF;
    return result;
}</pre>
<p>Come vedete basta inserire il byte in un int e fare un <em>and </em>bit-a-bit per annullare tutto all&#8217;infuori del byte.</p>
<p>Questo può sembrarvi uno spreco di memoria in quanto memorizzate 1 byte in un int (4 byte).  Invace no. In Java, per questioni prestazionali, il tipo <em>byte</em> occupa comunque 4 byte. Quindi lo spazio utilizzato è sempre lo stesso.</p>
<p>Analogamente potete creare un <em>unsigned int</em> inserendo un <em>int</em> in un <em>long</em> e mettendo in <em>and</em> con 0xFFFFFFFF. Questa volta però un po di spazio lo buttate.</p>
<p><strong>Passare da int signed a unsigned:</strong></p>
<pre>public static long unsignedInt(int b) {
    long result = b &amp; 0xFFFFFFFF;
    return result;
}</pre>
<p>E&#8217; bene tenere presente però che per molte operazioni l&#8217;uso di byte signed o unsigned è del tutto equivalente come ad esempio l&#8217;operazione di divisione intera o di modulo.</p>
<p>Ora non vi resta che divertirvi a giocare con i segni nella speranza che vi divertiate più di quanto mi sia divertito io a trovare la soluzione a questo problema.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=241&amp;md5=7c4299467dedc89d5165171129088100" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-tip-tipi-unsigned%2F&amp;language=it_IT&amp;category=text&amp;title=Java+Tip+%26%238211%3B+Tipi+Unsigned&amp;description=Il+Java+penso+sia+il+linguaggio+che+pi%C3%B9+odio.+Lo+trovo+un+affarone+sconclusionato+che+unisce+la+complessit%C3%A0+di+un+linguaggio+compilato+alla+pesantezza+di+un+linguaggio+di+scripting.+Dopo...&amp;tags=byte%2Cjava%2Csegni%2Cblog" type="text/html" />
	</item>
		<item>
		<title>NetBeans 6.7.1 e Git</title>
		<link>http://davideaversa.it/slashcode/2009/08/netbeans-6-7-1-e-git/</link>
		<comments>http://davideaversa.it/slashcode/2009/08/netbeans-6-7-1-e-git/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 21:43:18 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[nbgit]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[versioning]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=209</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/08/netbeans-6-7-1-e-git/"><img title="NetBeans 6.7.1 e Git" src="http://mycoolsystems.co.ke/images/netbeans6ns0.png" alt="NetBeans 6.7.1 e Git"  width="" /></a></div><br/>Sto scrivendo la tesi. O almeno ci provo. Vado a rilento anche per colpa del caldo afoso, del condizionatore che si è rotto (in pieno Agosto e con tutti i condizionatorologi in ferie) e del pellegrinaggio continuo che faccio da casa mia a casa della mia ragazza (70km di distanza). Però cerco di sfruttare a <a href='http://davideaversa.it/slashcode/2009/08/netbeans-6-7-1-e-git/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F08%2Fnetbeans-6-7-1-e-git%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/08/netbeans-6-7-1-e-git/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="NetBeans 6.7.1 e Git" data-url="http://davideaversa.it/slashcode/2009/08/netbeans-6-7-1-e-git/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft" title="NetBeans" src="http://mycoolsystems.co.ke/images/netbeans6ns0.png" alt="" width="134" height="134" />Sto scrivendo la tesi. O almeno ci provo. Vado a rilento anche per colpa del caldo afoso, del condizionatore che si è rotto (in pieno Agosto e con tutti i <em>condizionatorologi</em> in ferie) e del pellegrinaggio continuo che faccio da casa mia a casa della mia ragazza (70km di distanza).</p>
<p>Però cerco di sfruttare a pieno ogni 5 minuti di &#8220;concentrazione&#8221; che spremo dal giorno.</p>
<p>Per fare questo ho due fidati strumenti: <strong>NetBeans 6.7 </strong>e <strong>Git.</strong></p>
<p>NetBeans è il famoso IDE di sviluppo <em>made in Sun</em> che è una vera manna per gli sviluppatori Java (ma anche C/C++ e Ruby). Molto potente ed estendibile e che mi piacerebbe tanto iniziasse a potenziare anche l&#8217;attuale minimale supporto a Python.</p>
<p>Git è invece uno dei tanti sistemi di versioning che popolano il mondo e che ho provato (vi giuro, li ho provati tutti). Ha il pregio di essere <strong>dannatamente veloce </strong>anche se il prezzo da pagare è una<strong> piccola maggiore difficoltà di utilizzo. </strong>In realtà non è poi così difficile ma rispetto agli altri (Subversion, Mercurial e Bazar per esempio) si comporta diversamente e può un attimo spiazzare i nuovi arrivati.</p>
<p>Il problema principale è far dialogare NetBeans con Git.</p>
<p>Nei plugin &#8220;ufficiali&#8221; non c&#8217;è nulla: NetBeans supporta tutto tranne Git. <strong>Ma esiste la soluzione!</strong></p>
<p><strong>La soluzione è: </strong>http://nbgit.org/</p>
<p>NBGit è un plugin che integra Git in NetBeans risolvendoci tutti i problemi e rendendo NB <strong>l&#8217;IDE che supporta il maggior numero di sistemi di versioning.</strong></p>
<p>Purtroppo almeno a me non funziona<strong> </strong>molto bene e lo devo &#8220;arrangiare&#8221; con qualche comando impartito da terminale.</p>
<p>Ma dopotutto è solo alla versione 0.2&#8230; diamogli tempo e diventerà essenziale! <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>EDIT: E&#8217; uscita la versione 0.3. Adesso il plugin è veramente completo!</strong></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=209&amp;md5=c4779e4cdeb4b9fddb4f6972f5652946" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/08/netbeans-6-7-1-e-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F08%2Fnetbeans-6-7-1-e-git%2F&amp;language=it_IT&amp;category=text&amp;title=NetBeans+6.7.1+e+Git&amp;description=Sto+scrivendo+la+tesi.+O+almeno+ci+provo.+Vado+a+rilento+anche+per+colpa+del+caldo+afoso%2C+del+condizionatore+che+si+%C3%A8+rotto+%28in+pieno+Agosto+e+con+tutti+i...&amp;tags=git%2Cjava%2Cnbgit%2Cnetbeans%2Cversioning%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Enea &#8211; Environment for NEtwork Applications</title>
		<link>http://davideaversa.it/slashcode/2009/04/enea-environment-for-network-applications/</link>
		<comments>http://davideaversa.it/slashcode/2009/04/enea-environment-for-network-applications/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 16:21:20 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Enea]]></category>
		<category><![CDATA[enea]]></category>
		<category><![CDATA[grid computing]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=195</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/04/enea-environment-for-network-applications/"><img title="Enea &#8211; Environment for NEtwork Applications" src="http://slashcode.files.wordpress.com/2009/04/enea-logo-150px1.png" alt="Enea &#8211; Environment for NEtwork Applications"  width="" /></a></div><br/>Ho scelto il progetto di reti che porterò come &#8220;tesi&#8221; della triennale. A dire il vero l&#8217;ho scelto già qualche settimana fa ma poichè il suo sviluppo si sta rilevando più interessante e istruttivo del previsto ho deciso, come mio solito, di condividere gran parte del mio lavoro. Come mio solito, inoltre, ho complicato la <a href='http://davideaversa.it/slashcode/2009/04/enea-environment-for-network-applications/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F04%2Fenea-environment-for-network-applications%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/04/enea-environment-for-network-applications/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Enea &#8211; Environment for NEtwork Applications" data-url="http://davideaversa.it/slashcode/2009/04/enea-environment-for-network-applications/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div id="attachment_197" class="wp-caption alignleft" style="width: 160px"><img class="size-full wp-image-197" title="Enea Logo" src="http://slashcode.files.wordpress.com/2009/04/enea-logo-150px1.png" alt="ENEA" width="150" height="147" /><p class="wp-caption-text">ENEA</p></div>
<p>Ho scelto il progetto di reti che porterò come &#8220;tesi&#8221; della triennale. A dire il vero l&#8217;ho scelto già qualche settimana fa ma poichè il suo sviluppo si sta rilevando più interessante e istruttivo del previsto ho deciso, come mio solito, di condividere gran parte del mio lavoro. Come mio solito, inoltre, ho complicato la traccia del progetto per renderlo &#8220;più divertente&#8221; o quantomeno renderlo qualcosa che possa uscire al dilà della fredda sessione di laurea.</p>
<p><strong>ENEA</strong> è l&#8217;acronimo di <strong>E</strong>nvironmento for <strong>Ne</strong>twork <strong>A</strong>pplications, ovvero un infrastruttura per l&#8217;esecuzioni di applicazioni basate sul <strong>Grid Computing</strong> e specialmente il <strong>Calcolo Distribuito</strong>.</p>
<p>L&#8217;intera applicazione è scritta in <strong>Java</strong> (come da buona tradizione universitaria) e fa uso di librerie standard (quindi portabili e multipiattaforma). Per ora non c&#8217;è nulla di funzionante in quanto mi sono dedicato per lo più alla fase di analisi e progettazione.</p>
<p>Presto metterò altre informazioni.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=195&amp;md5=24967cadbffa03e7ea740c3ab4cde7f1" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/04/enea-environment-for-network-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F04%2Fenea-environment-for-network-applications%2F&amp;language=it_IT&amp;category=text&amp;title=Enea+%26%238211%3B+Environment+for+NEtwork+Applications&amp;description=Ho+scelto+il+progetto+di+reti+che+porter%C3%B2+come+%26%238220%3Btesi%26%238221%3B+della+triennale.+A+dire+il+vero+l%26%238217%3Bho+scelto+gi%C3%A0+qualche+settimana+fa+ma+poich%C3%A8+il+suo+sviluppo+si+sta+rilevando...&amp;tags=enea%2Cgrid+computing%2Cjava%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java &#8211; Multithreading</title>
		<link>http://davideaversa.it/slashcode/2008/11/java-multithreading/</link>
		<comments>http://davideaversa.it/slashcode/2008/11/java-multithreading/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 08:24:08 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=149</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2008/11/java-multithreading/"><img title="Java &#8211; Multithreading" src="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads-281x300.png" alt="Java &#8211; Multithreading"  width="187" height="200" /></a></div><br/>Posto qui di seguito la prima di una serie di guide pratiche su Java e sul Multithread che sta portando avanti un mio amico di università Dymios sul suo blog. Per ora metto solo la prima parte. Potete continuare la lettura sul suo blog. Multithreading in Java &#8211; di Dymios Una normale applicazione che gira <a href='http://davideaversa.it/slashcode/2008/11/java-multithreading/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fjava-multithreading%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2008/11/java-multithreading/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java &#8211; Multithreading" data-url="http://davideaversa.it/slashcode/2008/11/java-multithreading/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div class="entry">
<p style="text-align:justify;">Posto qui di seguito la prima di una serie di <em>guide pratiche</em> su Java e sul Multithread che sta portando avanti un mio amico di università Dymios sul suo blog. Per ora metto solo la prima parte. Potete continuare la lettura sul <a title="Dymios" href="http://dymios.soloingegneria.com">suo blog</a>.</p>
<p style="text-align:justify;"><span id="more-149"></span></p>
<p style="text-align:justify;"><em>Multithreading in Java &#8211; di Dymios</em></p>
<p style="text-align:justify;">Una normale applicazione che gira sulla nostra macchina ha un solo flusso di esecuzione: si dice che ha un <em>singolo thread attivo</em>. Con la tecnica del multithreading è possibile creare diversi flussi di istruzioni in esecuzione per una singola applicazione. In questo modo possiamo delegare un certo compito ad un thread mentre noi nel programma principale eseguiamo qualche altra operazione. Possiamo cioè effettuare più calcoli ed operazioni <strong>in parallelo</strong>.</p>
<p style="text-align:center;"><a href="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads.png"><img class="size-medium wp-image-219 aligncenter" title="threads" src="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads-281x300.png" alt="" width="281" height="300" /></a></p>
<p style="text-align:justify;">Java offre due possibilità per fare questo, vediamole una per volta:</p>
<p><strong>1) Estendere la classe Thread<br />
</strong>Le operazioni da eseguire in un thread vanno scritte nel metodo run() di un oggetto che estende la classe java predefinita Thread. La classe chiamante dovrà creare un oggetto di tale classe ed invocare il metodo start(). La JVM a questo punto creerà il nuovo thread e invocherà il metodo run().</p>
<div class="wp_syntax">
<div class="code">
<pre class="java java" style="font-family:monospace;"><span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> Main <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">static</span> <span style="color:#000066;font-weight:bold;">void</span> main<span style="color:#009900;">(</span><span style="color:#003399;">String</span> args<span style="color:#009900;">[</span><span style="color:#009900;">]</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      MioThread t <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> MioThread<span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
      t.<span style="color:#006633;">start</span><span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span>

<span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> MioThread <span style="color:#000000;font-weight:bold;">extends</span> <span style="color:#003399;">Thread</span> <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> MioThread<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span> ...<span style="color:#006633;">costruttore</span>... <span style="color:#009900;">}</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000066;font-weight:bold;">void</span> run<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      <span style="color:#003399;">System</span>.<span style="color:#006633;">out</span>.<span style="color:#006633;">println</span><span style="color:#009900;">(</span><span style="color:#0000ff;">"Sono il Thread t!"</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span></pre>
</div>
</div>
<p><strong>2) Implementare l’interfaccia Runnable</strong><br />
Metodo molto simile al precedente.</p>
<div class="wp_syntax">
<div class="code">
<pre class="java java" style="font-family:monospace;"><span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> Main <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">static</span> <span style="color:#000066;font-weight:bold;">void</span> main<span style="color:#009900;">(</span><span style="color:#003399;">String</span> args<span style="color:#009900;">[</span><span style="color:#009900;">]</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      MioRunnable runnable <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> MioRunnable<span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
      <span style="color:#003399;">Thread</span> t <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> <span style="color:#003399;">Thread</span><span style="color:#009900;">(</span>MioRunnable<span style="color:#009900;">)</span>;
      t.<span style="color:#006633;">start</span><span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span>

<span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> MioRunnable <span style="color:#000000;font-weight:bold;">implements</span> <span style="color:#003399;">Runnable</span> <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> MioRunnable<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span> ...<span style="color:#006633;">costruttore</span>... <span style="color:#009900;">}</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000066;font-weight:bold;">void</span> run<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      <span style="color:#003399;">System</span>.<span style="color:#006633;">out</span>.<span style="color:#006633;">println</span><span style="color:#009900;">(</span><span style="color:#0000ff;">"Sono il Thread t!"</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span></pre>
</div>
</div>
</div>
<p><!-- You can start editing here. --> <!-- If comments are open, but there are no comments. --></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=149&amp;md5=123764062f07e46d14374aedc2265c43" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2008/11/java-multithreading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fjava-multithreading%2F&amp;language=it_IT&amp;category=text&amp;title=Java+%26%238211%3B+Multithreading&amp;description=Posto+qui+di+seguito+la+prima+di+una+serie+di+guide+pratiche+su+Java+e+sul+Multithread+che+sta+portando+avanti+un+mio+amico+di+universit%C3%A0+Dymios+sul+suo+blog....&amp;tags=classe%2Cguida%2Cjava%2Cthread%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

