<?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>Alessandro Stella - Appunti di informatica</title>
	<atom:link href="http://www.alessandrostella.it/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alessandrostella.it</link>
	<description>Appunti sparsi di informatica</description>
	<lastBuildDate>Wed, 25 Aug 2010 23:38:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Donatello Liviello è morto</title>
		<link>http://www.alessandrostella.it/senza-categoria/2010/08/donatello-liviello-morto/</link>
		<comments>http://www.alessandrostella.it/senza-categoria/2010/08/donatello-liviello-morto/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 19:11:01 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Senza categoria]]></category>
		<category><![CDATA[varie]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1232</guid>
		<description><![CDATA[Cari lettori/trici di questo piccolo blog, il tizio che scrive tutte queste utili/inutili parole sull&#8217;informatica e sui problemi informatici che incontra e risolve, è alle prese con un &#8220;problema&#8221; che non ha soluzione&#8230; purtroppo non ha proprio soluzione: uno dei miei più cari Amici, Dontello&#8230; è morto. Non so se vi è mai capitata una [...]]]></description>
			<content:encoded><![CDATA[<p>Cari lettori/trici di questo piccolo blog,</p>
<p>il tizio che scrive tutte queste utili/inutili parole sull&#8217;informatica e sui problemi informatici che incontra e risolve, è alle prese con un  &#8220;problema&#8221; che non ha soluzione&#8230; purtroppo non ha proprio soluzione: uno dei miei più cari Amici, Dontello&#8230; è morto.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/08/IMG_0503.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/08/IMG_0503-450x337.jpg" alt="Donatello Liviello" title="Donatello Liviello" width="450" height="337" class="aligncenter size-medium wp-image-1233" /></a><br />
Non so se vi è mai capitata una roba del genere e non so come si reagisce a un tale evento. Forse non c&#8217;è un modo di reagire, forse ognuno reagisce a modo suo, forse l&#8217;unica reazione comune è l&#8217;indescrivibile, straziante,  sconfinato, sottile, tagliente dolore! Forse&#8230;<br />
<span id="more-1232"></span><br />
Di certo invece c&#8217;è che io ho reagito male. Malissimo.<br />
Tanti anni fa, alla fine di uno splendido rapporto d&#8217;Amore, ho sofferto come mai prima e come mai avrei pensato di poter più soffrire. Beh, mi sbagliavo. La fine del mio più grande e importante rapporto d&#8217;Amore non è riuscita a farmi soffrire in questo modo.</p>
<p><strong>Donatello, il &#8220;mio&#8221; caro Amico Donatello, è morto alle 3 AM del 18 agosto 2010.</strong></p>
<p>Con alcuni amici, la sera del 17 dovevamo incontrarci alle 22.30 a casa mia per andare a una festa a tema in spiaggia. Il tema era &#8220;all white&#8221;, ossia tutti i partecipanti dovevano essere vestiti di bianco. Alle 22.23 uno degli amici con i quali si doveva andare alla festa e grande Amico di Donatello (forse il miglior Amico) di nome Marcello, mi ha telefonato: &#8220;<em>Ale, Donatello ha fatto un incidente con la moto, ma sembra che sia tutto ok; mi ha chiamato lui e sebbene la voce sembrasse un po&#8217; sofferente mi sembra che non ci sia da preoccuparsi. Sto andando in ospedale. Tu vai sul luogo dell&#8217;incidente e vedi un po&#8217; quale è la situazione.</em>&#8220;. Parto con animo sufficientemente sereno e mi dirigo verso il luogo maledetto!<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/08/IMAG0484.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/08/IMAG0484-450x337.jpg" alt="Incidente Donatello" title="Incidente Donatello" width="450" height="337" class="aligncenter size-medium wp-image-1234" /></a><br />
Arrivato sul luogo dell&#8217;incidente mi sono bastati pochi secondi per capire che l&#8217;incidente era tutt&#8217;altro che banale. La parte anteriore della moto di Donatello era disintegrata, la dinamica era chiara e ciò che lasciava presagire non era niente di buono. Ho chiamato Marcello: &#8220;<em>Marce&#8217;, ma sei sicuro che Donatello sta bene? Qua l&#8217;incidente è brutto e la moto è messa male!</em>&#8220;.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/08/IMAG0477.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/08/IMAG0477-450x337.jpg" alt="Incidente Donatello" title="Incidente Donatello" width="450" height="337" class="aligncenter size-medium wp-image-1258" /></a><br />
La verità ha impiegato ben poco a venir fuori e i carabinieri accorsi sul luogo dell&#8217;incidente mi hanno confermato la situazione: dall&#8217;ospedale han dato prognosi riservata.<br />
Panico! Tachicardia! Sudorzione della mani&#8230; Non so dirvi cosa ho sentito. Ero in preda a mille emozioni e mi mancava l&#8217;aria&#8230;<br />
Tre anni fa, in questo stesso periodo, un amico di Donatello ha perso la vita in un incidente con la moto&#8230; Ricordi, paure, tutto mi confondeva, mi opprimeva&#8230; I CC. mi hanno detto che lì non servivo più e mi sono pertanto precipitato in ospedale.</p>
<p>In ospedale ho trovato tutti gli &#8220;all white&#8221;.<br />
La situazione era seria e le ore trascorse in quell&#8217;ospedale rimarranno a lungo impresse nella mia anima. Dopo quasi un&#8217;ora dal ricovero in pronto soccorso con codice rosso Donatello è stato finalmente trasportato in sala operatoria dove ha trascorso le sue ultime tre ore di calvario che non vi racconterò perché non ci riesco!<br />
Alle 2.50 una dottoressa ci ha dato una notizia che ci ha fatto sperare: &#8220;siamo riusciti a bloccare l&#8217;emorragia!&#8221;.<br />
Eravamo tutti al settimo cielo. Forse il nostro Amico era salvo; forse saremmo riusciti a parlargli ancora&#8230;<br />
Alle 3 la stessa dott.ssa esce di nuovo&#8230; Donatello era morto!</p>
<p>Davvero non so dirvi cosa è successo in me.<br />
Era come se si fosse fermato il sangue; come se il calore che mi riempie fosse svanito nel nulla. Mi sono appoggiato con le spalle al bordo della porta, con gli occhi sgranati, le mani dietro la schiena e lo sguardo nel nulla. Non parlavo, non respiravo, non sentivo niente di quello che accadeva intorno a me.<br />
Dopo pochi secondi mi sono accorto di essere tutto bagnato; stavo piangendo come un bambino e piangevo così tanto che avevo riempito la camicia di lacrime. E non sentivo neanche la lacrime scendere. Non sono poi davvero in grado di descrivere la reazione della madre di Donatello&#8230; Non ci sono le parole. Però so che in quei momenti ti senti niente; ti senti impotente; sai che non puoi fare nulla; anche ucciderti non servirebbe a cambiare le cose.</p>
<p>Alle 3.30 gli &#8220;all white&#8221; erano tutti nell&#8217;atrio dell&#8217;ospedale, senza parole, senza guardarsi, senza essere in grado di accettare gli eventi. Alle 5 eravamo ancora tutti lì.<br />
Per 48 ore di fila non sono riuscito a dormire, né a mangiare, se non un pasticciotto alle 5.30&#8230;</p>
<p>Proprio il giorno prima del fatidico evento, Donatello e io abbiamo trascorso tutto il giorno da soli, in barca, dalle 11 alle 20.30. Abbiam parlato di tante cose molto importanti: mogli, figli, amori, sogni, speranze, idee, progetti&#8230;<br />
Se penso a quei discorsi e a tutto quello che aveva in mente&#8230; mi sento male.<br />
Non doveva andare così! Troppe le cose belle che aveva da fare&#8230;<br />
Quanto mi manchi, Do&#8217;&#8230; quanto mi manchi&#8230; Lo so, è un discorso egoista, ma mi manchi. Troppo grande il vuoto che hai lasciato qui. Usando una tua espressione ti dico: porca l&#8217;oca!!!</p>
<p>Ora voi vi chiederete &#8220;chi è questo Donatello?&#8221;.<br />
Ma io vi dico: guardate i suoi occhi e saprete di lui&#8230;  </p>
<p>A causa di questo tragico evento credo che rimarrò in silenzio digitale per un po&#8217;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/senza-categoria/2010/08/donatello-liviello-morto/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>UML, i casi d&#8217;uso</title>
		<link>http://www.alessandrostella.it/oo-programming/2010/07/uml-casi-uso/</link>
		<comments>http://www.alessandrostella.it/oo-programming/2010/07/uml-casi-uso/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 10:12:27 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[OO Programming]]></category>
		<category><![CDATA[uml]]></category>
		<category><![CDATA[casi d'uso]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1165</guid>
		<description><![CDATA[Sono passati molti anni da quando ho iniziato a lavorare con UML (Unified Modelling Language), ma nonostante sia passato tutto questo tempo, ricordo ancora molto bene quante difficoltà ho avuto a comprendere nell&#8217;intimo il significato dei casi d&#8217;uso. Docenti e libri mi parlavano in una lingua che io non riuscivo proprio a capire. Ho dovuto [...]]]></description>
			<content:encoded><![CDATA[<p>Sono passati molti anni da quando ho iniziato a lavorare con <strong>UML</strong> (<strong>U</strong>nified <strong>M</strong>odelling <strong>L</strong>anguage), ma nonostante sia passato tutto questo tempo, ricordo ancora molto bene quante difficoltà ho avuto a comprendere nell&#8217;intimo il significato dei casi d&#8217;uso. Docenti e libri mi parlavano in una lingua che io non riuscivo proprio a capire. Ho dovuto &#8220;fare da solo&#8221; e ci ho impiegato un po&#8217; di tempo&#8230;</p>
<p>Oggi, per puro caso, mi è capitato di leggere, su un sito molto noto, un articolo su questo argomento e sono rimasto colpito nel leggere le stesse frasi, le stesse parole di quando io studiavo questi concetti e non ci capivo nulla. Eppure è tutto davvero banale! Mi sono incuriosito e ho fatto un piccolo scouting sulla rete per vedere come viene trattato questo argomento sui tanti siti che se ne occupano. Beh, da non crederci! Parlano tutti nello stesso modo! Quel modo che ho conosciuto a mio tempo e che, a mio modestissimo parere, non entra nell&#8217;intimo dei casi d&#8217;uso e non consente al lettore di comprendere fino in fondo cosa è un caso d&#8217;uso!</p>
<p>Vista tale situazione ho deciso di scrivere queste poche parole per trasmettere la mia personale esperienza con questo argomento. Magari ci sarà qualcuno a cui potrà essere utile&#8230;<span id="more-1165"></span></p>
<p>Se una persona studia i casi d&#8217;uso lo fa, nella stragrande maggioranza dei casi, perché ha a che fare da vicino con il mondo della programmazione&#8230; Questo è un problema. Se uno arriva a studiare l&#8217;UML e i casi d&#8217;uso dopo aver già programmato e magari per molto tempo, diventa paradossalmente più difficile comprendere il concetto che sta dietro al caso d&#8217;uso. Il motivo è presto detto: <strong>un programmatore (per deformazione professionale) guarda un software dall&#8217;interno, un caso d&#8217;uso invece guarda lo stesso software dall&#8217;esterno</strong>. Quindi, programmatori che leggete queste parole, spegnete il cervello da programmatori e smettete immediatamante di pensare a classi, procedure e tutto ciò che ha a che fare con il codice. Se non lo farete non capirete mai un tubo sull&#8217;UML e sui casi d&#8217;uso in particolare <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Spento?<br />
Ok.</p>
<p><strong>Cosa è un caso d&#8217;uso?</strong><br />
Lo conosciamo tutti un videoregistratore, vero? Si, lo so, lo conosciamo tutti. Inutile dire di no! Quindi, se non lo abbiamo di fronte, possiamo comunque immaginarlo. Ci siamo? Lo sitamo guardando (anche solo nella nostra mente)? Bene.<br />
Rispondiamo ora a questa domanda chiave: &#8220;come si usa il videoregistratore?&#8221;.<br />
Tutti, ma proprio tutti noi diremmo qualcosa del tipo: premi il tasto con la freccia singola che punta verso destra per vedere il filmato; premi le doppie freccie a sinistra per mandare il filmato indietro; premi le doppie freccie a destra per mandare il filmato avanti veloce; premi il tasto con il tondino rosso per registrare.<br />
All&#8217;incirca è così che si &#8220;usa&#8221; un vidoregistratore, giusto?<br />
Abbiamo appena risposto alla nostra domanda.<br />
Il videoregistratore è il nostro software, i casi d&#8217;uso indicano il modo in cui si &#8220;usa&#8221; il nostro software.</p>
<p>Ecco perché i programmatori fanno fatica a capire cosa è un caso d&#8217;uso: loro sono naturalmente predisposti a guardare dentro il videoregistratore per capire come funziona l&#8217;aggeggio all&#8217;interno. I casi d&#8217;uso invece se ne fregano di come può mai essere che, premendo un pulsante, si riesca magicamente a vedere il video.</p>
<p>Spero di aver evitato a qualcuno di perdere ore e ore del proprio tempo nel tentativo di comprendere una cosa così banale&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/oo-programming/2010/07/uml-casi-uso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JasperReport, iReport e java</title>
		<link>http://www.alessandrostella.it/java/2010/07/jasper-report-ireport-java/</link>
		<comments>http://www.alessandrostella.it/java/2010/07/jasper-report-ireport-java/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 16:10:06 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[iReport]]></category>
		<category><![CDATA[jasperReport]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1169</guid>
		<description><![CDATA[Dobbiamo produrre delle stampe in pdf da java? Le soluzioni sono tante. Noi oggi ne tratteremo una in particolare: jasperReport! Non è semplicissimo, ma cercheremo di seguire tutti i passi necessari per renderlo facile&#8230; Ecco cosa faremo: 1. produzione file jrxml e compilazione del file jrxml in jasper 2. uso del file jasper in java [...]]]></description>
			<content:encoded><![CDATA[<p>Dobbiamo produrre delle stampe in pdf da java?<br />
Le soluzioni sono tante. Noi oggi ne tratteremo una in particolare: <strong><a href="http://jasperforge.org/projects/jasperreports" target="_blanck">jasperReport</a></strong>!<br />
Non è semplicissimo, ma cercheremo di seguire tutti i passi necessari per renderlo facile&#8230;<br />
Ecco cosa faremo:<br />
1. produzione file jrxml e compilazione del file jrxml in jasper<br />
2. uso del file jasper in java per produrre un file PDF<br />
<span id="more-1169"></span><br />
<strong>1. PRODUZIONE FILE JRXML E COMPILAZIONE IN FILE JASPER</strong><br />
Per eseguire i suoi compiti jasperReport usa file con estensione jrxml, ossia file xml nei quali scrive tutto quello che serve per produrre il report. Compilando il file jrxml si ottiene poi un file con estensione jasper.<br />
Da ciò deriva che la prima cosa da fare è produrre un file jrxml.<br />
Per farlo, scarichiamo un IDE creato appositamente: <strong><a href="http://jasperforge.org/projects/ireport" target="_blanck">iReport</a></strong>.<br />
Ora dobbiamo usare iReport per disegnare il nostro report.<br />
iReport si presenta più o meno come mostrato nella figura qui in basso e ci indica sin da subito la strada da seguire per creare un report:<br />
- creare una fonte dati<br />
- disegnare il report<br />
- visualizzare/salvare il report<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReport_01.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReport_01-300x225.jpg" alt="iReport - Schermata di benvenuto" title="iReport - Schermata di benvenuto" width="300" height="225" class="aligncenter size-medium wp-image-1171" /></a><br />
Clicchiamo sul &#8220;passo 1&#8243;.<br />
Ci troveremo di fronte all&#8217;elenco di tutte le fonti dati da cui jasperReport può prelevare i dati da stampare (praticamente tutte). Noi qui prenderemo in esame quelle che più da vicino interessano un javista: Database JDBC connection, XML file datasource e JavaBeans.</p>
<p><u>Database JDBC connection</u><br />
Questa è l&#8217;opzione da scegliere se vogliamo che il nostro report prelevi i dati da stampare da un DB. Selezioniamo quindi questa voce e premiamo &#8220;Avanti >&#8221;. Qui di seguito possiamo osservare la schermata che ci viene proposta da iReport dopo la pressione del pulsante &#8220;Avanti>&#8221;.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReport_02.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReport_02-257x300.jpg" alt="iReport_02 - Database JDBC connection" title="iReport_02 - Database JDBC connection" width="257" height="300" class="aligncenter size-medium wp-image-1172" /></a><br />
Dobbiamo ovviamente avere le informazioni che servono per collegarci al DB (nella figura stiamo utilizzando una connessione JDBC a Oracle).<br />
ATTENZIONE: Se vogliamo usare <strong>Oracle</strong> dobbiamo scaricare la libreria ojdbc14.jar e posizionarla nella sottocartella &#8220;ide10\modules\ext&#8221; della cartella in cui abbiamo installato iReport.<br />
Una volta inseriti tutti i dati, scegliamo &#8220;Prova&#8221; per vedere se abbiamo fatto tutto bene e quando tutto è OK premiamo &#8220;Salva&#8221;.<br />
Ora, in alto al centro della schermata principale di iReport possiamo notare la nostra fonte dati.</p>
<p><u>XML file datasource</u><br />
Se la nostre fonte dati è un file XML, ci basta scegliere XML file datasource al &#8220;Passo 1&#8243; e premere &#8220;Avanti >&#8221;. Diamo poi un nome e scegliamo il file XML di riferimento.<br />
C&#8217;è però un caso in cui ci si può trovare in difficoltà nell&#8217;uso di un file XML come sorgente dati. E&#8217; il caso in cui si cerca di inserire in una <strong>jr:table</strong> i dati contenuti nel file xml. In tal caso dopo aver creato il dataset dal quale la tabella andrà a prendere i dati, è opportuno entrare nella visualizzazione XML e modificare la seguente stringa:</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dataSourceExpression<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><span style="color: #339933;">&lt;![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource(1)]]&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dataSourceExpression<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>in quest&#8217;altra:</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dataSourceExpression<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><span style="color: #339933;">&lt;![CDATA[$P{REPORT_DATA_SOURCE}]]&gt;</span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dataSourceExpression<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>Ok, facciamo un piccolo esempio <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Ammettiamo che questo sia il nostro file XML:</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;documento</span> <span style="color: #000066;">fase</span>=<span style="color: #ff0000;">&quot;Aggiudicazione&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">tipo</span>=<span style="color: #ff0000;">&quot;lavori&quot;</span> <span style="color: #000066;">settore</span>=<span style="color: #ff0000;">&quot;Ordinario&quot;</span></span><br />
<span style="color: #009900;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">numero</span>=<span style="color: #ff0000;">&quot;2341&quot;</span> <span style="color: #000066;">misto</span>=<span style="color: #ff0000;">&quot;Si&quot;</span></span><br />
<span style="color: #009900;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">oggetto</span>=<span style="color: #ff0000;">&quot;Inserire l'oggetto del contratto...&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;voce<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;testo<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/testo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;valore<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/valore<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/voce<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;voce<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;testo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Testo sulla prima colonna della tabella<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/testo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;valore<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Testo sulla seconda colonna<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/valore<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/voce<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;voce<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;testo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Testo 1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/testo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;valore<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Testo 2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/valore<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/voce<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;voce<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;testo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Testo 3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/testo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;valore<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Testo 4<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/valore<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/voce<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/documento<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>Ammettiamo inoltre di dover inserire i dati contenuti nel tag &#8220;testo&#8221; nella prima colonna della jr:table e i dati del tag &#8220;valore&#8221; nella seconda colonna.<br />
Trasciniamo quindi l&#8217;oggetto &#8220;Table&#8221; nella zona &#8220;Detail&#8221; del nostro report. Si presenterà la seguente schermata:<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReportNewTable.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReportNewTable-450x325.jpg" alt="creazione nuova Table" title="creazione nuova Table" width="450" height="325" class="aligncenter size-medium wp-image-1225" /></a><br />
dalla quale dobbiamo associare la nostra tabella al dataset. Premiamo quindi &#8220;New dataset&#8221;. Nella schermata successiva diamo un nome al dataset (ad esempio SorgenteDatiXML) e scegliamo &#8220;Create new dataset&#8230;&#8221;. Premiamo &#8220;Avanti>&#8221;. Nella schermata successiva andiamo a cercare la sorgente dati che fa riferimento al file XML. Ora sempre &#8220;Avanti>&#8221; fino alla fine, quindi &#8220;Termina&#8221;.<br />
Ora nel &#8220;Report inspector&#8221;, sulla sinistra, sarà comparsa la voce &#8220;SorgenteDatiXML&#8221;.<br />
Clicchiamoci sopra con il tasto destro e scegliamo &#8220;Edit query&#8221;. Dalla schermata che si apre, nella combo &#8220;Query language&#8221; scegliamo &#8220;XPath&#8221; come nella figura qui sotto.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReportQueryLanguage.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReportQueryLanguage-450x355.jpg" alt="iReport - Query Language" title="iReport - Query Language" width="450" height="355" class="aligncenter size-medium wp-image-1227" /></a><br />
A questo punto tramite XPath andiamo a cercare i dati che ci interessano (documento/voce). Sulla destra apriamo il tag &#8220;voce&#8221; e trasciniamo i tag &#8220;testo&#8221; e &#8220;valore&#8221; nella parte bassa della figura. Premiamo &#8220;OK&#8221;.<br />
Ora, sotto &#8220;SorgenteDatiXML&#8221; troveremo i campi &#8220;testo&#8221; e &#8220;valore&#8221;.<br />
Portiamoci nell&#8217;edit della tabella e trasciniamo i campi nelle rispettive colonne, come nella sottostante figura.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReportEditTable.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReportEditTable-450x316.jpg" alt="iReport - Edit table" title="iReport - Edit table" width="450" height="316" class="aligncenter size-medium wp-image-1229" /></a><br />
Ora effettuiamo la sostituzione di cui si è parlato all&#8217;inizio di questo paragrafo (&#8220;dataSourceExpression&#8221;).</p>
<p><u>JavaBeans set datasource</u><br />
Questa è la scelta più complicata, ma forse più utile per un javista. In questo modo possiamo dire a jasperReport di prelevare le informazioni da stampare da un elenco (collezione o array) di beans! Procediamo.<br />
Dobbiamo innanzitutto sapere che<br />
<blockquote>&#8220;this datasource need a spacial factory class that provides a static method to generate a collection or an array of JavaBeans&#8221;</p></blockquote>
<p>ossia <strong>dobbiamo creare una classe che abbia un metodo statico e tale metodo DEVE restituire una collection o un array riempiti con i nostri beans</strong>.<br />
Qui di seguito vi porto un esempio di tale metodo (si presuppone l&#8217;esistenza di una classe di nome Bean che rappresenta il nostro bean):</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> java.<span style="color: #006633;">util</span>.<span style="color: #006633;">Collection</span><span style="color: #339933;">&lt;</span>Bean<span style="color: #339933;">&gt;</span> dammiLista<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; java.<span style="color: #006633;">util</span>.<span style="color: #006633;">Collection</span><span style="color: #339933;">&lt;</span>Bean<span style="color: #339933;">&gt;</span> persone <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>Bean<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Bean persona <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Bean<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; persona.<span style="color: #006633;">setCodiceFiscale</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;CODFISC&quot;</span><span style="color: #339933;">+</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; persona.<span style="color: #006633;">setCognome</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cognome&quot;</span><span style="color: #339933;">+</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; persona.<span style="color: #006633;">setNome</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Nome&quot;</span><span style="color: #339933;">+</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; persone.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>persona<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> persone<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Fatto questo, creiamo un .jar dal nostro progetto. Poi da iReport &#8220;Strumenti/Opzioni/Classpath&#8221;. Scegliamo &#8220;Add JAR&#8221; e aggiungiamo il nostro jar. Ora, aggiungendo un datasource di tipo &#8220;JavaBeans set datasource&#8221;, nel campo &#8220;Factory class&#8221; possiamo aggiungere la classe (completa di percorso del package in cui si trova). Nell&#8217;altro campo (il metodo statico) aggiungiamo il nome del metodo statico (nell&#8217;esempio &#8220;dammiLista) che ci restituisce la collection o l&#8217;array di beans, come mostrato nella figura qui sotto.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReport_03-386x450.jpg" alt="iReport - JavaBeans datasource" title="iReport - JavaBeans datasource" width="386" height="450" class="aligncenter size-medium wp-image-1194" /><br />
Premiamo il pulsate &#8220;Prova&#8221;. Deve venire fuori un &#8220;successo&#8221;, altrimenti abbiam sbagliato qualcosa&#8230; Se tutto è ok, clicchiamo sul destro sul nome del nostro progetto e scegliemo &#8220;Edit query&#8221;. Comparirà la schermata qui sotto<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReport_04.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/07/iReport_04-450x337.jpg" alt="iReport - Recupero dati dalla collection" title="iReport - Recupero dati dalla collection" width="450" height="337" class="aligncenter size-medium wp-image-1210" /></a><br />
Dobbiamo quindi premere su &#8220;JavaBean Datasource&#8221; e inserire il nome della classe che rappresenta il singolo bean (nel nostro caso proprio Bean). Poi premiamo &#8220;Read attributes&#8221;. Al centro, come mostrato, comparirà l&#8217;elenco degli attributi del singolo Bean <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Selezioniamo quelli che ci interessano e premiamo &#8220;Aggiungi il campo(i) selezionati. Poi diamo &#8220;ok&#8221;.<br />
Adesso nei campi del nostro report sono comparsi quelli selezionati e, trascinandoli sul report possiamo stamparne i valori <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bene.<br />
Qualunque sia stata la nostra scelta, ora prcediamo e creiamo il nostro report.<br />
Ritorniamo nella schermata principale e clicchiamo sul &#8220;Passo 2&#8243;.<br />
Ci verrà proposto un insieme di layout. Senza complicarci la vita dietro a layout più o meno belli e complicati, scegliamo il primo se vogliamo un report con stampa verticale o il secondo se preferiamo una stampa orizzontale. Clicchiamo quindi sul layout scelto e premiamo &#8220;Open this template&#8221;. Ora siamo pronti a disegnare il nostro report.<br />
Le guide sull&#8217;argomento non mancano, quindi vi rimando ad una qualunque di esse per prendere dimestichezza con iReport.</p>
<p><strong>2.USO DI JASPERREPORT IN JAVA</strong><br />
Usare jasperReport in java significa semplicemente aggiungere la sua jar (attualmente jasperreports-3.7.3.jar) nelle librerie del progetto. Fatto questo possiamo accedere alle sue classi.<br />
Se, ad esempio, il nostro file jasper compilato si chiama &#8220;ricevutaTrasfProgrTriennale.jasper&#8221; e deve <strong>recuperare i dati da un file XML</strong>, inviato tramite post in una web application, con il codice qui di seguito recuperiamo l&#8217;inputstream, modifichiamo il file XML (tramite jaxp) e richiamiamo jasperReport per la realizzazione del file PDF:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> sendReportElencoReportXmlPdf<span style="color: #009900;">&#40;</span>HttpServletRequest request,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HttpServletResponse response<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">IOException</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">ByteArrayOutputStream</span> out <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ByteArrayOutputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">String</span> pathFile <span style="color: #339933;">=</span> request.<span style="color: #006633;">getSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getServletContext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getRealPath</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;WEB-INF/reports/ricevutaTrasfProgrTriennale.jasper&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">String</span> pathFileImg <span style="color: #339933;">=</span> request.<span style="color: #006633;">getSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getServletContext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getRealPath</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;WEB-INF/reports/LogoLomb.gif&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//String pathFile = request.getRealPath(&quot;&quot;) + &quot;WEB-INF/reports/ricevutaTrasfProgrTriennale.jasper&quot;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;PATHFILE PDF: &quot;</span> <span style="color: #339933;">+</span> pathFile<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Map<span style="color: #339933;">&lt;</span>String , String<span style="color: #339933;">&gt;</span> lParameters <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;</span>String , String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lParameters.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;DATA_TIME&quot;</span>, <span style="color: #0000ff;">&quot;15/15/2015&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">String</span> fileXML <span style="color: #339933;">=</span> request.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;file&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span>fileXML<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">InputStream</span> in <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ByteArrayInputStream</span><span style="color: #009900;">&#40;</span>fileXML.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DocumentBuilderFactory f <span style="color: #339933;">=</span> DocumentBuilderFactory.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DocumentBuilder db<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db <span style="color: #339933;">=</span> f.<span style="color: #006633;">newDocumentBuilder</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">Document</span> doc <span style="color: #339933;">=</span> db.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>in<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">Element</span> root <span style="color: #339933;">=</span> doc.<span style="color: #006633;">getDocumentElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root.<span style="color: #006633;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;img&quot;</span>, pathFileImg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JRXmlDataSource xmlDS <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JRXmlDataSource<span style="color: #009900;">&#40;</span>doc,<span style="color: #0000ff;">&quot;/trasferimenti/trasferimento&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//JRXmlDataSource xmlDS = new JRXmlDataSource(in,&quot;/trasferimenti/trasferimento&quot;);</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; in.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JRPdfExporter exporter <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JRPdfExporter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JasperPrint jasperPrint <span style="color: #339933;">=</span> JasperFillManager.<span style="color: #006633;">fillReport</span><span style="color: #009900;">&#40;</span>pathFile,lParameters, xmlDS<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exporter.<span style="color: #006633;">setParameter</span><span style="color: #009900;">&#40;</span>JRExporterParameter.<span style="color: #006633;">JASPER_PRINT</span>, jasperPrint<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exporter.<span style="color: #006633;">setParameter</span><span style="color: #009900;">&#40;</span>JRExporterParameter.<span style="color: #006633;">OUTPUT_STREAM</span>, out<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exporter.<span style="color: #006633;">exportReport</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>JRException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span>e, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>ParserConfigurationException PCexc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span>PCexc, PCexc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> IOexc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span>IOexc, IOexc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>SAXException SAXexc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span>SAXexc, SAXexc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; response.<span style="color: #006633;">setContentType</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;application/vnd.pdf&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; response.<span style="color: #006633;">setHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Disposition&quot;</span>, <span style="color: #0000ff;">&quot;attachment; filename=stampaReport.pdf&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//response.setContentLength(out.size());</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ServletOutputStream output <span style="color: #339933;">=</span> response.<span style="color: #006633;">getOutputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; out.<span style="color: #006633;">writeTo</span><span style="color: #009900;">&#40;</span>output<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; output.<span style="color: #006633;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Se invece i <strong>dati sono contenuti in una collezione di beans</strong>, ci tocca creare una classe che abbia un metodo statico che restituisca la collezione. Facendo riferimento al codice precedente e supponendo che la classe con il metodo statico si chiami <strong>PreparaStampa</strong>, dobbiamo modificare il datasource del precedente esempio come segue:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">JRBeanCollectionDataSource javaBeansDS <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JRBeanCollectionDataSource<span style="color: #009900;">&#40;</span>PreparaStampa.<span style="color: #006633;">dammiLista</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p><strong>CLASSICI PROBLEMI INCONTRATI DURANTE L&#8217;USO DI JASPERREPORT</strong><br />
Dopo aver creato il file jasper e aver provato a interagire con esso tramite codice java, può capitare di imbattersi nel seguente messaggio di errore:</p>
<blockquote><p>java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException</p></blockquote>
<p>In questo caso bisogna aprire il jrxml ed eliminare l&#8217;attributo <strong>language=&#8221;groovy&#8221;</strong> nel nodo <strong>jasperReport</strong>.</p>
<p>[... to be continued ...]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2010/07/jasper-report-ireport-java/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>CD/DVD SATA e windows xp o linux</title>
		<link>http://www.alessandrostella.it/windows/xp/2010/06/cddvd-sata-windows-xp-linux/</link>
		<comments>http://www.alessandrostella.it/windows/xp/2010/06/cddvd-sata-windows-xp-linux/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 13:47:54 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[sata]]></category>
		<category><![CDATA[windows xp]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1155</guid>
		<description><![CDATA[Può succedere che ci si trovi a dover installare windows xp sp2 o una distribuzione linux su un PC con lettore CD o DVD sata. In questo caso può accadere che, inserendo il CD/DVD del sistema operativo e facendo eseguire il boot da tale periferica, dopo le prime familiari schermate non succeda più nulla o [...]]]></description>
			<content:encoded><![CDATA[<p>Può succedere che ci si trovi a dover <strong>installare windows xp sp2 o una distribuzione linux su un PC con lettore CD o DVD sata</strong>. In questo caso può accadere che, inserendo il CD/DVD del sistema operativo e facendo eseguire il boot da tale periferica, dopo le prime familiari schermate non succeda più nulla o si abbia un errore da schermata blu (terrificante!).<br />
Questo comportamento non è un problema di riconoscimento degli HD sata da parte di windows xp sp2 o da parte di alcune distribuzioni di linux, sebbene questa tesi sia perorata in una miriade di blog e forum.<br />
Il problema in fase di installazione dei sistemi operativi sopra indicati può essere causato dalla difficoltà della procedura di installazione di partire da una periferica sata (CD o DVD). Per risolvere questo problema possiamo usare diverse tecniche. Quella che, secondo me, è la più immediata è <strong>avviare l&#8217;installazione del sistema operativo da periferica USB</strong>. E&#8217; quindi opportuno copiare il sistema operativo su pennina USB e avviarne l&#8217;installazione da tale periferica. In questo modo dovremmo essere in grado di installare il nostro sistema operativo e questo confuta la tesi in base alla quale windows xp sp2 non è in grado di rilevare gli HD sata. Se così fosse, infatti, il sistema operativo non sarebbe in grado di installarsi neanche partendo da periferica USB <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/xp/2010/06/cddvd-sata-windows-xp-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installare SVN su eclipse</title>
		<link>http://www.alessandrostella.it/java/eclipse/2010/06/installare-svn-su-eclipse/</link>
		<comments>http://www.alessandrostella.it/java/eclipse/2010/06/installare-svn-su-eclipse/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 10:27:34 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1143</guid>
		<description><![CDATA[Se si lavora in team su un progetto software è quasi essenziale usare un repository. Ci si trova quindi molto spesso a dover installare SVN su eclipse. In questo breve articolo, indicheremo le operazioni da eseguire per effettuare tale installazione. Con le nuove versioni di eclipse (qui si è fatta la prova con eclipse helios) [...]]]></description>
			<content:encoded><![CDATA[<p>Se si lavora in team su un progetto software è quasi essenziale usare un repository. Ci si trova quindi molto spesso a dover installare <strong>SVN su eclipse</strong>.<br />
In questo breve articolo, indicheremo le operazioni da eseguire per effettuare tale installazione.<br />
<span id="more-1143"></span><br />
Con le nuove versioni di eclipse (qui si è fatta la prova con <strong>eclipse helios</strong>) è tutto molto semplice. Apriamo eclipse e dal menù scegliamo:<br />
<em>Help/Install New Software&#8230;</em><br />
Si aprirà una nuova schermata con una casella di testo in alto (work with) nella quale incolliamo questo link:</p>
<p>http://subclipse.tigris.org/update_1.6.x</p>
<p>e diamo invio.<br />
Dopo qualche secondo, nella parte centrale, appariranno diverse voci, come mostrato nella seguente figura. Spuntiamole tutte (Core, Optional, Subeclipse) e premiamo &#8220;Finish&#8221;.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/06/svn.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/06/svn-300x243.jpg" alt="Installazione SVN per eclipse" title="Installazione SVN per eclipse" width="300" height="243" class="aligncenter size-medium wp-image-1144" /></a><br />
A questo punto dobbiamo pazientare qualche secondo, ossia il tempo necessario al sistema per scaricare i file necessari e avviare l&#8217;installazione.<br />
Durante la fase di installazione potrebbe comparire il seguente avviso:<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/06/svn_warning.jpg" alt="SVN warning" title="SVN warning" width="491" height="239" class="aligncenter size-full wp-image-1145" /><br />
premiamo convintamente &#8220;OK&#8221;.<br />
Quando tutto sarà finito ci sarà chiesto di riavviare eclipse. Riavviamo.<br />
Al riavvio avremo il nostro SVN pronto per essere configurato.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/eclipse/2010/06/installare-svn-su-eclipse/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery4j: gestire jQuery da java</title>
		<link>http://www.alessandrostella.it/java/2010/06/jquery4j-gestire-jquery-da-java/</link>
		<comments>http://www.alessandrostella.it/java/2010/06/jquery4j-gestire-jquery-da-java/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 09:50:38 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[zk]]></category>
		<category><![CDATA[zuml]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1129</guid>
		<description><![CDATA[Questa è una buona notizia per i programmatori java Da qualche tempo è nato un ambizioso progetto: jQuery4j. Il nome dice già molto da solo: jQuery4j, ossia jQuery per java. Come si può intuire quindi, il progetto ha come scopo quello di consentire agli sviluppatori java di creare le proprie funzioni jQuery lato server, con [...]]]></description>
			<content:encoded><![CDATA[<p>Questa è una buona notizia per i programmatori java <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Da qualche tempo è nato un ambizioso progetto: <strong><a href="http://code.google.com/p/jquery4j/" target="_blanck">jQuery4j</a></strong>. Il nome dice già molto da solo: jQuery4j, ossia jQuery per java.<br />
Come si può intuire quindi, <strong>il progetto ha come scopo quello di consentire agli sviluppatori java di creare le proprie funzioni jQuery lato server, con creazione dinamica degli script lato client per l&#8217;interazione con i widgets jQuery</strong>! Non male!<br />
<span id="more-1129"></span><br />
Il progetto usa <a href="http://www.zkoss.org/" target="_blanck"><strong>ZK</strong></a> per velocizzare la creazione dell&#8217;interfaccia grafica basata su jQuery4j. ZK sembra essere il migliore gestore disponibile di Ajax + Mobile, progettato per massimizzare l&#8217;efficienza operativa dell&#8217;impresa e ridurre al minimo i tempi di sviluppo e i costi.<br />
ZK realizza i propri widget tramite jQuery, risulta pertanto facile integrarlo con altri plugin jQuery. Ha un parco di oltre 120 widgets pronti all&#8217;uso (calendario, tab, popup, ecc)! Spettacolo! Insomma RIA rapido e ottimizzato! A mio parere, però, c&#8217;è una pecca: ZK per creare i propri widget in modo rapido, usa un proprio linguaggio di programmazione, <a href="http://docs.zkoss.org/wiki/ZUML" target="_blanck">ZUML (Zk User interface Markup Language)</a>; per fortuna è basato su XML, ma resta il fatto che bisogna scrivere il codice secondo i suoi dettàmi, ossia legarsi a tale piattaforma&#8230; questo non va bene. Comunque sia, i vantaggi in termini di tempo e di risultati sono davvero straordinari!</p>
<p>Tornando a jQuery4j, vediamo ora di capire come possiamo usare tutta questa struttura per scrivere il codice, lato server, che si trasformerà poi in un calendario interattivo lato client.<br />
Per fare questo dobbiamo usare quella che i progettisti di jQuery4j chiamano <strong>richlet</strong>: <em>a richlet is a small Java program that creates all necessary components in response to user&#8217;s request. You can compose the UI by purely java, without html, ZUML. The programming logic is much like swing.</em></p>
<p>Ecco qui di seguito un richlet che realizza il nostro calendario:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">org.zkoss.jquerydemo</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.zkoss.jquery4j.jqueryui.datepicker.Datepicker</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.zkoss.zk.ui.GenericRichlet</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.zkoss.zk.ui.Page</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DatepickerRichlet <span style="color: #000000; font-weight: bold;">extends</span> GenericRichlet <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> service<span style="color: #009900;">&#40;</span>Page page<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Datepicker comp <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Datepicker<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; comp.<span style="color: #006633;">setChangeMonth</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; comp.<span style="color: #006633;">setPage</span><span style="color: #009900;">&#40;</span>page<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Bisogna ovviamente settare correttemente il proprio web.xml e zk.xml affinché queste richlet funzioni correttamente, ma per i dettagli vi rimando ai siti di riferimento sopra linkati.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2010/06/jquery4j-gestire-jquery-da-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat 7 è arrivato!</title>
		<link>http://www.alessandrostella.it/java/2010/06/tomcat-7-e-arrivato/</link>
		<comments>http://www.alessandrostella.it/java/2010/06/tomcat-7-e-arrivato/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 10:03:48 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1136</guid>
		<description><![CDATA[Era davvero un po&#8217; di tempo che se ne parlava ed ora sembra proprio che ci siamo! Apache Tomcat 7 è finalmente sulla buona strada: l&#8217;ultima versione del popolare contenitore di servlet è arrivato alla fase finale dello sviluppo Ad oggi, sono state rese disponibili quattro client-release agli sviluppatori per eseguire i vari test, con [...]]]></description>
			<content:encoded><![CDATA[<p>Era davvero un po&#8217; di tempo che se ne parlava ed ora sembra proprio che ci siamo! <a href="http://tomcat.apache.org/index.html" target="_blanck"><strong>Apache Tomcat 7</strong></a> è finalmente sulla buona strada: l&#8217;ultima versione del popolare contenitore di servlet è arrivato alla fase finale dello sviluppo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Ad oggi, sono state rese disponibili quattro client-release agli sviluppatori per eseguire i vari test, con la RC4 rilasciata appena la mattina dell&#8217;8 giugno.<br />
Tomcat 7 sarà perfettamente allineato alle specifiche Servlet 3.0, offrendo una serie di vantaggi interessanti per gli utenti Tomcat, tra cui:</p>
<ul>
<li>Supporto alle annotation</li>
<li>Configurazione dinamica delle librerie tramite codice inserito nel web.xml</li>
<li>Embedding semplificato</li>
<li>Miglioramento del secure session tracking</li>
</ul>
<p>Controlla le note di rilascio di Apache Tomcat 7, oppure vai semplicemente alla <a href="http://people.apache.org/~markt/dev/tomcat-7/v7.0.0-RC4/" target="_blanck">pagina di download della RC4</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2010/06/tomcat-7-e-arrivato/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collegare wordpress a twitter</title>
		<link>http://www.alessandrostella.it/wordpress/2010/06/collegare-wordpress-twitter/</link>
		<comments>http://www.alessandrostella.it/wordpress/2010/06/collegare-wordpress-twitter/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 12:10:57 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp to twitter]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1122</guid>
		<description><![CDATA[Eh già! Abbiamo un blog basato su wordpress e abbiamo anche un account su twitter. Il nostro obiettivo è usare twitter come eco dei nostri articoli scritti su wordpress. Ossia, scrivendo un articolo su wordpress vogliamo che il titolo di tale articolo appaia, come per magia, su twitter. Si può fare Anzi, si può fare [...]]]></description>
			<content:encoded><![CDATA[<p>Eh già!<br />
Abbiamo un blog basato su wordpress e abbiamo anche un account su twitter. <strong>Il nostro obiettivo è usare twitter come eco dei nostri articoli scritti su wordpress</strong>. Ossia, scrivendo un articolo su wordpress vogliamo che il titolo di tale articolo appaia, come per magia, su twitter.<br />
Si può fare <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Anzi, si può fare in diversi modi.<br />
Noi qui useremo il più semplice: <strong>un plugin per wordpress</strong>.<br />
Ci sono molti plugin in grado di fare quello che abbiamo in mente di realizzare. Probabilmente uno dei migliori (comunque il più aggiornato e seguito) è senza dubbio <strong>WP to Twitter</strong>.<br />
Non ci resta quindi che collegarci come amministratori sul nostro blog wordpress, scegliere &#8220;Plugin&#8221; e poi &#8220;Aggiungi nuovo&#8221;. Nella schermata che ci verrà mostrata andiamo nella casella di ricerca di plugin, scriviamo &#8220;wp to twitter&#8221; (senza i doppi apici) e premiamo aggiungi. Scegliamo quindi &#8220;installa&#8221; e attiviamo il plugin.<br />
Da questo momento avremo la nuova voce &#8220;WP -> Twitter&#8221; nel menu&#8217; &#8220;Impostazioni&#8221; di wordpress. Questa voce ci consentirà di configurare il nostro nuovo plugin. L&#8217;interfaccia è per fortuna in italiano. Niente di complicato. L&#8217;unica cosa che ritengo utile fare è aprire un account su <a href="http://bit.ly/" target="_blanck">bit.ly</a> oppure su <a href="http://cli.gs/user/api/" target="_blanck">clis.gs</a>. Avere un account presso uno di questi 2 siti serve per abbreviare il link all&#8217;articolo di wordpress che verrà inserito su twitter e, sebbene nno sia obbligatorio, è auspicabile. Senza un link breve infatti, si corre il rischio di vedersi tagliare il tweet perché troppo lungo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/wordpress/2010/06/collegare-wordpress-twitter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Facebook tra privacy e dipendenza</title>
		<link>http://www.alessandrostella.it/varie/2010/06/facebook-tra-privacy-dipendenza/</link>
		<comments>http://www.alessandrostella.it/varie/2010/06/facebook-tra-privacy-dipendenza/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 08:33:26 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[varie]]></category>
		<category><![CDATA[dipendenza]]></category>
		<category><![CDATA[droga]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/varie/2010/06/facebook-tra-privacy-dipendenza/</guid>
		<description><![CDATA[Da molto tempo ormai sento parlare, in ogni dove, dei problemi che facebook ha con la privacy degli utenti, eppure gli utenti, i cui diritti sono TUTTI di proprietà facebook, sembrano ignorare completamente tali messaggi&#8230; No, non è solo la privacy il problema con questi strumenti chiamati social network&#8230; Facebook (e buona parte dei suoi [...]]]></description>
			<content:encoded><![CDATA[<p>Da molto tempo ormai sento parlare, in ogni dove, dei <strong>problemi che facebook ha con la privacy degli utenti</strong>, eppure gli utenti, i cui diritti sono TUTTI di proprietà facebook, sembrano ignorare completamente tali messaggi&#8230;<br />
No, non è solo la privacy il problema con questi strumenti chiamati social network&#8230;<br />
<strong>Facebook</strong> (e buona parte dei suoi simili) <strong>rappresenta ormai una droga</strong>.<br />
No, non sto scherzando, proprio per niente! Né sto usando una metafora. Di droga si tratta! Leggera, diversa, infida, psichica droga.<br />
<span id="more-1110"></span><br />
Avete mai provato a far smettere di fumare un fumatore comunicandogli che la sigaretta lo uccide? Cosa avete ottenuto?<br />
Lo vediamo tutti quanti, no? Basta andare in un qualunque tabacchino e prendere un qualunque pacchetto di sigarette. Su ogni pacchetto troviamo in bella mostra, nero su bianco, avvisi ben chiari che ci comunicano quanto sia pericoloso fumare. Ovviamente la dicitura sui pacchetti di sigarette, nella quale si sottolinea il fatto che &#8220;il fumo uccide&#8221;, non è scritto per aiutare un fumatore a smettere di fumare o impedire a un non fumatore di iniziare! Macchè! Buona notte! L&#8217;unico motivo per il quale tali velleitari messaggi sono stati così orribilmente esposti sui pacchetti di sigarette è che, così facendo, tanto lo Stato quanto le multinazionali che producono sigarette sono al sicuro! Loro te l&#8217;hanno detto in tutti i modi che il fumo ti uccide, quindi, se un giorno morirai di tumore ai polmoni, non vorrai mica fargli causa! Sei mica pazzo! Te l&#8217;hanno detto in tutti i modi di non fumare!<br />
Eppure il fumatore continua a fumare e il ragazzo di 15 anni continua a voler iniziare&#8230;<br />
Perchè?</p>
<p>Avete mai provato a far chiudere il proprio account facebook ad un utente comunicandogli che tutto quello che lui scrive di se stesso, tutto quello che gli altri scrivono di lui e tutte le foto da lui pubblicate sono di proprietà di facebook? Avete ottenuto qualcosa diverso dal &#8220;niente&#8221;?<br />
Eppure sulle condizioni di utilizzo che tutti dobbiamo accettare per poterci iscrivere a facebook è scritto ben chiaro come saranno gestiti i nostri i dati. Anche se in pochi leggono tali condizioni, ormai lo sanno quasi tutti. Eppure nessuno pensa davvero di chiudere il proprio account.<br />
Perché?</p>
<p>Tra le varie ragioni che rispondono a tale domanda (ignoranza, superficialità, ecc), una in particolare mi fa paura: la dipendenza! Da cui, droga! E il cerchio si chiude.</p>
<p>Ma di che tipo di droga stiamo parlando esattamente?<br />
Voi lo sapete? Ve lo chiedete? Vi rendete conto che c&#8217;è qualcosa che non torna nell&#8217;ostinata volontà di continuare a usare tali strumenti?</p>
<p>Meditate gente, meditate&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/varie/2010/06/facebook-tra-privacy-dipendenza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida a SmartBlock</title>
		<link>http://www.alessandrostella.it/windows/2010/05/guida-smartblock/</link>
		<comments>http://www.alessandrostella.it/windows/2010/05/guida-smartblock/#comments</comments>
		<pubDate>Fri, 28 May 2010 19:38:20 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[smartBlock]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1079</guid>
		<description><![CDATA[Eccoci qui a scrivere un&#8217;altra guida a un software per bloccare chiamate ed sms non graditi su windows mobile! Questa volta parliamo di SmartBlock, il software della Efficasoft che prova a bloccare chiamate ed sms in ingresso. Scarichiamolo e installiamolo. Una volta lanciato SmartBlock si presenta come mostrato nella figura qui a sinistra. Da questa [...]]]></description>
			<content:encoded><![CDATA[<p>Eccoci qui a scrivere un&#8217;altra guida a un <a href="http://www.alessandrostella.it/windows/2010/05/windows-mobile-bloccare-chiamate-in-entrata/">software per bloccare chiamate ed sms non graditi</a> su windows mobile!<br />
Questa volta parliamo di <strong>SmartBlock</strong>, il software della Efficasoft che prova a bloccare chiamate ed sms in ingresso.<br />
<span id="more-1079"></span><br />
<a href="http://www.efficasoft.com/smartblock/index_ppc.html" target="_blanck">Scarichiamolo</a> e installiamolo.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/05/smartBlock_01.gif" alt="SmartBlock - Schermata iniziale" title="SmartBlock - Schermata iniziale" width="240" height="320" class="alignleft size-full wp-image-1080" /><img src="http://www.alessandrostella.it/wp-content/uploads/2010/05/smartBlock_03.jpg" alt="SmartBlock - Il Menu" title="SmartBlock - Il Menu" width="240" height="320" class="alignright size-full wp-image-1083" />Una volta lanciato SmartBlock si presenta come mostrato nella figura qui a sinistra. Da questa prima schermata si capisce già tutto <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Nella sezione &#8220;Mode&#8221; decidiamo quale modo (ma va&#8217;) di bloccaggio vogliamo usare, mentre nella sezione &#8220;Block&#8221; decidiamo cosa bloccare. In basso a destra notiamo il link &#8220;Menu&#8221; premendo il quale possiamo notare le voci della figura in alto a destra. Premendo la voce &#8220;Options&#8221; accediamo alla configurazione del programma, come possiamo notare nell&#8217;immagine qui in basso. Le voci presenti sono abbastanza chiare, ma ne daremo comunque una rapida descrizione.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/05/smartBlock_02.gif" alt="SmartBlock - Le opzioni" title="SmartBlock - Le opzioni" width="240" height="320" class="alignleft size-full wp-image-1085" />
<ul>
<li><strong>Auto Startup</strong>: consente l&#8217;avvio automatico di SamrtBlock all&#8217;avvio del sistema</li>
<li><strong>Log blocked calls/sms</strong>: consente di tenere traccia, in appositi file di log, di telefonate ed sms bloccati</li>
<li><strong>Del. blocked calls from Call History</strong>: consente l&#8217;eliminazione automatica dall&#8217;elenco delle telefonate perse delle telefonate ricevute dai numeri bloccati</li>
<li><strong>Block unknown/private calls</strong>: consente di bloccare le telefonate provenienti da numeri non presenti in rubrica o anonime</li>
<li><strong>Enabled password</strong>: consente di impostare un password per avviare/configurare SmartBlock</li>
<li><strong>Enable sms content filter</strong>: consente di indicare, nella casella di testo sottostante, alcune parole che qualora ritrovate in un sms ne determinano l&#8217;eliminazione</li>
<li><strong>Auto send sms in meeting</strong>: se si sceglie &#8220;Meeting&#8221; tra i 3 modi di utilizzo di SmartBlock, questa spunta consente di inviare un sms in risposta alla telefonata ricevuta</li>
</ul>
<p>Va bene, ma per bloccare un numero come bisogna procedere?<br />
Niente di difficile. Basta scegliere &#8220;Black list&#8221; come &#8220;Mode&#8221; e poi Menu/Black list.<br />
Nella nuova schermata che ci appare possiamo inserire un numero non presente in rubrica, oppure scegliere uno o più numeri dalla rubrica. Fine. Da questo momento il/i numero/i indicati nella black list non saranno in grado di chiamarci né di inviarci sms <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2010/05/guida-smartblock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows mobile. Bloccare chiamate in entrata</title>
		<link>http://www.alessandrostella.it/windows/2010/05/windows-mobile-bloccare-chiamate-in-entrata/</link>
		<comments>http://www.alessandrostella.it/windows/2010/05/windows-mobile-bloccare-chiamate-in-entrata/#comments</comments>
		<pubDate>Sun, 23 May 2010 15:07:11 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[call block]]></category>
		<category><![CDATA[call firewall]]></category>
		<category><![CDATA[call sms blocker]]></category>
		<category><![CDATA[callerIDBlock]]></category>
		<category><![CDATA[coldCallBlocker]]></category>
		<category><![CDATA[easy busy]]></category>
		<category><![CDATA[foneBlock]]></category>
		<category><![CDATA[magicall]]></category>
		<category><![CDATA[photo contacts pro]]></category>
		<category><![CDATA[smartBlock]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1061</guid>
		<description><![CDATA[In molti spacciano i programmini di cui parliamo in questo post come un valido aiuto per non essere disturbati durante una riunione di lavoro oppure per non essere chiamati dai colleghi quando non si è al lavoro, o in altre situazioni più o meno gestibili da un semplice &#8220;togli la suoneria&#8221; La verità è che [...]]]></description>
			<content:encoded><![CDATA[<p>In molti spacciano i programmini di cui parliamo in questo post come un valido aiuto per non essere disturbati durante una riunione di lavoro oppure per non essere chiamati dai colleghi quando non si è al lavoro, o in altre situazioni più o meno gestibili da un semplice &#8220;togli la suoneria&#8221; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
La verità è che <strong>questi programmi servono, quasi esclusavimente, a impedire a persone troppo &#8220;insistenti&#8221; di chiamarci o inviarci sms&#8230;</strong><br />
<span id="more-1061"></span><br />
Effettuando un piccolo scouting online alla ricerca di programmi che ci possono aiutare nel nostro scopo, possiamo imbatterci in quelli elencati qui sotto. In alcuni casi ci sono anche delle piccole guide all&#8217;uso.</p>
<ul>
<li><a href="http://www.alessandrostella.it/windows/2010/05/guida-call-firewall/">Call Firewall</a> (freeware)</li>
<li><a href="http://www.alessandrostella.it/windows/2010/05/guida-magicall/">MagiCall</a> (commerciale, circa 25$)</li>
<li><a href="http://www.pocketgear.com/en/usd/plattform:windowsmobile/2857961,product-details.html?M2DPId=100952" target="_blanck">Call Block</a> (commerciale, circa 12$)</li>
<li><a href="http://www.winmobileapps.com/device/pocketpc/csb/csb.aspx" target="_blanck">Call SMS Blocker</a> (commerciale, circa 20$)</li>
<li><a href="http://www.pocketx.net/products/photocontactspro_ppc/" target="_blanck">Photo Contacts pro</a> (commerciale, circa 30$)</li>
<li><a href="http://www.efficasoft.com/smartblock/index_ppc.html" target="_blanck">SmartBlock</a> (commerciale, circa 11$)</li>
<li><a href="http://www.coldcallblocker.com/download/wm/" target="_blanck">ColdCallBlocker</a> (commerciale, circa 13$)</li>
<li><a href="http://mobiletimes.site50.net/calleridblock.html" target="_blanck">CallerIDBlock</a> (commerciale, circa 10$)</li>
<li><a href="http://mobiletimes.site50.net/foneblock.html" target="_blanck">FoneBlock</a> (commerciale, circa 10$)</li>
<li><a href="http://riaysoft.perso.sfr.fr/en/?Windows_Phone:Phone_Call_Blocker" target="_blanck">RiAy Phone Call Blocker</a> (commerciale, circa 13$)</li>
<li><a href="http://handheld.softpedia.com/get/System-Utilities/Communications/Pocket-Call-Bouncer-85550.shtml" target="_blanck">Pocket Call Bouncer</a> (freeware)</li>
<li><a href="http://www.panoramicsoft.com/mobileapps/phonegenius/PhoneGenius.php" target="_blanck">Panoramic Call Genius</a> (commerciale, circa 10$)</li>
<li><a href="http://www.handango.it/Dettaglio_Prodotto/254113/Easy_Busy.php" target="_blanck">Easy Busy</a> (commerciale, circa 7$)</li>
<li><a href="http://www.imobiletool.com/block-incoming-calls.html" target="_blanck">iMobileTool Incoming Calls Blocker</a> (commerciale, circa 20$)</li>
<li><a href="http://handheld.softpedia.com/get/System-Utilities/Communications/BlockUs-80181.shtml" target="_blanck">BlockUs</a> (commerciale, circa 10$)</li>
</ul>
<p>&#8230;e diversi altri le cui valutazioni degli utenti però son troppo basse. In base alle informazioni recuperate in rete, potremmo pensare di provarne alcuni e nno altri, ma noi siam troppo curiosi e quindi proveremo a scaricarli, installarli e provarli tutti <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Dunque&#8230;<br />
per <a href="http://www.alessandrostella.it/windows/2010/05/guida-call-firewall/">Call Firewall</a>, <a href="http://www.alessandrostella.it/windows/2010/05/guida-magicall/">MagiCall</a> e <a href="http://www.alessandrostella.it/windows/2010/05/guida-smartblock/">SmartBlock</a> vale la pena aprire un capitolo a parte <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Circa gli altri questo è il mio personale (ma motivato) parere.<br />
<strong>Call Block</strong> è senza dubbio degno di nota, ma è troppo lento nel dare il segnale di occupato al chiamante&#8230; A volte si sentono anche 2 squilli prima di ritrovarsi il telefono &#8220;chiuso in faccia!&#8221;. Peccato!<br />
<strong>Call SMS Blocker</strong> è stato creato da dei furbi che non prevedono una versione trial! Quindi o lo compri o non lo puoi provare. Noi ovviamente non lo proveremo! Fuck!<br />
<strong>SmartBloc</strong>k mantiene le promesse. Blocca senza troppi complimenti chiamate (segnale immediato di occupato) ed sms. Parte da solo all&#8217;avvio del sistema e resta silente senza dare fastidio. Magari non permette sofisticate impostazioni su orari e giorni della settimana, ma &#8220;sopprime&#8221; gli indesiderati e non lascia tracce <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Pertanto, visto il suo prezzo, mi sento di dire che trattasi del miglior rapporto qualità/prezzo.<br />
<strong>ColdCallBlocker</strong> necessita di registrazione per poter scaricare la versione di prova&#8230; Scartato!<br />
<strong>CallerIDBlock</strong>&#8230; direi&#8230; una chiavica! Lasciate perdere.<br />
<strong>FoneBlock</strong>, come sopra. Mmmah!<br />
<strong>RiAy Phone Call Blocker</strong> funziona così, così&#8230; cioè può anche succedere che un numero bloccato&#8230; riesca a chiamrci. Inoltre anche questo software, allo stato attuale, non è in grado di filtrare gli sms. Filtra solo chiamate. Infine non trasmette il classico segnale di occupato, ma un suono strano e lo fa per appena 2 secondi; poi chiude <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Autoritario!<br />
<strong>Pocket Call Bounce</strong>r sembra più un giocattolo, un divertimento, un esperimento del programmatore piuttosto che un vero e proprio programma usabile&#8230;<br />
<strong>Easy Busy</strong> è tra i pochi a riuscire davvero a far sentire al chiamante il segnale di occupato, senza farlo precedere da uno o più squilli normali; come già detto però non prevede (al momento) la funzionalità per il blocco degli sms <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
<strong>iMobileTool Incoming Calls Blocker</strong> costa troppo per quello che fa, decisamente; non blocca neanche gli sms! Negativo.<br />
<strong>BlockUs</strong>&#8230; non ho idea di cosa si possa trovare di &#8220;utile&#8221; in questo programma. Direi&#8230; inutile!<br />
Su <strong>Photo Contacts Pro</strong> e <strong>Panoramic Call Genius</strong> non so cosa dire&#8230; Esteticamente sono molto belli, con tante piccole chicche, ma che esulano dai nostri scopi; insomma si, è vero, hanno integrato il blocco chiamate ed sms, ma fanno anche un sacco di altre cose che non hanno niente a che fare con il blocco di chiamate ed sms.</p>
<p>Conclusione.<br />
Se la vostra scelta dovesse dipendere da un mio parere, beh, allora direi <a href="http://www.alessandrostella.it/windows/2010/05/guida-call-firewall/">Call Firewall</a> per chi non vuole spendere soldi. Se invece abbiamo 20 euro da usare direi di scegliere tra <a href="http://www.alessandrostella.it/windows/2010/05/guida-magicall/">MagiCall</a> e SmartBlock. E se invece ci importa solo il blocco delle telefonate e non degli sms, non ho dubbi: <strong>Easy Busy</strong>.</p>
<p>Tenete però presente che tutti (tranne Easy Busy e SmartBlock) sembrano soffrire del problema del mezzo o uno squillo iniziale che viene sentito dal chiamante bloccato&#8230; Sembra un problema non risolvibile che però su terminali molto veloci tende a scomparire&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2010/05/windows-mobile-bloccare-chiamate-in-entrata/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Guida a MagiCall</title>
		<link>http://www.alessandrostella.it/windows/2010/05/guida-magicall/</link>
		<comments>http://www.alessandrostella.it/windows/2010/05/guida-magicall/#comments</comments>
		<pubDate>Tue, 18 May 2010 21:04:31 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[magicall]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=1006</guid>
		<description><![CDATA[Dopo aver provato l&#8217;ebrezza di Call Firewall, non ho potuto esimermi dall&#8217;esaminare anche MagiCall. MagiCall è un software per windows mobile in grado di filtrare le chiamate in entrata e in uscita. In altre parole MagiCall ci consente di decidere chi può chiamarci e chi&#8230; no Volendo fare un veloce paragone con Call Firewall, possiamo [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo aver provato l&#8217;ebrezza di <a href="http://www.alessandrostella.it/windows/2010/05/guida-call-firewall/">Call Firewall</a>, non ho potuto esimermi dall&#8217;esaminare anche <strong>MagiCall</strong>.<br />
<strong>MagiCall </strong>è un software per windows mobile in grado di filtrare le chiamate in entrata e in uscita. In altre parole MagiCall ci consente di decidere chi può chiamarci e chi&#8230; no <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Volendo fare un veloce paragone con Call Firewall, possiamo senza dubbio dire che MagiCall è più performante, meno intuitivo e a pagamento.<br />
<a href="http://www.mobiion.com/magicall.html" target="_blanck">Scarichiamolo.</a></p>
<p><img src="http://www.alessandrostella.it/wp-content/uploads/2010/05/MagiCall_01.gif" alt="MagiCall" title="MagiCall" width="240" height="320" class="alignleft size-full wp-image-1007" />Una volta installato e lanciato, ci troviamo di fronte a una schermata vuota e senza molte idee <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
La possiamo notare qui a sinistra. E adesso?<br />
Focalizziamo la nostra attenzione ai quattro angoli della sua interfaccia grafica:<br />
in alto a sinistra: <strong>Running</strong><br />
in alto a destra: <strong>All</strong><br />
in basso a sinistra: <strong>New</strong><br />
in basso a destra: <strong>Menu</strong></p>
<p>MagiCall si governa da queste 4 voci.<br />
Vediamole nel dettaglio.</p>
<p><strong>Running</strong><br />
Premendo su Running otterremo &#8220;Stopped&#8221;, ossia fermiamo il programma.</p>
<p><strong>All</strong><br />
Questa voce decide cosa mostrare nella parte centrale della schermata, dove ora è tutto bianco. Le possibilità sono:<br />
- All (mostra tutto)<br />
- Inbound (mostra solo le regole per le chiamate in ingresso)<br />
- Outbound (mostra solo le regole per le chiamate in uscita)<br />
- SMS (mostra solo le regole per gli sms)<br />
- Missed (mostra solo le regole per le chiamate perse)</p>
<p><strong>New</strong><br />
Premendo &#8220;New&#8221; possiamo creare una nuova regola, un nuovo filtro da applicare a chiamate o sms</p>
<p><strong>Menu</strong><br />
Premendo &#8220;Menu&#8221; accediamo al log, alla guida (in inglese, ma presente), alle opzioni e alla registrazione (ricordo che il software è a pagamento)<br />
<span id="more-1006"></span><br />
Bene. Dopo questo rapido excursus sul sistema, procediamo nella realizzazione di una regola per impedire di &#8220;rompere!&#8221; ad alcuni numeri da noi scelti <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
In realtà, come accenneremo più avanti, MagiCall può fare molto di più!</p>
<p>Nell prima schermata, quella mostrata in alto, premiamo su <strong>New</strong>.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/05/MagiCall_02.gif" alt="Magi Call - Aggiungiamo una nuova regola" title="Magi Call - Aggiungiamo una nuova regola" width="240" height="320" class="alignleft size-full wp-image-1010" />Quello che vedremo è qualcosa di molto simile a quanto mostrato qui a sinistra, dove possiamo osservare 4 tab: Filter, Operation, Appointment e Others. Noi tratteremo solo i primi 2: Filter e Operation.<br />
<strong>Il tab Filter</strong><br />
Per prima cosa scegliamo il &#8220;Rule Name&#8221;, ad esempio &#8220;Blocco Alessandro&#8221; (senza i doppi apici). Esso comparirà nella schermata principale.<br />
&#8220;Rule Type&#8221; descrive il tipo di regola che abbiamo intenzione di creare. Può assumere uno di 4 valori:<br />
- Incoming Call (regola per le chiamate in ingresso)<br />
- Outgoing Call (regola per le chiamate in uscita)<br />
- SMS (regola per gli sms)<br />
- Missed Call (regola per le chiamate perse)</p>
<p>Poiché noi vogliamo bloccare un numero in ingresso, scegliamo &#8220;Incoming Call&#8221;.<br />
&#8220;Filter Type&#8221; indica il tipo di filtro da applicare. Ad esempio blocca uno specifico numero (Specific Number) oppure blocca i miei contatti (Contacts) ecc. Se lasciamo &#8220;All&#8221;, blocchiamo tutti i numeri in ingresso&#8230;pensiamoci bene <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Come detto prima, noi vogliamo bloccare un particolare numero, per cui scegliamo &#8220;Specific Number&#8221;.<br />
A questo punto, sotto &#8220;Filter Type&#8221;, comparirà la voce &#8220;Phone #&#8221;. Sulla stessa riga di questa voce, ma all&#8217;estrema destra, vedremo una freccia strana. Dobbiamo premerla!<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/05/MagiCall_03.gif" alt="MagiCall - Aggiungiamo un numero di telefono da bloccare" title="MagiCall - Aggiungiamo un numero di telefono da bloccare" width="240" height="320" class="alignleft size-full wp-image-1015" />La pressione di quella freccia ci condurrà in una nuova schermata che, dopo aver premuto la voce &#8220;Menu&#8221;, somiglierà molto a quanto vediamo qui a sinistra.<br />
Scegliendo &#8220;New Item&#8221; ci verrà chiesto il numero telefonico che si intende bloccare.<br />
Scegliendo &#8220;Select Outlook Contacts&#8221; ci verrà proposto l&#8217;elenco dei nostri contatti in rubrica dai quali poteremo scegliere uno o più numeri.<br />
E così via&#8230;<br />
Scegliamo, per esempio, &#8220;Select Outlook Contacts&#8221; e spuntiamo il numero malefico (o i numeri malefici). Poi scegliamo &#8220;OK&#8221; e di nuovo &#8220;OK&#8221;.</p>
<p><strong>Il tab Operation</strong><br />
Finito con il tab Filter, passiamo al tab &#8220;Operation&#8221; in cui andremo a specificare quale azione vogliamo intraprendere con il/i numero/i selezionato/i.<br />
In &#8220;Action1&#8243; selezioniamo &#8220;Hang up&#8221; (ossia occupato!). In questo modo quando il nostro &#8220;amico&#8221; ci chiamerà, il nostro telefono risulterà perennemente occupato <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  (ma siamo davvero bastardi!)<br />
Abbiamo finito: premiamo in basso a sinistra &#8220;Save&#8221;.</p>
<p>A questo punto il sistema ci riporterà indietro, alla prima schermata, che però non sarà più vuota: conterrà la voce Blocco Alessandro <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Bene. Ora non ci resta che fare un po&#8217; di prove&#8230; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Per avere tutti i dettagli su come usare questo mitico programmino, vi rimando alla <a href="http://www.mobiion.com/mgcguide.html" target="_blanck">guida sul sito ufficiale</a>.</p>
<p>Dobbiamo porre attenzione a un problema riscontrato su alcuni terminali. <strong>Può succedere che non funzioni il filtro sugli sms</strong>. Se ci si dovesse trovare in una tale situzione è consigliabile seguire i seguenti passi:</p>
<ol>
<li>riavviare il terminale (soft reset) e riprovare</li>
<li>se il punto 1 non porta risultati, disinstallare MagiCall</li>
<li>riavviare il terminale</li>
<li>reinstallare MagiCall</li>
<li>riavviare il terminale</li>
<li>creare un filtro sugli sms e verificarne il funzionamento</li>
<li>se il filtro insisite a non funzionare potrebbe essere necessario un hard reset, ma a quel punto non so se sia conveniente&#8230;
</li>
</ol>
<p>MagiCall e Call Firewall non son certo gli unici 2 programmi in gradi di fare quanto descritto. <a href="http://www.alessandrostella.it/windows/2010/05/windows-mobile-bloccare-chiamate-in-entrata/">Qui</a>, trovate un articolo con un elenco (non esaustivo, ma ampio) di software con gli stessi, o molto simili, scopi.<br />
Buona privacy a tutti&#8230; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2010/05/guida-magicall/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Guida a Call Firewall</title>
		<link>http://www.alessandrostella.it/windows/2010/05/guida-call-firewall/</link>
		<comments>http://www.alessandrostella.it/windows/2010/05/guida-call-firewall/#comments</comments>
		<pubDate>Wed, 12 May 2010 10:53:15 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[call firewall]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=965</guid>
		<description><![CDATA[Se ci siamo messi alla ricerca di una guida a questo programmino, è perché abbiamo la necessità di rinchiuderci nella nostra privacy Call Firewall infatti è un programma per windows mobile che si occupa di bloccare telefonate e sms provenienti di numeri a noi invisi. Quella che segue vuole essere una piccola guida per usarlo [...]]]></description>
			<content:encoded><![CDATA[<p>Se ci siamo messi alla ricerca di una guida a questo programmino, è perché abbiamo la necessità di rinchiuderci nella nostra privacy <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<strong>Call Firewall</strong> infatti è un programma per windows mobile che si occupa di bloccare telefonate e sms provenienti di numeri a noi invisi.<br />
Quella che segue vuole essere una piccola guida per usarlo nel modo corretto.<br />
Mi pare che la prima cosa da fare sia scaricarlo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Possiamo scaricare il programma da <a href="http://www.freewarepocketpc.net/ppc-download-call-firewall-v1-4.html" target="_blanck">qui</a> oppure da <a href="http://handheld.softpedia.com/get/System-Utilities/Communications/Call-Firewall-39356.shtml" target="_blanck">qui</a>.<br />
Prima di procedere all&#8217;installazione dobbiamo rimuovere eventuali precedenti versioni e verificare che non sia rimasto (dopo la disinstallazione) il file <strong>Callfirewall.xml</strong> nella cartella di installazione! Se lo troviamo, eliminiamolo. Inoltre abbiamo bisogno del <a href="http://www.google.it/search?hl=it&#038;q=download+.net+compact+framework&#038;aq=1&#038;aqi=g2&#038;aql=&#038;oq=download+.net+comp&#038;gs_rfai=" target="_blanck">.NET compact framework!</a><br />
<span id="more-965"></span><br />
Bene.<br />
Dopo aver installato Call Firewall, ci troveremo di fronte alla schermata che vediamo qui sotto. Non è niente di difficile, ma se non abbiamo mai usato Call Firewall, si può avere qualche difficoltà iniziale.<img class="size-full wp-image-969 alignleft" title="Call Firewall" src="http://www.alessandrostella.it/wp-content/uploads/2010/05/CallFirewall_00.gif" alt="Schermata principale di Call Firewall" width="240" height="320" style="padding-bottom:20px"/><br />
Andiamo con ordine.<br />
L&#8217;interfaccia principale è suddivisa in 3 riquadri:<br />
- Mode<br />
- Reply with SMS<br />
- Add Call as Appointment</p>
<p>Il primo riquadro, <strong>Mode</strong>, è quello più importante.<br />
Premendo sulla lista di fianco all&#8217;etichetta &#8220;Mode:&#8221; accediamo ai modi in cui possiamo usare questo programma:<br />
- Accept All Calls<br />
- Black List<br />
- My Contacts Only<br />
- White List<br />
- Reject All Calls<br />
<img class="size-full wp-image-968 alignleft" title="Call Firewall - Lista modi di utilizzo" src="http://www.alessandrostella.it/wp-content/uploads/2010/05/CallFirewall_011.gif" alt="" width="240" height="320" /><br />
Osservando l&#8217;immagine qui a sinistra, entriamo nel dettaglio di ogni singola voce.<br />
<strong>Accept All Calls</strong> rende inutile il programma, nel senso che non viene effettuato alcun filtro sulle chiamate.<br />
<strong>Black List</strong> ci rende irreperibili solo a particolari numeri di telefono che dovremo aver cura di indicare nell&#8217;apposita black list (vedremo più avanti come fare).<br />
<strong>My Contacts Only</strong> consente di farci contattare solo dai contatti presenti in rubrica.<br />
<strong>White List</strong> ci rende reperibili solo e soltanto ai numeri di telefono che noi dovremo aver cura di indicare in un&#8217;apposita white list.<br />
<strong>Reject All Calls</strong> ci rende di fatto irreperibili.<br />
Le altre voci nel riquadro &#8220;Mode:&#8221; sono:</p>
<ul>
<li>Reject Unknown/Private Calls (impedisce di chiamarci ai numeri sconosciuti, cioè non in rubrica, e privati cioè anonimi)</li>
<li>Enable SMS Filter (oltre a bloccare le telefonate, possiamo bloccare anche gli sms; questa spunta si occupa proprio di questo)</li>
<li>Enable Call Barring (abilita il blocco delle chiamate in base al &#8220;Mode&#8221; scelto all&#8217;inizio del riquadro, ossia se vogliamo che &#8216;sto coso funzioni, dobbiamo sempre mettere la spunta a questa voce)</li>
</ul>
<p>Il secondo riquadro, <strong>Reply with SMS</strong>, serve per impostare un sms da inviare in automatico quando uno dei numeri bloccati prova a chiamarci. Spuntando anche la voce &#8220;Ask me before replying&#8221; ci verrà chiesto se inviare o meno l&#8217;sms. Senza questa spunta l&#8217;sms parte in automatico.</p>
<p>Infine il terzo riquadro, <strong>Add Call as Appointment</strong>, consente di disabilitare i filtri in particolari orari o momenti.</p>
<p>Va bene. Adesso abbiamo capito cosa può fare Call Firewall.<br />
Come facciamo a farglielo fare? <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Prendiamo il classico caso in cui non vogliamo essere contatti (il telefono risulta occupato) da un particolare numero.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/05/CallFirewall_04.gif" alt="" title="Call Firewall - Black List" width="240" height="320" class="alignleft size-full wp-image-994" />Per fare questo andiamo nel primo riquadro e dal menù &#8220;Mode:&#8221; scegliamo &#8220;Black List&#8221;; mettiamo poi la spunta alla voce &#8220;Enable Call Barring&#8221;.<br />
Ora premiamo sulla voce &#8220;Menu&#8221;, in basso a destra e scegliamo &#8220;Black List Options&#8221;. Apparirà una schermata nella quale possiamo indicare o un &#8220;tipo&#8221; (pattern) di numeri da bloccare (per esempio tutti i numeri che iniziano con 347), oppure i numeri esatti (numbers) da bloccare. Scegliamo &#8220;NUMBERS&#8221; e proseguiamo. Apparirà la schermata qui a sinistra.<br />
Al centro vengono elencati i numeri che appartengono alla black list. In alto, alla sinistra del pulsante &#8220;Add&#8221;, possiamo scrivere un numero da bloccare (comprensivo di prefisso internazionale!!!). Premendo il pulsante &#8220;Add&#8221; tale numero verrà aggiunto alla black list.<br />
In basso troviamo 2 bottoni:<br />
&#8220;Add Last Caller&#8221; premendo il quale aggiungiamo alla black list l&#8217;ultimo numero che ci ha chiamati;<br />
&#8220;From Contacts&#8221; che ci consente di scegliere un numero dalla rubrica.<br />
Completata la nostra Black List non ci resta che premere il pulsante &#8220;Save&#8221;.<br />
Da questo momento i numeri nella Black List che proveranno a chiamarci troveranno il nostro numero occupato <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Lo stesso procedimento si può seguire per la White List.</p>
<p>Purtroppo nella versione attuale, 1.4, <strong>Call Firewall ha alcune pecche</strong>.<br />
La più importante e grossolana è rappresentata dal fatto che quando un numero bloccato ci chiama, il telefono risulta libero per circa 2 squilli prima di dare effettivamente il segnale di occupato&#8230; Questo comportamento sarebbe assolutamente da evitare, ma per il momento il programmatore non è riuscito a venirne a capo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Call Firewall non è certo l&#8217;unico programma in gradi di fare quanto descritto. <a href="http://www.alessandrostella.it/windows/2010/05/windows-mobile-bloccare-chiamate-in-entrata/">Qui</a>, trovate un articolo con un elenco (non esaustivo, ma ampio) di software con gli stessi, o molto simili, scopi.<br />
Buona privacy a tutti&#8230; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2010/05/guida-call-firewall/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Could not execute PROPPATCH</title>
		<link>http://www.alessandrostella.it/java/eclipse/2010/04/execute-proppatch/</link>
		<comments>http://www.alessandrostella.it/java/eclipse/2010/04/execute-proppatch/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:02:21 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=962</guid>
		<description><![CDATA[Usando eclipse in progetti distrubuiti in cui i componenti del team di sviluppo sono fisicamente distanti, capita molto spesso di avere a che fare con uno dei suoi tanti plugin: SVN. Usando questo plugin può però capitare che, di punto in bianco e senza alcun apparente motivo, esso non consenta più di effettuare i propri [...]]]></description>
			<content:encoded><![CDATA[<p>Usando <strong>eclipse</strong> in progetti distrubuiti in cui i componenti del team di sviluppo sono fisicamente distanti, capita molto spesso di avere a che fare con uno dei suoi tanti plugin: <strong>SVN</strong>.<br />
Usando questo plugin può però capitare che, di punto in bianco e senza alcun apparente motivo, esso non consenta più di effettuare i propri commit, rispondendo nel modo riportato nel titolo del presente articolo, ossia:<br />
<strong>Could not execute PROPPATCH</strong><br />
Se ci si trova in questa situazione, si può provare a risolvere la questione modificando la <strong>SVN interface</strong>.<br />
Per fare questo apriamo eclipse e scegliamo &#8220;Window/Preferences&#8230;/Team/SVN&#8221;. Cerchiamo SVN Interface e scegliamo SVNKit (Pure Java). Poi Apply e OK.<br />
Riproviamo ora a eseguire i nostri commit.<br />
Facciamo attenzione al fatto che con tale modifica in fase di commit ci verrà quasi certamente richiesta un&#8217;utenza abilitata all&#8217;accesso al repository; dobbiamo quindi averne una a portata di mano.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/eclipse/2010/04/execute-proppatch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, ciclo di vita degli oggetti e garbage collection</title>
		<link>http://www.alessandrostella.it/java/2010/04/java-ciclo-di-vita-degli-oggetti-garbage-collection/</link>
		<comments>http://www.alessandrostella.it/java/2010/04/java-ciclo-di-vita-degli-oggetti-garbage-collection/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 15:32:25 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[garbage collector]]></category>
		<category><![CDATA[heap]]></category>
		<category><![CDATA[runtime stack]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=953</guid>
		<description><![CDATA[Su questo argomento si trova davvero poco online&#8230; davvero poco (almeno in italiano). Effettivamente si può considerare un argomento &#8220;di nicchia&#8221;, ma come si fa a non conoscere certi argomenti e poi esigere di esser chiamati &#8220;programmatori java&#8221;? Comunque sia, chiariamo subito una cosa che sembra essere poco chiara: In java, il ciclo di vita [...]]]></description>
			<content:encoded><![CDATA[<p>Su questo argomento si trova davvero poco online&#8230; davvero poco (almeno in italiano). Effettivamente si può considerare un argomento &#8220;di nicchia&#8221;, ma come si fa a non conoscere certi argomenti e poi esigere di esser chiamati &#8220;programmatori java&#8221;?<br />
Comunque sia, chiariamo subito una cosa che sembra essere poco chiara:<br />
<strong>In java, il ciclo di vita di un oggetto parte dal momento della sua creazione (cioè quando si usa la parola chiave <em>new</em>) e finisce quando l&#8217;oggetto è eliminato dal garbage collector.</strong><br />
In java l&#8217;allocamento degli oggetti nella RAM avviene in uno spazio di memoria riservato che prende il nome di <strong>heap</strong>. Per quanto questo spazio possa essere grande, esso è comunque finito e può quindi saturarsi. Per questo motivo la JVM, di tanto in tanto, ripulisce la heap dagli oggetti non più necessari. A tale scopo essa usa il <strong>garbage collector (gc)</strong>. Esso è autonomamente in grado di decidere quali oggetti eliminare e quali no. Ma come fa questo strumento a prendere tali decisioni? Per rispondere a questa domanda dobbiamo necessariamente addentrarci nelle attività svolte dalla JVM.<br />
Java è un sistema thread-based multitasking. Paroloni da paura che per adesso lasciamo così come sono. Quello che ci interessa sapere è che ogni thread ha il proprio <strong>runtime stack</strong> il quale viene usato per gestire l&#8217;esecuzione dei metodi. Ogni elemento di questo stack viene chiamato <strong>activation record</strong> e corrisponde ad una chiamata di un metodo. <strong>E&#8217; proprio analizzando il runtime stack dei vari thread attivi che il garbage collector riesce a comprendere quale oggetto lasciare vivo e quale eliminare! Se il gc trova nella heap un oggetto che non ha alcun riferimento nei vari runtime stack e non viene richiamato da altri oggetti, allora il gc procede alla eliminazione dalla RAM di quell&#8217;oggetto</strong>, liberando memoria.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2010/04/java-ciclo-di-vita-degli-oggetti-garbage-collection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows XP, errore hardware su disco</title>
		<link>http://www.alessandrostella.it/windows/2010/04/windows-xp-errore-hardware-su-disco/</link>
		<comments>http://www.alessandrostella.it/windows/2010/04/windows-xp-errore-hardware-su-disco/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 09:05:38 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[XP]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=941</guid>
		<description><![CDATA[Situazione: pc portatile (o fisso) con windows vista preinstallato. Obiettivo: eliminare windows vista e installare windows XP (quindi niente dual boot). Nel contesto appena descritto ci si può trovare di fronte al seguente errore durante l&#8217;installazione di windows XP: Impossibile avviare windows a causa di un problema di configurazione hardware del disco del computer. Impossibile [...]]]></description>
			<content:encoded><![CDATA[<p>Situazione:<br />
pc portatile (o fisso) con <strong>windows vista preinstallato</strong>.<br />
Obiettivo:<br />
<strong>eliminare windows vista e installare windows XP</strong> (quindi niente dual boot).</p>
<p>Nel contesto appena descritto ci si può trovare di fronte al seguente errore durante l&#8217;installazione di windows XP:<br />
<strong>Impossibile avviare windows a causa di un problema di configurazione hardware del disco del computer. Impossibile leggere il disco di avvio selezionato. Controllare il percorso di avvio e l&#8217;hardware del disco</strong></p>
<p>Le ragioni di un tale errore possono essere molteplici e sono quasi tutte descritte in <a href="http://support.microsoft.com/kb/314477/it" target="_blanck">questo articolo</a> della stessa microsoft.<br />
Tuttavia c&#8217;è un caso, anche piuttosto comune, non trattato nel citato articolo.<br />
Ammettiamo di avere un pc portatile con preinstallato windows vista e ammettiamo di voler eliminare vista e installare windows XP. Se, in tale situazione, si presenta l&#8217;errore di cui sopra, la soluzione al problema potrebbe essere molto semplice.<br />
Pracediamo in questo modo:</p>
<ol>
<li>facciamo partire il PC dal CD di windows XP</li>
<li>eliminiamo <strong>tutte</strong> le partizioni esistenti sul disco</li>
<li>creiamo poi <strong>un&#8217;unica partizione NTFS</strong></li>
<li>installiamo windows XP su tale partizione</li>
</ol>
<p>Fine.<br />
Al riavvio della macchina l&#8217;errore potrebbe essere scomparso. Se così non fosse, allora procediamo come indicato nell&#8217;<a href="http://support.microsoft.com/kb/314477/it" target="_blanck">articolo della microsoft</a>.<br />
Se poi per noi è (giustamente) importante avere una seconda partizione, possiamo crearla dopo aver terminato l&#8217;installazione di windows xp, usando uno dei tantissimi software adibiti allo scopo.</p>
<p>Ho anche letto, in giro per la rete, che tale problema potrebbe essere causato da un fantomatico non riconoscimento dei dischi SATA da parte di windows XP. Ciò potrebbe anche essere possibile, ma se è così ce ne accorgiamo non appena parte l&#8217;installazione di windows XP. Ce ne accorgiamo perché nella schermata proposta per scegliere il disco su cui installare il sistema operativo, non viene mostrato alcun disco. Se invece vediamo il disco del nostro PC, non c&#8217;è alcun problema di riconoscimento hardware.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2010/04/windows-xp-errore-hardware-su-disco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, anonymous classes (classi anonime)</title>
		<link>http://www.alessandrostella.it/java/2010/04/java-anonymous-classes/</link>
		<comments>http://www.alessandrostella.it/java/2010/04/java-anonymous-classes/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 16:02:58 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[anonymous class]]></category>
		<category><![CDATA[inner class]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=925</guid>
		<description><![CDATA[Un&#8217;anonymous class (classe anonima) è una inner class che viene contemporaneamente definita e istanziata e non ha un nome. Un&#8217;anonymous class (classe anonima) esiste se e soltanto se esiste una super classe da estendere o un&#8217;interfaccia da implementare! Quando estende una classe, la sintassi dichiarativa assume la seguente forma: new &#60;nome superclasse&#62; (&#60;lista opzionale di [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Un&#8217;anonymous class (classe anonima) è una inner class che viene contemporaneamente definita e istanziata e non ha un nome</strong>.<br />
Un&#8217;anonymous class (classe anonima) esiste se e soltanto se esiste una super classe da estendere o un&#8217;interfaccia da implementare!<br />
Quando estende una classe, la sintassi dichiarativa assume la seguente forma:<br />
<strong>new &lt;<em>nome superclasse</em>&gt; (&lt;<em>lista opzionale di argomenti</em>&gt;) {&#8230;}</strong><br />
Quando invece implementa un&#8217;interfaccia, assume la seguente forma:<br />
<strong>new &lt;<em>nome interfaccia</em>&gt; () {&#8230;}</strong><br />
Bisogna osservare che sebbene una classe anonima estenda una classe o implementi un&#8217;interfaccia, essa non usa né la clausola <em>extends</em> né la clausola <em>implements</em>.<br />
Inoltre, come per le <a href=http://www.alessandrostella.it/java/2010/04/java-local-classes/">local classes</a>, anche le anomymous classes non possono usare la parola chiave <em>static</em>  in fase di dichiarazione.<br />
[to be continued...]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2010/04/java-anonymous-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, local classes</title>
		<link>http://www.alessandrostella.it/java/2010/04/java-local-classes/</link>
		<comments>http://www.alessandrostella.it/java/2010/04/java-local-classes/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 10:01:25 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[inner class]]></category>
		<category><![CDATA[local class]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=899</guid>
		<description><![CDATA[Per local class (classe locale) si intende una inner class che è definita in un blocco di codice. Un blocco di codice potrebbe essere il corpo di un metodo, di un costruttore, un blocco locale, un inizializzatore statico o un inizializzatore di istanza. Alcune caratteristiche di una local class: una local class non può avere [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Per local class (classe locale) si intende una inner class che è definita in un blocco di codice</strong>. Un blocco di codice potrebbe essere il corpo di un metodo, di un costruttore, un blocco locale, un inizializzatore statico o un inizializzatore di istanza.<br />
Alcune caratteristiche di una local class:</p>
<ul>
<li>una local class non può avere memebri statici (questo però non esclude la possibilità di avere un membro <em>final static</em>, essendo esso una costante)</li>
<li>una local class non può avere modificatori di accessibilità (public, private, ecc.). Sarà quindi dichiarata scrivendo semplicemente <em>class nomeClasse {&#8230;}</em>
	</li>
<li>una local class può estendere un&#8217;altra classe</li>
<li>all&#8217;interno del blocco in cui è definita, una local class può accedere solo ai membri dichiarati <em>final</em></li>
<li>una non-static local class può accedere sia ai membri statici sia ai membri non statici della classe contenitore (da non confondere con il blocco contenitore)
</li>
<li>una static local class può accedere solo ai membri statici della classe che la contiene</li>
<li>una local class (essendo locale) può essere istanziata solo nel blocco nel quale è definita e deve essere dichiarata prima di essere utilizzata</li>
</ul>
<p>Prima accortezza: se il blocco contenente la dichiarazione della local class è definito in un contesto statico (ad esempio un metodo statico o un inizializzatore statico) allora la local class è implicitamente statica e quindi non richiede alcun oggetto contenitore per essere istanziata.<br />
Facciamo però attenzione al fatto che, sebbene in certi contesti (appena visti) la local class è intesa implicitamente statica, essa non consente di utilizzare nella propria dichiarazione la parola chiave <em>static</em>. Mai.<br />
Facciamo anche attenzione al fatto che se una local class si trova dichiarata in un contesto statico, ciò influenzerà quello che la local class può &#8220;vedere&#8221; nel contesto contenitore.<span id="more-899"></span><br />
Possiamo leggere i commenti nel seguente esempio per chiarirci (spero) le idee&#8230;</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> EsempioLocalClass<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> varNonStatica <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span> <br />
<br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">void</span> metodoNonStatico <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> param<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> flv <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> hlv <span style="color: #339933;">=</span> <span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> nflv <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">class</span> localClassNonStatica <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// dichiarazione local class. siamo nel metodo &quot;metodoNonStatico&quot;, non dimentichiamolo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> f1<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// errore! Non si possono dichiarare variabili static non final in una local class</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> f2 <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// va bene. Varibile final static consentita in una local class</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> f3 <span style="color: #339933;">=</span> param<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// tutto ok. Abbiamo visibilità della costante param</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> f4 <span style="color: #339933;">=</span> flv<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// ok. flv appartiene al metodo contenitore ad è final</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> f5 <span style="color: #339933;">=</span> nflv<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// errore! Del blocco contenitore possiamo &quot;vedere&quot; solo le variabili definite &quot;final&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> f6 <span style="color: #339933;">=</span> varNonStatica<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// ok. varNonStatica è dichiarata nella Top Level Class, quindi è visibile nella local class</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> metodoStatico <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> param<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// attenzione! Questo è un metodo statico... quindi?</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> flv <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> hlv <span style="color: #339933;">=</span> <span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> nflv <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">class</span> localClassImplicitamenteStatica <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> f1<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// errore! Repetita iuvant: niente static non final in una local class</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> f2 <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// va bene invece una final static</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> f3 <span style="color: #339933;">=</span> param<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// ok. param appartine al metodo contenitore ed è final</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> f4 <span style="color: #339933;">=</span> flv<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// ok. flv appartine al metodo contenitore ed è final</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> f5 <span style="color: #339933;">=</span> nflv<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// errore! nflv non è final</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> f6 <span style="color: #339933;">=</span> varNonStatica<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// errore! Ora la nostra local class è implicitamente statica e quindi non abbiamo accesso alle variabili della Top Level Class (a meno che non siano dichiarate static)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2010/04/java-local-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, non-static member class</title>
		<link>http://www.alessandrostella.it/java/2010/04/java-non-static-member-class/</link>
		<comments>http://www.alessandrostella.it/java/2010/04/java-non-static-member-class/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 09:36:42 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[inner class]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=883</guid>
		<description><![CDATA[Una non-static member class è una inner class definita senza la keyword static (vedere il punto (2) dell&#8217;esempio sotto). Bisogna osservare che: Un&#8217;istanza di una non-static member class può esistere solo e soltanto insieme all&#8217;istanza della classe che la contiene Una non-static member class non può avere static members (a meno che non siano anche [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Una non-static member class è una inner class definita senza la keyword <em>static</em></strong> (vedere il punto (2) dell&#8217;esempio sotto).<br />
Bisogna osservare che:</p>
<ul>
<li>Un&#8217;istanza di una non-static member class può esistere solo e soltanto insieme all&#8217;istanza della classe che la contiene
</li>
<li>Una non-static member class non può avere static members (a meno che non siano anche <em>final</em>)</li>
<li>Il codice scritto in una non-static member class può avere accesso diretto a ogni membro (inclusi i nested) anche se dichiarato <em>private</em>
</li>
</ul>
<p>Vediamo un esempio con un po&#8217; di casi particolari.</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MyLinkedList <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> message <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Shine the light&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// (1)</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> Node makeInstance <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> info, Node next<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> Node<span style="color: #009900;">&#40;</span>info, next<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Node <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// (2) non-static member class (NSMC)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> maxNumOfNodes <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> nodeInfo<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> Node next<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> message <span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Messaggio dal Nodo &quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// (3)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> Node<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> nodeInfo, Node next<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nodeInfo</span> <span style="color: #339933;">=</span> nodeInfo<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">next</span> <span style="color: #339933;">=</span> next<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Modifica del message di Node&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// (4)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> MyLinkedList.<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">message</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; in &quot;</span> <span style="color: #339933;">+</span> nodeInfo <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; (&quot;</span> <span style="color: #339933;">+</span> maxNumOfNodes <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;)&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// (5)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ListClient <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <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;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MyLinkedList list <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MyLinkedList<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MyLinkedList.<span style="color: #006633;">Node</span> node1 <span style="color: #339933;">=</span> list.<span style="color: #006633;">makeInstance</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;node1&quot;</span>, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MyLinkedList.<span style="color: #006633;">Node</span> node2 <span style="color: #339933;">=</span> list.<span style="color: #006633;">makeInstance</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;node2&quot;</span>, node1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>node2.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Osserviamo il punto (4).<br />
Viene modificato il valore asseganto all&#8217;attributo di tipo stringa <em>message</em>. Ma esistono 2 attributi di tipo stringa denominati <em>message</em>! Li vediamo dichiarati al punto (1) e al punto (3), entrambi <em>private</em>. Il <em>message</em> al punto (1) appartiene alla classe contenitore (MyLinkedList), mentre quello dichiarato al punto (4) appartiene alla non-static inner class (Node). Abbiamo detto che in una non-static member class possiamo riferirci a qualunque membro, anche dichiarato <em>private</em>, anche appartenente alla classe contenitore. Ma come possiamo riferisci all&#8217;attributo message del contenitore? Lo si può fare con un uso particolare della parole chiave <em>this</em>. Osserviamo a tal riguardo il punto (5).</p>
<p>ATTENZIONE.<br />
Se non fosse stato dichiarato l&#8217;attributo al punto (4), allora scrivendo</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">return</span> message <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; in &quot;</span> <span style="color: #339933;">+</span> nodeInfo <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; (&quot;</span> <span style="color: #339933;">+</span> maxNumOfNodes <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;)&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// (5a)</span></div></td></tr></tbody></table></div>
<p>non si avrebbe alcun errore (come invece ci si potrebbe aspettare), poiché ci riferiremmo, in modo implicito, all&#8217;attributo <em>message</em> della classe contenitore!!!<br />
Facciamo attenzione a questo caso particolare!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2010/04/java-non-static-member-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plugin maven per eclipse</title>
		<link>http://www.alessandrostella.it/java/eclipse/2010/03/plugin-maven-eclipse/</link>
		<comments>http://www.alessandrostella.it/java/eclipse/2010/03/plugin-maven-eclipse/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 16:01:07 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=867</guid>
		<description><![CDATA[I plugin maven per Eclipse sono in uno stadio di maturità per il quale è probabilmente poco opportuno utilizzarli. Se facciamo uno scouting sulla rete ne scoviamo almeno 2: The Maven Integration for Eclipse Eclipse Integration for Apache Maven (AIM) Il primo è di sicuro quello che mette a disposizione una maggiore quantità di features, [...]]]></description>
			<content:encoded><![CDATA[<p>I <strong>plugin maven per Eclipse</strong> sono in uno stadio di maturità per il quale è probabilmente poco opportuno utilizzarli.<br />
Se facciamo uno scouting sulla rete ne scoviamo almeno 2:</p>
<ul>
<li><a href="http://m2eclipse.codehaus.org/" target="_blanck">The Maven Integration for Eclipse</a></li>
<li><a href="http://www.eclipse.org/iam/" target="_blanck">Eclipse Integration for Apache Maven (AIM)</a></li>
</ul>
<p>Il primo è di sicuro quello che mette a disposizione una maggiore quantità di features, ma da anche qualche rogna di troppo in fase di utilizzo. Il secondo invece è più semplice sia nell&#8217;installazione sia nell&#8217;utilizzo, ma fornisce una più ristretta capacità di atomazione. Fra tutte le differenze possiamo metterne in evidenza una: ad oggi, AIM non permette la creazione automatica di un progetto <strong>spring-ws</strong>.<br />
Quindi se dovessimo scegliere in base a spring-ws, ci si dovrebbe poggiare su The Maven Integration for Eclipse. Tuttavia, come si diceva, questo plugin può condurre a un po&#8217; di problemi in fase di utilizzo. Mettiamone in evidenza uno. Pertendo dal presupposto che:</p>
<ul>
<li>abbiamo installato/decompresso maven</li>
<li>abbiamo settato correttamente la variabile d&#8217;ambiente JAVA_HOME</li>
<li>abbiamo creato il file settings.xml nella cartella .m2</li>
<li>vogliamo creare un progetto spring-ws</li>
</ul>
<p>si potrebbe incorrere in alcuni errori. Uno dei più frequenti è il seguente:<br />
<strong>Resource nexus-maven-repository-index.properties does not exist.</strong><br />
In questo caso in Eclipse procediamo come segue:</p>
<ul>
<li>window/preferences/Maven/ArtifactSearch/NexusArtifactSearch/</li>
<li>premiamo il pulsante &#8220;Add&#8221; e aggiungiamo la seguente stringa<br />
http://localhost:8081/nexus/content/groups/public </li>
</ul>
<p>Così facendo dovremmo essere in grado di creare la struttura di un progetto spring-ws senza generare errori&#8230; dovremmo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/eclipse/2010/03/plugin-maven-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The page you entered does not appear to be a LinkedIn public profile</title>
		<link>http://www.alessandrostella.it/tips-tricks/2010/03/page-entered-linkedin-public-profile/</link>
		<comments>http://www.alessandrostella.it/tips-tricks/2010/03/page-entered-linkedin-public-profile/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 09:16:02 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[friendfeed]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=857</guid>
		<description><![CDATA[Qualche giorno fa mi è capitato di provare ad aggiungere, su friendfeed.com, il link al mio profilo su linkedin. Purtroppo la risposta del sistema è stata: &#8220;The page you entered does not appear to be a LinkedIn public profile&#8221; sebbene il mio profilo fosse pubblico. Ho cercato notizie online senza un gran successo, così ho [...]]]></description>
			<content:encoded><![CDATA[<p>Qualche giorno fa mi è capitato di provare ad aggiungere, su <a href="http://friendfeed.com" target="_blanck">friendfeed.com</a>, il link al <a href="http://it.linkedin.com/in/alessandrostella">mio profilo</a> su linkedin. Purtroppo la risposta del sistema è stata:<br />
<span style="color:red">&#8220;The page you entered does not appear to be a LinkedIn public profile&#8221;</span> sebbene il mio profilo fosse pubblico.<br />
Ho cercato notizie online senza un gran successo, così ho scritto ai ragazzi di friendfeed i quali mi han risposto letteralmente così:<br />
&#8220;Unfortunately, we had some problems with the LinkedIn feeds and had to turn off adding them as new services. Sorry for the inconvenience.&#8221;, ossia tra qualche tempo potremmo non trovare più linkedin tra i possibili link in friendfeed <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/tips-tricks/2010/03/page-entered-linkedin-public-profile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come gestire i propri link preferiti</title>
		<link>http://www.alessandrostella.it/windows/2010/03/gestire-propri-link-preferiti/</link>
		<comments>http://www.alessandrostella.it/windows/2010/03/gestire-propri-link-preferiti/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 21:29:23 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[preferiti]]></category>
		<category><![CDATA[transmute]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=807</guid>
		<description><![CDATA[Dite la verità! Quanti di voi usano più browser? A me capita di usarne anche 4 diversi sullo stesso PC. Per non parlare poi di quando mi sposto da un PC all&#8217;altro&#8230; In tutto questo movimento si crea inevitabilmente un problema: la gestione dei preferiti. Capita di salvare il link a un sito supermegaformidabile su [...]]]></description>
			<content:encoded><![CDATA[<p>Dite la verità! Quanti di voi usano più browser? A me capita di usarne anche 4 diversi sullo stesso PC. Per non parlare poi di quando mi sposto da un PC all&#8217;altro&#8230; In tutto questo movimento si crea inevitabilmente un problema: <strong>la gestione dei preferiti</strong>.<br />
Capita di salvare il link a un sito supermegaformidabile su un browser, poi altri 5 su un altro e così via&#8230; Alla fine ne vien fuori solo un gran caos <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Mettiamo ordine!<br />
Abbiamo almeno 2 alternative molto valide e gratuite:</p>
<ul>
<li><strong>google documenti</strong> (online)</li>
<li><strong>transmute</strong> (off-line)</li>
</ul>
<p>Per quanto riguarda google bisogna creare un account google e poi seguire le semplici istruzioni riportate <a href="http://www.google.com/support/chrome/bin/answer.py?hl=it&#038;answer=165138" target="_blanck">qui</a><br />
Per quanto concerne transmute invece <a href="http://www.gettransmute.com/" target="_blanck">lo si scarica</a> (è gratis) e lo si lancia; non c&#8217;è bisogno di installazione <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/03/transmute.gif" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/03/transmute-300x244.gif" alt="" title="transmute" width="300" height="244" class="aligncenter size-medium wp-image-814" /></a><br />
L&#8217;utilizzo è davvero semplice: si sceglie la sorgente e la destinazione. Possiamo copiare i nostri preferiti da un browser a un altro, oppure salvarli in formato XBEL. Insomma, possiamo fare quello che ci pare e tutto gratis!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2010/03/gestire-propri-link-preferiti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dissertazione sulla programmazione in Italia</title>
		<link>http://www.alessandrostella.it/oo-programming/2010/03/dissertazione-sulla-programmazione-italia/</link>
		<comments>http://www.alessandrostella.it/oo-programming/2010/03/dissertazione-sulla-programmazione-italia/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 14:03:09 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[OO Programming]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[programmazione a oggetti]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=776</guid>
		<description><![CDATA[Non son sicuro che ci sia qualcuno che legge quello che scrivo , ma se c&#8217;è si sarà di sicuro accorto che non scrivo nulla da un mese. Sono andato in giro per il mondo a vedere come si lavora (in ambito informatico) negli altri Paesi&#8230; Inghilterra, Germania, Francia, Australia (bellissima! Prima o poi mi [...]]]></description>
			<content:encoded><![CDATA[<p>Non son sicuro che ci sia qualcuno che legge quello che scrivo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> , ma se c&#8217;è si sarà di sicuro accorto che non scrivo nulla da un mese. Sono andato in giro per il mondo a vedere come si lavora (in ambito informatico) negli altri Paesi&#8230; Inghilterra, Germania, Francia, Australia (bellissima! Prima o poi mi ci trasferirò!).<br />
Erano anni che ne avevo il sospetto, ma ora che sono finalmente riuscito ad andare a vedere come si lavora all&#8217;estero posso dire di averne la certezza: <strong>in Italia i professionisti nella programmazione ad oggetti sono pochi, molto pochi, troppo pochi (almeno in ambito java)!</strong> Sono invece molto, ma molto diffusi i quaqquaraqquà! Ciò che colpisce e che ferisce è che molti di questi &#8220;quaqquaraqquà&#8221; vorrebbero non esserlo perché non lo sono né per indole né per formazione, ma si sono dovuti &#8220;piegare&#8221; alla realtà italiana&#8230; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Andiamo con ordine.<br />
Da sempre mi trovo fianco a fianco con persone che utilizzano tecnologie evolute e utili come struts, spring, hibernate, jsf e chi più ne ha più ne metta. Da sempre ho il sospetto che queste persone, chiamate &#8220;professionisti&#8221;, usino tali tecnologie senza sapere <strong>perché</strong> sono state pensate, realizzate e <strong>perché</strong> sono così diffusamente utilizzate. Ora il mio sospetto è una certezza: non lo sanno!<br />
Non lo sanno e non si pongono il problema di saperlo perché in Italia è giudicato &#8220;poco produttivo&#8221; porsi domande, migliorarsi, evolvere&#8230; <strong>In Italia non vengono assunte le menti delle persone, in Italia si cercano manovali, ossia uomini e donne che si siedono ad una scrivania ed eseguono ordini!</strong><br />
<span id="more-776"></span>Ok. Non si può e non si deve fare di tutte le erbe un solo fascio, sono d&#8217;accordo, ma le mie variegate esperienze da nord a sud della nostra Nazione lasciano poco spazio alla speranza che tale abitudine sia di una minoranza&#8230; non è così. Ecco perché, in breve tempo, tutto ciò che è stato studiato per anni all&#8217;Università finisce in un cassetto e l&#8217;unico obiettivo da raggiungere diventa saper usare la tecnologia X. Sto ancora disperatamente cercando un collega in grado di motivare l&#8217;uso di questa piuttosto che quella tecnologia. L&#8217;unica motiviazione che ho ottenuto è più o meno sempre la stessa: &#8220;la usano tutti, significherà qualcosa!&#8221;. Quando poi incalzo e inizio la solita sequenza di domande:</p>
<ul>
<li>Perché l&#8217;hanno creata?</li>
<li>Perché è così utilizzata?</li>
<li>E&#8217; utile nel contesto in cui ti trovi?</li>
<li>Quali sono le alternative?</li>
<li>Perché, tra tutte le alternative possibili, hai scelto proprio questa tecnologia?</li>
</ul>
<p>Nessuno mi risponde perché nessuno ha scelto! <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Eppure all&#8217;Università ci hanno inculcato con la forza il concetto di scouting e, fuori dall&#8217;Italia, hanno saputo rispondere alle stesse domande con estrema precisione! Tutto ciò è scrupolosamente osservato in quasi tutti i posti di lavoro visitati in Germania, Inghilterra, Australia&#8230; ma non in Italia! Noi siamo bravissimi ad andare su un qualunque forum, chiedere a qualcuno il codice per ottenere un determinato obiettivo e copiarlo con &#8220;creatività&#8221; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Questa è la realtà che ho toccato con mano per dieci anni. Mi avevano quasi convinto che il mio essere critico e il mio pormi tutte quelle domande, il mio volermi sempre migliorare e il mio voler imparare fosse davvero sbagliato! E in verità nel contesto Italia&#8230; è sbagliato!<br />
Del resto per capire i motivi che hanno spinto i nostri &#8220;colleghi&#8221; (spero non si offendano) a creare struts, spring e tutti gli altri, bisogna necessariamente avere una forte competenza della programmazione ad oggetti, molto prima di conoscere java e il mondo infinito che lo circonda. Invece, parlando con i &#8220;professionisti&#8221; di cui sopra, si scopre molto facilmente che non conoscono concetti come &#8220;coesione&#8221; o &#8220;basso accoppiamento&#8221; né hanno un&#8217;idea troppo precisa di cosa siano i patterns o altri concetti fondamentali nella programmazione ad oggetti. Non solo. Se si prova a intraprendere con suddetti professionisti un tale discorso, si viene puntualmente snobbati e il discorso bollato come &#8220;teorico&#8221; e quindi &#8220;lontano dalla pratica aziendale&#8221;. Già, vero. Magari è proprio per questo che non esportiamo una riga di codice e riscriviamo lo stesso software ogni 2 anni! <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Proseguiamo&#8230;<br />
Da quando lavoro nell&#8217;ambito della programmazione ad oggetti (e non) non ho mai (e sottolineo mai) visto uno unit test e tanto meno un integration test. L&#8217;unico test visto più volte è il test funzionale. In verità non ho neanche visto un documento di analisi e pochissimi di progettazione, comunque senza analisi <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Eppure in tutti i miei studi ho sempre letto e imparato che il software va accuratamente progettato, che tutto parte da una corretta e attenta analisi, ecc. ecc. Ma quando mai? In Italia? E chi segue queste &#8220;follie&#8221;? Non c&#8217;è tempo per pensare a queste &#8220;stupidaggini&#8221; e, sopratuttto, molte aziende sono convinte che tali accortezze non producano soldi, anzi pensano che esse rallentino soltanto il processo produttivo. Non c&#8217;è quindi da meravigliarsi se:</p>
<ul>
<li>non ho mai trovato un collega in grado di fare un&#8217;analisi professionale di un software</li>
<li>ho visto una progettazione UML solo un paio di volte (una delle quali l&#8217;ho imposta io!)</li>
<li>ho visto DB senza constraints e senza un diagramma E-R</li>
</ul>
<p>Purtroppo non ho lavorato per piccole realtà aziendali che quindi, producendo piccoli software, possono permettersi di trascurare certi aspetti (siamo sicuri che possono permetterselo?). Nel mio curriculum si trovano multinazionali come H3G, GlobalValue o enti importanti come Regione Lombardia, la federazione degli ingegneri di Puglia&#8230; in poche parole ho realizzato o gestito applicazioni (quasi sempre web) con un numero spropositato di potenziali utenti! Utenti che usavano (e usano) applicazioni costituite da jsp da 8000 righe nelle quali troviamo query SQL mischiate a codice java, database senza capo né coda e potrei continuare.<br />
Proseguiamo&#8230;<br />
<strong>Vogliamo poi parlare di sicurezza?</strong><br />
In Italia &#8220;sicurezza&#8221; per le applicazioni web significa 2 cose:</p>
<ul>
<li>firewall</li>
<li>proxy</li>
</ul>
<p>Fine.<br />
E se, per esempio, installo un proxy in locale, intercetto i parametri http, li modifico e invio roba fuori di testa alla tua applicazione web, cosa succede??? Il firewall e il proxy non possono farci nulla! A questa domanda o spalancano gli occhi o mi rispondono con qualcosa del tipo: &#8220;che razza di ipotesi strampalata stai facendo? Questa è fanta informatica!&#8221;. Scusate, ma non posso non pormi una domanda!<br />
<strong>Per quale motivo i miei colleghi agiscono e reagisocno in questo modo?</strong> Eppure hanno i miei stessi titoli e io non son mai stato un genio! E allora? Il problema l&#8217;ho esposto all&#8217;inizio e l&#8217;ho identificato solo dopo aver visto come &#8220;ragionano&#8221; fuori dalla nostra Nazione e sapete cosa vi dico?<br />
<strong>Non sono le Università italiane a essere lontane dal mondo lavorativo! E&#8217; il mondo lavorativo italiano ad essere lontano dalle pratiche internazionali nella produzione del codice!</strong>.<br />
Questa è la verità in ambito informatico!<br />
Ecco il tipico ragionamento di un&#8217;azienda inglese (tedesca, francesce, americana, australiana). &#8220;Ehi man, tu hai studiato all&#8217;Università come si crea un software? Hai studiato i princìpi dell&#8217;ingegneria del software? Hai studiato come si fa un test, come si procede nella fase di analisi, di progettazione e di implementazione di un software? Bene! Noi cerchiamo proprio te! Paghiamo le tue competenze perché tu possa metterle al nostro servizio nella produzione del nostro business! Tu metti in pratica le tue competenze acquisite all&#8217;Università e noi ti paghiamo! Non solo! Se ci indichi quali sono le competenze che ritieni opportuno approfondire per migliorare la produzione del software, noi ti paghiamo i migliori corsi perché tu possa diventarne padrone e usarle per noi.&#8221;. Lo so, in Italia queste frasi sono pura fantascienza e infatti i nostri laureati sono tutti andati via! Uno dei problemi che ci impedisce di essere concorrenziali è che molte (troppe) delle nostre aziende sono ancora di stampo &#8220;padronale&#8221; e quindi i dirigenti pretendono di indicare ai tecnici come produrre il software, quali strumenti usare e magari anche come! Mi viene in mente un brano musicale dal titolo <a href="http://www.angolotesti.it/G/testi_canzoni_giorgio_gaber_4285/testo_canzone_io_non_mi_sento_italiano_157445.html" target="_blanck">&#8220;io non mi sento italiano&#8221;</a> <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
<strong>Vogliamo quindi aggiungere qualche parolina sulle retribuzioni italiane e sulle nostre &#8220;aziende&#8221;?</strong><br />
Dai, proviamoci!<br />
Le cose stanno esattamente nei seguenti termini.<br />
Un neo-laureato in (ingegneria) informatica in Italia inizia a lavorare a non meno di 27 anni. Se si occupa di programmazione software il suo stipendio iniziale non supererà mai i 1200 euro al mese. Dopo 5 anni guadagnerà circa il 15% in più, producendo software come sopra descritto <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  Quando questo povero cristo inzierà la sua ricerca di un impiego <strong>in Italia</strong>, troverà annunci di aziende che recitano puntualmente così: &#8220;lo stipendio sarà commisurato alla reali capacità del candidato&#8221;. <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Ma dai! Non mi dire! Speravo mi pagassi il doppio di quello che valgo!<br />
<strong>Nel resto del mondo</strong> invece gli annunci recitano puntualmente così: &#8220;se sarai valutato idoneo per questo lavoro il tuo stipendio sarà di n euro (dollari, sterline) all&#8217;ora, oppure nk euro (dollari, sterline) all&#8217;anno&#8221;.<br />
Trovate per caso una qualche differenza? <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Ma non c&#8217;è da meravigliarsi!<br />
Potrebbe mai un&#8217;azienda cercare un ingegnere informatico con 5 anni di esperinza su java e offrirgli 10 euro l&#8217;ora??? In Germania te ne danno 20; in Inghilerra ti danno 30 sterline l&#8217;ora; addirittura in Spagna offrono 15 euro l&#8217;ora <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Lasciamo poi perdere USA e Australia: potremmo sembrare terzo mondo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Ovviamente potete non credere alle mie parole. Posso scrivere quello che mi pare! Fate bene. Dubitate sempre e cercate sempre conferme; in ogni campo.<br />
Ecco perché vi indico qualche luogo dovo potrete verificare quello che vi ho scritto:</p>
<ul>
<li><a href="http://www.jobserve.co.uk/">Cerca un lavoro e verifica gli stipendi in UK</a></li>
<li><a href="http://www.jobber.de/">Cerca lavoro in Germania</a></li>
<li><a href="http://mycareer.com.au/">Lavorare in Australia</a></li>
<li><a href="http://content.mycareer.com.au/salary-centre/it-telecommunications/-/australia">Stipendi medi per il settore IT  in Australia</a></li>
</ul>
<p>Ovunque nel mondo occidentale, tranne che in Italia, negli anunci di lavoro trovate il salario che vi spetta per quel lavoro! Ovunque, tranne che in Italia, coloro che studiano all&#8217;Università vengono messi al centro del business aziendale (almeno in campo informatico).<br />
Quando questa Nazione, poverina, capirà che senza le competenze universitarie e senza i giovani dai 25 ai 45 anni, senza il loro entusiasmo, senza le loro competenze, senza la loro forza non c&#8217;è futuro&#8230; sarà troppo tardi&#8230; troppo tardi&#8230;<br />
Per questi e altri motivi voglio concludere con un consiglio.<br />
Sei laureato in (ingegneria) informatica? Impara questo benedetto inglese (che noi italiani non conosciamo!) e lascia l&#8217;Italia nel più breve tempo possibile! Se superi i 35 anni avrai grosse difficoltà ad andare via da questo baraccone di improvvisati!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/oo-programming/2010/03/dissertazione-sulla-programmazione-italia/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Keepass e le proprie password</title>
		<link>http://www.alessandrostella.it/sicurezza/2010/02/keepass-gestione-password/</link>
		<comments>http://www.alessandrostella.it/sicurezza/2010/02/keepass-gestione-password/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 19:33:08 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[keepass]]></category>
		<category><![CDATA[password]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=724</guid>
		<description><![CDATA[Oggi parliamo di KeePass! Ho letto davvero tanti post su questo piccolo e utile programmino, ma tutti i post letti sono attenti a decantarne le indubbie qualità. Nessuno si è messo dalla parte dei &#8220;deboli&#8221;, ossia di coloro che capiscono a cosa serve, lo vorrebbero quindi usare, ma non sanno da dove iniziare! Bene, qui [...]]]></description>
			<content:encoded><![CDATA[<p>Oggi parliamo di <a href="http://keepass.info/" target="_blanck">KeePass</a>!<br />
Ho letto davvero tanti post su questo piccolo e utile programmino, ma tutti i post letti sono attenti a decantarne le indubbie qualità. Nessuno si è messo dalla parte dei &#8220;deboli&#8221;, ossia di coloro che capiscono a cosa serve, lo vorrebbero quindi usare, ma non sanno da dove iniziare!<br />
Bene, qui oggi, ci occuperemo di ciò che interessa maggiormente a tutti costoro, ossia scriveremo un post su come scaricare e iniziare a usare il programma.<br />
<strong>Cosa è keepass?</strong><br />
E&#8217; un software gratuito che si occupa di memorizzare tutti i nostri dati di login per l&#8217;accesso a tutto ciò che si può pensare (banca, posta web, registrazioni a social network, ecc.). Il tutto in un modo davvero sicuro; a prova di hacker!<br />
Iniziamo&#8230;<br />
Scaricare il programma è la cosa più facile, ma non proprio banale <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Non è banale perché, ad oggi, ci sono <strong>2 versioni free parallele e diverse di Keepass</strong>:</p>
<ul>
<li>KeePass 1.17</li>
<li>KeePass 2.09</li>
</ul>
<p>Non sono una l&#8217;aggiornamento dell&#8217;altra. La differenza tra le 2 versioni risiede quasi esclusivamente nelle tecnologie utilizzate per produrle: la 1.17 non ha bisogno davvero di niente per funzionare, mentre le 2.09 si appoggia sul framework.NET di microsoft. Qui parleremo della 1.17, ma sarà tutto valido anche per la 2.09.<br />
Prima di procedere sottolineiamo il fatto che questo mitico programmino non necessita di installazione, o meglio ne esiste una versione in grado di partire da penna USB e quindi in grado di tenere TUTTI i nostri dati sulla pennina, senza lasciare traccia alcuna sul PC&#8230; pensateci bene&#8230; non è una cosa grandiosa? Tutte le nostre password su una penna o un HD esterno e il programma che le custodisce in grado di partire su qualunque PC&#8230; in totale sicurezza&#8230; pensateci bene&#8230;<br />
<span id="more-724"></span><br />
Va bene, procediamo.<br />
<a href="http://keepass.info/download.html" target="_blanck">Qui</a> troviamo tutte le versioni di keepass. Scarichiamo!<br />
Siamo pronti? Abbiamo scaricato e installato o decompresso? ok!<br />
Clicchiamo 2 volte su keepass e facciamolo partire. Ci troviamo quindi davanti al programma. E adesso?<br />
Adesso ci guardiamo il bel filmatino qui sotto <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Commentiamo i primi 40 secondi, quelli in cui c&#8217;è mostrato tutto quello che non ho trovato in nessun altro post <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
La prima cosa da fare è creare un nuovo database (DB) nel quale il programma inserirà tutti i nostri dati. Questa è un&#8217;operazione molto delicata perché da essa dipenderà quanto sarà difficile, per i non autorizzati, accedere ai nostri dati! Premiamo il foglio bianco per creare un nuovo DB. La schermata che si apre (&#8220;Crea nuovo Database password&#8221;) è importate, molto. Non entrerò nei dettagli, ma sappiate che la procedura che vi indicherò renderà pressoché impenetrabile il vostro DB.<br />
Scegliamo una password. Essa è l&#8217;unica che dovremmo ricordare da oggi in poi: scegliamola tosta! Mentre scriviamo la nostra password vedremo una barra che passa dal rosso al verde. Alla destra della barra c&#8217;è un un campo di testo con scritto un numero. Nel caso del filmato qui in basso, il numero si fermerà a 93bits: sbagliato!!! Scegliete una password che mostri <strong>almeno 128bits</strong>! Non basta! Altra cosa che nessuno dice è la robustezza che introduce l&#8217;uso di un file che funga da chiave! Spuntiamo quindi la voce &#8220;Utilizza password principale e file chiave&#8221; (come da filmato). Poi premiamo sul bottone e creiamo un file con un nome qualsiasi in una cartella a nostro piacimento. Ora per poter accedere ai nostri dati non basterà &#8220;scoprire&#8221; la nostra password! Sarà anche necessario entrare in possesso di quel file! Custodiamolo con cura&#8230; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Bene, ora possiamo procedere nelle visione del filmatino&#8230;<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="547" height="454" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="play" value="false" /><param name="loop" value="false" /><param name="src" value="http://www.alessandrostella.it/wp-content/uploads/2010/02/KeePass.swf" /><embed type="application/x-shockwave-flash" width="547" height="454" src="http://www.alessandrostella.it/wp-content/uploads/2010/02/KeePass.swf" loop="false" play="false"></embed></object></p>
<p>Possiamo notare, al minuto 2, che nel filmato vengono messe in evidenza 3 voci del menù che compare cliccando col pulsante dx del mouse su una voce da noi creata. In parrticolare:</p>
<ul>
<li>Copia user nome utente</li>
<li>Copia Password</li>
<li>Effettua auto-digitazione</li>
</ul>
<p>Le prime 2 si occupano di mettere negli appunti del PC rispettivamente il nome utente o la password dell&#8217;account selezionato, quindi ci basterà fare &#8220;incolla&#8221; per copiare tali informazioni nei rispettivi campi. L&#8217;ultima invece è davvero una chicca <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Se sotto il programma abbiamo la nostra pagina html di accesso all&#8217;account in questione, premendo &#8220;Effettua auto-digitazione&#8221; il programma inserirà per noi il nome utente e la password nei rispettivi campi e darà pure l&#8217;invio <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Davvero!<br />
Quando abbiamo finito non dimentichiamoci di premere il bottone del dischetto sotto la voce di menù &#8220;Modifica&#8221; per salvare il nostro DB, altrimenti perdiamo tutti i dati <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Fate attenzione a non confondere il DB con il file usato come chiave di sicurezza; son 2 cose diverse!<br />
Quando poi riapriremo keepass, per accedere a tutti i nostri dati, invece di premere sul foglio bianco, sceglieremo la cartella gialla alla sua destra. Dalla schermata successiva cercheremo il nostro DB, poi inseriremo la password e andremo a cercare il nostro file di sicurezza.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/sicurezza/2010/02/keepass-gestione-password/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Validare un file XML rispetto a uno schema XSD</title>
		<link>http://www.alessandrostella.it/xml/2010/02/validare-un-file-xml-rispetto-a-uno-schema-xsd/</link>
		<comments>http://www.alessandrostella.it/xml/2010/02/validare-un-file-xml-rispetto-a-uno-schema-xsd/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 02:15:00 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xsd]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=691</guid>
		<description><![CDATA[La cosa non potrebbe essere più facile&#8230; Abbiamo delle regole che un file XML deve rispettare e dobbiamo verificare che le rispetti! Certo, è facile! Peccato che per farlo in &#8220;automatico&#8221;, cioè con un programmino (ino, ino) che lo faccia per noi, ho perso 3 ore! Gira e rigira su internet, ma niente! Una valanga [...]]]></description>
			<content:encoded><![CDATA[<p>La cosa non potrebbe essere più facile&#8230;<br />
Abbiamo delle regole che un file XML deve rispettare e dobbiamo verificare che le rispetti! Certo, è facile! Peccato che per farlo in &#8220;automatico&#8221;, cioè con un programmino (ino, ino) che lo faccia per noi, ho perso 3 ore! Gira e rigira su internet, ma niente! Una valanga di software perfettamente in grado di fare di tutto: creazione, editing, modifica, validazione, auto creazione e chi più ne ha più ne metta. Eppure un <strong>programmino</strong> (ino, ino) <strong>che, preso un XSD come insieme di regole da rispettare, verifichi che un dato XML le rispetti</strong>, non l&#8217;ho trovato! Incredibile!<br />
In giro per la rete ci sono software da 2 a 20MB (a pagamento e non) che ti fanno pure il caffè, ma io non lo bevo il caffè! Non voglio creare XSD, XML, XSLT e averne pure delle spettacolari rappresentazioni grafiche! Voglio uno stupido programma che faccia una cosa stupida: presi 2 file in input (XSD e XML), mi dia un output (si o no!). E&#8217; tanto difficile? Si, sembra proprio che lo sia!<br />
Così ho usato qualche minuto del mio tempo e me lo sono fatto da solo. L&#8217;ho scritto pure in java in modo che sia portabile. Ci basta la JVM e amen. Oddio, in 60 minuti non è che abbia potuto creare un programma eccezionale: manca di molti controlli, l&#8217;interfaccia grafica è&#8230; spartana, ma fa quello che deve fare!<br />
Ve lo propongo.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2010/02/XML_Validator.gif" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2010/02/xml_validator-300x194.gif" alt="" title="XML_Validator" width="300" height="194" class="aligncenter size-medium wp-image-694" /></a><br />
Anche questo piccolo programmino è rilasciato secondo la licenza che governa questo sito: <a href="http://creativecommons.org/licenses/by-nc/3.0/deed.it" target="_blanck">creative commons 3.0 &#8211; not for commercial use!</a>, ossia potete usarlo, distribuirlo, modificarlo, ma non potete venderlo o usarlo per fini commerciali (anche perché chi lo compra? <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> ). Tutto qua.<br />
Da <a href="http://www.alessandrostella.it/wp-content/uploads/XML_Validator.zip">questo link</a> potete scaricare il .zip (circa 450KB). Decomprimendo il .zip otterrete una cartella denominata XML_Validator al cui interno troverete il file <strong>XML.jar</strong> e una cartella lib contenente un paio di librerie usate dal programma.<br />
<strong>Come si usa il programma?</strong><br />
Non c&#8217;è bisogno di alcuna installazione. Se avete <strong>windows</strong> e avete già installato la <strong>jre 1.5 o 1.6</strong>, vi dovrebbe bastare cliccare 2 volte sul XML.jar. Se invece avete <strong>linux</strong> cliccate col pulsante dx del mouse su XML.jar e scegliete &#8220;Apri con Sun java 6 runtime&#8221; (o qualcosa del genere). Su <strong>Solaris</strong>&#8230; non ricordo, dovrebbe bastare un doppio click. <strong>Apple Computer</strong> fornisce la propria versione di Java. Utilizzate la funzione Aggiornamento Software (disponibile nel menu Apple) per verificare che la versione di Java in uso sul Mac sia quella più aggiornata.<br />
Se non avete la jre installata, potete riferirvi al <a href="http://java.com/it/download/manual.jsp" target=_blanck">link sul sito della SUN</a> per scaricare quella più opportuna.<br />
Validate gente, validate! <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/xml/2010/02/validare-un-file-xml-rispetto-a-uno-schema-xsd/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Java 1.6, nested type e inner classes</title>
		<link>http://www.alessandrostella.it/java/2010/02/java-1-6-nested-type-e-inner-classes/</link>
		<comments>http://www.alessandrostella.it/java/2010/02/java-1-6-nested-type-e-inner-classes/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 16:13:29 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[anonymous class]]></category>
		<category><![CDATA[inner class]]></category>
		<category><![CDATA[nested class]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=645</guid>
		<description><![CDATA[Che confusione! Sui tipi annidati (nested type) e la classi interne (inner classes) in giro per la rete ci sono scritte un sacco di fregnacce! Probabilmente perché la SUN, a partire dalla versione 1.4 di java, ha fatto un po&#8217; di casini con la nomenclatura, modificando il significato di alcuni termini. Comunque sia, ora proviamo [...]]]></description>
			<content:encoded><![CDATA[<p>Che confusione!<br />
Sui tipi annidati (nested type) e la classi interne (inner classes) in giro per la rete ci sono scritte un sacco di fregnacce! Probabilmente perché la SUN, a partire dalla versione 1.4 di java, ha fatto un po&#8217; di casini con la nomenclatura, modificando il significato di alcuni termini. Comunque sia, ora proviamo a fare chiarezza.<br />
Per prima cosa mettiamo in chiaro un concetto: le definizioni in informatica si danno e si usano in inglese. Ci si può riferire al corrispondente termine italiano per meglio comprendere di cosa si parla, ma è l&#8217;inglese che rende univoco un concetto o una definizione.<br />
Torniamo quindi all&#8217;Università e alle definizioni <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Definizione:<br />
Con il termine <strong>nested type</strong> (tipi annidati) si intende indicare:</p>
<ul>
<li>nested classes</li>
<li>nested enums</li>
<li>nested interfaces</li>
</ul>
<p>Definizione:<br />
Con il termine <strong>nested class</strong> (classe annidata) si intende una classe dichiarata all&#8217;interno di un&#8217;altra classe.<br />
Allo stesso modo si definisono le nested enum e le nested interface.<br />
Ci sono 4 tipi di nested classes:</p>
<ol>
<li>static member classes, enums e interfaces</li>
<li><a href="http://www.alessandrostella.it/java/2010/04/java-non-static-member-class/">non-static member classes</a></li>
<li><a href="http://www.alessandrostella.it/java/2010/04/java-local-classes/">local classes</a></li>
<li><a href="http://www.alessandrostella.it/java/2010/04/java-anonymous-classes/">anonymous classes</a></li>
</ol>
<p>Definizione:<br />
Con il termine <strong>inner class</strong> (classe interna) si indica una qualsiasi nested class purché NON di tipo 1 (vedi definizione precedente).</p>
<p>Facciamo un esempio commentato a dovere:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Alessandro <span style="color: #009900;">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// (1) Top level class</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">class</span> SMC <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">/*...*/</span><span style="color: #009900;">&#125;</span>&nbsp; <span style="color: #666666; font-style: italic;">// (2) Static member class</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">interface</span> SMI <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">/*...*/</span><span style="color: #009900;">&#125;</span> &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// (3) Static member interface</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">class</span> NSMC <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">/*...*/</span><span style="color: #009900;">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// (4) Non-static member (inner) class</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">void</span> nsm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">class</span> NSLC <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">/*...*/</span><span style="color: #009900;">&#125;</span>&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// (5) Local (inner) class in non-static context</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> sm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">class</span> SLC <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">/*...*/</span><span style="color: #009900;">&#125;</span> &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// (6) Local (inner) class in static context</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; SMC nsf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SMC<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// (7) Anonymous (inner) class in non-static context</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*...*/</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> SMI sf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SMI<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// (8) Anonymous (inner) class in static context</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*...*/</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">enum</span> SME <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">/*...*/</span><span style="color: #009900;">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// (9) Static member enum</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2010/02/java-1-6-nested-type-e-inner-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Isolinux: creare un menù personalizzato</title>
		<link>http://www.alessandrostella.it/software/2010/01/isolinux-creare-un-menu-personalizzato/</link>
		<comments>http://www.alessandrostella.it/software/2010/01/isolinux-creare-un-menu-personalizzato/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 22:34:57 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[boot loader]]></category>
		<category><![CDATA[isolinux]]></category>
		<category><![CDATA[isolinux.cfg]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=607</guid>
		<description><![CDATA[Abbiamo conosciuto isolinux, però adesso vogliamo usarlo. Qui di seguito vi mostro un esempio di cosa possiamo ottenere con pochi semplici passaggi. Quello che vedete nell&#8217;immagine qui sotto è uno screenshot del mio DVD personale che uso ogni volta che mi tocca sistemare/formattare/testare un PC&#8230; E&#8217; stato creato con isolinux! Procediamo. Per prima cosa (vedi [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alessandrostella.it/software/2010/01/cosa-e-isolinux/">Abbiamo conosciuto isolinux</a>, però adesso vogliamo usarlo.<br />
Qui di seguito vi mostro un esempio di cosa possiamo ottenere con pochi semplici passaggi. Quello che vedete nell&#8217;immagine qui sotto è uno screenshot del mio DVD personale che uso ogni volta che mi tocca sistemare/formattare/testare un PC&#8230; E&#8217; stato creato con isolinux!</p>
<p><img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/isolinux.png" alt="" title="Menù personalizzato creato con ISOLINUX" width="640" height="480" class="aligncenter size-full wp-image-608" /></p>
<p>Procediamo.<br />
Per prima cosa (<a href="http://syslinux.zytor.com/wiki/index.php/ISOLINUX" target="_blanck">vedi link originale</a>) mettiamo in risalto il fatto che isolinux:</p>
<ul>
<li>utilizza solo i nomi di file che rispettano l&#8217;ISO 9660, vale a dire che non supporta Rock Ridge o nomi di file in Joliet. Tuttavia può essere usato su un disco che utilizza Rock Ridge e/o estensioni Joliet.
</li>
<li>supporta i nomi di file lunghi (livello 2) ISO 9660, quindi se la compatibilità con i nomi dei file brevi (utile per sistemi operativi come MS-DOS) non è un problema, è possibile utilizzare l&#8217;opzione &#8220;-l&#8221; o &#8220;-iso-level 2&#8243; di mkisofs per generare nomi di file lunghi (fino a 31 caratteri).
</li>
</ul>
<p>Bene, detto questo, costruiamo il nostro primo CD/DVD bootable con menù personalizzato usando isolinux. Seguiremo il seguente procedimento:</p>
<ol>
<li>creazione cartella di lavoro</li>
<li>estrazione di isolinux dal progetto madre <a href="http://syslinux.zytor.com/wiki/index.php/SYSLINUX" target="_blanck">syslinux</a></li>
<li>manipolazione del file <strong>isolinux.cfg</strong> per personalizzare il menù</li>
<li>masterizzazione del CD</li>
</ol>
<p><span id="more-607"></span><br />
<strong>1. Creazione cartella di lavoro</strong><br />
Creiamo una cartella con un nome qualsiasi che useremo come contenitore di tutti i nostri file. Ad esempio c:\bootCD</p>
<p><strong>2. Estrazione isolinux</strong><br />
Andiamo su <a href="http://www.kernel.org/pub/linux/utils/boot/syslinux/" target="_blanck">http://www.kernel.org/pub/linux/utils/boot/syslinux/</a> e scarichiamo syslinux. Attualmente è alla versione 3.84, ma qui usiamo la 3.82. Ottenuto il file .zip decomprimiamolo in una cartella a piacere, cerchiamo i seguenti files: chain.c32, isolinux.bin, memdisk, menu.c32, reboot.c32, vesamenu.c32 e copiamoli in c:\bootCD.</p>
<p><strong>3. Manipolazione del file isolinux.cfg</strong><br />
Sempre nella cartella c:\bootCD creiamo un file di testo vuoto con nome <strong>isolinux.cfg</strong>. Esso rappresenterà il nostro menù. Per capire cosa scrivere in questo file ci basta andare nella cartella &#8220;doc&#8221; di syslinux e cercare il file menu.txt. Al suo interno troveremo una dettagliata descrizione di come creare un file isolinux.cfg.<br />
A questo punto ci troviamo quindi ad avere la seguente situazione:<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/bootCD.gif" alt="" title="Contenuto della cartella bootCD" width="492" height="441" class="alignleft size-full wp-image-638" style="float:none;" /><br />
Per avere un riscontro pratico, di seguito vi posto il codice che ho scritto per creare il menù mostrato dall&#8217;immagine a inizio post.<br />
Esempio di file isolinux.cfg:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">default vesamenu.c32<br />
prompt 0<br />
# MENU RESOLUTION 800 600<br />
MENU TITLE<br />
MENU BACKGROUND sfondo.png<br />
MENU AUTOBOOT Avvio da hard disk previsto fra # secondi...<br />
MENU TABMSG &nbsp;http://www.alessandrostella.it<br />
MENU COLOR hotsel &nbsp; &nbsp; &nbsp; 1;37;47 #ffffffff #99ffff3C std<br />
MENU COLOR unsel&nbsp; &nbsp; &nbsp; &nbsp; 37;40 &nbsp; #99ffff3C #00000000 std<br />
MENU COLOR sel&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 31;47 &nbsp; #DDEE0000 #99ffff3C std<br />
MENU COLOR scrollbar&nbsp; &nbsp; 30;47 &nbsp; #40000000 #20ffffff<br />
MENU COLOR border &nbsp; &nbsp; &nbsp; 30;47 &nbsp; #00000000 #00000000 none<br />
MENU COLOR help &nbsp; &nbsp; &nbsp; &nbsp; 37;40 &nbsp; #c0ffffff #00000000 std<br />
MENU WIDTH 64<br />
MENU MARGIN 2<br />
MENU HSHIFT 7<br />
MENU VSHIFT 1<br />
MENU ROWS 20<br />
MENU TABMSGROW -1<br />
MENU TIMEOUTROW -2<br />
MENU CMDLINEROW 22<br />
MENU ENDROW -1<br />
MENU HIDDENROW -2<br />
MENU HELPMSGROW -5<br />
MENU HELPMSGENDROW -3<br />
# MENU PASSWORDMARGIN 3<br />
# MENU PASSWORDROW 11<br />
#<br />
# DIVISORE PER ANTIVIRUS<br />
LABEL -<br />
&nbsp; &nbsp; MENU LABEL ANTIVIRUS:<br />
&nbsp; &nbsp; MENU DISABLE<br />
#<br />
# avvio di AVIRA<br />
label Avvio di Avira AntiVir Rescue System<br />
MENU LABEL ^Avira AntiVir Rescue System<br />
&nbsp; &nbsp; MENU INDENT 1<br />
&nbsp; &nbsp; kernel vesamenu.c32<br />
&nbsp; &nbsp; APPEND /antivir/antivir.cfg<br />
#<br />
# avvio di BITDEFENDER<br />
label Avvio di BitDefender<br />
MENU LABEL ^BitDefender<br />
&nbsp; &nbsp; MENU INDENT 1<br />
&nbsp; &nbsp; kernel /KNOPPIX/linux<br />
&nbsp; &nbsp; append ramdisk_size=100000 init=/etc/init lang=en apm=power-off vga=791 initrd=/KNOPPIX/BitDefender/minirt.gz nomce quiet BOOT_IMAGE=knoppix knoppix_name=KNOPPIXBD <br />
#<br />
# avvio di KASPERSKY<br />
label Avvio di Kaspersky 'Kav Rescue CD'<br />
MENU LABEL ^Kaspersky 'Kav Rescue CD'<br />
&nbsp; &nbsp; MENU INDENT 1<br />
&nbsp; &nbsp; kernel vesamenu.c32<br />
&nbsp; &nbsp; append /kav_rescue/isolinux/kav10.cfg<br />
MENU SEPARATOR<br />
#<br />
# DIVISORE PER SISTEMI OPERATIVI LIVE<br />
LABEL -<br />
&nbsp; &nbsp; MENU LABEL SISTEMI OPERATIVI LIVE:<br />
&nbsp; &nbsp; MENU DISABLE<br />
#<br />
# avvio di LINUX NimbleX<br />
label Avvio in RAM di NimbleX (User: root Pass: toor)<br />
MENU LABEL Linux ^NimbleX (User: root Pass: toor)<br />
&nbsp; &nbsp; MENU INDENT 1<br />
&nbsp; &nbsp; kernel vesamenu.c32<br />
&nbsp; &nbsp; append /NimbleX/boot/syslinux/nimblex.cfg<br />
#<br />
# avvio di UBCD4WIN<br />
label Avvio in RAM di UBCD4WIN<br />
MENU LABEL ^Windows XP Pro [UBCD4WIN]<br />
&nbsp; &nbsp; MENU INDENT 1<br />
&nbsp; &nbsp; kernel bootsect.bin<br />
MENU SEPARATOR<br />
#<br />
# DIVISORE PER UTILITY<br />
LABEL -<br />
&nbsp; &nbsp; MENU LABEL UTILITY:<br />
&nbsp; &nbsp; MENU DISABLE<br />
#<br />
# avvio di MEMTEST<br />
label Avvio di Memtest<br />
MENU LABEL ^Memtest 4<br />
&nbsp; &nbsp; MENU INDENT 1<br />
&nbsp; &nbsp; KERNEL memdisk<br />
&nbsp; &nbsp; append ramdisk_size=100000 initrd=/memtestp.imz<br />
#<br />
# avvio di TESTDISK<br />
label TestDisk / PhotoRec / LiloPwd<br />
MENU LABEL ^TestDisk / PhotoRec / LiloPwd<br />
&nbsp; &nbsp; MENU INDENT 1<br />
&nbsp; &nbsp; kernel memdisk<br />
&nbsp; &nbsp; append initrd=/TestDisk.imz<br />
MENU SEPARATOR<br />
#<br />
# riavvio del sistema<br />
label Reboot<br />
MENU LABEL ^Riavvia il sistema<br />
&nbsp; &nbsp; KERNEL Reboot.c32<br />
#<br />
# avvio da disco fisso <br />
label Passa il comando al boot loader dell'HD<br />
MENU LABEL Avvia il sistema da ^Hard Disk (default)<br />
&nbsp; &nbsp; MENU DEFAULT<br />
&nbsp; &nbsp; localboot 0x80<br />
&nbsp; &nbsp; timeout 400<br />
MENU SEPARATOR<br />
#<br />
#<br />
LABEL -<br />
&nbsp; &nbsp; MENU LABEL F1 Aiuto<br />
&nbsp; &nbsp; MENU DISABLE<br />
F1 help.msg</div></td></tr></tbody></table></div>
<p><strong>4. Masterizzazione del CD</strong><br />
Per masterizzare il nostro CD e vedere il nostro menù (anche se attualmente non farà quasi niente), possiamo usare diversi metodi. Se avete a disposizione un programma in grado di creare CD bootable (ad esempio nero burning rom) vi basta indicare come immagine di boot il file <strong>isolinux.bin</strong>. Poi copiare nella root del CD il contenuto della cartella c:\bootCD e masterizzare. Personalmente uso <a href="http://www.MagicISO.com" target="_blanck">magiciso</a> che però è un software a pagamento. Potete usare <strong>mkisofs</strong>, ma è a linea di comando.</p>
<p>A questo punto, finita la masterizzazione sul CD, possiamo riavviare la macchina ed eseguire il boot da CD. A video dovrebbe comparire il nostro menù. Ovviamente per far eseguire delle azioni precise collegate ad ogni voce di menù bisognerà indicarle nel file isolinux.cfg e bisognerà sapere cosa fare e come farlo, ma di questo ci occuperemo più avanti&#8230; Tuttavia, osservando il file isolinux.cfg postato sopra, si possono già intuire molte cose&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/software/2010/01/isolinux-creare-un-menu-personalizzato/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cosa è isolinux?</title>
		<link>http://www.alessandrostella.it/software/2010/01/cosa-e-isolinux/</link>
		<comments>http://www.alessandrostella.it/software/2010/01/cosa-e-isolinux/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 17:37:24 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[boot loader]]></category>
		<category><![CDATA[isolinux]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=600</guid>
		<description><![CDATA[Incredibile, ma vero. Se si cerca cosa è isolinux? su Google&#8230; non si trova una risposta precisa! Bisogna leggere un bel po&#8217; di chiacchiere e blog per venire a capo della risposta! L&#8217;unico modo per avere una risposta degna è digitare &#8220;what is isolinux?&#8221;. Si, ma uno che non è proprio avvezzo all&#8217;inglese? Cosa fa? [...]]]></description>
			<content:encoded><![CDATA[<p>Incredibile, ma vero.<br />
Se si cerca <strong>cosa è isolinux?</strong> su Google&#8230; non si trova una risposta precisa! Bisogna leggere un bel po&#8217; di chiacchiere e blog per venire a capo della risposta! L&#8217;unico modo per avere una risposta degna è digitare &#8220;what is isolinux?&#8221;. Si, ma uno che non è proprio avvezzo all&#8217;inglese? Cosa fa? Lo so, la risposta classica è: &#8220;che lasci perdere l&#8217;informatica&#8221;. Già, in parte è vero&#8230; in parte no. Comunque sia, ora poniamo rimedio e rispondiamo alla domanda &#8220;cosa è isolinux?&#8221;. Dobbiamo saperlo!<br />
<strong>Isolinux è un boot loader per Linux/i386</strong> che opera su ISO 9660/El Torito CD-ROM in &#8220;no emulation&#8221; mode. Cosa significa lavorare in &#8220;no emulation mode&#8221;? Significa tanto, ma proprio tanto. Significa che non abbiamo la necessità di creare un&#8217;immagine &#8220;del disco di emulazione&#8221; con spazio limitato (per &#8220;emulazione floppy&#8221;) o con problemi di compatibilità (per &#8220;emulazione disco rigido&#8221;). Chi ha avuto modo di creare un&#8217;immagine di boot sa bene quanto è importante questa caratteristica!<br />
In parole più comprensibili, con questo &#8220;programma&#8221; noi possiamo creare un CD/DVD/USB che è in grado di far avviare il nostro PC anche in assenza/mal funzionamento del nostro HD. Questo significa che, con le opportune configurazioni e accortezze, noi saremo in grado di far partire un antivirus o un sistema di backup, o altro ancora anche quando il nostro HD proprio non ne vuole sapere di far partire il nostro sistema operativo. Tra l&#8217;altro isolinux non è di certo l&#8217;ultimo arrivato o uno sprovveduto! Quasi tutti i sistemi linux usano isolinux nelle distribuzioni live; sapete, quelle che partono da sole all&#8217;avvio della macchina tipo ubuntu o simili, ecc.</p>
<p>Ok, ho capito cosa è. Non mi serve <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  In questo caso è inutile leggere il seguito <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Ok, ho capito cosa è. Mi sembra una gran figata e vorrei capire se posso configurarlo per far partire i miei sistemi preferiti&#8230; In questo caso è consigliabile leggere i prossimi post sull&#8217;argomento! <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/software/2010/01/cosa-e-isolinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convertire un file flv in avi con ubuntu</title>
		<link>http://www.alessandrostella.it/linux-ubuntu/2010/01/convertire-file-flv-avi-con-ubuntu/</link>
		<comments>http://www.alessandrostella.it/linux-ubuntu/2010/01/convertire-file-flv-avi-con-ubuntu/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 10:33:46 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[avi]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[flv]]></category>
		<category><![CDATA[ubuntu 9.10]]></category>
		<category><![CDATA[winff]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=580</guid>
		<description><![CDATA[Non è proprio un gioco. No, davvero non lo è&#8230; Dopo aver perso magari del tempo prezioso a scaricare file da youtube in formato flv, ora ci piacerebbe trasformali in avi, ma abbiamo ubuntu. Come si fa? Seguitemi. 1. Disinstallare i pacchetti x264, libx264 e ffmpeg se sono già installati. Apriamo un terminale e digitiamo: [...]]]></description>
			<content:encoded><![CDATA[<p>Non è proprio un gioco. No, davvero non lo è&#8230;<br />
Dopo aver perso magari del tempo prezioso a scaricare file da youtube in formato flv, ora ci piacerebbe trasformali in avi, ma abbiamo ubuntu. Come si fa?<br />
Seguitemi.</p>
<p><strong>1. Disinstallare i pacchetti x264, libx264 e ffmpeg se sono già installati.</strong><br />
Apriamo un terminale e digitiamo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get remove ffmpeg x264 libx264-dev</div></td></tr></tbody></table></div>
<p><strong>2. Installare winff.</strong><br />
Apriamo Ubuntu software center, digitiamo winff nella casella di ricerca e installiamolo.</p>
<p>Usare winff è facile. Scegliere il file da convertire, il formato finale e premere &#8220;Converti&#8221;. Già, magari! Se siamo fortunati abbiamo finito, ma in genere se usiamo ubuntu non lo saremo. Non lo saremo perché in ubuntu mancano un bel po&#8217; di libreire e codec sia audio sia video. Andiamo con ordine.<br />
Se dopo aver installato winff e premuto &#8220;Converti&#8221; appare il messaggio <strong>&#8220;FFplay non trovato&#8221;</strong>, si è combinato qualche casino in fase di installazione. Disinstallare tutto e ricominciare da capo.<br />
Se invece, dopo aver premuto il tasto &#8220;Converti&#8221;, si apre il terminale ma viene fuori <strong>&#8220;Unknown codec &#8216;libmp3lame&#8217;&#8221;</strong>, c&#8217;è il classico problema dei codec di Ubuntu. Potremmo parlare a lungo su come risolvere questo problema, ma a noi interessa il risultato per cui andiamo sul winff e scegliamo &#8220;Opzioni&#8221; in alto a destra. Poi, in basso, scegliamo la tabella &#8220;Parametri riga di comando aggiuntivo&#8221; e scriviamoci dentro</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-acodec copy</div></td></tr></tbody></table></div>
<p>Se con tale parametro il file finale viene creato senza audio, provare a scegliere AC3 come codec audio, digitando</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-acodec ac3</div></td></tr></tbody></table></div>
<p>Ora riproviamo a scegliere &#8220;Converti&#8221;.<br />
Dovrebbe partire.<br />
Vi consiglio di fare le prove con un file piccolo (30MB) perché il tempo necessario alla conversione è notevole.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/linux-ubuntu/2010/01/convertire-file-flv-avi-con-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jeyo companion 2.1, windows mobile, gli sms e i contatti</title>
		<link>http://www.alessandrostella.it/windows/2010/01/jeyo-companion-2-1-windows-mobile-gli-sms-contatti/</link>
		<comments>http://www.alessandrostella.it/windows/2010/01/jeyo-companion-2-1-windows-mobile-gli-sms-contatti/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 17:19:44 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[XP]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[jeyo]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=561</guid>
		<description><![CDATA[Oggi voglio parlare di un programmino che, con 15 euro, mi ha risolto il problema del salvataggio dei miei sms inviati e ricevuti dal mio windows mobile. Sto parlando di Jeyo Companion 2.1. Possiamo scaricarne una versiolne trial valida 15 giorni dal sito del produttore. Bene. La procedura di installazione è abbastanza banale. Ciò che [...]]]></description>
			<content:encoded><![CDATA[<p>Oggi voglio parlare di un programmino che, con 15 euro, mi ha risolto il problema del <strong>salvataggio dei miei sms inviati e ricevuti dal mio windows mobile</strong>. Sto parlando di <strong>Jeyo Companion 2.1</strong>.<br />
Possiamo scaricarne una versiolne trial valida 15 giorni dal <a href="http://www.jeyo.com/companion.asp">sito del produttore</a>.<br />
Bene.<br />
La procedura di installazione è abbastanza banale. Ciò che importa è che prima di installare Companion abbiamo effettuato almeno una volta il collegamento di windows mobile a windows tramite <strong>Microsoft ActiveSync</strong>.<br />
Finita la procedura di installazione, colleghiamo il nostro pocket o smartphone al PC e lanciamo Companion. Ci troveremo di fronte alla seguente schermata.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/Jeyo_Companion_01.jpg" alt="" title="Jeyo Companion" width="486" height="474" class="aligncenter size-full wp-image-562" /><br />
Cosa c&#8217;è da spiegare? E&#8217; tutto così chiaro! <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Se clicchiamo su SMS/Inbox il sistema si collegherà al nostro telefono e scaricherà l&#8217;elenco di tutti gli sms che abbiamo ricevuto e così per tutto il resto. Troppo comodo!<br />
L&#8217;unica osservazione da fare riguarda gli <strong>sms multipli</strong>, cioè quelli più lunghi di 160 caratteri: Companion mostrerà solo il primo sms, ossia solo i primi 160 caratteri. Niente paura però, perché quando faremo il backup l&#8217;sms sarà salvato per intero.<br />
A proposito&#8230; come si fa il backup?<br />
Facile, troppo facile: basta scegliere da menù &#8220;File/Backup&#8230;&#8221;. Comparirà questa schermata:<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/Jeyo_Companion_02.jpg" alt="" title="Scegli cosa backuppare" width="397" height="229" class="aligncenter size-full wp-image-563" /><br />
Scegliamo &#8220;More&#8230;&#8221;, premiamo &#8220;Continue&#8221; e poi decidiamo quello che vogliamo backuppare (SMS, Contacts, Call History). I dati saranno salvati in un file in formato XML. Qui vi mostro un piccolo esempio.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/Jeyo_Companion_03.gif" alt="" title="Esempio XML sms" width="602" height="483" class="aligncenter size-full wp-image-575" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2010/01/jeyo-companion-2-1-windows-mobile-gli-sms-contatti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installare Cygwin su sistema Windows</title>
		<link>http://www.alessandrostella.it/windows/xp/2010/01/installare-cygwin/</link>
		<comments>http://www.alessandrostella.it/windows/xp/2010/01/installare-cygwin/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 15:42:09 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[XP]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[emulazione unix]]></category>
		<category><![CDATA[installare cygwin]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=518</guid>
		<description><![CDATA[Cosa è Cygwin? La più concisa (ed al tempo stesso esauriente) spiegazione di cosa sia Cygwin la si trova sul sito internet dove esso viene distribuito (http://www.cygwin.com): &#8220;Cygwin is a Linux-like environment for Windows. It consists of two parts: A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality. [...]]]></description>
			<content:encoded><![CDATA[<h5>Cosa è <strong>Cygwin</strong>?</h5>
<p>La più concisa (ed al tempo stesso esauriente) spiegazione di cosa sia Cygwin la si trova sul sito internet dove esso viene distribuito (<a href="http://www.cygwin.com" target="_blanck">http://www.cygwin.com</a>):<br />
&#8220;Cygwin is a Linux-like environment for Windows. It consists of two parts:</p>
<ul>
<li>A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality.</li>
<li>A collection of tools which provide Linux look and feel.&#8221;</li>
</ul>
<p>In altre parole, <strong>Cygwin</strong> permette di sfruttare, anche su una macchina Windows, la potenza e la flessibilità di una shell *NIX Like. All’interno della shell emulata è possibile utilizzare molti dei software tipici del mondo Linux, tra cui il compilatore GCC. Il vantaggio di utilizzare un ambiente emulato invece di uno “nativo” consiste nel non dover installare sulla propria macchina un nuovo sistema operativo, con tutte le problematiche che questa operazione solitamente comporta. Il fatto che si tratti di un ambiente emulato ha chiaramente delle ripercussioni a livello di performance. Sostanzialmente, questo può utilizzare soltanto una piccola percentuale delle risorse (memoria, spazio su disco, ecc…) presenti sulla macchina in uso, dato che la maggior parte di esse è occupata dal sistema operativo “principale”. Tale discorso, che vale in generale per qualsiasi tipo di emulazione, è tanto più vero per gli OS della famiglia Windows, storicamente “avidi” di risorse.</p>
<h5>Installare <strong>Cygwin</strong>*</h5>
<p>Per installare Cygwin è necessario utilizzare un computer connesso ad Internet. Collegandosi al sito Internet <a href="http://www.cygwin.com" target="_blanck">http://www.cygwin.com</a>, si può trovare, nell’angolo superiore destro della home page, il link all&#8217;installer di cygwin (http://www.cygwin.com/setup.exe, contraddistinto dall’etichetta &#8220;Install Cygwin now&#8221;).<br />
Procediamo.<br />
Una volta scaricato il file di installazione e scelto di eseguirlo, windows ci potrebbe avvisare di strani pericoli&#8230; ignoriamolo pure premendo &#8220;Esegui&#8221;.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/cygwin_01.jpg" alt="" title="Avviso di protezione" width="404" height="302" class="aligncenter size-full wp-image-520" /></p>
<p>Premiamo sempre avanti e scegliamo di installare il programma tramite internet, come mostrato nella figura.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/cygwin_02.jpg" alt="" title="Installazione via Internet" width="538" height="388" class="aligncenter size-full wp-image-538" /></p>
<p>Scegliamo poi il server dal quale scaricare i pacchetti (uno vale l&#8217;altro), come mostrato in figura<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/cygwin_05.jpg" alt="" title="Scelta del server pe ril download" width="538" height="388" class="aligncenter size-full wp-image-522" /></p>
<p>E, infine, scegliamo i pacchetti.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/cygwin_06.jpg" alt="" title="Scegliamo i pacchetti" width="538" height="388" class="aligncenter size-full wp-image-523" /></p>
<p>Una volta premuto avanti il sistema inizierà a scaricare i pacchetti scelti. Potrebbero essere necessari diversi minuti prima che il sistema Cygwin sia pronto. Dobbiamo pazientare. Quando tutto sarà pronto saremo avvisati.</p>
<p>Finita l&#8217;installazione, Cygwin potrebbe non funzionare: bisogna <strong>aggiungere le variabili di sistema</strong>.<br />
In windows XP, clicchiamo col dx su &#8220;Risorse del computer&#8221; e, dal menù a tendina, scegliamo &#8220;proprietà&#8221;. Poi andiamo sulla tabella &#8220;Avanzate&#8221; e in basso scegliamo &#8220;Variabili d&#8217;ambiente&#8221;. Aggiungiamo le prime due varibili nella figura qui sotto: CYGWIN_HOME e Path (che sarà aggiunta alla Path generale)<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/cygwin_variabili_ambiente.jpg" alt="" title="cygwin: variabili ambiente" width="384" height="423" class="aligncenter size-full wp-image-533" /><br />
A questo punto lanciamo il collegamento sul desktop e&#8230; buona emulazione.</p>
<p>*<br />
NB: Nel momento in cui scrivo questo tutorial, la versione di Cygwin più recente è quella comprendente la DLL in versione 1.7.1. Le istruzioni che seguono faranno dunque riferimento all’installazione di questa specifica versione.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/xp/2010/01/installare-cygwin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu e i file srt (file di testo contenenti i sottotitoli)</title>
		<link>http://www.alessandrostella.it/linux-ubuntu/2010/01/ubuntu-srt-sottotitoli-avi/</link>
		<comments>http://www.alessandrostella.it/linux-ubuntu/2010/01/ubuntu-srt-sottotitoli-avi/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 19:01:01 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[avi]]></category>
		<category><![CDATA[sottotitoli]]></category>
		<category><![CDATA[srt]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=495</guid>
		<description><![CDATA[Situazione di partenza:: ubuntu; un film in formato AVi, ma diviso in 2 pezzi 1.avi e 2.avi un unico file s.srt contenente i sottotitoli del film. Cosa vogliamo ottenere: dividere il file s.srt in 2 pezzi: uno per il file 1.avi e l&#8217;altro per il file 2.avi. Come facciamo? Un po&#8217; lungo, ma facile, facile&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Situazione di partenza::</p>
<ul>
<li>ubuntu;</li>
<li>un film in formato AVi, ma diviso in 2 pezzi 1.avi e 2.avi</li>
<li>un unico file s.srt contenente i sottotitoli del film.</li>
</ul>
<p>Cosa vogliamo ottenere:<br />
dividere il file s.srt in 2 pezzi: uno per il file 1.avi e l&#8217;altro per il file 2.avi.</p>
<p>Come facciamo?<br />
Un po&#8217; lungo, ma facile, facile&#8230; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Apriamo ubuntu software center e installiamo &#8220;<strong>Subtitle Editor</strong>&#8220;.<br />
Apriamo il file s.srt con subtitle.<br />
Apriamo 1.avi e andiamo a vedere quanto dura il nostro primo pezzo di film; ad esempio 1:07:45 (un&#8217;ora, sette minuti e 45 secondi)<br />
Ora scorriamo il nostro s.srt fino a quando nella colonna &#8220;Start&#8221; non compare un tempo immediatamente successivo alla lunghezza del nostro primo filmato, 1.avi. Selezioniamo quindi tutte le righe successive e scegliamo dal menù &#8220;<em>Tools/Split Document</em>&#8221; (oppure premiamo i tasti Ctrl+X).<br />
Subtitle, chiederà conferma dell&#8217;operazione (premiamo ok) e spezzerà per noi s.srt in 2, creando un secondo file con suffisso &#8220;-par2&#8243; in una seconda scheda. Con il fuoco su questa nuova scheda scegliamo dal menù &#8220;<em>Timings/Scale</em>&#8220;.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2010/01/Scale1.png" alt="Il timings dei sottotitoli" title="Scale" width="229" height="377" class="alignnone size-full wp-image-497" /><br />
Nel &#8220;Punto iniziale&#8221; modifichiamo la casella &#8220;New start&#8221; azzerando ore e minuti, ottenendo (in questo caso): 0:00:24.487<br />
Di conseguenza, nella casella &#8220;New start&#8221; del &#8220;Punto finale&#8221; sottraiamo ore e minuti azzerati al &#8220;Punto iniziale&#8221;, ottenendo (in questo caso): 1:15:23.487<br />
Premiamo &#8220;OK&#8221; e salviamo il file. Ora ci basta associare il nuovo file srt al file 2.avi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/linux-ubuntu/2010/01/ubuntu-srt-sottotitoli-avi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu e windows mobile 6.x</title>
		<link>http://www.alessandrostella.it/linux-ubuntu/2009/12/ubuntu-e-windows-mobile-6-x/</link>
		<comments>http://www.alessandrostella.it/linux-ubuntu/2009/12/ubuntu-e-windows-mobile-6-x/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 13:33:26 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[karmic]]></category>
		<category><![CDATA[sincronizzazione]]></category>
		<category><![CDATA[ubuntu 9.10]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=474</guid>
		<description><![CDATA[Come si fa a collegare un PDA con windows mobile 6.x su karmic koala? Può essere tutto molto facile, ma può risultare anche molto ostico. Cerchiamo di farlo facile Prepariamo Linux Ubuntu Prepariamo windows mobile Colleghiamoli Tutto nasce e muore su synce.org. Procediamo. Da Linux Ubuntu, scegliamo &#8220;Sistema/Amministrazione/Sorgenti software&#8221;. Dalla maschera che appare, scegliamo la [...]]]></description>
			<content:encoded><![CDATA[<p>Come si fa a collegare un PDA con windows mobile 6.x su karmic koala?<br />
Può essere tutto molto facile, ma può risultare anche molto ostico.<br />
Cerchiamo di farlo facile <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<ul>
<li>Prepariamo Linux Ubuntu</li>
<li>Prepariamo windows mobile</li>
<li>Colleghiamoli</li>
</ul>
<p>Tutto nasce e muore su <a href="http://www.synce.org" target="_blanck">synce.org</a>.<br />
Procediamo.<br />
Da <strong>Linux Ubuntu</strong>, scegliamo &#8220;Sistema/Amministrazione/Sorgenti software&#8221;.<br />
Dalla maschera che appare, scegliamo la tabella &#8220;Altro software&#8221;.<br />
Premiamo &#8220;Aggiungi&#8230;&#8221; e inseriamo la seguente stringa:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">deb http://ppa.launchpad.net/synce/ubuntu karmic main</div></td></tr></tbody></table></div>
<p>Ripetiamo l&#8217;operazione aggiungendo questa volta quest&#8217;altra stringa:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">deb-src http://ppa.launchpad.net/synce/ubuntu karmic main</div></td></tr></tbody></table></div>
<p>Scegliamo poi &#8220;Chiudi&#8221; e quindi premiamo il pulsante &#8220;Aggiorna&#8221;. Attendere&#8230;<br />
Potrebbe apparire un <strong>errore di chiave</strong>. Se ciò avviene, apriamo il terminale e digitiamo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-key adv --recv-keys --keyserver subkeys.pgp.net B152F042D246C25D</div></td></tr></tbody></table></div>
<p>Avendo cura di sostituire la chiave qui indicata (B152F042D246C25D) con quella mostrata dal vostro (eventuale) errore.<br />
Installiamo SynCE:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install synce-hal librra-tools librapi2-tools</div></td></tr></tbody></table></div>
<p>A questo punto Linux potrebbe essere già pronto&#8230;<br />
<span id="more-474"></span><br />
Andiamo su <strong>windows mobile</strong> e scegliamo &#8220;Start/Impostazioni/Connessioni/USB a PC&#8221;. Accertiamoci che sia selezionato sia &#8220;ActiveSync&#8221; sia la spunta &#8220;Attiva le funzionalità avanzate di rete&#8221;.<br />
Poi &#8220;Start/Programmi/ActiveSync/Menù/Connessioni&#8230;&#8221; spuntiamo la voce &#8220;Sincronizza tutti i PC&#8230;&#8221; e scegliamo &#8220;USB&#8221; dal menù a tendina.<br />
Windows mobile è pronto.</p>
<p>Colleghiamo il nostro PDA a ubuntu tramite la porta USB.</p>
<p>Da terminale digitiamo</p>
<div class=codice">
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">synce-pls</div></td></tr></tbody></table></div>
</div>
<p>Vi mostro un plausibile risultato:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">alessandro@dell1720:~$ synce-pls<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:00:20 &nbsp;Immagini/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:00:20 &nbsp;Modelli/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:00:22 &nbsp;Personale/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:00:22 &nbsp;Lavoro/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:00:22 &nbsp;Musica/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:00:22 &nbsp;Suonerie/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:02:32 &nbsp;Video/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:02:32 &nbsp;Voci/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2008-09-26 13:02:44 &nbsp;UAContents/<br />
-------R-- &nbsp; &nbsp; &nbsp; 42340 &nbsp;2006-08-24 22:33:00 &nbsp;Dogbark.wav<br />
-------R-- &nbsp; &nbsp; &nbsp; &nbsp;1248 &nbsp;2006-08-24 22:33:00 &nbsp;ding.amr<br />
-------R-- &nbsp; &nbsp; &nbsp; 13561 &nbsp;2006-08-24 22:33:00 &nbsp;Alouette.mid<br />
Archive &nbsp; &nbsp; &nbsp; &nbsp; 230454 &nbsp;2009-10-22 21:08:52 &nbsp;sshot000.bmp<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2009-11-08 18:19:58 &nbsp;gnuboy/<br />
Archive &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;732 &nbsp;2009-11-30 21:37:40 &nbsp;Polizia Postale e del.pwi<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2009-12-12 18:42:10 &nbsp;Condivisione Bluetooth/<br />
Directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2009-12-12 20:17:52 &nbsp;Chiamate/<br />
Normal &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 87200 &nbsp;2009-12-12 22:14:02 &nbsp;Immag0033.jpg</div></td></tr></tbody></table></div>
<p>Se questo è il risultato, allora abbiamo finito.</p>
<p>Se invece viene fuori qualcosa del tipo (primo caso):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">** Message: Hal reports no devices connected<br />
** Message: Odccm is not running, ignoring<br />
synce-pls: Could not find configuration at path '(Default)'</div></td></tr></tbody></table></div>
<p>oppure del tipo (secondo caso):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">synce-pls: symbol lookup error: /usr/lib/librapi.so.2: undefined symbol: synce_info_get_transport</div></td></tr></tbody></table></div>
<p>le cose non vanno bene, ma noi le risolveremo.<br />
Nel primo caso proviamo così (è un unico comando!):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install synce-gnomevfs synce-gvfs synce-kio-rapip synce-kio-rapip-kde4 synce-hal synce-sync-engine librra-tools librapi2-dev</div></td></tr></tbody></table></div>
<p>poi dobbiamo riavviare&#8230;<br />
Se, dopo il riavvio, insiste a dare lo stesso problema allora potremmo avere problemi con i driver USB! Andiamo su google e cerchiamo il modo per installare/aggiornare i pacchetti <strong>usb-rndis-lite</strong>.<br />
Nel secondo caso invece procediamo da terminale digitando:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install librapi2-dev<br />
sudo apt-get install synce-gvfs</div></td></tr></tbody></table></div>
<p>e riavviamo il sistema (purtroppo, ci tocca!).<br />
Tutto ok?</p>
<p>Bene.<br />
Adesso come navighiamo nel nostro palmare?<br />
Da Ubuntu Software center installiamo &#8220;<strong>SynCE Try icon</strong>&#8220;.<br />
In alto a destra vedremo un&#8217;icona di un palmare. Ci clicchiamo sopra col destro e scegliamo &#8220;[nome del nostro PDA]>Explore with file manager&#8221;.</p>
<p>Ok, bello, ma noi adesso vogliamo <strong>sincronizzare la rubrica del PDA con quella di Evolution!</strong> E lo so che siamo esigenti! Scolleghiamo il PDA dal PC, andiamo giù di terminale e digitiamo in sequenza:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install multisync-tools opensync-plugin-evolution<br />
sudo apt-get install opensync-plugin-synce synce-trayicon<br />
synce-sync-engine</div></td></tr></tbody></table></div>
<p>L&#8217;ultimo comando si fermerà in questo punto:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">DEBUG syncengine : installing signal handlers</div></td></tr></tbody></table></div>
<p>è tutto normale, lasciamo la finestra del terminale aperta e apriamone un&#8217;altra dove digitiamo</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">synce-create-partnership &quot;karmic&quot; &quot;Contacts,Calendar,Tasks,Files&quot;</div></td></tr></tbody></table></div>
<p>ovviamente scriveremo solo quello che ci interessa, ad esempio solo &#8220;Contacts&#8221;.<br />
Lanciando quest&#8217;ultimo comando, la precedente finestra del terminale comincerà a scrivere un sacco di fregnacce! Va tutto bene&#8230;aspettiamo almeno 2 minuti&#8230;le cose che deve fare questo comando sono un bel po&#8217;. Infine raffica di comandi da terminale:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">msynctool --addgroup karmic<br />
msynctool --addmember karmic synce-opensync-plugin<br />
msynctool --addmember karmic evo2-sync<br />
msynctool --sync karmic --conflict n</div></td></tr></tbody></table></div>
<p>Apriamo Evolution.</p>
<p>Se, nonostante tutto, qualcosa non dovesse funzionare, vi invito a leggere i commenti a questo articolo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/linux-ubuntu/2009/12/ubuntu-e-windows-mobile-6-x/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Joomla! un CMS?</title>
		<link>http://www.alessandrostella.it/cms/2009/12/joomla-un-cms/</link>
		<comments>http://www.alessandrostella.it/cms/2009/12/joomla-un-cms/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 16:42:35 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[cms]]></category>
		<category><![CDATA[joomla!]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=470</guid>
		<description><![CDATA[Il titolo di questo articolo è volutamente provocatorio, quasi irriverenziale, ma ha i suoi motivi&#8230; Negli ultimi giorni, per motivi di lavoro, ho avuto a che fare con Joomla! Per chi non lo sapesse, si tratta di un CMS (Content Management System) open source tra i più famosi e utilizzati. CMS, appunto&#8230; Lo scopo principale [...]]]></description>
			<content:encoded><![CDATA[<p>Il titolo di questo articolo è volutamente provocatorio, quasi irriverenziale, ma ha i suoi motivi&#8230;<br />
Negli ultimi giorni, per motivi di lavoro, ho avuto a che fare con <a href="http://it.wikipedia.org/wiki/Joomla!" target="_blanck"><strong>Joomla!</strong></a><br />
Per chi non lo sapesse, si tratta di un <strong>CMS</strong> (<strong>C</strong>ontent <strong>M</strong>anagement <strong>S</strong>ystem) <strong>open source</strong> tra i più famosi e utilizzati.<br />
CMS, appunto&#8230;<br />
Lo scopo principale di un CMS dovrebbe essere la gestione facilitata dei contenuti&#8230; la gestione facilitata&#8230;</p>
<p>Beh, poiché io proprio non riesco a prendere una definizione per buona senza una prova scientifica di quanto affermato dalla definizione, ho cercato di scavare dentro questo CSM per scoprire quanto &#8220;agevola&#8221; la gestione dei contenuti e ho scoperto una cosa.</p>
<p>Ammettiamo di trovarci nella seguente situazione.<br />
Situazione lato amministrazione:</p>
<ol>
<li>creata sezione1</li>
<li>creata categoria1 (di sezione1)</li>
<li>creata categoria2 (di sezione1)</li>
<li>creati 10 articoli in categoria1</li>
<li>creati 10 articoli in categoria2</li>
</ol>
<p>Ammettiamo poi di voler ottenere lato front-end la seguente presentazione.<br />
Nella zona &#8220;left&#8221; del sito, voglio 2 menu&#8217; dal titolo rispettivamente &#8220;categoria1&#8243; e &#8220;categoria2&#8243;, ognuno dei quali contenga 10 link agli articoli della rispettiva categoria. Cliccando poi su ognuno di tali link, voglio visualizzare l&#8217;articolo in questione nella parte centrale del sito.</p>
<p>Bene.<br />
Tutto ciò si può ottenere creando a manina ogni singola voce del menu&#8217; e collegandola al rispettivo articolo, ma a me interessa sapere se joomla! consente di ottenere tale risultato in modo automatico.<br />
Dalla documentazione ufficiale e dai forum di supporto, la risposta sembra essere&#8230; no!<br />
Per ottenere una cosa così spudoratamente ovvia bisogna modificare a mano il codice!!!<br />
E questo sarebbe un CMS tra i più famosi del mondo???<br />
Mmah&#8230;<br />
Si, si&#8230; è chiaro che poi joomla! fa un sacco di cose: audio, video, documenti, template e chi più ne ha più ne metta, ma manca di una funzione così basilare che è come avere una Ferrari senza sportelli! Come la guido?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/cms/2009/12/joomla-un-cms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu e le scorciatoie da tastiera</title>
		<link>http://www.alessandrostella.it/linux-ubuntu/2009/12/ubuntu-e-le-scorciatoie-da-tastiera/</link>
		<comments>http://www.alessandrostella.it/linux-ubuntu/2009/12/ubuntu-e-le-scorciatoie-da-tastiera/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 15:37:52 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[tasti di scelta rapida]]></category>
		<category><![CDATA[tastiera]]></category>
		<category><![CDATA[ubuntu 9.10]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=453</guid>
		<description><![CDATA[Passando a linux ubuntu, una delle cose che mi è mancata dell&#8217;ambiente Microsoft è stata l&#8217;utilizzo delle scorciatoie (o tasti di scelta rapida) da tastiera! Con windows ero ormai di casa, in linux (gnome) le cose però sono un po&#8217; diverse, sopratutto a certi livelli. Così mi sono documentato e ho raccolto qui di seguito [...]]]></description>
			<content:encoded><![CDATA[<p>Passando a linux ubuntu, una delle cose che mi è mancata dell&#8217;ambiente Microsoft è stata l&#8217;utilizzo delle <strong>scorciatoie (o tasti di scelta rapida) da tastiera</strong>!<br />
Con windows ero ormai di casa, in linux (gnome) le cose però sono un po&#8217; diverse, sopratutto a certi livelli. Così mi sono documentato e ho raccolto qui di seguito le scorciatoie che mi sembrano utili da conoscere.</p>
<p><strong>Scorciatoie classiche</strong></p>
<ul>
<li><strong>Ctrl + C</strong> = Copia in evidenza il contenuto negli appunti;</li>
<li><strong>Ctrl + V</strong> = Incolla il contenuto degli Appunti;</li>
<li><strong>Ctrl + N</strong> = Nuovo (Crea un nuovo documento, non nel terminale);</li>
<li><strong>Ctrl + O</strong> = Apre un documento;</li>
<li><strong>Ctrl + S</strong> = Salva il documento corrente;</li>
<li><strong>Ctrl + P</strong> = Stampa il documento corrente;</li>
<li><strong>Ctrl + W</strong> = Chiude il documento;</li>
<li><strong>Ctrl + Q</strong> = Chiude l’applicazione corrente;</li>
<li><strong>Ctrl + A</strong> = Seleziona tutto;</li>
</ul>
<p><strong>Scorciatoie tipiche per il desktop enviroment GNOME</strong></p>
<ul>
<li><strong>Ctrl + Alt + F1</strong> = Passa al primo terminale virtuale;</li>
<li><strong>Ctrl + Alt + F2 (F3) (F4) (F5) (F6)</strong> = Seleziona i diversi terminali virtuali;</li>
<li><strong>Ctrl + Alt + F7</strong> = Ripristino per ritornare alla sessione corrente di terminale con X;</li>
<li><strong>Ctrl + Alt + Backspace</strong> = Riavvia GNOME;</li>
<li><strong>Alt + Tab</strong> = Navigazione tra i programmi aperti;</li>
<li><strong>Ctrl + Alt + L</strong> = Blocca schermo;</li>
<li><strong>Alt + F1</strong> = Apre il menu Applicazioni;</li>
<li><strong>Alt + F2</strong> = Apre la finestra di dialogo &#8220;Esegui Applicazione&#8221;;</li>
<li><strong>Alt + F3</strong> = Apre la Deskbar applet;</li>
<li><strong>Alt + F4</strong> = Chiude la finestra corrente;</li>
<li><strong>Alt + F5</strong> = Normalizza la finestra corrente;</li>
<li><strong>Alt + F7</strong> = Sposta la finestra corrente;</li>
<li><strong>Alt + F8</strong> = Ridimensiona la finestra corrente;</li>
<li><strong>Alt + F9</strong> = Minimizza la finestra corrente;</li>
<li><strong>Alt + F10</strong> = Massimizza la finestra corrente;</li>
<li><strong>Alt + Backspace</strong> = Apre la finestra del menu dell&#8217;oggetto corrente;</li>
<li><strong>Ctrl + Alt + +</strong> = Passa alla prossima risoluzione dello schermo;</li>
<li><strong>Ctrl + Alt + -</strong> = Passa alla precedente risoluzione dello schermo;</li>
<li><strong>Ctrl + Alt + Sinistra/Destra</strong> = Passa alla scrivania successivo/precedente;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/linux-ubuntu/2009/12/ubuntu-e-le-scorciatoie-da-tastiera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet, e-commerce e&#8230; come salvarsi culo e portafoglio online</title>
		<link>http://www.alessandrostella.it/sicurezza/2009/12/internet-e-commerce-e-come-salvarsi-culo-e-portafoglio-online/</link>
		<comments>http://www.alessandrostella.it/sicurezza/2009/12/internet-e-commerce-e-come-salvarsi-culo-e-portafoglio-online/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 12:12:52 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[acquisti online]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[fregature online]]></category>
		<category><![CDATA[isp]]></category>
		<category><![CDATA[mantainer]]></category>
		<category><![CDATA[nslookup]]></category>
		<category><![CDATA[polizia postale]]></category>
		<category><![CDATA[registrar]]></category>
		<category><![CDATA[rogatoria internazionale]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=418</guid>
		<description><![CDATA[Egregi compatrioti e non, oggi vi voglio parlare di una cosa che mi sta particolarmente a cuore: come fare (nella pratica) ad evitare di farsi prendere per il culo (e buttare i propri soldi) acquistando online articoli cinesi, russi, ecc. a prezzi stracciati&#8230; Sono stanco di ascoltare storie di amici e meno amici che piangono [...]]]></description>
			<content:encoded><![CDATA[<p>Egregi compatrioti e non,</p>
<p>oggi vi voglio parlare di una cosa che mi sta particolarmente a cuore: <strong>come fare (nella pratica) ad evitare di farsi prendere per il culo (e buttare i propri soldi) acquistando online articoli cinesi, russi, ecc. a prezzi stracciati&#8230;</strong> Sono stanco di ascoltare storie di amici e meno amici che piangono 100, 200, 500 euro per incauti acquisti. Oggi metto a disposizione le mie poche conoscenze per (provare ad) evitare di farvi fregare&#8230;<br />
Partiamo da un fatto: <strong>se io (informatico professionista) volessi arricchirmi in modo fraudolento, potrei farlo. Rischi? Praticamente nulli!</strong><br />
Per quanto questa affermazione vi possa far alzare le sopracciglia e pensare: &#8220;&#8230;sssse, come no! E perché non lo fai?&#8221;, non mi farò spaventare da tali vostri probabili pregiudizi e vi spiegherò come fare per cercare di capire quando un sito non è proprio affidabile&#8230; poi&#8230;. dopo&#8230; se avrete voglia di leggere tutto, vi spiegherò anche perché è facile fare soldi con i pirla che ci cascano.</p>
<p>Non è assolutamente importante in questa sede fare una lezione di reti di calcolatori: sarebbe noiosa e poco utile allo scopo. Per non parlare del fatto che a voi interessa molto poco osservare quanto io sia bravo (o asino!). L&#8217;obiettivo di questo articolo è darvi gli strumenti per fiutare una possibile truffa, senza spiegare il motivo per il quale tali strumenti funzionano.<br />
<strong>Tutto quanto sarà scritto di seguito non può essere applicato a siti come ebay che non vendono direttamente gli articoli, ma si occupano solo di ospitare i venditori.</strong>.<br />
Iniziamo.<br />
<span id="more-418"></span><br />
Prenderemo come esempio proprio un sito bastardo, un sito fregatura, ossia www.sales-digital.com. Articoli fantastici, sito perfettamente funzionante, noi ci crediamo, compriamo e loro ci fregano!<br />
<strong>Come facciamo a sapere se un sito è o meno un sito serio?</strong><br />
Il percorso sarà il seguente:</p>
<ol>
<li>Rintracciamo il Registrar</li>
<li>Confrontiamo gli IP del sito con quello del suo Registrar</li>
</ol>
<p>Per fare questo ci serviremo di 2 strumenti gratuiti online e del nostro sistema operativo.</p>
<h4>Rintracciamo il Registrar.</h4>
<p>Andiamo allora qui: <a href="http://www.internic.net/whois.html" target="_blanck">http://www.internic.net/whois.html</a> e, nell&#8217;unica casella di testo presente sul sito, scriviamo sales-digital.com, cioè il nome del sito SENZA il www iniziale. Scegliamo &#8220;Domain&#8221; e premiamo &#8220;submit&#8221;.</p>
<p>Dopo qualche secondo avremo in risposta qualcosa di molto simile a questo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Domain names in the .com and .net domains can now be registered<br />
with many different competing registrars. Go to http://www.internic.net<br />
for detailed information.<br />
<br />
&nbsp; &nbsp;Domain Name: SALES-DIGITAL.COM<br />
&nbsp; &nbsp;Registrar: BIZCN.COM, INC.<br />
&nbsp; &nbsp;Whois Server: whois.bizcn.com<br />
&nbsp; &nbsp;Referral URL: http://www.bizcn.com<br />
&nbsp; &nbsp;Name Server: NS5.CNMSN.NET<br />
&nbsp; &nbsp;Name Server: NS6.CNMSN.NET<br />
&nbsp; &nbsp;Status: clientDeleteProhibited<br />
&nbsp; &nbsp;Status: clientTransferProhibited<br />
&nbsp; &nbsp;Updated Date: 01-oct-2009<br />
&nbsp; &nbsp;Creation Date: 30-mar-2009<br />
&nbsp; &nbsp;Expiration Date: 30-mar-2010<br />
<br />
&gt;&gt;&gt; Last update of whois database: Fri, 04 Dec 2009 13:52:25 UTC &lt; &lt;&lt;<br />
<br />
[... un sacco di fregnacce che ho rimosso...]<br />
<br />
Domain name: sales-digital.com<br />
<br />
Registrant Contact:<br />
&nbsp; &nbsp;zhong jian ping<br />
&nbsp; &nbsp;jian ping zhong sales-digital@163.com</div></td></tr></tbody></table></div>
<p></code><br />
Niente paura.<br />
Ciò che deve attirare la nostra attenzione è stato evidenziato in grassetto: il Registrar e la data di creazione del dominio (Creation Date).<br />
Il <strong>Registrar</strong> rappresenta l'ISP/Mantainer che ha acquistato IP pubblici e che è autorizzato a usarli per pubblicare i siti. Recuperare questa informazione è molto importante e deve essere il nostro obiettivo! Non a caso è presentata come una delle prime informazioni!<br />
La data di registrazione del dominio (<strong>Creation Date</strong>) rappresenta la data in cui è stato registrato il sito. Questo è un altro dato molto importante! <strong>Se il sito ha meno di 3 anni di vita, diffidate!</strong> In questo caso il sito è particolarmente giovane... ALERT! DANGER!<br />
Per la cronaca, il <strong>Registrant Contact</strong> rappresenta CHI ha registrato il sito in questione. Potrebbe essere una persona fisica oppure un'azienda. Sopratutto tale informazione potrebbe essere falsa (si, si avete capito bene: falsa!). Quindi ci interessa poco...</p>
<p>Siamo quindi venuti in possesso del Registrar: BIZCN.COM.<br />
Benissimo!</p>
<h4>Confrontiamo gli indirizzi IP.</h4>
<p>Apriamo il prompt di ms-dos o il terminale di linux e <strong>troviamo gli IP</strong> di sales-digital e del suo Registrar bizcn.com.<br />
Per fare questo digitiamo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nslookup sales-digital.com</div></td></tr></tbody></table></div>
<p>e poi</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nslookup bizcn.com</div></td></tr></tbody></table></div>
<p>Alla fine verrà fuori qualcosa del genere:<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2009/12/nslookup1.jpeg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2009/12/nslookup1-300x207.jpg" alt="nslookup" title="nslookup" width="300" height="207" class="alignleft size-medium wp-image-429" /></a><br />
Dopo la scritta "Non-authoritative answer:"<br />
troviamo i 2 Address rispettivamente di sales-digital.com e di bizcn.com. Bene. Quella che segue non è una regola assoluta, ma non è la sede in cui approfondire l'argomento: sappiate che <strong>almeno le prime 2 sequenze di numeri da sinistra (e in genere le prime 3) devono essere uguali</strong>.<br />
In questo caso non è così! Infatti l'address di bizcn.com è 218.5.77.28 mentre quello del sito è 204.16.197.30. Fine dei vostri problemi. Lasciate perdere perché e per come. Se vi trovate in una situazione del tipo:</p>
<ul>
<li>prezzi troppo vantaggiosi per prodotti originali</li>
<li>sito troppo giovane</li>
<li>indirizzi IP (address) "sospetti"</li>
</ul>
<p> quasi certamente il sito è fraudolento! Non fatevi fregare! Lasciate i vostri soldi nel vostro portafoglio e cambiate sito!</p>
<p>Siete scettici?<br />
Facciamo la prova con il mio sito: www.alessandrostella.it.<br />
Andate sul prompt e scrivete</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nslookup alessandrostella.it</div></td></tr></tbody></table></div>
<p>il mio Registrar o Mantainer è <a href="http://unbit.it" target="_blanck">unbit.it</a> (ragazzi splendidi che saluto!). Quindi</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nslookup unbit.it</div></td></tr></tbody></table></div>
<p>Ecco il risultato:<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2009/12/nslookupAle.jpeg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2009/12/nslookupAle-300x207.jpg" alt="nslookup x alessandrostella.it" title="nslookup x alessandrostella.it" width="300" height="207" class="alignnone size-medium wp-image-437" /></a><br />
Le prime 3 sequenze di numeri sono identiche! Forse questo non è un sito fraudolento <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Anche se io... in verità... non vendo un bel niente <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>A questo punto sono sicuro che qualcuno vuole sapere <strong>come è mai possibile vendere prodotti online, non consegnarli e non correre quasi nessun rischio!</strong> Bene, vi accontento: è disarmante capire quanto sia semplice... <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Abbiamo appena scoperto che bizcn.com è un Registrar cinese... molto bene.<br />
Poiché basta pagare per aprire un sito, paghiamo bizcn.com per registrare per un anno il sito www.comprate-gente.com. In questo sito noi ci mettiamo a vendere di tutto, ci facciamo addirittura accreditar e i soldi tramite bonifico bancario internazionale (quindi apriamo un cc in Cina!) e abbiamo finito. Tutti i polli, vedendo il pagamento tramite bonifico, diranno: "figurati se mi imbrogliano! Col bonifico posso sempre rintracciarli..." <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Facciamo un acquisto. Paghiamo tramite bonifico e non ci arriva niente. Chiediamo spiegazioni tramite email e le nostre email restano senza risposta o, peggio, vengono rispedite indietro. Cosa facciamo? Andiamo dalla Polizia Postale. Il tizio di turno, ci guarderà in faccia, si metterà a ridere fragorosamente, ma per rispetto non ce lo farà vedere, e alzerà le spalle. Perché? Perché per andare a recuperare quei soldi o anche "semplicemente" denunciare quei "signori" servirebbe una <strong>rogatoria internazionale</strong>!!! E quale magistrato autorizza un gesto simile (per di più in Cina) per... diciamo... 500 euro?<br />
Conoscete benissimo la risposta: nessuno!<br />
Fine della storia.<br />
Questo è il mondo globalizzato!<br />
Non ci credete? Chiedete alla <a href="https://www.denunceviaweb.poliziadistato.it/polposta/" target="_blanck">Polizia Postale</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/sicurezza/2009/12/internet-e-commerce-e-come-salvarsi-culo-e-portafoglio-online/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Eclipse, il GDK e ubuntu 9.10</title>
		<link>http://www.alessandrostella.it/java/eclipse/2009/12/eclipse-il-gdk-e-ubuntu-9-10/</link>
		<comments>http://www.alessandrostella.it/java/eclipse/2009/12/eclipse-il-gdk-e-ubuntu-9-10/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 12:59:40 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gdk]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=387</guid>
		<description><![CDATA[Nuovo sistema, nuovi problemi Con l&#8217;uscita di Karmic Koala sono apparsi anche piccoli bug che però, in taluni casi, danno davvero fastidio! Stiamo parlando di tutti quei software che improvvisamente non accettano più i nostri click sui loro pulsanti. Uno di essi è il mio preferito: eclipse! Se quindi ci troviamo nella situazione in cui [...]]]></description>
			<content:encoded><![CDATA[<p>Nuovo sistema, nuovi problemi <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Con l&#8217;uscita di Karmic Koala sono apparsi anche piccoli bug che però, in taluni casi, danno davvero fastidio! Stiamo parlando di tutti quei <strong>software che improvvisamente non accettano più i nostri click sui loro pulsanti</strong>. Uno di essi è il mio preferito: <strong>eclipse</strong>!<br />
Se quindi ci troviamo nella situazione in cui premendo i pulsanti del nostro software preferito non succede assolutamente nulla, allora dobbiamo porre rimedio a manina.<br />
Il rimedio seguirà i seguenti passi:</p>
<ol>
<li>Creiamo un mini script</li>
<li>Diamo i permessi di esecuzione a tale script</li>
<li>Lanciamo lo script</li>
</ol>
<p>Posizioniamoci nella cartella in cui si trova l&#8217;eseguibile che presenta i problemi di cui sopra (in questo caso specifico eclipse). In tale cartella creiamo il file eclipse.sh e al suo interno scriviamo quanto segue:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#!/bin/sh<br />
export GDK_NATIVE_WINDOWS=true<br />
&amp;#60;path completo&amp;#62;/eclipse</div></td></tr></tbody></table></div>
<p>sostituendo ovviamente &#60;path completo&#62; con il proprio path.<br />
Poi da terminale diamo i permessi di esecuzione a tale file, digitando</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo chmod +x eclipse.sh</div></td></tr></tbody></table></div>
<p>Ora lanciamo lo script:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">./eclipse</div></td></tr></tbody></table></div>
<p>Dovrebbe adesso partire eclipse e i suoi pulsanti dovrebbero funzionare.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/eclipse/2009/12/eclipse-il-gdk-e-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java, l&#8217;ereditarietà e i reference</title>
		<link>http://www.alessandrostella.it/java/2009/12/java-lereditarieta-e-i-reference/</link>
		<comments>http://www.alessandrostella.it/java/2009/12/java-lereditarieta-e-i-reference/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 23:36:30 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[OO Programming]]></category>
		<category><![CDATA[ereditarietà]]></category>
		<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=368</guid>
		<description><![CDATA[Ma abbiamo davvero capito come vengono gestiti i reference in java? Piccolo snippet per metterci alla prova. Ammettiamo di avere 2 classi ClasseA ClasseB e che ClasseB sia una sottoclasse di ClasseA ossia &#8220;ClasseB extends ClasseA&#8221;. Ora, supponendo che le classi si trovino tutte nello stesso package, scriviamo questo codice nel nostro main method: 12345678ClasseA [...]]]></description>
			<content:encoded><![CDATA[<p>Ma abbiamo davvero capito come vengono gestiti i reference in java?<br />
Piccolo snippet per metterci alla prova.<br />
Ammettiamo di avere 2 classi</p>
<ul>
<li>ClasseA</li>
<li>ClasseB</li>
</ul>
<p>e che ClasseB sia una sottoclasse di ClasseA ossia &#8220;ClasseB extends ClasseA&#8221;.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2009/12/screenshot_0171.png" alt="ClassB extends ClassA" title="ClassB extends ClassA" width="137" height="153" class="alignnone size-full wp-image-377" /><br />
Ora, supponendo che le classi si trovino tutte nello stesso package, scriviamo questo codice nel nostro main method:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ClasseA a<span style="color: #339933;">;</span><br />
ClasseB b<span style="color: #339933;">;</span><br />
<br />
a <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClasseA<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
b <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClasseB<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
a <span style="color: #339933;">=</span> b<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//(1)</span><br />
b <span style="color: #339933;">=</span> a<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//(2)</span></div></td></tr></tbody></table></div>
<p>Problemi?<br />
Il codice scritto funziona? Anzi, compila?<br />
La risposta è, ovviamente, no <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  e il problema è nell&#8217;ultima riga (2): b = a;<br />
Perché?<br />
Eppure sembra tutto ok!<br />
In (1) abbiamo assegnato b ad a, quindi a = b. Come è mai possibile che scrivendo poi b = a la cosa non sia corretta?<br />
<strong>La spiegazione è nel tipo di dichiarazione iniziale dei reference a e b.</strong><br />
ClasseA è una superclasse di ClasseB, quindi scrivere a = b è possibile per automatico widening (a è &#8220;più grande&#8221; di b). La cosa invece non è possibile in senso inverso perché b è &#8220;più piccolo&#8221; di a e non può quindi &#8220;contenerlo&#8221;.<br />
L&#8217;osservazione più comune a questo punto è:<br />
ma se in (1) abbiamo scritto a = b significa che a e b sono diventati uguali! Quindi come è mai possibile che b = a dia problemi? <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Già, come è mai possibile?<br />
Leggete il post su <a href="http://www.alessandrostella.it/java/2009/10/java-i-reference-e-la-programmazione-a-oggetti/">java i reference e la RAM</a> e forse ne capirete di più&#8230; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2009/12/java-lereditarieta-e-i-reference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet explorer 5, 6, 7 e 8 contemporaneamente</title>
		<link>http://www.alessandrostella.it/windows/2009/11/internet-explorer-5-6-7-e-8-contemporaneamente/</link>
		<comments>http://www.alessandrostella.it/windows/2009/11/internet-explorer-5-6-7-e-8-contemporaneamente/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 17:03:09 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=338</guid>
		<description><![CDATA[In occasione del restiling di questo sito (a proposito, che ne dite?), ho avuto la necessità di testare il risultato del codice html e css sui diversi browser&#8230; Se non è difficile testare IEx, firefox, Opera, Safari, Chrome e altri, diventa molto più difficile testare il codice su più di un Internet Explorer contemporaneamente. Per [...]]]></description>
			<content:encoded><![CDATA[<p>In occasione del restiling di questo sito (a proposito, che ne dite?), ho avuto la necessità di testare il risultato del codice html e css sui diversi browser&#8230; Se non è difficile testare IEx, firefox, Opera, Safari, Chrome e altri, diventa molto più difficile <strong>testare il codice su più di un Internet Explorer contemporaneamente</strong>. Per fortuna ci sono almeno 2 soluzioni.</p>
<ul>
<li>Applicazione stand-alone da installare sul proprio pc</li>
<li>Affidarsi alla virtualizzazione su altri server su cui visualizzare il risultato dei propri sforzi.</li>
</ul>
<p>Nel primo caso andiamo qui:<br />
<a href="http://www.my-debugbar.com/wiki/IETester/HomePage" target="_blanck">http://www.my-debugbar.com/wiki/IETester/HomePage</a><br />
scarichiamo l&#8217;applicazione e installiamola. Ha pure la localizzazione in italiano!<br />
Ad oggi non è particolarmente stabile, ma fa quello che deve fare senza tirare troppi calci.</p>
<p>Nel secondo caso invece andiamo su questo sito:<br />
<a href="http://spoon.net/browsers/" target="_blanck">http://spoon.net/browsers/</a><br />
e seguiamo le istruzioni (in inglese).</p>
<p>Così facendo, ad esempio, ho potuto osservare che il codice html+css che ho scritto per questo sito NON era compatibile (proprio per niente) con IE6 <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  Purtroppo quasi il 5% dei miei visitatori si presentano con questo browser e quindi, pur sapendo che i miei errori erano minimi se confrontati con la poca aderenza di IE6 agli standard <a href="http://www.w3.org/" target="_blanck">W3C</a>, sono corso ai ripari con un bel po&#8217; do codice condizionale.<br />
Prima che io apportassi le modiche sopra citate però, questo sito si presentava ai possessori di IE6 come mostrato dalla seguente immagine.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2009/11/IETester.jpg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2009/11/IETester-300x265.jpg" alt="IETester con IE6" title="IETester con IE6" width="300" height="265" class="alignnone size-medium wp-image-344" /></a></p>
<p>Se non avessi avuto un sistema per visualizzare sul mio pc quello che vedono i possessori di IE6, non avrei mai potuto risolvere tali problemi&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2009/11/internet-explorer-5-6-7-e-8-contemporaneamente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu e le parole sottolineate in rosso</title>
		<link>http://www.alessandrostella.it/linux-ubuntu/2009/11/ubuntu-e-le-parole-sottolineate-in-rosso/</link>
		<comments>http://www.alessandrostella.it/linux-ubuntu/2009/11/ubuntu-e-le-parole-sottolineate-in-rosso/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 13:27:16 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[localizzazione]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=323</guid>
		<description><![CDATA[Da quando ho installato il mio ubuntu 9.10 ho sempre avuto un problema: tutte le parole scritte in italiano vengono sottolineate in rosso, come fossero sbagliate. Ho cercato la soluzione online, ma non ho trovato nulla di specifico: c&#8217;è chi propone di installare un plugin per firefox (?), chi ti fa un sacco di domande [...]]]></description>
			<content:encoded><![CDATA[<p>Da quando ho installato il mio ubuntu 9.10 ho sempre avuto un problema:<strong> tutte le parole scritte in italiano vengono sottolineate in rosso</strong>, come fossero sbagliate. Ho cercato la soluzione online, ma non ho trovato nulla di specifico: c&#8217;è chi propone di installare un plugin per firefox (?), chi ti fa un sacco di domande senza poi darti un soluzione, chi dice che è un bug (addirittura!)&#8230; Insomma, ho dovuto cercare la soluzione da solo. E l&#8217;ho trovata. Una stupidata.<br />
Dobbiamo fare alcuni controlli preliminari.<br />
Apriamo il Terminale e digitiamo</p>
<div class="codice">
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">locale</div></td></tr></tbody></table></div>
</div>
<p>dovremmo ottenere qualcosa di simile a questo:</p>
<div class="codice">
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">alessandro@dell1720:~$ locale<br />
LANG=it_IT.UTF-8<br />
LC_CTYPE=&quot;it_IT.UTF-8&quot;<br />
LC_NUMERIC=&quot;it_IT.UTF-8&quot;<br />
LC_TIME=&quot;it_IT.UTF-8&quot;<br />
LC_COLLATE=&quot;it_IT.UTF-8&quot;<br />
LC_MONETARY=&quot;it_IT.UTF-8&quot;<br />
LC_MESSAGES=&quot;it_IT.UTF-8&quot;<br />
LC_PAPER=&quot;it_IT.UTF-8&quot;<br />
LC_NAME=&quot;it_IT.UTF-8&quot;<br />
LC_ADDRESS=&quot;it_IT.UTF-8&quot;<br />
LC_TELEPHONE=&quot;it_IT.UTF-8&quot;<br />
LC_MEASUREMENT=&quot;it_IT.UTF-8&quot;<br />
LC_IDENTIFICATION=&quot;it_IT.UTF-8&quot;<br />
LC_ALL=</div></td></tr></tbody></table></div>
</div>
<p>Adesso dal menù superiore di ubuntu, scegliamo &#8220;Sistema/Amministrazione/Supporto lingue&#8221;.<br />
Dovremmo vedere qualcosa del genere:<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2009/11/supportoLingue.jpeg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2009/11/supportoLingue-300x223.jpg" alt="Screenshot del supporto lingue" title="Screenshot del supporto lingue" width="300" height="223" class="alignnone size-medium wp-image-324" /></a></p>
<p>Se tutto è settato come sopra descritto, ma le scritte rosse persistono, procediamo così:<br />
Clicchiamo col tasto destro del mouse su un termine sottolineato in rosso.  Dal menù a tendina scegliamo &#8220;Spell-checker Options&#8221;. Sono sicuro che troveremo selezionato l&#8217;inglese o altra lingua. Scegliamo quindi &#8220;Language Settings&#8230;&#8221; e aggiungiamo l&#8217;italiano. Il risultato finale dovrebbe somigliare a questo:<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2009/11/FontsLanguages.jpeg" rel="lytebox" ><img src="http://www.alessandrostella.it/wp-content/uploads/2009/11/FontsLanguages-300x222.jpg" alt="Schermata Fonts and Languages" title="Schermata Fonts and Languages" width="300" height="222" class="alignnone size-medium wp-image-325" /></a><br />
Bene. Adesso proviamo a scrivere un testo in italiano. Sparite le sottolineature rosse?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/linux-ubuntu/2009/11/ubuntu-e-le-parole-sottolineate-in-rosso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installare LAMP (Linux, Apache, MySql, Php) in ubuntu 9.10 &#8211; Per principianti</title>
		<link>http://www.alessandrostella.it/linux-ubuntu/2009/11/installare-lamp-linux-apache-mysql-php-in-ubuntu-9-10-per-principianti/</link>
		<comments>http://www.alessandrostella.it/linux-ubuntu/2009/11/installare-lamp-linux-apache-mysql-php-in-ubuntu-9-10-per-principianti/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 17:03:45 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=284</guid>
		<description><![CDATA[Abbiamo installato ubuntu 9.10 e vogliamo ora predisporre un sistema LAMP. Con ubuntu 9.10 è tutto molto facile. Installiamo APACHE 2 Dal menù superiore scegliamo &#8220;Sistema/Amministrazione/Gestore Pacchetti&#8221; (partirà Synaptic) Nel campo &#8220;Ricerca veloce&#8221; scriviamo &#8220;apache&#8221; Spuntiamo la casella &#8220;apache2&#8243; e, dal menù a tendina che segue, scegliamo &#8220;Installa&#8221; Poi dal menù in alto scegliamo &#8220;Applica&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Abbiamo installato ubuntu 9.10 e vogliamo ora predisporre un <strong>sistema LAMP</strong>.<br />
Con ubuntu 9.10 è tutto molto facile.</p>
<p><strong>Installiamo APACHE 2</strong></p>
<ol>
<li>Dal menù superiore scegliamo &#8220;Sistema/Amministrazione/Gestore Pacchetti&#8221; (partirà Synaptic)</li>
<li>Nel campo &#8220;Ricerca veloce&#8221; scriviamo &#8220;apache&#8221;</li>
<li>Spuntiamo la casella &#8220;apache2&#8243; e, dal menù a tendina che segue, scegliamo &#8220;Installa&#8221;</li>
<li>Poi dal menù in alto scegliamo &#8220;Applica&#8221;</li>
<li>Appare una finestra che ci avvisa che è necessario installare altri pacchetti: scegliamo &#8220;Seleziona&#8221;</li>
<li>Appare la richiesta di conferma; scegliamo &#8220;Applica&#8221;</li>
</ol>
<p><a href="http://www.alessandrostella.it/wp-content/uploads/2009/11/apache2.jpeg" rel="lytebox" ><img class="alignnone size-medium wp-image-286" title="Synaptic - Installazione apache2" src="http://www.alessandrostella.it/wp-content/uploads/2009/11/apache2-300x210.jpg" alt="Synaptic - Installazione apache2" width="300" height="210" /></a></p>
<p>Verifichiamo che tutto sia andato per il verso giusto.<br />
Apriamo un browser e nella barra degli indirizzi digitiamo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http://localhost</div></td></tr></tbody></table></div>
<p>Dovrebbe apparire una pagina con scritto</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;strong&gt;It works!&lt;/strong&gt;<br />
This is the default web page for this server.<br />
The web server software is running but no content has been added, yet.</div></td></tr></tbody></table></div>
<p>Bene.</p>
<p><strong>Installiamo PHP5.</strong></p>
<p>Tutto come prima <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<ol>
<li>Apriamo Synaptic.</li>
<li>Nel campo &#8220;Ricerca veloce&#8221; scriviamo &#8220;php&#8221;</li>
<li>Spuntiamo la casella &#8220;php5&#8243; e, dal menù a tendina che segue, scegliamo &#8220;Installa&#8221;</li>
<li>Poi dal menù in alto scegliamo &#8220;Applica&#8221;</li>
<li>Appare una finestra che ci avvisa che è necessario installare altri pacchetti: scegliamo &#8220;Seleziona&#8221;</li>
<li>Appare la richiesta di conferma; scegliamo &#8220;Applica&#8221;</li>
</ol>
<p><a href="http://www.alessandrostella.it/wp-content/uploads/2009/11/php5.jpeg" rel="lytebox"><img class="alignnone size-medium wp-image-291" title="Synaptic - Installazione php5" src="http://www.alessandrostella.it/wp-content/uploads/2009/11/php5-300x210.jpg" alt="Synaptic - Installazione php5" width="300" height="210" /></a></p>
<p>Verifichiamo che tutto sia andato per il verso giusto.</p>
<ol>
<li>Apriamo il termiale e digitiamo:
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo gedit /var/www/testphp.php</div></td></tr></tbody></table></div>
<p>Questo aprirà un file chiamato phptest.php</li>
<li>Nel file appena aperto incolliamo il seguente codice:
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt; ?php phpinfo(); ?&gt;</div></td></tr></tbody></table></div>
</li>
<li>Salviamo chiudiamo il file</li>
<li>Per far si che PHP funzioni e sia compatibile con Apache dovremo riavviarlo.<br />
Per farlo digitiamo quanto segue, nel terminale:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo /etc/init.d/apache2 restart</div></td></tr></tbody></table></div>
</li>
<li>Ora apriamo il browser e digitiamo quanto segue nella barra degli indirizzi:
<p>http://localhost/testphp.php</li>
</ol>
<p>Bene.</p>
<p><span id="more-284"></span><br />
<strong>Installiamo MYSQL 5.1</strong><br />
Come sopra!<br />
Ripetiamo i soliti 6 punti visti per gli altri applicativi. In questo caso però nel campo &#8220;Ricerca veloce&#8221; scriviamo ESATTAMENTE &#8220;mysql-server&#8221; (senza i doppi apici).<br />
Avviata l&#8217;installazione verrà richietsa la password di root. Scegliamone una e procediamo.</p>
<p>Con lo stesso procedimento installiamo <strong>phpMyAmin</strong> (soliti 6 punti già visiti). Una volta installato lo troveremo in http://localhost/phpmyadmin/. Ma facciamo un passo per volta.<br />
Durante l&#8217;installazione verrà richiesto di configurare un server per phpmyadmin (noi ovviamente sceglieremo apache2):<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2009/11/myAdminConf01.jpeg" rel="lytebox"><img class="alignnone size-medium wp-image-296" title="Scegliamo il server per PHPmyAdmin" src="http://www.alessandrostella.it/wp-content/uploads/2009/11/myAdminConf01-300x210.jpg" alt="Scegliamo il server per PHPmyAdmin" width="300" height="210" /></a></p>
<p>e di lanciare l&#8217;auto configuratore. Lanciamolo selezionando la casella come in figura:<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2009/11/myAdminConf02.jpeg" rel="lytebox"><img class="alignnone size-medium wp-image-297" title="PHPmyAdmin" src="http://www.alessandrostella.it/wp-content/uploads/2009/11/myAdminConf02-300x210.jpg" alt="PHPmyAdmin" width="300" height="210" /></a></p>
<p>Poi ci verrà richiesta la password del DB e una nuova password per l&#8217;applicazione phpmyadmin; scegliamone una e terminiamo.</p>
<p>Per sapere se tutto è andato bene apriamo un browser e digitiamo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">http://localhost/phpmyadmin/</div></td></tr></tbody></table></div>
<p>Dovrebbe comparire il login di phpMyAdmin!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/linux-ubuntu/2009/11/installare-lamp-linux-apache-mysql-php-in-ubuntu-9-10-per-principianti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java e le asserzioni</title>
		<link>http://www.alessandrostella.it/java/2009/11/java-e-le-asserzioni/</link>
		<comments>http://www.alessandrostella.it/java/2009/11/java-e-le-asserzioni/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 18:24:57 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[assert]]></category>
		<category><![CDATA[assertion]]></category>
		<category><![CDATA[asserzioni]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=270</guid>
		<description><![CDATA[Molti le nominano, pochi le usano, meno le conoscono. Eppure sono moderatamente utili e molto semplici da usare&#8230; In java una 1assert è un&#8217;affermazione che il programmatore fa in un certo punto del codice da lui scritto.. Il compilatore si occupa di verificare che tale affermazione sia corretta, in caso contrario lancia un&#8217;eccezione di tipo [...]]]></description>
			<content:encoded><![CDATA[<p>Molti le nominano, pochi le usano, meno le conoscono.<br />
Eppure sono moderatamente utili e molto semplici da usare&#8230;<br />
<strong>In java una</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">assert</div></td></tr></tbody></table></div>
<p>è un&#8217;affermazione che il programmatore fa in un certo punto del codice da lui scritto.</strong>. Il compilatore si occupa di verificare che tale affermazione sia corretta, in caso contrario lancia un&#8217;eccezione di tipo unchecked. E&#8217; decisamente opportuno disabilitarle in fase di produzione del sistema, mentre possono essere utili in fase di sviluppo e test.</p>
<p><strong>Come si dichiarano?</strong><br />
In 2 modi diversi:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">assert &lt;boolean expression&gt;;<br />
assert &lt;boolean expression&gt;: &lt;message expression&gt;;</div></td></tr></tbody></table></div>
<p>Se ad esempio, in una nostra classe stiamo calcolando la velocità come spazio/tempo, potremmo scrivere:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">assert spazio &gt; 0;<br />
assert tempo &gt; 0: &quot;Il tempo non è un numero positivo!&quot; + tempo;</div></td></tr></tbody></table></div>
<p><strong>Come si abilitano?</strong><br />
Per default le asserzioni sono disabilitate.<br />
Bisogna quindi esplicitamente abilitarle. Ecco come fare:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&gt;java -ea &lt;classe da eseguire&gt;&lt;/classe&gt;</div></td></tr></tbody></table></div>
<p>In questo modo abilitiamo l&#8217;uso delle asserzioni nella nostra classe e in tutte le sue dipendenze, ma non nelle classi di sistema (quelle caricate direttamente dalla JVM). Per abilitare anche quelle ci tocca scrivere:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&gt;java -esa</div></td></tr></tbody></table></div>
<p>L&#8217;errore più clamoroso che si possa commettere nell&#8217;uso di una</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">assert</div></td></tr></tbody></table></div>
<p>è quello di confonderla con la gestione delle eccezzioni!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2009/11/java-e-le-asserzioni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java e il passaggio di parametri</title>
		<link>http://www.alessandrostella.it/java/2009/11/java-e-il-passaggio-di-parametri/</link>
		<comments>http://www.alessandrostella.it/java/2009/11/java-e-il-passaggio-di-parametri/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 16:16:08 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[parametri attuali]]></category>
		<category><![CDATA[parametri formali]]></category>
		<category><![CDATA[passaggio di parametri]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=193</guid>
		<description><![CDATA[Il sistema utilizzato da java per passare parametri ai metodi è molto semplice, eppure nella mia breve storia di programmatore java in molti mi hanno chiesto delucidazioni su questo argomento. In base alla mia esperienza posso dire che avere problemi nel capire come funziona il passaggio dei parametri in java significa avere problemi con reference [...]]]></description>
			<content:encoded><![CDATA[<p>Il sistema utilizzato da java per passare parametri ai metodi è molto semplice, eppure nella mia breve storia di programmatore java in molti mi hanno chiesto delucidazioni su questo argomento. In base alla mia esperienza posso dire che avere problemi nel capire come funziona il passaggio dei parametri in java significa avere problemi con <a href="http://www.alessandrostella.it/java/2009/10/java-i-reference-e-la-programmazione-a-oggetti/">reference</a> e <a href="http://www.alessandrostella.it/java/2009/11/java-e-i-dati-primitivi-e-la-ram/">dati primitivi</a>.<br />
Quindi, per prima cosa, vi rimando alla lettura di tali post!</p>
<p>Se avete chiara la differenza tra un reference e un dato primitivo, diventa tutto facile.<br />
<strong>In java i parametri vengono sempre passati per valore e sempre duplicati con copie locali al metodo.</strong><br />
Dovrebbe però essere chiaro che duplicare una variabile di tipo primitivo è diverso dal duplicare una varibile di tipo reference! <strong>Duplicare un reference significa avere 2 reference che puntano allo stesso oggetto!</strong> Ecco perché quando in un metodo modifico il valore di un parametro di tipo primitivo esso non modifica il valore del parametro fuori dal metodo, mentre quando uso un parametro di tipo reference ogni modifica apportata all&#8217;oggetto puntato da tale reference viene riflessa sull&#8217;oggetto puntato dal parametro esterno: entrambi i reference (essendo uno la copia dell&#8217;altro) puntano lo stesso oggetto!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2009/11/java-e-il-passaggio-di-parametri/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Grub 2 e il multiboot con Windows XP &#8211; Vista &#8211; 7</title>
		<link>http://www.alessandrostella.it/windows/2009/11/grub-2/</link>
		<comments>http://www.alessandrostella.it/windows/2009/11/grub-2/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 21:01:54 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[boot loader]]></category>
		<category><![CDATA[Grub 2]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[multiboot]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows vista]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=231</guid>
		<description><![CDATA[Abbiamo detto che il comando 1update-grub2 si occupa di creare il file /boot/grub/grub.cfg. Per ottenere questo risultato esegue, in sequenza, gli script presenti nei file che si trovano nella cartella /etc/grub.d/. Purtroppo non c&#8217;è ancora una procedura automatica per l&#8217;eliminazione e/o la modifica delle voci che ci vengono &#8220;imposte&#8221; da grub2. Tuttavia con un po&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Abbiamo detto che il comando</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">update-grub2</div></td></tr></tbody></table></div>
<p>si occupa di creare il file /boot/grub/grub.cfg.<br />
Per ottenere questo risultato esegue, in sequenza, gli script presenti nei file che si trovano nella cartella /etc/grub.d/.<br />
Purtroppo non c&#8217;è ancora una procedura automatica per l&#8217;eliminazione e/o la modifica delle voci che ci vengono &#8220;imposte&#8221; da grub2. Tuttavia con un po&#8217; di pazienza possiamo &#8220;usarlo&#8221; per farci aiutare a ingannarlo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Andiamo!<br />
Apriamo il file /boot/grub/grub.cfg. Ci servirà!<br />
E&#8217; in sola lettura e noi rispetteremo il volere del suo creatore: non lo modificheremo mai a manina. Però ora cerchiamo di capire come viene creato.<br />
Quando viene eseguito il comando <strong>update-grub2</strong>, viene letto sia il file /etc/default/grub sia i file presenti in /etc/grub.d. In questo modo vengono impostati i parametri di visualizzazione del menù di <strong>Grub2</strong> e viene eseguita una ricerca per la presenza di kernel Linux, altri sistemi operativi ed elementi presenti negli script creati dall&#8217;utente in /etc/grub.d. Tutte queste informazioni finiscono poi nel file grub.cfg.<br />
In questa tabella vengono descritti i principali file presenti in /etc/grub.d/.</p>
<table style="width:100%; border:solid">
<tbody>
<tr>
<td style="background-color:#1111FF;text-align: center;width: 15%;"><strong>File</strong></td>
<td style="background-color:#1111FF;text-align: center;"><strong>Significato</strong></td>
</tr>
<tr>
<td>00_header</td>
<td>Carica le impostazioni da /etc/default/grub, compresa la presentazione visiva, il conto alla rovescia e le opzioni del terminale</td>
</tr>
<tr>
<td>05_debian_them</td>
<td>Imposta lo sfondo, il colore del testo e i temi</td>
</tr>
<tr>
<td>10_hurd</td>
<td>Localizza eventuali kernel Hurd</td>
</tr>
<tr>
<td>10_linux</td>
<td>Localizza i kernel basati sull&#8217;ID del distributore determinato dal risultato del comando <strong>lsb_release -is</strong></td>
</tr>
<tr>
<td>20_memtest86+</td>
<td>Se il file /boot/memtest86+.bin esiste, viene inclusa una voce per <strong>memtest86+</strong></td>
</tr>
<tr>
<td>30_os-prober</td>
<td>Va alla ricerca di altri sistemi operativi e li include nel menù</td>
</tr>
<tr>
<td>40_custom</td>
<td>Rappresenta un modello per aggiungere voci personalizzate al menù</td>
</tr>
</tbody>
</table>
<p>Il nome del file determina l&#8217;ordine nel menù perché i file vengono letti ed eseguiti in ordine alfabetico. Le voci che iniziano con 30 verranno posizionate prima di quelle che iniziano con 40 e così via.<br />
<span id="more-231"></span><br />
Bene.<br />
Vediamo ora come possiamo apportare le 2 modifiche più comuni:</p>
<ol>
<li>modificare il testo di una voce del menù</li>
<li>cancellare una voce del menù</li>
</ol>
<h4>1. Modificare il testo di una voce di menù</h4>
<p>Se dobbiamo modificare il testo della voce di menù che si riferisce a Linux dobbiamo intervenire sul file <strong>/etc/grub.d/10_linux</strong>. Se invece trattasi di voce Windows o altro OS dobbiamo intervenire sul file /etc/grub.d/30_os-prober.<br />
Modifchiamo la voce di menù &#8220;Ubuntu, Linux 2.6.31-14-generic&#8221;, davvero antipatica, e trasformiamola in una più amichevole &#8220;Ubuntu 9.10 &#8211; Karmic Kaola&#8221;.<br />
Apriamo il terminale e digitiamo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo gedit /etc/grub.d/10_linux</div></td></tr></tbody></table></div>
<p>cerchiamo la stringa</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">menuentry &quot;$1&quot; {</div></td></tr></tbody></table></div>
<p>e sostituiamo $1 con Ubuntu 9.10 &#8211; Karmic Kaola, ottenendo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">menuentry &quot;Ubuntu 9.10 - Karmic Kaola&quot; {</div></td></tr></tbody></table></div>
<p>Salviamo il file.<br />
Poi da terminale:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo update-grub2</div></td></tr></tbody></table></div>
<p>Fatto.<br />
Approfondimento su questo punto.<br />
In realtà, le voci di menù che riguardano Linux vengono create dalla funzione <strong><em>linux_entry()</em></strong> che si trova sempre nel file <strong><em>10_linux</em></strong>. Tale funzione crea una voce per ogni versione di linux presente sul nostro HD. Questo significa che, procedendo come indicato sopra, i vari aggiornamenti di ubuntu che saranno installati verranno indicati da una nuova riga nel menù di grub, ma che, tutte queste righe, avranno lo stesso identico testo: Ubuntu 9.10 &#8211; Karmic Koala.<br />
Per poter distinguere le varie voci si dovrebbe intervenire sulla funzione citata, ma poi le cose si complicherebbero&#8230;</p>
<p>Il file che si occupa delle altre voci, per OS non Linux, è <strong>/etc/grub.d/30_os-prober</strong> e qui so&#8217; dolori! In teoria dovremmo modificare lo script presente nel file, come abbiamo fatto per la voce di Linux, ma per quanto mi riguarda, preferisco procedere come segue:</p>
<ol>
<li>spostare il file /etc/grub.d/30_os-prober in una cartella di nostro gradimento, eliminandolo quindi da /etc/grub.d/</li>
<li>editare in scrittura (quindi &#8220;sudo&#8221;) il file /etc/grub.d/40_custom</li>
<li>copiare in coda a questo file il pezzo del file /boot/default/grub.cfg che ci interessa apportando semplici modifiche testuali. Il pezzo del file /boot/default/grub.cfg che ci interessa è delimitato dalla stringa ### BEGIN /etc/grub.d/30_os-prober ###</li>
<li>salvare /etc/grub.d/40_custom</li>
<li>updatare.</li>
</ol>
<p>In questo modo, grub 2 non trovando il file 30_os-prober salta la costruzione delle voci degli altri OS che però saranno inserite a nostro piacimento perché verrà trovato il file 40_custom con il testo tutto pronto.</p>
<h4>2. Cancellare una voce di menù</h4>
<p>Beh, lo sappiamo già fare. Basta seguire quanto già fatto alla fine del punto precedente&#8230;<br />
Difficile?<br />
Dai, proviamoci!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/windows/2009/11/grub-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installare KDE su Ubuntu 9.10</title>
		<link>http://www.alessandrostella.it/linux-ubuntu/2009/11/ubuntu-9-10-e-il-kde/</link>
		<comments>http://www.alessandrostella.it/linux-ubuntu/2009/11/ubuntu-9-10-e-il-kde/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 18:35:27 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ubuntu 9.10]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=224</guid>
		<description><![CDATA[Per utilizzare l&#8217;interfaccia KDE su ubuntu 9.10 bisgona procedere come segue. Aprire Sistema/Amministrazione/Gestore Pacchetti (questo link lancia Synaptic) Aperto Synaptic, andate su Impostazioni/Repository poi andate nella tabella &#8220;Altro software&#8221;, premere sul pusante &#8220;Aggiungi&#8221; e aggiungete il seguente link deb http://ppa.launchpad.net/kubuntu-ppa/backports/ubuntu karmic main Tornate sulla pagina principale di Synaptic e premete il tasto &#8220;Aggiorna&#8221; Andate sul [...]]]></description>
			<content:encoded><![CDATA[<p>Per utilizzare l&#8217;interfaccia <strong>KDE</strong> su <strong>ubuntu 9.10</strong> bisgona procedere come segue.</p>
<ol>
<li>Aprire Sistema/Amministrazione/Gestore Pacchetti (questo link lancia Synaptic)</li>
<li>Aperto Synaptic, andate su Impostazioni/Repository poi andate nella tabella &#8220;Altro software&#8221;, premere sul pusante &#8220;Aggiungi&#8221; e aggiungete il seguente link<br />
<em>deb http://ppa.launchpad.net/kubuntu-ppa/backports/ubuntu karmic main</em></li>
<li>Tornate sulla pagina principale di Synaptic e premete il tasto &#8220;Aggiorna&#8221;</li>
<li>Andate sul terminale e scrivete (nell&#8217;ordine proposto):<br />
gpg &#8211;keyserver keyserver.ubuntu.com &#8211;recv 2836CB0A8AC93F7A<br />
gpg &#8211;export &#8211;armor 2836CB0A8AC93F7A | sudo apt-key add -<br />
sudo apt-get update
</li>
<li>Ritornate su Synaptic e cercate (nell&#8217;apposta casella di testo) il pacchetto &#8220;<strong>kubuntu-desktop</strong>&#8220;</li>
<li>Selezionate il pacchetto e procedete all&#8217;installazione (la cosa può durare anche qualche ora a causa dell&#8217;intenso traffico sul sito di download &#8211; oggi il ping medio è 446ms)</li>
<li>Riavviate Ubuntu</li>
</ol>
<p>Al riavvio di ubuntu nella cesella &#8220;sessione&#8221; oltre a Gnome comparirà anche KDE.<br />
Scegliete quello che volete ed effettuate il login.</p>
<p>Detto questo però, non posso non dire che <strong>installare il KDE su ubuntu non è una buona idea</strong>.<br />
Sebbene da più parti si dica che non ci sono problemi, la verità è un&#8217;altra: avremo dei problemi! Ad esempio con il gestore aggiornamenti che spesso va in confusione e manda in tilt l&#8217;interfaccia grafica di ubuntu. Insomma, se proprio volete provare il KDE, insatallate direttamente kubuntu!</p>
<p>Se poi, una volta installato e provato, lo si volesse rimuovere&#8230; beh&#8230; auguri! <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Sarebbe opportuno lanciare questo breve comandino:</p>
<div class="terminal">sudo apt-get remove akonadi-server akregator amarok amarok-common amarok-utils apport-kde apturl-kde ark cdrdao dolphin dragonplayer exiv2 foomatic-db-gutenprint gdebi-kde gnupg-agent gtk2-engines-qtcurve gwenview hpijs-ppds ibus-qt4 ijsgutenprint imagemagick install-package jockey-kde k3b k3b-data kaddressbook kamera kate kcm-gtk kde-icons-oxygen kde-style-qtcurve kde-window-manager kde-zeroconf kdebase-bin kdebase-data kdebase-plasma kdebase-runtime kdebase-runtime-bin-kde4 kdebase-runtime-data kdebase-runtime-data-common kdebase-workspace-bin kdebase-workspace-data kdebase-workspace-kgreet-plugins kdebase-workspace-libs4+5 kdebluetooth kdegraphics-strigi-plugins kdelibs-bin kdelibs5 kdelibs5-data kdemultimedia-kio-plugins kdepasswd kdepim-groupware kdepim-kresources kdepim-runtime kdepim-runtime-data kdepim-runtime-libs4 kdepim-strigi-plugins kdepim-wizards kdepimlibs-data kdepimlibs5 kdesudo kdm kfind khelpcenter4 kipi-plugins klipper kmag kmail kmix kmousetool knotes konq-plugins konq-plugins-l10n konqueror konqueror-nsplugins konqueror-plugin-searchbar konqueror-plugins konsole kontact kopete korganizer kpackagekit kppp krdc krfb ksnapshot ksysguard ksysguardd ksystemlog ktimetracker ktorrent ktorrent-data kubuntu-artwork-usplash kubuntu-default-settings kubuntu-desktop kubuntu-docs kubuntu-firefox-installer kubuntu-konqueror-shortcuts kvkbd kwalletmanager kwin-style-qtcurve language-selector-qt libakonadiprivate1 libao2 libaudio2 libboost-program-options1.38.0 libclucene0ldbl libepub0 libexiv2-5 libfftw3-3 libflac++6 libindicate-qt0 libjpeg-progs libk3b6 libkabcommon4 libkcddb4 libkdcraw7 libkdecorations4 libkdepim4 libkexiv2-7 libkipi6 libkleo4 libknotificationitem1 libkonq5 libkonq5-templates libkonqsidebarplugin4 libkontactinterfaces4 libkopete4 libkorundum4-ruby1.8 libkpgp4 libksane0 libksieve4 libkwineffects1 liblancelot0 liblastfm0 liblzma0 libmimelib4 libmodplug0c2 libmpcdec3 libmsn0.1 libokularcore1 libotr2 libpackagekit-glib11 libpackagekit-qt11 libplasma3 libpolkit-dbus2 libpolkit-grant2 libpolkit-qt0 libpolkit2 libpoppler-qt4-3 libqca2 libqca2-plugin-ossl libqimageblitz4 libqscintilla2-5 libqt4-assistant libqt4-dbus libqt4-designer libqt4-help libqt4-network libqt4-opengl libqt4-phonon libqt4-qt3support libqt4-ruby1.8 libqt4-script libqt4-scripttools libqt4-sql libqt4-sql-mysql libqt4-sql-sqlite libqt4-svg libqt4-test libqt4-webkit libqt4-xml libqt4-xmlpatterns libqtcore4 libqtgui4 libqtscript4-core libqtscript4-gui libqtscript4-network libqtscript4-sql libqtscript4-uitools libqtscript4-xml libruby1.8 libscim8c2a libsmokekde4-2 libsmokeqt4-2 libsoprano4 libstreamanalyzer0 libstreams0 libstrigiqtdbusclient0 libtag-extras1 libtidy-0.99-0 libvncserver0 libxcb-shape0 libxcb-shm0 libxcb-xv0 libxine1 libxine1-bin libxine1-console libxine1-misc-plugins libxine1-x libzip1 mysql-server-core-5.1 okular okular-extra-backends openoffice.org-kde openoffice.org-style-oxygen oxygen-cursor-theme packagekit packagekit-backend-apt phonon-backend-xine pinentry-gtk2 pinentry-qt4 plasma-dataengines-addons plasma-dataengines-workspace plasma-scriptengine-python plasma-widget-facebook plasma-widget-folderview plasma-widget-googlecalendar plasma-widget-indicatordisplay plasma-widget-kimpanel plasma-widget-kubuntu-qa-feedback plasma-widget-lancelot plasma-widget-networkmanagement plasma-widget-quickaccess plasma-widgets-addons plasma-widgets-workspace policykit printer-applet python-kde4 python-packagekit python-qt4 python-qt4-dbus python-sip4 quassel quassel-data ruby ruby1.8 software-properties-kde soprano-daemon speedcrunch system-config-printer-kde systemsettings ttf-arphic-uming ttf-dejavu ttf-dejavu-extra update-manager-kde update-notifier-kde usb-creator-kde userconfig &#038;&#038; sudo apt-get install ubuntu-desktop</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/linux-ubuntu/2009/11/ubuntu-9-10-e-il-kde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SUN, Prometric, il voucher e le certificazioni</title>
		<link>http://www.alessandrostella.it/java/2009/11/sun-prometric-il-voucher-e-le-certificazioni/</link>
		<comments>http://www.alessandrostella.it/java/2009/11/sun-prometric-il-voucher-e-le-certificazioni/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 18:32:41 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[certificazioni]]></category>
		<category><![CDATA[CX-310-065]]></category>
		<category><![CDATA[prometric]]></category>
		<category><![CDATA[scjp]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=204</guid>
		<description><![CDATA[Ragazzi, roba da matti! Per avere informazioni esatte su come bisogna muoversi per ottenere questo benedetto voucher, mi è servita tutta la mia fama di &#8220;segugio&#8221; informatico. Andiamo con ordine. Se sto cercando di acquistare il voucher è perché ho deciso di sostenere un esame SUN. Il &#8220;luogo&#8221; in cui bisogna recarsi per registrarsi, pagare [...]]]></description>
			<content:encoded><![CDATA[<p>Ragazzi,<br />
roba da matti! Per avere informazioni esatte su come bisogna muoversi per ottenere questo benedetto voucher, mi è servita tutta la mia fama di &#8220;segugio&#8221; informatico.</p>
<p>Andiamo con ordine.<br />
Se sto cercando di acquistare il voucher è perché ho deciso di sostenere un esame SUN. Il &#8220;luogo&#8221; in cui bisogna recarsi per registrarsi, pagare e, in seguito, ottenere il voucher è <a href="https://www.suntrainingcatalogue.com/eduserv/client/cmsearch.do?meId=4&#038;l=it_IT&#038;vat=show_brutto" target="_blanck">questo</a>.<br />
Si sceglie l&#8217;esame che interessa e si prosegue.<br />
Si, si prosegue fino al passo 3 (Indirizzo per la fatturazione)<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2009/11/fasiSUN.jpg" alt="fasiSUN" title="fasiSUN" width="380" height="58" class="alignnone size-full wp-image-205" /><br />
a questo punto se sei un privato, non hai una Partita IVA (campo obbligatorio) e non hai neanche un Numero Ordine (anch&#8217;esso campo obbligatorio) sei fregato! Il sistema non ti consente di proseguire e non c&#8217;è neanche l&#8217;ombra di un aiuto; niente!<br />
Quindi?<br />
Quindi ti inchiodi lì e cerchi di capire come procedere!<br />
Beh, vi risparmio il racconto delle mie avventure alla ricerca delle informazioni su come procedere e vi porto alla soluzione.<br />
Nel campo &#8220;Partita IVA&#8221; vi basta inserire il vostro Codice Fiscale (ci si poteva arrivare), mentre nel campo &#8220;Numero Ordine&#8221; vi basta inserire una X. Avete capito bene, una X. E&#8217; un campo che non serve a niente, ma è obbligatorio!</p>
<p>A questo punto, si può terminare la registrazione e procedere con il pagamento dell&#8217;esame scelto. Su questo punto tutto sembra abbastanza chiaro: bisogna effettuare un bonifico qui:</p>
<p>BANCA INTESA BCI SPA-RETE CARIPLO-Ag. CINISELLO BALSAMO<br />
c/c 21000129 ABI 03069 CAB 32934<br />
IBAN IT80 H030 6932 9340 0002 1000 129</p>
<p>come correttamente segnalato alla fase 2 della procedura di registrazione.<br />
Non è certo finita!<br />
Bisogna a questo punto recarsi sul sito della <a href="http://www.prometric.com/default.htm" target="_blanck">Prometric </a> per registrarsi (anche lì).<br />
Ora bisogna attendere il numero del proprio voucher che ci sarà notificato via email dalla SUN. Una volta ottenuto il numerino bello, ci si deve collegare sulla <a href="http://securereg3.prometric.com/" target="_blanck">apposita sezione</a> del sito della Prometric e seguire tutto l&#8217;iter durante il quale verrà richiesto il numerino bello.<br />
Ad ogni modo, per ogni dubbio, vi consiglio di chiamare il sempre utile numero verde della SUN: <strong>800826108</strong> in orari d&#8217;ufficio.</p>
<p>Schematizzando per rendere il tutto più lineare, i passi da seguire per sostenere un esame con SUN sono i seguenti:</p>
<ol>
<li>Scegliere l&#8217;esame e registrarsi <a href="https://www.suntrainingcatalogue.com/eduserv/client/cmsearch.do?meId=4&#038;l=it_IT&#038;vat=show_brutto" target="_blanck">qui</a></li>
<li>Pagare l&#8217;importo relativo all&#8217;esame scelto</li>
<li>Eseguire il login sul sito Prometric e scegliere data e sede dove si vuole sostenere l&#8217;esame</li>
<li>Andare a fare l&#8217;esame con Carta d&#8217;identità e voucher</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2009/11/sun-prometric-il-voucher-e-le-certificazioni/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Grub 2 &#8211; Facciamolo più bello</title>
		<link>http://www.alessandrostella.it/linux-ubuntu/2009/11/grub-2-facciamolo-piu-bello/</link>
		<comments>http://www.alessandrostella.it/linux-ubuntu/2009/11/grub-2-facciamolo-piu-bello/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 19:15:14 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Linux Ubuntu]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[Grub 2]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=261</guid>
		<description><![CDATA[Con l&#8217;uscita di ubuntu 9.10 karmic koala è stato introdotto un nuovo boot loader: grub 2. Le novità rispetto al precedente sono purtroppo molte, quinidi tutte le vecchie abitudini devono essere cambiate. Vediamo come è possibile interagire con grub 2. E&#8217; bene subito mettere in chiaro una cosa: a meno che non siate degli esperti [...]]]></description>
			<content:encoded><![CDATA[<p>Con l&#8217;uscita di <strong>ubuntu 9.10 karmic koala</strong> è stato introdotto un nuovo boot loader: <strong>grub 2</strong>.<br />
Le novità rispetto al precedente sono purtroppo molte, quinidi tutte le vecchie abitudini devono essere cambiate. Vediamo come è possibile interagire con grub 2.<br />
E&#8217; bene subito mettere in chiaro una cosa: a meno che non siate degli esperti (ma non lo siete, altrimenti non sareste qui) NON editate il file <strong>grub.cfg</strong>. Sebbene sia il cuore di grub 2, esso deve essere costruito dagli script e non a manina!<br />
Fatta questa precisazione proseguiamo. </p>
<h3>Estetica di base</h3>
<p>Sebbene grub 2 supporti i temi, l&#8217;argomento è molto complesso e non viene trattato in questo post.<br />
Qui ci occuperemo di modificare la risoluzione dello schermo, l&#8217;immagine di sfondo e il colore dei caratteri di grub 2.<br />
A tal fine dovremo modificare 2 file:<br />
<strong>/etc/grub.d/05_debian_theme</strong><br />
<strong> /etc/grub.d/00_header</strong><br />
Iniziamo con la modifica dell&#8217;immagine di sfondo e il colore dei caratteri. Ci occuperemo dopo della risoluzione.</p>
<p>Apriamo il terminale e digitiamo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo gedit /etc/grub.d/05_debian_theme</div></td></tr></tbody></table></div>
<p>La figura qui di seguito mostra il file 05_debian_theme.<br />
<a href="http://www.alessandrostella.it/wp-content/uploads/2009/11/05_debian_theme.jpeg" rel="lytebox"><img src="http://www.alessandrostella.it/wp-content/uploads/2009/11/05_debian_theme-300x273.jpg" alt="Il file 05_debian_theme" title="Il file 05_debian_theme" width="300" height="273" class="alignnone size-medium wp-image-233" /></a><br />
Alcune zone della figura sono state evidenziate cone 3 colori diversi.<br />
La parte in azzurro indica le cartelle del vostro disco in cui grub 2 dovrà cercare le immagini da usare come sfondo. Possiamo aggiungere quante cartelle vogliamo purché siano divise da una virgola, come mostrato in figura.<br />
La parte in rosso indica il nome vero e proprio del file, seguito da tutte le possibili estensioni.<br />
La parte in verde, infine, setta i colori del testo e dello sfondo che lo evidenzia quando è selezionato. In particolare &#8220;color_normal&#8221; indica &#8220;colore testo&#8221;/&#8221;colore barra di evidenziazione&#8221; quando la voce del menu non è selezionata, mentre &#8220;color_highlight&#8221; indica &#8220;colore testo&#8221;/&#8221;colore barra di evidenziazione&#8221; quando la voce di menù è selezionata. Nel caso proposto quindi il testo sarà di colore marrone con sfondo nero quando non è selezionato e l&#8217;inverso se invece selezionato.</p>
<p>Ora passiamo a modificare la risoluzione dello schermo.<br />
Per fare questo digitiamo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo gedit /etc/grub.d/00_header</div></td></tr></tbody></table></div>
<p>e andiamo a cercare le seguente riga:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">if [ &quot;x${GRUB_GFXMODE}&quot; = &quot;x&quot; ] ; then GRUB_GFXMODE=800x600 ; fi</div></td></tr></tbody></table></div>
<p>Beh, c&#8217;è poco da dire.<br />
Possiamo scegliere tra le seguenti risoluzioni:<br />
640&#215;480, 800&#215;600, 1024&#215;768, 1280&#215;1024, 1600&#215;1200</p>
<p>Fatta la nostra scelta salviamo il file.<br />
A questo punto dobbiamo riportate tutte queste modifiche nel file grub.cfg. Per fare questo digitiamo sul terminale:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo update-grub2</div></td></tr></tbody></table></div>
<p>Riavviamo il sistema e tutto dovrebbe essere cambiato.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/linux-ubuntu/2009/11/grub-2-facciamolo-piu-bello/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, i dati primitivi e la RAM</title>
		<link>http://www.alessandrostella.it/java/2009/11/java-e-i-dati-primitivi-e-la-ram/</link>
		<comments>http://www.alessandrostella.it/java/2009/11/java-e-i-dati-primitivi-e-la-ram/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 15:00:43 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[dati primitivi]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=191</guid>
		<description><![CDATA[Non molto tempo fa abbiamo cercato di dipanare la matassa intorno alla gestione dei reference. In questo post invece cerchiamo di capire come funzionano i dati primitivi nella memoria del PC. Innanzitutto un dato primitvo NON è un oggetto! Tuttavia, ogni dato primitivo ha una corrispondente wrapper class che può essere usata per rappresnetarlo come [...]]]></description>
			<content:encoded><![CDATA[<p>Non molto tempo fa abbiamo cercato di dipanare la matassa intorno alla gestione dei <a href="http://www.alessandrostella.it/java/2009/10/java-i-reference-e-la-programmazione-a-oggetti/">reference</a>.<br />
In questo post invece cerchiamo di capire come funzionano i dati primitivi nella memoria del PC.<br />
Innanzitutto un <strong>dato primitvo</strong> NON è un oggetto!<br />
Tuttavia, ogni dato primitivo ha una corrispondente <em>wrapper class</em> che può essere usata per rappresnetarlo come un oggetto. Ma in questo post non parleremo di questo.<br />
Ci occuperemo invece di <strong>quali sono i dati primitivi in java e come vengono rappresentati nella RAM</strong> del PC.<br />
Possiamo dividere i dati primitivi in 3 categorie:</p>
<ul>
<li>integral types (byte, short, int, long e char)</li>
<li>floating-point types (float, double)</li>
<li>boolean type (boolean)</li>
</ul>
<p>E&#8217; lecito scrivere:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">int intVar = 10;</div></td></tr></tbody></table></div>
<p>Cosa succede nella RAM del PC quando noi scriviamo una tale istruzione?<br />
La figura di seguito dovrebbe spiegarlo.<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2009/11/primitiviRAM.gif" alt="Il dato primitivo nella RAM" title="Il dato primitivo nella RAM" width="412" height="230" class="alignnone size-full wp-image-196" /><br />
Nella cella di memoria con sfondo verde è stato inserito il valore del nostro tipo primitivo; in questo caso il valore 10. Da adesso in poi ogni istruzione di modifica della variabile <em>intVar</em> modificherà direttamente il valore contenuto in quella cella di memoria. Quindi scrivendo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">intVar = 163;</div></td></tr></tbody></table></div>
<p>java modificherà per noi il contenuto della cella in figura.<br />
E&#8217; molto importante notare e capire che java gestisce in modo differente gli oggetti e i dati primitivi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2009/11/java-e-i-dati-primitivi-e-la-ram/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, i reference e la RAM</title>
		<link>http://www.alessandrostella.it/java/2009/10/java-i-reference-e-la-programmazione-a-oggetti/</link>
		<comments>http://www.alessandrostella.it/java/2009/10/java-i-reference-e-la-programmazione-a-oggetti/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 12:32:27 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[OO Programming]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[programmazione a oggetti]]></category>
		<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=166</guid>
		<description><![CDATA[Questo è un argomento ostile, nel quale è facile perdersi, ma nello stesso tempo è la prima porta da aprire se si vuole entrare a pieno titolo nel mondo della programmazione java&#8230; Innanzitutto distinguiamo tra reference value e object reference. Un reference value rappresenta un valore (value) e precisamente il valore che viene restituto quando [...]]]></description>
			<content:encoded><![CDATA[<p>Questo è un argomento ostile, nel quale è facile perdersi, ma nello stesso tempo è la prima porta da aprire se si vuole entrare a pieno titolo nel mondo della programmazione java&#8230;</p>
<p>Innanzitutto distinguiamo tra <strong>reference value</strong> e <strong>object reference</strong>.<br />
Un <strong>reference value</strong> rappresenta un valore (value) e precisamente il valore che viene restituto quando viene creato un particolare oggetto.<br />
Un <strong>object reference</strong> (o semplicemnte reference) rappresenta invece una variabile che può memorizzare un reference value.<br />
Questa differenza deve essere chiara perché altrimenti niente sarà mai chiaro con i reference in java!<br />
Ora traduciamo questi concetti in codice.<br />
Creiamo 2 object reference di tipo MiaClasse:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MiaClasse refOggetto1, refOggetto2<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Scrivendo questa riga di codice abbiamo comunicato a java di creare due variabili (nella RAM del calcolatore) di tipo <em>MiaClasse</em> e gli abbiamo anche detto che in queste 2 variabili DOVRANNO essere inseriti dei valori che si riferiranno (reference) a 2 oggetti di tipo <em>MiaClasse</em>. Stiamo parlando di &#8220;reference&#8221;! Questo significa che in queste 2 variabili java NON inserirà MAI gli oggetti veri e propri, ma il rifeimento a tali oggetti!!!<br />
Rileggete bene l&#8217;ultimo paragrafo: è molto importante!</p>
<p>Bene. Inseriamo allora tali riferimenti ai 2 oggetti:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">refOggetto1 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MiaClasse<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
refOggetto2 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MiaClasse<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>A questo punto java assegna un valore a <em>refOggetto1</em> e un altro valore a <em>refOggetto2</em>. Ribadisco ancora che tale valore NON indica l&#8217;oggetto vero e proprio, ma indica la posizione (in RAM) dell&#8217;oggetto; il suo &#8220;riferimento&#8221;.<br />
Si può rappresentare graficamente quanto detto con la seguente figura (scusate la poca eleganza).</p>
<p><img src="http://www.alessandrostella.it/wp-content/uploads/2009/10/ram.gif" alt="Oggetti in RAM" title="Oggetti in RAM" width="412" height="230" class="alignnone size-full wp-image-399" /></p>
<p>In questa figura c&#8217;è rappresentato tutto quello che bisogna sapere sui reference!<br />
<span id="more-166"></span><br />
Perché i reference <em>refOggetto1</em> e <em>refOggetto2</em> hanno uno sfondo bicolore?<br />
La risposta a questa domanda svelerà uno dei segreti di java&#8230;<br />
<strong>Nei reference non viene inserito soltanto l&#8217;indirizzo di memoria in cui è memorizzato l&#8217;oggetto, ma anche l&#8217;intervallo di memoria che sarà occupato dall&#8217;oggetto!</strong><br />
Quindi è come se nella parte verde chiaro ci fosse scritto l&#8217;indirizzo RAM dove &#8220;inizia&#8221; l&#8217;oggetto che ci interessa, mentre nella parte verde scuro fosse indicato lo spazio da sommare al punto iniziale per contenere l&#8217;oggetto.<br />
Vi siete mai chiesti perché scrivere:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>MiaClasse.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>procuri un output simile al seguente?</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MiaClasse@c3c749</div></td></tr></tbody></table></div>
<p>La @ è il separatore tra la parte verde chiaro e quella verde scuro!</p>
<p>Ora comprendere a fondo questo concetto sarà di fondamentale importanza quando parleremo di polimorfismo e di metodi virtuali!</p>
<p>In java NON avremo mai a che fare con gli oggetti veri e propri (indicati con lo sfondo rosa nella figura), ma solo con i loro riferimenti (sfondo verde).<br />
Ecco perché quando noi scriviamo:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">refOggetto2 <span style="color: #339933;">=</span> refOggetto1<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>NON stiamo rendendo uguali gli oggetti e in realtà non stiamo rendendo uguali neanche i reference, ma solo una parte dei reference, cioè la parte che indica dove inizia l&#8217;oggetto in memoria.<br />
Questo significa che dopo tale istruzione refOggetto2 punterà allo stesso indirizzo di memoria a cui punta refOggetto1 e quindi se noi apportiamo una modifica all&#8217;oggetto puntato da refOggetto2 la ritroviamo anche sull&#8217;oggetto puntato da refOggetto1; per forza! Entrambi puntano allo stesso oggetto!<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2009/10/ram2.gif" alt="Uguagliare 2 reference" title="Uguagliare 2 reference" width="412" height="230" class="size-full wp-image-405" /><br />
L&#8217;oggetto a cui puntava refOggetto2 rimarrà in memoria fino a quando java, tramite il suo garbage collector, non si accorgerà che nessuno lo &#8220;cerca&#8221; e lo eliminerà.</p>
<p>Ma tutto quanto detto è valido solo e soltanto se i 2 reference sono stati dichiarati dello stesso tipo (come nel nostro caso)!<br />
Se invece avessimo scritto:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MiaClasse refOggetto1<span style="color: #339933;">;</span><br />
MiaClasse2 refOggetto2<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>e se non ci fosse legame tra le 2 classi, scrivere:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">refOggetto2 <span style="color: #339933;">=</span> refOggetto1<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>produrrebbe un errore in compilazione!</p>
<p>Abbiamo già visto che con i dati primitivi le cose funzionano ben diversamente, ma vi rimando ai relativi post.<br />
<a href="http://www.alessandrostella.it/java/2009/11/java-e-i-dati-primitivi-e-la-ram/">I dati primitivi</a><br />
<a href="http://www.alessandrostella.it/java/2009/11/java-e-il-passaggio-di-parametri/">Il passaggio dei parametri</a><br />
Gli argomenti sono strettamente collegati.<br />
Per &#8220;evolvere&#8221; il pensiero invece, è bene leggere questo post: java il polomorfismo e i metodi virtuali.<br />
Mal di testa? E&#8217; normale&#8230; passerà!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/java/2009/10/java-i-reference-e-la-programmazione-a-oggetti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTC Touch &#8211; Configurazione MMS PosteMobile</title>
		<link>http://www.alessandrostella.it/tips-tricks/2009/10/htc-touch-configurazione-mms-postemobile/</link>
		<comments>http://www.alessandrostella.it/tips-tricks/2009/10/htc-touch-configurazione-mms-postemobile/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 19:06:41 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[htc]]></category>
		<category><![CDATA[mms]]></category>
		<category><![CDATA[postemobile]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=108</guid>
		<description><![CDATA[Se si utilizza come operatore PosteMobile, non è facile trovare la procedura da seguire per configurare un HTC touch per inviare e ricevere MMS. Di seguito elenco i passi da seguire per realizzare tale configurazione. Cliccare su “Start”, andare su “Impostazioni” e selezionare la tabella “Connessioni”. Cliccare sull&#8217;icona “Connessioni”, sceliere la tabella “Avanzate” e premere [...]]]></description>
			<content:encoded><![CDATA[<p>Se si utilizza come operatore <strong>PosteMobile</strong>, non è facile trovare la procedura da seguire per <strong>configurare un HTC touch per inviare e ricevere MMS</strong>.<br />
Di seguito elenco i passi da seguire per realizzare tale configurazione.</p>
<ol>
<li>Cliccare su “Start”, andare su “Impostazioni” e selezionare la tabella “Connessioni”.<br />
<img src="http://www.alessandrostella.it/img/HTC_PostemoMobile_MMS/HTC_Postemobile_MMS_00.jpg" alt="Tabella Connessioni HTC" /></li>
<li>Cliccare sull&#8217;icona “Connessioni”, sceliere la tabella “Avanzate” e premere il bottone “Selezione reti”, poi “Nuova”. Verrà proposta la tabella “Generale” nella quale è possibile assegnare un nome (ad esempio PosteMobile MMS) per le impostazioni.<br />
<img src="http://www.alessandrostella.it/img/HTC_PostemoMobile_MMS/HTC_Postemobile_MMS_01.jpg" alt="Tabella Connessioni HTC 2" /></li>
<li>Andare ora sulla tabella “Modem”</li>
<li>Cliccare su “Nuova”; assegnare un nome (può andar bene PosteMobile) per la connessione come modem, selezionare “Linea cellulare (GPRS)” e cliccare su “Avanti”</li>
<li>Alla voce “Punto di accesso” scrivere “mms.postemobile.it” e cliccare su “Avanti” e poi su “Fine”</li>
<li>Ora cliccare ripetutamente su “OK” (in alto) per salvare le impostazioni e tornare alla schermata principale</li>
</ol>
<p>Ora configuriamo le opzioni MMS.<br />
<span id="more-108"></span></p>
<ol>
<li>Cliccare su “Start” e selezionare la casella di posta “Messaggi”</li>
<li>Andare su “SMS\MMS”</li>
<li>Ora cliccare su “Menù” e scegliere “Opzioni MMS&#8230;”</li>
<li>Spostarsi sulla tabella “Server” selezionare “Nuovo” ed aggiungere un nuovo profilo</li>
</ol>
<p>Verrano richieste diverse informazioni. Di seguito i rispettivi dati da inserire:</p>
<ol>
<li>Nome Server: “PosteMobile MMS”</li>
<li>Gateway: “10.128.224.10”</li>
<li>Numero della Porta: “80”</li>
<li>Indirizzo server: “http://mms.postemobile.it/servlets/mms”</li>
<li>Connettere tramite: “PosteMobile MMS”</li>
<li>Versione WAP: “WAP 2.0” e premi “Fine”</li>
</ol>
<p><img src="http://www.alessandrostella.it/img/HTC_PostemoMobile_MMS/HTC_Postemobile_MMS_03.jpg" alt="Impostazioni HTC" /><br />
Assicurarsi che sia selezionato il profilo appena creato e cliccare su “Imposta come Predefinito”<br />
<img src="http://www.alessandrostella.it/img/HTC_PostemoMobile_MMS/HTC_Postemobile_MMS_04.jpg" alt="Impostazioni HTC" /><br />
Ora è necessario riavviare il PPC. Al riavvio provare ad autoinviarsi un MMS. Se lo si riceve, è tutto ok.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/tips-tricks/2009/10/htc-touch-configurazione-mms-postemobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
