<?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>Carmine Noviello &#187; Informatica</title>
	<atom:link href="http://www.carminenoviello.com/category/informatica/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.carminenoviello.com</link>
	<description>ilnovi&#039;s corner</description>
	<lastBuildDate>Mon, 06 Jun 2011 06:00:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Adium, MSN e quel maledetto &#8220;Sei connesso da un&#8217;altra postazione&#8221;</title>
		<link>http://www.carminenoviello.com/2011/04/29/adium-msn-e-quel-maledetto-sei-connesso-da-unaltra-postazione/</link>
		<comments>http://www.carminenoviello.com/2011/04/29/adium-msn-e-quel-maledetto-sei-connesso-da-unaltra-postazione/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 17:54:26 +0000</pubDate>
		<dc:creator>Carmine Noviello</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[adium]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[msn]]></category>
		<category><![CDATA[sei connesso da un'altra postazione]]></category>

		<guid isPermaLink="false">http://www.carminenoviello.com/?p=284</guid>
		<description><![CDATA[Se siete tra coloro che sono costretti ad usare il peggior protocollo di messaggistica istantanea esistente, ossia MSN, e se siete possessori di Mac ed adoperate Adium, e da qualche tempo siete totalmente impossibilitati a collegarvi alla rete MSN perch&#233; ogni volta che provate a connettervi vi appare la fatidica scritta &#34;Siete connessi da un&#39;altra [...]]]></description>
			<content:encoded><![CDATA[<p>Se siete tra coloro che sono costretti ad usare il peggior protocollo di messaggistica istantanea esistente, ossia MSN, e se siete possessori di Mac ed adoperate Adium, e da qualche tempo siete totalmente impossibilitati a collegarvi alla rete MSN perch&eacute; ogni volta che provate a connettervi vi appare la fatidica scritta &quot;Siete connessi da un&#39;altra postazione&quot;, beh sappiate che finalmente c&#39;&egrave; una soluzione.</p>
<p>La beta di <a href="http://adiumx.cachefly.net/Adium_1.4.2b1.dmg">Adium 1.4.2</a> aggiorna <em>libpurple</em> (il sottosistema usato da Adium per gestire i vari protocolli di messaggistica) che nella sua ultima versione gestisce il &quot;Multiple Points of Presence&quot; (MPOP) per MSN, ossia la possibilit&agrave; di collegarvi contemporaneamente da pi&ugrave; postazioni, cos&igrave; come annunciato nella stessa <a href="http://adium.im/beta/">beta</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.carminenoviello.com/2011/04/29/adium-msn-e-quel-maledetto-sei-connesso-da-unaltra-postazione/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Convertire un filesystem case-sensitive in case-insensitive e viceversa</title>
		<link>http://www.carminenoviello.com/2009/08/06/convertire-un-filesystem-case-sensitive-in-case-insensitive-e-viceversa/</link>
		<comments>http://www.carminenoviello.com/2009/08/06/convertire-un-filesystem-case-sensitive-in-case-insensitive-e-viceversa/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 07:11:23 +0000</pubDate>
		<dc:creator>Carmine Noviello</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[case-insensitive]]></category>
		<category><![CDATA[case-sensitive]]></category>
		<category><![CDATA[convertire]]></category>
		<category><![CDATA[HFS+]]></category>
		<category><![CDATA[HFSX]]></category>
		<category><![CDATA[iPartition]]></category>

		<guid isPermaLink="false">http://www.carminenoviello.name/informatica/convertire-un-filesystem-case-sensitive-in-case-insensitive-e-viceversa</guid>
		<description><![CDATA[Se siete approdati su questo articolo è, probabilmente, perché siete alla ricerca di una soluzione per risolvere un &#8220;guaio&#8221; fatto durante l&#8217;istallazione di MacOS X. Già, perché quando si istalla il sistema, l&#8217;istaller ci pone davanti alla scelta non del tutto banale del tipo di filesystem che vogliamo adoperare per il sistema operativo. Tra le [...]]]></description>
			<content:encoded><![CDATA[<p>Se siete approdati su questo articolo è, probabilmente, perché siete alla ricerca di una soluzione per risolvere un &#8220;guaio&#8221; fatto durante l&#8217;istallazione di MacOS X. Già, perché quando si istalla il sistema, l&#8217;istaller ci pone davanti alla scelta non del tutto banale del tipo di filesystem che vogliamo adoperare per il sistema operativo. Tra le tante opzioni disponibili c&#8217;è la famigerata possibilità di formattare il disco come &#8220;MacOS Esteso (Case-sensitive)&#8221; (in gergo tecnico una partizione di tipo <a href="http://it.wikipedia.org/wiki/HFS_Plus">HFSX</a>), che per uno abituato a lavorare con i sistemi UNIX è la scelta più ovvia. In breve, tale tipo di filesystem permette di distinguere i nomi dei file, delle directory, ecc, in base ai caratteri maiuscoli o minuscoli (per un filesystem case-sensitive il file &#8220;pRoVa&#8221; è diverso da &#8220;prova&#8221; e possono coesistere nella stessa directory). Al contrario, il filesystem predefinito di Apple non è di tipo case-sensitive e i due file di esempio di cui sopra non possono trovarsi all&#8217;interno della stessa directory. Nei fatti, questa è una limitazione che sussiste esclusivamente per alcuni tool sviluppati in ambito UNIX e portati su Mac (i <a href="http://www.macports.org/"><em>ports</em></a>, per l&#8217;appunto).</p>
<p><span id="more-81"></span></p>
<p>Questa scelta che può sembrare la migliore si dimostra in realtà nefasta allorquando si cerca di installare degli applicativi terzi che non supportano il filesystem case-sensitive. E nello specifico, per quanto mi risulta, c&#8217;è solo una famiglia di prodotti che ha questo problema: la suite di programmi Adobe (solo Lightroom sfugge a questa regola). Insomma, niente Photoshop, niente InDesign, niente Illustrator. Niente di niente. Ho atteso quasi un anno l&#8217;uscita della suite CS4 sperando che Adobe si decidesse a risolvere questo problema ben noto e che pare affliggere solo l&#8217;istaller della sui suite (ma cavolo, un programma che fa assunzioni sul tipo di filesystem a me sembra scritto un po&#8217; male&#8230;.). A questo punto disperato non mi restava che formattare tutto e ricominciare. E per uno che ha sempre portato alla morte i suoi calcolatori senza MAI formattarli era un dramma. In realtà le ipotesi erano due:</p>
<ol>
<li>Formattare (sigh).</li>
<li>Provare a dumpare con DiskUtility l&#8217;immagine del disco su un disco esterno e provare nella reistallazione in targhet mode a reistallare da quella immagine, ma con un filesystem diverso (come riportato in <a href="http://discussions.apple.com/thread.jspa?threadID=1298834">questo thread</a> poco chiaro)</li>
</ol>
<p>Disperato, cerca che ti ricerca ho scoperto questo tool chiamato <a href="http://www.coriolis-systems.com/iPartition.php">iPartition</a> della Coriolis, il quale per 37€ vi permette di convertire il filesystem in modalità case-insensitive o viceversa. Mitico! Come funziona: è necessario da prima creare un CD autopartente con l&#8217;utility &#8220;Coriolis CDMaker&#8221; (perché è necessario agire sul filesystem smontato), per poi far ripartire il Mac con questo CD e procedere alla conversione dal menu &#8220;Partition-&gt;Make case-insensitive&#8221; di iPartition. In meno di 5 minuti il gioco è fatto. Non c&#8217;è che dire: ottimo acquisto (non abbiate speranze di trovarlo nell&#8217;etere digitale <img src='http://www.carminenoviello.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.carminenoviello.com/2009/08/06/convertire-un-filesystem-case-sensitive-in-case-insensitive-e-viceversa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Time Machine su comuni NAS</title>
		<link>http://www.carminenoviello.com/2008/09/17/time-machine-su-comuni-nas/</link>
		<comments>http://www.carminenoviello.com/2008/09/17/time-machine-su-comuni-nas/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 06:37:35 +0000</pubDate>
		<dc:creator>Carmine Noviello</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Leopard]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[TimeMachine]]></category>
		<category><![CDATA[WD MyBook World]]></category>

		<guid isPermaLink="false">http://www.carminenoviello.name/archives/55</guid>
		<description><![CDATA[Diciamocela tutta: Time Machine &#232; forse una delle feature pi&#249; cool di MacOS X 10.5.x, meglio noto come Leopard. Tecnicamente non &#232; nulla di rilevante: si tratta di un comune backup incrementale del disco fisso. Tuttavia, come al solito, Apple ha integrato alla perfezione questa funzionalit&#224; nel sistema, fornendo un&#39;interfaccia grafica che ne agevola l&#39;utilizzo [...]]]></description>
			<content:encoded><![CDATA[<p>Diciamocela tutta: Time Machine &egrave; forse una delle feature pi&ugrave; cool di MacOS X 10.5.x, meglio noto come Leopard. Tecnicamente non &egrave; nulla di rilevante: si tratta di un comune backup incrementale del disco fisso. Tuttavia, come al solito, Apple ha integrato alla perfezione questa funzionalit&agrave; nel sistema, fornendo un&#39;interfaccia grafica che ne agevola l&#39;utilizzo e lo rende molto intuitivo (sfido un comune mortale a giocare di <tt>tar</tt> e di file <tt>crontab</tt> <img src='http://www.carminenoviello.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p>Per attivare Time Machine &egrave; necessario disporre di un disco fisso esterno (USB o FireWire) e di tanta pazienza per il primo backup, quando deve essere effettuato il primo backup di tutto il disco: i successivi aggiungeranno solo le modifiche al filesystem (file e directory modificati e/o aggiunti). Tuttavia, nell&#39;era in cui il costo di un NAS per uso domestico (per chi non lo sapesse, un <a href="http://it.wikipedia.org/wiki/Network_Attached_Storage">Network Attached Storage</a> &egrave; un dispositivo di rete il cui compito &egrave; quello di far condividere spazio disco tra pi&ugrave; utenti/computer) &egrave; ormai di poche decine di euro, utilizzare un disco esterno semplice pu&ograve; essere molto riduttivo, soprattutto se si dispone di pi&ugrave; computer e una rete domestica ben configurata. E non a caso la stessa Apple c&#39;ha pensato, producendo un dispositivo denominato <a href="http://www.apple.com/it/timecapsule/">Time Capsule</a> progettato proprio per questo compito. Purtroppo, (forse per motivi commerciali?!?!?!) non sono al momento direttamente supportati comuni NAS di rete, a meno di non effettuare delle operazioni &quot;manuali&quot;.</p>
<p>In rete esistono diversi tutorial per risolvere il problema. Tuttavia, &egrave; molto difficile trovare delle istruzioni chiare ed in grado di funzionare. In questo mini tutorial prover&ograve; a sintetizzare i passi principali per poter configurare Time Machine con un comune NAS di rete, che supporti almeno il protocollo SMB (il protocollo di condivisione dei file adoperato da Windows).</p>
<p><span id="more-55"></span></p>
<p>Cominciamo dalla lista della spesa:</p>
<ol>
<li>Un Mac equipaggiato con MacOS X 10.5.2 o superiore (&egrave; uscito di recente il 10.5.5, correte ad aggiornarlo <img src='http://www.carminenoviello.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</li>
<li>Un NAS di rete con il supporto al protocollo SMB</li>
<li>Un router, possibilmente WiFI</li>
<li>TAAAAAAAAAAAAAAAAAAAANTA pazienza per il primo backup (all&#39;incirca da un minimo di 5-6 ore ad un massimo di 20!!!)</li>
</ol>
<p>Il punto 2 merita un approfondimento. Esistono diverse soluzioni oggi disponibili: si parte dai prodotti squisitamente domestici e si finisce ai prodotti specialistici basati su server di storage ridondati che costano svariati migliaia di euro. La soluzione che illustrer&ograve; io qui funziona a prescindere dal NAS purch&eacute; supporti almeno il protocollo SMB. In realt&agrave;, i NAS domestici sono &quot;simili&quot; in tutto e per tutto a quelli di fascia alta: in genere sono equipaggiati con un Linux embedded con tutto il software necessario alla gestione del disco e dei servizi di rete. <br />
	Per le utenze domestiche esistono due famiglie di prodotti che oggi vanno per la maggiore: i prodotti della <a href="http://www.lacie.com/IT/products/range.htm?id=10007">Lacie</a> e quelli della <a href="http://www.wdc.com/it/products/products.asp?driveid=347">Western Digital</a>. I primi sono certificati per funzionare come NAS SMB, e il software a corredo fornisce tutto il necessario per configurare gli SHARE SMB (ossia le unit&agrave; logiche di rete). I secondi, invece, ufficialmente sono raggiungibili solo tramite il software a corredo, denominato MioNet e disponibile SOLO per Windows (ufficialmente il Mac non &egrave; supportato). In realt&agrave;, la distribuzione di Linux a corredo fornisce Samba ed &egrave; pertanto possibile agganciare l&#39;unit&agrave; via SMB. In questo tutorial assumer&ograve; NAS proprio il WD MyBook World Edition, in mio possesso, anche se la procedura corretta funziona con qualunque disco di rete, compresi quelli di fascia alta.</p>
<p>Pronti, via.</p>
<p><strong>Passo 1</strong>: il primo passo consiste nella configurazione del NAS. La prima cosa da effettuare &egrave; collegare il dispositivo alla rete per mezzo di un router, possibilmente WiFI. Nel caso del WD MyBook WD, il dispositivo &egrave; configurato per richiedere l&#39;indirizzo di rete via DHCP, quindi bisogna assicurarsi che il router sia configurato per dare gli indirizzi dinamicamente (se non avete fatto nulla, allora qualunque router di fabbrica esce con il DHCP abilitato). Il passo successivo &egrave; scoprire l&#39;indirizzo IP assegnato. Nel caso del WD, dopo circa 2-3 minuti che avete collegato il dispositivo alla rete e terminata la sua fase di inizializzazione (tutte le lucine blu accese), sar&agrave; automaticamente disponibile nel Finder, nella sezione &quot;CONDIVISI&quot; con il nome di &quot;mybookworld&quot;, come mostrato in figura.</p>
<p><img alt="" src="http://www.carminenoviello.com/wp-content/uploads/2008/09/screen-capture.png" /></p>
<p>Cliccando sulla voce &quot;mybookworld&quot; scopriamo che &egrave; disponibile un unico share denominato PUBLIC: questo &egrave; uno share di pubblico accesso, per cui non &egrave; necessaria alcuna autenticazione. Per questo motivo ne sconsiglio l&#39;uso: per proteggere i backup &egrave; meglio crearne uno nuovo dotato di username e password. <br />
	Per fare questo &egrave; necessario accedere all&#39;interfaccia web del dispositivo e creare un nuovo CIF (questa &egrave; la dicitura che troverete nel WD My Book World). Per prima cosa dobbiamo scoprire l&#39;indirizzo IP del dispositivo. Apriamo un terminale (Applicazioni-&gt;Utility-&gt;Terminale) e digitiamo il comando:</p>
<p><tt>smbutil lookup mybookworld</tt></p>
<p>&nbsp;</p>
<p><img alt="" src="http://www.carminenoviello.com/wp-content/uploads/2008/09/screen-capture-1.png" /></p>
<p>Il comando ci restituir&agrave; l&#39;indirizzo IP. A questo punto inseriamo l&#39;indirizzo IP nel browser, e accediamo all&#39;interfaccia di gestione. Se &egrave; la prima volta, le credenziali necessarie per accedere sono admin/12345. Nella schermata che apparir&agrave;, scegliere la voce &quot;File Sharing&quot;, come riportato in figura sotto:</p>
<p><img alt="" src="http://www.carminenoviello.com/wp-content/uploads/2008/09/screen-capture-2.png" style="width: 649px; height: 442px;" /></p>
<p>Scegliere la voce &quot;User Management&quot; per aggiungere un nuovo utente, e successivamente &quot;Add a Shared Folder&quot; per creare un nuovo CIF, che per convenzione chiameremo &quot;TIME&quot;. A questo share daremo massimi privilegi all&#39;utente creato, e negheremo tutti i privilegi agli altri utenti. <br />
	A questo punto dobbiamo montare il dispositivo. Andiamo nel Finder e scegliamo dal menu la voce &quot;Vai-&gt;Connessione al server&quot; e digitiamo nella finestra che ci apparir&agrave; la stringa smb://&lt;indirizzo-ip-del-nas&gt;, dove con &lt;indirizzo-ip-del-nas&gt; intendiamo l&#39;indirizzo che abbiamo scoperto poco fa, come mostrato nella figura sotto:</p>
<p><img alt="" src="http://www.carminenoviello.com/wp-content/uploads/2008/09/screen-capture-21.png" /></p>
<p>&nbsp;</p>
<p>A questo punto &egrave; possibile verificare nel Finder la presenza del nuovo volume, ed entrarci all&#39;interno dopo aver inserito username e password. Ok, primo passo finito.</p>
<p><strong>Passo 2</strong>: il secondo passo consiste nel creare uno speciale file, chiamato &quot;immagine disco sparse bundle&quot; che servir&agrave; per contenere i backup di Time (tecnicamente, abbiamo bisogno di creare un file immagine HFS+ che per forza di cosa sar&agrave; contenuto su filesystem SMB &#8211; nel caso del WD MyBook WD Linux/ext3). Un file immagine non &egrave; niente altro che un file che si comporta come un disco fisso normale, e nel Mac &egrave; possibile crearli al volo grazie l&#39;Utility Disco.<br />
	La convezione &egrave; questo file si chiami come il <em>mac address</em> della scheda di rete principale del vostro Mac (iMac, MacBook, ecc) senza i &quot;:&quot;, pi&ugrave; l&#39;estensione&nbsp; &quot;.sparsebundle&quot; (MAC-ADDRESS.sparsebundle). Ma andiamo per gradi. Torniamo al terminale e digitiamo il comando:</p>
<p><tt>ifconfig</tt></p>
<p>&nbsp;</p>
<p><img alt="" src="http://www.carminenoviello.com/wp-content/uploads/2008/09/screen-capture-3.png" /></p>
<p>Il dato a cui siamo interessati &egrave; quello evidenziato in colore rosso nella figura sopra, ossia il MAC-ADDRESS della scheda di rete principale (en0), senza i &quot;:&quot;. Nel nostro caso, ci interessa la stringa <strong>001b63af64ec</strong>. Messa questa stringa da parte, lanciamo Utility Disco (Applicazioni-&gt;Utility-&gt;Utility Disco) e scegliamo la voce &quot;Nuova Immagine&quot;. Il nome di questa immagine dovr&agrave; essere l&#39;indirizzo di cui prima pi&ugrave; l&#39;estensione &quot;.sparsebundle&quot;. La dimensione dovr&agrave; essere adeguata (almeno la dimensione del disco fisso del vostro Mac), e le impostazioni devono corrispondere a quelle riportate nella figura sotto (importante &egrave; scegliere &quot;Nessuna mappa delle partizioni&quot; e &quot;Immagine disco sparse bundle&quot;)</p>
<p>&nbsp;<img alt="" src="http://www.carminenoviello.com/wp-content/uploads/2008/09/screen-capture-6.png" /></p>
<p>Salviamo l&#39;immagine. Al termine delle operazioni, copiamo il file creato (<strong>001b63af64ec.sparsebundle</strong>) all&#39;interno dello SHARE creato sul disco di rete (TIME nel nostro esempio).</p>
<p><strong>Passo 3</strong>: abbiamo quasi concluso. Il passo finale consiste nel dire a Time Machine di adoperare anche unit&agrave; condivise di rete. Sempre da terminale digitare il comando:</p>
<p><tt>defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1</tt></p>
<p>A questo punto basta posizionarsi nelle Preferenze di Sistema -&gt; Time Machine e selezionare come disco lo SHARE che abbiamo creato (TIME nel nostro esempio) e avviare la procedura di backup.</p>
<p>Il tutorial &egrave; finito <img src='http://www.carminenoviello.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Ora alcune considerazioni e raccomandazioni. Innanzitutto, se disponete di un Mac di ultima generazione che supporta il protocollo 802.11n per la Wi-Fi, e di un router con la stessa funzionalit&agrave;, allora &egrave; consigliabile l&#39;acquisto del NAS LACIE perch&eacute; dotati di una porta gigabit ethernet che pu&ograve; sensibilmente incrementare la velocit&agrave; di backup ed accesso al disco per scorrere i vari backup (il WD purtroppo non dispone di questa funzionalit&agrave;. Peccato). Un altro trucco consiste nel ridurre la frequenza di backup di TimeMachine (per default ogni ora) con l&#39;utilizzo di un comodo tool come <a href="http://timesoftware.free.fr/timemachineeditor/">TimeMachineEditor</a>. Un&#39;altra raccomandazione &egrave; quello di evitare di creare un&#39;immagine troppo piccola, per evitare di perdere i backup. Il doppio della dimensione del disco del vostro Mac &egrave; pi&ugrave; che sufficiente, ma &egrave; anche vero che un backup pi&ugrave; &quot;oculato&quot; pu&ograve; ridurre la necessit&agrave; di spazio: utilizzando le opzioni di TimeMachine &egrave; possibile escludere dal backup file o cartelle che contengono dati magari sottoposti ad altri backup, come video ed immagini.</p>
<p>&nbsp;</p>
<p>Siamo giunti vermente alla fine di questo mini-tutorial. Per qualunque difficolt&agrave; non esitate a contattarmi, ed esorto coloro che hanno problemi nel far funzionare il tutorial al leggere con attenzione i commenti riportati sotto.</p>
<p>&nbsp;</p>
<h2>FAQ</h2>
<ul>
<li><strong>Non riesco ad individuare il Mac-Address della scheda di rete tramite il comando ifconfig</strong><br />
		&Egrave; possibile procedere con questa altra alternativa. Posizionarsi in <em>Preferenze di Sistema</em> -&gt; <em>Network</em>. Poi, selezionare la voce <em>Ethernet</em> e cliccare su &quot;avanzate&quot;. Dopo di che scegliere il tab &quot;Ethernet&quot;. Il primo campo &egrave; proprio quello che ci serve: selezionare il valore ed eliminare i &quot;:&quot;. Quello &egrave; il nome da dare al file sparsebundle, che ricordo non deve avere la mappa delle partizioni e deve essere di dimensione adeguata (sicuramente maggiore dell&#39;attuale occupazione di spazio sul disco).</li>
<li><strong>Nonostante ho seguito correttamente il tutorial, continuo ad avere il messaggio &quot;Impossibile creare l&rsquo;immagine disco di backup&quot;</strong><br />
		Leggendo nei commenti dell&#39;articolo, qualcuno ha riportato l&#39;impossbilit&agrave; di effettuare il backup nonostante le procedure individuate. <cite>Michele Torbidoni</cite> sembra aver individuato come buona una soluzione gi&agrave; apparsa altrove in rete, ma che nel mio caso non aveva correttamente funzionato. La soluzione consisite nel creare il file sparsebundle con il nome &quot;NOMEMAC_MACADDRESS.sparsebundle&quot;. Ad esempio, se il vostro mac si chiama &quot;Casa&quot;, chiamare il file &quot;Casa_0303029292.sparsebundle&quot; (ovviamente il mac address deve essere quello del vostro Mac). Marco suggerisce pi&ugrave; sotto che il nome del Mac non deve avere caratteri speciali e superare gli 8 caratteri. Insomma, provate anche queste soluzioni.</li>
<li><strong>Con Snow Leopard (10.6.1) la procedura non sembra pi&ugrave; funzionare</strong><br />
		Pare che le cose siano cambiate (io ancora devo provare Snow Leopard). <a href="http://www.nervous.it/2009/09/backup-snowleopard-share-di-rete/">Questo articolo</a> mostra come rendere la procedura rifunzionante.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.carminenoviello.com/2008/09/17/time-machine-su-comuni-nas/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
		<item>
		<title>A new Mac user :-)</title>
		<link>http://www.carminenoviello.com/2008/07/13/a-new-mac-user/</link>
		<comments>http://www.carminenoviello.com/2008/07/13/a-new-mac-user/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 11:05:29 +0000</pubDate>
		<dc:creator>Carmine Noviello</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[macbook]]></category>
		<category><![CDATA[macos X leopard]]></category>

		<guid isPermaLink="false">http://www.carminenoviello.name/archives/54</guid>
		<description><![CDATA[Dopo decenni di utilizzo esclusivo di PC ho fatto uno di quei passaggi che si pu&#242; tranquillamente definire epocale . Ho acquistato un notebook Apple, e nello specifico un MacBook nero. Era da molto tempo che mi frullava per la testa l&#8217;idea di comprare un Macintosh, e questo per una serie di motivi. Innanzitutto, secondo [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo decenni di utilizzo esclusivo di PC ho fatto uno di quei passaggi che si pu&ograve; tranquillamente definire epocale <img src="http://www.carminenoviello.name/wp-content/plugins/fckeditor-for-wordpress-plugin/smiles/msn/regular_smile.gif" alt="" />. Ho acquistato un notebook Apple, e nello specifico un MacBook nero. Era da molto tempo che mi frullava per la testa l&#8217;idea di comprare un Macintosh, e questo per una serie di motivi. Innanzitutto, secondo me sono quelli che nel prezzo offrono il maggior numero di funzionalit&agrave;. Oltre ad un design notevole e molto compatto, offrono tutto quello che un notebook dovrebbe dare. Inoltre, sono estremamente silenziosi (soltanto guardando lo schermo si capisce che &egrave; acceso). Poi, la modalit&agrave; di stop &egrave; quella che mi ha sempre affascinato e fatto invidiare i possessori di Mac, ossia la possibilit&agrave; di mettere il Mac in modalit&agrave; standby permanente senza doverlo spegnerlo, e riattivarlo istantaneamente semplicemente alzando lo schermo o premendo qualche tasto. Credo che nel rapporto tra un informatico e il proprio PC la parte pi&ugrave; &quot;difficile&quot; consista proprio nello startup del sistema, e ridurlo a zero mi ha reso molto felice <img alt="" src="http://www.carminenoviello.name/wp-content/plugins/fckeditor-for-wordpress-plugin/smiles/msn/teeth_smile.gif" />. Infine, un aspetto non banale per un informatico &egrave; che oggi con il Mac &egrave; possibile disporre di tutte le piattaforme software in un&#8217;unica macchina: Windows, Mac OS e Linux. E questa cosa, soprattutto per chi sviluppa nell&#8217;ambito web, non &egrave; una cosa banale.</p>
<p>Che dire: sono 48 ore che lo sto usando attivamente e al momento non mi sembra per nulla necessario installarci su Windows o altri sistemi. Al modello di interazione del Mac OS ci si abitua molto presto, e devo dire che &egrave; molto intuitivo. Ho gi&agrave; installato Xcode 3.0, fornito gratuitamente nel DVD di installazione del sistema, e presto prover&ograve; a vedere come realizzare programmi. Soprattutto perch&eacute;, tra le tipologie di progetti disponibili in Xcode ho visto che c&#8217;&egrave; ne &egrave; una molto interessante: Python-Cocoa <img alt="" src="http://www.carminenoviello.name/wp-content/plugins/fckeditor-for-wordpress-plugin/smiles/msn/teeth_smile.gif" />. Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.carminenoviello.com/2008/07/13/a-new-mac-user/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Il progetto stacktrace.it</title>
		<link>http://www.carminenoviello.com/2008/06/16/il-progetto-stacktraceit/</link>
		<comments>http://www.carminenoviello.com/2008/06/16/il-progetto-stacktraceit/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 05:28:39 +0000</pubDate>
		<dc:creator>Carmine Noviello</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[stacktrace]]></category>

		<guid isPermaLink="false">http://www.carminenoviello.name/archives/50</guid>
		<description><![CDATA[Stacktrace.it &#232; un nuovo progetto editoriale, lanciato da Antonio Cangiano, che da alcuni mesi si &#232; affacciato sul panorama della blogosfera italiana. Stacktrace.it &#232; una rivista informatica, ma per la prima volta in vita mia vedo finalmente la possibilit&#224; di poter pubblicare articoli non solo di un certo spessore ma anche relativi a temi che [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://stacktrace.it/">Stacktrace.it</a> &egrave; un nuovo progetto editoriale, lanciato da <a href="http://antoniocangiano.com/">Antonio Cangiano</a>, che da alcuni mesi si &egrave; affacciato sul panorama della blogosfera italiana. Stacktrace.it &egrave; una rivista informatica, ma per la prima volta in vita mia vedo finalmente la possibilit&agrave; di poter pubblicare articoli non solo di un certo spessore ma anche relativi a temi che non sono considerati &#8216;commercialmente&#8217; appetibili, e che molto difficilmente troverebbero collocazione altrove. Il progetto &egrave; in realt&agrave; <a href="http://stacktrace.it/chi-siamo/">molto pi&ugrave; ambizioso</a> perch&eacute; &quot;<em>Stacktrace.it vuole essere un sito che non si limita a scimmiottare i vari blog internazionali, ma che propone contenuti originali di alta qualit&agrave; che possano informare, istruire, ma soprattutto influenzare la crescita del nostro settore, cronicamente arretrato rispetto al resto dei paesi industrializzati</em> &quot;. Conosco molte delle persone che collaborano al progetto, e devo dire che sicuramente riusciranno se non altro a costruire un punto di riferimento per gli sviluppatori italiani, come hanno gi&agrave; fatto in altri contesti.</p>
<p>Da parte mia ho cominciato a collaborare con Stacktrace.it con una miniserie di due articoli in cui provo a riportare quelle che sono state le mie esperienze su aspetti di management nelle piccole e medie aziende informatiche. Il primo articolo &egrave; stato pubblicato oggi, e si intitola &quot;<a href="http://stacktrace.it/articoli/2008/06/il-management-del-software-nelle-microaziende1/">Il management del software nelle microaziende</a>&quot;, e vuole dare una serie di indicazioni su quelle che io definisco le &quot;azioni a costo zero ma dai benefici inestimabili&quot; che una microazienda informatica dovrebbe adottare nel processo di produzione.<br />
Commenti come sempre apprezzati, ma ovviamente questa volta sul sito di <a href="http://stacktrace.it/">Stacktrace.it</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.carminenoviello.com/2008/06/16/il-progetto-stacktraceit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>C# visto da un pythonista/1</title>
		<link>http://www.carminenoviello.com/2008/06/03/c-visto-da-un-pythonista1/</link>
		<comments>http://www.carminenoviello.com/2008/06/03/c-visto-da-un-pythonista1/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 17:46:53 +0000</pubDate>
		<dc:creator>Carmine Noviello</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.carminenoviello.name/archives/48</guid>
		<description><![CDATA[Era da un po&#8217; di tempo che mi solleticava l&#8217;idea di lanciarmi nello studio di un nuovo linguaggio di programmazione, visto che sono ormai 8 anni e pi&#249; che programmo esclusivamente in Python. E avendo abbandonato di sana pianta i linguaggi a tipizzazione statica, l&#8217;idea era proprio quella di ritornare a studiarne uno. Complice il [...]]]></description>
			<content:encoded><![CDATA[<p>Era da un po&#8217; di tempo che mi solleticava l&#8217;idea di lanciarmi nello studio di un nuovo linguaggio di programmazione, visto che sono ormai 8 anni e pi&ugrave; che programmo esclusivamente in Python. E avendo abbandonato di sana pianta i linguaggi a tipizzazione statica, l&#8217;idea era proprio quella di ritornare a studiarne uno.<br />
Complice il talk di <a href="http://www.pycon.it/pycon2/schedule/talk/questo-qui-non-e-un-pitone/">Federico di Gregorio al PyCon Due</a>, la mia attenzione &egrave; caduta su C#, il linguaggio di elezione per la piattaforma .NET di Microsoft. La scelta &egrave; stata effettuata per i seguenti motivi:</p>
<ol>
<li>Non &egrave; Java e in quanto tale <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">non &egrave; molto diffuso</a></li>
<li>Non &egrave; un linguaggio di &#8216;basso livello&#8217; in cui ci si deve preoccupare di gestire l&#8217;allocazione di variabili, puntatori, ecc</li>
<li><span style="font-family: Verdana;">&Egrave;</span> sicuramente un linguaggio di ispirazione pi&ugrave; moderna</li>
<li>Non si &egrave; necessariamente vincolati alla Microsoft</li>
</ol>
<p>Quest&#8217;ultimo punto &egrave; quello che mi ha spinto ad avventurarmi nell&#8217;impresa: nonostante C# sia un linguaggio di casa Microsoft, &egrave; stato standardizzato (fino alla versione 2.0, ma &egrave; in corso di standardizzazione la 3.0) dalla ECMA, e grazie al progetto <a href="http://www.mono-project.com/">Mono</a> &egrave; possibile sviluppare e distribuire applicazioni C# (attenzione, ho detto C# e non .NET) su qualunque piattaforma (Linux, Win, Mac, UNIX). In realt&agrave; conoscevo gi&agrave; il progetto Mono, e in passato aveva provato a darci uno sguardo. Fino a 2 anni fa poteva considerarsi poco pi&ugrave; di un progetto sperimentale a vita (una sorta di <a href="http://www.winehq.org/">Wine</a>), ma di recente grazie al contributo di Novell si pu&ograve; considerare una piattaforma Open completa ed affidabile, che sta in tempi brevi supportando anche le versioni 3.0 e 3.5 di .NET.<br />
Quindi, secondo me, l&#8217;abbinata C# + Mono pu&ograve; essere considerata una valida alternativa per lo sviluppo di applicazioni multipiattaforma.</p>
<p><span id="more-48"></span></p>
<p>Ma veniamo al C#. Beh, devo dire che ritornare dopo anni a pensare &#8216;statico&#8217; &egrave; stato uno shock, molto ma molto pi&ugrave; forte del processo inverso, ossia abituarsi alla tipizzazione dinamica venendo da quella statica. La tipizzazione dinamica porta a pensare in termini di funzionalit&agrave; e di interfacce di oggetto (cosa ancor pi&ugrave; vera in Python che ha potenti funzionalit&agrave; di introspezione), a concentrarsi sulla struttura del programma e non sulla coerenza di tipi e variabili e a generare codice molto &#8216;prolisso&#8217; e dispersivo. Insomma, il <a href="http://en.wikipedia.org/wiki/Duck_typing">duck typing</a> spinge il programmatore a scrollarsi dalle frustrazioni tipiche che si hanno quando si programma con linguaggi pi&ugrave; tradizionali. E a dirla tutta, ho la sensazione che la tipizzazione statica sia la preistoria dell&#8217;informatica (e dell&#8217;ingegneria del software stessa), e che forse Microsoft poteva osare un po&#8217; di pi&ugrave; nel proporre un linguaggio nuovo. Ma ammetto che in genere questo tema divide non poco i programmatori.<br />
Mettendo per un attimo da parte la tipizzazione, cosa c&#8217;&egrave; in C# che pu&ograve; accumunarlo al Python, o magari renderlo ancora pi&ugrave; distante? Secondo <a href="http://www.pycon.it/pycon2/schedule/talk/questo-qui-non-e-un-pitone/">Federico</a>, addirittura a tratti C# &egrave; un Python con le parentesi graffe. Sar&agrave; cos&igrave;?<br />
Queste sono una serie di conclusioni a cui sono giunto dopo i primi 10 capitoli di <a href="http://www.oreilly.com/catalog/9780596527433/index.html">questo libro della O&#8217;Reilly</a>:</p>
<ol>
<li><em>quasi 100 keyword</em>: troppe. Punto.</li>
<li><em>le parentesi graffe se le potevano risparmiare</em>: non se ne pu&ograve; pi&ugrave;! Sono 35 anni che ci ritroviamo queste maledette {} d&#8217;avanti, e veramente &egrave; troppo. Innanzitutto, il codice sorgente diventa estremamente lungo e farraginoso, quando con il &#8216;:&#8217; di Python si riesce a rendere tutto molto pi&ugrave; compatto e pulito
<p class="code"><code>public void myFunc(int param) {<br />
    &nbsp;&nbsp;&nbsp;&nbsp; if (param &gt; 1) {<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(i);<br />
    &nbsp;&nbsp;&nbsp;&nbsp; }<br />
    }</code></p>
<p>    quando, invece, in Python basta scrivere:<tt><br />
    </tt></p>
<p class="code"><code>def myFunc(param):<br />
    &nbsp;&nbsp;&nbsp; if param &gt; 1: <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print param</code></p>
<p>    Poi, a me sta venendo il tunnel carpale per digitare la combinazione Altgr+Shift+[<br />
    &nbsp;</li>
<li><em>datemi la print</em>: si &egrave; vero, anche Python 3.0 avr&agrave; la sua brava funzione <tt>print()</tt> al posto di una keyword, ma <tt>print()</tt> &egrave; infinitamente pi&ugrave; breve di <tt>Console.WriteLine()<br />
    </tt></li>
<li><em>ok agli shared references</em>: anche C# implementa il modello degli shared references come Python. In parole povere, una variabile C# &egrave; una terna del tipo (nome, tipo, riferimento), e i tipi primitivi generano oggetti immutabili. Quindi l'operazione di assegnamento implica far condividere a due nomi lo stesso riferimento ad un oggetto. L'unica differenza con Python &egrave; che il passaggio di parametri pu&ograve; avvenire anche nella modalit&agrave; 'ref', dove ad essere passata come parametro non &egrave; il solo riferimento ma tutta la varabile (poi, voglio capire perch&eacute; tutte le guide e i manuali che ho letto hanno un'abilit&agrave; tale a complicare l'argomento che difficilmente si riesce a comprendere che il concetto che c'&egrave; sotto &egrave; molto semplice).</li>
<li><em>non bastavano <tt>protected</tt>, <tt>private </tt>e </em><tt><em>public</em>: </tt>C# supporta i tipici modificatori di accesso del filone C++ (in realt&agrave; manca <tt>friend</tt>), ma ne introduce di nuovi come <tt>internal</tt> (accessibile dalle classi dello stesso assembly - una sort di <tt>friend </tt>con scope a visibilit&agrave; di modulo), ma anche <tt>override</tt> per indicare che una sottoclasse sta effettuando l'overriding di un metodo. Se non si &egrave; capito, faccio parte di quelli che sono convinti che impiegare 10 giorni per decidere se una metodo o un attributo devono essere <tt>private</tt>, <tt>internal </tt>o <tt>public </tt>&egrave; solo una perdita di tempo e un offesa all'intelligenza dei programmatori.</li>
<li><em>polimorfismo ed ereditariet&agrave; controllata</em>: C#, sulla falsa riga di C++, permette di controllare il polimorfismo con l'uso del modificatore <tt>virtual</tt>, ma anche con <tt>override </tt>per indicare espressamente che un metodo effettua l'overriding di un altro. Anche l'ereditariet&agrave; pu&ograve; essere controllata e anche impedita per mezzo della keyword <tt>sealed </tt>(l'equivalente del <tt>final </tt>Java). Tutti i tipi primitivi la usano, e quindi non si pu&ograve; derivare, ad esempio, dal tipo <tt>String</tt>, cosa che al contrario in Python &egrave; possibile da un bel po' di tempo (versione 2.2), ma &egrave; anche vero che le stringhe C# supportano in maniera nativa Unicode, cosa che in Python non avverr&agrave; prima della versione 3 con l'unificazione di oggetti <tt>str</tt> e <tt>unicode</tt>. 1-1 e palla al centro.</li>
<li><em>interessante l'implementazione del costrutto di interfaccia</em>: C# implementa il costrutto di interfaccia. Ora, non c'&egrave; molto da meravigliarsi dato che siamo in presenza di un linguaggio moderno a tipizzazione statica, per&ograve; lo fa in maniera molto interessante. Infatti, &egrave; possibile estendere interfacce (creare interfacce che ereditano da altre interfacce), &egrave; possibile definire polimorfismo a livello di interfaccia, &egrave; possibile definire vincoli sui tipi dei 'generics' in base ad un'interfaccia prestabilita (con la keyword <tt>where</tt>), esporre selettivamente i metodi di un interfaccia.</li>
<li><em>generics, servono</em>: mancavano nelle prime versioni di C#, ci sono dal 2.0. In un linguaggio a tipizzazione statica, se se ne abbraccia il credo, servono. Interessante la possibilit&agrave; di poter definire vincoli sull'interfaccia del tipo generico T.</li>
<li><em>direttamente da Python, i generatori</em>: pardon, gli enumeratori. Esattamente lo stesso concetto presente in Python (stessa keyword <tt>yield</tt>), ma basati su un'interfaccia specifica <tt>IEnumerable&lt;T&gt;</tt>. Inutile dire che sono utilissimi.</li>
<li><em>dizionari con keyword arbitrarie</em>: il tipo <tt>Dictionary&lt;K,V&gt;</tt> (che non &egrave; primitivo come in Python) consente di specificare tipi arbitrari per le chiavi, e non solo oggetti immutabili come in Python, a patto che tale oggetto non cambi nel flusso di esecuzione.</li>
<li><em>possibilit&agrave; di specificare funzioni di conversioni tra tipi</em>: questa &egrave; una funzionalit&agrave; che reputo sublime. A differenza di quanto si legge in giro, C# &egrave; un linguaggio fortemente tipato e quindi non c'&egrave; il concetto di <em>cast </em>presente nel C (che &egrave; debolmente tipato). Quello che viene chiamato erroneamente cast, &egrave; la possibilit&agrave; del C# di specificare le funzioni di conversione dei tipi, sia implicite sia esplicite. Ad esempio:<br />
    &nbsp;     </p>
<p class="code"><code>     public static implicit operator MyType(int i) {<br />
    &nbsp;&nbsp;&nbsp; //Qui il codice di conversione da intero<br />
    }<br />
    public static explicit operator int(MyType t) {<br />
    &nbsp;&nbsp;&nbsp; //Qui il codice di conversione verso intero<br />
    }<br />
    ...<br />
    public static void Main(string[] args) {<br />
    &nbsp;&nbsp;&nbsp; MyType t = 10; //Usa la conversione implicita<br />
    &nbsp;&nbsp;&nbsp; int a = (int)t; //Usa la conversione esplicita<br />
    }</code></p>
</li>
</ol>
<p>&nbsp;</p>
<p>Queste sono le prime osservazioni che riesco a fare su C#. Man mano che andr&ograve; avanti nello studio del linguaggio e del framework Mono poster&ograve; nuovi articoli. <em>Nel frattempo, come sempre, sono apprezzati commenti ed osservazioni</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.carminenoviello.com/2008/06/03/c-visto-da-un-pythonista1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Unicode in 5 minuti</title>
		<link>http://www.carminenoviello.com/2008/05/20/unicode-in-5-minuti/</link>
		<comments>http://www.carminenoviello.com/2008/05/20/unicode-in-5-minuti/#comments</comments>
		<pubDate>Tue, 20 May 2008 15:18:12 +0000</pubDate>
		<dc:creator>Carmine Noviello</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ascii]]></category>
		<category><![CDATA[byte-string]]></category>
		<category><![CDATA[iso8859-1]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[latin1]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://www.carminenoviello.name/archives/44</guid>
		<description><![CDATA[Oggi giorno nessun programmatore pu&#242; ignorare Unicode: con la diffusione di Internet e la pubblicazione dei contenuti via web &#232; diventato impossibile non conoscere questo sistema di caratteri e, grazie al fatto che sono sempre di pi&#249; i linguaggi di programmazione che lo trattano in maniera nativa, &#232; diventato molto semplice poterlo adoperare nelle proprie [...]]]></description>
			<content:encoded><![CDATA[<p>Oggi giorno nessun programmatore pu&ograve; ignorare Unicode: con la diffusione di Internet e la pubblicazione dei contenuti via web &egrave; diventato impossibile non conoscere questo sistema di caratteri e, grazie al fatto che sono sempre di pi&ugrave; i linguaggi di programmazione che lo trattano in maniera nativa, &egrave; diventato molto semplice poterlo adoperare nelle proprie applicazioni. Sicuro??!?!</p>
<p>A leggere in giro nella rete sembrerebbe esattamente il contrario. Praticamente tutti i giorni si legge di programmatori disperati che non sanno come trattare stringhe di testo contenenti caratteri Unicode, e spesso le soluzioni trovate sono alquanto <i>na&iuml;f</i> e sbagliate. Insomma, lo Unicode &egrave; per mia esperienza la bestia nera degli informatici del nuovo millennio, nonostante il web sia pieno di ottimi tutorial molto completi per approfondire la materia. <br />
	E forse &egrave; proprio questo il nocciolo della questione: le guide, i tutorial, gli <i>howto </i>elaborati per i vari linguaggi di programmazione spesso sono troppo completi ed esaustivi. Per carit&agrave;, lungi da voler criticare il lavoro svolto da altre persone, ma per mia esperienza personale in questo tema pi&ugrave; si tiene basso il livello e meglio si comprende qual &egrave; esattamente il problema. Per poi successivamente magari approfondire tutti i dettagli per gli amanti della storia dell&#39;informatica.</p>
<p>In questo mini tutorial mi propongo di trascodificare su carta l&#39;esperimento effettuato alla <a href="http://www.pycon.it">PyCon Due</a>, e cio&egrave; presentare Unicode in soli 5 minuti. Si, avete capito bene. Vi chiedo di impiegare soltanto 5 minuti del vostro tempo, in cui vi impongo di rilassarvi e di dimenticare tutto quello che avete letto in giro fino ad ora. <br />
	Per illustrarvi gli esempi adoperer&ograve; i linguaggi di programmazione Python e Java, ma sappiate che tutto quello che dir&ograve; potr&agrave; essere direttamente riportato in qualunque altro linguaggio di programmazione come C#, Visual Basic.NET, ecc &#8211; se vi aspettavate di leggere anche &#39;PHP&#39; sappiate che ancora oggi, con PHP5, <a href="http://www.ibm.com/developerworks/library/os-php-unicode/index.html">non c&#39;&egrave; un supporto nativo alle stringhe Unicode</a>.</p>
<p>&nbsp;</p>
<p>Relax. Respiro profondo. Via.</p>
<p>&nbsp;<span id="more-44"></span></p>
<h3><span style="color: rgb(51, 51, 153);"><b>Minuto 1</b></span><b> &#8211; Lo standard ASCII 7-bit non &egrave; in grado di rappresentare tutti i caratteri di tutti gli alfabeti esistenti<br />
	</b></h3>
<p>L&#39; <a href="http://it.wikipedia.org/wiki/ASCII">ASCII</a> &egrave; uno standard di codifica dei caratteri che associa i numeri da 0 a 127 ad un carattere ben preciso (non bisogna dimenticare che i computer sanno trattare esclusivamente numeri). Nello specifico, soltanto i numeri da 32 a 126 corrispondono a caratteri stampabili, tutti gli altri sono i cosiddetti caratteri di controllo. I caratteri contemplati dallo standard ASCII sono soltanto i caratteri dell&#39;alfabeto latino (dalla A alla Z, maiuscoli e minuscoli). So gi&agrave; a cosa state pensando: &quot;<i>ma sulla mia tastiera ci sono anche le vocali accentate</i>&quot;. Ebbene questo &egrave; un punto di confusione: lo standard ASCII originario a 7 bit fu successivamente esteso a 8 bit per contemplare caratteri di alfabeti specifici (si parla per l&#39;appunto di <i>ASCII esteso</i>). Questi 128 caratteri in pi&ugrave; furono adoperati per codificare lettere specifiche dei singoli alfabeti, come le vocali accentate. Il compito di rimappare i codici numerici a lettere di un alfabeto era demandato ai cosiddetti <i>codepage</i>, che nel caso dell&#39;alfabeto italiano (e non solo) per i PC equipaggiati con MS-DOS era il <a href="http://msdn.microsoft.com/en-us/library/cc195064.aspx">codepage 850</a>. Tuttavia, se 128 caratteri aggiuntivi sono sufficienti a rappresentare tutti i caratteri degli alfabeti dei paesi &#39;occidentali&#39; (comprese le vocali accentate, lettere con dieresi, ecc), non lo sono affatto per quei paesi i cui alfabeti superano abbondantemente tale numero di caratteri (si pensi agli ideogrammi cinesi). Insomma,</p>
<div class="boxriassuntivo"><i><b>l&#39;ASCII non &egrave; lo standard idoneo per trattare tutti gli alfabeti esistenti</b></i>.</div>
<h3>&nbsp;</h3>
<h3><b><span style="color: rgb(51, 51, 153);">Minuto 2</span> &#8211; UNICODE &egrave; uno standard che associa ad un carattere un solo codice numerico</b></h3>
<p>Per aggirare questa intrinseca limitazione dell&#39;ASCII, le principali aziende del settore informatico unirono i loro sforzi per formare un consorzio con l&#39;obiettivo di standardizzare tutti i caratteri esistenti in tutti gli alfabeti possibili: lo <a href="http://www.unicode.org/consortium/consort.html"><i>Unicode Consortium</i></a>.<br />
	Lo Unicode &egrave; uno standard che assegna univocamente un numero ad ogni carattere di scrittura testi, indipendentemente dalla lingua, dalla particolare piattaforma software, dalla sua specifica rappresentazione in bit. Con Unicode ogni carattere ha il suo numero e non esistono caratteri con lo stesso numero. Ad esempio, il numero in base dieci 224 corrisponde alla lettera &#39;&agrave;&#39;; mentre il numero in base dieci 1590 alla lettera araba &#39;sad&#39; (ض). In realt&agrave; i codici Unicode sono rappresentati in esadecimale, con 4 o 6 cifre, e nello specifico nella forma &#39;U+XXXX&#39;. Ad esempio, la lettera accentata &#39;&agrave;&#39; ha rappresentazione &#39;U+00E0&#39;, mentre la lettera araba &#39;sad&#39; (ض) ha rappresentazione &#39;U+0636&#39;.</p>
<p>Usare Unicode &egrave; semplicissimo e bastano pochissimi passi.</p>
<ol>
<li>Dirigetevi sul sito web di Unicode e nello specifico nella sezione &#39;<a href="http://www.unicode.org/charts/"><i>code charts</i></a>&#39;;</li>
<li>Scegliere una tavola di una famiglia di caratteri, ad esempio la tavola <a href="http://www.unicode.org/charts/PDF/U0080.pdf">latin1</a> della famiglia degli alfabeti europei;</li>
<li>Vi apparir&agrave; un documento PDF contenente la tavola dei caratteri latin1, (di cui sotto &egrave; riportato un estratto), ed incrociando i valori delle colonne con quelli delle righe &egrave; possibile ottenere il codice Unicode del carattere desiderato.</li>
</ol>
<p><img align="middle" alt="Unicode latin1 chart" src="http://www.carminenoviello.com/wp-content/uploads/2008/05/unicode-chart.jpg" /></p>
<p>Come possiamo sfruttare le tavole Unicode nei nostri programmi? Beh, nulla di pi&ugrave; semplice: si riporta banalmente il codice Unicode del carattere desiderato nelle stringhe di testo in formato Unicode, usando la sequenza di escape &#39;\uXXXX&#39;, dove XXXX &egrave; il codice esadecimale Unicode.<br />
	Ad esempio, in Python basta scrivere:</p>
<p class="code"><code>&gt;&gt;&gt; data = u&#39;\u00E0&#39;<br />
	&gt;&gt;&gt; print data<br />
	&agrave;</code></p>
<p>In Java, &egrave; praticamente la stessa cosa:</p>
<p class="code"><code><b>public </b>class Prova {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>public static void</b> main(String[] args) {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String data = &quot;\u00e0&quot;;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(data);<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
	}</code></p>
<p>
	Fine. Non c&#39;&egrave; nessun altra informazione da aggiungere. Unicode &egrave; semplicemente questo, ed &egrave; importante sottolineare che lo Unicode non dice NULLA su come questi caratteri debbano essere rappresentati in macchina (infatti, spesso si parla di caratteri &#39;idealizzati&#39;). Questo significa che da solo Unicode non basta a poter trattare i testi con questa codifica. Insomma,</p>
<div class="boxriassuntivo"><i><b>Unicode &egrave; uno standard che assegna univocamente un numero ad ogni carattere di scrittura testi, indipendentemente dalla lingua, dalla particolare piattaforma software, dalla sua specifica rappresentazione in bit</b></i></div>
<p>&nbsp;</p>
<h3><span style="color: rgb(51, 51, 153);"><b>Minuto 3</b></span><b> &#8211; Un <i>codec </i>&egrave; una funzione che data una sequenza di caratteri Unicode restituisce una stringa di byte </b></h3>
<p>Come gi&agrave; detto nel minuto precedente, una stringa di caratteri Unicode &egrave; una sorta di stringa &#39;idealizzata&#39;, che necessita di un ulteriore trasformazione per poter essere salvata, scambiata tra sistemi, interpretata da un browser. Tale processo di trasformazione in stringa di byte (o anche stringa binaria) &egrave; demandato ad un <i>codec</i>. Questo &egrave; il passaggio pi&ugrave; delicato ed &egrave; anche quello dove si hanno tutte le difficolt&agrave; con Unicode. ASCII era una codifica che si occupava di standardizzare sia i caratteri sia la loro rappresentazione in bit. Unicode al contrario, si limita a standardizzare i caratteri lasciando ai codec la seconda funzione.</p>
<p>Un codec non &egrave; altro che&nbsp; una funzione di trasformazione: dato un carattere Unicode restituisce la corrispondente sequenza di byte. Esistono diversi codec compatibili con Unicode e la maggior parte di loro non &egrave; in grado di codificare tutti i caratteri standardizzati dallo Unicode. Ad esempio, <a href="http://en.wikipedia.org/wiki/ISO_8859-1">ISO-8859-1</a> &egrave; il codec di trasformazione dei caratteri dell&#39;alfabeto latino che, ad esempio, associa alla lettera &#39;&agrave;&#39; (U+00E0) la stringa di byte &quot;<span style="font-family: Courier New;">\xe0</span>&quot; (questa procedura di trasformazione &egrave; anche detta <i>encoding</i>). ISO-8859-1 &egrave; un codec a lunghezza fissa, ossia associa sempre e solo un byte per i caratteri che pu&ograve; codificare (ad un codec specifico per l&#39;alfabeto latino non potrete mai far codificare un ideogramma cinese). <br />
	UTF-8 (acronimo di <a href="http://en.wikipedia.org/wiki/UTF-8"><i>Unicode Trasformation Format</i></a>) &egrave; un altro codec, a lunghezza variabile, dove un carattere pu&ograve; essere rappresentato con un minimo di un byte fino ad un massimo di quattro byte. UTF-8 &egrave; in grado di rappresentare qualunque carattere dello standard Unicode e, ad esempio, associa la stringa di byte (due in questo caso) &#39;<span style="font-family: Courier New;">\xc3\xa0</span>&#39; alla lettera &#39;&agrave;&#39; (U+00E0).</p>
<p>Come fare per ottenere una stringa di byte a partire da una stringa idealizzata Unicode? Nulla di pi&ugrave; facile. In Python possiamo fare questo per mezzo del metodo &#39;<span style="font-family: Courier New;">encode()</span>&#39; di un oggetto <span style="font-family: Courier New;">unicode</span>:</p>
<p class="code"><code>&gt;&gt;&gt; a = u&#39;\u00e0&#39;<br />
	&gt;&gt;&gt; a.encode(&#39;iso8859-1&#39;)<br />
	\xe0<br />
	&gt;&gt;&gt; a.encode(&#39;utf8&#39;)<br />
	\xc3\xa0 </code></p>
<p>In Java:</p>
<p class="code"><b><code>public class </code></b><code>Prova {<br />
	&nbsp;&nbsp;&nbsp; <b>public static void</b> main(String[] args) <b>throws </b>java.io.UnsupportedEncodingException {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String data = &quot;\u00e0&quot;;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] byte_string = data.getBytes(&quot;UTF8&quot;);<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(byte_string);<br />
	&nbsp;&nbsp;&nbsp; }<br />
	}<br />
	</code></p>
<p>&nbsp;</p>
<p>L&#39;operazione inversa a quella di <i>encoding</i> &egrave; il <i>decoding </i>di una stringa di byte per ottenere una stringa Unicode. Supponiamo di avere un file di testo, codificato con un dato encoding, ad esempio UTF-8. Per ottenere una stringa Unicode in Python avremo:</p>
<p class="code"><code>&gt;&gt;&gt; ustr = open(&quot;filename&quot;).read().decode(&#39;UTF8&#39;)<br />
	&gt;&gt;&gt; type(ustr)<br />
	&lt;type &#39;unicode&#39;&gt;</code></p>
<p>In Java avremo:</p>
<pre class="code"><b>import </b>java.io.*;

<b>public class</b> Prova {
    <b>public static void</b> main(String[] args) <b>throws </b>java.io.UnsupportedEncodingException {
         <b>try </b>{
             BufferedReader rdr = <b>new </b>BufferedReader(
                  <b>new </b>InputStreamReader(<b>new </b>FileInputStream(&quot;filename&quot;),
                  &quot;UTF-8&quot;));
             String line = rdr.readLine();
             System.out.println(line);
         } <b>catch </b>(IOException exc) {
         System.err.println(&quot;I/O error&quot;);
     }
    }
}
</pre>
<p>&nbsp;</p>
<p>La figura sotto schematizza il processo di <i>encoding/decoding</i>.</p>
<p style="text-align: center;"><img alt="" src="http://www.carminenoviello.com/wp-content/uploads/2008/05/schemaunicode.jpg" /></p>
<p>&nbsp;</p>
<p>Riassumendo,</p>
<div class="boxriassuntivo"><i><b>Un codec &egrave; una funzione di trasformazione di un carattere Unicode in una stringa di byte serializzabile in macchina</b></i></div>
<p>&nbsp;</p>
<h3><span style="color: rgb(51, 51, 153);"><b>Minuto 4</b></span><b> &#8211; Per interagire con una stringa di byte &egrave; necessario conoscere l&#39;<i>encoding </i>con cui &egrave; stata codificata</b></h3>
<p>L&#39;ultimo concetto importante da tenere bene a mente &egrave; che in generale &egrave; indecidibile dire una stringa di byte con quale encoding &egrave; stata generata. Ad esempio, consideriamo la sequenza di due byte &#39;<span style="font-family: Courier New;">\xc3\xa0</span>&#39;. Da umani non ci risulta difficile riconoscere che siamo alla presenza della lettera &#39;&agrave;&#39; codificata in UTF-8. Tuttavia, nulla vieta di essere in presenza di due caratteri codificati con un codec a 1 byte. Ad esempio, in Python in maniera perfettamente lecita possiamo scrivere:</p>
<p class="code"><code>&gt;&gt;&gt; print u&#39;\u00E0&#39;.encode(&#39;utf&#39;8&#39;).decode(&#39;ISO-8859-1&#39;), &quot;-&quot;<br />
	&Atilde; -<br />
	</code></p>
<p>Con questo frammento di codice stiamo dicendo: prendi il carattere Unicode U+00E0 (&agrave;), codificalo con l&#39;encoding UTF-8 e la stringa di byte ottenuta decodificala con ISO-8859-1. Quello che otteniamo non &egrave; pi&ugrave; il carattere originario di partenza, perch&eacute; il primo byte &#39;\<span style="font-family: Courier New;">xc3</span>&#39; viene interpretato come il carattere &#39;&Atilde;&#39; mentre il secondo &#39;<span style="font-family: Courier New;">\xa0</span>&#39; come spazio, perch&eacute; cos&igrave; contemplati dallo standard.<br />
	Questo esempio ci fa capire che quando si manipolano dati, qualunque sia la provenienza, &egrave; importante sapere con che codec sono stati codificati. Il caso pi&ugrave; tipico si verifica quando si cerca di manipolare stringhe di byte con gli encoding di default, che nel caso di Python &egrave; &#39;ascii&#39; su tutte le piattaforme (come configurato nel file <span style="font-family: Courier New;">site.py</span>), mentre in Java &egrave; un parametro dipendente dal particolare sistema: su Windows &egrave; &#39;cp1252&#39;, come indicato dalla funzione <font face="Courier New, Courier, mono" size="2">System.getProperty(&quot;file.encoding&quot;)</font><font size="2">, ed &egrave; possibile alterarlo alla riga di comando della JVM con il parametro</font><font face="Courier New, Courier, mono" size="2"> -Dfile.encoding=&lt;codec&gt;</font>. <br />
	Ad esempio, sempre dall&#39;esempio di prima, adoperando l&#39;encoding di default di Python abbiamo:</p>
<p class="code"><code>&gt;&gt;&gt; data=open(&quot;curr.txt&quot;).read().decode()<br />
	Traceback (most recent call last):<br />
	&nbsp; File &quot;C:\Documents and Settings\cnoviello\Desktop\pro.py&quot;, line 1, in &lt;module&gt;<br />
	&nbsp;&nbsp;&nbsp; data=open(&quot;curr.txt&quot;).read().decode(&#39;ascii&#39;)<br />
	UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xef in position 0: ordinal not in range(128)<br />
	</code></p>
<p>ottenendo un messaggio di errore molto noto a tutte le persone che hanno avuto a che fare con problemi di gestione dello Unicode. Altra alternativa &egrave; rappresentata dalla funzionalit&agrave; di &#39;replace&#39; della funzione &#39;<span style="font-family: Courier New;">decode()</span>&#39;: &egrave; possibile specificare al decodificatore di sostituire tutte le sequenze di byte che non hanno corrispondenza nel codec con il carattere di sostituzione Unicode U+FFFD (il famigerato � che tipicamente visualizzano i browser quando non sanno decodificare correttamente una sequenza di byte).</p>
<p class="code"><code>&gt;&gt;&gt; print u&#39;\u00e0&#39;.encode(&#39;utf8&#39;).decode(&#39;ascii&#39;, &#39;replace&#39;)<br />
	��<br />
	</code></p>
<p>E&#39; importante, quindi, che l&#39;applicazione abbia una gestione consistente dell&#39;encoding della fonte dati: si fissa un codec e si continuer&agrave; ad adoperarlo sempre. A meno di non sapere con esattezza che cosa si sta facendo. Ad esempio, &egrave; molto semplice convertire stringhe di byte codificate in un dato encoding sorgente in uno nuovo. Il seguente codice Java fa proprio questo:</p>
<pre class="code"><b>public static byte</b>[] convert(<b>byte</b>[] data, String startEncoding, String targetEncoding) {
      //Si decodifica la stringa di byte grazie al costruttore della
      //classe String, ottenendo una stringa Unicode
      String str = new String(data, srcEncoding);

      //Si ricodifica la stringa dato un encoding prefissato
      <b>byte</b>[] result = str.getBytes(targetEncoding);

      <b>return </b>result;
}
</pre>
<p>Un discorso analogo pu&ograve; essere fatto nel caso dei documenti HTML. Ricordarsi sempre di specificare l&#39;encoding dei propri documenti tramite la direttiva:</p>
<pre class="code" id="line1"><code>&lt;<span class="start-tag">meta</span><span class="attribute-name"> http-equiv</span>=<span class="attribute-value">content-type </span><span class="attribute-name">content</span>=<span class="attribute-value">&quot;text/html; charset=UTF-8&quot;</span>&gt;</code></pre>
<p>&nbsp;</p>
<p>Riassumendo,</p>
<div class="boxriassuntivo"><i><b>Ha senso parlare di stringhe di byte soltanto se si conosce l&#39;encoding con cui &egrave; stata codificata<br />
	</b></i></div>
<h3>&nbsp;</h3>
<h3><span style="color: rgb(51, 51, 153);"><b>Minuto 5</b></span><b> &#8211; Utilizzare sempre il codec UTF-8</b></h3>
<p>Dagli esempi visti in precedenza emerge che la scelta del codec da utilizzare per i propri dati non &egrave; banale, ed &egrave; intrinsecamente connessa con la tipologia di caratteri che si andr&agrave; a gestire. Se ci si limita ai soli caratteri dell&#39;alfabeto latino, la classica codifica ISO-8859-1, nota anche come latin1, o la cp1252 di Windows (quella di default per le localizzazioni di Windows per i paesi &#39;occidentali&#39;) &egrave; pi&ugrave; che sufficiente. Tuttavia, questi encoding non sono in grado di codificare caratteri non latini (si provi per esercizio a codificare in ISO8859-1 il carattere Unicode U+03A9 che corrisponde alla lettera greca &#39;&Omega;&#39;), e soprattutto nel caso di applicazioni web potrebbero essere la scelta meno adatta. Per questo motivo, oggi UTF-8 &egrave; l&#39;encoding diventato standard nel mondo Web, ed &egrave; consigliabile sviluppare le proprie applicazioni per gestire stringhe di byte codificate con questo <i>codec</i>.</p>
<p>Riassumendo,</p>
<div class="boxriassuntivo"><i><b>Utilizzare UTF-8 come encoding standard per la codifica di stringhe Unicode<br />
	</b></i></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Come visto, occorrono pochi minuti per apprendere le basi di Unicode. I concetti di base sono quelli. Bisognerebbe poi accennare al fatto che Unicode nasce per essere retrocompatibile con ASCII 7bit (i primi caratteri sono proprio quelli dell&#39;ASCII), cos&igrave; come molti codec hanno come sottoinsieme i codepage pi&ugrave; diffusi dell&#39;ASCII esteso. Ma questi sono dettagli che oggi si possono ignorare senza problemi.</p>
<p>Successivamente alla pubblicazione di questo articolo, &egrave; nata una discussione sul forum <a href="http://forum.ubuntu-it.org/index.php/topic,194890.0.html">programmazione di Ubuntu-it</a> in cui mi hanno fatto notare che la rappresentazione interna di stringe in Java &egrave; UTF-16, come <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html">riportato qui</a>. Tuttavia, ci&ograve; non toglie che &egrave; importante sapere sempre qual &egrave; la codifica dei propri dati in ingresso, e non affidarsi ai default encoding della particolare piattaforma.</p>
<p>
	Per concludere, qualche riferimento per approfondire. Il riferimento pi&ugrave; citato della rete &egrave; senza ombra di dubbio:<br />
	<a href="http://www.joelonsoftware.com/articles/Unicode.html">http://www.joelonsoftware.com/articles/Unicode.html</a><br />
	Ai pythonisti consiglio vivamente la lettura di questo tutorial che io reputo il migliore:<br />
	<a href="http://boodebr.org/main/python/all-about-python-and-unicode">http://boodebr.org/main/python/all-about-python-and-unicode</a><br />
	Se avete ereditato dei dati di cui non sapete nulla circa l&#39;encoding adoperato, vi consiglio di dare uno sguardo al modulo <span style="font-family: Courier New;">chardet</span>:<br />
	<a href="http://chardet.feedparser.org/">http://chardet.feedparser.org/</a><br />
	Infine, Wikipedia &egrave; un ottimo punto di partenza per le varie specifiche:<br />
	<a href="http://en.wikipedia.org/wiki/Unicode">http://en.wikipedia.org/wiki/Unicode</a><br />
	<a href="http://en.wikipedia.org/wiki/UTF-8">http://en.wikipedia.org/wiki/UTF-8</a><br />
	<a href="http://en.wikipedia.org/wiki/ISO_8859-1">http://en.wikipedia.org/wiki/ISO_8859-1</a><br />
	<a href="http://unicode.org/">http://unicode.org/</a></p>
<p>&nbsp;</p>
<p><i>Vi sar&ograve; grato se lascerete eventuali commenti e considerazioni. O magari mi direte se questo breve tutorial &egrave; stato utile o no.</i></p>
<p>Come dite?!?!? Non ho detto tutto??!? Ah gi&agrave; <img alt="" src="http://www.carminenoviello.com/wp-content/plugins/fckeditor-for-wordpress-plugin/smiles/msn/teeth_smile.gif" /> Non ho detto cosa significa l&#39;ideogramma 简, che si legge &#39;jiǎn&#39;. Ebbene significa &#39;semplice&#39; (come Unicode, no?!?!), ma anche &#39;semplificare&#39;; il suo codice Unicode &egrave; U+7B80 e la rappresentazione in UTF-8 &egrave; &#39;<span style="font-family: Courier New;">\xe7\xae\x80</span>&#39;, quindi 3 byte.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.carminenoviello.com/2008/05/20/unicode-in-5-minuti/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>PyCon Due</title>
		<link>http://www.carminenoviello.com/2008/04/25/pycon-due/</link>
		<comments>http://www.carminenoviello.com/2008/04/25/pycon-due/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 16:40:20 +0000</pubDate>
		<dc:creator>Carmine Noviello</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[firenze]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[pycon]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://www.carminenoviello.name/archives/43</guid>
		<description><![CDATA[Anche quest&#8217;anno si terr&#224; il PyCon, uno degli eventi pi&#249; attesi tra gli addetti ai lavori della comunit&#224; italiana Python. La conferenza si terr&#224; nei giorni 9, 10 e 11 Maggio, e ancora una volta la location &#232; la bellissima Firenze. L&#8217;anno scorso la conferenza fece registrare il tutto esaurito, e fu estremamente interessante: a [...]]]></description>
			<content:encoded><![CDATA[<p>Anche quest&#8217;anno si terr&agrave; il PyCon, uno degli eventi pi&ugrave; attesi tra gli addetti ai lavori della comunit&agrave; italiana Python. La conferenza si terr&agrave; nei giorni 9, 10 e 11 Maggio, e ancora una volta la location &egrave; la bellissima Firenze. L&#8217;anno scorso la conferenza fece registrare il tutto esaurito, e fu estremamente interessante: a mio modo di vedere uno dei migliori eventi nazionali nel settore dello sviluppo software. Pure questa volta cercher&ograve; di fare la mia parte presentando due talk. Uno della traccia &#8216;Imparare Python&#8217; intitolato &#8216;<i>Unicode in Python</i>&#8216;, che terr&ograve; insieme a Nicola Larosa: l&#8217;obiettivo di questo talk &egrave; illustrare l&#8217;utilizzo del sistema di codifiche Unicode in Python che, per esperienze dirette, &egrave; uno degli argomenti pi&ugrave; oscuri in un paese come il nostro che non pu&ograve; proprio farne a meno. Speriamo di cogliere l&#8217;obiettivo. <br />
L&#8217;altro talk, della traccia &#8216;Diffondere Python&#8217;, si intitola &#8216;<i>Una piattaforma per il map sharing ed i mediascape</i>&#8216; ed ha come obiettivo presentare una sperimentazione che stiamo conducendo nel mio Istituto sui sistemi mobile, con l&#8217;obiettivo di realizzare una piattaforma che permetta di interagire con repository cartografici e basi documentali distribuiti, il tutto attraverso protocolli di comunicazione WI-FI e ovviamente scritto in Python. Tratter&ograve; i problemi principali che abbiamo avuto nell&#8217;utilizzo di PythonCE e TK su Windows Mobile, accennando alle librerie pi&ugrave; diffuse per tale piattaforma e all&#8217;implementazione di Python per Symbian S60.</p>
<p>Infine, l&#8217;obiettivo n&deg;2 &egrave; portare la mia amata attrezzatura fotografica e portare a casa un &#8216;pezzo&#8217; della magnifica Firenze.</p>
<p>Ci vediamo presto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.carminenoviello.com/2008/04/25/pycon-due/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

